#pragma once #include "../LanguageManager.h" #include "../Controller/Base.h" struct IntelliScanStateSCT { bool m_GalvanometerScannerTempOK; //振镜预热完成 float m_ActualPosition; //真实位置 float m_SetPosition; //设值位置 float m_PositionError; //位置误差 float m_GalvanometerScannerTemp; //振镜温度 float m_ServoBoardTemp; //伺服板卡温度 float m_PDSupplyVoltage; //PD供电电压 float m_DSPCoreSupplyVoltage; //DSP核心供电电压 float m_DSPIOVoltage; //DSP输入输出电压 float m_AnalogSectionVoltage; //模拟区电压 float m_ADConverterSupplyVoltage; //AD转换供电电压 float m_PDSupplyCurrent; //PD供电电流 bool m_IsGalvanometerScannerOutputStageOn; //振镜输出级生效 bool m_IsGalvanometerScannerHeaterOutputStageOn; //振镜加热器输出级生效 bool m_IsInternalVoltagesNormal; //内部电压正常 bool m_IsPositionErrorNormalRange; //位置误差正常 bool m_IsScannerAndServoBoradTempNormal; //振镜和伺服温度正常 bool m_IsBootingProcessCompleted; //启动处理完成 bool m_IsCriticalError; //发生严重错误 bool m_IsExternalPowderLow; //外部电压欠压 bool m_IsScanSystemTempOverLimit; //扫描系统超温 bool m_IsADConverterSuccessfullyInit; //AD转换初始化成功 bool m_IsScannerReachedCriticalEdgePos; //振镜到达临界边缘位置 bool m_IsAllControlParametersValid; //允许控制参数 bool m_IsADConverterVoltageOK; //AD转换供电正常 bool m_IsAnalogSetionVoltageOK; //模拟区电压正常 bool m_IsDSPIOVoltageOK; //DSP 输入输出电压正常 bool m_IsDSPCoreVoltageOK; //DSP核心供电正常 bool m_IsAGCVoltageOK; //AGC电压正常 bool m_IsServoBoradOperationTempNormal; //伺服板卡操作温度正常 bool m_IsGalvanometerScannerOperationTempNormal; //振镜操作温度正常 int m_LowState; int m_HighState; int m_StopEven; }; #pragma pack(1) class IntelliScanState{ public: IntelliScanState() : m_GalvanometerScannerTempOK(new BoolData("GalvanometerScannerTempOK", u8"振镜预热完成")) , m_ActualPosition(new FloatData("m_ActualPosition", u8"真实位置")) , m_SetPosition(new FloatData("SetPosition", u8"设值位置")) , m_PositionError(new FloatData("PositionError", u8"位置误差")) , m_GalvanometerScannerTemp(new FloatData("GalvanometerScannerTemp", u8"振镜温度")) , m_ServoBoardTemp(new FloatData("ServoBoardTemp", u8"伺服板卡温度")) , m_PDSupplyVoltage(new FloatData("PDSupplyVoltage", u8"PD供电电压")) , m_DSPCoreSupplyVoltage(new FloatData("DSPCoreSupplyVoltage", u8"DSP核心供电电压")) , m_DSPIOVoltage(new FloatData("DSPIOVoltage", u8"DSP输入输出电压")) , m_AnalogSectionVoltage(new FloatData("AnalogSectionVoltage", u8"模拟区电压")) , m_ADConverterSupplyVoltage(new FloatData("ADConverterSupplyVoltage", u8"AD转换供电电压")) , m_PDSupplyCurrent(new FloatData("PDSupplyCurrent", u8"PD供电电流")) , m_IsGalvanometerScannerOutputStageOn(new BoolData("IsGalvanometerScannerOutputStageOn", u8"振镜输出级生效")) , m_IsGalvanometerScannerHeaterOutputStageOn(new BoolData("IsGalvanometerScannerHeaterOutputStageOn", u8"振镜加热器输出级生效")) , m_IsInternalVoltagesNormal(new BoolData("IsInternalVoltagesNormal", u8"内部电压正常")) , m_IsPositionErrorNormalRange(new BoolData("IsPositionErrorNormalRange", u8"位置误差正常")) , m_IsScannerAndServoBoradTempNormal(new BoolData("IsScannerAndServoBoradTempNormal", u8"振镜和伺服温度正常")) , m_IsBootingProcessCompleted(new BoolData("IsBootingProcessCompleted", u8"启动处理完成")) , m_IsCriticalError(new BoolData("IsCriticalError", u8"发生严重错误")) , m_IsExternalPowderLow(new BoolData("IsExternalPowderLow", u8"外部电压欠压")) , m_IsScanSystemTempOverLimit(new BoolData("IsScanSystemTempOverLimit", u8"扫描系统超温")) , m_IsADConverterSuccessfullyInit(new BoolData("IsADConverterSuccessfullyInit", u8"AD转换初始化成功")) , m_IsScannerReachedCriticalEdgePos(new BoolData("IsScannerReachedCriticalEdgePos", u8"振镜到达临界边缘位置")) , m_IsAllControlParametersValid(new BoolData("IsAllControlParametersValid", u8"允许控制参数")) , m_IsADConverterVoltageOK(new BoolData("IsADConverterVoltageOK", u8"AD转换供电正常")) , m_IsAnalogSetionVoltageOK(new BoolData("IsAnalogSetionVoltageOK", u8"模拟区电压正常")) , m_IsDSPIOVoltageOK(new BoolData("IsDSPIOVoltageOK", u8"DSP 输入输出电压正常")) , m_IsDSPCoreVoltageOK(new BoolData("IsDSPCoreVoltageOK", u8"DSP核心供电正常")) , m_IsAGCVoltageOK(new BoolData("IsAGCVoltageOK", u8"AGC电压正常")) , m_IsServoBoradOperationTempNormal(new BoolData("IsServoBoradOperationTempNormal", u8"伺服板卡操作温度正常")) , m_IsGalvanometerScannerOperationTempNormal(new BoolData("IsGalvanometerScannerOperationTempNormal", u8"振镜操作温度正常")) , m_LowState(new IntData("LowState")) , m_HighState(new IntData("HighState")) , m_StopEven(new IntData("StopEven")){ } ~IntelliScanState() {} void GetState(IntelliScanStateSCT& intelS) { intelS.m_GalvanometerScannerTempOK = m_GalvanometerScannerTempOK->GetValue(); intelS.m_ActualPosition = m_ActualPosition->GetValue(); intelS.m_SetPosition = m_SetPosition->GetValue(); intelS.m_PositionError = m_PositionError->GetValue(); intelS.m_GalvanometerScannerTemp = m_GalvanometerScannerTemp->GetValue(); intelS.m_ServoBoardTemp = m_ServoBoardTemp->GetValue(); intelS.m_PDSupplyVoltage = m_PDSupplyVoltage->GetValue(); intelS.m_DSPCoreSupplyVoltage = m_DSPCoreSupplyVoltage->GetValue(); intelS.m_DSPIOVoltage = m_DSPIOVoltage->GetValue(); intelS.m_AnalogSectionVoltage = m_AnalogSectionVoltage->GetValue(); intelS.m_ADConverterSupplyVoltage = m_ADConverterSupplyVoltage->GetValue(); intelS.m_PDSupplyCurrent = m_PDSupplyCurrent->GetValue(); intelS.m_IsGalvanometerScannerOutputStageOn = m_IsGalvanometerScannerOutputStageOn->GetValue(); intelS.m_IsGalvanometerScannerHeaterOutputStageOn = m_IsGalvanometerScannerHeaterOutputStageOn->GetValue(); intelS.m_IsInternalVoltagesNormal = m_IsInternalVoltagesNormal->GetValue(); intelS.m_IsPositionErrorNormalRange = m_IsPositionErrorNormalRange->GetValue(); intelS.m_IsScannerAndServoBoradTempNormal = m_IsScannerAndServoBoradTempNormal->GetValue(); intelS.m_IsBootingProcessCompleted = m_IsBootingProcessCompleted->GetValue(); intelS.m_IsCriticalError = m_IsCriticalError->GetValue(); intelS.m_IsExternalPowderLow = m_IsExternalPowderLow->GetValue(); intelS.m_IsScanSystemTempOverLimit = m_IsScanSystemTempOverLimit->GetValue(); intelS.m_IsADConverterSuccessfullyInit = m_IsADConverterSuccessfullyInit->GetValue(); intelS.m_IsScannerReachedCriticalEdgePos = m_IsScannerReachedCriticalEdgePos->GetValue(); intelS.m_IsAllControlParametersValid = m_IsAllControlParametersValid->GetValue(); intelS.m_IsADConverterVoltageOK = m_IsADConverterVoltageOK->GetValue(); intelS.m_IsAnalogSetionVoltageOK = m_IsAnalogSetionVoltageOK->GetValue(); intelS.m_IsDSPIOVoltageOK = m_IsDSPIOVoltageOK->GetValue(); intelS.m_IsDSPCoreVoltageOK = m_IsDSPCoreVoltageOK->GetValue(); intelS.m_IsAGCVoltageOK = m_IsAGCVoltageOK->GetValue(); intelS.m_IsServoBoradOperationTempNormal = m_IsServoBoradOperationTempNormal->GetValue(); intelS.m_IsGalvanometerScannerOperationTempNormal = m_IsGalvanometerScannerOperationTempNormal->GetValue(); intelS.m_LowState = m_LowState->GetValue(); intelS.m_HighState = m_HighState->GetValue(); intelS.m_StopEven = m_StopEven->GetValue(); } static string GetStopEventInfo(int ivalue, bool& bvalue) { string info = g_LngManager->Scan_None->ShowText(); bvalue = false; switch (ivalue) { case 0x10: { info = g_LngManager->Scan_CriticalEdgePosInfo->ShowText(); bvalue = true; }break; case 0x20: { info = g_LngManager->Scan_ADConverterErrorInfo->ShowText(); bvalue = true; }break; case 0x30: { info = g_LngManager->Scan_TemperatureOverLimitInfo->ShowText(); bvalue = true; }break; case 0x40: { info = g_LngManager->Scan_ExtPowerLowerLimitInfo->ShowText(); bvalue = true; }break; case 0x50: { info = g_LngManager->Scan_FlagsAreNotValidInfo->ShowText(); bvalue = true; }break; case 0xD0: { info = g_LngManager->Scan_WatchdogTimeOut->ShowText(); bvalue = true; }break; case 0xE0: { info = g_LngManager->Scan_PositionReachTimeout->ShowText(); bvalue = true; }break; } return info; } public: char m_startFlag; //开始标记 //bool m_IsInternalVoltagesNormal; //内部电压正常 BoolData* m_GalvanometerScannerTempOK; //振镜预热完成 FloatData* m_ActualPosition; //真实位置 FloatData* m_SetPosition; //设值位置 FloatData* m_PositionError; //位置误差 //FloatData* m_ActualCurrent; //真实电流 //FloatData* m_ActualVelocity; //真实速度 FloatData* m_GalvanometerScannerTemp; //振镜温度 FloatData* m_ServoBoardTemp; //伺服板卡温度 FloatData* m_PDSupplyVoltage; //PD供电电压 FloatData* m_DSPCoreSupplyVoltage; //DSP核心供电电压 FloatData* m_DSPIOVoltage; //DSP输入输出电压 FloatData* m_AnalogSectionVoltage; //模拟区电压 FloatData* m_ADConverterSupplyVoltage; //AD转换供电电压 FloatData* m_PDSupplyCurrent; //PD供电电流 BoolData* m_IsGalvanometerScannerOutputStageOn; //振镜输出级生效 BoolData* m_IsGalvanometerScannerHeaterOutputStageOn; //振镜加热器输出级生效 BoolData* m_IsInternalVoltagesNormal; //内部电压正常 BoolData* m_IsPositionErrorNormalRange; //位置误差正常 BoolData* m_IsScannerAndServoBoradTempNormal; //振镜和伺服温度正常 BoolData* m_IsBootingProcessCompleted; //启动处理完成 BoolData* m_IsCriticalError; //发生严重错误 BoolData* m_IsExternalPowderLow; //外部电压欠压 BoolData* m_IsScanSystemTempOverLimit; //扫描系统超温 BoolData* m_IsADConverterSuccessfullyInit; //AD转换初始化成功 BoolData* m_IsScannerReachedCriticalEdgePos; //振镜到达临界边缘位置 BoolData* m_IsAllControlParametersValid; //允许控制参数 BoolData* m_IsADConverterVoltageOK; //AD转换供电正常 BoolData* m_IsAnalogSetionVoltageOK; //模拟区电压正常 BoolData* m_IsDSPIOVoltageOK; //DSP 输入输出电压正常 BoolData* m_IsDSPCoreVoltageOK; //DSP核心供电正常 BoolData* m_IsAGCVoltageOK; //AGC电压正常 BoolData* m_IsServoBoradOperationTempNormal; //伺服板卡操作温度正常 BoolData* m_IsGalvanometerScannerOperationTempNormal; //振镜操作温度正常 IntData* m_LowState; IntData* m_HighState; IntData* m_StopEven; char m_endFlag; //开始标记 }; #pragma pack() class ScanStateXY :public Base { public: ScanStateXY() :m_IsConnected(false), m_LastError(0) , m_ScanStateUpdateTime(new StrData("ScanStateUpdateTime","更新时间")) { size_t ptrSize = sizeof(nullptr); //指针大小 void* startPtr = &m_X.m_startFlag + 1; size_t count = ((size_t)&m_X.m_endFlag - (size_t)startPtr) / ptrSize; InsertMp(startPtr, count, "_X"); startPtr = &m_Y.m_startFlag + 1; count = ((size_t)&m_Y.m_endFlag - (size_t)startPtr) / ptrSize; InsertMp(startPtr, count, "_Y"); startPtr = &m_Focus.m_startFlag + 1; count = ((size_t)&m_Focus.m_endFlag - (size_t)startPtr) / ptrSize; InsertMp(startPtr, count, "_Focus"); InsertMp(&m_ScanStateUpdateTime, 1); } ~ScanStateXY() {} public: bool m_IsConnected; UINT m_LastError; IntelliScanState m_X; IntelliScanState m_Y; IntelliScanState m_Focus; StrData* m_ScanStateUpdateTime; //time_t用string表示 }; struct ScanStateXYSCT { public: IntelliScanStateSCT m_X; IntelliScanStateSCT m_Y; IntelliScanStateSCT m_Focus; };