#pragma once #include #include #include "../Communication/Snap7/s7_client.h" #include #include #include #include "../Communication/S7Command.h" #include "../Communication/BaseClient.h" #include "../config/bean/CommunicationCfg.h" #include "../config/bean/IOCfg.h" #include "SysParam.h" #include "SignalState.h" #include "AxisState.h" #include "Axis.h" #include "EnvState.h" #include "Command/PLCReceiver.h" #include "command/PLCInvoker.h" #include "../config/bean/CoverCfg.h" using namespace std; class CoreCommunication :public IConnect,public PLCReveiver { public: CoreCommunication(); ~CoreCommunication(); void Init(); void InitCommand(); //void AddCmd(Command* cmd); void Startup(); void Shutdown(); virtual void CtrlStart() { Startup(); }; virtual void CtrlStop() { Shutdown(); }; void SetIOCfgWrapper(IOCfgWrapper* io) { m_IOCfgWrapper = io; } void SetSysParamWrapper(SysParamWrapper* param) { m_SysParamWrapper = param; } void SetPLCAxis(PLCAxis* axis) { m_Axis = axis; } void SetAlarmStateWrapper(SignalStateWrapper* param) { m_AlarmStateWrapper = param; }; void GetAlarmState(SignalState& alarmState); void GetEnvState(EnvState& envState); void SetAxisRecordWrapper(AxisRecordWrapper* record) { m_AxisrecordWrapper = record; } virtual bool IsServerConnected() { return m_S7Client->Connected; }; bool IsConnect() { return m_BaseStat.isConnected && m_S7Client->Connected; } private: static DWORD WINAPI ReadProc(CoreCommunication* _this); void ReadRun(); static DWORD WINAPI WriteProc(CoreCommunication* _this); void WriteRun(); static DWORD WINAPI AssistProc(CoreCommunication* _this); void AssistRun(); //static void ProcReadPLC(void *pobject, Command* pcommand); //static void ProcReadPLCData(void *pobject, Command* pcommand); Command* GetSendCycleCommand(); void UpdateCycleCommands(); void SendProc(); public: BaseStat m_BaseStat; bool m_IsSmart; std::shared_mutex m_ValueMtx; private: HANDLE m_ReadThread; HANDLE m_WriteThread; HANDLE m_AssistThread; vector m_CycleCommands; std::mutex m_ReadWriteMutex; bool m_RunFlag; bool m_AssistRunFlag; TSnap7Client *m_S7Client; CommunicationCfg* m_Config; IOCfgWrapper* m_IOCfgWrapper; SysParamWrapper* m_SysParamWrapper; SignalStateWrapper* m_AlarmStateWrapper; CoverCfg* m_CoverCfg; PLCAxis* m_Axis; AxisRecordWrapper* m_AxisrecordWrapper; PLCInvoker* m_Invoker; bool m_sendTdExitFlag; //线程退出标记 std::thread m_sendTd; //定时发送客户端线程 static const unsigned int READ_INFO_ITEM_COUNT = 6; static const unsigned int READ_DATA_ITEM_COUNT = 1; };