GrpcPrint/PrintS/Communication/XLaserClient.cpp

318 lines
12 KiB
C++
Raw Permalink 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 "XLaserClient.h"
#include "XLaserCommand.h"
#include "../utils/DataByte.h"
#include <bitset>
#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"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><EFBFBD><EFBFBD><EFBFBD>").c_str();
ss.SetAlarm(client->m_LaserAlarm, true);
hasAlarm = true;
}
if (client->m_State.m_QBHContactBadness) {
client->m_LaserAlarm->m_AlarmInfo = _(u8"QBH<EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>").c_str();
ss.SetAlarm(client->m_LaserAlarm, true);
hasAlarm = true;
}
if (client->m_State.m_ContinueLightAlarm) {
client->m_LaserAlarm->m_AlarmInfo = _(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>").c_str();
ss.SetAlarm(client->m_LaserAlarm, true);
hasAlarm = true;
}
if (client->m_State.m_BoardLowBattery) {
client->m_LaserAlarm->m_AlarmInfo = _(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>").c_str();
ss.SetAlarm(client->m_LaserAlarm, true);
hasAlarm = true;
}
if (client->m_State.m_InterLockAlarm) {
client->m_LaserAlarm->m_AlarmInfo = _(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>").c_str();
ss.SetAlarm(client->m_LaserAlarm, true);
hasAlarm = true;
}
if (client->m_State.m_EmergencyStopAlarm) {
client->m_LaserAlarm->m_AlarmInfo = _(u8"<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>").c_str();
ss.SetAlarm(client->m_LaserAlarm, true);
hasAlarm = true;
}
if (client->m_State.m_Current2OverLimitAlarm) {
client->m_LaserAlarm->m_AlarmInfo = _(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>").c_str();
ss.SetAlarm(client->m_LaserAlarm, true);
hasAlarm = true;
}
if (client->m_State.m_PumpTempOverLimitAlarm) {
client->m_LaserAlarm->m_AlarmInfo = _(u8"<EFBFBD><EFBFBD>Դ<EFBFBD>¶ȹ<EFBFBD><EFBFBD><EFBFBD>").c_str();
ss.SetAlarm(client->m_LaserAlarm, true);
hasAlarm = true;
}
if (client->m_State.m_PowerTempOverLimit) {
client->m_LaserAlarm->m_AlarmInfo = _(u8"<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>¶ȹ<EFBFBD><EFBFBD><EFBFBD>").c_str();
ss.SetAlarm(client->m_LaserAlarm, true);
hasAlarm = true;
}
if (client->m_State.m_OpticalTempOverLimitAlarm) {
client->m_LaserAlarm->m_AlarmInfo = _(u8"<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>¶ȹ<EFBFBD><EFBFBD><EFBFBD>").c_str();
ss.SetAlarm(client->m_LaserAlarm, true);
hasAlarm = true;
}
if (client->m_State.m_LowVoltageAlarm) {
client->m_LaserAlarm->m_AlarmInfo = _(u8"Ƿѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>").c_str();
ss.SetAlarm(client->m_LaserAlarm, true);
hasAlarm = true;
}
if (client->m_State.m_ReturnLightAlarm) {
client->m_LaserAlarm->m_AlarmInfo = _(u8"<EFBFBD>عⱨ<EFBFBD><EFBFBD>").c_str();
ss.SetAlarm(client->m_LaserAlarm, true);
hasAlarm = true;
}
if (client->m_State.m_ForwardLightAlarm) {
client->m_LaserAlarm->m_AlarmInfo = _(u8"ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>").c_str();
ss.SetAlarm(client->m_LaserAlarm, true);
hasAlarm = true;
}
if (client->m_State.m_Current1OverLimitAlarm) {
client->m_LaserAlarm->m_AlarmInfo = _(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>").c_str();
ss.SetAlarm(client->m_LaserAlarm, true);
hasAlarm = true;
}
if (client->m_State.m_HighVoltageAlarm) {
client->m_LaserAlarm->m_AlarmInfo = _(u8"<EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>").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"<22><><EFBFBD><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD>ӣ<EFBFBD>").c_str()); ImGui::SameLine();
// if (IsServerConnected()) {
// ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0), _(u8"<22><><EFBFBD><EFBFBD>").c_str());
// }
// else {
// ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0), _(u8"<22>Ͽ<EFBFBD>").c_str());
// }
// ImGui::Text(_(u8"<22><><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD>ӣ<EFBFBD>").c_str()); ImGui::SameLine();
// if (IsComConnected()) {
// ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0), _(u8"<22><><EFBFBD><EFBFBD>").c_str());
// }
// else ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0), _(u8"<22>Ͽ<EFBFBD>").c_str());
//
// ImGui::Dummy(ImVec2(0, 20));
//
// ImGui::Text(_(u8"<22><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>").c_str()); ImGui::SameLine();
// if (state.m_IsExtCtrl) ImGui::Text(_(u8"<22><><EFBFBD>").c_str());
// else ImGui::Text(_(u8"<22>ڿ<EFBFBD>").c_str());
//
// ImGui::Text(_(u8"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>").c_str()); ImGui::SameLine();
// if (state.m_IsLaserOutput) ImGui::TextColored(Toast::COLOR_ORANGE, _(u8"<22><>").c_str());
// else ImGui::Text(_(u8"<22><>").c_str());
//
// ImGui::Text(_(u8"<22><>ع<EFBFBD><D8B9>ʰٷֱȣ<D6B1>").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"<22><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>").c_str(), u8"<22><>"); ImGui::SameLine();
// if (state.m_Current1OverLimitAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"<22><>").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"<22><>").c_str());
//
// ImGui::Text(u8"%s%s", _(u8"<22><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>").c_str(), u8"<22><>"); ImGui::SameLine();
// if (state.m_Current2OverLimitAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"<22><>").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"<22><>").c_str());
//
// ImGui::Text(u8"%s%s", _(u8"<22><><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD>").c_str(), u8"<22><>"); ImGui::SameLine();
// if (state.m_Current3OverLimitAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"<22><>").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"<22><>").c_str());
//
// ImGui::Text(u8"%s%s", _(u8"Ƿѹ<C7B7><D1B9><EFBFBD><EFBFBD>").c_str(), u8"<22><>"); ImGui::SameLine();
// if (state.m_LowVoltageAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"<22><>").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"<22><>").c_str());
//
// ImGui::Text(u8"%s%s", _(u8"<22><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>").c_str(), u8"<22><>"); ImGui::SameLine();
// if (state.m_HighVoltageAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"<22><>").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"<22><>").c_str());
//
// ImGui::Text(u8"%s%s", _(u8"<22><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>").c_str(), u8"<22><>"); ImGui::SameLine();
// if (state.m_BoardLowBattery) ImGui::TextColored(Toast::COLOR_RED, _(u8"<22><>").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"<22><>").c_str());
//
// ImGui::Text(u8"%s%s", _(u8"QBH<42>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD>").c_str(), u8"<22><>"); ImGui::SameLine();
// if (state.m_QBHContactBadness) ImGui::TextColored(Toast::COLOR_RED, _(u8"<22><>").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"<22><>").c_str());
//
// ImGui::Text(u8"%s%s", _(u8"<22><>Դ<EFBFBD>¶ȹ<C2B6><C8B9><EFBFBD>").c_str(), u8"<22><>"); ImGui::SameLine();
// if (state.m_PumpTempOverLimitAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"<22><>").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"<22><>").c_str());
//
// ImGui::Text(u8"%s%s", _(u8"<22><>ģ<EFBFBD><C4A3><EFBFBD>¶ȹ<C2B6><C8B9><EFBFBD>").c_str(), u8"<22><>"); ImGui::SameLine();
// if (state.m_PowerTempOverLimit) ImGui::TextColored(Toast::COLOR_RED, _(u8"<22><>").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"<22><>").c_str());
//
// ImGui::Text(u8"%s%s", _(u8"<22><>ģ<EFBFBD><C4A3><EFBFBD>¶ȹ<C2B6><C8B9><EFBFBD>").c_str(), u8"<22><>"); ImGui::SameLine();
// if (state.m_OpticalTempOverLimitAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"<22><>").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"<22><>").c_str());
//
// ImGui::Text(u8"%s%s", _(u8"<22><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><E2B1A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>").c_str(), u8"<22><>"); ImGui::SameLine();
// if (state.m_ContinueLightAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"<22><>").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"<22><>").c_str());
//
// ImGui::Text(u8"%s%s", _(u8"ǰ<><C7B0><EFBFBD><E2B1A8>").c_str(), u8"<22><>"); ImGui::SameLine();
// if (state.m_ForwardLightAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"<22><>").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"<22><>").c_str());
//
// ImGui::Text(u8"%s%s", _(u8"<22>عⱨ<D8B9><E2B1A8>").c_str(), u8"<22><>"); ImGui::SameLine();
// if (state.m_ReturnLightAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"<22><>").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"<22><>").c_str());
//
// ImGui::Text(u8"%s%s", _(u8"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>").c_str(), u8"<22><>"); ImGui::SameLine();
// if (state.m_InterLockAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"<22><>").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"<22><>").c_str());
//
// ImGui::Text(u8"%s%s", _(u8"<22><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>").c_str(), u8"<22><>"); ImGui::SameLine();
// if (state.m_EmergencyStopAlarm) ImGui::TextColored(Toast::COLOR_RED, _(u8"<22><>").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"<22><>").c_str());
//
// ImGui::EndGroup();
// ImGui::SameLine(0, 20);
// ImGui::Spacing();
// ImGui::EndTabItem();
// }
//}