2024-05-22 15:58:54 +08:00
|
|
|
|
#include "WaterTempClient.h"
|
|
|
|
|
#include "Modbus.h"
|
|
|
|
|
#include "../utils/DataByte.h"
|
|
|
|
|
#include "../config/ConfigManager.h"
|
|
|
|
|
#include "../SystemInfo.h"
|
|
|
|
|
#include "../PLC/SignalService.h"
|
|
|
|
|
|
|
|
|
|
WaterTempClient::WaterTempClient(CommunicationCfg* pconfig) :TcpClient(pconfig)
|
|
|
|
|
, m_WaterTemp(0.0f) {
|
|
|
|
|
m_ExtCfg = ConfigManager::GetInstance()->GetExtCfg();
|
|
|
|
|
m_AlarmCfgWrapper = ConfigManager::GetInstance()->GetAlarmCfg();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void WaterTempClient::InitCommand()
|
|
|
|
|
{
|
|
|
|
|
|
2024-06-04 14:08:12 +08:00
|
|
|
|
Command* pCommand = new ReadModbus(m_Config->m_Addr->GetValue(), 0x0, 1);
|
2024-05-22 15:58:54 +08:00
|
|
|
|
pCommand->m_Fun = &WaterTempClient::ProcTempInfo;
|
|
|
|
|
pCommand->m_Ref = this;
|
|
|
|
|
pCommand->isNeedDel = false;
|
|
|
|
|
m_CycleCommands.push_back(pCommand);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void WaterTempClient::ProcTempInfo(void* pobject, Command* pcommand)
|
|
|
|
|
{
|
|
|
|
|
if (pobject == NULL)return;
|
|
|
|
|
WaterTempClient* client = (WaterTempClient*)pobject;
|
|
|
|
|
unsigned char* rseq = pcommand->m_RespSeq;
|
|
|
|
|
|
|
|
|
|
short temp1 = ((rseq[3] & 0xff) << 8) + (rseq[4] & 0xff);
|
|
|
|
|
float waterTemp = (float)temp1 / 10.0f - 200.0f;
|
|
|
|
|
|
|
|
|
|
EnterCriticalSection(&client->m_ValueCS);
|
|
|
|
|
client->m_WaterTemp = waterTemp;
|
|
|
|
|
LeaveCriticalSection(&client->m_ValueCS);
|
|
|
|
|
|
|
|
|
|
g_SystemInfo->LockInfo();
|
|
|
|
|
g_SystemInfo->m_PipeWaterTemp = waterTemp;
|
|
|
|
|
g_SystemInfo->UnlockInfo();
|
|
|
|
|
|
|
|
|
|
time_t tnow;
|
|
|
|
|
time(&tnow);
|
|
|
|
|
if (tnow - SignalService::GetInstance().GetWaterAlarmCheckTime() > 60 * 5) {
|
|
|
|
|
if (waterTemp < client->m_ExtCfg->m_PipeWaterTempDownLimit || waterTemp > client->m_ExtCfg->m_PipeWaterTempUpLimit) {
|
|
|
|
|
if (client->m_AlarmCfgWrapper->m_PipeWaterTempAlarm->m_AlarmContinueTick > 10) {
|
|
|
|
|
client->m_AlarmCfgWrapper->m_PipeWaterTempAlarm->m_AlarmInfo = to_string(waterTemp);
|
|
|
|
|
SignalService::GetInstance().SetAlarm(client->m_AlarmCfgWrapper->m_PipeWaterTempAlarm, true);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
client->m_AlarmCfgWrapper->m_PipeWaterTempAlarm->m_AlarmContinueTick++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
client->m_AlarmCfgWrapper->m_PipeWaterTempAlarm->m_AlarmContinueTick = 0;
|
|
|
|
|
SignalService::GetInstance().SetAlarm(client->m_AlarmCfgWrapper->m_PipeWaterTempAlarm, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
client->m_AlarmCfgWrapper->m_PipeWaterTempAlarm->m_AlarmContinueTick = 0;
|
|
|
|
|
SignalService::GetInstance().SetAlarm(client->m_AlarmCfgWrapper->m_PipeWaterTempAlarm, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float WaterTempClient::GetWaterTemp()
|
|
|
|
|
{
|
|
|
|
|
float rel = 0.0f;
|
|
|
|
|
EnterCriticalSection(&m_ValueCS);
|
|
|
|
|
rel = m_WaterTemp;
|
|
|
|
|
LeaveCriticalSection(&m_ValueCS);
|
|
|
|
|
return rel;
|
|
|
|
|
}
|