#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_controler(nullptr) , m_testFlag(false){ } DataHandle::~DataHandle() { Stop(); m_testFlag = true; if (m_testTd.joinable()) m_testTd.join(); DELP(m_streamServer); DELP(m_controler); } 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(); //WriteData(); m_streamServer = new StreamServer(m_config->GetMachine()); //测试线程 m_testTd = std::thread ([this] { static float i = 10.12540f; while (!m_testFlag) { WriteData* wd = new WriteData(); wd->dataType = RESPOND; wd->strValue = std::to_string(i); wd->nameKey = "hello"; wd->result = true; wd->valueType = iFLOAT; if (m_streamServer && m_streamServer->GetClient()) m_streamServer->GetClient()->SetPushMsg(wd); std::this_thread::sleep_for(std::chrono::seconds(1)); } }); m_testTd.detach(); m_streamServer->SetCallBackFunc(this, &DataHandle::DataCallBackProc); m_streamServer->Init(); m_controler = new Controler(); m_controler->Init(); } void DataHandle::Run() { if (m_streamServer) m_streamServer->Run(); } void DataHandle::Stop() { if(m_streamServer) m_streamServer->Stop(); } 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_controler->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return; m_controler->m_Machine->LoadIn(); break; //载入 case LOADOUT: if (!m_controler->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return; m_controler->m_Machine->LoadOut(); break; //载出 case SUPPLYAXLEAFTER: //供粉轴后移 m_controler->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::BACK); break; case SUPPLYAXLEFRONT: //供粉轴前移 m_controler->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::FRONT); break; case SUPPLYAXLEAFTERCONTSTART: //供粉轴后移连续 m_controler->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::BACK,true,true); break; case SUPPLYAXLEAFTERCONTSTOP: m_controler->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::BACK, true, false); break; //供粉轴后移连续 case SUPPLYAXLEFRONTCONTSTART: //供粉轴前移连续开始 m_controler->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::FRONT, true, true); break; case SUPPLYAXLEFRONTCONTSTOP: //供粉轴前移连续结束 m_controler->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::FRONT, true, false); break; case PAVEAXLEFRONT: //铺粉臂前移 m_controler->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::FRONT); break; case PAVEAXLEFRONTCONTSTART: //铺粉臂前移连续 m_controler->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::FRONT,true,true); break; case PAVEAXLEFRONTCONTSTOP: //铺粉臂前移连续 m_controler->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::FRONT,true,false); break; case PAVEAXLEAFTER: //铺粉臂后移 m_controler->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::BACK); break; case PAVEAXLEAFTERCONTSTART: //铺粉臂后移连续开始 m_controler->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::BACK, true, true); break; case PAVEAXLEAFTERCONTSTOP: //铺粉臂后移连续停止 m_controler->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::BACK, true, false); break; case PAVEAXLECLEAR: m_controler->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::ZERO); break; //铺粉臂清零 case PRINTAXLEUP: m_controler->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::UP); break; //成型缸上升 case PRINTAXLEUPCONTSTART: //成型缸连续上升开始 m_controler->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::UP, true, true); break; case PRINTAXLEUPCONTSTOP: //成型缸连续上升停止 m_controler->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::UP, true, false); break; case PRINTAXLEDOWN: m_controler->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::DOWN); break; //成型缸下降 case PRINTAXLEDOWNCONTSTART: m_controler->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::DOWN, true, true); break; //成型缸连续下降开始 case PRINTAXLEDOWNCONTSTOP: //成型缸连续下降停止 m_controler->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::DOWN,true,false); break; case PRINTAXLECLEAR: //成型缸清零 m_controler->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::ZERO); break; case TRANSFERAXIELEFT: //移栽轴左移 if (!m_controler->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return; m_controler->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::LEFT); break; case TRANSFERAXIELEFTCONTSTART: //移栽轴连续左移开始 m_controler->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::LEFT, true,true); break; case TRANSFERAXIELEFTCONTSTOP: //移栽轴连续左移停止 m_controler->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::LEFT, true, false); break; case TRANSFERAXIERIGHT: //移栽轴右移 if (!m_controler->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return; m_controler->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::RIGHT); break; case TRANSFERAXIERIGHTCONTSTART: //移栽轴连续右移 if (!m_controler->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return; m_controler->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::RIGHT,true,true); break; case TRANSFERAXIERIGHTCONTSTOP: //移栽轴连续右移 if (!m_controler->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return; m_controler->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::RIGHT, true, false); break; case TRANSFERAXIECLEAR: //移栽轴清零 m_controler->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::ZERO); break; case SCANERSTART: //开始扫描 scanners = m_controler->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_controler->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_controler->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_controler->m_ScannerCtrl->GetScanners(); index = atoi(msg.strValue.c_str()); if (index >= (*scanners).size()) return; if ((*scanners)[index]) (*scanners)[index]->StopHeatingScannerTest(); break; case INITERRORINFOSREQ: //初始化错误信息 wd = new WriteData(); wd->strValue = m_controler->m_ScannerCtrl->GetInitErrorInfos(); wd->dataType = INITERRORINFOSRSP; wd->valueType = iSTRING; msg.clientPtr->SetPushMsg(wd); break; case VERSIONREQ: //获取版本信息 wd = new WriteData(); wd->strValue = g_SystemInfo->m_ProductVersion; wd->dataType = VERSIONRSP; wd->valueType = iSTRING; msg.clientPtr->SetPushMsg(wd); break; default: break; } }