GrpcPrint/PrintS/Communication/TempHumidityUnit.cpp

91 lines
3.1 KiB
C++
Raw Normal View History

#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()
{
Command* pUnit = new ReadModbus(4, m_Config->m_Addr->GetValue(), 0x0, 2);
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()) {
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()) {
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);
}