#include "DataHandle.h" #include #include #include "../SystemInfo.h" void DataHandle::DataCallBackProc(void* pthis, const ReadData& msg) { DataHandle* p = (DataHandle*)pthis; p->DataCallBackHandle(msg); } DataHandle::DataHandle() : m_dataCallBack(nullptr) , m_streamServer(nullptr) , m_config(nullptr) , m_controller(nullptr) , m_testFlag(false){ } DataHandle::~DataHandle() { Stop(); m_testFlag = true; if (m_testTd.joinable()) m_testTd.join(); DELP(m_streamServer); DELP(m_controller); } void DataHandle::Init() { m_config = ConfigManager::GetInstance(); m_config->PreInit(); g_LngManager = new LanguageManager(); g_LngManager->Init(); g_Lang = &m_config->GetMachineCfg()->m_I18NLang[0]; m_config->Init(); m_streamServer = new StreamServer(m_config->GetMachine()); //测试线程 m_testTd = std::thread ([this] { static float i = 10.12540f; while (!m_testFlag) { ClientWrapper::Instance()->PushAllClient(new WriteData(RESPOND, { {string("hello"),std::to_string(i),iFLOAT}})); std::this_thread::sleep_for(std::chrono::seconds(1)); } }); m_testTd.detach(); m_streamServer->SetCallBackFunc(this, &DataHandle::DataCallBackProc); m_streamServer->Init(); m_controller = new Controller(); m_controller->Init(); } void DataHandle::Run() { if (m_streamServer) m_streamServer->Run(); if(m_controller) m_controller->StartSend(); } void DataHandle::Stop() { if(m_streamServer) m_streamServer->Stop(); if (m_controller) m_controller->StopSend(); } void DataHandle::DataCallBackHandle(const ReadData& msg) { vector* scanners = nullptr; WriteData* wd = nullptr; int index = 0; switch (msg.dataType) { case GET: break; case SET: break; case LOAD: if (!m_controller->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return; m_controller->m_Machine->LoadIn(); break; //载入 case LOADOUT: if (!m_controller->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return; m_controller->m_Machine->LoadOut(); break; //载出 case SUPPLYAXLEAFTER: //供粉轴后移 m_controller->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::BACK); break; case SUPPLYAXLEFRONT: //供粉轴前移 m_controller->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::FRONT); break; case SUPPLYAXLEAFTERCONTSTART: //供粉轴后移连续 m_controller->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::BACK,true,true); break; case SUPPLYAXLEAFTERCONTSTOP: m_controller->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::BACK, true, false); break; //供粉轴后移连续 case SUPPLYAXLEFRONTCONTSTART: //供粉轴前移连续开始 m_controller->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::FRONT, true, true); break; case SUPPLYAXLEFRONTCONTSTOP: //供粉轴前移连续结束 m_controller->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::FRONT, true, false); break; case PAVEAXLEFRONT: //铺粉臂前移 m_controller->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::FRONT); break; case PAVEAXLEFRONTCONTSTART: //铺粉臂前移连续 m_controller->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::FRONT,true,true); break; case PAVEAXLEFRONTCONTSTOP: //铺粉臂前移连续 m_controller->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::FRONT,true,false); break; case PAVEAXLEAFTER: //铺粉臂后移 m_controller->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::BACK); break; case PAVEAXLEAFTERCONTSTART: //铺粉臂后移连续开始 m_controller->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::BACK, true, true); break; case PAVEAXLEAFTERCONTSTOP: //铺粉臂后移连续停止 m_controller->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::BACK, true, false); break; case PAVEAXLECLEAR: m_controller->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::ZERO); break; //铺粉臂清零 case PRINTAXLEUP: m_controller->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::UP); break; //成型缸上升 case PRINTAXLEUPCONTSTART: //成型缸连续上升开始 m_controller->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::UP, true, true); break; case PRINTAXLEUPCONTSTOP: //成型缸连续上升停止 m_controller->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::UP, true, false); break; case PRINTAXLEDOWN: m_controller->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::DOWN); break; //成型缸下降 case PRINTAXLEDOWNCONTSTART: m_controller->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::DOWN, true, true); break; //成型缸连续下降开始 case PRINTAXLEDOWNCONTSTOP: //成型缸连续下降停止 m_controller->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::DOWN,true,false); break; case PRINTAXLECLEAR: //成型缸清零 m_controller->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::ZERO); break; case TRANSFERAXIELEFT: //移栽轴左移 if (!m_controller->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return; m_controller->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::LEFT); break; case TRANSFERAXIELEFTCONTSTART: //移栽轴连续左移开始 m_controller->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::LEFT, true,true); break; case TRANSFERAXIELEFTCONTSTOP: //移栽轴连续左移停止 m_controller->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::LEFT, true, false); break; case TRANSFERAXIERIGHT: //移栽轴右移 if (!m_controller->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return; m_controller->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::RIGHT); break; case TRANSFERAXIERIGHTCONTSTART: //移栽轴连续右移 if (!m_controller->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return; m_controller->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::RIGHT,true,true); break; case TRANSFERAXIERIGHTCONTSTOP: //移栽轴连续右移 if (!m_controller->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return; m_controller->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::RIGHT, true, false); break; case TRANSFERAXIECLEAR: //移栽轴清零 m_controller->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::ZERO); break; case SCANERSTART: //开始扫描 scanners = m_controller->m_ScannerCtrl->GetScanners(); index = atoi(msg.strValue.c_str()); if (index >= (*scanners).size()) return; if ((*scanners)[index]) (*scanners)[index]->StartDebugTest(); break; case SCANERSTOP: //停止扫描 scanners = m_controller->m_ScannerCtrl->GetScanners(); index = atoi(msg.strValue.c_str()); if (index >= (*scanners).size()) return; if ((*scanners)[index]) (*scanners)[index]->StopDebugTest(); break; case STARTHEATINGSCANNERTEST: //开始振镜预热测试 scanners = m_controller->m_ScannerCtrl->GetScanners(); index = atoi(msg.strValue.c_str()); if (index >= (*scanners).size()) return; if((*scanners)[index]) (*scanners)[index]->StartHeatingScannerTest(); break; case STOPHEATINGSCANNERTEST: //停止振镜预热 scanners = m_controller->m_ScannerCtrl->GetScanners(); index = atoi(msg.strValue.c_str()); if (index >= (*scanners).size()) return; if ((*scanners)[index]) (*scanners)[index]->StopHeatingScannerTest(); break; case INITERRORINFOSREQ: //初始化错误信息 msg.clientPtr->PushMsg(new WriteData(INITERRORINFOSRSP, { {string(""), m_controller->m_ScannerCtrl->GetInitErrorInfos(), iSTRING} })); break; case VERSIONREQ: //获取版本信息 msg.clientPtr->PushMsg(new WriteData(VERSIONRSP, { { string(""), g_SystemInfo->m_ProductVersion, iSTRING } })); break; case RESETELEC: m_controller->m_ComServer->m_PowerMeterClient->ResetElec(); default: break; } }