GrpcPrint/PrintS/Communication/CXFlatLaserClient.cpp

475 lines
25 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "CXFlatLaserClient.h"
#include "Modbus.h"
#include "../utils/DataByte.h"
#include <bitset>
#include "../external/imgui/imgui_custom.h"
#include "../Toast.h"
#include "../LanguageManager.h"
#include "../global.h"
#include "../Logger.h"
CXFlatLaserClient::CXFlatLaserClient(CommunicationCfg* cfg, AlarmCfg* alarm) :TcpClient(cfg), m_LaserAlarm(alarm)
{
}
CXFlatLaserClient::~CXFlatLaserClient()
{
Shutdown();
}
void CXFlatLaserClient::InitCommand()
{
Modbus* c1 = new ReadModbus(m_Config->m_Addr, 0x05, 12);
c1->m_Fun = &CXFlatLaserClient::PorcReadInfo1;
c1->m_Ref = this;
c1->isNeedDel = false;
Modbus* c2 = new ReadModbus(m_Config->m_Addr, 0x96, 4);
c2->m_Fun = &CXFlatLaserClient::PorcReadInfo2;
c2->m_Ref = this;
c2->isNeedDel = false;
Modbus* c3 = new ReadModbus(m_Config->m_Addr, 0x8005, 3);
c3->m_Fun = &CXFlatLaserClient::PorcReadInfo3;
c3->m_Ref = this;
c3->isNeedDel = false;
m_CycleCommands.push_back(c1);
m_CycleCommands.push_back(c2);
m_CycleCommands.push_back(c3);
}
void CXFlatLaserClient::SetPwmFrequency(unsigned short pwmf)
{
WriteModbus* pSet = new WriteModbus(m_Config->m_Addr, 0x97);
pSet->AddUshort(pwmf);
pSet->m_Fun = &CXFlatLaserClient::ProcWrite;
pSet->m_Ref = this;
EnterCriticalSection(&m_RtcCS);
m_RTCommands.push(pSet);
LeaveCriticalSection(&m_RtcCS);
}
void CXFlatLaserClient::SetPwmDutyCycle(float fvalue)
{
unsigned short realvalue = (unsigned short)(fvalue * 10);
WriteModbus* pSet = new WriteModbus(m_Config->m_Addr, 0x98);
pSet->AddShort(realvalue);
pSet->m_Fun = &CXFlatLaserClient::ProcWrite;
pSet->m_Ref = this;
EnterCriticalSection(&m_RtcCS);
m_RTCommands.push(pSet);
LeaveCriticalSection(&m_RtcCS);
}
void CXFlatLaserClient::SetPwmPower(float fvalue)
{
unsigned short realvalue = (unsigned short)(fvalue * 10);
WriteModbus* pSet = new WriteModbus(m_Config->m_Addr, 0x99);
pSet->AddShort(realvalue);
pSet->m_Fun = &CXFlatLaserClient::ProcWrite;
pSet->m_Ref = this;
EnterCriticalSection(&m_RtcCS);
m_RTCommands.push(pSet);
LeaveCriticalSection(&m_RtcCS);
}
void CXFlatLaserClient::PorcReadInfo1(void* pobject, Command* pcommand)
{
if (pobject == NULL)return;
CXFlatLaserClient* client = (CXFlatLaserClient*)pobject;
unsigned char* rseq = pcommand->m_RespSeq;
USHORTDATA alarmTemp(false, &rseq[3]);
bitset<16> alarm(alarmTemp.usValue);
USHORTDATA pumpSourceTemperatureTemp(false, &rseq[7]);
USHORTDATA OpticalPathTemperatureTemp(false, &rseq[9]);
USHORTDATA CircuitTemperatureTemp(false, &rseq[11]);
USHORTDATA DriveBoard1CurrentTemp(false, &rseq[15]);
USHORTDATA DriveBoard2CurrentTemp(false, &rseq[17]);
USHORTDATA DriveBoard3CurrentTemp(false, &rseq[19]);
USHORTDATA DriveBoard4CurrentTemp(false, &rseq[21]);
USHORTDATA SensorHumidityTemp(false, &rseq[25]);
EnterCriticalSection(&client->m_ValueCS);
client->m_CXFlatLaserState.m_PumpSourceTemperatureAlarm = alarm[0]; //泵源温度报警
client->m_CXFlatLaserState.m_OpticalPathTemperatureAlarm = alarm[1]; //光路温度报警
client->m_CXFlatLaserState.m_CircuitTemperatureAlarm = alarm[2]; //电路温度报警
client->m_CXFlatLaserState.m_EncryptionExpirationAlarm = alarm[3]; //加密过期报警
client->m_CXFlatLaserState.m_DriveBoard1OvercurrentAlarm = alarm[5]; //驱动板1过流报警
client->m_CXFlatLaserState.m_DriveBoard2OvercurrentAlarm = alarm[6]; //驱动板2过流报警
client->m_CXFlatLaserState.m_DriveBoard3OvercurrentAlarm = alarm[7]; //驱动板3过流报警
client->m_CXFlatLaserState.m_DriveBoard4OvercurrentAlarm = alarm[8]; //驱动板4过流报警
client->m_CXFlatLaserState.m_QbhTemperatureAlarm = alarm[9]; //QBH温度报警
client->m_CXFlatLaserState.m_ExternalBeamCombinerTemperatureAlarm = alarm[10]; //外合束器温度报警
client->m_CXFlatLaserState.m_WaterFlowMeterAlarm = alarm[11]; //水流量计报警
client->m_CXFlatLaserState.m_PumpSourceTemperature = pumpSourceTemperatureTemp.usValue; //泵源温度
client->m_CXFlatLaserState.m_OpticalPathTemperature = OpticalPathTemperatureTemp.usValue; //光路温度
client->m_CXFlatLaserState.m_CircuitTemperature = CircuitTemperatureTemp.usValue; //电路温度
client->m_CXFlatLaserState.m_DriveBoard1Current = (float)DriveBoard1CurrentTemp.usValue / 100.0f; //驱动板1电流
client->m_CXFlatLaserState.m_DriveBoard2Current = (float)DriveBoard2CurrentTemp.usValue / 100.0f; //驱动板2电流
client->m_CXFlatLaserState.m_DriveBoard3Current = (float)DriveBoard3CurrentTemp.usValue / 100.0f; //驱动板3电流
client->m_CXFlatLaserState.m_DriveBoard4Current = (float)DriveBoard4CurrentTemp.usValue / 100.0f; //驱动板4电流
client->m_CXFlatLaserState.m_SensorHumidity = SensorHumidityTemp.usValue; //传感器湿度
LeaveCriticalSection(&client->m_ValueCS);
}
void CXFlatLaserClient::PorcReadInfo2(void* pobject, Command* pcommand)
{
if (pobject == NULL)return;
CXFlatLaserClient* client = (CXFlatLaserClient*)pobject;
unsigned char* rseq = pcommand->m_RespSeq;
USHORTDATA InternalControlPowerTemp(false, &rseq[3]);
USHORTDATA PwmFrequencyTemp(false, &rseq[5]);
USHORTDATA PwmDutyCycleTemp(false, &rseq[7]);
USHORTDATA PwmPowerTemp(false, &rseq[9]);
EnterCriticalSection(&client->m_ValueCS);
client->m_CXFlatLaserState.m_InternalControlPower = (float)InternalControlPowerTemp.usValue / 10.0f; //内控功率
client->m_CXFlatLaserState.m_PwmFrequency = PwmFrequencyTemp.usValue; //PWM频率
client->m_CXFlatLaserState.m_PwmDutyCycle = (float)PwmDutyCycleTemp.usValue / 10.0f; //PWM占空比
client->m_CXFlatLaserState.m_PwmPower = (float)PwmPowerTemp.usValue / 10.0f; //PWM功率
LeaveCriticalSection(&client->m_ValueCS);
}
void CXFlatLaserClient::PorcReadInfo3(void* pobject, Command* pcommand)
{
if (pobject == NULL)return;
CXFlatLaserClient* client = (CXFlatLaserClient*)pobject;
unsigned char* rseq = pcommand->m_RespSeq;
USHORTDATA alarm1Temp(false, &rseq[3]);
bitset<16> alarm1(alarm1Temp.usValue);
USHORTDATA alarm2Temp(false, &rseq[5]);
bitset<16> alarm2(alarm2Temp.usValue);
USHORTDATA m_AnalogPowerTemp(false, &rseq[7]);
EnterCriticalSection(&client->m_ValueCS);
client->m_CXFlatLaserState.m_InternalPd1Alarm = alarm1[0]; //内部PD1报警
client->m_CXFlatLaserState.m_Interna2Pd1Alarm = alarm1[1]; //内部PD2报警
client->m_CXFlatLaserState.m_PulseEnergyAlarm = alarm1[2]; //脉冲能量报警
client->m_CXFlatLaserState.m_QbhContactAlarm = alarm1[3]; //QBH触点报警
client->m_CXFlatLaserState.m_EmergencyStopAlarm = alarm1[4]; //急停报警
client->m_CXFlatLaserState.m_WaterFlowSwitchAlarm = alarm1[5]; //水流量开关报警
client->m_CXFlatLaserState.m_InterlockAlarm = alarm1[6]; //互锁报警
client->m_CXFlatLaserState.m_AveragePowerAlarm = alarm1[7]; //平均功率报警
client->m_CXFlatLaserState.m_MAlarm = alarm1[8]; //M报警
client->m_CXFlatLaserState.m_ExternalBeamCombinerPdAlarm = alarm1[9]; //外合束器PD报警
client->m_CXFlatLaserState.m_ExternalAnalogAlarm = alarm1[10]; //外部模拟量报警
client->m_CXFlatLaserState.m_AbnormalLaserEmissionAlarm = alarm1[11]; //异常出光报警
client->m_CXFlatLaserState.m_UpperEmergencyStopAlarm = alarm1[12]; //上位机急停报警
client->m_CXFlatLaserState.m_PowerAlarm = alarm1[13]; //功率报警
client->m_CXFlatLaserState.m_MainPowerSupply1Alarm = alarm1[14]; //主电源1报警
client->m_CXFlatLaserState.m_MainPowerSupply2Alarm = alarm1[15]; //主电源2报警
client->m_CXFlatLaserState.m_IoEN = alarm2[0];
client->m_CXFlatLaserState.m_IoPWM = alarm2[1];
client->m_CXFlatLaserState.m_IoStop = alarm2[2];
client->m_CXFlatLaserState.m_IoRed = alarm2[3];
client->m_CXFlatLaserState.m_LaserState = alarm2[4]; //激光状态
client->m_CXFlatLaserState.m_RedLightState = alarm2[5]; //红光状态
client->m_CXFlatLaserState.m_IoStart = alarm2[6];
client->m_CXFlatLaserState.m_IoControl = alarm2[7];
client->m_CXFlatLaserState.m_PwmStartError = alarm2[10]; //PWM开启报警
client->m_CXFlatLaserState.m_PdPowerError = alarm2[11]; //PD电源报警
client->m_CXFlatLaserState.m_AnalogPower = (float)m_AnalogPowerTemp.usValue * 100.0f / 4095.0f;
LeaveCriticalSection(&client->m_ValueCS);
}
void CXFlatLaserClient::GetState(CXFlatLaserState& state)
{
EnterCriticalSection(&m_ValueCS);
state.m_PumpSourceTemperatureAlarm = m_CXFlatLaserState.m_PumpSourceTemperatureAlarm; //泵源温度报警
state.m_OpticalPathTemperatureAlarm = m_CXFlatLaserState.m_OpticalPathTemperatureAlarm; //光路温度报警
state.m_CircuitTemperatureAlarm = m_CXFlatLaserState.m_CircuitTemperatureAlarm; //电路温度报警
state.m_EncryptionExpirationAlarm = m_CXFlatLaserState.m_EncryptionExpirationAlarm; //加密过期报警
state.m_DriveBoard1OvercurrentAlarm = m_CXFlatLaserState.m_DriveBoard1OvercurrentAlarm; //驱动板1过流报警
state.m_DriveBoard2OvercurrentAlarm = m_CXFlatLaserState.m_DriveBoard2OvercurrentAlarm; //驱动板2过流报警
state.m_DriveBoard3OvercurrentAlarm = m_CXFlatLaserState.m_DriveBoard3OvercurrentAlarm; //驱动板3过流报警
state.m_DriveBoard4OvercurrentAlarm = m_CXFlatLaserState.m_DriveBoard4OvercurrentAlarm; //驱动板4过流报警
state.m_QbhTemperatureAlarm = m_CXFlatLaserState.m_QbhTemperatureAlarm; //QBH温度报警
state.m_ExternalBeamCombinerTemperatureAlarm = m_CXFlatLaserState.m_ExternalBeamCombinerTemperatureAlarm; //外合束器温度报警
state.m_WaterFlowMeterAlarm = m_CXFlatLaserState.m_WaterFlowMeterAlarm; //水流量计报警
state.m_PumpSourceTemperature = m_CXFlatLaserState.m_PumpSourceTemperature; //泵源温度
state.m_OpticalPathTemperature = m_CXFlatLaserState.m_OpticalPathTemperature; //光路温度
state.m_CircuitTemperature = m_CXFlatLaserState.m_CircuitTemperature; //电路温度
state.m_DriveBoard1Current = m_CXFlatLaserState.m_DriveBoard1Current; //驱动板1电流
state.m_DriveBoard2Current = m_CXFlatLaserState.m_DriveBoard2Current; //驱动板2电流
state.m_DriveBoard3Current = m_CXFlatLaserState.m_DriveBoard3Current; //驱动板3电流
state.m_DriveBoard4Current = m_CXFlatLaserState.m_DriveBoard4Current; //驱动板4电流
state.m_SensorHumidity = m_CXFlatLaserState.m_SensorHumidity; //传感器湿度
state.m_InternalControlPower = m_CXFlatLaserState.m_InternalControlPower; //内控功率
state.m_PwmFrequency = m_CXFlatLaserState.m_PwmFrequency; //PWM频率
state.m_PwmDutyCycle = m_CXFlatLaserState.m_PwmDutyCycle; //PWM占空比
state.m_PwmPower = m_CXFlatLaserState.m_PwmPower; //PWM功率
state.m_InternalPd1Alarm = m_CXFlatLaserState.m_InternalPd1Alarm; //内部PD1报警
state.m_Interna2Pd1Alarm = m_CXFlatLaserState.m_Interna2Pd1Alarm; //内部PD2报警
state.m_PulseEnergyAlarm = m_CXFlatLaserState.m_PulseEnergyAlarm; //脉冲能量报警
state.m_QbhContactAlarm = m_CXFlatLaserState.m_QbhContactAlarm; //QBH触点报警
state.m_EmergencyStopAlarm = m_CXFlatLaserState.m_EmergencyStopAlarm; //急停报警
state.m_WaterFlowSwitchAlarm = m_CXFlatLaserState.m_WaterFlowSwitchAlarm; //水流量开关报警
state.m_InterlockAlarm = m_CXFlatLaserState.m_InterlockAlarm; //互锁报警
state.m_AveragePowerAlarm = m_CXFlatLaserState.m_AveragePowerAlarm; //平均功率报警
state.m_MAlarm = m_CXFlatLaserState.m_MAlarm; //M报警
state.m_ExternalBeamCombinerPdAlarm = m_CXFlatLaserState.m_ExternalBeamCombinerPdAlarm; //外合束器PD报警
state.m_ExternalAnalogAlarm = m_CXFlatLaserState.m_ExternalAnalogAlarm; //外部模拟量报警
state.m_AbnormalLaserEmissionAlarm = m_CXFlatLaserState.m_AbnormalLaserEmissionAlarm; //异常出光报警
state.m_UpperEmergencyStopAlarm = m_CXFlatLaserState.m_UpperEmergencyStopAlarm; //上位机急停报警
state.m_PowerAlarm = m_CXFlatLaserState.m_PowerAlarm; //功率报警
state.m_MainPowerSupply1Alarm = m_CXFlatLaserState.m_MainPowerSupply1Alarm; //主电源1报警
state.m_MainPowerSupply2Alarm = m_CXFlatLaserState.m_MainPowerSupply2Alarm; //主电源2报警
state.m_IoEN = m_CXFlatLaserState.m_IoEN;
state.m_IoPWM = m_CXFlatLaserState.m_IoPWM;
state.m_IoStop = m_CXFlatLaserState.m_IoStop;
state.m_IoRed = m_CXFlatLaserState.m_IoRed;
state.m_LaserState = m_CXFlatLaserState.m_LaserState; //激光状态
state.m_RedLightState = m_CXFlatLaserState.m_RedLightState; //红光状态
state.m_IoStart = m_CXFlatLaserState.m_IoStart;
state.m_IoControl = m_CXFlatLaserState.m_IoControl;
state.m_PwmStartError = m_CXFlatLaserState.m_PwmStartError; //PWM开启报警
state.m_PdPowerError = m_CXFlatLaserState.m_PdPowerError; //PD电源报警
state.m_AnalogPower = m_CXFlatLaserState.m_AnalogPower;
LeaveCriticalSection(&m_ValueCS);
}
//void CXFlatLaserClient::DrawClientState()
//{
// CXFlatLaserState state;
// GetState(state);
// if (ImGui::BeginTabItem(GetConfig()->m_ClientCode.c_str())) {
// ImGui::BeginGroup();
// ImGui::Text(_(u8"激光端口连接:").c_str()); ImGui::SameLine();
// if (IsServerConnected()) {
// ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0), _(u8"正常").c_str());
// }
// else {
// ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0), _(u8"断开").c_str());
// }
// ImGui::Text(_(u8"激光通讯连接:").c_str()); ImGui::SameLine();
// if (IsComConnected()) {
// ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0), _(u8"正常").c_str());
// }
// else ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0), _(u8"断开").c_str());
//
// ImGui::Text(_(u8"泵源温度:").c_str()); ImGui::SameLine(); ImGui::Text(u8"%d℃", state.m_PumpSourceTemperature);
// ImGui::Text(_(u8"光路温度:").c_str()); ImGui::SameLine(); ImGui::Text(u8"%d℃", state.m_OpticalPathTemperature);
// ImGui::Text(_(u8"电路温度:").c_str()); ImGui::SameLine(); ImGui::Text(u8"%d℃", state.m_CircuitTemperature);
// ImGui::Text(_(u8"驱动板1电流").c_str()); ImGui::SameLine(); ImGui::Text("%.1fA", state.m_DriveBoard1Current);
// ImGui::Text(_(u8"驱动板2电流").c_str()); ImGui::SameLine(); ImGui::Text("%.1fA", state.m_DriveBoard2Current);
// ImGui::Text(_(u8"驱动板3电流").c_str()); ImGui::SameLine(); ImGui::Text("%.1fA", state.m_DriveBoard3Current);
// ImGui::Text(_(u8"驱动板4电流").c_str()); ImGui::SameLine(); ImGui::Text("%.1fA", state.m_DriveBoard4Current);
// ImGui::Text(_(u8"传感器湿度:").c_str()); ImGui::SameLine(); ImGui::Text("%d%%", state.m_SensorHumidity);
// ImGui::Text(_(u8"内控功率:").c_str()); ImGui::SameLine(); ImGui::Text("%.1f%%", state.m_InternalControlPower);
// ImGui::Text(_(u8"模拟功率:").c_str()); ImGui::SameLine(); ImGui::Text("%.1f%%", state.m_AnalogPower);
//
//
// ImGui::Text(_(u8"PWM频率").c_str()); ImGui::SameLine();
// ImGui::PushID("PwmFrequency");
// ImGui::PushItemWidth(80);
// state.m_PwmFrequencyAssist = state.m_PwmFrequency;
// if (ImGui::InputScalar(u8"Hz", ImGuiDataType_U16, &state.m_PwmFrequencyAssist, 0, 0, 0, ImGuiInputTextFlags_EnterReturnsTrue)) {
// SetPwmFrequency(state.m_PwmFrequencyAssist);
// g_log->TraceInfo(_(u8"更改PWM频率%u").c_str(), state.m_PwmFrequencyAssist);
// }
// ImGui::PopItemWidth();
// ImGui::PopID();
//
// ImGui::Text(_(u8"PWM占空比").c_str()); ImGui::SameLine();
// ImGui::PushID("PwmDutyCycle");
// ImGui::PushItemWidth(80);
// state.m_PwmDutyCycleAssist = state.m_PwmDutyCycle;
// if (ImGui::InputFloatEx(u8"%", &state.m_PwmDutyCycleAssist, 0, 0, 1, ImGuiInputTextFlags_EnterReturnsTrue)) {
// SetPwmDutyCycle(state.m_PwmDutyCycleAssist);
// g_log->TraceInfo(_(u8"更改PWM占空比%.1f").c_str(), state.m_PwmDutyCycleAssist);
// }
// ImGui::PopItemWidth();
// ImGui::PopID();
//
// ImGui::Text(_(u8"PWM功率").c_str()); ImGui::SameLine();
// ImGui::PushID("PwmPower");
// ImGui::PushItemWidth(80);
// state.m_PwmPowerAssist = state.m_PwmPower;
// if (ImGui::InputFloatEx(u8"%", &state.m_PwmPowerAssist, 0, 0, 1, ImGuiInputTextFlags_EnterReturnsTrue)) {
// SetPwmPower(state.m_PwmPowerAssist);
// g_log->TraceInfo(_(u8"更改PWM功率%.1f").c_str(), state.m_PwmPowerAssist);
// }
// ImGui::PopItemWidth();
// ImGui::PopID();
//
//
// ImGui::EndGroup();
//
// ImGui::SameLine(0, 20);
// ImGui::SeparatorEx(ImGuiSeparatorFlags_Vertical);
// ImGui::SameLine();
//
// ImGui::BeginGroup();
// ImGui::Text(_(u8"泵源温度报警:").c_str()); ImGui::SameLine();
// if (state.m_PumpSourceTemperatureAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"光路温度报警:").c_str()); ImGui::SameLine();
// if (state.m_OpticalPathTemperatureAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"电路温度报警:").c_str()); ImGui::SameLine();
// if (state.m_CircuitTemperatureAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"加密过期报警:").c_str()); ImGui::SameLine();
// if (state.m_EncryptionExpirationAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"驱动板1过流报警").c_str()); ImGui::SameLine();
// if (state.m_DriveBoard1OvercurrentAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"驱动板2过流报警").c_str()); ImGui::SameLine();
// if (state.m_DriveBoard2OvercurrentAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"驱动板3过流报警").c_str()); ImGui::SameLine();
// if (state.m_DriveBoard3OvercurrentAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"驱动板4过流报警").c_str()); ImGui::SameLine();
// if (state.m_DriveBoard4OvercurrentAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"QBH温度报警").c_str()); ImGui::SameLine();
// if (state.m_QbhTemperatureAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"外合束器温度报警:").c_str()); ImGui::SameLine();
// if (state.m_ExternalBeamCombinerTemperatureAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"水流量计报警:").c_str()); ImGui::SameLine();
// if (state.m_WaterFlowMeterAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"内部PD1报警").c_str()); ImGui::SameLine();
// if (state.m_InternalPd1Alarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"内部PD2报警").c_str()); ImGui::SameLine();
// if (state.m_Interna2Pd1Alarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::EndGroup();
//
// ImGui::SameLine(0, 20);
// ImGui::SeparatorEx(ImGuiSeparatorFlags_Vertical);
// ImGui::SameLine();
//
// ImGui::BeginGroup();
// ImGui::Text(_(u8"脉冲能量报警:").c_str()); ImGui::SameLine();
// if (state.m_PulseEnergyAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"QBH触点报警").c_str()); ImGui::SameLine();
// if (state.m_QbhContactAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"急停报警:").c_str()); ImGui::SameLine();
// if (state.m_EmergencyStopAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"水流量开关报警:").c_str()); ImGui::SameLine();
// if (state.m_WaterFlowSwitchAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"互锁报警:").c_str()); ImGui::SameLine();
// if (state.m_InterlockAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"平均功率报警:").c_str()); ImGui::SameLine();
// if (state.m_AveragePowerAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"M报警").c_str()); ImGui::SameLine();
// if (state.m_MAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"外合束器PD报警").c_str()); ImGui::SameLine();
// if (state.m_ExternalBeamCombinerPdAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"外部模拟量报警:").c_str()); ImGui::SameLine();
// if (state.m_ExternalAnalogAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"异常出光报警:").c_str()); ImGui::SameLine();
// if (state.m_AbnormalLaserEmissionAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"上位机急停报警:").c_str()); ImGui::SameLine();
// if (state.m_UpperEmergencyStopAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"功率报警:").c_str()); ImGui::SameLine();
// if (state.m_PowerAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::EndGroup();
//
// ImGui::SameLine(0, 20);
// ImGui::SeparatorEx(ImGuiSeparatorFlags_Vertical);
// ImGui::SameLine();
//
// ImGui::BeginGroup();
// ImGui::Text(_(u8"主电源1报警").c_str()); ImGui::SameLine();
// if (state.m_MainPowerSupply1Alarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"主电源2报警").c_str()); ImGui::SameLine();
// if (state.m_MainPowerSupply2Alarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"PWM开启报警").c_str()); ImGui::SameLine();
// if (state.m_PwmStartError) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"PD电源报警").c_str()); ImGui::SameLine();
// if (state.m_PdPowerError) ImGui::TextColored(Toast::COLOR_RED, _(u8"报警").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"正常").c_str());
//
// ImGui::Text(_(u8"m_IoEN").c_str()); ImGui::SameLine();
// if (state.m_IoEN) ImGui::Text(_(u8"是").c_str());
// else ImGui::Text(_(u8"否").c_str());
//
// ImGui::Text(_(u8"m_IoPWM").c_str()); ImGui::SameLine();
// if (state.m_IoPWM) ImGui::Text(_(u8"是").c_str());
// else ImGui::Text(_(u8"否").c_str());
//
// ImGui::Text(_(u8"m_IoStop").c_str()); ImGui::SameLine();
// if (state.m_IoStop) ImGui::Text(_(u8"是").c_str());
// else ImGui::Text(_(u8"否").c_str());
//
// ImGui::Text(_(u8"m_IoRed").c_str()); ImGui::SameLine();
// if (state.m_IoRed) ImGui::Text(_(u8"是").c_str());
// else ImGui::Text(_(u8"否").c_str());
//
// ImGui::Text(_(u8"激光状态:").c_str()); ImGui::SameLine();
// if (state.m_LaserState) ImGui::Text(_(u8"是").c_str());
// else ImGui::Text(_(u8"否").c_str());
//
// ImGui::Text(_(u8"红光状态:").c_str()); ImGui::SameLine();
// if (state.m_RedLightState) ImGui::Text(_(u8"是").c_str());
// else ImGui::Text(_(u8"否").c_str());
//
// ImGui::Text(_(u8"m_IoStart").c_str()); ImGui::SameLine();
// if (state.m_IoStart) ImGui::Text(_(u8"是").c_str());
// else ImGui::Text(_(u8"否").c_str());
//
// ImGui::Text(_(u8"m_IoControl").c_str()); ImGui::SameLine();
// if (state.m_IoControl) ImGui::Text(_(u8"是").c_str());
// else ImGui::Text(_(u8"否").c_str());
//
// ImGui::EndGroup();
// ImGui::SameLine(0, 20);
// ImGui::Spacing();
// ImGui::EndTabItem();
// }
//}