#include "DataHandle.h" #include "FunC.h" #include "../utils/ConverType.h" #include "../utils/StringHelper.h" #define DELP(p) if(p){delete p; p = nullptr;} #define COLOR_RESET "\033[0m" // 假设你的系统支持ANSI颜色代码 #define COLOR_GREEN "\033[32m" #define COLOR_YELLOW "\033[33m" void DataHandle::DataCallBackProc(void* pthis, const ReadData& msg) { DataHandle* p = (DataHandle*)pthis; ReadData readData = msg; p->DataCallBackHandle(readData); } DataHandle::DataHandle() : m_dataCallBack(nullptr) , m_streamClient(nullptr) , m_printIndex(-1){ m_dataTypeMp[iBOOL] = "iBOOL"; m_dataTypeMp[iSHORT] = "iSHORT"; m_dataTypeMp[iUSHORT] = "iUSHORT"; m_dataTypeMp[iINT] = "iINT"; m_dataTypeMp[iUINT] = "iUINT"; m_dataTypeMp[iFLOAT] = "iFLOAT"; m_dataTypeMp[iSTRING] = "iSTRING"; m_dataTypeMp[iCHAR] = "iCHAR"; m_dataTypeMp[iUCHAR] = "iUCHAR"; m_dataTypeMp[iWORD] = "iWORD"; m_dataTypeMp[iDOUBLE] = "iDOUBLE"; m_dataTypeMp[iTIMET] = "iTIMET"; m_dataTypeMp[UNKNOW] = "UNKNOW"; } DataHandle::~DataHandle() { DELP(m_streamClient); } void DataHandle::Init() { m_streamClient = new StreamClient(); m_streamClient->SetCallBackFunc(this,&DataHandle::DataCallBackProc); m_streamClient->Init(); m_funcTest.SetStreamClient(m_streamClient); //stream::ResponseInfo* response = new stream::ResponseInfo(); //获取一层图层的数据 //m_streamClient->GetLayerByIndex(1, response); } void DataHandle::Stop() { if(m_streamClient) m_streamClient->Stop(); DELP(m_streamClient); } void DataHandle::PushMsg(WRITETYPE dataType, const string& nameKey, const string& strValue, DATATYPE valueType, DATAHANDLE handleType) { if (m_streamClient) { WriteData msg; msg.dataType = dataType; msg.nameKey = nameKey; msg.strValue = strValue; msg.valueType = valueType; msg.handleType = handleType; m_streamClient->PushMsg(msg); } } void DataHandle::PushMsg(const WriteData& wd) { if (m_streamClient) { m_streamClient->PushMsg(wd); } } void DataHandle::PrintValue(const ReadData& msg){ if (m_printIndex != msg.dataType) return; auto it = msg.its.begin(); while (it != msg.its.end()) { it->nameKey; string valueType = m_dataTypeMp[(*it).valueType]; if (msg.dataType >= STOPALARMCFGPARAM && msg.dataType <= WARNALARMCFGPARAM) { printf("接收:dataType:%d,nameKey:%*s, content:%s,isEnable:%d,isAlarm:%d,isShow:%d\n", msg.dataType, 33, it->nameKey.data(), it->content.c_str(), it->isEnable, it->isAlarm, it->isShow); } else if (msg.dataType == POWDERSETPARAM) { printf("接收:dataType:%d,startLayer:%d,endLayer:%d,powder:%.2f\n", msg.dataType,it->start_layer, it->end_layer, it->powder); } else { printf("接收:dataType:%d,nameKey:%*s, strvalue:%*s, valueType:%s\n", msg.dataType, 33, it->nameKey.data(), 13, it->strValue.data(), valueType.data()); } ++it; } printf("共有参数%zd个...\n", msg.its.size()); if(m_printIndex == LASERPARAM || m_printIndex == XYSCANSTATE){ static int count = 0; ++count; if (count == 4) { count = 0; m_printIndex = -1; } //激光参数默认4个 } else if (m_printIndex == COMMUNICATIONCFGPARAM) { static int count = 0; ++count; if (count == 23) { count = 0; m_printIndex = -1; } //激光参数默认4个 } else { m_printIndex = -1; } } void DataHandle::DataCallBackHandle(const ReadData& msg) { if (msg.dataType == VERSIONRSP) { if (m_printIndex != VERSIONRSP) return; m_version = msg.its.front().strValue; printf("版本:%s\n", m_version.data()); m_printIndex = -1; } else { PrintValue(msg); } } void DataHandle::Usage() { printf(COLOR_GREEN "print TestClient usage:\n" COLOR_RESET); printf(" h: " COLOR_YELLOW "print help information...\n" COLOR_RESET); printf(" e: " COLOR_YELLOW "exit program...\n" COLOR_RESET); printf(" 1: " COLOR_YELLOW "test all...\n" COLOR_RESET); printf(" 2: " COLOR_YELLOW "test axis move interface...\n" COLOR_RESET); printf(" 3: " COLOR_YELLOW "test scan control interface...\n" COLOR_RESET); printf(" 4: " COLOR_YELLOW "test registration interface...\n" COLOR_RESET); printf(" 5: " COLOR_YELLOW "test camera interface...\n" COLOR_RESET); printf(" 6: " COLOR_YELLOW "test purifier interface...\n" COLOR_RESET); printf(" 7: " COLOR_YELLOW "test config interface...\n" COLOR_RESET); printf(" 8: " COLOR_YELLOW "test directory interface...\n" COLOR_RESET); printf(" 100: " COLOR_YELLOW "start test recv param interface...\n" COLOR_RESET); } void DataHandle::ParamReadUsage() { printf(COLOR_GREEN "print param usage:\n" COLOR_RESET); printf(" h: " COLOR_YELLOW "print this information...\n" COLOR_RESET); printf(" q: " COLOR_YELLOW "return to the previous level...\n" COLOR_RESET); printf(" 0: " COLOR_YELLOW "print alarm param...\n" COLOR_RESET); printf(" 1: " COLOR_YELLOW "print version rsp...\n" COLOR_RESET); printf(" 2: " COLOR_YELLOW "print io signal rsp...\n" COLOR_RESET); printf(" 3: " COLOR_YELLOW "print system param data...\n" COLOR_RESET); printf(" 4: " COLOR_YELLOW "print laserchiller data...\n" COLOR_RESET); printf(" 5: " COLOR_YELLOW "print ups param data...\n" COLOR_RESET); printf(" 6: " COLOR_YELLOW "print temp ctrl param data...\n" COLOR_RESET); printf(" 7: " COLOR_YELLOW "print oxygenparam data...\n" COLOR_RESET); printf(" 8: " COLOR_YELLOW "print laser param data...\n" COLOR_RESET); printf(" 9: " COLOR_YELLOW "print simplesupplyparam_v10 data...\n" COLOR_RESET); printf(" 10: " COLOR_YELLOW "print SIMPLESUPPLYPARAM_V21 data...\n" COLOR_RESET); printf(" 11: " COLOR_YELLOW "print SIMPLESUPPLYPARAM_V22 data...\n" COLOR_RESET); printf(" 12: " COLOR_YELLOW "print purifier param data...\n" COLOR_RESET); printf(" 13: " COLOR_YELLOW "print power meter param data...\n" COLOR_RESET); printf(" 14: " COLOR_YELLOW "print powder supply simple param data...\n" COLOR_RESET); printf(" 15: " COLOR_YELLOW "print scanner power param data...\n" COLOR_RESET); printf(" 16: " COLOR_YELLOW "print axismold data...\n" COLOR_RESET); printf(" 17: " COLOR_YELLOW "print axismold slave data...\n" COLOR_RESET); printf(" 18: " COLOR_YELLOW "print axisclean data...\n" COLOR_RESET); printf(" 19: " COLOR_YELLOW "print axisclean slave data...\n" COLOR_RESET); printf(" 20: " COLOR_YELLOW "print axisload data...\n" COLOR_RESET); printf(" 21: " COLOR_YELLOW "print axismarm data...\n" COLOR_RESET); printf(" 22: " COLOR_YELLOW "print axismsupply data...\n" COLOR_RESET); printf(" 23: " COLOR_YELLOW "print axisele data...\n" COLOR_RESET); printf(" 24: " COLOR_YELLOW "print axisele slave data...\n" COLOR_RESET); printf(" 25: " COLOR_YELLOW "print paramlimitcfg param data...\n" COLOR_RESET); printf(" 26: " COLOR_YELLOW "print extcfg param data...\n" COLOR_RESET); printf(" 27: " COLOR_YELLOW "print runcfg param data...\n" COLOR_RESET); printf(" 28: " COLOR_YELLOW "print infraredtemp cfg param data...\n" COLOR_RESET); printf(" 29: " COLOR_YELLOW "print machine cfg param data...\n" COLOR_RESET); printf(" 30: " COLOR_YELLOW "print favorite cfg param data...\n" COLOR_RESET); printf(" 31: " COLOR_YELLOW "print cameracalibration cfg param data...\n" COLOR_RESET); printf(" 32: " COLOR_YELLOW "print uishow cfg param data...\n" COLOR_RESET); printf(" 33: " COLOR_YELLOW "print recoatcheck cfg param data...\n" COLOR_RESET); printf(" 34: " COLOR_YELLOW "print powderestimate cfg param data...\n" COLOR_RESET); printf(" 35: " COLOR_YELLOW "print communication cfg param data...\n" COLOR_RESET); printf(" 36: " COLOR_YELLOW "print stopalarm cfg param data...\n" COLOR_RESET); printf(" 37: " COLOR_YELLOW "print pausealarm cfg param data...\n" COLOR_RESET); printf(" 38: " COLOR_YELLOW "print warnalarm cfg param data...\n" COLOR_RESET); printf(" 39: " COLOR_YELLOW "print powder cfg param data...\n" COLOR_RESET); printf(" 40: " COLOR_YELLOW "print powder cfg param data...\n" COLOR_RESET); printf(" 41: " COLOR_YELLOW "print scaner ctrl cfg param data...\n" COLOR_RESET); printf(" 42: " COLOR_YELLOW "print moldcfg param data...\n" COLOR_RESET); printf(" 43: " COLOR_YELLOW "print loadcfg param data...\n" COLOR_RESET); printf(" 44: " COLOR_YELLOW "print armcfgparam data...\n" COLOR_RESET); printf(" 45: " COLOR_YELLOW "print supplycfgparam data...\n" COLOR_RESET); printf(" 46: " COLOR_YELLOW "print cleancfgparam data...\n" COLOR_RESET); printf(" 47: " COLOR_YELLOW "print elecfgparam data...\n" COLOR_RESET); printf(" 48: " COLOR_YELLOW "print loadparamrsp data...\n" COLOR_RESET); printf(" 49: " COLOR_YELLOW "print scan ctrl state data...\n" COLOR_RESET); printf(" 50: " COLOR_YELLOW "print scan ctrl Param data...\n" COLOR_RESET); printf(" 51: " COLOR_YELLOW "print xy scan state data...\n" COLOR_RESET); printf(" 52: " COLOR_YELLOW "print camera param data...\n" COLOR_RESET); } int DataHandle::Request(int index) { int result = 0; string userInput; switch (index) { case 1: m_funcTest.AllTest(); break; case 2: m_funcTest.AxisMoveTest(); break; case 3: m_funcTest.ScanCtrlTest(); break; case 4: m_funcTest.RegistrationTest(); break; case 5: m_funcTest.CameraTest(); break; case 6: m_funcTest.PurifierTest(); break; case 7: m_funcTest.ConfigTest(); break; case 8: m_funcTest.DirectoryTest(); break; case 100: ParamReadUsage(); while (printf("*请输入命令:") && std::getline(std::cin, userInput)) { if (userInput == "q") { printf("返回上一级...\n"); break; } else if (userInput.empty()) { continue; } else if (userInput == "h") { //打印用法 ParamReadUsage(); } else if (userInput.find("update") != string::npos) { //更新数据到服务器 UpdateParamToServer(userInput); } else { //接收指定的参数 ReceiveParam(ConverType::TryToI(userInput)); } } break; default: result = -1; break; } return result; } void DataHandle::ReceiveParam(int index) { if (index == VERSIONRSP) { PushMsg(VERSIONREQ); //获取版本信息 } if (index == SCANERCTRLCFGPARAM) { ::stream::ResponseAny resp; stream::ScannerCrtlCfgResp result; WriteData wdata{ SCANERCTRLCFG }; m_streamClient->Request(wdata, &resp); if (resp.data().Is()) { resp.data().UnpackTo(&result); PrintScanerCfg(result); } index = -1; } else if (index >= PARAMLIMITCFGPARAM && index <= ELECFGPARAM) { PushMsg(REQUEST); } else if(index == LOADPARAMRSP){ PushMsg(LOADPARAM); } else if (index == XYSCANSTATE) { PushMsg(REQUEST,to_string(index)); } m_printIndex = index; while (m_printIndex >= 0) { Sleep(20); static int count = 0; ++count; if (count == 50 && m_printIndex >= 0) { //等待1s,没用收到消息,判断为服务器没用发送 count = 0; printf("服务器没有发送此参数...\n"); break; } } } void DataHandle::PrintScanerCfg(const stream::ScannerCrtlCfgResp& result) { result.scannercfg().size(); for (auto& rsp : result.scannercfg()) { printf("seqNo:%d\n",rsp.seqno()); printf("controlno:%d,serialno:%d,controlType:%d,cardname:%s,cardip:%s,isenable:%d,hadassign:%d,hadmatch:%d\n", rsp.controlno(), rsp.serialno(), rsp.controltype(), rsp.cardname().data(), rsp.cardip().data(), rsp.isenable(), rsp.hadassign(), rsp.hadmatch()); for (auto& fp : rsp.fixpointdata()) { printf("(pixpoint)id:%d,cno:%d,pointx:%f,pointy:%f,duration:%d\n" , fp.id(), fp.cno(), fp.pointx(), fp.pointy(), fp.duration()); } //打印部分内容 auto& spc = rsp.scanparamcfg(); printf("(scanparamcfg)edgelevel:%d,edgelevelmin:%d,edgelevelmax:%d,jumpDelay:%u\n", spc.edgelevel(), spc.edgelevelmin(), spc.edgelevelmax(), spc.jumpdelay()); auto& hp = rsp.hatchingparams(); printf("(hatchingparams)edgelevel:%d,edgelevelmin:%d,edgelevelmax:%d,jumpDelay:%u\n", hp.edgelevel(), hp.edgelevelmin(), hp.edgelevelmax(), hp.jumpdelay()); auto& bp = rsp.borderparams(); printf("(borderParams)edgelevel:%d,edgelevelmin:%d,edgelevelmax:%d,jumpDelay:%u\n", hp.edgelevel(), hp.edgelevelmin(), hp.edgelevelmax(), hp.jumpdelay()); auto& sp = rsp.supportparams(); printf("(supportparams)edgelevel:%d,edgelevelmin:%d,edgelevelmax:%d,jumpDelay:%u\n", sp.edgelevel(), sp.edgelevelmin(), sp.edgelevelmax(), sp.jumpdelay()); auto& cpc = rsp.correctparamcfg(); printf("(correctparamcfg)xmeasuremin:%.3f,xmeasuremax:%.3f,ymeasuremin:%.3f,ymeasuremax:%.3f\n", cpc.xmeasuremin(), cpc.xmeasuremax(), cpc.ymeasuremin(), cpc.ymeasuremax()); auto& stc = rsp.scantestcfg(); printf("(scantestcfg)debugshape:%d,shapesize:%d,shapesizemin:%d,shape_size_max:%d\n", stc.debugshape(), stc.shapesize(), stc.shapesizemin(), stc.shape_size_max()); auto& swc = rsp.skywritingcfg(); printf("(skywritingcfg)debugshape:%d,shapesize:%.3f,shapesizemin:%.3f,shape_size_max:%.3f\n", swc.isenable(), swc.timelag(), swc.timelagmin(), swc.timelagmax()); for (auto& pc : rsp.powercompensate()) { printf("(powercompensate)cno:%d,percent:%d,value:%.3f,value_min:%.3f,value_max:%.3f\n", pc.cno(), pc.percent(), pc.value(), pc.value_min(),pc.value_max()); } for (auto& tpc : rsp.tpowercompensate()) { printf("(tpowercompensate)cno:%d,id:%d,value:%u,value_min:%u,value_max:%.3f\n", tpc.cno(), tpc.id(), tpc.startminute(), tpc.endminute(), tpc.compensate()); } } } //选择一个参数更新到服务 void DataHandle::UpdateParamToServer(const string& input) { WriteData writeData; int index = ConverType::TryToI(input.substr(7)); switch (index) { case PARAMLIMITCFGPARAM: break; case EXTCFGPARAM: break; case RUNCFGPARAM: PushMsg(RUNCFG, "FanFreqLowLimit", to_string(11), iFLOAT);//runcfg test break; case INFRAREDTEMPCFGPARAM: PushMsg(INFRAREDTEMPCFG, "ReflectTempAssist", to_string(11), iFLOAT); //infraredtempcfg test break; case MACHINECFGPARAM: PushMsg(MACHINECFG, "lastStartTime", to_string(time(nullptr)), iTIMET); //machinecfg test break; case FAVORITECFGPARAM: PushMsg(FAVORITECFG, "lastStartTime", to_string(time(nullptr)), iSTRING,ADD); //FavoriteCfg test break; case CAMERACALIBRATIONCFGPARAM: PushMsg(CAMERACALIBRATIONCFG, "ShowCorners", to_string(true), iBOOL); //CameracalibrationCfg test break; case UISHOWCFGPARAM: PushMsg(UISHOWCFG, "ItemInnerSpacingHeight", to_string(125.0f), iFLOAT); //UIshowCfg test break; case RECOATCHECKCFGPARAM: PushMsg(RECOATCHECKCFG, "UncoverPercentage", to_string(125.0f), iFLOAT); //RecoatcheckCfg test break; case POWDERESTIMATECFGPARAM: PushMsg(POWDERESTIMATECFG, "TotalGrids", to_string(4201), iUINT); //PowderestimateCfg test break; case COMMUNICATIONCFGPARAM: PushMsg(COMMUNICATIONCFG, "Type_XT_PURIFIER", to_string(4), iINT); //CommunicationCfg test break; case STOPALARMCFGPARAM: //AlarmCfgWrapper stop参数 PushMsg(ALARMCFG, "WindOverLimitAlarm", to_string(0), iINT); break; case PAUSEALARMCFGPARAM: //AlarmCfgWrapper pause参数 PushMsg(ALARMCFG, "HeatingDisconnectAlarm", to_string(0), iINT); break; case WARNALARMCFGPARAM: //AlarmCfgWrapper warn参数 PushMsg(ALARMCFG, "SupplyPipeBlockWarn", to_string(0), iINT); break; case POWDERSETPARAM: //PowderSet参数 writeData = WriteData{ POWDERSET, "", "", UNKNOW,TOTAL }; writeData.items.emplace_back(Item{"","",UNKNOW,"",0,0,0,1,100,2}); PushMsg(writeData); break; case SCANERCTRLCFGPARAM: writeData = WriteData{ SCANERCTRLCFG, "1", to_string(SCCFGP::CTRLCFG), UNKNOW,UPDATE }; writeData.items.emplace_back(Item{ "CardIP","127.0.0.1",iSTRING}); PushMsg(writeData); writeData = WriteData{ SCANERCTRLCFG, "1",to_string(SCCFGP::POWERCOMPENSATECFG), UNKNOW,UPDATE }; writeData.items.emplace_back(Item{ "10","1.323",iFLOAT }); PushMsg(writeData); break; case ELECFGPARAM: break; case LOADPARAMRSP: break; case XYSCANSTATE: break; default: break; } }