#include "XLaserClient.h" #include "XLaserCommand.h" #include "../utils/DataByte.h" #include #include "../external/imgui/imgui_custom.h" #include "../LanguageManager.h" #include "../Toast.h" #include "../config/ConfigManager.h" #include "../PLC/SignalService.h" CXLaserClient::CXLaserClient(CommunicationCfg* pconfig, AlarmCfg* laserAlarm) :TcpClient(pconfig) , m_LaserAlarm(laserAlarm) { m_AlarmCfgWrapper = ConfigManager::GetInstance()->GetAlarmCfg(); } CXLaserClient::~CXLaserClient() { } void CXLaserClient::InitCommand() { CXLaserCommand* command = new CXLaserCommand(0x22); command->m_Fun = &CXLaserClient::PorcReadAlarm; command->m_Ref = this; command->isNeedDel = false; m_CycleCommands.push_back(command); CXLaserCommand* extcommand = new CXLaserCommand(0x23); extcommand->m_Fun = &CXLaserClient::PorcReadExtCtrl; extcommand->m_Ref = this; extcommand->isNeedDel = false; m_CycleCommands.push_back(extcommand); CXLaserCommand* powercommand = new CXLaserCommand(0x2a); powercommand->m_Fun = &CXLaserClient::PorcReadExtPower; powercommand->m_Ref = this; powercommand->isNeedDel = false; m_CycleCommands.push_back(powercommand); CXLaserCommand* statecommand = new CXLaserCommand(0x07); statecommand->m_Fun = &CXLaserClient::PorcReadLaserState; statecommand->m_Ref = this; statecommand->isNeedDel = false; m_CycleCommands.push_back(statecommand); } void CXLaserClient::PorcReadAlarm(void* pobject, Command* pcommand) { if (pobject == NULL)return; CXLaserClient* client = (CXLaserClient*)pobject; unsigned char* rseq = pcommand->m_RespSeq; UINTDATA value; value.data[0] = rseq[5]; value.data[1] = rseq[6]; value.data[2] = rseq[7]; value.data[3] = rseq[8]; bitset<32> bvalue(value.iValue); EnterCriticalSection(&client->m_ValueCS); client->m_State.m_Current3OverLimitAlarm = bvalue[10]; client->m_State.m_QBHContactBadness = bvalue[14]; client->m_State.m_ContinueLightAlarm = bvalue[15]; client->m_State.m_BoardLowBattery = bvalue[17]; client->m_State.m_InterLockAlarm = bvalue[18]; client->m_State.m_EmergencyStopAlarm = bvalue[19]; client->m_State.m_Current2OverLimitAlarm = bvalue[20]; client->m_State.m_PumpTempOverLimitAlarm = bvalue[22]; client->m_State.m_PowerTempOverLimit = bvalue[23]; client->m_State.m_OpticalTempOverLimitAlarm = bvalue[24]; client->m_State.m_LowVoltageAlarm = bvalue[25]; client->m_State.m_ReturnLightAlarm = bvalue[26]; client->m_State.m_ForwardLightAlarm = bvalue[27]; client->m_State.m_Current1OverLimitAlarm = bvalue[28]; client->m_State.m_HighVoltageAlarm = bvalue[29]; client->m_State.m_Expire = bvalue[30]; if (client->m_LaserAlarm && client->m_AlarmCfgWrapper) { bool hasAlarm = false; SignalService& ss = SignalService::GetInstance(); if (client->m_State.m_Current3OverLimitAlarm) { client->m_LaserAlarm->m_AlarmInfo = _(u8"����3����").c_str(); ss.SetAlarm(client->m_LaserAlarm, true); hasAlarm = true; } if (client->m_State.m_QBHContactBadness) { client->m_LaserAlarm->m_AlarmInfo = _(u8"QBH�Ӵ�����").c_str(); ss.SetAlarm(client->m_LaserAlarm, true); hasAlarm = true; } if (client->m_State.m_ContinueLightAlarm) { client->m_LaserAlarm->m_AlarmInfo = _(u8"����ǰ��ⱨ������").c_str(); ss.SetAlarm(client->m_LaserAlarm, true); hasAlarm = true; } if (client->m_State.m_BoardLowBattery) { client->m_LaserAlarm->m_AlarmInfo = _(u8"�����ص�������").c_str(); ss.SetAlarm(client->m_LaserAlarm, true); hasAlarm = true; } if (client->m_State.m_InterLockAlarm) { client->m_LaserAlarm->m_AlarmInfo = _(u8"��������").c_str(); ss.SetAlarm(client->m_LaserAlarm, true); hasAlarm = true; } if (client->m_State.m_EmergencyStopAlarm) { client->m_LaserAlarm->m_AlarmInfo = _(u8"��ͣ����").c_str(); ss.SetAlarm(client->m_LaserAlarm, true); hasAlarm = true; } if (client->m_State.m_Current2OverLimitAlarm) { client->m_LaserAlarm->m_AlarmInfo = _(u8"����2����").c_str(); ss.SetAlarm(client->m_LaserAlarm, true); hasAlarm = true; } if (client->m_State.m_PumpTempOverLimitAlarm) { client->m_LaserAlarm->m_AlarmInfo = _(u8"��Դ�¶ȹ���").c_str(); ss.SetAlarm(client->m_LaserAlarm, true); hasAlarm = true; } if (client->m_State.m_PowerTempOverLimit) { client->m_LaserAlarm->m_AlarmInfo = _(u8"��ģ���¶ȹ���").c_str(); ss.SetAlarm(client->m_LaserAlarm, true); hasAlarm = true; } if (client->m_State.m_OpticalTempOverLimitAlarm) { client->m_LaserAlarm->m_AlarmInfo = _(u8"��ģ���¶ȹ���").c_str(); ss.SetAlarm(client->m_LaserAlarm, true); hasAlarm = true; } if (client->m_State.m_LowVoltageAlarm) { client->m_LaserAlarm->m_AlarmInfo = _(u8"Ƿѹ����").c_str(); ss.SetAlarm(client->m_LaserAlarm, true); hasAlarm = true; } if (client->m_State.m_ReturnLightAlarm) { client->m_LaserAlarm->m_AlarmInfo = _(u8"�عⱨ��").c_str(); ss.SetAlarm(client->m_LaserAlarm, true); hasAlarm = true; } if (client->m_State.m_ForwardLightAlarm) { client->m_LaserAlarm->m_AlarmInfo = _(u8"ǰ��ⱨ��").c_str(); ss.SetAlarm(client->m_LaserAlarm, true); hasAlarm = true; } if (client->m_State.m_Current1OverLimitAlarm) { client->m_LaserAlarm->m_AlarmInfo = _(u8"����1����").c_str(); ss.SetAlarm(client->m_LaserAlarm, true); hasAlarm = true; } if (client->m_State.m_HighVoltageAlarm) { client->m_LaserAlarm->m_AlarmInfo = _(u8"��ѹ����").c_str(); ss.SetAlarm(client->m_LaserAlarm, true); hasAlarm = true; } if (!hasAlarm) { ss.SetAlarm(client->m_LaserAlarm, false); } } LeaveCriticalSection(&client->m_ValueCS); } void CXLaserClient::PorcReadExtCtrl(void* pobject, Command* pcommand) { if (pobject == NULL)return; CXLaserClient* client = (CXLaserClient*)pobject; unsigned char* rseq = pcommand->m_RespSeq; unsigned char ctrlMode = rseq[5]; EnterCriticalSection(&client->m_ValueCS); client->m_State.m_IsExtCtrl = (ctrlMode == 0 ? true : false); LeaveCriticalSection(&client->m_ValueCS); } void CXLaserClient::PorcReadExtPower(void* pobject, Command* pcommand) { if (pobject == NULL)return; CXLaserClient* client = (CXLaserClient*)pobject; unsigned char* rseq = pcommand->m_RespSeq; float power = (float)rseq[5]; EnterCriticalSection(&client->m_ValueCS); client->m_State.m_ExtPower = power; LeaveCriticalSection(&client->m_ValueCS); } void CXLaserClient::PorcReadLaserState(void* pobject, Command* pcommand) { if (pobject == NULL)return; CXLaserClient* client = (CXLaserClient*)pobject; unsigned char* rseq = pcommand->m_RespSeq; unsigned char laserstat = rseq[5]; EnterCriticalSection(&client->m_ValueCS); client->m_State.m_IsLaserOutput = (laserstat == 1 ? true : false); LeaveCriticalSection(&client->m_ValueCS); } void CXLaserClient::GetState(CXLaserState& state) { EnterCriticalSection(&m_ValueCS); memcpy_s(&state, sizeof(CXLaserState), &m_State, sizeof(CXLaserState)); state.m_BaseStat = m_BaseStat; LeaveCriticalSection(&m_ValueCS); } //void CXLaserClient::DrawClientState() { // CXLaserState 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::Dummy(ImVec2(0, 20)); // // ImGui::Text(_(u8"����ģʽ��").c_str()); ImGui::SameLine(); // if (state.m_IsExtCtrl) ImGui::Text(_(u8"���").c_str()); // else ImGui::Text(_(u8"�ڿ�").c_str()); // // ImGui::Text(_(u8"�������״̬��").c_str()); ImGui::SameLine(); // if (state.m_IsLaserOutput) ImGui::TextColored(Toast::COLOR_ORANGE, _(u8"��").c_str()); // else ImGui::Text(_(u8"��").c_str()); // // ImGui::Text(_(u8"��ع��ʰٷֱȣ�").c_str()); ImGui::SameLine(); // ImGui::Text("%.0f%%", state.m_ExtPower); // // ImGui::EndGroup(); // // ImGui::SameLine(0, 20); // ImGui::SeparatorEx(ImGuiSeparatorFlags_Vertical); // ImGui::SameLine(); // // ImGui::BeginGroup(); // // ImGui::Text(u8"%s%s", _(u8"����1����").c_str(), u8"��"); ImGui::SameLine(); // if (state.m_Current1OverLimitAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"��").c_str()); // else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"��").c_str()); // // ImGui::Text(u8"%s%s", _(u8"����2����").c_str(), u8"��"); ImGui::SameLine(); // if (state.m_Current2OverLimitAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"��").c_str()); // else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"��").c_str()); // // ImGui::Text(u8"%s%s", _(u8"����3����").c_str(), u8"��"); ImGui::SameLine(); // if (state.m_Current3OverLimitAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"��").c_str()); // else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"��").c_str()); // // ImGui::Text(u8"%s%s", _(u8"Ƿѹ����").c_str(), u8"��"); ImGui::SameLine(); // if (state.m_LowVoltageAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"��").c_str()); // else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"��").c_str()); // // ImGui::Text(u8"%s%s", _(u8"��ѹ����").c_str(), u8"��"); ImGui::SameLine(); // if (state.m_HighVoltageAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"��").c_str()); // else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"��").c_str()); // // ImGui::Text(u8"%s%s", _(u8"�����ص�������").c_str(), u8"��"); ImGui::SameLine(); // if (state.m_BoardLowBattery) ImGui::TextColored(Toast::COLOR_RED, _(u8"��").c_str()); // else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"��").c_str()); // // ImGui::Text(u8"%s%s", _(u8"QBH�Ӵ�����").c_str(), u8"��"); ImGui::SameLine(); // if (state.m_QBHContactBadness) ImGui::TextColored(Toast::COLOR_RED, _(u8"��").c_str()); // else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"��").c_str()); // // ImGui::Text(u8"%s%s", _(u8"��Դ�¶ȹ���").c_str(), u8"��"); ImGui::SameLine(); // if (state.m_PumpTempOverLimitAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"��").c_str()); // else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"��").c_str()); // // ImGui::Text(u8"%s%s", _(u8"��ģ���¶ȹ���").c_str(), u8"��"); ImGui::SameLine(); // if (state.m_PowerTempOverLimit) ImGui::TextColored(Toast::COLOR_RED, _(u8"��").c_str()); // else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"��").c_str()); // // ImGui::Text(u8"%s%s", _(u8"��ģ���¶ȹ���").c_str(), u8"��"); ImGui::SameLine(); // if (state.m_OpticalTempOverLimitAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"��").c_str()); // else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"��").c_str()); // // ImGui::Text(u8"%s%s", _(u8"����ǰ��ⱨ������").c_str(), u8"��"); ImGui::SameLine(); // if (state.m_ContinueLightAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"��").c_str()); // else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"��").c_str()); // // ImGui::Text(u8"%s%s", _(u8"ǰ��ⱨ��").c_str(), u8"��"); ImGui::SameLine(); // if (state.m_ForwardLightAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"��").c_str()); // else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"��").c_str()); // // ImGui::Text(u8"%s%s", _(u8"�عⱨ��").c_str(), u8"��"); ImGui::SameLine(); // if (state.m_ReturnLightAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"��").c_str()); // else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"��").c_str()); // // ImGui::Text(u8"%s%s", _(u8"��������").c_str(), u8"��"); 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"%s%s", _(u8"��ͣ����").c_str(), u8"��"); ImGui::SameLine(); // if (state.m_EmergencyStopAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"��").c_str()); // else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"��").c_str()); // // ImGui::EndGroup(); // ImGui::SameLine(0, 20); // ImGui::Spacing(); // ImGui::EndTabItem(); // } //}