#include "Controller.h" #include "../Purifier/XTPurifier.h" #include "../Purifier/HBD3Purifier.h" #include "../camera/GalaxyCamera.h" #include "../camera/OPTCamera.h" #include "../Purifier/G4Purifier.h" #include "../PLC/SignalService.h" Controller::Controller() : m_Machine(nullptr) , m_CoreCommunication(nullptr) , m_Axis(nullptr) , m_StateCtrlWrapper(nullptr) , m_SysParamWrapper(nullptr) , m_AxisRecordWrapper(nullptr) , m_SignalStateWrapper(nullptr) , m_sendTdExitFlag(false){ } Controller::~Controller() { StopSend(); m_CoreCommunication->Shutdown(); DELP(m_CoreCommunication); DELP(m_Axis); DELP(m_StateCtrlWrapper); DELP(m_SysParamWrapper); DELP(m_AxisRecordWrapper); DELP(m_SignalStateWrapper); if (m_ComServer) m_ComServer->Shutdown(); DELP(m_ComServer); DELP(m_RemoteClient); DELP(m_MachineCtrl); DELP(m_ScannerCtrl); DELP(m_Purifier); BaseCtrl::SUninit(); } void Controller::Init(){ BaseCtrl::SInit(); m_jobController.SInit(); m_CoreCommunication = new CoreCommunication(); m_CoreCommunication->SetIOCfgWrapper(ConfigManager::GetInstance()->GetIoCfgWrapper()); m_CoreCommunication->SetSysParamWrapper(m_SysParamWrapper); m_CoreCommunication->SetPLCAxis(m_Axis); m_CoreCommunication->SetAlarmStateWrapper(m_SignalStateWrapper); m_CoreCommunication->SetAxisRecordWrapper(m_AxisRecordWrapper); m_CoreCommunication->Init(); m_CoreCommunication->Startup(); m_SysParamWrapper = new SysParamWrapper; m_StateCtrlWrapper = new StateCtrlWrapper; m_StateCtrlWrapper->Init(m_CoreCommunication); m_AxisRecordWrapper = new AxisRecordWrapper; m_AxisRecordWrapper->Init(m_CoreCommunication); m_SignalStateWrapper = new SignalStateWrapper(); m_Machine = ConfigManager::GetInstance()->GetMachine(); m_Machine->InitSignal(m_SignalStateWrapper, m_CoreCommunication); m_Machine->InitSysParam(m_SysParamWrapper, m_CoreCommunication); m_Axis = new PLCAxis(m_SysParamWrapper, m_StateCtrlWrapper); m_Machine->SetAxisAndSignal(m_SysParamWrapper, m_AxisRecordWrapper, m_Axis); SignalService::GetInstance().SetSignalStateCtrl(m_SignalStateWrapper); m_MachineCtrl = new MachineCtrl(); m_MachineCtrl->Init(m_CoreCommunication, m_SysParamWrapper, m_SignalStateWrapper, m_Axis); m_Machine->SetMachineCtrl(m_MachineCtrl); m_MachineCtrl->MachineStartup(); m_MachineCfg = ConfigManager::GetInstance()->GetMachineCfg(); m_ComServer = new ComServer(); //辅机服务 m_ComServer->Init(); m_ScannerCtrl = new ScannerCtrl(/*m_ServoManager*/); m_ScannerCtrl->SetJobController(&m_jobController); m_ScannerCtrl->Init(); m_ScannerCtrl->SetScannerPowerClient(m_ComServer->m_ScannerPowerClient); m_ComServer->m_ScannerPowerClient->Init(); m_ComServer->Startup(); m_RemoteClient = new RemoteClient(nullptr, nullptr/*m_ScannerCtrl*/); m_RemoteClient->Init(); //m_RemoteClient->SetCamera( nullptr /*m_Camera*/); if (m_RemoteClient->GetConfig()->m_Enable) { m_RemoteClient->StartRemote(); } m_ScannerCtrl->SetRemoteClient(m_RemoteClient); m_ScannerCtrl->SetMachineCtrl(m_MachineCtrl); switch (m_MachineCfg->m_PulifierType) { case PurifierTypeCfg::XT: { m_Purifier = new XTPurifier(m_ScannerCtrl); }break; case PurifierTypeCfg::HBD_PURIFIER_3: { m_Purifier = new HBD3Purifier(m_ScannerCtrl); }break; case PurifierTypeCfg::G4_PURIFIER: { m_Purifier = new G4Purifier(m_ScannerCtrl); }break; default: m_Purifier = new XTPurifier(m_ScannerCtrl); } m_Purifier->Init(); m_jobController.StartLoadPrepareJob(); //ConfigManager::GetInstance()->SendCfgToClients(); //发送配置到客户端 //BaseCtrl::SendToClients(); //发送控制参数到客户端 } void Controller::StartSend() { StopSend(); m_sendTdExitFlag = false; m_sendParamThread = std::thread([this] { while (!m_sendTdExitFlag) { m_ComServer->SendToClients(); m_Purifier->SendToClients(); this_thread::sleep_for(std::chrono::milliseconds(150)); } }); } void Controller::StopSend() { m_sendTdExitFlag = true; if (m_sendParamThread.joinable()) m_sendParamThread.join(); } void Controller::UpdateFile(const string& filePath) { m_jobController.LoadJob(filePath); }