2024-05-22 15:58:54 +08:00
|
|
|
|
#include "TempHumidityUnit.h"
|
|
|
|
|
#include "Modbus.h"
|
|
|
|
|
#include "../config/ConfigManager.h"
|
|
|
|
|
#include "../PLC/SignalService.h"
|
|
|
|
|
|
|
|
|
|
TempHumidityUnit::TempHumidityUnit(CommunicationCfg* pconfig) :TcpClient(pconfig)
|
|
|
|
|
{
|
|
|
|
|
m_TempValue = 0.0f;
|
|
|
|
|
m_HumidityValue = 0.0f;
|
|
|
|
|
m_Freq = 300;
|
|
|
|
|
m_AlarmCfgWrapper = ConfigManager::GetInstance()->GetAlarmCfg();
|
|
|
|
|
m_RunCfg = ConfigManager::GetInstance()->GetRunCfg();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TempHumidityUnit::~TempHumidityUnit()
|
|
|
|
|
{
|
|
|
|
|
Shutdown();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TempHumidityUnit::InitCommand()
|
|
|
|
|
{
|
2024-06-04 14:08:12 +08:00
|
|
|
|
Command* pUnit = new ReadModbus(4, m_Config->m_Addr->GetValue(), 0x0, 2);
|
2024-05-22 15:58:54 +08:00
|
|
|
|
pUnit->m_Fun = &TempHumidityUnit::PorcReadValue;
|
|
|
|
|
pUnit->m_Ref = this;
|
|
|
|
|
pUnit->isNeedDel = false;
|
|
|
|
|
m_CycleCommands.push_back(pUnit);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TempHumidityUnit::PorcReadValue(void* pobject, Command* pcommand)
|
|
|
|
|
{
|
|
|
|
|
if (pobject == NULL)return;
|
|
|
|
|
TempHumidityUnit* thu = (TempHumidityUnit*)pobject;
|
|
|
|
|
unsigned char* rseq = pcommand->m_RespSeq;
|
|
|
|
|
unsigned char addr = rseq[0];
|
|
|
|
|
float temp = (float)(((rseq[3] & 0xff) << 8) + (rseq[4] & 0xff)) / 100.0f;
|
|
|
|
|
float humidity = (float)(((rseq[5] & 0xff) << 8) + (rseq[6] & 0xff)) / 100.0f;
|
|
|
|
|
|
|
|
|
|
EnterCriticalSection(&thu->m_ValueCS);
|
|
|
|
|
thu->m_TempValue = temp;
|
|
|
|
|
thu->m_HumidityValue = humidity;
|
|
|
|
|
LeaveCriticalSection(&thu->m_ValueCS);
|
|
|
|
|
|
|
|
|
|
if (thu->m_AlarmCfgWrapper->m_InnerTempOverLimit) {
|
2024-05-28 13:28:07 +08:00
|
|
|
|
if (temp > thu->m_RunCfg->m_AlarmTemperture->GetValue()) {
|
2024-05-22 15:58:54 +08:00
|
|
|
|
if (thu->m_AlarmCfgWrapper->m_InnerTempOverLimit->m_AlarmContinueTick > thu->m_AlarmCfgWrapper->m_InnerTempOverLimit->m_CheckAlarmSetTick) {
|
|
|
|
|
thu->m_AlarmCfgWrapper->m_InnerTempOverLimit->m_AlarmInfo = to_string(temp);
|
|
|
|
|
SignalService::GetInstance().SetAlarm(thu->m_AlarmCfgWrapper->m_InnerTempOverLimit, true);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
thu->m_AlarmCfgWrapper->m_InnerTempOverLimit->m_AlarmContinueTick++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
thu->m_AlarmCfgWrapper->m_InnerTempOverLimit->m_AlarmContinueTick = 0;
|
|
|
|
|
SignalService::GetInstance().SetAlarm(thu->m_AlarmCfgWrapper->m_InnerTempOverLimit, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (thu->m_AlarmCfgWrapper->m_InnerHumidityOverLimitAlarm) {
|
2024-05-28 13:28:07 +08:00
|
|
|
|
if (humidity > thu->m_RunCfg->m_AlarmHumidityValue->GetValue()) {
|
2024-05-22 15:58:54 +08:00
|
|
|
|
if (thu->m_AlarmCfgWrapper->m_InnerHumidityOverLimitAlarm->m_AlarmContinueTick > thu->m_AlarmCfgWrapper->m_InnerHumidityOverLimitAlarm->m_CheckAlarmSetTick) {
|
|
|
|
|
thu->m_AlarmCfgWrapper->m_InnerHumidityOverLimitAlarm->m_AlarmInfo = to_string(humidity);
|
|
|
|
|
SignalService::GetInstance().SetAlarm(thu->m_AlarmCfgWrapper->m_InnerHumidityOverLimitAlarm, true);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
thu->m_AlarmCfgWrapper->m_InnerHumidityOverLimitAlarm->m_AlarmContinueTick++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
thu->m_AlarmCfgWrapper->m_InnerHumidityOverLimitAlarm->m_AlarmContinueTick = 0;
|
|
|
|
|
SignalService::GetInstance().SetAlarm(thu->m_AlarmCfgWrapper->m_InnerHumidityOverLimitAlarm, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TempHumidityUnit::GetValue(float& temp, float& humidity, BaseStat& bs)
|
|
|
|
|
{
|
|
|
|
|
EnterCriticalSection(&m_ValueCS);
|
|
|
|
|
temp = m_TempValue;
|
|
|
|
|
humidity = m_HumidityValue;
|
|
|
|
|
bs = m_BaseStat;
|
|
|
|
|
LeaveCriticalSection(&m_ValueCS);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TempHumidityUnit::GetValue(float& temp, float& humidity)
|
|
|
|
|
{
|
|
|
|
|
EnterCriticalSection(&m_ValueCS);
|
|
|
|
|
temp = m_TempValue;
|
|
|
|
|
humidity = m_HumidityValue;
|
|
|
|
|
LeaveCriticalSection(&m_ValueCS);
|
|
|
|
|
}
|