GrpcPrint/PrintS/Communication/PurifierClient.cpp
2024-03-19 17:45:12 +08:00

879 lines
29 KiB
C++

#include "PurifierClient.h"
#include "S7Command.h"
#include "../global.h"
#include "../SystemInfo.h"
#include "../PLC/SignalService.h"
#include "../utils/DataByte.h"
PurifierClient::PurifierClient(CommunicationCfg* pconfig) :S7Client(pconfig)
{
m_RunCfg = ConfigManager::GetInstance()->GetRunCfg();
m_ExtCfg = ConfigManager::GetInstance()->GetExtCfg();
m_AlarmCfgWrapper = ConfigManager::GetInstance()->GetAlarmCfg();
}
PurifierClient::~PurifierClient()
{
Shutdown();
}
void 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_中效过滤器压力实值
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];
pcommand->m_Ref = this;
pcommand->m_Fun = &PurifierClient::ProcReadInfoXT;
pcommand->isNeedDel = false;
S7Command* pcommand2 = new S7Command(S7_COMMAND_READ_INFO, READ_ITEM_COUNT2);
TS7DataItem* items2 = pcommand2->getDataItems();
//报警信息
itemFlag = 0;
//报警信息
items2[itemFlag].Area = S7AreaDB;
items2[itemFlag].WordLen = S7WLByte;
items2[itemFlag].DBNumber = 1;
items2[itemFlag].Start = 389;
items2[itemFlag].Amount = 2;
items2[itemFlag].pdata = new unsigned char[2];
//最大风速
itemFlag = 1;
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 = 594;
items2[itemFlag].Amount = 1;
items2[itemFlag].pdata = new unsigned char[1];
itemFlag = 3;
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 = 4;
items2[itemFlag].Area = S7AreaDB;
items2[itemFlag].WordLen = S7WLByte;
items2[itemFlag].DBNumber = 1;
items2[itemFlag].Start = 812;
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 = 846;
items2[itemFlag].Amount = 4;
items2[itemFlag].pdata = new unsigned char[4];
pcommand2->m_Ref = this;
pcommand2->m_Fun = &PurifierClient::ProcReadInfoXT2;
pcommand2->isNeedDel = false;
//写测氧值
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;
//EnterCriticalSection(&g_SystemInfo->m_InfoCs);
foxygendata.fValue = (g_SystemInfo->m_ComPrintOxygen1 > g_SystemInfo->m_ComPrintOxygen2 ? g_SystemInfo->m_ComPrintOxygen1 : g_SystemInfo->m_ComPrintOxygen2);
//LeaveCriticalSection(&g_SystemInfo->m_InfoCs);
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 fPressure;
EnterCriticalSection(&g_SystemInfo->m_InfoCs);
fPressure.fValue = g_SystemInfo->m_EnvState.m_PrintPressureAnalog;
LeaveCriticalSection(&g_SystemInfo->m_InfoCs);
pfloat[0] = fPressure.data[3];
pfloat[1] = fPressure.data[2];
pfloat[2] = fPressure.data[1];
pfloat[3] = fPressure.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 = &PurifierClient::ProcSetOxygenValue;
m_CycleCommands.push_back(pcommand);
m_CycleCommands.push_back(pcommand2);
m_CycleCommands.push_back(oxygenPressureCom);
}
void PurifierClient::ProcReadInfoXT(void *pobject, Command* pcommand)
{
S7Command* s7Command = (S7Command*)pcommand;
TS7DataItem* pdataItems = s7Command->getDataItems();
int itemcount = s7Command->getItemCount();
if (pobject == NULL || itemcount != READ_ITEM_COUNT)return;
PurifierClient* ppw = (PurifierClient*)pobject;
TS7DataItem pCtrl = pdataItems[0];
TS7DataItem pPresure = pdataItems[1];
TS7DataItem pBoxClean = pdataItems[2];
TS7DataItem pWind = pdataItems[3];
TS7DataItem pFilterTime = pdataItems[4];
TS7DataItem pAlarm = pdataItems[5];
TS7DataItem pMaxWind = pdataItems[6];
TS7DataItem pCoverWindOffset = pdataItems[7];
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);
ppw->m_RunCfg->m_AlarmOxygen = ppw->m_Stat.oxygenAlarmValue;
ppw->m_RunCfg->m_TargeOxygen = ppw->m_Stat.printCleanOxygenSetValue + 50;
FanFit* al = ppw->m_ExtCfg->m_FanWindFit[ppw->m_ExtCfg->m_SelectedFanWindFit];
al->alarmWind = (ppw->m_Stat.windSetValue > 10.0f) ? (ppw->m_Stat.windSetValue - 10.0f) : 0.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 (pAlarm.Result == 0) {
unsigned char* arr = (unsigned char*)pAlarm.pdata;
unsigned char pdata1 = arr[0];
unsigned char pdata2 = arr[1];
ppw->m_Stat.midTempOverLimitAlarm = ((pdata1 & 0x1) > 0 ? true : false);
ppw->m_Stat.midHighTempOverLimitAlarm = ((pdata1 & 0x2) > 0 ? true : false);
ppw->m_Stat.hopperUseLongTimeAlarm = ((pdata1 & 0x4) > 0 ? true : false);
ppw->m_Stat.highPressureLackValveAlarm = ((pdata1 & 0x8) > 0 ? true : false);
ppw->m_Stat.inverterPowerBreak = ((pdata1 & 0x10) > 0 ? true : false);
ppw->m_Stat.inverterAlarm = ((pdata1 & 0x20) > 0 ? true : false);
ppw->m_Stat.innerfilterOpenAlarm = ((pdata1 & 0x40) > 0 ? true : false);
ppw->m_Stat.inverterComException = ((pdata1 & 0x80) > 0 ? true : false);
ppw->m_Stat.cycleInValveOpenAlarm = ((pdata2 & 0x1) > 0 ? true : false);
ppw->m_Stat.cycleOutValueOpenAlarm = ((pdata2 & 0x2) > 0 ? true : false);
ppw->m_Stat.midHighValveOpenAlarm = ((pdata2 & 0x4) > 0 ? true : false);
ppw->m_Stat.innerFilterInValveException = ((pdata2 & 0x8) > 0 ? true : false);
ppw->m_Stat.midUnionValveException = ((pdata2 & 0x10) > 0 ? true : false);
ppw->m_Stat.innerFilterOutValveException = ((pdata2 & 0x20) > 0 ? true : false);
ppw->m_Stat.midFilterBlockAlarm = ((pdata2 & 0x40) > 0 ? true : false);
ppw->m_Stat.highFilterBlockAlarm = ((pdata2 & 0x80) > 0 ? true : false);
if (ppw->m_AlarmCfgWrapper->m_PurifierMidTempAlarm)
SignalService::GetInstance().SetAlarm(ppw->m_AlarmCfgWrapper->m_PurifierMidTempAlarm, ppw->m_Stat.midTempOverLimitAlarm);
/*ppw->m_Stat.d1Alarm = ((pdata2 & 0x1)>0?true:false);
ppw->m_Stat.d2Alarm = ((pdata2 & 0x2)>0 ? true : false);
ppw->m_Stat.d3Alarm = ((pdata2 & 0x4)>0 ? true : false);
ppw->m_Stat.b1Alarm = ((pdata2 & 0x8)>0 ? true : false);
ppw->m_Stat.b2Alarm = ((pdata2 & 0x10)>0 ? true : false);
ppw->m_Stat.b3Alarm = ((pdata2 & 0x20)>0 ? true : false);
ppw->m_Stat.midBlockAlarm = ((pdata2 & 0x40)>0 ? true : false);
ppw->m_Stat.highBlockAlarm = ((pdata2 & 0x80)>0 ? true : false);
ppw->m_Stat.midHighTempAlarm = ((pdata1 & 0x1)>0 ? true : false);
ppw->m_Stat.midUtralHighTempAlarm = ((pdata1 & 0x2)>0 ? true : false);
ppw->m_Stat.highHighTempAlarm = ((pdata1 & 0x4)>0 ? true : false);
// ppw->m_Stat.highUtralHighTempAlarm = ((pdata1 & 0x8)>0 ? true : false);
ppw->m_Stat.freqConvBreakerAlarm = ((pdata1 & 0x10)>0 ? true : false);
ppw->m_Stat.fanAlarm = ((pdata1 & 0x20)>0 ? true : false);*/
}
LeaveCriticalSection(&ppw->m_ValueCS);
}
void PurifierClient::ProcReadInfoXT2(void *pobject, Command* pcommand)
{
S7Command* s7Command = (S7Command*)pcommand;
TS7DataItem* pdataItems = s7Command->getDataItems();
int itemcount = s7Command->getItemCount();
if (pobject == NULL || itemcount != READ_ITEM_COUNT2)return;
PurifierClient* ppw = (PurifierClient*)pobject;
TS7DataItem pAlarm = pdataItems[0];
TS7DataItem pMaxWind = pdataItems[1];
TS7DataItem pSignal = pdataItems[2];
TS7DataItem pType = pdataItems[3];
TS7DataItem pCoverWindOffset = pdataItems[4];
TS7DataItem pFreq = pdataItems[5];
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];
ppw->m_Stat.midTempOverLimitAlarm = ((pdata1 & 0x1) > 0 ? true : false);
ppw->m_Stat.midHighTempOverLimitAlarm = ((pdata1 & 0x2) > 0 ? true : false);
ppw->m_Stat.hopperUseLongTimeAlarm = ((pdata1 & 0x4) > 0 ? true : false);
ppw->m_Stat.highPressureLackValveAlarm = ((pdata1 & 0x8) > 0 ? true : false);
ppw->m_Stat.inverterPowerBreak = ((pdata1 & 0x10) > 0 ? true : false);
ppw->m_Stat.inverterAlarm = ((pdata1 & 0x20) > 0 ? true : false);
ppw->m_Stat.innerfilterOpenAlarm = ((pdata1 & 0x40) > 0 ? true : false);
ppw->m_Stat.inverterComException = ((pdata1 & 0x80) > 0 ? true : false);
ppw->m_Stat.cycleInValveOpenAlarm = ((pdata2 & 0x1) > 0 ? true : false);
ppw->m_Stat.cycleOutValueOpenAlarm = ((pdata2 & 0x2) > 0 ? true : false);
ppw->m_Stat.midHighValveOpenAlarm = ((pdata2 & 0x4) > 0 ? true : false);
ppw->m_Stat.innerFilterInValveException = ((pdata2 & 0x8) > 0 ? true : false);
ppw->m_Stat.midUnionValveException = ((pdata2 & 0x10) > 0 ? true : false);
ppw->m_Stat.innerFilterOutValveException = ((pdata2 & 0x20) > 0 ? true : false);
ppw->m_Stat.midFilterBlockAlarm = ((pdata2 & 0x40) > 0 ? true : false);
ppw->m_Stat.highFilterBlockAlarm = ((pdata2 & 0x80) > 0 ? true : false);
}
if (pMaxWind.Result == 0) {
unsigned char* pchar = (unsigned char*)pMaxWind.pdata;
ppw->m_Stat.maxWindSetValue = FLOATDATA(false, &pchar[0]).fValue;
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] & 0x40) > 0 ? true : false);
}
if (pSignal.Result == 0)
{
unsigned char* pchar = (unsigned char*)pSignal.pdata;
ppw->m_Stat.coverWindSlowFinish = ((pchar[0] & 0x40) > 0 ? true : false);
ppw->m_Stat.coverWindResumeFinish = ((pchar[0] & 0x80) > 0 ? true : false);
}
if (pType.Result == 0) {
unsigned char* pchar = (unsigned char*)pType.pdata;
ppw->m_Stat.purifierType = ((pchar[0] & 0xff) << 8) + (pchar[1] & 0xff);
ppw->m_Stat.keepAlive = ((pchar[2] & 0xff) << 8) + (pchar[3] & 0xff);
}
if (pCoverWindOffset.Result == 0) {
unsigned char* pchar = (unsigned char*)pCoverWindOffset.pdata;
ppw->m_Stat.coverWindSpeedOffset = FLOATDATA(false, &pchar[0]).fValue;
}
if (pFreq.Result == 0) {
unsigned char* pchar = (unsigned char*)pFreq.pdata;
ppw->m_Stat.fanFreq = FLOATDATA(false, &pchar[0]).fValue;
}
LeaveCriticalSection(&ppw->m_ValueCS);
}
void PurifierClient::ProcWriteValueXT(void *pobject, Command* pcommand)
{
}
void PurifierClient::ProcSetOxygenValue(void *pobject, Command* pcommand)
{
if (pobject == NULL)return;
PurifierClient* ppw = (PurifierClient*)pobject;
S7FLOATDATA fdata;
S7FLOATDATA fpressuredata;
EnterCriticalSection(&g_SystemInfo->m_InfoCs);
fdata.fValue = (g_SystemInfo->m_ComPrintOxygen1>g_SystemInfo->m_ComPrintOxygen2? g_SystemInfo->m_ComPrintOxygen1: g_SystemInfo->m_ComPrintOxygen2);
fpressuredata.fValue = g_SystemInfo->m_EnvState.m_PrintPressureAnalog;
LeaveCriticalSection(&g_SystemInfo->m_InfoCs);
ppw->m_OxygenWriteValue[0] = fdata.data[3];
ppw->m_OxygenWriteValue[1] = fdata.data[2];
ppw->m_OxygenWriteValue[2] = fdata.data[1];
ppw->m_OxygenWriteValue[3] = fdata.data[0];
ppw->m_PressureWriteValue[0] = fpressuredata.data[3];
ppw->m_PressureWriteValue[1] = fpressuredata.data[2];
ppw->m_PressureWriteValue[2] = fpressuredata.data[1];
ppw->m_PressureWriteValue[3] = fpressuredata.data[0];
}
void PurifierClient::SetMKBit(int dindex, unsigned int waittime)
{
EnterCriticalSection(&m_RtcCS);
S7Command* pcommand = new S7Command(S7_COMMAND_WRITE, 1);
TS7DataItem* items = pcommand->getDataItems();
items[0].Area = S7AreaMK;
items[0].DBNumber = 1;
items[0].Start = dindex;
items[0].WordLen = S7WLBit;
items[0].Amount = 1;
bool* tempv = new bool[1];
tempv[0] = false;
items[0].pdata = tempv;
pcommand->m_Ref = this;
pcommand->m_waitTime = waittime;
pcommand->m_Fun = &PurifierClient::ProcWriteValueXT;
S7Command* pcommand2 = new S7Command(S7_COMMAND_WRITE, 1);
TS7DataItem* items2 = pcommand2->getDataItems();
items2[0].Area = S7AreaMK;
items2[0].DBNumber = 1;
items2[0].Start = dindex;
items2[0].WordLen = S7WLBit;
items2[0].Amount = 1;
bool* tempv2 = new bool[1];
tempv2[0] = true;
items2[0].pdata = tempv2;
pcommand2->m_Ref = this;
pcommand2->m_Fun = &PurifierClient::ProcWriteValueXT;
m_RTCommands.push(pcommand2);
m_RTCommands.push(pcommand);
LeaveCriticalSection(&m_RtcCS);
}
void PurifierClient::SetDedust(bool bvalue)
{
if (g_isDebug) {
m_Stat.isDedusting = bvalue;
}
if (!IsServerConnected())return;
if (bvalue)SetMKBit(10 * 8 + 0,500);
else SetMKBit(10 * 8 + 1, 500);
}
void PurifierClient::SetBlowBack(bool bvalue)
{
if (!IsServerConnected())return;
if (bvalue)SetMKBit(10 * 8 + 2, 500);
else SetMKBit(10 * 8 + 3, 500);
}
void PurifierClient::SetFilterDiscard(bool bvalue)
{
if (!IsServerConnected())return;
if (bvalue)SetMKBit(10 * 8 + 4, 500);
else SetMKBit(10 * 8 + 5, 500);
}
void PurifierClient::SetBoxClean(bool bvalue)
{
if (!IsServerConnected())return;
if (bvalue)SetMKBit(4, 500);
else SetMKBit(5, 500);
}
void PurifierClient::SetFilterClean(bool bvalue)
{
if (!IsServerConnected())return;
if (bvalue)SetMKBit(10 * 8 + 6, 500);
else SetMKBit(10 * 8 + 7, 500);
}
void PurifierClient::SetHopperClean(bool bvalue)
{
if (!IsServerConnected())return;
if (bvalue)SetMKBit(11 * 8 + 0, 500);
else SetMKBit(11 * 8 + 1, 500);
}
void PurifierClient::SetPurify(bool bvalue)
{
if (g_isDebug) {
m_Stat.isPurifying = bvalue;
}
if (!IsServerConnected())return;
if (bvalue)SetMKBit(4 * 8 + 6, 3000);
else SetMKBit(4 * 8 + 7, 3000);
}
void PurifierClient::ResetFilterTime()
{
if (!IsServerConnected())return;
SetMKBit(4 * 8 , 500);
}
void PurifierClient::ClearHopperAlarm()
{
if (!IsServerConnected())return;
SetMKBit(2 * 8, 500);
}
void PurifierClient::SetDBFloat(int dindex, float fvalue) {
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 = dindex;
items[0].WordLen = S7WLByte;
items[0].Amount = 4;
unsigned char* pfloat = new unsigned char[4];
S7FLOATDATA fdata;
fdata.fValue = fvalue;
pfloat[0] = fdata.data[3];
pfloat[1] = fdata.data[2];
pfloat[2] = fdata.data[1];
pfloat[3] = fdata.data[0];
items[0].pdata = pfloat;
pcommand->m_Ref = this;
pcommand->m_Fun = &PurifierClient::ProcWriteValueXT;
m_RTCommands.push(pcommand);
LeaveCriticalSection(&m_RtcCS);
}
void PurifierClient::SetBit(int dindex, bool v)
{
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 = dindex;
items[0].WordLen = S7WLBit;
items[0].Amount = 1;
bool* tempv = new bool[1];
tempv[0] = v;
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 PurifierClient::SetBoxPressureUpLimit(float fvalue)
{
if (!IsServerConnected())return;
SetDBFloat(28, fvalue);
}
void PurifierClient::SetBoxPressureDownLimit(float fvalue)
{
if (!IsServerConnected())return;
SetDBFloat(32, fvalue);
}
void PurifierClient::SetMidPressureDifAlarmValue(float fvalue)
{
if (!IsServerConnected())return;
SetDBFloat(64, fvalue);
}
void PurifierClient::SetHighPressureDifAlarmValue(float fvalue)
{
if (!IsServerConnected())return;
SetDBFloat(68, fvalue);
}
void PurifierClient::SetPrintCleanOxygenSetValue(float fvalue)
{
if (!IsServerConnected())return;
SetDBFloat(142, fvalue);
}
void PurifierClient::SetWindValue(float fvalue)
{
if (g_isDebug)m_Stat.windActualValue = fvalue;
if (!IsServerConnected())return;
SetDBFloat(146, fvalue);
}
void PurifierClient::SetPrintOxygenDownSetValue(float fvalue)
{
if (!IsServerConnected())return;
SetDBFloat(154, fvalue);
}
void PurifierClient::SetPrintOxygenUpSetValue(float fvalue)
{
if (!IsServerConnected())return;
SetDBFloat(76, fvalue);
}
void PurifierClient::SetfilterCleanOxygenSetValue(float fvalue)
{
if (!IsServerConnected())return;
SetDBFloat(158, fvalue);
}
void PurifierClient::SetMidTempHighSetValue(float fvalue)
{
if (!IsServerConnected())return;
SetDBFloat(166, fvalue);
}
void PurifierClient::SetMidTempUltraSetValue(float fvalue)
{
if (!IsServerConnected())return;
SetDBFloat(170, fvalue);
}
void PurifierClient::SetHighTempHighSetValue(float fvalue)
{
if (!IsServerConnected())return;
SetDBFloat(174, fvalue);
}
void PurifierClient::SetMaxWindValue(float fvalue)
{
if (!IsServerConnected())return;
SetDBFloat(550, fvalue);
}
/*void PurifierClient::SetHighTempUltraSetValue(float fvalue)
{
SetDBFloat(178, fvalue);
}*/
void PurifierClient::SetHopperCleanRemind(unsigned short value)
{
if (!IsServerConnected())return;
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 = 118;
items[0].WordLen = S7WLByte;
items[0].Amount = 2;
unsigned char* pdata= new unsigned char[2];
pdata[0] = (unsigned char)(value >> 8);
pdata[1] = (unsigned char)value;
items[0].pdata = pdata;
pcommand->m_Ref = this;
pcommand->m_Fun = &PurifierClient::ProcWriteValueXT;
m_RTCommands.push(pcommand);
LeaveCriticalSection(&m_RtcCS);
}
void PurifierClient::SetBoxWashDelayTime(unsigned short value)
{
if (!IsServerConnected())return;
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 = 114;
items[0].WordLen = S7WLByte;
items[0].Amount = 2;
unsigned char* pdata = new unsigned char[2];
pdata[0] = (unsigned char)(value >> 8);
pdata[1] = (unsigned char)value;
items[0].pdata = pdata;
pcommand->m_Ref = this;
pcommand->m_Fun = &PurifierClient::ProcWriteValueXT;
m_RTCommands.push(pcommand);
LeaveCriticalSection(&m_RtcCS);
}
void PurifierClient::SetDedustingWashDelayTime(unsigned short value)
{
if (!IsServerConnected())return;
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 = 116;
items[0].WordLen = S7WLByte;
items[0].Amount = 2;
unsigned char* pdata = new unsigned char[2];
pdata[0] = (unsigned char)(value >> 8);
pdata[1] = (unsigned char)value;
items[0].pdata = pdata;
pcommand->m_Ref = this;
pcommand->m_Fun = &PurifierClient::ProcWriteValueXT;
m_RTCommands.push(pcommand);
LeaveCriticalSection(&m_RtcCS);
}
void PurifierClient::GetStat(Purifierstat_XT& stat)
{
EnterCriticalSection(&m_ValueCS);
memcpy_s(&stat, sizeof(Purifierstat_XT), &m_Stat, sizeof(Purifierstat_XT));
memcpy_s(&stat.baseStat, sizeof(BaseStat), &m_BaseStat, sizeof(BaseStat));
LeaveCriticalSection(&m_ValueCS);
}
void PurifierClient::SetPressureRangeUpLimit(float value)
{
if (!IsServerConnected())return;
SetDBFloat(182, value);
}
void PurifierClient::SetPressureRangeDownLimit(float value)
{
if (!IsServerConnected())return;
SetDBFloat(186, value);
}
void PurifierClient::SetOxygenAlarmValue(float value)
{
if (!IsServerConnected())return;
SetDBFloat(190, value);
}
void PurifierClient::SetUseArgon(bool buse)
{
if (!IsServerConnected())return;
SetBit(557 * 8 + 1, buse);
}
void PurifierClient::SetCoverWind(bool bvalue)
{
if (!IsServerConnected())return;
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 + 6;
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 PurifierClient::SetCoverWindOffset(float offset)
{
if (!IsServerConnected())return;
SetDBFloat(812, offset);
}
void PurifierClient::SetShieldMonitorPrintPressure(bool bvalue) {
if (g_isDebug)m_Stat.shieldMonitorPrintPressure = bvalue;
if (!IsServerConnected())return;
SetBit(557 * 8, bvalue);
}
void PurifierClient::SetWindSlowFinishSignal(bool bvalue)
{
if (!IsServerConnected())return;
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 = 594 * 8 + 6;
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 PurifierClient::SetWindResumeFinishSignal(bool bvalue)
{
if (!IsServerConnected())return;
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 = 594 * 8 + 7;
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 PurifierClient::SetBlowBackBlowTime(unsigned short value)
{
if (!IsServerConnected())return;
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 = 430;
items[0].WordLen = S7WLByte;
items[0].Amount = 2;
unsigned char* pdata = new unsigned char[2];
pdata[0] = (unsigned char)(value >> 8);
pdata[1] = (unsigned char)value;
items[0].pdata = pdata;
pcommand->m_Ref = this;
pcommand->m_Fun = &PurifierClient::ProcWriteValueXT;
m_RTCommands.push(pcommand);
LeaveCriticalSection(&m_RtcCS);
}
void PurifierClient::SetBlowBackSetTimes(unsigned short value)
{
if (!IsServerConnected())return;
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 = 434;
items[0].WordLen = S7WLByte;
items[0].Amount = 2;
unsigned char* pdata = new unsigned char[2];
pdata[0] = (unsigned char)(value >> 8);
pdata[1] = (unsigned char)value;
items[0].pdata = pdata;
pcommand->m_Ref = this;
pcommand->m_Fun = &PurifierClient::ProcWriteValueXT;
m_RTCommands.push(pcommand);
LeaveCriticalSection(&m_RtcCS);
}
void PurifierClient::SetProtectionPressureSetTime(unsigned short value)
{
if (!IsServerConnected())return;
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 = 658;
items[0].WordLen = S7WLByte;
items[0].Amount = 2;
unsigned char* pdata = new unsigned char[2];
pdata[0] = (unsigned char)(value >> 8);
pdata[1] = (unsigned char)value;
items[0].pdata = pdata;
pcommand->m_Ref = this;
pcommand->m_Fun = &PurifierClient::ProcWriteValueXT;
m_RTCommands.push(pcommand);
LeaveCriticalSection(&m_RtcCS);
}
void PurifierClient::SetUnLock()
{
if (!IsServerConnected())return;
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 = 660;
items[0].WordLen = S7WLByte;
items[0].Amount = 2;
unsigned char* pdata = new unsigned char[2];
pdata[0] = 0;
pdata[1] = 0;
items[0].pdata = pdata;
pcommand->m_Ref = this;
pcommand->m_Fun = &PurifierClient::ProcWriteValueXT;
m_RTCommands.push(pcommand);
LeaveCriticalSection(&m_RtcCS);
}