GrpcPrint/PrintS/ScannerCtrl/IntelliScanState.h

244 lines
12 KiB
C
Raw Normal View History

2024-03-26 10:33:00 +08:00
#pragma once
#include "../LanguageManager.h"
2024-05-15 13:38:34 +08:00
#include "../Controller/Base.h"
2024-03-26 10:33:00 +08:00
2024-05-15 13:38:34 +08:00
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{
2024-03-26 10:33:00 +08:00
public:
2024-05-15 13:38:34 +08:00
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")){
2024-03-26 10:33:00 +08:00
}
2024-05-15 13:38:34 +08:00
2024-03-26 10:33:00 +08:00
~IntelliScanState() {}
2024-05-15 13:38:34 +08:00
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();
}
2024-03-26 10:33:00 +08:00
static string GetStopEventInfo(int ivalue, bool& bvalue)
{
string info = g_LngManager->Scan_None->ShowText();
2024-03-26 10:33:00 +08:00
bvalue = false;
switch (ivalue) {
case 0x10: {
info = g_LngManager->Scan_CriticalEdgePosInfo->ShowText();
2024-03-26 10:33:00 +08:00
bvalue = true;
}break;
case 0x20: {
info = g_LngManager->Scan_ADConverterErrorInfo->ShowText();
2024-03-26 10:33:00 +08:00
bvalue = true;
}break;
case 0x30: {
info = g_LngManager->Scan_TemperatureOverLimitInfo->ShowText();
2024-03-26 10:33:00 +08:00
bvalue = true;
}break;
case 0x40: {
info = g_LngManager->Scan_ExtPowerLowerLimitInfo->ShowText();
2024-03-26 10:33:00 +08:00
bvalue = true;
}break;
case 0x50: {
info = g_LngManager->Scan_FlagsAreNotValidInfo->ShowText();
2024-03-26 10:33:00 +08:00
bvalue = true;
}break;
case 0xD0: {
info = g_LngManager->Scan_WatchdogTimeOut->ShowText();
2024-03-26 10:33:00 +08:00
bvalue = true;
}break;
case 0xE0: {
info = g_LngManager->Scan_PositionReachTimeout->ShowText();
2024-03-26 10:33:00 +08:00
bvalue = true;
}break;
}
return info;
}
public:
2024-05-15 13:38:34 +08:00
char m_startFlag; //开始标记
2024-03-26 10:33:00 +08:00
//bool m_IsInternalVoltagesNormal; //内部电压正常
2024-05-15 13:38:34 +08:00
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; //开始标记
2024-03-26 10:33:00 +08:00
};
2024-05-15 13:38:34 +08:00
#pragma pack()
2024-03-26 10:33:00 +08:00
2024-05-15 13:38:34 +08:00
class ScanStateXY :public Base {
2024-03-26 10:33:00 +08:00
public:
2024-05-15 13:38:34 +08:00
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);
}
2024-03-26 10:33:00 +08:00
~ScanStateXY() {}
2024-05-15 13:38:34 +08:00
2024-03-26 10:33:00 +08:00
public:
bool m_IsConnected;
UINT m_LastError;
IntelliScanState m_X;
IntelliScanState m_Y;
IntelliScanState m_Focus;
2024-05-15 13:38:34 +08:00
StrData* m_ScanStateUpdateTime; //time_t用string表示
};
struct ScanStateXYSCT {
public:
IntelliScanStateSCT m_X;
IntelliScanStateSCT m_Y;
IntelliScanStateSCT m_Focus;
2024-03-26 10:33:00 +08:00
};