GrpcPrint/PrintS/Controller/Controller.cpp

199 lines
5.4 KiB
C++

#include "Controller.h"
#include "../Purifier/XTPurifier.h"
#include "../Purifier/HBD3Purifier.h"
#include "../camera/GalaxyCamera.h"
#include "../camera/OPTCamera.h"
//#include "../Purifier/G4Purifier.h"
#include "../Purifier/M1Purifier.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)
, m_reg(nullptr){
}
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);
DELP(m_reg);
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_SysParamWrapper->Init(m_CoreCommunication);
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->GetValue()) {
m_RemoteClient->StartRemote();
}
m_ScannerCtrl->SetRemoteClient(m_RemoteClient);
m_ScannerCtrl->SetMachineCtrl(m_MachineCtrl);
switch (m_MachineCfg->m_PulifierType->GetValue())
{
//case PurifierTypeCfg::HBD_PURIFIER_1: {
// m_Purifier = new HBD1Purifier(m_GTSController->GetDacState(),m_ScannerCtrl);
//
//}break;
case PurifierTypeCfg::XT: {
m_Purifier = new XTPurifier(m_ScannerCtrl);
}break;
case PurifierTypeCfg::HBD_PURIFIER_3: {
m_Purifier = new HBD3Purifier(m_ScannerCtrl);
}break;
case PurifierTypeCfg::M1: {
m_Purifier = new M1Purifier(m_ScannerCtrl);
}break;
//case PurifierTypeCfg::HBD_PURIFIER_2: {
// m_Purifier = new HBD2Purifier(m_GTSController->GetDacState(), m_ScannerCtrl);
//}break;
default:
m_Purifier = new XTPurifier(m_ScannerCtrl);
}
m_Purifier->Init();
m_reg = new Registration();
m_ExtCfg = ConfigManager::GetInstance()->GetExtCfg();
if (m_ExtCfg->m_CameraType == ExtCfg::Galaxy) {
m_Camera = new GalaxyCamera();
}
else if (m_ExtCfg->m_CameraType == ExtCfg::OPT) {
m_Camera = new OPTCamera();
}
else {
m_Camera = new GalaxyCamera();
}
if (m_ExtCfg->m_UseCamera) {
if (m_Camera->Init()) {
m_Camera->StartUp();
}
}
m_jobController.StartLoadPrepareJob();
}
void Controller::StartSend() {
StopSend();
m_sendTdExitFlag = false;
m_sendParamThread = std::thread([this] {
while (!m_sendTdExitFlag) {
m_ComServer->SendToClients();
m_Purifier->SendToClients();
//轴参数
m_Axis->m_Mold->GetState()->SendToClients(AXISMOLD);
m_Axis->m_MoldSlave->GetState()->SendToClients(AXISMOLDSLAVE);
m_Axis->m_Clean->GetState()->SendToClients(AXISCLEAN);
m_Axis->m_CleanSlave->GetState()->SendToClients(AXISCLEANSLAVE);
m_Axis->m_Load->GetState()->SendToClients(AXISLOAD);
m_Axis->m_Arm->GetState()->SendToClients(AXISMARM);
m_Axis->m_Supply->GetState()->SendToClients(AXISMSUPPLY);
m_Axis->m_Ele->GetState()->SendToClients(AXISELE);
m_Axis->m_EleSlave->GetState()->SendToClients(AXISELESLAVE);
//扫描参数
static int count = 0;
++count;
if (count == 2) { //发送频率降低
m_ScannerCtrl->SendToClients();
m_Camera->SendToClients();
count = 0;
}
this_thread::sleep_for(std::chrono::milliseconds(250));
}
});
}
void Controller::StopSend() {
m_sendTdExitFlag = true;
if (m_sendParamThread.joinable()) m_sendParamThread.join();
}
void Controller::UpdateFile(const string& filePath) {
m_jobController.LoadJob(filePath);
}