#include "CXFlatLaserClient.h" #include "Modbus.h" #include "../utils/DataByte.h" #include #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(); // } //}