478 lines
18 KiB
C++
478 lines
18 KiB
C++
|
#include "HBDPurifierG3Client.h"
|
|||
|
#include "S7Command.h"
|
|||
|
#include "../SystemInfo.h"
|
|||
|
#include "../utils/DataByte.h"
|
|||
|
#include "../PLC/SignalService.h"
|
|||
|
|
|||
|
HBDPurifierG3Client::HBDPurifierG3Client(CommunicationCfg* pconfig):PurifierClient(pconfig)
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
HBDPurifierG3Client::~HBDPurifierG3Client()
|
|||
|
{
|
|||
|
Shutdown();
|
|||
|
}
|
|||
|
|
|||
|
void HBDPurifierG3Client::InitCommand()
|
|||
|
{
|
|||
|
//PurifierClient::InitCommand();
|
|||
|
|
|||
|
S7Command* pcommand = new S7Command(S7_COMMAND_READ_INFO, READ_ITEM_COUNT);
|
|||
|
TS7DataItem* items = pcommand->getDataItems();
|
|||
|
int itemFlag = 0;
|
|||
|
items[itemFlag].Area = S7AreaMK;
|
|||
|
items[itemFlag].WordLen = S7WLByte;
|
|||
|
items[itemFlag].Start = 0;
|
|||
|
items[itemFlag].Amount = 6;
|
|||
|
items[itemFlag].pdata = new unsigned char[6];
|
|||
|
|
|||
|
//VD_<44><5F>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ʵֵ
|
|||
|
itemFlag = 1;
|
|||
|
items[itemFlag].Area = S7AreaDB;
|
|||
|
items[itemFlag].WordLen = S7WLByte;
|
|||
|
items[itemFlag].DBNumber = 1;
|
|||
|
items[itemFlag].Start = 0;
|
|||
|
items[itemFlag].Amount = 206;
|
|||
|
items[itemFlag].pdata = new unsigned char[206];
|
|||
|
|
|||
|
itemFlag = 2;
|
|||
|
items[itemFlag].Area = S7AreaDB;
|
|||
|
items[itemFlag].WordLen = S7WLByte;
|
|||
|
items[itemFlag].DBNumber = 1;
|
|||
|
items[itemFlag].Start = 1000;
|
|||
|
items[itemFlag].Amount = 1;
|
|||
|
items[itemFlag].pdata = new unsigned char[1];
|
|||
|
|
|||
|
pcommand->m_Ref = this;
|
|||
|
pcommand->m_Fun = &HBDPurifierG3Client::G3ProcReadInfoXT;
|
|||
|
pcommand->isNeedDel = false;
|
|||
|
|
|||
|
|
|||
|
S7Command* pcommand2 = new S7Command(S7_COMMAND_READ_INFO, READ_ITEM_COUNT_2);
|
|||
|
TS7DataItem* items2 = pcommand2->getDataItems();
|
|||
|
itemFlag = 0;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
items2[itemFlag].Area = S7AreaDB;
|
|||
|
items2[itemFlag].WordLen = S7WLByte;
|
|||
|
items2[itemFlag].DBNumber = 1;
|
|||
|
items2[itemFlag].Start = 389;
|
|||
|
items2[itemFlag].Amount = 5;
|
|||
|
items2[itemFlag].pdata = new unsigned char[5];
|
|||
|
|
|||
|
itemFlag = 1;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
items2[itemFlag].Area = S7AreaDB;
|
|||
|
items2[itemFlag].WordLen = S7WLByte;
|
|||
|
items2[itemFlag].DBNumber = 1;
|
|||
|
items2[itemFlag].Start = 550;
|
|||
|
items2[itemFlag].Amount = 8;
|
|||
|
items2[itemFlag].pdata = new unsigned char[8];
|
|||
|
|
|||
|
itemFlag = 2;
|
|||
|
items2[itemFlag].Area = S7AreaDB;
|
|||
|
items2[itemFlag].WordLen = S7WLByte;
|
|||
|
items2[itemFlag].DBNumber = 1;
|
|||
|
items2[itemFlag].Start = 600;
|
|||
|
items2[itemFlag].Amount = 4;
|
|||
|
items2[itemFlag].pdata = new unsigned char[4];
|
|||
|
|
|||
|
|
|||
|
itemFlag = 3;
|
|||
|
items2[itemFlag].Area = S7AreaDB;
|
|||
|
items2[itemFlag].WordLen = S7WLByte;
|
|||
|
items2[itemFlag].DBNumber = 1;
|
|||
|
items2[itemFlag].Start = 356;
|
|||
|
items2[itemFlag].Amount = 4;
|
|||
|
items2[itemFlag].pdata = new unsigned char[4];
|
|||
|
|
|||
|
itemFlag = 4;
|
|||
|
items2[itemFlag].Area = S7AreaDB;
|
|||
|
items2[itemFlag].WordLen = S7WLByte;
|
|||
|
items2[itemFlag].DBNumber = 1;
|
|||
|
items2[itemFlag].Start = 696;
|
|||
|
items2[itemFlag].Amount = 4;
|
|||
|
items2[itemFlag].pdata = new unsigned char[4];
|
|||
|
|
|||
|
itemFlag = 5;
|
|||
|
items2[itemFlag].Area = S7AreaDB;
|
|||
|
items2[itemFlag].WordLen = S7WLByte;
|
|||
|
items2[itemFlag].DBNumber = 1;
|
|||
|
items2[itemFlag].Start = 1442;
|
|||
|
items2[itemFlag].Amount = 4;
|
|||
|
items2[itemFlag].pdata = new unsigned char[4];
|
|||
|
|
|||
|
itemFlag = 6;
|
|||
|
items2[itemFlag].Area = S7AreaDB;
|
|||
|
items2[itemFlag].WordLen = S7WLByte;
|
|||
|
items2[itemFlag].DBNumber = 1;
|
|||
|
items2[itemFlag].Start = 595;
|
|||
|
items2[itemFlag].Amount = 1;
|
|||
|
items2[itemFlag].pdata = new unsigned char[1];
|
|||
|
|
|||
|
itemFlag = 7;
|
|||
|
items2[itemFlag].Area = S7AreaDB;
|
|||
|
items2[itemFlag].WordLen = S7WLByte;
|
|||
|
items2[itemFlag].DBNumber = 1;
|
|||
|
items2[itemFlag].Start = 658;
|
|||
|
items2[itemFlag].Amount = 4;
|
|||
|
items2[itemFlag].pdata = new unsigned char[4];
|
|||
|
|
|||
|
itemFlag = 8;
|
|||
|
items2[itemFlag].Area = S7AreaDB;
|
|||
|
items2[itemFlag].WordLen = S7WLByte;
|
|||
|
items2[itemFlag].DBNumber = 1;
|
|||
|
items2[itemFlag].Start = 430;
|
|||
|
items2[itemFlag].Amount = 6;
|
|||
|
items2[itemFlag].pdata = new unsigned char[6];
|
|||
|
|
|||
|
pcommand2->m_Ref = this;
|
|||
|
pcommand2->m_Fun = &HBDPurifierG3Client::G3ProcReadInfoXT_2;
|
|||
|
pcommand2->isNeedDel = false;
|
|||
|
|
|||
|
//д<><D0B4><EFBFBD><EFBFBD>ֵ
|
|||
|
S7Command* oxygenPressureCom = new S7Command(S7_COMMAND_WRITE, 2);
|
|||
|
TS7DataItem* dataItem = oxygenPressureCom->getDataItems();
|
|||
|
dataItem[0].Area = S7AreaDB;
|
|||
|
dataItem[0].DBNumber = 1;
|
|||
|
dataItem[0].Start = 408;
|
|||
|
dataItem[0].WordLen = S7WLByte;
|
|||
|
dataItem[0].Amount = 4;
|
|||
|
unsigned char* poxygenfloat = new unsigned char[4];
|
|||
|
S7FLOATDATA foxygendata;
|
|||
|
foxygendata.fValue = (g_SystemInfo->m_ComPrintOxygen1 > g_SystemInfo->m_ComPrintOxygen2 ? g_SystemInfo->m_ComPrintOxygen1 : g_SystemInfo->m_ComPrintOxygen2);
|
|||
|
poxygenfloat[0] = foxygendata.data[3];
|
|||
|
poxygenfloat[1] = foxygendata.data[2];
|
|||
|
poxygenfloat[2] = foxygendata.data[1];
|
|||
|
poxygenfloat[3] = foxygendata.data[0];
|
|||
|
dataItem[0].pdata = poxygenfloat;
|
|||
|
m_OxygenWriteValue = (unsigned char*)dataItem[0].pdata;
|
|||
|
|
|||
|
dataItem[1].Area = S7AreaDB;
|
|||
|
dataItem[1].DBNumber = 1;
|
|||
|
dataItem[1].Start = 20;
|
|||
|
dataItem[1].WordLen = S7WLByte;
|
|||
|
dataItem[1].Amount = 4;
|
|||
|
unsigned char* pfloat = new unsigned char[4];
|
|||
|
S7FLOATDATA fdata;
|
|||
|
EnterCriticalSection(&g_SystemInfo->m_InfoCs);
|
|||
|
fdata.fValue = g_SystemInfo->m_EnvState.m_PrintPressureAnalog;
|
|||
|
LeaveCriticalSection(&g_SystemInfo->m_InfoCs);
|
|||
|
pfloat[0] = fdata.data[3];
|
|||
|
pfloat[1] = fdata.data[2];
|
|||
|
pfloat[2] = fdata.data[1];
|
|||
|
pfloat[3] = fdata.data[0];
|
|||
|
dataItem[1].pdata = pfloat;
|
|||
|
m_PressureWriteValue = (unsigned char*)dataItem[1].pdata;
|
|||
|
|
|||
|
oxygenPressureCom->m_Ref = this;
|
|||
|
oxygenPressureCom->m_Fun = &PurifierClient::ProcWriteValueXT;
|
|||
|
oxygenPressureCom->isNeedDel = false;
|
|||
|
oxygenPressureCom->m_PreWrite = &HBDPurifierG3Client::ProcSetPressureValue;
|
|||
|
|
|||
|
m_CycleCommands.push_back(pcommand);
|
|||
|
m_CycleCommands.push_back(pcommand2);
|
|||
|
m_CycleCommands.push_back(oxygenPressureCom);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void HBDPurifierG3Client::G3ProcReadInfoXT(void *pobject, Command* pcommand)
|
|||
|
{
|
|||
|
S7Command* s7Command = (S7Command*)pcommand;
|
|||
|
TS7DataItem* pdataItems = s7Command->getDataItems();
|
|||
|
int itemcount = s7Command->getItemCount();
|
|||
|
if (pobject == NULL || itemcount != READ_ITEM_COUNT)return;
|
|||
|
HBDPurifierG3Client* ppw = (HBDPurifierG3Client*)pobject;
|
|||
|
TS7DataItem pCtrl = pdataItems[0];
|
|||
|
TS7DataItem pPresure = pdataItems[1];
|
|||
|
TS7DataItem ppCtrl = pdataItems[2];
|
|||
|
|
|||
|
TS7DataItem pKeepAlive = pdataItems[7];
|
|||
|
TS7DataItem pFreq = pdataItems[8];
|
|||
|
//TS7DataItem pUseDeoxygenLimit = pdataItems[8];
|
|||
|
//TS7DataItem pUseGasSupply = pdataItems[9];
|
|||
|
//TS7DataItem pFanFreq = pdataItems[8];
|
|||
|
|
|||
|
|
|||
|
EnterCriticalSection(&ppw->m_ValueCS);
|
|||
|
if (pCtrl.Result == 0) {
|
|||
|
unsigned char* arr = (unsigned char*)pCtrl.pdata;
|
|||
|
unsigned char mdata0 = arr[0];
|
|||
|
unsigned char mdata1 = arr[1];
|
|||
|
unsigned char mdata2 = arr[2];
|
|||
|
unsigned char mdata3 = arr[3];
|
|||
|
unsigned char mdata4 = arr[4];
|
|||
|
unsigned char mdata5 = arr[5];
|
|||
|
ppw->m_Stat.isPurifying = ((mdata5 & 0x1)>0 ? true : false);
|
|||
|
ppw->m_Stat.isDedusting = ((mdata0 & 0x4) ? true : false);
|
|||
|
ppw->m_Stat.isBoxCleaning = ((mdata0 & 0x40) ? true : false);
|
|||
|
ppw->m_Stat.isBlowBack = ((mdata1 & 0x2) ? true : false);
|
|||
|
ppw->m_Stat.isFilterDiscarding = ((mdata1 & 0x10) ? true : false);
|
|||
|
ppw->m_Stat.isFilterCleaning = ((mdata1 & 0x80) ? true : false);
|
|||
|
ppw->m_Stat.isHopperCleaning = ((mdata2 & 0x20) ? true : false);
|
|||
|
}
|
|||
|
if (pPresure.Result == 0) {
|
|||
|
unsigned char* pchar = (unsigned char*)pPresure.pdata;
|
|||
|
ppw->m_Stat.midPressureValue = FLOATDATA(false, &pchar[0]).fValue;
|
|||
|
ppw->m_Stat.midPressureDifValue = FLOATDATA(false, &pchar[4]).fValue;
|
|||
|
ppw->m_Stat.midTemperatureValue = FLOATDATA(false, &pchar[8]).fValue;
|
|||
|
ppw->m_Stat.highPressureDifValue = FLOATDATA(false, &pchar[12]).fValue;
|
|||
|
//ppw->m_Stat.anemometerActualValue = FLOATDATA(false, &pchar[16]).fValue;
|
|||
|
ppw->m_Stat.printPressureValue = FLOATDATA(false, &pchar[20]).fValue;
|
|||
|
ppw->m_Stat.boxPressureUpLimit = FLOATDATA(false, &pchar[28]).fValue;
|
|||
|
ppw->m_Stat.boxPressureDownLimit = FLOATDATA(false, &pchar[32]).fValue;
|
|||
|
ppw->m_Stat.filterOxygenValue = FLOATDATA(false, &pchar[48]).fValue;
|
|||
|
ppw->m_Stat.printOxygenValue = FLOATDATA(false, &pchar[60]).fValue;
|
|||
|
ppw->m_Stat.midPressureDifAlarmValue = FLOATDATA(false, &pchar[64]).fValue;
|
|||
|
ppw->m_Stat.highPressureDifAlarmValue = FLOATDATA(false, &pchar[68]).fValue;
|
|||
|
ppw->m_Stat.printOxygenUpSetValue = FLOATDATA(false, &pchar[76]).fValue;
|
|||
|
ppw->m_RunCfg->m_WarnOxygen = ppw->m_Stat.printOxygenUpSetValue;
|
|||
|
|
|||
|
ppw->m_Stat.boxWashTime = ((pchar[110] & 0xff) << 8) + (pchar[111] & 0xff);
|
|||
|
ppw->m_Stat.filterWashTime = ((pchar[112] & 0xff) << 8) + (pchar[113] & 0xff);
|
|||
|
ppw->m_Stat.boxWashDelayTime = ((pchar[114] & 0xff) << 8) + (pchar[115] & 0xff);
|
|||
|
ppw->m_Stat.dedustingWashDelayTime = ((pchar[116] & 0xff) << 8) + (pchar[117] & 0xff);
|
|||
|
ppw->m_Stat.hopperCleanRemind = ((pchar[118] & 0xff) << 8) + (pchar[119] & 0xff);
|
|||
|
|
|||
|
ppw->m_Stat.printCleanOxygenSetValue = FLOATDATA(false, &pchar[142]).fValue;
|
|||
|
ppw->m_Stat.windSetValue = FLOATDATA(false, &pchar[146]).fValue;
|
|||
|
ppw->m_Stat.windActualValue = FLOATDATA(false, &pchar[150]).fValue;
|
|||
|
ppw->m_Stat.filterCleanOxygenSetValue = FLOATDATA(false, &pchar[158]).fValue;
|
|||
|
ppw->m_Stat.midTempHighSetValue = FLOATDATA(false, &pchar[166]).fValue;
|
|||
|
ppw->m_Stat.midTempUltraSetValue = FLOATDATA(false, &pchar[170]).fValue;
|
|||
|
ppw->m_Stat.oxygenAlarmValue = FLOATDATA(false, &pchar[190]).fValue;
|
|||
|
ppw->m_RunCfg->SetOxygenAlarmValue(ppw->m_Stat.oxygenAlarmValue);
|
|||
|
ppw->m_RunCfg->SetOxygenTargeValue(ppw->m_Stat.printCleanOxygenSetValue);
|
|||
|
|
|||
|
FanFit* al = ppw->m_ExtCfg->m_FanWindFit[ppw->m_ExtCfg->m_SelectedFanWindFit];
|
|||
|
if (al->alarmWind > ppw->m_Stat.windSetValue) {
|
|||
|
al->alarmWind = (ppw->m_Stat.windSetValue > 50.0f) ? (ppw->m_Stat.windSetValue - 50.0f) : 1.0f;
|
|||
|
}
|
|||
|
|
|||
|
ppw->m_Stat.filterTotalUseTime = ((pchar[194] & 0xff) << 8) + (pchar[195] & 0xff);
|
|||
|
ppw->m_Stat.usedTimeFromlastBowBack = ((pchar[196] & 0xff) << 8) + (pchar[197] & 0xff);
|
|||
|
ppw->m_Stat.bowBackTimes = ((pchar[198] & 0xff) << 8) + (pchar[199] & 0xff);
|
|||
|
ppw->m_Stat.hopperTimeLastClean = ((pchar[204] & 0xff) << 8) + (pchar[205] & 0xff);
|
|||
|
|
|||
|
if (ppw->m_AlarmCfgWrapper->m_PurifierOxygenAlarm) {
|
|||
|
if (ppw->m_Stat.filterOxygenValue > ppw->m_RunCfg->m_FilterOxygenAlarmValue) {
|
|||
|
if (ppw->m_AlarmCfgWrapper->m_PurifierOxygenAlarm->m_AlarmContinueTick > ppw->m_AlarmCfgWrapper->m_PurifierOxygenAlarm->m_CheckAlarmSetTick) {
|
|||
|
ppw->m_AlarmCfgWrapper->m_PurifierOxygenAlarm->m_AlarmInfo = to_string(ppw->m_Stat.filterOxygenValue);
|
|||
|
SignalService::GetInstance().SetAlarm(ppw->m_AlarmCfgWrapper->m_PurifierOxygenAlarm, true);
|
|||
|
}
|
|||
|
else {
|
|||
|
ppw->m_AlarmCfgWrapper->m_PurifierOxygenAlarm->m_AlarmContinueTick++;
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
ppw->m_AlarmCfgWrapper->m_PurifierOxygenAlarm->m_AlarmContinueTick = 0;
|
|||
|
SignalService::GetInstance().SetAlarm(ppw->m_AlarmCfgWrapper->m_PurifierOxygenAlarm, false);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if (ppCtrl.Result == 0) {
|
|||
|
unsigned char* arr = (unsigned char*)ppCtrl.pdata;
|
|||
|
ppw->m_Stat.ProtectionPressuring = ((arr[0] & 0x10) > 0 ? true : false);
|
|||
|
ppw->m_Stat.protectionPressureEnable = ((arr[0] & 0x40) > 0 ? true : false);
|
|||
|
}
|
|||
|
|
|||
|
LeaveCriticalSection(&ppw->m_ValueCS);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void HBDPurifierG3Client::G3ProcReadInfoXT_2(void* pobject, Command* pcommand)
|
|||
|
{
|
|||
|
S7Command* s7Command = (S7Command*)pcommand;
|
|||
|
TS7DataItem* pdataItems = s7Command->getDataItems();
|
|||
|
int itemcount = s7Command->getItemCount();
|
|||
|
if (pobject == NULL || itemcount != READ_ITEM_COUNT_2)return;
|
|||
|
HBDPurifierG3Client* ppw = (HBDPurifierG3Client*)pobject;
|
|||
|
|
|||
|
TS7DataItem pAlarm = pdataItems[0];
|
|||
|
TS7DataItem pMaxWind = pdataItems[1];
|
|||
|
TS7DataItem pCoverWindOffset = pdataItems[2];
|
|||
|
TS7DataItem pWindAct = pdataItems[3];
|
|||
|
TS7DataItem pKeepAlive = pdataItems[4];
|
|||
|
TS7DataItem pFreq = pdataItems[5];
|
|||
|
TS7DataItem pSignal = pdataItems[6];
|
|||
|
TS7DataItem testRel = pdataItems[7];
|
|||
|
TS7DataItem pBlowRel = pdataItems[8];
|
|||
|
|
|||
|
EnterCriticalSection(&ppw->m_ValueCS);
|
|||
|
if (pAlarm.Result == 0) {
|
|||
|
unsigned char* arr = (unsigned char*)pAlarm.pdata;
|
|||
|
unsigned char pdata1 = arr[0];
|
|||
|
unsigned char pdata2 = arr[1];
|
|||
|
unsigned char pdata3 = arr[2];
|
|||
|
|
|||
|
ppw->m_Stat.midTempOverLimitAlarm = ((pdata1 & 0x1) > 0 ? true : false); //<2F><>Ч<EFBFBD><D0A7><EFBFBD>±<EFBFBD><C2B1><EFBFBD>,<2C><>ע<EFBFBD><D7A2>
|
|||
|
ppw->m_Stat.midHighTempOverLimitAlarm = ((pdata1 & 0x2) > 0 ? true : false); //<2F><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><C2B1><EFBFBD>,<2C>Ѿ<EFBFBD><D1BE><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ppw->m_Stat.hopperUseLongTimeAlarm = ((pdata1 & 0x4) > 0 ? true : false); //<2F>϶<EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ppw->m_Stat.highPressureLackValveAlarm = ((pdata1 & 0x8) > 0 ? true : false); //<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>쳣<EFBFBD>رգ<D8B1><D5A3><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ȶ<EFBFBD><C8B6><EFBFBD>ѹ
|
|||
|
ppw->m_Stat.protectionTestFail = ((pdata1 & 0x10) > 0 ? true : false);
|
|||
|
ppw->m_Stat.inverterAlarm = ((pdata1 & 0x20) > 0 ? true : false); //<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ppw->m_Stat.whirlwindJarIsFull = ((pdata1 & 0x40) > 0 ? true : false);
|
|||
|
ppw->m_Stat.midInValveOpenAlarm = ((pdata1 & 0x80) > 0 ? true : false);
|
|||
|
|
|||
|
ppw->m_Stat.cycleInValveOpenAlarm = ((pdata2 & 0x1) > 0 ? true : false); //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣,<2C><><EFBFBD><EFBFBD><EFBFBD>鷧<EFBFBD><E9B7A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ppw->m_Stat.cycleOutValueOpenAlarm = ((pdata2 & 0x2) > 0 ? true : false); //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鷧<EFBFBD><E9B7A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ppw->m_Stat.highPressureLackAlarm = ((pdata2 & 0x4) > 0 ? true : false); //<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>㣬<EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD>벹<EFBFBD><EBB2B9>ѹ<EFBFBD><D1B9>
|
|||
|
ppw->m_Stat.protectedPressureLackAlarm = ((pdata2 & 0x8) > 0 ? true : false); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>㣬<EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD>벹<EFBFBD><EBB2B9>ѹ<EFBFBD><D1B9>
|
|||
|
ppw->m_Stat.midConnectException = ((pdata2 & 0x10) > 0 ? true : false); //<2F><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ppw->m_Stat.carbinDoorOpenException = ((pdata2 & 0x20) > 0 ? true : false); //<2F><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD>쳣,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>رպò<D5BA><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD>Ӧ<EFBFBD><D3A6>
|
|||
|
ppw->m_Stat.midFilterBlockAlarm = ((pdata2 & 0x40) > 0 ? true : false); //<2F><>Ч<EFBFBD><D0A7>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ppw->m_Stat.busOutValveNotOpenAlarm = ((pdata2 & 0x80) > 0 ? true : false); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><F2BFAAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
|
|||
|
ppw->m_Stat.busOutValveNotCloseAlarm = ((pdata3 & 0x01) > 0 ? true : false); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>رգ<D8B1><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
ppw->m_Stat.busOutValveNotInPosAlarm = ((pdata3 & 0x02) > 0 ? true : false); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>λ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
ppw->m_Stat.printOutValveNotOpenAlarm = ((pdata3 & 0x04) > 0 ? true : false); //<2F><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><F2BFAAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
ppw->m_Stat.printOutValveNotCloseAlarm = ((pdata3 & 0x08) > 0 ? true : false); //<2F><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>رգ<D8B1><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
ppw->m_Stat.printOutValveNotInPosAlarm = ((pdata3 & 0x10) > 0 ? true : false); //<2F><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>λ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
ppw->m_Stat.inverterComException = ((pdata3 & 0x20) > 0 ? true : false);
|
|||
|
ppw->m_Stat.anemometerException = ((pdata3 & 0x40) > 0 ? true : false);
|
|||
|
ppw->m_Stat.midOutValveOpenAlarm = ((pdata3 & 0x80) > 0 ? true : false); //<2F><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>λ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
ppw->m_Stat.oxygenSelfTestFail = ((arr[4] & 0x01) > 0 ? true : false);
|
|||
|
|
|||
|
if (ppw->m_AlarmCfgWrapper->m_PurifierMidTempAlarm)
|
|||
|
SignalService::GetInstance().SetAlarm(ppw->m_AlarmCfgWrapper->m_PurifierMidTempAlarm, ppw->m_Stat.midTempOverLimitAlarm);
|
|||
|
}
|
|||
|
|
|||
|
if (pMaxWind.Result == 0) {
|
|||
|
char* pchar = (char*)pMaxWind.pdata;
|
|||
|
S7FLOATDATA maxWindSetValue;
|
|||
|
maxWindSetValue.data[0] = pchar[3];
|
|||
|
maxWindSetValue.data[1] = pchar[2];
|
|||
|
maxWindSetValue.data[2] = pchar[1];
|
|||
|
maxWindSetValue.data[3] = pchar[0];
|
|||
|
ppw->m_Stat.maxWindSetValue = maxWindSetValue.fValue;
|
|||
|
ppw->m_Stat.shieldMonitorPrintPressure = ((pchar[7] & 0x1) > 0 ? true : false);
|
|||
|
ppw->m_Stat.useArgon = ((pchar[7] & 0x2) > 0 ? true : false);
|
|||
|
ppw->m_ExtCfg->m_SelectedFanWindFit = ppw->m_Stat.useArgon ? 1 : 0;
|
|||
|
|
|||
|
ppw->m_Stat.isCoverWind = ((pchar[7] & 0x10) > 0 ? true : false);
|
|||
|
}
|
|||
|
|
|||
|
if (pCoverWindOffset.Result == 0) {
|
|||
|
char* pchar = (char*)pCoverWindOffset.pdata;
|
|||
|
// S7FLOATDATA anemometerActualValue;
|
|||
|
S7FLOATDATA coverWindOffset;
|
|||
|
|
|||
|
coverWindOffset.data[0] = pchar[3];
|
|||
|
coverWindOffset.data[1] = pchar[2];
|
|||
|
coverWindOffset.data[2] = pchar[1];
|
|||
|
coverWindOffset.data[3] = pchar[0];
|
|||
|
ppw->m_Stat.coverWindSpeedOffset = coverWindOffset.fValue;
|
|||
|
}
|
|||
|
|
|||
|
if (pWindAct.Result == 0)
|
|||
|
{
|
|||
|
unsigned char* pchar = (unsigned char*)pWindAct.pdata;
|
|||
|
ppw->m_Stat.anemometerActualValue = FLOATDATA(false, &pchar[0]).fValue;
|
|||
|
}
|
|||
|
|
|||
|
if (pKeepAlive.Result == 0)
|
|||
|
{
|
|||
|
char* pchar = (char*)pKeepAlive.pdata;
|
|||
|
ppw->m_Stat.purifierType = ((pchar[0] & 0xff) << 8) + (pchar[1] & 0xff);
|
|||
|
ppw->m_Stat.keepAlive = ((pchar[2] & 0xff) << 8) + (pchar[3] & 0xff);
|
|||
|
}
|
|||
|
|
|||
|
if (pFreq.Result == 0)
|
|||
|
{
|
|||
|
char* pchar = (char*)pFreq.pdata;
|
|||
|
S7FLOATDATA freq;
|
|||
|
freq.data[0] = pchar[3];
|
|||
|
freq.data[1] = pchar[2];
|
|||
|
freq.data[2] = pchar[1];
|
|||
|
freq.data[3] = pchar[0];
|
|||
|
ppw->m_Stat.fanFreq = freq.fValue;
|
|||
|
}
|
|||
|
|
|||
|
if (pSignal.Result == 0)
|
|||
|
{
|
|||
|
char* pchar = (char*)pSignal.pdata;
|
|||
|
ppw->m_Stat.coverWindSlowFinish = ((pchar[0] & 0x1) > 0 ? true : false);
|
|||
|
ppw->m_Stat.coverWindResumeFinish = ((pchar[0] & 0x2) > 0 ? true : false);
|
|||
|
}
|
|||
|
|
|||
|
if (testRel.Result == 0)
|
|||
|
{
|
|||
|
unsigned char* arr = (unsigned char*)testRel.pdata;
|
|||
|
ppw->m_Stat.ProtectionPressureSetTime = ((arr[0] & 0xff) << 8) + (arr[1] & 0xff);
|
|||
|
if (arr[2] == 2) {
|
|||
|
ppw->m_Stat.ProtectionPressureTestRelFail = true;
|
|||
|
}
|
|||
|
else ppw->m_Stat.ProtectionPressureTestRelFail = false;
|
|||
|
|
|||
|
if (arr[3] == 2) {
|
|||
|
ppw->m_Stat.oxygenSelfTestRelFail = true;
|
|||
|
}
|
|||
|
else ppw->m_Stat.oxygenSelfTestRelFail = false;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
if (pBlowRel.Result == 0)
|
|||
|
{
|
|||
|
unsigned char* arr = (unsigned char*)pBlowRel.pdata;
|
|||
|
ppw->m_Stat.blowBackBlowTime = ((arr[0] & 0xff) << 8) + (arr[1] & 0xff);
|
|||
|
ppw->m_Stat.blowBackSetTimes = ((arr[4] & 0xff) << 8) + (arr[5] & 0xff);
|
|||
|
}
|
|||
|
LeaveCriticalSection(&ppw->m_ValueCS);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void HBDPurifierG3Client::ProcSetPressureValue(void *pobject, Command* pcommand)
|
|||
|
{
|
|||
|
if (pobject == NULL)return;
|
|||
|
HBDPurifierG3Client* ppw = (HBDPurifierG3Client*)pobject;
|
|||
|
S7FLOATDATA fdata;
|
|||
|
S7FLOATDATA foxygen;
|
|||
|
g_SystemInfo->LockInfo();
|
|||
|
EnterCriticalSection(&g_SystemInfo->m_InfoCs);
|
|||
|
foxygen.fValue = (g_SystemInfo->m_ComPrintOxygen1 > g_SystemInfo->m_ComPrintOxygen2 ? g_SystemInfo->m_ComPrintOxygen1 : g_SystemInfo->m_ComPrintOxygen2);
|
|||
|
fdata.fValue = g_SystemInfo->m_EnvState.m_PrintPressureAnalog;
|
|||
|
|
|||
|
LeaveCriticalSection(&g_SystemInfo->m_InfoCs);
|
|||
|
g_SystemInfo->UnlockInfo();
|
|||
|
ppw->m_PressureWriteValue[0] = fdata.data[3];
|
|||
|
ppw->m_PressureWriteValue[1] = fdata.data[2];
|
|||
|
ppw->m_PressureWriteValue[2] = fdata.data[1];
|
|||
|
ppw->m_PressureWriteValue[3] = fdata.data[0];
|
|||
|
|
|||
|
ppw->m_OxygenWriteValue[0] = foxygen.data[3];
|
|||
|
ppw->m_OxygenWriteValue[1] = foxygen.data[2];
|
|||
|
ppw->m_OxygenWriteValue[2] = foxygen.data[1];
|
|||
|
ppw->m_OxygenWriteValue[3] = foxygen.data[0];
|
|||
|
}
|
|||
|
|
|||
|
void HBDPurifierG3Client::SetCoverWind(bool bvalue)
|
|||
|
{
|
|||
|
EnterCriticalSection(&m_RtcCS);
|
|||
|
S7Command* pcommand = new S7Command(S7_COMMAND_WRITE, 1);
|
|||
|
TS7DataItem* items = pcommand->getDataItems();
|
|||
|
items[0].Area = S7AreaDB;
|
|||
|
items[0].DBNumber = 1;
|
|||
|
items[0].Start = 557 * 8 + 4;
|
|||
|
items[0].WordLen = S7WLBit;
|
|||
|
items[0].Amount = 1;
|
|||
|
bool* tempv = new bool[1];
|
|||
|
tempv[0] = bvalue;
|
|||
|
items[0].pdata = tempv;
|
|||
|
pcommand->m_Ref = this;
|
|||
|
pcommand->m_waitTime = 0;
|
|||
|
pcommand->m_Fun = &PurifierClient::ProcWriteValueXT;
|
|||
|
m_RTCommands.push(pcommand);
|
|||
|
LeaveCriticalSection(&m_RtcCS);
|
|||
|
}
|
|||
|
|
|||
|
void HBDPurifierG3Client::SetCoverWindOffset(float offset)
|
|||
|
{
|
|||
|
if (!IsServerConnected())return;
|
|||
|
SetDBFloat(600, offset);
|
|||
|
}
|
|||
|
|
|||
|
void HBDPurifierG3Client::SetProtectionPressure(bool bvalue)
|
|||
|
{
|
|||
|
if (!IsServerConnected())return;
|
|||
|
SetBit(1000 * 8 + 4, bvalue);
|
|||
|
}
|