#include "PurifierClient.h" //#include "S7Command.h" #include "../global.h" #include "../SystemInfo.h" //#include "../PLC/SignalService.h" #include "../utils/DataByte.h" PurifierClient::PurifierClient(void* pconfig) :S7Client(pconfig) { m_RunCfg = ConfigManager::Instance()->GetRunCfg(); m_ExtCfg = ConfigManager::Instance()->GetExtCfg(); m_AlarmCfgWrapper = ConfigManager::Instance()->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->SetValue(((mdata5 & 0x1) > 0 ? true : false)); // ppw->m_Stat.isDedusting->SetValue(((mdata0 & 0x4) ? true : false)); // ppw->m_Stat.isBoxCleaning->SetValue(((mdata0 & 0x40) ? true : false)); // ppw->m_Stat.isBlowBack->SetValue(((mdata1 & 0x2) ? true : false)); // ppw->m_Stat.isFilterDiscarding->SetValue(((mdata1 & 0x10) ? true : false)); // ppw->m_Stat.isFilterCleaning->SetValue(((mdata1 & 0x80) ? true : false)); // ppw->m_Stat.isHopperCleaning->SetValue(((mdata2 & 0x20) ? true : false)); // } // if (pPresure.Result == 0) { // unsigned char* pchar = (unsigned char*)pPresure.pdata; // ppw->m_Stat.midPressureValue->SetValue(FLOATDATA(false, &pchar[0]).fValue); // ppw->m_Stat.midPressureDifValue->SetValue(FLOATDATA(false, &pchar[4]).fValue); // ppw->m_Stat.midTemperatureValue->SetValue(FLOATDATA(false, &pchar[8]).fValue); // ppw->m_Stat.highPressureDifValue->SetValue(FLOATDATA(false, &pchar[12]).fValue); // ppw->m_Stat.anemometerActualValue->SetValue(FLOATDATA(false, &pchar[16]).fValue); // ppw->m_Stat.printPressureValue->SetValue(FLOATDATA(false, &pchar[20]).fValue); // ppw->m_Stat.boxPressureUpLimit->SetValue(FLOATDATA(false, &pchar[28]).fValue); // ppw->m_Stat.boxPressureDownLimit->SetValue(FLOATDATA(false, &pchar[32]).fValue); // ppw->m_Stat.filterOxygenValue->SetValue(FLOATDATA(false, &pchar[48]).fValue); // ppw->m_Stat.printOxygenValue->SetValue(FLOATDATA(false, &pchar[60]).fValue); // ppw->m_Stat.midPressureDifAlarmValue->SetValue(FLOATDATA(false, &pchar[64]).fValue); // ppw->m_Stat.highPressureDifAlarmValue->SetValue(FLOATDATA(false, &pchar[68]).fValue); // ppw->m_Stat.printOxygenUpSetValue->SetValue(FLOATDATA(false, &pchar[76]).fValue); // ppw->m_RunCfg->m_WarnOxygen = ppw->m_Stat.printOxygenUpSetValue->GetValue(); // // ppw->m_Stat.boxWashTime->SetValue(((pchar[110] & 0xff) << 8) + (pchar[111] & 0xff)); // ppw->m_Stat.filterWashTime->SetValue(((pchar[112] & 0xff) << 8) + (pchar[113] & 0xff)); // ppw->m_Stat.boxWashDelayTime->SetValue(((pchar[114] & 0xff) << 8) + (pchar[115] & 0xff)); // ppw->m_Stat.dedustingWashDelayTime->SetValue(((pchar[116] & 0xff) << 8) + (pchar[117] & 0xff)); // ppw->m_Stat.hopperCleanRemind->SetValue(((pchar[118] & 0xff) << 8) + (pchar[119] & 0xff)); // // ppw->m_Stat.printCleanOxygenSetValue->SetValue(FLOATDATA(false, &pchar[142]).fValue); // ppw->m_Stat.windSetValue->SetValue(FLOATDATA(false, &pchar[146]).fValue); // ppw->m_Stat.windActualValue->SetValue(FLOATDATA(false, &pchar[150]).fValue); // ppw->m_Stat.filterCleanOxygenSetValue->SetValue(FLOATDATA(false, &pchar[158]).fValue); // ppw->m_Stat.midTempHighSetValue->SetValue(FLOATDATA(false, &pchar[166]).fValue); // ppw->m_Stat.midTempUltraSetValue->SetValue(FLOATDATA(false, &pchar[170]).fValue); // ppw->m_Stat.oxygenAlarmValue->SetValue(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->GetValue(); // ppw->m_RunCfg->m_TargeOxygen = ppw->m_Stat.printCleanOxygenSetValue->GetValue() + 50; // // // FanFit* al = ppw->m_ExtCfg->m_FanWindFit[ppw->m_ExtCfg->m_SelectedFanWindFit]; // al->alarmWind = (ppw->m_Stat.windSetValue->GetValue() > 10.0f) ? (ppw->m_Stat.windSetValue->GetValue() - 10.0f) : 0.0f; // // ppw->m_Stat.filterTotalUseTime->SetValue(((pchar[194] & 0xff) << 8) + (pchar[195] & 0xff)); // ppw->m_Stat.usedTimeFromlastBowBack->SetValue(((pchar[196] & 0xff) << 8) + (pchar[197] & 0xff)); // ppw->m_Stat.bowBackTimes->SetValue(((pchar[198] & 0xff) << 8) + (pchar[199] & 0xff)); // ppw->m_Stat.hopperTimeLastClean->SetValue(((pchar[204] & 0xff) << 8) + (pchar[205] & 0xff)); // // // if (ppw->m_AlarmCfgWrapper->m_PurifierOxygenAlarm) { // if (ppw->m_Stat.filterOxygenValue->GetValue() > 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->GetValue()); // 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->SetValue(((pdata1 & 0x1) > 0 ? true : false)); // ppw->m_Stat.midHighTempOverLimitAlarm->SetValue(((pdata1 & 0x2) > 0 ? true : false)); // ppw->m_Stat.hopperUseLongTimeAlarm->SetValue(((pdata1 & 0x4) > 0 ? true : false)); // ppw->m_Stat.highPressureLackValveAlarm->SetValue(((pdata1 & 0x8) > 0 ? true : false)); // ppw->m_Stat.inverterPowerBreak->SetValue(((pdata1 & 0x10) > 0 ? true : false)); // ppw->m_Stat.inverterAlarm->SetValue(((pdata1 & 0x20) > 0 ? true : false)); // ppw->m_Stat.innerfilterOpenAlarm->SetValue(((pdata1 & 0x40) > 0 ? true : false)); // ppw->m_Stat.inverterComException->SetValue(((pdata1 & 0x80) > 0 ? true : false)); // ppw->m_Stat.cycleInValveOpenAlarm->SetValue(((pdata2 & 0x1) > 0 ? true : false)); // ppw->m_Stat.cycleOutValueOpenAlarm->SetValue(((pdata2 & 0x2) > 0 ? true : false)); // ppw->m_Stat.midHighValveOpenAlarm->SetValue(((pdata2 & 0x4) > 0 ? true : false)); // ppw->m_Stat.innerFilterInValveException->SetValue(((pdata2 & 0x8) > 0 ? true : false)); // ppw->m_Stat.midUnionValveException->SetValue(((pdata2 & 0x10) > 0 ? true : false)); // ppw->m_Stat.innerFilterOutValveException->SetValue(((pdata2 & 0x20) > 0 ? true : false)); // ppw->m_Stat.midFilterBlockAlarm->SetValue(((pdata2 & 0x40) > 0 ? true : false)); // ppw->m_Stat.highFilterBlockAlarm->SetValue(((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->SetValue(((pdata1 & 0x1) > 0 ? true : false)); // ppw->m_Stat.midHighTempOverLimitAlarm->SetValue(((pdata1 & 0x2) > 0 ? true : false)); // ppw->m_Stat.hopperUseLongTimeAlarm->SetValue(((pdata1 & 0x4) > 0 ? true : false)); // ppw->m_Stat.highPressureLackValveAlarm->SetValue(((pdata1 & 0x8) > 0 ? true : false)); // ppw->m_Stat.inverterPowerBreak->SetValue(((pdata1 & 0x10) > 0 ? true : false)); // ppw->m_Stat.inverterAlarm->SetValue(((pdata1 & 0x20) > 0 ? true : false)); // ppw->m_Stat.innerfilterOpenAlarm->SetValue(((pdata1 & 0x40) > 0 ? true : false)); // ppw->m_Stat.inverterComException->SetValue(((pdata1 & 0x80) > 0 ? true : false)); // ppw->m_Stat.cycleInValveOpenAlarm->SetValue(((pdata2 & 0x1) > 0 ? true : false)); // ppw->m_Stat.cycleOutValueOpenAlarm->SetValue(((pdata2 & 0x2) > 0 ? true : false)); // ppw->m_Stat.midHighValveOpenAlarm->SetValue(((pdata2 & 0x4) > 0 ? true : false)); // ppw->m_Stat.innerFilterInValveException->SetValue(((pdata2 & 0x8) > 0 ? true : false)); // ppw->m_Stat.midUnionValveException->SetValue(((pdata2 & 0x10) > 0 ? true : false)); // ppw->m_Stat.innerFilterOutValveException->SetValue(((pdata2 & 0x20) > 0 ? true : false)); // ppw->m_Stat.midFilterBlockAlarm->SetValue(((pdata2 & 0x40) > 0 ? true : false)); // ppw->m_Stat.highFilterBlockAlarm->SetValue(((pdata2 & 0x80) > 0 ? true : false)); // } // if (pMaxWind.Result == 0) { // unsigned char* pchar = (unsigned char*)pMaxWind.pdata; // ppw->m_Stat.maxWindSetValue->SetValue(FLOATDATA(false, &pchar[0]).fValue); // ppw->m_Stat.useArgon->SetValue((pchar[7] & 0x2) > 0 ? true : false); // ppw->m_ExtCfg->m_SelectedFanWindFit = ppw->m_Stat.useArgon->GetValue() ? 1 : 0; // ppw->m_Stat.isCoverWind->SetValue(((pchar[7] & 0x40) > 0 ? true : false)); // } // // if (pSignal.Result == 0) // { // unsigned char* pchar = (unsigned char*)pSignal.pdata; // ppw->m_Stat.coverWindSlowFinish->SetValue(((pchar[0] & 0x40) > 0 ? true : false)); // ppw->m_Stat.coverWindResumeFinish->SetValue(((pchar[0] & 0x80) > 0 ? true : false)); // } // // if (pType.Result == 0) { // unsigned char* pchar = (unsigned char*)pType.pdata; // ppw->m_Stat.purifierType->SetValue(((pchar[0] & 0xff) << 8) + (pchar[1] & 0xff)); // ppw->m_Stat.keepAlive->SetValue(((pchar[2] & 0xff) << 8) + (pchar[3] & 0xff)); // } // // if (pCoverWindOffset.Result == 0) { // unsigned char* pchar = (unsigned char*)pCoverWindOffset.pdata; // ppw->m_Stat.coverWindSpeedOffset->SetValue(FLOATDATA(false, &pchar[0]).fValue); // } // // if (pFreq.Result == 0) { // unsigned char* pchar = (unsigned char*)pFreq.pdata; // ppw->m_Stat.fanFreq->SetValue(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->SetValue(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->SetValue(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->SetValue(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)); stat.baseStat = m_Stat.baseStat; stat.isPurifying = m_Stat.isPurifying->GetValue(); stat.isDedusting = m_Stat.isDedusting->GetValue(); stat.isBoxCleaning = m_Stat.isBoxCleaning->GetValue(); stat.isBlowBack = m_Stat.isBlowBack->GetValue(); stat.isFilterDiscarding = m_Stat.isFilterDiscarding->GetValue(); stat.isFilterCleaning = m_Stat.isFilterCleaning->GetValue(); stat.isHopperCleaning = m_Stat.isHopperCleaning->GetValue(); stat.midPressureValue = m_Stat.midPressureValue->GetValue(); stat.midPressureDifValue = m_Stat.midPressureDifValue->GetValue(); stat.midTemperatureValue = m_Stat.midTemperatureValue->GetValue(); stat.highPressureDifValue = m_Stat.highPressureDifValue->GetValue(); stat.anemometerActualValue = m_Stat.anemometerActualValue->GetValue(); stat.printPressureValue = m_Stat.printPressureValue->GetValue(); stat.boxPressureUpLimit = m_Stat.boxPressureUpLimit->GetValue(); stat.boxPressureDownLimit = m_Stat.boxPressureDownLimit->GetValue(); stat.filterOxygenValue = m_Stat.filterOxygenValue->GetValue(); stat.printOxygenValue = m_Stat.printOxygenValue->GetValue(); stat.midPressureDifAlarmValue = m_Stat.midPressureDifAlarmValue->GetValue(); stat.highPressureDifAlarmValue = m_Stat.highPressureDifAlarmValue->GetValue(); stat.filterTotalUseTime = m_Stat.filterTotalUseTime->GetValue(); stat.usedTimeFromlastBowBack = m_Stat.usedTimeFromlastBowBack->GetValue(); stat.bowBackTimes = m_Stat.bowBackTimes->GetValue(); stat.hopperTimeLastClean = m_Stat.hopperTimeLastClean->GetValue(); stat.boxWashTime = m_Stat.boxWashTime->GetValue(); stat.filterWashTime = m_Stat.filterWashTime->GetValue(); stat.boxWashDelayTime = m_Stat.boxWashDelayTime->GetValue(); stat.dedustingWashDelayTime = m_Stat.dedustingWashDelayTime->GetValue(); stat.hopperCleanRemind = m_Stat.hopperCleanRemind->GetValue(); stat.printCleanOxygenSetValue = m_Stat.printCleanOxygenSetValue->GetValue(); stat.windSetValue = m_Stat.windSetValue->GetValue(); stat.windActualValue = m_Stat.windActualValue->GetValue(); stat.maxWindSetValue = m_Stat.maxWindSetValue->GetValue(); stat.useArgon = m_Stat.useArgon->GetValue(); stat.printOxygenUpSetValue = m_Stat.printOxygenUpSetValue->GetValue(); stat.oxygenAlarmValue = m_Stat.oxygenAlarmValue->GetValue(); stat.filterCleanOxygenSetValue = m_Stat.filterCleanOxygenSetValue->GetValue(); stat.midTempHighSetValue = m_Stat.midTempHighSetValue->GetValue(); stat.midTempUltraSetValue = m_Stat.midTempUltraSetValue->GetValue(); stat.pressureRangeUpLimit = m_Stat.pressureRangeUpLimit->GetValue(); stat.pressureRangeDownLimit = m_Stat.pressureRangeDownLimit->GetValue(); stat.fanFreq = m_Stat.fanFreq->GetValue(); stat.midTempOverLimitAlarm = m_Stat.midTempOverLimitAlarm->GetValue(); stat.midHighTempOverLimitAlarm = m_Stat.midHighTempOverLimitAlarm->GetValue(); stat.hopperUseLongTimeAlarm = m_Stat.hopperUseLongTimeAlarm->GetValue(); stat.highPressureLackValveAlarm = m_Stat.highPressureLackValveAlarm->GetValue(); stat.protectionTestFail = m_Stat.protectionTestFail->GetValue(); stat.inverterPowerBreak = m_Stat.inverterPowerBreak->GetValue(); stat.inverterAlarm = m_Stat.inverterAlarm->GetValue(); stat.whirlwindJarIsFull = m_Stat.whirlwindJarIsFull->GetValue(); stat.midInValveOpenAlarm = m_Stat.midInValveOpenAlarm->GetValue(); stat.midOutValveOpenAlarm = m_Stat.midOutValveOpenAlarm->GetValue(); stat.anemometerException = m_Stat.anemometerException->GetValue(); stat.oxygenSelfTestFail = m_Stat.oxygenSelfTestFail->GetValue(); stat.innerfilterOpenAlarm = m_Stat.innerfilterOpenAlarm->GetValue(); stat.inverterComException = m_Stat.inverterComException->GetValue(); stat.purifierSevereAbnormalExhaust = m_Stat.purifierSevereAbnormalExhaust->GetValue(); stat.cycleInValveOpenAlarm = m_Stat.cycleInValveOpenAlarm->GetValue(); stat.cycleOutValueOpenAlarm = m_Stat.cycleOutValueOpenAlarm->GetValue(); stat.midHighValveOpenAlarm = m_Stat.midHighValveOpenAlarm->GetValue(); stat.innerFilterInValveException = m_Stat.innerFilterInValveException->GetValue(); stat.midUnionValveException = m_Stat.midUnionValveException->GetValue(); stat.innerFilterOutValveException = m_Stat.innerFilterOutValveException->GetValue(); stat.midFilterBlockAlarm = m_Stat.midFilterBlockAlarm->GetValue(); stat.highFilterBlockAlarm = m_Stat.highFilterBlockAlarm->GetValue(); stat.highPressureLackAlarm = m_Stat.highPressureLackAlarm->GetValue(); stat.protectedPressureLackAlarm = m_Stat.protectedPressureLackAlarm->GetValue(); stat.midConnectException = m_Stat.midConnectException->GetValue(); stat.carbinDoorOpenException = m_Stat.carbinDoorOpenException->GetValue(); stat.busOutValveNotOpenAlarm = m_Stat.busOutValveNotOpenAlarm->GetValue(); stat.busOutValveNotCloseAlarm = m_Stat.busOutValveNotCloseAlarm->GetValue(); stat.busOutValveNotInPosAlarm = m_Stat.busOutValveNotInPosAlarm->GetValue(); stat.printOutValveNotOpenAlarm = m_Stat.printOutValveNotOpenAlarm->GetValue(); stat.printOutValveNotCloseAlarm = m_Stat.printOutValveNotCloseAlarm->GetValue(); stat.printOutValveNotInPosAlarm = m_Stat.printOutValveNotInPosAlarm->GetValue(); stat.inverterDonotWorkWhenDedust = m_Stat.inverterDonotWorkWhenDedust->GetValue(); stat.printOxygenExceptWhenDedust = m_Stat.printOxygenExceptWhenDedust->GetValue(); stat.tempExceptWhenDedust = m_Stat.tempExceptWhenDedust->GetValue(); stat.highPressureExceptWhenDedust = m_Stat.highPressureExceptWhenDedust->GetValue(); stat.windExceptWhenDedust = m_Stat.windExceptWhenDedust->GetValue(); stat.coverWindSpeedOffset = m_Stat.coverWindSpeedOffset->GetValue(); stat.isCoverWind = m_Stat.isCoverWind->GetValue(); stat.shieldMonitorPrintPressure = m_Stat.shieldMonitorPrintPressure->GetValue(); stat.coverWindSlowFinish = m_Stat.coverWindSlowFinish->GetValue(); stat.coverWindResumeFinish = m_Stat.coverWindResumeFinish->GetValue(); stat.purifierType = m_Stat.purifierType->GetValue(); stat.keepAlive = m_Stat.keepAlive->GetValue(); stat.protectionPressureEnable = m_Stat.protectionPressureEnable->GetValue(); stat.ProtectionPressureTestRelFail = m_Stat.ProtectionPressureTestRelFail->GetValue(); stat.oxygenSelfTestRelFail = m_Stat.oxygenSelfTestRelFail->GetValue(); stat.ProtectionPressuring = m_Stat.ProtectionPressuring->GetValue(); stat.ProtectionPressureSetTime = m_Stat.ProtectionPressureSetTime->GetValue(); stat.blowBackSetTimes = m_Stat.blowBackSetTimes->GetValue(); stat.blowBackBlowTime = m_Stat.blowBackBlowTime->GetValue(); 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->SetValue(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); // //}