#include "TempCtrlClient.h" #include "Aibus.h" #include #include "../SystemInfo.h" //#include "../config/ConfigManager.h" //#include "../global.h" TempCtrlClient::TempCtrlClient(CommunicationCfg* pconfig):TcpClient(pconfig) { } TempCtrlClient::~TempCtrlClient() { Shutdown(); } void TempCtrlClient::InitCommand() { Command* pCommand = new Aibus(READ_FLOAT_POINT, m_Config->m_Addr, 0x0c, 0, true); pCommand->m_Fun = &TempCtrlClient::ProcTempInfo; pCommand->m_Ref = this; pCommand->isNeedDel = false; m_CycleCommands.push_back(pCommand); } void TempCtrlClient::SetTargeValue(float value) { EnterCriticalSection(&m_RtcCS); float targevalue = value*m_Stat.scale; Command* pCommand = new Aibus(SET_TARGE_VALUE, 0x1, 0x0, (short)targevalue, false); pCommand->m_Fun = &TempCtrlClient::ProcSetTemp; pCommand->m_Ref = this; m_RTCommands.push(pCommand); LeaveCriticalSection(&m_RtcCS); } void TempCtrlClient::ProcTempInfo(void* pobject, Command* pcommand) { if (pobject == NULL)return; TempCtrlClient* pTc = (TempCtrlClient*)pobject; unsigned char* rseq = pcommand->m_RespSeq; short floatPoint = (short)(rseq[7] << 8) + rseq[6]; if (floatPoint >= 128)floatPoint %= 128; int scale = 1; for (short i = 0; i < floatPoint; ++i) { scale *= 10; } EnterCriticalSection(&pTc->m_ValueCS); pTc->m_Stat.scale = scale; pTc->m_Stat.measuredValue = (float)((short)(rseq[1] << 8) + rseq[0]) / scale; pTc->m_Stat.settingValue = (float)((short)(rseq[3] << 8) + rseq[2]) / scale; pTc->m_Stat.outputValue = rseq[4]; bitset<8> bitStatus(rseq[5]); pTc->m_Stat.alarm.isOverLimit = bitStatus[0]; pTc->m_Stat.alarm.isLowerLimit = bitStatus[1]; pTc->m_Stat.alarm.isActiveAlarm = bitStatus[2]; pTc->m_Stat.alarm.isInactiveAlarm = bitStatus[3]; pTc->m_Stat.alarm.isInputLimit = bitStatus[4]; pTc->m_Stat.alarm.al1 = bitStatus[5]; pTc->m_Stat.alarm.al2 = bitStatus[6]; EnterCriticalSection(&g_SystemInfo->m_InfoCs); g_SystemInfo->m_PlatformTemp = pTc->m_Stat.measuredValue; g_SystemInfo->m_PlatformTempSettingValue = pTc->m_Stat.settingValue; LeaveCriticalSection(&g_SystemInfo->m_InfoCs); LeaveCriticalSection(&pTc->m_ValueCS); } void TempCtrlClient::ProcSetTemp(void* pobject, Command* pcommand) { if (pobject == NULL)return; TempCtrlClient* pTc = (TempCtrlClient*)pobject; unsigned char* rseq = pcommand->m_RespSeq; float fvalue = 0; EnterCriticalSection(&pTc->m_ValueCS); int scale = (pTc->m_Stat.scale == 0 ? 1 : pTc->m_Stat.scale); fvalue = (float)((short)(rseq[7] << 8) + rseq[6]) / scale; pTc->m_Stat.measuredValue = (float)((short)(rseq[1] << 8) + rseq[0]) / scale; pTc->m_Stat.settingValue = (float)((short)(rseq[3] << 8) + rseq[2]) / scale; pTc->m_Stat.outputValue = rseq[4]; bitset<8> bitStatus(rseq[5]); pTc->m_Stat.alarm.isOverLimit = bitStatus[0]; pTc->m_Stat.alarm.isLowerLimit = bitStatus[1]; pTc->m_Stat.alarm.isActiveAlarm = bitStatus[2]; pTc->m_Stat.alarm.isInactiveAlarm = bitStatus[3]; pTc->m_Stat.alarm.isInputLimit = bitStatus[4]; pTc->m_Stat.alarm.al1 = bitStatus[5]; pTc->m_Stat.alarm.al2 = bitStatus[6]; LeaveCriticalSection(&pTc->m_ValueCS); } void TempCtrlClient::GetStat(TempStat& stat) { EnterCriticalSection(&m_ValueCS); memcpy_s(&stat.alarm, sizeof(TempAlarm), &m_Stat.alarm, sizeof(TempAlarm)); stat.baseStat = m_BaseStat; stat.measuredValue = m_Stat.measuredValue; stat.outputValue = m_Stat.outputValue; stat.scale = m_Stat.scale; stat.settingValue = m_Stat.settingValue; LeaveCriticalSection(&m_ValueCS); }