From 79aa69e73115589b9b2b3b3fcdf5f638fdef732c Mon Sep 17 00:00:00 2001 From: wangxx1809 Date: Wed, 24 Apr 2024 10:28:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=86=B7=E6=B0=B4=E6=9C=BA?= =?UTF-8?q?=E9=80=9A=E4=BF=A1=E5=8A=9F=E8=83=BD=E5=8F=8A=E5=86=85=E5=AD=98?= =?UTF-8?q?=E6=B3=84=E6=BC=8F=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PrintC/Communication/G4PurifierClient.cpp | 62 +- PrintC/Communication/G4PurifierClient.h | 6 +- PrintC/Communication/HBDPurifierClient.cpp | 187 ++--- PrintC/Communication/HBDPurifierG3Client.cpp | 66 +- PrintC/Communication/HBDPurifierG3Client.h | 6 +- PrintC/Communication/PowerMeterClient.h | 1 + PrintC/Communication/PurifierClient.cpp | 755 ++++++++++--------- PrintC/Communication/PurifierClient.h | 70 +- PrintC/DataManage/DataHandle.h | 14 +- PrintC/DataManage/RWData.h | 1 + PrintC/DataManage/StreamClient.cpp | 7 +- PrintC/DataManage/StreamClient.h | 4 +- PrintC/Purifier/BasePurifier.cpp | 22 +- PrintC/Purifier/G4Purifier.cpp | 38 +- PrintC/Purifier/G4Purifier.h | 4 +- PrintC/Purifier/HBD3Purifier.cpp | 30 +- PrintC/Purifier/HBD3Purifier.h | 2 +- PrintC/Purifier/XTPurifier.cpp | 722 +++++++++--------- PrintC/Purifier/XTPurifier.h | 6 +- PrintC/UI/Controller.cpp | 8 +- PrintC/output/Release/log/2024.hbd | Bin 122880 -> 122880 bytes PrintC/问题记录.txt | 4 +- PrintS/Communication/BaseClient.cpp | 2 +- PrintS/Communication/PurifierClient.cpp | 117 ++- PrintS/Communication/PurifierClient.h | 75 +- PrintS/Controller/Controller.cpp | 1 - PrintS/DataManage/ClientInfo.cpp | 4 +- PrintS/DataManage/ClientInfo.h | 9 +- PrintS/DataManage/DataHandle.cpp | 4 +- PrintS/DataManage/RWData.h | 4 + PrintS/DataManage/StreamServer.cpp | 1 - PrintS/PLC/CoreCommunication.cpp | 4 +- PrintS/Purifier/BasePurifier.h | 3 + PrintS/Purifier/G4Purifier.h | 8 +- PrintS/Purifier/XTPurifier.cpp | 130 ++++ PrintS/Purifier/XTPurifier.h | 3 + PrintS/output/Release/log/2024.hbd | Bin 131072 -> 131072 bytes PrintS/说明.txt | 4 +- 38 files changed, 1387 insertions(+), 997 deletions(-) diff --git a/PrintC/Communication/G4PurifierClient.cpp b/PrintC/Communication/G4PurifierClient.cpp index 020edc9..6a746a6 100644 --- a/PrintC/Communication/G4PurifierClient.cpp +++ b/PrintC/Communication/G4PurifierClient.cpp @@ -3,6 +3,7 @@ #include "../SystemInfo.h" #include "../utils/DataByte.h" //#include "../PLC/SignalService.h" +#include "../DataManage/DataHandle.h" G4PurifierClient::G4PurifierClient(void* pconfig) :PurifierClient(pconfig) { @@ -445,34 +446,37 @@ G4PurifierClient::~G4PurifierClient() // ppw->m_OxygenWriteValue[3] = foxygen.data[0]; //} -//void G4PurifierClient::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 G4PurifierClient::SetCoverWind(bool bvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetCoverWind", to_string(bvalue), iBOOL); + //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 G4PurifierClient::SetCoverWindOffset(float offset) -//{ -// if (!IsServerConnected())return; -// SetDBFloat(600, offset); -//} +void G4PurifierClient::SetCoverWindOffset(float offset) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetCoverWindOffset", to_string(offset), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(600, offset); +} -//void G4PurifierClient::SetProtectionPressure(bool bvalue) -//{ -// if (!IsServerConnected())return; -// SetBit(1000 * 8 + 4, bvalue); -//} \ No newline at end of file +void G4PurifierClient::SetProtectionPressure(bool bvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetProtectionPressure", to_string(bvalue), iBOOL); + //if (!IsServerConnected())return; + //SetBit(1000 * 8 + 4, bvalue); +} \ No newline at end of file diff --git a/PrintC/Communication/G4PurifierClient.h b/PrintC/Communication/G4PurifierClient.h index cecacc0..0a678bd 100644 --- a/PrintC/Communication/G4PurifierClient.h +++ b/PrintC/Communication/G4PurifierClient.h @@ -8,9 +8,9 @@ public: ~G4PurifierClient(); void SetHopperClean(bool bvalue) {} - //void SetCoverWind(bool bvalue); - //void SetCoverWindOffset(float offset); - //void SetProtectionPressure(bool bvalue); + void SetCoverWind(bool bvalue); + void SetCoverWindOffset(float offset); + void SetProtectionPressure(bool bvalue); private: //void InitCommand(); //static void ProcSetPressureValue(void* pobject, Command* pcommand); diff --git a/PrintC/Communication/HBDPurifierClient.cpp b/PrintC/Communication/HBDPurifierClient.cpp index 838013d..7c9c4e6 100644 --- a/PrintC/Communication/HBDPurifierClient.cpp +++ b/PrintC/Communication/HBDPurifierClient.cpp @@ -1,6 +1,7 @@ #include "HBDPurifierClient.h" //#include "S7Command.h" #include "../global.h" +#include "../DataManage/DataHandle.h" HBDPurifierClient::HBDPurifierClient(void* pconfig) :S7Client(pconfig) { @@ -182,97 +183,101 @@ HBDPurifierClient::~HBDPurifierClient() // //} -//void HBDPurifierClient::SetDeoxygen(bool enable) -//{ -// if (g_isDebug) { -// m_Stat.isDeoxygen = enable; -// } -// if (!m_BaseStat.isConnected)return; -// S7Command* pcommand = new S7Command(S7_COMMAND_WRITE, 1); -// TS7DataItem* items = pcommand->getDataItems(); -// items[0].Area = S7AreaDB; -// items[0].DBNumber = 1; -// items[0].Start = 111 * 8 + 7; -// items[0].WordLen = S7WLBit; -// items[0].Amount = 1; -// bool* tempv = new bool[1]; -// tempv[0] = enable; -// items[0].pdata = tempv; -// pcommand->m_Ref = this; -// pcommand->m_Fun = &HBDPurifierClient::ProcWriteValue; -// EnterCriticalSection(&m_RtcCS); -// m_RTCommands.push(pcommand); -// LeaveCriticalSection(&m_RtcCS); -// -//} -// -//void HBDPurifierClient::SetBlowBack(bool enable) -//{ -// if (g_isDebug) { -// m_Stat.isBlowBack = enable; -// } -// if (!m_BaseStat.isConnected)return; -// S7Command* pcommand = new S7Command(S7_COMMAND_WRITE, 1); -// TS7DataItem* items = pcommand->getDataItems(); -// items[0].Area = S7AreaDB; -// items[0].DBNumber = 1; -// items[0].Start = 113 * 8 + 7; -// items[0].WordLen = S7WLBit; -// items[0].Amount = 1; -// bool* tempv = new bool[1]; -// tempv[0] = enable; -// items[0].pdata = tempv; -// pcommand->m_Ref = this; -// pcommand->m_Fun = &HBDPurifierClient::ProcWriteValue; -// EnterCriticalSection(&m_RtcCS); -// m_RTCommands.push(pcommand); -// LeaveCriticalSection(&m_RtcCS); -//} -// -//void HBDPurifierClient::SetDedusting(bool enable) -//{ -// if (g_isDebug) { -// m_Stat.isDedusting = enable; -// m_Stat.cycleEnter = enable ? HBDPurifierStat::OpenPosition : HBDPurifierStat::ClosePosition; -// m_Stat.cycleExit = enable ? HBDPurifierStat::OpenPosition : HBDPurifierStat::ClosePosition; -// } -// if (!m_BaseStat.isConnected)return; -// S7Command* pcommand = new S7Command(S7_COMMAND_WRITE, 1); -// TS7DataItem* items = pcommand->getDataItems(); -// items[0].Area = S7AreaDB; -// items[0].DBNumber = 1; -// items[0].Start = 115 * 8 + 7; -// items[0].WordLen = S7WLBit; -// items[0].Amount = 1; -// bool* tempv = new bool[1]; -// tempv[0] = enable; -// items[0].pdata = tempv; -// pcommand->m_Ref = this; -// pcommand->m_Fun = &HBDPurifierClient::ProcWriteValue; -// EnterCriticalSection(&m_RtcCS); -// m_RTCommands.push(pcommand); -// LeaveCriticalSection(&m_RtcCS); -//} -// -//void HBDPurifierClient::ResetSpinFilterUseTime(bool enable) -//{ -// if (!m_BaseStat.isConnected)return; -// S7Command* pcommand = new S7Command(S7_COMMAND_WRITE, 1); -// TS7DataItem* items = pcommand->getDataItems(); -// items[0].Area = S7AreaDB; -// items[0].DBNumber = 1; -// items[0].Start = 114 * 8 + 7; -// items[0].WordLen = S7WLBit; -// items[0].Amount = 1; -// bool* tempv = new bool[1]; -// tempv[0] = enable; -// items[0].pdata = tempv; -// pcommand->m_Ref = this; -// pcommand->m_Fun = &HBDPurifierClient::ProcWriteValue; -// EnterCriticalSection(&m_RtcCS); -// m_RTCommands.push(pcommand); -// LeaveCriticalSection(&m_RtcCS); -//} +void HBDPurifierClient::SetDeoxygen(bool enable) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetDeoxygen", to_string(enable), iBOOL); + //if (g_isDebug) { + // m_Stat.isDeoxygen = enable; + //} + //if (!m_BaseStat.isConnected)return; + //S7Command* pcommand = new S7Command(S7_COMMAND_WRITE, 1); + //TS7DataItem* items = pcommand->getDataItems(); + //items[0].Area = S7AreaDB; + //items[0].DBNumber = 1; + //items[0].Start = 111 * 8 + 7; + //items[0].WordLen = S7WLBit; + //items[0].Amount = 1; + //bool* tempv = new bool[1]; + //tempv[0] = enable; + //items[0].pdata = tempv; + //pcommand->m_Ref = this; + //pcommand->m_Fun = &HBDPurifierClient::ProcWriteValue; + //EnterCriticalSection(&m_RtcCS); + //m_RTCommands.push(pcommand); + //LeaveCriticalSection(&m_RtcCS); + +} + +void HBDPurifierClient::SetBlowBack(bool enable) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetBlowBack", to_string(enable), iBOOL); + //if (g_isDebug) { + // m_Stat.isBlowBack = enable; + //} + //if (!m_BaseStat.isConnected)return; + //S7Command* pcommand = new S7Command(S7_COMMAND_WRITE, 1); + //TS7DataItem* items = pcommand->getDataItems(); + //items[0].Area = S7AreaDB; + //items[0].DBNumber = 1; + //items[0].Start = 113 * 8 + 7; + //items[0].WordLen = S7WLBit; + //items[0].Amount = 1; + //bool* tempv = new bool[1]; + //tempv[0] = enable; + //items[0].pdata = tempv; + //pcommand->m_Ref = this; + //pcommand->m_Fun = &HBDPurifierClient::ProcWriteValue; + //EnterCriticalSection(&m_RtcCS); + //m_RTCommands.push(pcommand); + //LeaveCriticalSection(&m_RtcCS); +} + +void HBDPurifierClient::SetDedusting(bool enable) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetDedusting", to_string(enable), iBOOL); + //if (g_isDebug) { + // m_Stat.isDedusting = enable; + // m_Stat.cycleEnter = enable ? HBDPurifierStat::OpenPosition : HBDPurifierStat::ClosePosition; + // m_Stat.cycleExit = enable ? HBDPurifierStat::OpenPosition : HBDPurifierStat::ClosePosition; + //} + //if (!m_BaseStat.isConnected)return; + //S7Command* pcommand = new S7Command(S7_COMMAND_WRITE, 1); + //TS7DataItem* items = pcommand->getDataItems(); + //items[0].Area = S7AreaDB; + //items[0].DBNumber = 1; + //items[0].Start = 115 * 8 + 7; + //items[0].WordLen = S7WLBit; + //items[0].Amount = 1; + //bool* tempv = new bool[1]; + //tempv[0] = enable; + //items[0].pdata = tempv; + //pcommand->m_Ref = this; + //pcommand->m_Fun = &HBDPurifierClient::ProcWriteValue; + //EnterCriticalSection(&m_RtcCS); + //m_RTCommands.push(pcommand); + //LeaveCriticalSection(&m_RtcCS); +} + +void HBDPurifierClient::ResetSpinFilterUseTime(bool enable) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "ResetSpinFilterUseTime", to_string(enable), iBOOL); + //if (!m_BaseStat.isConnected)return; + //S7Command* pcommand = new S7Command(S7_COMMAND_WRITE, 1); + //TS7DataItem* items = pcommand->getDataItems(); + //items[0].Area = S7AreaDB; + //items[0].DBNumber = 1; + //items[0].Start = 114 * 8 + 7; + //items[0].WordLen = S7WLBit; + //items[0].Amount = 1; + //bool* tempv = new bool[1]; + //tempv[0] = enable; + //items[0].pdata = tempv; + //pcommand->m_Ref = this; + //pcommand->m_Fun = &HBDPurifierClient::ProcWriteValue; + //EnterCriticalSection(&m_RtcCS); + //m_RTCommands.push(pcommand); + //LeaveCriticalSection(&m_RtcCS); +} void HBDPurifierClient::GetStat(HBDPurifierStat& stat) { diff --git a/PrintC/Communication/HBDPurifierG3Client.cpp b/PrintC/Communication/HBDPurifierG3Client.cpp index 425e4bd..53de110 100644 --- a/PrintC/Communication/HBDPurifierG3Client.cpp +++ b/PrintC/Communication/HBDPurifierG3Client.cpp @@ -3,6 +3,7 @@ #include "../SystemInfo.h" #include "../utils/DataByte.h" //#include "../PLC/SignalService.h" +#include "../DataManage/DataHandle.h" HBDPurifierG3Client::HBDPurifierG3Client(void* pconfig):PurifierClient(pconfig) { @@ -445,34 +446,37 @@ HBDPurifierG3Client::~HBDPurifierG3Client() // 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); -//} \ No newline at end of file +void HBDPurifierG3Client::SetCoverWind(bool bvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetCoverWind", to_string(bvalue), iBOOL); + //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) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetCoverWindOffset", to_string(offset), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(600, offset); +} + +void HBDPurifierG3Client::SetProtectionPressure(bool bvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetProtectionPressure", to_string(bvalue), iFLOAT); + //if (!IsServerConnected())return; + //SetBit(1000 * 8 + 4, bvalue); +} \ No newline at end of file diff --git a/PrintC/Communication/HBDPurifierG3Client.h b/PrintC/Communication/HBDPurifierG3Client.h index 55527c8..31f0988 100644 --- a/PrintC/Communication/HBDPurifierG3Client.h +++ b/PrintC/Communication/HBDPurifierG3Client.h @@ -9,9 +9,9 @@ public: void SetHopperClean(bool bvalue) {} - //void SetCoverWind(bool bvalue); - //void SetCoverWindOffset(float offset); - //void SetProtectionPressure(bool bvalue); + void SetCoverWind(bool bvalue); + void SetCoverWindOffset(float offset); + void SetProtectionPressure(bool bvalue); private: //void InitCommand(); //static void ProcSetPressureValue(void *pobject, Command* pcommand); diff --git a/PrintC/Communication/PowerMeterClient.h b/PrintC/Communication/PowerMeterClient.h index 3ed573d..b4c685a 100644 --- a/PrintC/Communication/PowerMeterClient.h +++ b/PrintC/Communication/PowerMeterClient.h @@ -150,6 +150,7 @@ public: char m_endFlag; }; +#pragma pack() class PowerMeterClient:public TcpClient { diff --git a/PrintC/Communication/PurifierClient.cpp b/PrintC/Communication/PurifierClient.cpp index f939770..05a0e8e 100644 --- a/PrintC/Communication/PurifierClient.cpp +++ b/PrintC/Communication/PurifierClient.cpp @@ -426,11 +426,11 @@ PurifierClient::~PurifierClient() void PurifierClient::SetDedust(bool bvalue) { - if (g_isDebug) { - m_Stat.isDedusting->SetValue(bvalue); - } - if (!IsServerConnected())return; - DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, m_Stat.isDedusting->GetCode(), bvalue ? "1" : "0", iBOOL); + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetDedust", to_string(bvalue), iBOOL); + //if (g_isDebug) { + // m_Stat.isDedusting->SetValue(bvalue); + //} + //if (!IsServerConnected())return; //if (bvalue)SetMKBit(10 * 8 + 0,500); //else SetMKBit(10 * 8 + 1, 500); @@ -438,63 +438,70 @@ void PurifierClient::SetDedust(bool bvalue) void PurifierClient::SetBlowBack(bool bvalue) { - if (!IsServerConnected())return; - DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, m_Stat.isBlowBack->GetCode(), bvalue ? "1" : "0", iBOOL); + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetBlowBack", to_string(bvalue), iBOOL); + //if (!IsServerConnected())return; //if (bvalue)SetMKBit(10 * 8 + 2, 500); //else SetMKBit(10 * 8 + 3, 500); } void PurifierClient::SetFilterDiscard(bool bvalue) { - if (!IsServerConnected())return; - DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, m_Stat.isFilterDiscarding->GetCode(), bvalue ? "1" : "0", iBOOL); + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetFilterDiscard", to_string(bvalue), iBOOL); + //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); + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetBoxClean", to_string(bvalue), iBOOL); + //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); + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetFilterClean", to_string(bvalue), iBOOL); + //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); + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetHopperClean", to_string(bvalue), iBOOL); + //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); + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetPurify", to_string(bvalue), iBOOL); + //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::ResetFilterTime() +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "ResetFilterTime", "", UNKNOW); + //if (!IsServerConnected())return; + //SetMKBit(4 * 8 , 500); +} + +void PurifierClient::ClearHopperAlarm() +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "ClearHopperAlarm", "", UNKNOW); + //if (!IsServerConnected())return; + //SetMKBit(2 * 8, 500); +} // //void PurifierClient::SetDBFloat(int dindex, float fvalue) { // EnterCriticalSection(&m_RtcCS); @@ -540,152 +547,168 @@ void PurifierClient::SetPurify(bool bvalue) //} // // -//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::SetBoxPressureUpLimit(float fvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetBoxPressureUpLimit", to_string(fvalue), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(28, fvalue); +} + +void PurifierClient::SetBoxPressureDownLimit(float fvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetBoxPressureDownLimit", to_string(fvalue), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(32, fvalue); +} + +void PurifierClient::SetMidPressureDifAlarmValue(float fvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetMidPressureDifAlarmValue", to_string(fvalue), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(64, fvalue); +} + +void PurifierClient::SetHighPressureDifAlarmValue(float fvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetHighPressureDifAlarmValue", to_string(fvalue), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(68, fvalue); +} + +void PurifierClient::SetPrintCleanOxygenSetValue(float fvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetPrintCleanOxygenSetValue", to_string(fvalue), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(142, fvalue); +} + +void PurifierClient::SetWindValue(float fvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetWindValue", to_string(fvalue), iFLOAT); + //if (g_isDebug)m_Stat.windActualValue->SetValue(fvalue); + //if (!IsServerConnected())return; + //SetDBFloat(146, fvalue); +} + +void PurifierClient::SetPrintOxygenDownSetValue(float fvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetPrintOxygenDownSetValue", to_string(fvalue), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(154, fvalue); +} + +void PurifierClient::SetPrintOxygenUpSetValue(float fvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetPrintOxygenUpSetValue", to_string(fvalue), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(76, fvalue); +} + +void PurifierClient::SetfilterCleanOxygenSetValue(float fvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetfilterCleanOxygenSetValue", to_string(fvalue), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(158, fvalue); +} + +void PurifierClient::SetMidTempHighSetValue(float fvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetMidTempHighSetValue", to_string(fvalue), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(166, fvalue); +} + +void PurifierClient::SetMidTempUltraSetValue(float fvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetMidTempUltraSetValue", to_string(fvalue), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(170, fvalue); +} + +void PurifierClient::SetHighTempHighSetValue(float fvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetHighTempHighSetValue", to_string(fvalue), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(174, fvalue); +} + +void PurifierClient::SetMaxWindValue(float fvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetMaxWindValue", to_string(fvalue), iFLOAT); + //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::SetHopperCleanRemind(unsigned short value) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetHopperCleanRemind", to_string(value), iUSHORT); + //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) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetBoxWashDelayTime", to_string(value), iUSHORT); + //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) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetDedustingWashDelayTime", to_string(value), iUSHORT); + //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) { @@ -801,187 +824,201 @@ void PurifierClient::GetStat(Purifierstat_XT& stat) -//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); -// -//} \ No newline at end of file +void PurifierClient::SetPressureRangeUpLimit(float value) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetPressureRangeUpLimit", to_string(value), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(182, value); +} + +void PurifierClient::SetPressureRangeDownLimit(float value) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetPressureRangeDownLimit", to_string(value), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(186, value); +} + +void PurifierClient::SetOxygenAlarmValue(float value) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetOxygenAlarmValue", to_string(value), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(190, value); +} + +void PurifierClient::SetUseArgon(bool buse) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetUseArgon", to_string(buse), iBOOL); + //if (!IsServerConnected())return; + //SetBit(557 * 8 + 1, buse); +} + + +void PurifierClient::SetCoverWind(bool bvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetCoverWind", to_string(bvalue), iBOOL); + //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) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetCoverWindOffset", to_string(offset), iFLOAT); + //if (!IsServerConnected())return; + //SetDBFloat(812, offset); +} + +void PurifierClient::SetShieldMonitorPrintPressure(bool bvalue) { + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetShieldMonitorPrintPressure", to_string(bvalue), iBOOL); + //if (g_isDebug)m_Stat.shieldMonitorPrintPressure->SetValue(bvalue); + //if (!IsServerConnected())return; + //SetBit(557 * 8, bvalue); +} + +void PurifierClient::SetWindSlowFinishSignal(bool bvalue) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetWindSlowFinishSignal", to_string(bvalue), iBOOL); + //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) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetWindResumeFinishSignal", to_string(bvalue), iBOOL); + //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) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetBlowBackBlowTime", to_string(value), iUSHORT); + + /*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) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetBlowBackSetTimes", to_string(value), iUSHORT); + //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) +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetProtectionPressureSetTime", to_string(value), iUSHORT); + //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() +{ + DataHandle::Instance()->SetPushMsg(PURIFIERPARAMW, "SetUnLock", "", UNKNOW); + //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); + +} \ No newline at end of file diff --git a/PrintC/Communication/PurifierClient.h b/PrintC/Communication/PurifierClient.h index 3b71fe1..bcba526 100644 --- a/PrintC/Communication/PurifierClient.h +++ b/PrintC/Communication/PurifierClient.h @@ -587,43 +587,43 @@ public: void SetFilterClean(bool bvalue); //滤芯清洗 void SetHopperClean(bool bvalue); //料斗清洗启动或停止 void SetPurify(bool bvalue); //一键清洗(除氧) -// void SetBoxClean(bool bvalue); -// void ResetFilterTime(); -// void ClearHopperAlarm(); -// -// void SetBoxPressureUpLimit(float fvalue); //箱体压力上限设定 -// void SetBoxPressureDownLimit(float fvalue); //箱体压力下限设定 -// void SetMidPressureDifAlarmValue(float fvalue); //中效过滤器压差报警设 -// void SetHighPressureDifAlarmValue(float fvalue); //高效过滤器压差报警设 -// void SetPrintCleanOxygenSetValue(float fvalue); //打印室氧清洗氧含量设 -// void SetWindValue(float fvalue); //风速设定 -// void SetMaxWindValue(float fvalue); //最大风速设定 -// void SetPrintOxygenDownSetValue(float fvalue); //打印氧下限设定 -// void SetPrintOxygenUpSetValue(float fvalue); //打印氧上限设定 -// void SetfilterCleanOxygenSetValue(float fvalue); //过滤器清洗氧含量设定 -// void SetMidTempHighSetValue(float fvalue); //中效高温报警设定 -// void SetMidTempUltraSetValue(float fvalue); //中效超高温报警设定 -// void SetHighTempHighSetValue(float fvalue); //高效高温报警设定 -//// void SetHighTempUltraSetValue(float fvalue); //高效超高温报警设定 -// void SetHopperCleanRemind(unsigned short value); //清理料斗提醒设定 -// void SetBoxWashDelayTime(unsigned short value); -// void SetDedustingWashDelayTime(unsigned short value); -// void SetPressureRangeUpLimit(float value); //压力量程上限设定 -// void SetPressureRangeDownLimit(float value); //压力量程下限设定 -// void SetOxygenAlarmValue(float value); //打印氧超上限设定 -// void SetUseArgon(bool buse); -// -// void SetBlowBackBlowTime(unsigned short value); -// void SetBlowBackSetTimes(unsigned short value); - //void SetProtectionPressureSetTime(unsigned short value); - //void SetUnLock(); + void SetBoxClean(bool bvalue); + void ResetFilterTime(); + void ClearHopperAlarm(); - //virtual void SetCoverWind(bool bvalue); - //virtual void SetCoverWindOffset(float offset); + void SetBoxPressureUpLimit(float fvalue); //箱体压力上限设定 + void SetBoxPressureDownLimit(float fvalue); //箱体压力下限设定 + void SetMidPressureDifAlarmValue(float fvalue); //中效过滤器压差报警设 + void SetHighPressureDifAlarmValue(float fvalue); //高效过滤器压差报警设 + void SetPrintCleanOxygenSetValue(float fvalue); //打印室氧清洗氧含量设 + void SetWindValue(float fvalue); //风速设定 + void SetMaxWindValue(float fvalue); //最大风速设定 + void SetPrintOxygenDownSetValue(float fvalue); //打印氧下限设定 + void SetPrintOxygenUpSetValue(float fvalue); //打印氧上限设定 + void SetfilterCleanOxygenSetValue(float fvalue); //过滤器清洗氧含量设定 + void SetMidTempHighSetValue(float fvalue); //中效高温报警设定 + void SetMidTempUltraSetValue(float fvalue); //中效超高温报警设定 + void SetHighTempHighSetValue(float fvalue); //高效高温报警设定 +// void SetHighTempUltraSetValue(float fvalue); //高效超高温报警设定 + void SetHopperCleanRemind(unsigned short value); //清理料斗提醒设定 + void SetBoxWashDelayTime(unsigned short value); + void SetDedustingWashDelayTime(unsigned short value); + void SetPressureRangeUpLimit(float value); //压力量程上限设定 + void SetPressureRangeDownLimit(float value); //压力量程下限设定 + void SetOxygenAlarmValue(float value); //打印氧超上限设定 + void SetUseArgon(bool buse); - //virtual void SetWindSlowFinishSignal(bool bvalue); - //virtual void SetWindResumeFinishSignal(bool bvalue); - //virtual void SetShieldMonitorPrintPressure(bool bvalue); + void SetBlowBackBlowTime(unsigned short value); + void SetBlowBackSetTimes(unsigned short value); + void SetProtectionPressureSetTime(unsigned short value); + void SetUnLock(); + + virtual void SetCoverWind(bool bvalue); + virtual void SetCoverWindOffset(float offset); + + virtual void SetWindSlowFinishSignal(bool bvalue); + virtual void SetWindResumeFinishSignal(bool bvalue); + virtual void SetShieldMonitorPrintPressure(bool bvalue); virtual void SetProtectionPressure(bool bvalue) {} //virtual void ResetWindSlowFinishSignal(); diff --git a/PrintC/DataManage/DataHandle.h b/PrintC/DataManage/DataHandle.h index 0b10c89..9dd6722 100644 --- a/PrintC/DataManage/DataHandle.h +++ b/PrintC/DataManage/DataHandle.h @@ -25,19 +25,19 @@ public: void SetPushMsg(WRITETYPE dataType) { if (m_streamClient) { - WriteData* msg = new WriteData(); - msg->dataType = dataType; + WriteData msg; + msg.dataType = dataType; m_streamClient->SetPushMsg(msg); } } void SetPushMsg(WRITETYPE dataType,const string& nameKey,const string& strValue,DATATYPE valueType) { if (m_streamClient) { - WriteData* msg = new WriteData(); - msg->dataType = dataType; - msg->nameKey = nameKey; - msg->strValue = strValue; - msg->valueType = valueType; + WriteData msg ; + msg.dataType = dataType; + msg.nameKey = nameKey; + msg.strValue = strValue; + msg.valueType = valueType; m_streamClient->SetPushMsg(msg); } } diff --git a/PrintC/DataManage/RWData.h b/PrintC/DataManage/RWData.h index 5a67c46..b731989 100644 --- a/PrintC/DataManage/RWData.h +++ b/PrintC/DataManage/RWData.h @@ -127,6 +127,7 @@ enum WRITETYPE { IOSIGNAL, //io 信号 RESETELEC, //PowerMeterClient PURIFIERPARAMW, //净化器参数写入 + LAYERDATAREQ, //layer数据请求 }; diff --git a/PrintC/DataManage/StreamClient.cpp b/PrintC/DataManage/StreamClient.cpp index b3bdffc..9932ae0 100644 --- a/PrintC/DataManage/StreamClient.cpp +++ b/PrintC/DataManage/StreamClient.cpp @@ -40,17 +40,16 @@ bool StreamClient::GetPushMsg(WriteData& msg) { return false; } else { - msg = (*m_msgList.front()); - delete m_msgList.front(); + msg = m_msgList.front(); m_msgList.pop_front(); return true; } } -void StreamClient::SetPushMsg(WriteData* msg) { +void StreamClient::SetPushMsg(const WriteData& msg) { std::lock_guard lock(m_msgLock); - m_msgList.push_back(msg); + m_msgList.emplace_back(msg); } diff --git a/PrintC/DataManage/StreamClient.h b/PrintC/DataManage/StreamClient.h index c75a646..5301511 100644 --- a/PrintC/DataManage/StreamClient.h +++ b/PrintC/DataManage/StreamClient.h @@ -29,7 +29,7 @@ public: m_dataCallBack = dataCallBack; } - void SetPushMsg(WriteData* msg); + void SetPushMsg(const WriteData& msg); private: bool GetPushMsg(WriteData& msg); @@ -44,7 +44,7 @@ private: std::thread m_connectTd; - std::list m_msgList; //信息缓存区 + std::list m_msgList; //信息缓存区 std::mutex m_msgLock; //信息锁 void* m_handlePtr; diff --git a/PrintC/Purifier/BasePurifier.cpp b/PrintC/Purifier/BasePurifier.cpp index c74b902..0776676 100644 --- a/PrintC/Purifier/BasePurifier.cpp +++ b/PrintC/Purifier/BasePurifier.cpp @@ -2,7 +2,7 @@ #include "../config/ConfigManager.h" #include "../SystemInfo.h" #include -#include "../ScannerCtrl/BaseCtrl.h" +//#include "../ScannerCtrl/BaseCtrl.h" BasePurifier::BasePurifier() @@ -10,9 +10,9 @@ BasePurifier::BasePurifier() , m_RunFlag(false) , m_PurifierWinShow(false) { - m_ExtCfg = ConfigManager::GetInstance()->GetExtCfg(); - m_IOCfgWrapper = ConfigManager::GetInstance()->GetIoCfgWrapper(); - m_AlarmCfgWrapper = ConfigManager::GetInstance()->GetAlarmCfg(); + m_ExtCfg = ConfigManager::Instance()->GetExtCfg(); + m_IOCfgWrapper = ConfigManager::Instance()->GetIoCfgWrapper(); + m_AlarmCfgWrapper = ConfigManager::Instance()->GetAlarmCfg(); m_CycleTick = 80; } @@ -50,13 +50,13 @@ void BasePurifier::WorkRun() { while (m_RunFlag) { UpdateShowStat(); - if (BaseCtrl::IsStart() || BaseCtrl::IsPause()) { - AutoCtrlWhenPrint(); - } - else if (BaseCtrl::IsStandBy()) - { - AutoCtrlWhenStanby(); - } + //if (BaseCtrl::IsStart() || BaseCtrl::IsPause()) { + // AutoCtrlWhenPrint(); + //} + //else if (BaseCtrl::IsStandBy()) + //{ + // AutoCtrlWhenStanby(); + //} UpdateShowStat(); AutoCtrl(); diff --git a/PrintC/Purifier/G4Purifier.cpp b/PrintC/Purifier/G4Purifier.cpp index c520a64..2b9906a 100644 --- a/PrintC/Purifier/G4Purifier.cpp +++ b/PrintC/Purifier/G4Purifier.cpp @@ -5,10 +5,10 @@ #include "../Toast.h" #include "../SystemInfo.h" #include "../Logger.h" -#include "../plc/SignalService.h" +//#include "../plc/SignalService.h" #include "../DataManage/DataHandle.h" -G4Purifier::G4Purifier(ScannerCtrl* scannerCtrl) :XTPurifier(scannerCtrl) +G4Purifier::G4Purifier(void* scannerCtrl) :XTPurifier(scannerCtrl) { } @@ -19,17 +19,17 @@ G4Purifier::~G4Purifier() void G4Purifier::Init() { - //m_HasFan = false; - map* cfg = ConfigManager::GetInstance()->GetCommunicationCfg(); - m_RunCfg = ConfigManager::GetInstance()->GetRunCfg(); - m_MachineCfg = ConfigManager::GetInstance()->GetMachineCfg(); - m_IOCfgWrapper = ConfigManager::GetInstance()->GetIoCfgWrapper(); - m_AlarmCfgWrapper = ConfigManager::GetInstance()->GetAlarmCfg(); - m_Client = new G4PurifierClient((*cfg)["PURIFIER_G4"]); - m_Client->Init(); - ConfigManager::GetInstance()->AddComRefCfg(m_Client->GetConfig(), m_Client); - m_Client->GetConfig()->m_Enable = true; - if (m_Client->GetConfig()->m_Enable)m_Client->Startup(); + ////m_HasFan = false; + //map* cfg = ConfigManager::GetInstance()->GetCommunicationCfg(); + //m_RunCfg = ConfigManager::GetInstance()->GetRunCfg(); + //m_MachineCfg = ConfigManager::GetInstance()->GetMachineCfg(); + //m_IOCfgWrapper = ConfigManager::GetInstance()->GetIoCfgWrapper(); + //m_AlarmCfgWrapper = ConfigManager::GetInstance()->GetAlarmCfg(); + //m_Client = new G4PurifierClient((*cfg)["PURIFIER_G4"]); + //m_Client->Init(); + //ConfigManager::GetInstance()->AddComRefCfg(m_Client->GetConfig(), m_Client); + //m_Client->GetConfig()->m_Enable = true; + //if (m_Client->GetConfig()->m_Enable)m_Client->Startup(); } //void G4Purifier::DrawUI() @@ -1104,10 +1104,10 @@ void G4Purifier::DrawAdminUI() { if (!purifierstatXT.isBlowBack) { bool isok = true; - if (!BaseCtrl::IsStandBy()) { - g_Toast->AddToast(new ToastBean(_(u8"系统在非就绪状态下不能执行反吹").c_str(), 4000, Toast::COLOR_RED)); - isok = false; - } + //if (!BaseCtrl::IsStandBy()) { //wxxtest + // g_Toast->AddToast(new ToastBean(_(u8"系统在非就绪状态下不能执行反吹").c_str(), 4000, Toast::COLOR_RED)); + // isok = false; + //} if (isok) { if (purifierstatXT.IsAlarm()) { g_Toast->AddToast(new ToastBean(_(u8"净化器存在报警不能执行反吹").c_str(), 4000, Toast::COLOR_RED)); @@ -1190,10 +1190,10 @@ void G4Purifier::CheckInternalAlarm() if (hasAlarm) { m_AlarmCfgWrapper->m_PurifierInternalAlarm->m_AlarmInfo = ss.str().c_str(); - SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierInternalAlarm, true); + //SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierInternalAlarm, true); } else { m_AlarmCfgWrapper->m_PurifierInternalAlarm->m_AlarmInfo = ""; - SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierInternalAlarm, false); + //SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierInternalAlarm, false); } } \ No newline at end of file diff --git a/PrintC/Purifier/G4Purifier.h b/PrintC/Purifier/G4Purifier.h index 6d2ad5a..78c9584 100644 --- a/PrintC/Purifier/G4Purifier.h +++ b/PrintC/Purifier/G4Purifier.h @@ -1,9 +1,9 @@ -#pragma once +#pragma once #include "XTPurifier.h" class G4Purifier :public XTPurifier { public: - G4Purifier(ScannerCtrl* scannerCtrl); + G4Purifier(void* scannerCtrl); ~G4Purifier(); void Init(); diff --git a/PrintC/Purifier/HBD3Purifier.cpp b/PrintC/Purifier/HBD3Purifier.cpp index f162f45..8b0eb49 100644 --- a/PrintC/Purifier/HBD3Purifier.cpp +++ b/PrintC/Purifier/HBD3Purifier.cpp @@ -5,9 +5,9 @@ #include "../Toast.h" #include "../SystemInfo.h" #include "../Logger.h" -#include "../plc/SignalService.h" +//#include "../plc/SignalService.h" -HBD3Purifier::HBD3Purifier(ScannerCtrl* scannerCtrl):XTPurifier(scannerCtrl) +HBD3Purifier::HBD3Purifier(void* scannerCtrl):XTPurifier(scannerCtrl) { } @@ -18,17 +18,17 @@ HBD3Purifier::~HBD3Purifier() void HBD3Purifier::Init() { - //m_HasFan = false; - map* cfg = ConfigManager::GetInstance()->GetCommunicationCfg(); - m_RunCfg = ConfigManager::GetInstance()->GetRunCfg(); - m_MachineCfg = ConfigManager::GetInstance()->GetMachineCfg(); - m_IOCfgWrapper = ConfigManager::GetInstance()->GetIoCfgWrapper(); - m_AlarmCfgWrapper = ConfigManager::GetInstance()->GetAlarmCfg(); - m_Client = new HBDPurifierG3Client((*cfg)["HBD_PURIFIER_G3"]); - m_Client->Init(); - ConfigManager::GetInstance()->AddComRefCfg(m_Client->GetConfig(), m_Client); - m_Client->GetConfig()->m_Enable = true; - if (m_Client->GetConfig()->m_Enable)m_Client->Startup(); + ////m_HasFan = false; + //map* cfg = ConfigManager::Instance()->GetCommunicationCfg(); + //m_RunCfg = ConfigManager::GetInstance()->GetRunCfg(); + //m_MachineCfg = ConfigManager::GetInstance()->GetMachineCfg(); + //m_IOCfgWrapper = ConfigManager::GetInstance()->GetIoCfgWrapper(); + //m_AlarmCfgWrapper = ConfigManager::GetInstance()->GetAlarmCfg(); + //m_Client = new HBDPurifierG3Client((*cfg)["HBD_PURIFIER_G3"]); + //m_Client->Init(); + //ConfigManager::GetInstance()->AddComRefCfg(m_Client->GetConfig(), m_Client); + //m_Client->GetConfig()->m_Enable = true; + //if (m_Client->GetConfig()->m_Enable)m_Client->Startup(); } //void HBD3Purifier::DrawUI() @@ -1178,10 +1178,10 @@ void HBD3Purifier::CheckInternalAlarm() if (hasAlarm) { m_AlarmCfgWrapper->m_PurifierInternalAlarm->m_AlarmInfo = ss.str().c_str(); - SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierInternalAlarm, true); + //SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierInternalAlarm, true); } else { m_AlarmCfgWrapper->m_PurifierInternalAlarm->m_AlarmInfo = ""; - SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierInternalAlarm, false); + //SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierInternalAlarm, false); } } \ No newline at end of file diff --git a/PrintC/Purifier/HBD3Purifier.h b/PrintC/Purifier/HBD3Purifier.h index a4f2cf4..d71316e 100644 --- a/PrintC/Purifier/HBD3Purifier.h +++ b/PrintC/Purifier/HBD3Purifier.h @@ -4,7 +4,7 @@ class HBD3Purifier:public XTPurifier { public: - HBD3Purifier(ScannerCtrl* scannerCtrl); + HBD3Purifier(void* scannerCtrl); ~HBD3Purifier(); void Init(); diff --git a/PrintC/Purifier/XTPurifier.cpp b/PrintC/Purifier/XTPurifier.cpp index 321426a..b387af5 100644 --- a/PrintC/Purifier/XTPurifier.cpp +++ b/PrintC/Purifier/XTPurifier.cpp @@ -198,201 +198,201 @@ bool XTPurifier::IsAutoDeoxygen() else return false; } -bool XTPurifier::HandleReadyPrint(bool startAfterPause, unsigned int& deoxytime) -{ - //DWORD startTick = GetTickCount64(); - //if (m_IOCfgWrapper->m_PrintAirSupply) { - // if (!m_IOCfgWrapper->m_PrintAirSupply->IsActive()) { - // m_IOCfgWrapper->m_PrintAirSupply->SetActive(true); - // } - //} - - if (m_State.isBlowBack) { - g_Toast->AddToast(new ToastBean(_(u8"终止:检测到正在反吹"), 5000, Toast::COLOR_RED)); - return false; - } - - float judgeOxygen = m_RunCfg->m_TargeOxygen; - if (startAfterPause) { - judgeOxygen = m_RunCfg->m_WarnOxygen; - } - //g_Toast->AddToast(new ToastBean(_(u8"开启除氧").c_str(), 3000)); - EnterCriticalSection(&g_SystemInfo->m_InfoCs); - bool isUpperTarge = (g_SystemInfo->m_ComPrintOxygen1 > judgeOxygen) || (g_SystemInfo->m_ComPrintOxygen2 > judgeOxygen) || (m_State.filterOxygenValue > m_State.filterCleanOxygenSetValue); - LeaveCriticalSection(&g_SystemInfo->m_InfoCs); - SignalState ss; - SignalService::GetInstance().GetSignalState(ss); - bool cylinderNeedDeoxygen = (!ss.m_MoldDeoxygenFinished && ss.m_MoldDeoxygenEnable && m_RunCfg->m_MoldDeoxygenEnable); - if (isUpperTarge || cylinderNeedDeoxygen) { - if (m_State.isDedusting) { - m_Client->SetDedust(false); - Sleep(2000); - } - UpdateShowStat(); - if (!m_State.isPurifying) { - if(isUpperTarge)g_Toast->AddToast(new ToastBean(_(u8"开启打印室除氧"), 3000, ImVec4(0, 1, 0, 1))); - - m_Client->SetPurify(true); - - m_IsDeoxygenStarted = true; - m_LastStartDeoxygenTime = GetTickCount64(); - m_HadCalcDeoxygenTime = false; - Sleep(3000); - } - if (cylinderNeedDeoxygen) - { - SignalService::GetInstance().StartCylinderDeoxygen(); - g_Toast->AddToast(new ToastBean(_(u8"开启缸体除氧"), 3000, ImVec4(0, 1, 0, 1))); - Sleep(2000); - } - } - - UpdateShowStat(); - BaseCtrl::SetPreState(BaseCtrl::Purifying); - SignalService::GetInstance().GetSignalState(ss); - int dcount = 0; - while ((BaseCtrl::GetPreState() == ScannerCtrl::Purifying && m_State.isPurifying) || ss.m_MoldDeoxygenRun) - { - if (!BaseCtrl::IsPrePrint()) { - break; - } - judgeOxygen = m_RunCfg->m_TargeOxygen; - if (startAfterPause) { - judgeOxygen = m_RunCfg->m_WarnOxygen; - } - Sleep(500); - EnterCriticalSection(&g_SystemInfo->m_InfoCs); - bool isLowerTarge = ((g_SystemInfo->m_ComPrintOxygen1 <= judgeOxygen) && (g_SystemInfo->m_ComPrintOxygen2 <= judgeOxygen) && (m_State.filterOxygenValue <= m_State.filterCleanOxygenSetValue)); - LeaveCriticalSection(&g_SystemInfo->m_InfoCs); - SignalService::GetInstance().GetSignalState(ss); - if (isLowerTarge) { - if (cylinderNeedDeoxygen) { - if (ss.m_MoldDeoxygenRun && !ss.m_MoldDeoxygenFinished) { - if ((dcount % 20) == 0) { - dcount = 0; - g_Toast->AddToast(new ToastBean(_(u8"等待缸体除氧完成"), 3000, Toast::COLOR_ORANGE)); - } - } - else { - break; - } - } - else break; - } - else { - if ((dcount % 20) == 0) { - dcount = 0; - g_Toast->AddToast(new ToastBean(_(u8"等待打印室和净化器除氧完成"), 3000, Toast::COLOR_ORANGE)); - } - } - dcount++; - } - Sleep(500); - if (!BaseCtrl::IsPrePrint()) { - return false; - } - - if (m_State.isPurifying) { - m_Client->SetPurify(false); - Sleep(2000); - } - - //DWORD stoptick = GetTickCount64(); - //deoxytime = (stoptick - startTick) / 1000; - if (m_IsDeoxygenStarted && !m_HadCalcDeoxygenTime) { - m_LastDeoxygenTime = (GetTickCount64() - m_LastStartDeoxygenTime) / 1000.0f / 60.0f; - m_HadCalcDeoxygenTime = true; - } - deoxytime = m_LastDeoxygenTime * 60; - - if (!m_State.isDedusting) { - m_Client->SetDedust(true); - g_Toast->AddToast(new ToastBean(_(u8"开启除尘").c_str(), 3000, ImVec4(0, 1, 0, 1))); - Sleep(3000); - } - UpdateShowStat(); - BaseCtrl::SetPreState(BaseCtrl::Dedusting); - int count = 0; - while (BaseCtrl::IsPrePrint() && BaseCtrl::GetPreState() == ScannerCtrl::Dedusting) { - Sleep(500); - - UpdateShowStat(); - if (!m_State.isDedusting) { - if ((g_SystemInfo->GetComPrintOxygen1() < m_RunCfg->m_AlarmOxygen) && (g_SystemInfo->GetComPrintOxygen2() < m_RunCfg->m_AlarmOxygen)) - { - if (m_State.isPurifying) { - m_Client->SetPurify(false); - Sleep(1000); - } - m_Client->SetDedust(true); - Sleep(1000); - } - else { - if ((count % 20) == 0) { - if (!m_State.isPurifying) - { - m_Client->SetPurify(true); - Sleep(1000); - } - count = 0; - g_Toast->AddToast(new ToastBean(_(u8"正在等待循环重启"), 3000, Toast::COLOR_ORANGE)); - } - count++; - continue; - } - } - - FanFit* al = m_ExtCfg->m_FanWindFit[m_ExtCfg->m_SelectedFanWindFit]; - if ((m_State.windSetValue - m_State.windActualValue) > al->checkWindOffset) { - if ((count % 20) == 0) { - count = 0; - g_Toast->AddToast(new ToastBean(_(u8"正在等待风速").c_str(), 3000, Toast::COLOR_ORANGE)); - } - count++; - continue; - } - - - judgeOxygen = m_RunCfg->m_WarnOxygen; - - if ((g_SystemInfo->m_ComPrintOxygen1 > judgeOxygen) || (g_SystemInfo->m_ComPrintOxygen2 > judgeOxygen)) { - if ((count % 20) == 0) { - count = 0; - g_Toast->AddToast(new ToastBean(_(u8"正在等待氧含量").c_str(), 3000, Toast::COLOR_ORANGE)); - } - count++; - continue; - } - - if (m_AlarmCfgWrapper->m_InverterRunSignalAlarm&&m_AlarmCfgWrapper->m_InverterRunSignalAlarm->m_IsEnable) - { - if (m_AlarmCfgWrapper->m_InverterRunSignalAlarm->m_IsAlarm) { - if ((count % 20) == 0) { - count = 0; - g_Toast->AddToast(new ToastBean(_(u8"正在变频器运行信号"), 3000, Toast::COLOR_ORANGE)); - } - count++; - continue; - } - } - if (m_AlarmCfgWrapper->m_PrintSignalAlarm&&m_AlarmCfgWrapper->m_PrintSignalAlarm->m_IsEnable) - { - if (m_AlarmCfgWrapper->m_PrintSignalAlarm->m_IsAlarm) { - if ((count % 20) == 0) { - count = 0; - g_Toast->AddToast(new ToastBean(_(u8"正在等待可打印信号"), 3000, Toast::COLOR_ORANGE)); - } - count++; - continue; - } - } - break; - } - if (!BaseCtrl::IsPrePrint()) { - return false; - } - return true; -} +//bool XTPurifier::HandleReadyPrint(bool startAfterPause, unsigned int& deoxytime) +//{ +// //DWORD startTick = GetTickCount64(); +// //if (m_IOCfgWrapper->m_PrintAirSupply) { +// // if (!m_IOCfgWrapper->m_PrintAirSupply->IsActive()) { +// // m_IOCfgWrapper->m_PrintAirSupply->SetActive(true); +// // } +// //} +// +// if (m_State.isBlowBack) { +// g_Toast->AddToast(new ToastBean(_(u8"终止:检测到正在反吹"), 5000, Toast::COLOR_RED)); +// return false; +// } +// +// float judgeOxygen = m_RunCfg->m_TargeOxygen; +// if (startAfterPause) { +// judgeOxygen = m_RunCfg->m_WarnOxygen; +// } +// //g_Toast->AddToast(new ToastBean(_(u8"开启除氧").c_str(), 3000)); +// EnterCriticalSection(&g_SystemInfo->m_InfoCs); +// bool isUpperTarge = (g_SystemInfo->m_ComPrintOxygen1 > judgeOxygen) || (g_SystemInfo->m_ComPrintOxygen2 > judgeOxygen) || (m_State.filterOxygenValue > m_State.filterCleanOxygenSetValue); +// LeaveCriticalSection(&g_SystemInfo->m_InfoCs); +// SignalState ss; +// SignalService::GetInstance().GetSignalState(ss); +// bool cylinderNeedDeoxygen = (!ss.m_MoldDeoxygenFinished && ss.m_MoldDeoxygenEnable && m_RunCfg->m_MoldDeoxygenEnable); +// if (isUpperTarge || cylinderNeedDeoxygen) { +// if (m_State.isDedusting) { +// m_Client->SetDedust(false); +// Sleep(2000); +// } +// UpdateShowStat(); +// if (!m_State.isPurifying) { +// if(isUpperTarge)g_Toast->AddToast(new ToastBean(_(u8"开启打印室除氧"), 3000, ImVec4(0, 1, 0, 1))); +// +// m_Client->SetPurify(true); +// +// m_IsDeoxygenStarted = true; +// m_LastStartDeoxygenTime = GetTickCount64(); +// m_HadCalcDeoxygenTime = false; +// Sleep(3000); +// } +// if (cylinderNeedDeoxygen) +// { +// SignalService::GetInstance().StartCylinderDeoxygen(); +// g_Toast->AddToast(new ToastBean(_(u8"开启缸体除氧"), 3000, ImVec4(0, 1, 0, 1))); +// Sleep(2000); +// } +// } +// +// UpdateShowStat(); +// BaseCtrl::SetPreState(BaseCtrl::Purifying); +// SignalService::GetInstance().GetSignalState(ss); +// int dcount = 0; +// while ((BaseCtrl::GetPreState() == ScannerCtrl::Purifying && m_State.isPurifying) || ss.m_MoldDeoxygenRun) +// { +// if (!BaseCtrl::IsPrePrint()) { +// break; +// } +// judgeOxygen = m_RunCfg->m_TargeOxygen; +// if (startAfterPause) { +// judgeOxygen = m_RunCfg->m_WarnOxygen; +// } +// Sleep(500); +// EnterCriticalSection(&g_SystemInfo->m_InfoCs); +// bool isLowerTarge = ((g_SystemInfo->m_ComPrintOxygen1 <= judgeOxygen) && (g_SystemInfo->m_ComPrintOxygen2 <= judgeOxygen) && (m_State.filterOxygenValue <= m_State.filterCleanOxygenSetValue)); +// LeaveCriticalSection(&g_SystemInfo->m_InfoCs); +// SignalService::GetInstance().GetSignalState(ss); +// if (isLowerTarge) { +// if (cylinderNeedDeoxygen) { +// if (ss.m_MoldDeoxygenRun && !ss.m_MoldDeoxygenFinished) { +// if ((dcount % 20) == 0) { +// dcount = 0; +// g_Toast->AddToast(new ToastBean(_(u8"等待缸体除氧完成"), 3000, Toast::COLOR_ORANGE)); +// } +// } +// else { +// break; +// } +// } +// else break; +// } +// else { +// if ((dcount % 20) == 0) { +// dcount = 0; +// g_Toast->AddToast(new ToastBean(_(u8"等待打印室和净化器除氧完成"), 3000, Toast::COLOR_ORANGE)); +// } +// } +// dcount++; +// } +// Sleep(500); +// if (!BaseCtrl::IsPrePrint()) { +// return false; +// } +// +// if (m_State.isPurifying) { +// m_Client->SetPurify(false); +// Sleep(2000); +// } +// +// //DWORD stoptick = GetTickCount64(); +// //deoxytime = (stoptick - startTick) / 1000; +// if (m_IsDeoxygenStarted && !m_HadCalcDeoxygenTime) { +// m_LastDeoxygenTime = (GetTickCount64() - m_LastStartDeoxygenTime) / 1000.0f / 60.0f; +// m_HadCalcDeoxygenTime = true; +// } +// deoxytime = m_LastDeoxygenTime * 60; +// +// if (!m_State.isDedusting) { +// m_Client->SetDedust(true); +// g_Toast->AddToast(new ToastBean(_(u8"开启除尘").c_str(), 3000, ImVec4(0, 1, 0, 1))); +// Sleep(3000); +// } +// UpdateShowStat(); +// BaseCtrl::SetPreState(BaseCtrl::Dedusting); +// int count = 0; +// while (BaseCtrl::IsPrePrint() && BaseCtrl::GetPreState() == ScannerCtrl::Dedusting) { +// Sleep(500); +// +// UpdateShowStat(); +// if (!m_State.isDedusting) { +// if ((g_SystemInfo->GetComPrintOxygen1() < m_RunCfg->m_AlarmOxygen) && (g_SystemInfo->GetComPrintOxygen2() < m_RunCfg->m_AlarmOxygen)) +// { +// if (m_State.isPurifying) { +// m_Client->SetPurify(false); +// Sleep(1000); +// } +// m_Client->SetDedust(true); +// Sleep(1000); +// } +// else { +// if ((count % 20) == 0) { +// if (!m_State.isPurifying) +// { +// m_Client->SetPurify(true); +// Sleep(1000); +// } +// count = 0; +// g_Toast->AddToast(new ToastBean(_(u8"正在等待循环重启"), 3000, Toast::COLOR_ORANGE)); +// } +// count++; +// continue; +// } +// } +// +// FanFit* al = m_ExtCfg->m_FanWindFit[m_ExtCfg->m_SelectedFanWindFit]; +// if ((m_State.windSetValue - m_State.windActualValue) > al->checkWindOffset) { +// if ((count % 20) == 0) { +// count = 0; +// g_Toast->AddToast(new ToastBean(_(u8"正在等待风速").c_str(), 3000, Toast::COLOR_ORANGE)); +// } +// count++; +// continue; +// } +// +// +// judgeOxygen = m_RunCfg->m_WarnOxygen; +// +// if ((g_SystemInfo->m_ComPrintOxygen1 > judgeOxygen) || (g_SystemInfo->m_ComPrintOxygen2 > judgeOxygen)) { +// if ((count % 20) == 0) { +// count = 0; +// g_Toast->AddToast(new ToastBean(_(u8"正在等待氧含量").c_str(), 3000, Toast::COLOR_ORANGE)); +// } +// count++; +// continue; +// } +// +// if (m_AlarmCfgWrapper->m_InverterRunSignalAlarm&&m_AlarmCfgWrapper->m_InverterRunSignalAlarm->m_IsEnable) +// { +// if (m_AlarmCfgWrapper->m_InverterRunSignalAlarm->m_IsAlarm) { +// if ((count % 20) == 0) { +// count = 0; +// g_Toast->AddToast(new ToastBean(_(u8"正在变频器运行信号"), 3000, Toast::COLOR_ORANGE)); +// } +// count++; +// continue; +// } +// } +// if (m_AlarmCfgWrapper->m_PrintSignalAlarm&&m_AlarmCfgWrapper->m_PrintSignalAlarm->m_IsEnable) +// { +// if (m_AlarmCfgWrapper->m_PrintSignalAlarm->m_IsAlarm) { +// if ((count % 20) == 0) { +// count = 0; +// g_Toast->AddToast(new ToastBean(_(u8"正在等待可打印信号"), 3000, Toast::COLOR_ORANGE)); +// } +// count++; +// continue; +// } +// } +// break; +// } +// if (!BaseCtrl::IsPrePrint()) { +// return false; +// } +// return true; +//} void XTPurifier::UpdateShowStat() { @@ -400,159 +400,159 @@ void XTPurifier::UpdateShowStat() } -void XTPurifier::AutoCtrl() -{ - if (m_IsDeoxygenStarted && !m_State.isPurifying) - { - m_IsDeoxygenStarted = false; - if (!m_HadCalcDeoxygenTime) { - m_LastDeoxygenTime = (GetTickCount64() - m_LastStartDeoxygenTime) /1000.0f/ 60.0f; - m_HadCalcDeoxygenTime = true; - } - } - if (!BaseCtrl::IsStandBy() || m_State.isPurifying || m_State.isDedusting) - { - if (m_State.isBlowBack) { - g_Toast->AddToast(new ToastBean(_(u8"存在不允许反吹条件,反吹中断"), 3000, Toast::COLOR_RED)); - m_Client->SetBlowBack(false); - Sleep(500); - } - } - - /*if (((g_SystemInfo->m_ComPrintOxygen1 > m_RunCfg->m_AlarmOxygen) || (g_SystemInfo->m_ComPrintOxygen2 > m_RunCfg->m_AlarmOxygen)) && !m_RunCfg->m_IsDebugMode) { - if (m_State.isDedusting) { - g_Toast->AddToast(new ToastBean(u8"氧含量越限,循环关闭", 3000, Toast::COLOR_RED)); - m_Client->SetDedust(false); - Sleep(1000); - UpdateShowStat(); - } - }*/ - - if (!m_ManualCheckAirTightness) { - if (m_State.isPurifying || m_State.isDedusting) { - if (m_IOCfgWrapper->m_PurifierCoolerPower) { - m_IOCfgWrapper->m_PurifierCoolerPower->SetActive(true); - } - if (m_IOCfgWrapper->m_PrintAssistGas && !m_IOCfgWrapper->m_PrintAssistGas->IsActive()) { - m_IOCfgWrapper->m_PrintAssistGas->SetActive(true); - } - - } - else { - if (m_IOCfgWrapper->m_PurifierCoolerPower) { - m_IOCfgWrapper->m_PurifierCoolerPower->SetActive(false); - } - if (m_IOCfgWrapper->m_PrintAssistGas && m_IOCfgWrapper->m_PrintAssistGas->IsActive()) { - m_IOCfgWrapper->m_PrintAssistGas->SetActive(false); - } - } - m_IOCfgWrapper->m_PrintAirEvacuation->SetActive(m_State.isPurifying); - } - - bool isDedustingStopAlarm = !m_State.isDedusting; - - if (isDedustingStopAlarm) { - uint64_t tnow = GetTickCount64(); - if (tnow - m_DudestingAlarmTick > 1500) { - g_SystemInfo->SetDedustingStopAlarm(true); - } - } - else { - m_DudestingAlarmTick = GetTickCount64(); - g_SystemInfo->SetDedustingStopAlarm(false); - } - - if (m_AlarmCfgWrapper->m_PurifierKeepAliveAlarm) - { - int tick = m_RunCfg->m_PurifierKeepAliveAlarmJudgeSecond * 1000 / m_CycleTick; - if (m_State.keepAlive == m_LastKeepAlive) { - m_AlarmCfgWrapper->m_PurifierKeepAliveAlarm->m_AlarmContinueTick++; - if (m_AlarmCfgWrapper->m_PurifierKeepAliveAlarm->m_AlarmContinueTick > tick) { - m_AlarmCfgWrapper->m_PurifierKeepAliveAlarm->m_AlarmContinueTick = tick+1; - SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierKeepAliveAlarm,true); - } - } - else { - m_AlarmCfgWrapper->m_PurifierKeepAliveAlarm->m_AlarmContinueTick = 0; - SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierKeepAliveAlarm, false); - } - m_LastKeepAlive = m_State.keepAlive; - } - - if (m_AlarmCfgWrapper->m_WindOverLimitAlarm && m_AlarmCfgWrapper->m_WindOverLimitJudgeFlag > 600) { - float alarmPercent = m_ExtCfg->m_FanWindFit[m_ExtCfg->m_SelectedFanWindFit]->checkAlarmPercent; - float minAlarm = m_State.windSetValue * (1.0f - alarmPercent / 100.0f); - float maxAlarm = m_State.windSetValue * (1.0f + alarmPercent / 100.0f); - float actV = m_State.windActualValue; - if ((actV > maxAlarm || actV < minAlarm)) { - m_AlarmCfgWrapper->m_WindOverLimitAlarm->m_AlarmInfo = to_string(actV); - m_AlarmCfgWrapper->m_WindOverLimitAlarm->m_IsAlarm = true; - } - else - { - m_AlarmCfgWrapper->m_WindOverLimitAlarm->m_AlarmInfo = ""; - m_AlarmCfgWrapper->m_WindOverLimitAlarm->m_IsAlarm = false; - } - } - - m_AlarmCfgWrapper->m_WindOverLimitJudgeFlag++; - if (m_AlarmCfgWrapper->m_WindOverLimitJudgeFlag > 700)m_AlarmCfgWrapper->m_WindOverLimitJudgeFlag = 700; - - CheckInternalAlarm(); - //关闭补气阀 - - SignalState ss; - SignalService::GetInstance().GetSignalState(ss); - if (m_RunCfg->m_PrintAutoRenewalGas) { - if (BaseCtrl::IsStart()|| BaseCtrl::IsPause()) { - if (m_Client->IsComConnected()) - { - if (ss.m_PrintAirRenewalEnable) - { - if (!m_State.shieldMonitorPrintPressure) { - m_Client->SetShieldMonitorPrintPressure(true); - } - if (!ss.m_PrintAirRenewalTrigger) { - SignalService::GetInstance().SetPrintAirRenewalTrigger(true); - } - } - else { - if (m_State.shieldMonitorPrintPressure) { - m_Client->SetShieldMonitorPrintPressure(false); - } - if (ss.m_PrintAirRenewalTrigger) { - SignalService::GetInstance().SetPrintAirRenewalTrigger(false); - } - } - } - else { - if (m_State.shieldMonitorPrintPressure) { - m_Client->SetShieldMonitorPrintPressure(false); - } - if (ss.m_PrintAirRenewalTrigger) { - SignalService::GetInstance().SetPrintAirRenewalTrigger(false); - } - } - } - else { - if (m_State.shieldMonitorPrintPressure) { - m_Client->SetShieldMonitorPrintPressure(false); - } - if (ss.m_PrintAirRenewalTrigger) { - SignalService::GetInstance().SetPrintAirRenewalTrigger(false); - } - } - } - else { - if (m_State.shieldMonitorPrintPressure) { - m_Client->SetShieldMonitorPrintPressure(false); - } - if (ss.m_PrintAirRenewalTrigger) { - SignalService::GetInstance().SetPrintAirRenewalTrigger(false); - } - } - -} +//void XTPurifier::AutoCtrl() +//{ +// if (m_IsDeoxygenStarted && !m_State.isPurifying) +// { +// m_IsDeoxygenStarted = false; +// if (!m_HadCalcDeoxygenTime) { +// m_LastDeoxygenTime = (GetTickCount64() - m_LastStartDeoxygenTime) /1000.0f/ 60.0f; +// m_HadCalcDeoxygenTime = true; +// } +// } +// if (!BaseCtrl::IsStandBy() || m_State.isPurifying || m_State.isDedusting) +// { +// if (m_State.isBlowBack) { +// g_Toast->AddToast(new ToastBean(_(u8"存在不允许反吹条件,反吹中断"), 3000, Toast::COLOR_RED)); +// m_Client->SetBlowBack(false); +// Sleep(500); +// } +// } +// +// /*if (((g_SystemInfo->m_ComPrintOxygen1 > m_RunCfg->m_AlarmOxygen) || (g_SystemInfo->m_ComPrintOxygen2 > m_RunCfg->m_AlarmOxygen)) && !m_RunCfg->m_IsDebugMode) { +// if (m_State.isDedusting) { +// g_Toast->AddToast(new ToastBean(u8"氧含量越限,循环关闭", 3000, Toast::COLOR_RED)); +// m_Client->SetDedust(false); +// Sleep(1000); +// UpdateShowStat(); +// } +// }*/ +// +// if (!m_ManualCheckAirTightness) { +// if (m_State.isPurifying || m_State.isDedusting) { +// if (m_IOCfgWrapper->m_PurifierCoolerPower) { +// m_IOCfgWrapper->m_PurifierCoolerPower->SetActive(true); +// } +// if (m_IOCfgWrapper->m_PrintAssistGas && !m_IOCfgWrapper->m_PrintAssistGas->IsActive()) { +// m_IOCfgWrapper->m_PrintAssistGas->SetActive(true); +// } +// +// } +// else { +// if (m_IOCfgWrapper->m_PurifierCoolerPower) { +// m_IOCfgWrapper->m_PurifierCoolerPower->SetActive(false); +// } +// if (m_IOCfgWrapper->m_PrintAssistGas && m_IOCfgWrapper->m_PrintAssistGas->IsActive()) { +// m_IOCfgWrapper->m_PrintAssistGas->SetActive(false); +// } +// } +// m_IOCfgWrapper->m_PrintAirEvacuation->SetActive(m_State.isPurifying); +// } +// +// bool isDedustingStopAlarm = !m_State.isDedusting; +// +// if (isDedustingStopAlarm) { +// uint64_t tnow = GetTickCount64(); +// if (tnow - m_DudestingAlarmTick > 1500) { +// g_SystemInfo->SetDedustingStopAlarm(true); +// } +// } +// else { +// m_DudestingAlarmTick = GetTickCount64(); +// g_SystemInfo->SetDedustingStopAlarm(false); +// } +// +// if (m_AlarmCfgWrapper->m_PurifierKeepAliveAlarm) +// { +// int tick = m_RunCfg->m_PurifierKeepAliveAlarmJudgeSecond * 1000 / m_CycleTick; +// if (m_State.keepAlive == m_LastKeepAlive) { +// m_AlarmCfgWrapper->m_PurifierKeepAliveAlarm->m_AlarmContinueTick++; +// if (m_AlarmCfgWrapper->m_PurifierKeepAliveAlarm->m_AlarmContinueTick > tick) { +// m_AlarmCfgWrapper->m_PurifierKeepAliveAlarm->m_AlarmContinueTick = tick+1; +// SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierKeepAliveAlarm,true); +// } +// } +// else { +// m_AlarmCfgWrapper->m_PurifierKeepAliveAlarm->m_AlarmContinueTick = 0; +// SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierKeepAliveAlarm, false); +// } +// m_LastKeepAlive = m_State.keepAlive; +// } +// +// if (m_AlarmCfgWrapper->m_WindOverLimitAlarm && m_AlarmCfgWrapper->m_WindOverLimitJudgeFlag > 600) { +// float alarmPercent = m_ExtCfg->m_FanWindFit[m_ExtCfg->m_SelectedFanWindFit]->checkAlarmPercent; +// float minAlarm = m_State.windSetValue * (1.0f - alarmPercent / 100.0f); +// float maxAlarm = m_State.windSetValue * (1.0f + alarmPercent / 100.0f); +// float actV = m_State.windActualValue; +// if ((actV > maxAlarm || actV < minAlarm)) { +// m_AlarmCfgWrapper->m_WindOverLimitAlarm->m_AlarmInfo = to_string(actV); +// m_AlarmCfgWrapper->m_WindOverLimitAlarm->m_IsAlarm = true; +// } +// else +// { +// m_AlarmCfgWrapper->m_WindOverLimitAlarm->m_AlarmInfo = ""; +// m_AlarmCfgWrapper->m_WindOverLimitAlarm->m_IsAlarm = false; +// } +// } +// +// m_AlarmCfgWrapper->m_WindOverLimitJudgeFlag++; +// if (m_AlarmCfgWrapper->m_WindOverLimitJudgeFlag > 700)m_AlarmCfgWrapper->m_WindOverLimitJudgeFlag = 700; +// +// CheckInternalAlarm(); +// //关闭补气阀 +// +// SignalState ss; +// SignalService::GetInstance().GetSignalState(ss); +// if (m_RunCfg->m_PrintAutoRenewalGas) { +// if (BaseCtrl::IsStart()|| BaseCtrl::IsPause()) { +// if (m_Client->IsComConnected()) +// { +// if (ss.m_PrintAirRenewalEnable) +// { +// if (!m_State.shieldMonitorPrintPressure) { +// m_Client->SetShieldMonitorPrintPressure(true); +// } +// if (!ss.m_PrintAirRenewalTrigger) { +// SignalService::GetInstance().SetPrintAirRenewalTrigger(true); +// } +// } +// else { +// if (m_State.shieldMonitorPrintPressure) { +// m_Client->SetShieldMonitorPrintPressure(false); +// } +// if (ss.m_PrintAirRenewalTrigger) { +// SignalService::GetInstance().SetPrintAirRenewalTrigger(false); +// } +// } +// } +// else { +// if (m_State.shieldMonitorPrintPressure) { +// m_Client->SetShieldMonitorPrintPressure(false); +// } +// if (ss.m_PrintAirRenewalTrigger) { +// SignalService::GetInstance().SetPrintAirRenewalTrigger(false); +// } +// } +// } +// else { +// if (m_State.shieldMonitorPrintPressure) { +// m_Client->SetShieldMonitorPrintPressure(false); +// } +// if (ss.m_PrintAirRenewalTrigger) { +// SignalService::GetInstance().SetPrintAirRenewalTrigger(false); +// } +// } +// } +// else { +// if (m_State.shieldMonitorPrintPressure) { +// m_Client->SetShieldMonitorPrintPressure(false); +// } +// if (ss.m_PrintAirRenewalTrigger) { +// SignalService::GetInstance().SetPrintAirRenewalTrigger(false); +// } +// } +// +//} void XTPurifier::CheckInternalAlarm() { @@ -611,11 +611,11 @@ void XTPurifier::CheckInternalAlarm() if (hasAlarm) { m_AlarmCfgWrapper->m_PurifierInternalAlarm->m_AlarmInfo = ss.str().c_str(); - SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierInternalAlarm, true); + //SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierInternalAlarm, true); } else { m_AlarmCfgWrapper->m_PurifierInternalAlarm->m_AlarmInfo = ""; - SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierInternalAlarm, false); + //SignalService::GetInstance().SetAlarm(m_AlarmCfgWrapper->m_PurifierInternalAlarm, false); } } @@ -1693,7 +1693,7 @@ bool XTPurifier::IsCoverWindSlow() void XTPurifier::ResetSlowWind() { - m_Client->SetCoverWind(false); + /*m_Client->SetCoverWind(false);*/ } @@ -1704,16 +1704,16 @@ bool XTPurifier::IsCoverWindSet() return stat.isCoverWind; } -void XTPurifier::ResetSlwoWindSignal(bool precover) -{ - if (precover) - { - m_Client->SetWindSlowFinishSignal(false); - } - else { - m_Client->SetWindResumeFinishSignal(false); - } -} +//void XTPurifier::ResetSlwoWindSignal(bool precover) +//{ +// if (precover) +// { +// m_Client->SetWindSlowFinishSignal(false); +// } +// else { +// m_Client->SetWindResumeFinishSignal(false); +// } +//} int XTPurifier::GetFilterUseTime() { diff --git a/PrintC/Purifier/XTPurifier.h b/PrintC/Purifier/XTPurifier.h index 8638204..f0c50c1 100644 --- a/PrintC/Purifier/XTPurifier.h +++ b/PrintC/Purifier/XTPurifier.h @@ -15,13 +15,13 @@ public: void StartAutoDeoxygen(); void StopAutoDeoxygen(); bool IsAutoDeoxygen(); - void AutoCtrl(); + void AutoCtrl(){} void AutoCtrlWhenPrint(); void AutoCtrlWhenDoorOpen(); void AutoCtrlWhenStanby(); void HandlePrintFinish(); void HandlePrintStop(); - bool HandleReadyPrint(bool startAfterPause, unsigned int& deoxytime); + bool HandleReadyPrint(bool startAfterPause, unsigned int& deoxytime) { return false; } PurifierClient* GetClient() { return m_Client; } double GetWindValue(double dvalue); @@ -36,7 +36,7 @@ public: virtual bool IsCoverWindRecover(); virtual bool IsCoverWindSlow(); virtual void ResetSlowWind(); - virtual void ResetSlwoWindSignal(bool precover); + //virtual void ResetSlwoWindSignal(bool precover); float GetFanFreq() { return m_State.fanFreq; } void CheckInternalAlarm(); diff --git a/PrintC/UI/Controller.cpp b/PrintC/UI/Controller.cpp index 013db8a..5cf92bc 100644 --- a/PrintC/UI/Controller.cpp +++ b/PrintC/UI/Controller.cpp @@ -48,16 +48,16 @@ bool Controller::Init() { switch (m_MachineCfg->m_PulifierType) { case PurifierTypeCfg::XT: { - m_Purifier = new XTPurifier(m_ScannerCtrl); + m_Purifier = new XTPurifier(nullptr); }break; case PurifierTypeCfg::HBD_PURIFIER_3: { - m_Purifier = new HBD3Purifier(m_ScannerCtrl); + m_Purifier = new HBD3Purifier(/*m_ScannerCtrl*/nullptr); }break; case PurifierTypeCfg::G4_PURIFIER: { - m_Purifier = new G4Purifier(m_ScannerCtrl); + m_Purifier = new G4Purifier(/*m_ScannerCtrl*/nullptr); }break; default: - m_Purifier = new XTPurifier(m_ScannerCtrl); + m_Purifier = new XTPurifier(/*m_ScannerCtrl*/nullptr); } m_Purifier->Init(); diff --git a/PrintC/output/Release/log/2024.hbd b/PrintC/output/Release/log/2024.hbd index 54ceacc54a7b1629991324cd2ef196e265868ffc..e9c05d62f7f82fdec5fdf97a3ea9ebbad6910a6b 100644 GIT binary patch delta 16526 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 z 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�U26A_9P&;AiT+JS?mvY=N4+hXGY%%F~88A z)>+OEzxYQWlZDOERWoXM9tik2b{0*qwJo(0PnE|osREWG)Lf%7LX|IW3mR)7$HsgO za9^K_6LXNh-G7W8Na+}eqGHNqu-T=g=pEnqVEvGs860=wSlwT$N$uL&q`yjC0o(Mj zCi$HNf#AwMpq$szGgTlj&Ihfsq#d>!T|3ZEpj_(?v|bfEXea?u%xi#54OfJ;(pLuUAEuexqt~HbNv3Lw}PZm(MsKcqj5TMTCHqPV&O+w$z{EpI6rg2`xgA0j4U6Hptz2#tRs0k_C4N&7a?zYX? z`W!l^+SOOxG_6|d9@D~2zO-UN8~J2wR;TZqgm&hhzv~&`qaZdi_voWMxXZVO>KcvR zMC|ZOynoED5z$$D%9Q&Zv|!7h#qX~6;%DV#;Zw&3tC&Zqjh8JImdTE)%{j@bky2(R zr#j*)f5ITm5_XLN+C@g9U4%>jL6ts=IR7^L2rb@OPRQb<0#M^Bl6bQc=i;a?dP9g< z>OBa|*IB2*De&hs?o{V60So{5zG7sGmGu!CC4U)LRu8;5&1i`?5_rd$2YRdYQpmgP zh^RqVAK=rJj3l_Rx!(K!T$7ZPI4;~Z=M)4If=Gh2W}fjfa#xcXfA>D{-(oKyrE-8j zbGZQq7)?Fs!NB_L0YWChKEHNB(?uzHkI=3+Z;Nlbd3l^!$7w~2xwO8C*4cWV=~J z7J28x+Rb^~HN7aZS?7pTXE23eQxmPD5P$Ss*i5dHYulqV?P>h_AvbYJq$DmK%`|9@T0 z98>8jRvUmY+op`)Wa)xeBOCF1v{UQ8gEYrAfcWIc>M@PxTr||m#Jq?r70@%eB(b$U z5AjsSa^^Z}w+gyN8c7|rTiRFezSl-pI@LvhXLM;n;PmtLxa2V{I}$6iPy7YOU&HE^ zd@bgkkco_!9ufs$+WVO<`mbobLw{YzpN2Y!B{UPDjaqG;!pIgidnHjK6&g|>H&RCQ zWe6s-hjwGvEu~1?7=Y7HjuIi6Y-g*4 z?Mwt1`2eYV|9Kz5(J_uWA(pbRQkOWAql_ecBw7hJ}6apSpJ(JyRc$dU{(TQhC%c3aErIaDSr4JR>B{1=PAmE1bWn6-4KOzfB%_F zXX;86GQw~^HGl-pl=9Av6=q;ao*<6LxH4i&+o4!C+)mp5>-l-qlY-rNQ63rEwxBZ*wc7L7f?w9!E&|P1z###d zD=UTr#_KM)R`P+=h6PV%-oC@^k6Z%XM&s!KP#>IR4{9 zR*34Pmt@WCVaQahj7TSB8;# z`yrKw&VNzsTC(HcTVLhJw6no%%g;)8X}3<$ogXz z+~HpMp~h0;{cy-KJ~%maG-VonY5vHg~VDrrWmWeMsgHqCiYtimBp-ot^-j5cDK$$|&B! zSagE*Mj|3i*bs+91b)?{{9t1_sZxXs>wk~JhR&F7W?_MJ@0+FV`C&mY4(=`gpS*xF zh^+)1h*Al%w&mJ=nmzfO?MHSYMQ}(r0AldV;~D*eN*7az6RyM&a&l?&Ov;C?KrI?ATaVyn&h&51Zq=2!ArJl&19_(;WNd}j}!vmH|gyxlFhud1A=l8(jsfj<`hdEXjV3Pjo=B@UpJco0)$RPcWMcqQF^ zIZEv%gu<0hTSDP;la_sWzx8|1I)757q47jA@MSa%o{B`NIic|Kl^?n?9deWC^v}m? zjg@Dk?_mDv`jIZWIsB*YU$AwVt~;Wzf$H`G>`aZ=jE@mhR_`hb^eOUdlfuQC7oO82 z&mv0>_=g!e+?gi!UPku~Mb$;|?q@Z=DbnS^+uOS3JYQ6UWQBx7S;dQ}nt%D8Yf1|E zSvd>GR5&aGW*BHdZRL}SS=shwhPhW-^$b)DOsS%UjdNbevaSG+8*A0rRVze%R0d0I zirj^gL~td&jCz@GeDCDKo_+c6ovwX?VcI=@ZqPPcK7R;4R%#Idf1r`+Eo2d~>OLfc zc?7Co+i8~*e;|8pVtHDcmw&-l=MvG)Sj2S>bs4F0l26fcr_xGq3)>acc&;}3(&ZSM zYprgyhsnZ_^@MKc4#nfQe5hVD@7WQl$fUZnnELACB-4tT3%U%mvOaLbh*T<$vApfSlY}=~5B0 zp(PmGvP&xZ->uefvS&>>OYH+{hKjc@M`#Oj;1ov&GXLDIX)1;0klOZ6| z8XMfmL9NhTcHY;cM7$=qYy^Wp=QvEox3|$X(_-u0x__k5Ky5OuI)2M9y{?xJ0nTsp z0fOrMz+6an=Op}!*FzlsqL7myJdIs1xj{Yxn(4^WsSFJ4jepKdda$6AreK26k@QaI zk8$f$3dCmap3-<#c9heC_}U7^+DDgt*C${VRT`A96*{_Macg6IfS+Z6sB#&G0$vdl zdt%T3hHirsdJkOWNjj1Y@~GZ3)~FCiBYz>_lwPyHDGw{qj+~UJcaCm2 zV+#roTf_xMPN;mNB@i|AnYDdr)<#asF%60U5{SwD|@>dhyfyln4kapq>~0Nao%ku8bKzVR(i zft~p`7k{QVqi)*XK}tF&e5?|)kD$B1rE+e=uO#ZM0DqPP`pCeV8#jqs<;qE^XMP*U z*yKaQ=|(T)zj`o-nqJS_@0#JT;F{j6387WqA7IT7QLj}pVMmu~;4f!gJ;TtRx?tojRLKw=MBmu-!>&2S zCqP#_Nd=a|u(S|J`u=gd-Dbn=pnes!`R~>U|CW6e1GN?y%AEMt984yU$ICTcFGRzV z>wjZn*p1ypsJ6FUwE{lRKqP87`d&hvB(|+4-bKt1 zn7iG;iA)Z&ct5tXZ7t>AUxSeb*!+lZ91l))DGBWf*_L>FN0%ctz*9w>sEbYc5q*KV za$L5pp_&bmEDA%n^=?pR(@)U_JyHb@JQzB zygf?q*sa3RL4Ir$c(r=>QVHqKjacW(Sm1Kn^XNF1=6LXK|3=sIqMps7K!znC{<;F( zDjA0;?zTr0ps}uqJYmR1V&lRnuYZF89_JwI0CF`BX=DQOL`NSob)5e`bwY76p}d)( zkXUf<)uHC{2zhP_>l`EOQr9jrug77Lcu5E23S+IjG-g)M*7{X$FbuByqI^N1s6{JH z+eKDcgQ``jo{Qh9wS;|RD#IOZnlW+qIus{;`L<#>s?S#^g9JSJ8&Fb(;D1V-5hc|J zEml>5p6`9ewSMqa)pZ*?-;dWR;K*K&G{QvIgU=TxP9BCg?^5}CmA_Xlkg3e*sEgT! z=rNDq$N~uHJ%I__`gzhyrHsWe-{fe> zVsF`}-uJ}5BrL!OqWyFjpnqTP1f5v%VD=(DA!ti=hIA_p`0am=M^tZJkhFkS^{NiT zVn2Xb&jK;;6e?(+b?1^fsk-ik9D6XOVD@y3%k7uQFwVS2Z{}7GNSyIFVfL#T;aIP+ zl^*Aery-l%vF>Yec0DU~-!S_tkb9vO0OL-|n$@^!%w!`b*(&e2Nq=h7y!^niO+ami zoU4Nz58eATTG-~xw`!!9!Fv77^xap1+K9|*xpOXJjZO|v=fRgg>yAKt?L5G+czMeq zz@_#YWBt_ac5R1MEcaESrW?n?3DV9jD@Um37gP$r%sLEnLes;ITkcvR|C_WPPgY6J z26OH1hEr@R|33^BD}T>$p=O`^q@256-R#5ackf5lFtGV^%*S(>%ZvB8`wcmoz#R66 z=jM*W7n$;Sk`=qY?BwOw9k_d6*~Zl6MI;7d8S~jmg=IFW1g~F$+2!;aCiQ~ilL|NB z+roU4Iz9nl*jpa>`21ta?&UoTAB3=0_fyrjgR06=i-r``%YRz6Vng#x#qxc#-{tJI z+*GTE5QdDN-l_hjG^r|?I;>JcEaRsPDhDg!<&~Xru)k&Nzp@Q7z*5Vv*YmpHOtj#x>L=srurw>-QmwSX@ni>C~Ir;1)-5`Xk6@NQXJPJ(>XSX|cqZRB$3#CeJM}Q_;fb zb?|U_ReEg-7&Bqnk4VQ#>~lgZa#AMaHF~`@4&5qEdVfsYkdez@ciIv;it!f)Qp(l> zk%&F;bB7Td)-H~s-lmbK@%cRtGSOCV43WYONeE>9H9(W16}06L;ccKbR5eCBLyz^B zmdn!>z!5o=PrmPgn~f=9wt-n^F3f;EOkElg5$RZAV2FoLwm{Q6KKa#;d5;V zb8mDS)@Ex52~H1&dtLPmbo8N+-cq9t_D(?VR5Tk>f8^JGf5o@pKMFKiFoO*dMIq@O zti?K6|E_E#<74qdTtm?sGyg3|h(W4wFMe?n?SH#{=u~=^JfQ_y)g@B4WWvpMy0X3t z`P_Z=kpu7eU~#a>FFfrRnw0YKnWlNnKDf>rW?}u+vcepc1`l2JqPa9+QPi$Q>sHAA z`iG3=7*Z0@i}qFp?V|^wau0Fc`)B2P$`$`NwN(Xrsy|1{rH})*pQkZk#Fx9q!C{pe ztACcbV=RVO_<&;73Pl^Mg`qupr>B<^$cD0}T&6^tg=Nv=z#39jx`NOCW+7(M;d8n7 zu{ZK`A&hU94t=kApqIFq_9N7#yxHgH#|MebW&)HS8X(SLBKDxB=CJx>Xw?gvVmm_mo!^uI`bDuq## z0kFhj1!~`?MY9#8U^K||+3C>?XovJkq=x?CDCJ(7JM3N1rrtio-kl(}grxSWXk_!H zDuU-?Mh}hN$=+49?lRT@!2Hxmx5T@N9r7GvsoJ<8Sg?6rjQQ`xn=+2G%mLXPQ-2I! z8~lS6i4LD>`BKjDllI0tsZx^OL5&RInt7hI#+s|5vc*sb22N|H32VPV7+mWTlB?Y_ zp%0&5TYXz2oeP%aTrIpS$gvhcgIoNf;G{Z+=*-X%qmI2l(%D?u`gK3lvQEsq0-2*5 ze)*-Bgh02QZK|AHL7(tf%u2$ltUb`-g5kv__=V2lV8kP7D^)CEgBM6 znmK3vjiOR;^0l|DcVZlH3umqIy|TzH8@ov;@O_=AYyN{h5vVt!WUvc8vwx2(bGqZ_ zJM60v#bewzL_P&!$CIgHuo`pU@{&zF#xcljzS>8@2b}q|az9iHRWVukvy*fT%uTc* zd?@#Mu>iLKV|N7m4GTQVC#J>W;UHNNHJf_})qPMxr(#=@otafp=ySmuEvm!>uIgME zK6Vd2Ce5+R<|+a92pxB3&VLhL+M|Samv`+BH-!Ov0EGXjQZ`^DdTA9fSU&;`({6=gGpTCbpeVHQewsWdwuYNw^~5JYE)!$(kL$>Cpf)X%E4jK8PEjUPX25*4 z92U^a(^K^Q0N0Z**#5nZZ!A`yR{X?2lLCxvJOxHP`JF0^NtZP$KPe8AqznOrfm_PurifierInternalAlarm, true); 注释掉了 \ No newline at end of file diff --git a/PrintS/Communication/BaseClient.cpp b/PrintS/Communication/BaseClient.cpp index 03dd701..11ea487 100644 --- a/PrintS/Communication/BaseClient.cpp +++ b/PrintS/Communication/BaseClient.cpp @@ -148,7 +148,7 @@ void BaseClient::SendToClients(WRITETYPE type,const string& addKey) { ++baseItem; } LeaveCriticalSection(&m_ValueCS); - ClientWrapper::Instance()->PushAllClient(new WriteData(type, its)); + ClientWrapper::Instance()->PushAllClient(WriteData(type, its)); //auto cfgItem = m_alarmCfgMp.begin(); diff --git a/PrintS/Communication/PurifierClient.cpp b/PrintS/Communication/PurifierClient.cpp index b3d270e..ae92c3a 100644 --- a/PrintS/Communication/PurifierClient.cpp +++ b/PrintS/Communication/PurifierClient.cpp @@ -10,6 +10,9 @@ PurifierClient::PurifierClient(CommunicationCfg* pconfig) :S7Client(pconfig) m_RunCfg = ConfigManager::GetInstance()->GetRunCfg(); m_ExtCfg = ConfigManager::GetInstance()->GetExtCfg(); m_AlarmCfgWrapper = ConfigManager::GetInstance()->GetAlarmCfg(); + + + } @@ -979,4 +982,116 @@ void PurifierClient::SetUnLock() m_RTCommands.push(pcommand); LeaveCriticalSection(&m_RtcCS); -} \ No newline at end of file +} + + +//void PurifierClient::SetParamByKey(const ReadData& rd) { +// if (rd.nameKey == "SetDedust") { +// SetDedust((bool)atoi(rd.strValue.c_str())); +// } +// else if (rd.nameKey == "SetBlowBack") { +// SetBlowBack((bool)atoi(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetFilterDiscard") { +// SetFilterDiscard((bool)atoi(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetFilterClean") { +// SetFilterClean((bool)atoi(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetHopperClean") { +// SetHopperClean((bool)atoi(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetPurify") { +// SetPurify((bool)atoi(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetBoxClean") { +// SetBoxClean((bool)atoi(rd.strValue.data())); +// } +// else if (rd.nameKey == "ResetFilterTime") { +// ResetFilterTime(); +// } +// else if (rd.nameKey == "ClearHopperAlarm") { +// ClearHopperAlarm(); +// } +// +// else if (rd.nameKey == "SetBoxPressureUpLimit") { +// SetBoxPressureUpLimit((float)atof(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetBoxPressureDownLimit") { +// SetBoxPressureDownLimit((float)atof(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetMidPressureDifAlarmValue") { +// SetMidPressureDifAlarmValue((float)atof(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetHighPressureDifAlarmValue") { +// SetHighPressureDifAlarmValue((float)atof(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetPrintCleanOxygenSetValue") { +// SetPrintCleanOxygenSetValue((float)atof(rd.strValue.data())); +// } +// +// else if (rd.nameKey == "SetWindValue") { +// SetWindValue((float)atof(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetMaxWindValue") { +// SetMaxWindValue((float)atof(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetPrintOxygenDownSetValue") { +// SetPrintOxygenDownSetValue((float)atof(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetPrintOxygenUpSetValue") { +// SetPrintOxygenUpSetValue((float)atof(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetfilterCleanOxygenSetValue") { +// SetfilterCleanOxygenSetValue((float)atof(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetMidTempHighSetValue") { +// SetMidTempHighSetValue((float)atof(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetMidTempUltraSetValue") { +// SetMidTempUltraSetValue((float)atof(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetHighTempHighSetValue") { +// SetHighTempHighSetValue((float)atof(rd.strValue.data())); +// } +// +// else if (rd.nameKey == "SetHopperCleanRemind") { +// SetHopperCleanRemind((unsigned short)atoi(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetBoxWashDelayTime") { +// SetBoxWashDelayTime((unsigned short)atoi(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetDedustingWashDelayTime") { +// SetDedustingWashDelayTime((unsigned short)atoi(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetPressureRangeUpLimit") { +// SetPressureRangeUpLimit((float)atof(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetPressureRangeDownLimit") { +// SetPressureRangeDownLimit((float)atof(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetOxygenAlarmValue") { +// SetOxygenAlarmValue((float)atof(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetUseArgon") { +// SetUseArgon((bool)atoi(rd.strValue.data())); +// } +// +// else if (rd.nameKey == "SetBlowBackBlowTime") { +// SetBlowBackBlowTime((unsigned short)atoi(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetBlowBackSetTimes") { +// SetBlowBackSetTimes((unsigned short)atoi(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetProtectionPressureSetTime") { +// SetProtectionPressureSetTime((unsigned short)atoi(rd.strValue.data())); +// } +// else if (rd.nameKey == "SetUnLock") { +// SetUnLock(); +// } +// else { +// printf("%s key do not exist...", rd.nameKey.data()); +// } +// +// +//} \ No newline at end of file diff --git a/PrintS/Communication/PurifierClient.h b/PrintS/Communication/PurifierClient.h index 1295f23..729158a 100644 --- a/PrintS/Communication/PurifierClient.h +++ b/PrintS/Communication/PurifierClient.h @@ -573,14 +573,20 @@ public: #pragma pack() + class PurifierClient :public S7Client { + //typedef std::function SetParamFun; + //m_funMap["SetDedust"] = std::bind(&PurifierClient::SetDedustFun,this, std::placeholders::_1, std::placeholders::_2); + //unordered_map m_funMap; public: PurifierClient(CommunicationCfg* pconfig); ~PurifierClient(); void GetStat(Purifierstat_XT& stat); - + + void SetParamByKey(const ReadData& rd); + void SetDedust(bool bvalue); //除尘启动或停止 void SetBlowBack(bool bvalue); //反吹启动或停止 void SetFilterDiscard(bool bvalue); //滤芯废处理 @@ -590,12 +596,51 @@ public: void SetBoxClean(bool bvalue); void ResetFilterTime(); void ClearHopperAlarm(); + //void SetDedustFun(const string& val, DATATYPE type) { + // if (iBOOL == type) SetDedust(atoi(val.c_str())); + //} + //void SetBlowBackFun(const string& val, DATATYPE type) { + // if (iBOOL == type) SetBlowBack(atoi(val.c_str())); + //} + //void SetFilterDiscardFun(const string& val, DATATYPE type) { + // if (iBOOL == type) SetFilterDiscard(atoi(val.c_str())); + //} + //void SetFilterCleanFun(const string& val, DATATYPE type) { + // if (iBOOL == type) SetFilterClean(atoi(val.c_str())); + //} + //void SetHopperCleanFun(const string& val, DATATYPE type) { + // if (iBOOL == type) SetHopperClean(atoi(val.c_str())); + //} + //void SetPurifyFun(const string& val, DATATYPE type) { + // if (iBOOL == type) SetPurify(atoi(val.c_str())); + //} + //void SetBoxCleanFun(const string& val, DATATYPE type) { + // if (iBOOL == type) SetBoxClean(atoi(val.c_str())); + //} + void SetBoxPressureUpLimit(float fvalue); //箱体压力上限设定 void SetBoxPressureDownLimit(float fvalue); //箱体压力下限设定 void SetMidPressureDifAlarmValue(float fvalue); //中效过滤器压差报警设 void SetHighPressureDifAlarmValue(float fvalue); //高效过滤器压差报警设 void SetPrintCleanOxygenSetValue(float fvalue); //打印室氧清洗氧含量设 + //void SetBoxPressureUpLimitFun(const string& val, DATATYPE type) { + // if (iFLOAT == type) SetBoxPressureUpLimit(atof(val.c_str())); + //} + //void SetBoxPressureDownLimitFun(const string& val, DATATYPE type) { + // if (iFLOAT == type) SetBoxPressureDownLimit(atof(val.c_str())); + //} + //void SetMidPressureDifAlarmValueFun(const string& val, DATATYPE type) { + // if (iFLOAT == type) SetMidPressureDifAlarmValue(atof(val.c_str())); + //} + //void SetHighPressureDifAlarmValueFun(const string& val, DATATYPE type) { + // if (iFLOAT == type) SetHighPressureDifAlarmValue(atof(val.c_str())); + //} + //void SetPrintCleanOxygenSetValueFun(const string& val, DATATYPE type) { + // if (iFLOAT == type) SetPrintCleanOxygenSetValue(atof(val.c_str())); + //} + + void SetWindValue(float fvalue); //风速设定 void SetMaxWindValue(float fvalue); //最大风速设定 void SetPrintOxygenDownSetValue(float fvalue); //打印氧下限设定 @@ -604,6 +649,31 @@ public: void SetMidTempHighSetValue(float fvalue); //中效高温报警设定 void SetMidTempUltraSetValue(float fvalue); //中效超高温报警设定 void SetHighTempHighSetValue(float fvalue); //高效高温报警设定 + //void SetWindValueFun(const string& val, DATATYPE type) { + // if (iFLOAT == type) SetWindValue(atof(val.c_str())); + //} + //void SetMaxWindValueFun(const string& val, DATATYPE type) { + // if (iFLOAT == type) SetMaxWindValue(atof(val.c_str())); + //} + //void SetPrintOxygenDownSetValueFun(const string& val, DATATYPE type) { + // if (iFLOAT == type) SetPrintOxygenDownSetValue(atof(val.c_str())); + //} + //void SetPrintOxygenUpSetValueFun(const string& val, DATATYPE type) { + // if (iFLOAT == type) SetPrintOxygenUpSetValue(atof(val.c_str())); + //} + //void SetfilterCleanOxygenSetValueFun(const string& val, DATATYPE type) { + // if (iFLOAT == type) SetfilterCleanOxygenSetValue(atof(val.c_str())); + //} + //void SetMidTempHighSetValueFun(const string& val, DATATYPE type) { + // if (iFLOAT == type) SetMidTempHighSetValue(atof(val.c_str())); + //} + //void SetMidTempUltraSetValueFun(const string& val, DATATYPE type) { + // if (iFLOAT == type) SetMidTempUltraSetValue(atof(val.c_str())); + //} + //void SetHighTempHighSetValueFun(const string& val, DATATYPE type) { + // if (iFLOAT == type) SetHighTempHighSetValue(atof(val.c_str())); + //} + // void SetHighTempUltraSetValue(float fvalue); //高效超高温报警设定 void SetHopperCleanRemind(unsigned short value); //清理料斗提醒设定 void SetBoxWashDelayTime(unsigned short value); @@ -648,8 +718,11 @@ protected: RunCfg* m_RunCfg; ExtCfg* m_ExtCfg; AlarmCfgWrapper* m_AlarmCfgWrapper; + + private: + static const unsigned int READ_ITEM_COUNT = 2; static const unsigned int READ_ITEM_COUNT2 = 6; }; diff --git a/PrintS/Controller/Controller.cpp b/PrintS/Controller/Controller.cpp index 4ca0af3..064ed79 100644 --- a/PrintS/Controller/Controller.cpp +++ b/PrintS/Controller/Controller.cpp @@ -63,7 +63,6 @@ void Controller::Init(){ m_CoreCommunication->Init(); m_CoreCommunication->Startup(); - m_SignalStateWrapper = new SignalStateWrapper(); m_Machine = ConfigManager::GetInstance()->GetMachine(); m_Machine->InitSignal(m_SignalStateWrapper, m_CoreCommunication); diff --git a/PrintS/DataManage/ClientInfo.cpp b/PrintS/DataManage/ClientInfo.cpp index 447c4c4..c39151a 100644 --- a/PrintS/DataManage/ClientInfo.cpp +++ b/PrintS/DataManage/ClientInfo.cpp @@ -40,11 +40,11 @@ void ClientWrapper::Clear() { } -void ClientWrapper::PushAllClient(WriteData* wd) { +void ClientWrapper::PushAllClient(const WriteData& wd) { std::lock_guard lck(m_mux); auto client = m_clientList.begin(); while (client != m_clientList.end()) { - (*client)->PushMsg(wd); + (*client)->PushMsg(new WriteData(wd)); ++client; } } diff --git a/PrintS/DataManage/ClientInfo.h b/PrintS/DataManage/ClientInfo.h index 650b854..8245010 100644 --- a/PrintS/DataManage/ClientInfo.h +++ b/PrintS/DataManage/ClientInfo.h @@ -23,6 +23,13 @@ public: ~ClientInfo() { m_readQuitFlag = true; m_writeQuitFlag = true; + + std::lock_guard lock(m_msgLock); + auto lst = m_msgList.begin(); + while (lst != m_msgList.end()) { + delete (*lst); + } + m_msgList.clear(); } bool IsConnect() { @@ -73,7 +80,7 @@ public: void Clear(); //清空客户端 - void PushAllClient(WriteData* wd); + void PushAllClient(const WriteData& wd); bool IsExist(ClientInfo* ci); diff --git a/PrintS/DataManage/DataHandle.cpp b/PrintS/DataManage/DataHandle.cpp index 551de7e..267b594 100644 --- a/PrintS/DataManage/DataHandle.cpp +++ b/PrintS/DataManage/DataHandle.cpp @@ -51,7 +51,7 @@ void DataHandle::Init() { m_testTd = std::thread ([this] { static float i = 10.12540f; while (!m_testFlag) { - ClientWrapper::Instance()->PushAllClient(new WriteData(RESPOND, { {string("hello"),std::to_string(i),iFLOAT}})); + ClientWrapper::Instance()->PushAllClient(WriteData(RESPOND, { {string("hello"),std::to_string(i),iFLOAT}})); std::this_thread::sleep_for(std::chrono::seconds(1)); } }); @@ -213,6 +213,8 @@ void DataHandle::DataCallBackHandle(const ReadData& msg) { case RESETELEC: m_controller->m_ComServer->m_PowerMeterClient->ResetElec(); + case PURIFIERPARAMW: + m_controller->m_Purifier->SetParam(msg); default: break; diff --git a/PrintS/DataManage/RWData.h b/PrintS/DataManage/RWData.h index 4f8a6c1..eba8c2b 100644 --- a/PrintS/DataManage/RWData.h +++ b/PrintS/DataManage/RWData.h @@ -44,8 +44,11 @@ enum READTYPE { IOSIGNAL, //io 信号 RESETELEC, //PowerMeterClient + PURIFIERPARAMW, //净化器参数写入 LAYERDATAREQ, //layer数据请求 + + }; enum DATATYPE { @@ -114,6 +117,7 @@ enum WRITETYPE { SCANNERPOWERPARAM, PURIFIERPARAM, //冷水机参数 + }; struct Item { diff --git a/PrintS/DataManage/StreamServer.cpp b/PrintS/DataManage/StreamServer.cpp index d27ba69..d9876b7 100644 --- a/PrintS/DataManage/StreamServer.cpp +++ b/PrintS/DataManage/StreamServer.cpp @@ -21,7 +21,6 @@ StreamServer::~StreamServer() { //回复后连接中断 ::grpc::Status StreamServer::Simple(::grpc::ServerContext* context, const ::stream::RequestInfo* request, ::stream::LayerData* response) { - //MetaData::Layer* pData = nullptr; ReadData readData; readData.dataType = (READTYPE)(request->datatype()); readData.nameKey = request->namekey(); diff --git a/PrintS/PLC/CoreCommunication.cpp b/PrintS/PLC/CoreCommunication.cpp index 4d166c1..05a8516 100644 --- a/PrintS/PLC/CoreCommunication.cpp +++ b/PrintS/PLC/CoreCommunication.cpp @@ -427,7 +427,7 @@ void CoreCommunication::SendProc() { its.emplace_back(Item{ param->first,valStr,dataType}); ++param; } - ClientWrapper::Instance()->PushAllClient(new WriteData(SYSPARAMDATA, its)); + ClientWrapper::Instance()->PushAllClient(WriteData(SYSPARAMDATA, its)); valStr = ""; its.clear(); @@ -439,7 +439,7 @@ void CoreCommunication::SendProc() { } ++ioItem; } - ClientWrapper::Instance()->PushAllClient(new WriteData(SYSPARAMDATA, its)); + ClientWrapper::Instance()->PushAllClient(WriteData(SYSPARAMDATA, its)); int count = 10; while(!m_sendTdExitFlag && count--) { diff --git a/PrintS/Purifier/BasePurifier.h b/PrintS/Purifier/BasePurifier.h index 2fb5f64..5ab4e8c 100644 --- a/PrintS/Purifier/BasePurifier.h +++ b/PrintS/Purifier/BasePurifier.h @@ -53,6 +53,9 @@ public: virtual void DrawFinishReportRel() {} virtual int GetFilterUseTime() { return 0; } virtual void SendToClients() {} + + virtual void SetParam(const ReadData& msg) {} + private: static DWORD WINAPI WorkProc(BasePurifier* _this); void WorkRun(); diff --git a/PrintS/Purifier/G4Purifier.h b/PrintS/Purifier/G4Purifier.h index 6d2ad5a..db077e3 100644 --- a/PrintS/Purifier/G4Purifier.h +++ b/PrintS/Purifier/G4Purifier.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include "XTPurifier.h" class G4Purifier :public XTPurifier { @@ -7,10 +7,10 @@ public: ~G4Purifier(); void Init(); - void DrawUI(); + //void DrawUI(); void CheckInternalAlarm(); bool IsLockPurifier(); private: - void DrawUserUI(); - void DrawAdminUI(); + //void DrawUserUI(); + //void DrawAdminUI(); }; diff --git a/PrintS/Purifier/XTPurifier.cpp b/PrintS/Purifier/XTPurifier.cpp index 8dff94a..1ff0f00 100644 --- a/PrintS/Purifier/XTPurifier.cpp +++ b/PrintS/Purifier/XTPurifier.cpp @@ -1748,4 +1748,134 @@ void XTPurifier::DrawFinishReportRel() void XTPurifier::SendToClients() { m_Client->SendToClients(PURIFIERPARAM); +} + + +void XTPurifier::SetParam(const ReadData& rd) { + + if (rd.nameKey == "SetDedust") { + m_Client->SetDedust((bool)atoi(rd.strValue.c_str())); + } + else if (rd.nameKey == "SetBlowBack") { + m_Client->SetBlowBack((bool)atoi(rd.strValue.data())); + } + else if (rd.nameKey == "SetFilterDiscard") { + m_Client->SetFilterDiscard((bool)atoi(rd.strValue.data())); + } + else if (rd.nameKey == "SetFilterClean") { + m_Client->SetFilterClean((bool)atoi(rd.strValue.data())); + } + else if (rd.nameKey == "SetHopperClean") { + m_Client->SetHopperClean((bool)atoi(rd.strValue.data())); + } + else if (rd.nameKey == "SetPurify") { + m_Client->SetPurify((bool)atoi(rd.strValue.data())); + } + else if (rd.nameKey == "SetBoxClean") { + m_Client->SetBoxClean((bool)atoi(rd.strValue.data())); + } + else if (rd.nameKey == "ResetFilterTime") { + m_Client->ResetFilterTime(); + } + else if (rd.nameKey == "ClearHopperAlarm") { + m_Client->ClearHopperAlarm(); + } + else if (rd.nameKey == "SetBoxPressureUpLimit") { + m_Client->SetBoxPressureUpLimit((float)atof(rd.strValue.data())); + } + else if (rd.nameKey == "SetBoxPressureDownLimit") { + m_Client->SetBoxPressureDownLimit((float)atof(rd.strValue.data())); + } + else if (rd.nameKey == "SetMidPressureDifAlarmValue") { + m_Client->SetMidPressureDifAlarmValue((float)atof(rd.strValue.data())); + } + else if (rd.nameKey == "SetHighPressureDifAlarmValue") { + m_Client->SetHighPressureDifAlarmValue((float)atof(rd.strValue.data())); + } + else if (rd.nameKey == "SetPrintCleanOxygenSetValue") { + m_Client->SetPrintCleanOxygenSetValue((float)atof(rd.strValue.data())); + } + else if (rd.nameKey == "SetWindValue") { + m_Client->SetWindValue((float)atof(rd.strValue.data())); + } + else if (rd.nameKey == "SetMaxWindValue") { + m_Client->SetMaxWindValue((float)atof(rd.strValue.data())); + } + else if (rd.nameKey == "SetPrintOxygenDownSetValue") { + m_Client->SetPrintOxygenDownSetValue((float)atof(rd.strValue.data())); + } + else if (rd.nameKey == "SetPrintOxygenUpSetValue") { + m_Client->SetPrintOxygenUpSetValue((float)atof(rd.strValue.data())); + } + else if (rd.nameKey == "SetfilterCleanOxygenSetValue") { + m_Client->SetfilterCleanOxygenSetValue((float)atof(rd.strValue.data())); + } + else if (rd.nameKey == "SetMidTempHighSetValue") { + m_Client->SetMidTempHighSetValue((float)atof(rd.strValue.data())); + } + else if (rd.nameKey == "SetMidTempUltraSetValue") { + m_Client->SetMidTempUltraSetValue((float)atof(rd.strValue.data())); + } + else if (rd.nameKey == "SetHighTempHighSetValue") { + m_Client->SetHighTempHighSetValue((float)atof(rd.strValue.data())); + } + + else if (rd.nameKey == "SetHopperCleanRemind") { + m_Client->SetHopperCleanRemind((unsigned short)atoi(rd.strValue.data())); + } + else if (rd.nameKey == "SetBoxWashDelayTime") { + m_Client->SetBoxWashDelayTime((unsigned short)atoi(rd.strValue.data())); + } + else if (rd.nameKey == "SetDedustingWashDelayTime") { + m_Client->SetDedustingWashDelayTime((unsigned short)atoi(rd.strValue.data())); + } + else if (rd.nameKey == "SetPressureRangeUpLimit") { + m_Client->SetPressureRangeUpLimit((float)atof(rd.strValue.data())); + } + else if (rd.nameKey == "SetPressureRangeDownLimit") { + m_Client->SetPressureRangeDownLimit((float)atof(rd.strValue.data())); + } + else if (rd.nameKey == "SetOxygenAlarmValue") { + m_Client->SetOxygenAlarmValue((float)atof(rd.strValue.data())); + } + else if (rd.nameKey == "SetUseArgon") { + m_Client->SetUseArgon((bool)atoi(rd.strValue.data())); + } + + else if (rd.nameKey == "SetBlowBackBlowTime") { + m_Client->SetBlowBackBlowTime((unsigned short)atoi(rd.strValue.data())); + } + else if (rd.nameKey == "SetBlowBackSetTimes") { + m_Client->SetBlowBackSetTimes((unsigned short)atoi(rd.strValue.data())); + } + else if (rd.nameKey == "SetProtectionPressureSetTime") { + m_Client->SetProtectionPressureSetTime((unsigned short)atoi(rd.strValue.data())); + } + else if (rd.nameKey == "SetUnLock") { + m_Client->SetUnLock(); + } + else if (rd.nameKey == "SetCoverWind") { + m_Client->SetCoverWind((bool)atoi(rd.strValue.data())); + } + else if (rd.nameKey == "SetCoverWindOffset") { + m_Client->SetCoverWindOffset((float)atof(rd.strValue.data())); + } + else if (rd.nameKey == "SetWindSlowFinishSignal") { + m_Client->SetWindSlowFinishSignal((bool)atoi(rd.strValue.data())); + } + else if (rd.nameKey == "SetWindResumeFinishSignal") { + m_Client->SetWindResumeFinishSignal((bool)atoi(rd.strValue.data())); + } + else if (rd.nameKey == "SetShieldMonitorPrintPressure") { + m_Client->SetShieldMonitorPrintPressure((bool)atoi(rd.strValue.data())); + } + //else if (rd.nameKey == "SetDeoxygen") { + // //m_Client->SetDeoxygen((bool)atoi(rd.strValue.data())); + //} + + else { + printf("error, key(%s) do not exist...", rd.nameKey.data()); + } + + } \ No newline at end of file diff --git a/PrintS/Purifier/XTPurifier.h b/PrintS/Purifier/XTPurifier.h index d37d367..08881cd 100644 --- a/PrintS/Purifier/XTPurifier.h +++ b/PrintS/Purifier/XTPurifier.h @@ -43,6 +43,9 @@ public: int GetFilterUseTime(); void SendToClients(); + + void SetParam(const ReadData& msg); + private: //void DrawUserUI(); //void DrawAdminUI(); diff --git a/PrintS/output/Release/log/2024.hbd b/PrintS/output/Release/log/2024.hbd index 95ef38d6edb0babaec6d205a173205f49fdb883f..3474a9b6d4ae9ff240631e256af4a1bd3335a24a 100644 GIT binary patch delta 16530 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 J1~NvA#SQ15B+mc< delta 16530 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 JFO&wxCGiH9IYR&d diff --git a/PrintS/说明.txt b/PrintS/说明.txt index b432755..1dc4de4 100644 --- a/PrintS/说明.txt +++ b/PrintS/说明.txt @@ -17,4 +17,6 @@ plcparam 重复code: ArmFrontLimit -ArmBackLimit \ No newline at end of file +ArmBackLimit + +SendToClients 需要修改 \ No newline at end of file