GrpcPrint/PrintS/Communication/ChillerClient.cpp

753 lines
36 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 "ChillerClient.h"
#include "Modbus.h"
//#include "../SystemInfo.h"
#include "../external/imgui/imgui_custom.h"
//#include "../Toast.h"
ChillerClient::ChillerClient(CommunicationCfg* pconfig,int* tp) :TcpClient(pconfig)
{
m_Freq = 150;
m_Type = tp;
size_t ptrSize = sizeof(nullptr); //指针大小
void* startPtr = &m_DoluyoChillerStat.m_startFlag + 1;
size_t count = ((size_t)&m_DoluyoChillerStat.m_endFlag - (size_t)startPtr) / ptrSize;
InsertMp(startPtr, count);
startPtr = &m_HansChillerstat.m_startFlag + 1;
count = ((size_t)&m_HansChillerstat.m_endFlag - (size_t)startPtr) / ptrSize;
InsertMp(startPtr, count);
startPtr = &m_TongFeiStat.m_startFlag + 1;
count = ((size_t)&m_TongFeiStat.m_endFlag - (size_t)startPtr) / ptrSize;
InsertMp(startPtr, count);
}
ChillerClient::~ChillerClient()
{
Shutdown();
}
void ChillerClient::InitCommand()
{
if ((*m_Type) == ExtCfg::DOLUYO)
{
Command* pCommand = new ReadModbus(m_Config->m_Addr->GetValue(), 0x2D, 38);
pCommand->m_Fun = &ChillerClient::ProcDoluyoInfo;
pCommand->m_Ref = this;
pCommand->isNeedDel = false;
Command* pReadTarge = new ReadModbus(m_Config->m_Addr->GetValue(), 0x8E, 1);
pReadTarge->m_Fun = &ChillerClient::ProcDoluyoReadTargeValue;
pReadTarge->m_Ref = this;
pReadTarge->isNeedDel = false;
m_CycleCommands.push_back(pCommand);
m_CycleCommands.push_back(pReadTarge);
}
else if((*m_Type)==ExtCfg::HANS) {
Command* pCommand = new ReadModbus(m_Config->m_Addr->GetValue(), 0x100, 16);
pCommand->m_Fun = &ChillerClient::ProcHansInfo;
pCommand->m_Ref = this;
pCommand->isNeedDel = false;
m_CycleCommands.push_back(pCommand);
}
else if ((*m_Type) == ExtCfg::TONGFEI) {
Command* alarmInput = new ReadCoilModbus(m_Config->m_Addr->GetValue(), 0x01, 20);
alarmInput->m_Fun = &ChillerClient::ProcTongfeiAlarmInputInfo;
alarmInput->m_Ref = this;
alarmInput->isNeedDel = false;
Command* alarmState = new ReadModbus(m_Config->m_Addr->GetValue(), 57, 1);
alarmState->m_Fun = &ChillerClient::ProcTongfeiAlarmStateInfo;
alarmState->m_Ref = this;
alarmState->isNeedDel = false;
Command* userParams = new ReadModbus(m_Config->m_Addr->GetValue(), 0x02, 5);
userParams->m_Fun = &ChillerClient::ProcTongfeiUserParamsInfo;
userParams->m_Ref = this;
userParams->isNeedDel = false;
Command* anaShow = new ReadModbus(m_Config->m_Addr->GetValue(), 150, 9);
anaShow->m_Fun = &ChillerClient::ProcTongfeiAnaShowInfo;
anaShow->m_Ref = this;
anaShow->isNeedDel = false;
Command* anaShow2 = new ReadModbus(m_Config->m_Addr->GetValue(), 720, 4);
anaShow2->m_Fun = &ChillerClient::ProcTongfeiAnaShowInfo2;
anaShow2->m_Ref = this;
anaShow2->isNeedDel = false;
Command* anaShow3 = new ReadModbus(m_Config->m_Addr->GetValue(), 741, 5);
anaShow3->m_Fun = &ChillerClient::ProcTongfeianaShowInfo3;
anaShow3->m_Ref = this;
anaShow3->isNeedDel = false;
m_CycleCommands.push_back(alarmInput);
m_CycleCommands.push_back(alarmState);
m_CycleCommands.push_back(userParams);
m_CycleCommands.push_back(anaShow);
m_CycleCommands.push_back(anaShow2);
m_CycleCommands.push_back(anaShow3);
}
}
void ChillerClient::SetDoluyoTargetTempValue(float value)
{
short realvalue = (short)(value * 10);
WriteModbus* pSet = new WriteModbus(m_Config->m_Addr->GetValue(), 0x8E);
pSet->AddShort(realvalue);
pSet->m_Fun = &ChillerClient::ProcDoluyoSettingValue;
pSet->m_Ref = this;
EnterCriticalSection(&m_RtcCS);
m_RTCommands.push(pSet);
LeaveCriticalSection(&m_RtcCS);
}
void ChillerClient::ProcDoluyoInfo(void* pobject, Command* pcommand)
{
if (pobject == NULL)return;
ChillerClient* pDlc = (ChillerClient*)pobject;
unsigned char* rseq = pcommand->m_RespSeq;
unsigned char addr = rseq[0];
short watertempValue = (((rseq[3] & 0xff) << 8) + (rseq[4] & 0xff));
unsigned short runinfo = (((rseq[63] & 0xff) << 8) + (rseq[64] & 0xff));
unsigned short runs = (((rseq[65] & 0xff) << 8) + (rseq[66] & 0xff));
unsigned short alarminfo = (((rseq[67] & 0xff) << 8) + (rseq[68] & 0xff));
unsigned short levelalarm = (((rseq[77] & 0xff) << 8) + (rseq[78] & 0xff));
//short tempSetValue = (((rseq[197] & 0xff) << 8) + (rseq[198] & 0xff));
//pDlc->m_ValueMutex.lock();
EnterCriticalSection(&pDlc->m_ValueCS);
pDlc->m_DoluyoChillerStat.m_tempRealtimeValue->SetValue((float)watertempValue / 10.0f);
pDlc->m_DoluyoChillerStat.m_runInfo->SetValue(runinfo);
switch (runs) {
case 0:pDlc->m_DoluyoChillerStat.m_isRun->SetValue(false); break;
case 1:pDlc->m_DoluyoChillerStat.m_isRun->SetValue(true); break;
case 2:pDlc->m_DoluyoChillerStat.m_isRun->SetValue(false); break;
}
pDlc->m_DoluyoChillerStat.m_alarmInfo->SetValue(alarminfo);
pDlc->m_DoluyoChillerStat.m_isLevelAlarm->SetValue(((levelalarm == 0) ? false : true));
//stat->tempSettingValue = (float)tempSetValue / 10.0f;
LeaveCriticalSection(&pDlc->m_ValueCS);
}
void ChillerClient::ProcDoluyoReadTargeValue(void* pobject, Command* pcommand)
{
if (pobject == NULL)return;
ChillerClient* pDlc = (ChillerClient*)pobject;
unsigned char* rseq = pcommand->m_RespSeq;
unsigned char addr = rseq[0];
//unsigned char* rseq = pcommand->m_RespSeq;
short tempValue = (((rseq[3] & 0xff) << 8) + (rseq[4] & 0xff));
EnterCriticalSection(&pDlc->m_ValueCS);
pDlc->m_DoluyoChillerStat.m_tempSettingValue->SetValue((float)tempValue / 10.0f);
LeaveCriticalSection(&pDlc->m_ValueCS);
}
void ChillerClient::ProcDoluyoSettingValue(void* pobject, Command* pcommand)
{
ChillerClient* pDlc = (ChillerClient*)pobject;
WriteModbus* setCommand =(WriteModbus*) pcommand;
WriteModbus* pSave = new WriteModbus(setCommand->m_addr, 0x19);
pSave->AddShort(0x0500);
pSave->m_Ref = pDlc;
EnterCriticalSection(&pDlc->m_RtcCS);
pDlc->m_RTCommands.push(pSave);
LeaveCriticalSection(&pDlc->m_RtcCS);
}
//void ChillerClient::GetDoluyoStat(DoluyoChillerstat& stat1)
//{
// EnterCriticalSection(&m_ValueCS);
// stat1.baseStat = m_BaseStat;
// stat1.alarmInfo = m_DoluyoChillerStat.alarmInfo;
// stat1.isRun = m_DoluyoChillerStat.isRun;
// stat1.runInfo = m_DoluyoChillerStat.runInfo;
// stat1.tempRealtimeValue = m_DoluyoChillerStat.tempRealtimeValue;
// stat1.tempSettingValue = m_DoluyoChillerStat.tempSettingValue;
// stat1.isLevelAlarm = m_DoluyoChillerStat.isLevelAlarm;
// LeaveCriticalSection(&m_ValueCS);
//}
//void ChillerClient::GetHansStat(HansChillerstat& stat)
//{
// EnterCriticalSection(&m_ValueCS);
// /*stat.baseStat = m_BaseStat;
// stat.alarmInfo = m_Stat.alarmInfo;
// stat.isRun = m_Stat.isRun;
// stat.runInfo = m_Stat.runInfo;
// stat.tempRealtimeValue = m_Stat.tempRealtimeValue;
// stat.tempSettingValue = m_Stat.tempSettingValue;
// stat.isLevelAlarm = m_Stat.isLevelAlarm;*/
// stat.baseStat = m_BaseStat;
// stat.m_WaterOutTemp = m_HansChillerstat.m_WaterOutTemp;
// stat.m_Flow = m_HansChillerstat.m_Flow;
// stat.m_SettingTemp = m_HansChillerstat.m_SettingTemp;
// stat.m_RunIndicate = m_HansChillerstat.m_RunIndicate;
// stat.m_WorkIndicate = m_HansChillerstat.m_WorkIndicate;
// stat.m_CompressorIndicate = m_HansChillerstat.m_CompressorIndicate;
// stat.m_WaterPumpIndicate = m_HansChillerstat.m_WaterPumpIndicate;
// stat.m_HeaterIndicate = m_HansChillerstat.m_HeaterIndicate;
// stat.m_FanIndicate = m_HansChillerstat.m_FanIndicate;
// stat.m_SolenoidValveIndicate = m_HansChillerstat.m_SolenoidValveIndicate;
// stat.m_LowTempErrorIndicate = m_HansChillerstat.m_LowTempErrorIndicate;
// stat.m_TempUndulateIndicate = m_HansChillerstat.m_TempUndulateIndicate;
// stat.m_HeaterExceptionIndicate = m_HansChillerstat.m_HeaterExceptionIndicate;
// stat.m_IOSignalIndicate = m_HansChillerstat.m_IOSignalIndicate;
// stat.m_IsAlarm = m_HansChillerstat.m_IsAlarm;
// stat.m_FlowAlarm = m_HansChillerstat.m_FlowAlarm;
// stat.m_TempAlarm = m_HansChillerstat.m_TempAlarm;
// stat.m_PressureAlarm = m_HansChillerstat.m_PressureAlarm;
// stat.m_WaterLevelAlarm = m_HansChillerstat.m_WaterLevelAlarm;
// stat.m_TempSensorAlarm = m_HansChillerstat.m_TempSensorAlarm;
// stat.m_SolenoidValveAlarm = m_HansChillerstat.m_SolenoidValveAlarm;
// stat.m_PhaseSeqAlarm = m_HansChillerstat.m_PhaseSeqAlarm;
// stat.m_CompressorStartFreqAlarm = m_HansChillerstat.m_CompressorStartFreqAlarm;
// stat.m_IO0Alarm = m_HansChillerstat.m_IO0Alarm;
// stat.m_IO1Alarm = m_HansChillerstat.m_IO1Alarm;
// stat.m_IO2Alarm = m_HansChillerstat.m_IO2Alarm;
// stat.m_IO3Alarm = m_HansChillerstat.m_IO3Alarm;
// stat.m_IO4Alarm = m_HansChillerstat.m_IO4Alarm;
// LeaveCriticalSection(&m_ValueCS);
//}
//void ChillerClient::GetTongFeiStat(TongFeiStat& stat)
//{
// EnterCriticalSection(&m_ValueCS);
// stat.m_BaseStat = m_BaseStat;
// stat.m_IsLowVoltageAlarm = m_TongFeiStat.m_IsLowVoltageAlarm;
// stat.m_IsHydraulicFailure = m_TongFeiStat.m_IsHydraulicFailure;
// stat.m_IsLevelFailure = m_TongFeiStat.m_IsLevelFailure;
// stat.m_IsLiquidPumpAlarm = m_TongFeiStat.m_IsLiquidPumpAlarm;
// stat.m_IsPressAlarm = m_TongFeiStat.m_IsPressAlarm;
// stat.m_IsElectricHeatingFailure = m_TongFeiStat.m_IsElectricHeatingFailure;
// stat.m_IsAntifreezeAlarm = m_TongFeiStat.m_IsAntifreezeAlarm;
// stat.m_IsLiquidTempTooHigh = m_TongFeiStat.m_IsLiquidTempTooHigh;
// stat.m_IsLiquidTempProbeFailure = m_TongFeiStat.m_IsLiquidTempProbeFailure;
// stat.m_IsEffluentTempProbeFailure = m_TongFeiStat.m_IsEffluentTempProbeFailure;
// stat.m_IsAmbientTempProbeFailure = m_TongFeiStat.m_IsAmbientTempProbeFailure;
// stat.m_IsCondensationTempProbeFailure = m_TongFeiStat.m_IsCondensationTempProbeFailure;
// stat.m_IsEvaporationInletTempProbeFailure = m_TongFeiStat.m_IsEvaporationInletTempProbeFailure;
// stat.m_IsEvaporationOutletTempProbeFailure = m_TongFeiStat.m_IsEvaporationOutletTempProbeFailure;
// stat.m_IsCondensationTempTooHigh = m_TongFeiStat.m_IsCondensationTempTooHigh;
// stat.m_IsPhaseOrderError = m_TongFeiStat.m_IsPhaseOrderError;
// stat.m_IsPowerFailure = m_TongFeiStat.m_IsPowerFailure;
// stat.m_IsCompressorFailure = m_TongFeiStat.m_IsCompressorFailure;
// stat.m_IsAmbientTempTooHigh = m_TongFeiStat.m_IsAmbientTempTooHigh;
// stat.m_IsAmbientTempException = m_TongFeiStat.m_IsAmbientTempException;
//
// stat.m_AlarmState = m_TongFeiStat.m_AlarmState;
// stat.m_RoomTempSettingValue = m_TongFeiStat.m_RoomTempSettingValue;
// stat.m_ConstantTempSettingValue = m_TongFeiStat.m_ConstantTempSettingValue;
// stat.m_WorkMode = m_TongFeiStat.m_WorkMode;
// stat.m_RefrigerationMethod = m_TongFeiStat.m_RefrigerationMethod;
// stat.m_LiquidAlarmTemp = m_TongFeiStat.m_LiquidAlarmTemp;
// stat.m_UnitStatus = m_TongFeiStat.m_UnitStatus;
//
// stat.m_LiquidTempProbe = m_TongFeiStat.m_LiquidTempProbe;
// stat.m_EffluentTempProbe = m_TongFeiStat.m_EffluentTempProbe;
// stat.m_AmbientTempProbe = m_TongFeiStat.m_AmbientTempProbe;
// stat.m_CondensationTempProbe = m_TongFeiStat.m_CondensationTempProbe;
// stat.m_EvaporationInletTempProbe = m_TongFeiStat.m_EvaporationInletTempProbe;
// stat.m_EvaporationOutletTempProbe = m_TongFeiStat.m_EvaporationOutletTempProbe;
//
// stat.m_WorkingFrequency = m_TongFeiStat.m_WorkingFrequency;
// stat.m_OverHeatingValue = m_TongFeiStat.m_OverHeatingValue;
// stat.m_EEV1 = m_TongFeiStat.m_EEV1;
// stat.m_EEV2 = m_TongFeiStat.m_EEV2;
// stat.m_CondensingFanRatio = m_TongFeiStat.m_CondensingFanRatio;
// stat.m_ElectricHeatingRatio = m_TongFeiStat.m_ElectricHeatingRatio;
// stat.m_FlowRate = m_TongFeiStat.m_FlowRate;
// LeaveCriticalSection(&m_ValueCS);
//}
void ChillerClient::ProcHansInfo(void* pobject, Command* pcommand)
{
if (pobject == NULL)return;
ChillerClient* pDlc = (ChillerClient*)pobject;
unsigned char* rseq = pcommand->m_RespSeq;
short state1 = (((rseq[3] & 0xff) << 8) + (rseq[4] & 0xff));
short state2 = (((rseq[5] & 0xff) << 8) + (rseq[6] & 0xff));
float waterOutTemp = (float)(((rseq[9] & 0xff) << 8) + (rseq[10] & 0xff)) / 10.0f;
float flow = (float)(((rseq[23] & 0xff) << 8) + (rseq[24] & 0xff)) / 10.0f;
float settingTemp = (float)(((rseq[33] & 0xff) << 8) + (rseq[34] & 0xff)) / 10.0f;
EnterCriticalSection(&pDlc->m_ValueCS);
pDlc->m_HansChillerstat.m_WaterOutTemp->SetValue(waterOutTemp);
pDlc->m_HansChillerstat.m_Flow->SetValue(flow);
pDlc->m_HansChillerstat.m_SettingTemp->SetValue(settingTemp);
pDlc->m_HansChillerstat.m_RunIndicate->SetValue((state1 & 0x01) ? true : false); //运行指示
pDlc->m_HansChillerstat.m_WorkIndicate->SetValue((state1 & 0x02) ? true : false); //工作正常指示
pDlc->m_HansChillerstat.m_IsAlarm->SetValue((state1 & 0x04) ? true : false); //报警
pDlc->m_HansChillerstat.m_CompressorIndicate->SetValue((state1 & 0x08) ? true : false); //压缩机指示
pDlc->m_HansChillerstat.m_WaterPumpIndicate->SetValue((state1 & 0x10) ? true : false); //水泵指示
pDlc->m_HansChillerstat.m_HeaterIndicate->SetValue((state1 & 0x20) ? true : false); //加热器指示
pDlc->m_HansChillerstat.m_FanIndicate->SetValue((state1 & 0x40) ? true : false); //风机指示
pDlc->m_HansChillerstat.m_SolenoidValveIndicate->SetValue((state1 & 0x80) ? true : false); //电磁阀指示
pDlc->m_HansChillerstat.m_FlowAlarm->SetValue((state1 & 0x100) ? true : false); //流量报警
pDlc->m_HansChillerstat.m_TempAlarm->SetValue((state1 & 0x200) ? true : false); //温度报警
pDlc->m_HansChillerstat.m_PressureAlarm->SetValue((state1 & 0x400) ? true : false); //压力报警
pDlc->m_HansChillerstat.m_WaterLevelAlarm->SetValue((state1 & 0x800) ? true : false); //液位报警
pDlc->m_HansChillerstat.m_LowTempErrorIndicate->SetValue((state1 & 0x1000) ? true : false); //低温错误指示
pDlc->m_HansChillerstat.m_TempUndulateIndicate->SetValue((state1 & 0x2000) ? true : false); //温度波动指示
pDlc->m_HansChillerstat.m_TempSensorAlarm->SetValue((state2 & 0x01) ? true : false); //温度传感器故障报警
pDlc->m_HansChillerstat.m_SolenoidValveAlarm->SetValue((state2 & 0x02) ? true : false); //电磁阀故障报警
pDlc->m_HansChillerstat.m_HeaterExceptionIndicate->SetValue((state2 & 0x04) ? true : false); //加热器异常指示
pDlc->m_HansChillerstat.m_IOSignalIndicate->SetValue((state2 & 0x08) ? true : false); //IO信号指示
pDlc->m_HansChillerstat.m_PhaseSeqAlarm->SetValue((state2 & 0x10) ? true : false); //相序报警
pDlc->m_HansChillerstat.m_CompressorStartFreqAlarm->SetValue((state2 & 0x20) ? true : false); //压缩机起动频繁报警
pDlc->m_HansChillerstat.m_IO0Alarm->SetValue((state2 & 0x100) ? true : false); //IO0错误报警
pDlc->m_HansChillerstat.m_IO1Alarm->SetValue((state2 & 0x200) ? true : false); //IO0错误报警
pDlc->m_HansChillerstat.m_IO2Alarm->SetValue((state2 & 0x400) ? true : false); //IO0错误报警
pDlc->m_HansChillerstat.m_IO3Alarm->SetValue((state2 & 0x800) ? true : false); //IO0错误报警
pDlc->m_HansChillerstat.m_IO4Alarm->SetValue((state2 & 0x1000) ? true : false); //IO0错误报警
LeaveCriticalSection(&pDlc->m_ValueCS);
//g_SystemInfo->LockInfo();
//g_SystemInfo->m_WaterTemp = waterOutTemp;
//g_SystemInfo->UnlockInfo();
}
void ChillerClient::SetHansTargetTempValue(float value)
{
short realvalue = (short)(value * 10);
WriteModbus* pSet = new WriteModbus(m_Config->m_Addr->GetValue(), 271);
pSet->AddShort(realvalue);
pSet->m_Ref = this;
EnterCriticalSection(&m_RtcCS);
m_RTCommands.push(pSet);
LeaveCriticalSection(&m_RtcCS);
}
//void ChillerClient::DrawUI()
//{
// if (!m_IsShowUI) return;
// if(m_Config->m_ClientCode=="LASER_CHILLER")ImGui::Begin(_(u8"激光器冷水机").c_str(), &m_IsShowUI, ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoNav);
// else if(m_Config->m_ClientCode == "PURIFIER_CHILLER")ImGui::Begin(_(u8"净化器冷水机").c_str(), &m_IsShowUI, ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoNav);
// else ImGui::Begin(_(u8"冷水机").c_str(), &m_IsShowUI, ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoNav);
// if ((*m_Type) == ExtCfg::DOLUYO)
// {
// DoluyoChillerstat stat;
// GetDoluyoStat(stat);
// if (stat.baseStat.isConnected)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"冷水机水温:%.1f ℃").c_str(), stat.tempRealtimeValue);
// ImGui::Text(_(u8"冷水机设定水温:%.1f ℃").c_str(), stat.tempSettingValue);
// ImGui::Text(_(u8"冷水机运行状态:%s").c_str(), stat.GetRunInfo().c_str());
// ImGui::Text(_(u8"冷水机故障信息:%s").c_str(), stat.GetAlarmInfo().c_str());
// if (!stat.isLevelAlarm) 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());
// }
// else if ((*m_Type) == ExtCfg::HANS) {
//
// HansChillerstat cs;
// GetHansStat(cs);
//
// ImGui::BeginGroup();
// 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());
// }
// 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, 10));
// ImGui::Text(_(u8"冷水机水温:%.1f ℃").c_str(), cs.m_WaterOutTemp);
// ImGui::Text(_(u8"流量:%.1f L/min").c_str(), cs.m_Flow);
// ImGui::Text(_(u8"设置温度:%.1f ℃").c_str(), cs.m_SettingTemp);
//
// ImGui::EndGroup();
//
// ImGui::SameLine();
// ImGui::SeparatorEx(ImGuiSeparatorFlags_Vertical);
// ImGui::SameLine();
//
// ImGui::BeginGroup();
// ImGui::Text(_(u8"运行指示:%s").c_str(), cs.m_RunIndicate ? _(u8"是").c_str() : _(u8"否").c_str());
// ImGui::Text(_(u8"工作正常指示:%s").c_str(), cs.m_WorkIndicate ? _(u8"是").c_str() : _(u8"否").c_str());
// ImGui::Text(_(u8"压缩机指示:%s").c_str(), cs.m_CompressorIndicate ? _(u8"是").c_str() : _(u8"否").c_str());
// ImGui::Text(_(u8"水泵指示:%s").c_str(), cs.m_WaterPumpIndicate ? _(u8"是").c_str() : _(u8"否").c_str());
// ImGui::Text(_(u8"加热器指示:%s").c_str(), cs.m_HeaterIndicate ? _(u8"是").c_str() : _(u8"否").c_str());
// ImGui::Text(_(u8"风机指示:%s").c_str(), cs.m_FanIndicate ? _(u8"是").c_str() : _(u8"否").c_str());
// ImGui::Text(_(u8"电磁阀指示:%s").c_str(), cs.m_SolenoidValveIndicate ? _(u8"是").c_str() : _(u8"否").c_str());
// ImGui::Text(_(u8"低温错误指示:%s").c_str(), cs.m_LowTempErrorIndicate ? _(u8"是").c_str() : _(u8"否").c_str());
// ImGui::Text(_(u8"温度波动指示:%s").c_str(), cs.m_TempUndulateIndicate ? _(u8"是").c_str() : _(u8"否").c_str());
// ImGui::Text(_(u8"加热器异常指示:%s").c_str(), cs.m_HeaterExceptionIndicate ? _(u8"是").c_str() : _(u8"否").c_str());
// ImGui::Text(_(u8"IO信号指示%s").c_str(), cs.m_IOSignalIndicate ? _(u8"是").c_str() : _(u8"否").c_str());
// ImGui::EndGroup();
//
// ImGui::SameLine();
// ImGui::SeparatorEx(ImGuiSeparatorFlags_Vertical);
// ImGui::SameLine();
//
// ImGui::BeginGroup();
//
// if (cs.m_IsAlarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"报警:%s").c_str(), _(u8"是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"报警:%s").c_str(), _(u8"否").c_str());
//
// if (cs.m_FlowAlarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"流量报警:%s").c_str(), _(u8"是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"流量报警:%s").c_str(), _(u8"否").c_str());
//
// if (cs.m_TempAlarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"温度报警:%s").c_str(), _(u8"是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"温度报警:%s").c_str(), _(u8"否").c_str());
//
// if (cs.m_PressureAlarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"压力报警:%s").c_str(), _(u8"是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"压力报警:%s").c_str(), _(u8"否").c_str());
//
// if (cs.m_WaterLevelAlarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"液位报警:%s").c_str(), _(u8"是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"液位报警:%s").c_str(), _(u8"否").c_str());
//
// if (cs.m_TempSensorAlarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"温度传感器故障报警:%s").c_str(), _(u8"是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"温度传感器故障报警:%s").c_str(), _(u8"否").c_str());
//
// if (cs.m_SolenoidValveAlarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"电磁阀故障报警:%s").c_str(), _(u8"是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"电磁阀故障报警:%s").c_str(), _(u8"否").c_str());
//
// if (cs.m_PhaseSeqAlarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"相序报警:%s").c_str(), _(u8"是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"相序报警:%s").c_str(), _(u8"否").c_str());
//
// if (cs.m_CompressorStartFreqAlarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"压缩机起动频繁报警:%s").c_str(), _(u8"是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"压缩机起动频繁报警:%s").c_str(), _(u8"否").c_str());
//
// if (cs.m_IO0Alarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"IO0错误报警%s").c_str(), _(u8"是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"IO0错误报警%s").c_str(), _(u8"否").c_str());
//
// if (cs.m_IO1Alarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"IO1错误报警%s").c_str(), _(u8"是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"IO1错误报警%s").c_str(), _(u8"否").c_str());
//
// if (cs.m_IO2Alarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"IO2错误报警%s").c_str(), _(u8"是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"IO2错误报警%s").c_str(), _(u8"否").c_str());
//
// if (cs.m_IO3Alarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"IO3错误报警%s").c_str(), _(u8"是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"IO3错误报警%s").c_str(), _(u8"否").c_str());
//
// if (cs.m_IO4Alarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"IO4错误报警%s").c_str(), _(u8"是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"IO4错误报警%s").c_str(), _(u8"否").c_str());
// ImGui::EndGroup();
// }
// else if ((*m_Type) == ExtCfg::TONGFEI) {
// TongFeiStat tfs;
// GetTongFeiStat(tfs);
//
// ImGui::BeginGroup();
// 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());
// }
// 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, 10));
// ImGui::Text(_(u8"室温同调预设温度:%.1f ℃").c_str(), tfs.m_RoomTempSettingValue);
// ImGui::Text(_(u8"恒温预设温度:%.1f ℃").c_str(), tfs.m_ConstantTempSettingValue);
// string workModeStr = _(u8"未知").c_str();
// if (tfs.m_WorkMode==0) {
// workModeStr = _(u8"手动").c_str();
// }
// else if (tfs.m_WorkMode == 1) {
// workModeStr = _(u8"自动").c_str();
// }
// else if (tfs.m_WorkMode == 2) {
// workModeStr = _(u8"机外").c_str();
// }
//
// ImGui::Text(_(u8"工作模式:%s").c_str(), workModeStr.c_str());
// string refrigerationMethod = _(u8"未知").c_str();
// if (tfs.m_RefrigerationMethod == 0) {
// refrigerationMethod = _(u8"室温同调").c_str();
// }
// else if (tfs.m_RefrigerationMethod == 1) {
// refrigerationMethod = _(u8"恒温控制").c_str();
// }
// ImGui::Text(_(u8"制冷方式:%s").c_str(), refrigerationMethod.c_str());
// ImGui::Text(_(u8"出液报警温度:%.1f ℃").c_str(), tfs.m_LiquidAlarmTemp);
//
// string unitStatus = _(u8"未知").c_str();
// if (tfs.m_UnitStatus == 0) {
// unitStatus = _(u8"停止").c_str();
// }
// else if (tfs.m_UnitStatus == 1) {
// unitStatus = _(u8"运行").c_str();
// }
// else if (tfs.m_UnitStatus == 2) {
// unitStatus = _(u8"停机中").c_str();
// }
// else if (tfs.m_UnitStatus == 3) {
// unitStatus = _(u8"防冻中").c_str();
// }
// else if (tfs.m_UnitStatus == 4) {
// unitStatus = _(u8"无流量").c_str();
// }
// ImGui::Text(_(u8"机组状态:%s").c_str(), unitStatus.c_str());
//
// ImGui::Text(_(u8"液温温度探头:%.2f ℃").c_str(), tfs.m_LiquidTempProbe);
// ImGui::Text(_(u8"出液温度探头:%.1f ℃").c_str(), tfs.m_EffluentTempProbe);
// ImGui::Text(_(u8"环境温度探头:%.1f ℃").c_str(), tfs.m_AmbientTempProbe);
// ImGui::Text(_(u8"冷凝温度探头:%.1f ℃").c_str(), tfs.m_CondensationTempProbe);
// ImGui::Text(_(u8"蒸发进口温度探头:%.1f ℃").c_str(), tfs.m_EvaporationInletTempProbe);
// ImGui::Text(_(u8"蒸发出口温度探头:%.1f ℃").c_str(), tfs.m_EvaporationOutletTempProbe);
//
// ImGui::Text(_(u8"运行频率:%.1f Hz").c_str(), tfs.m_WorkingFrequency);
// ImGui::Text(_(u8"过热度:%.1f ℃").c_str(), tfs.m_OverHeatingValue);
// ImGui::Text(_(u8"戴流EEV%.1f").c_str(), tfs.m_EEV1);
// ImGui::Text(_(u8"旁通EEV%.1f").c_str(), tfs.m_EEV2);
// ImGui::Text(_(u8"冷凝风机比例:%.1f").c_str(), tfs.m_CondensingFanRatio);
// ImGui::Text(_(u8"电加热比例:%.1f").c_str(), tfs.m_ElectricHeatingRatio);
// ImGui::Text(_(u8"流量:%.1f").c_str(), tfs.m_FlowRate);
//
// ImGui::EndGroup();
//
// ImGui::SameLine();
// ImGui::SeparatorEx(ImGuiSeparatorFlags_Vertical);
// ImGui::SameLine();
//
// ImGui::BeginGroup();
// string alarmStateStr = _(u8"未知").c_str();
// if (tfs.m_AlarmState == 0) {
// alarmStateStr = _(u8"正常").c_str();
// }
// else if (tfs.m_AlarmState == 1) {
// alarmStateStr = _(u8"故障").c_str();
// }
// else if (tfs.m_AlarmState == 2) {
// alarmStateStr = _(u8"信号等待").c_str();
// }
// ImGui::Text(_(u8"故障状态:%s").c_str(), alarmStateStr.c_str());
//
// if (tfs.m_IsLowVoltageAlarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"低压报警:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"低压报警:否").c_str());
//
// if (tfs.m_IsHydraulicFailure)ImGui::TextColored(Toast::COLOR_RED, _(u8"液路故障:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"液路故障:否").c_str());
//
// if (tfs.m_IsLevelFailure)ImGui::TextColored(Toast::COLOR_RED, _(u8"液位故障:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"液位故障:否").c_str());
//
// if (tfs.m_IsLiquidPumpAlarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"液泵热继电器报警:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"液泵热继电器报警:否").c_str());
//
// if (tfs.m_IsPressAlarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"压机热继电器报警:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"压机热继电器报警:否").c_str());
//
// if (tfs.m_IsElectricHeatingFailure)ImGui::TextColored(Toast::COLOR_RED, _(u8"电加热故障:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"电加热故障:否").c_str());
//
// if (tfs.m_IsAntifreezeAlarm)ImGui::TextColored(Toast::COLOR_RED, _(u8"防冻报警:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"防冻报警:否").c_str());
//
// if (tfs.m_IsLiquidTempTooHigh)ImGui::TextColored(Toast::COLOR_RED, _(u8"液温太高:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"液温太高:否").c_str());
//
// if (tfs.m_IsLiquidTempProbeFailure)ImGui::TextColored(Toast::COLOR_RED, _(u8"液温温度探头故障:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"液温温度探头故障:否").c_str());
//
// if (tfs.m_IsEffluentTempProbeFailure)ImGui::TextColored(Toast::COLOR_RED, _(u8"出液温度探头故障:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"出液温度探头故障:否").c_str());
//
// if (tfs.m_IsAmbientTempProbeFailure)ImGui::TextColored(Toast::COLOR_RED, _(u8"环境温度探头故障:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"环境温度探头故障:否").c_str());
//
// if (tfs.m_IsCondensationTempProbeFailure)ImGui::TextColored(Toast::COLOR_RED, _(u8"冷凝温度探头故障:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"冷凝温度探头故障:否").c_str());
//
// if (tfs.m_IsEvaporationInletTempProbeFailure)ImGui::TextColored(Toast::COLOR_RED, _(u8"蒸发进口温度探头故障:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"蒸发进口温度探头故障:否").c_str());
//
// if (tfs.m_IsEvaporationOutletTempProbeFailure)ImGui::TextColored(Toast::COLOR_RED, _(u8"蒸发出口温度探头故障:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"蒸发出口温度探头故障:否").c_str());
//
// if (tfs.m_IsCondensationTempTooHigh)ImGui::TextColored(Toast::COLOR_RED, _(u8"冷凝温度过高:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"冷凝温度过高:否").c_str());
//
// if (tfs.m_IsPhaseOrderError)ImGui::TextColored(Toast::COLOR_RED, _(u8"相序错误:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"相序错误:否").c_str());
//
// if (tfs.m_IsPowerFailure)ImGui::TextColored(Toast::COLOR_RED, _(u8"电源故障:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"电源故障:否").c_str());
//
// if (tfs.m_IsCompressorFailure)ImGui::TextColored(Toast::COLOR_RED, _(u8"压缩机故障:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"压缩机故障:否").c_str());
//
// if (tfs.m_IsAmbientTempTooHigh)ImGui::TextColored(Toast::COLOR_RED, _(u8"环境温度太高:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"环境温度太高:否").c_str());
//
// if (tfs.m_IsAmbientTempException)ImGui::TextColored(Toast::COLOR_RED, _(u8"环境温度异常:是").c_str());
// else ImGui::TextColored(Toast::COLOR_GREEN, _(u8"环境温度异常:否").c_str());
//
// ImGui::EndGroup();
// }
// ImGui::End();
//}
void ChillerClient::ProcTongfeiAlarmInputInfo(void* pobject, Command* pcommand)
{
if (pobject == NULL)return;
ChillerClient* cc = (ChillerClient*)pobject;
unsigned char* rseq = pcommand->m_RespSeq;
bitset<8> arr1(rseq[3]);
bitset<8> arr2(rseq[4]);
bitset<8> arr3(rseq[5]);
EnterCriticalSection(&cc->m_ValueCS);
cc->m_TongFeiStat.m_IsLowVoltageAlarm->SetValue(arr1[0]);
cc->m_TongFeiStat.m_IsHydraulicFailure->SetValue(arr1[1]);
cc->m_TongFeiStat.m_IsLevelFailure->SetValue(arr1[2]);
cc->m_TongFeiStat.m_IsLiquidPumpAlarm->SetValue(arr1[3]);
cc->m_TongFeiStat.m_IsPressAlarm->SetValue(arr1[4]);
cc->m_TongFeiStat.m_IsElectricHeatingFailure->SetValue(arr1[5]);
cc->m_TongFeiStat.m_IsAntifreezeAlarm->SetValue(arr1[6]);
cc->m_TongFeiStat.m_IsLiquidTempTooHigh->SetValue(arr1[7]);
cc->m_TongFeiStat.m_IsLiquidTempProbeFailure->SetValue(arr2[0]);
cc->m_TongFeiStat.m_IsEffluentTempProbeFailure->SetValue(arr2[1]);
cc->m_TongFeiStat.m_IsAmbientTempProbeFailure->SetValue(arr2[2]);
cc->m_TongFeiStat.m_IsCondensationTempProbeFailure->SetValue(arr2[3]);
cc->m_TongFeiStat.m_IsEvaporationInletTempProbeFailure->SetValue(arr2[4]);
cc->m_TongFeiStat.m_IsEvaporationOutletTempProbeFailure->SetValue(arr2[5]);
cc->m_TongFeiStat.m_IsCondensationTempTooHigh->SetValue(arr2[6]);
cc->m_TongFeiStat.m_IsPhaseOrderError->SetValue(arr2[7]);
cc->m_TongFeiStat.m_IsPowerFailure->SetValue(arr3[0]);
cc->m_TongFeiStat.m_IsCompressorFailure->SetValue(arr3[1]);
cc->m_TongFeiStat.m_IsAmbientTempTooHigh->SetValue(arr3[2]);
cc->m_TongFeiStat.m_IsAmbientTempException->SetValue(arr3[3]);
LeaveCriticalSection(&cc->m_ValueCS);
}
void ChillerClient::ProcTongfeiAlarmStateInfo(void* pobject, Command* pcommand)
{
if (pobject == NULL)return;
ChillerClient* cc = (ChillerClient*)pobject;
unsigned char* rseq = pcommand->m_RespSeq;
short state1 = (((rseq[3] & 0xff) << 8) + (rseq[4] & 0xff));
EnterCriticalSection(&cc->m_ValueCS);
cc->m_TongFeiStat.m_AlarmState->SetValue(state1);
LeaveCriticalSection(&cc->m_ValueCS);
}
void ChillerClient::ProcTongfeiUserParamsInfo(void* pobject, Command* pcommand)
{
if (pobject == NULL)return;
ChillerClient* cc = (ChillerClient*)pobject;
unsigned char* rseq = pcommand->m_RespSeq;
short roomTempSettingValue = (((rseq[3] & 0xff) << 8) + (rseq[4] & 0xff));
short constantTempSettingValue = (((rseq[5] & 0xff) << 8) + (rseq[6] & 0xff));
short workMode = (((rseq[7] & 0xff) << 8) + (rseq[8] & 0xff));
short refrigerationMethod = (((rseq[9] & 0xff) << 8) + (rseq[10] & 0xff));
short liquidAlarmTemp = (((rseq[11] & 0xff) << 8) + (rseq[12] & 0xff));
EnterCriticalSection(&cc->m_ValueCS);
cc->m_TongFeiStat.m_RoomTempSettingValue->SetValue((float)roomTempSettingValue/10.0f);
cc->m_TongFeiStat.m_ConstantTempSettingValue->SetValue((float)constantTempSettingValue / 10.0f);
cc->m_TongFeiStat.m_WorkMode->SetValue((int)workMode);
cc->m_TongFeiStat.m_RefrigerationMethod->SetValue(refrigerationMethod);
cc->m_TongFeiStat.m_LiquidAlarmTemp->SetValue((float)liquidAlarmTemp / 10.0f);
LeaveCriticalSection(&cc->m_ValueCS);
}
void ChillerClient::ProcTongfeiAnaShowInfo(void* pobject, Command* pcommand)
{
if (pobject == NULL)return;
ChillerClient* cc = (ChillerClient*)pobject;
unsigned char* rseq = pcommand->m_RespSeq;
short liquidTempProbe = (((rseq[3] & 0xff) << 8) + (rseq[4] & 0xff));
short effluentTempProbe = (((rseq[5] & 0xff) << 8) + (rseq[6] & 0xff));
short ambientTempProbe = (((rseq[7] & 0xff) << 8) + (rseq[8] & 0xff));
short condensationTempProbe = (((rseq[9] & 0xff) << 8) + (rseq[10] & 0xff));
short evaporationInletTempProbe = (((rseq[11] & 0xff) << 8) + (rseq[12] & 0xff));
short evaporationOutletTempProbe = (((rseq[13] & 0xff) << 8) + (rseq[14] & 0xff));
short unitStatus = (((rseq[19] & 0xff) << 8) + (rseq[20] & 0xff));
EnterCriticalSection(&cc->m_ValueCS);
cc->m_TongFeiStat.m_LiquidTempProbe->SetValue((float)liquidTempProbe/10.0f);
cc->m_TongFeiStat.m_EffluentTempProbe->SetValue((float)effluentTempProbe / 10.0f);
cc->m_TongFeiStat.m_AmbientTempProbe->SetValue((float)ambientTempProbe / 10.0f);
cc->m_TongFeiStat.m_CondensationTempProbe->SetValue((float)condensationTempProbe / 10.0f);
cc->m_TongFeiStat.m_EvaporationInletTempProbe->SetValue((float)evaporationInletTempProbe / 10.0f);
cc->m_TongFeiStat.m_EvaporationOutletTempProbe->SetValue((float)evaporationOutletTempProbe / 10.0f);
cc->m_TongFeiStat.m_UnitStatus->SetValue(unitStatus);
LeaveCriticalSection(&cc->m_ValueCS);
}
void ChillerClient::ProcTongfeiAnaShowInfo2(void* pobject, Command* pcommand)
{
if (pobject == NULL)return;
ChillerClient* cc = (ChillerClient*)pobject;
unsigned char* rseq = pcommand->m_RespSeq;
short WorkingFrequency = (((rseq[3] & 0xff) << 8) + (rseq[4] & 0xff));
short OverHeatingValue = (((rseq[5] & 0xff) << 8) + (rseq[6] & 0xff));
short EEV1 = (((rseq[7] & 0xff) << 8) + (rseq[8] & 0xff));
short EEV2 = (((rseq[9] & 0xff) << 8) + (rseq[10] & 0xff));
EnterCriticalSection(&cc->m_ValueCS);
cc->m_TongFeiStat.m_WorkingFrequency->SetValue((float)WorkingFrequency / 10.0f);
cc->m_TongFeiStat.m_OverHeatingValue->SetValue((float)OverHeatingValue / 10.0f);
cc->m_TongFeiStat.m_EEV1->SetValue((float)EEV1/10.0f);
cc->m_TongFeiStat.m_EEV2->SetValue((float)EEV2/10.0f);
LeaveCriticalSection(&cc->m_ValueCS);
}
void ChillerClient::ProcTongfeianaShowInfo3(void* pobject, Command* pcommand)
{
if (pobject == NULL)return;
ChillerClient* cc = (ChillerClient*)pobject;
unsigned char* rseq = pcommand->m_RespSeq;
short CondensingFanRatio = (((rseq[3] & 0xff) << 8) + (rseq[4] & 0xff));
short ElectricHeatingRatio = (((rseq[5] & 0xff) << 8) + (rseq[6] & 0xff));
short FlowRate = (((rseq[11] & 0xff) << 8) + (rseq[12] & 0xff));
EnterCriticalSection(&cc->m_ValueCS);
cc->m_TongFeiStat.m_CondensingFanRatio->SetValue((float)CondensingFanRatio / 10.0f);
cc->m_TongFeiStat.m_ElectricHeatingRatio->SetValue((float)ElectricHeatingRatio / 10.0f);
cc->m_TongFeiStat.m_FlowRate->SetValue((float)FlowRate/10.0f);
LeaveCriticalSection(&cc->m_ValueCS);
}
float ChillerClient::GetWaterTemp()
{
float fvalue = 0.0f;
EnterCriticalSection(&m_ValueCS);
if ((*m_Type) == ExtCfg::DOLUYO)
{
fvalue = m_DoluyoChillerStat.m_tempRealtimeValue->GetValue();
}
else if ((*m_Type) == ExtCfg::HANS) {
fvalue = m_HansChillerstat.m_WaterOutTemp->GetValue();
}
else if ((*m_Type) == ExtCfg::TONGFEI) {
fvalue = m_TongFeiStat.m_EffluentTempProbe->GetValue();
}
LeaveCriticalSection(&m_ValueCS);
return fvalue;
}