GrpcPrint/PrintS/PLC/CoreCommunication.h

112 lines
2.6 KiB
C++

#pragma once
#include <windows.h>
#include <atlbase.h>
#include "../Communication/Snap7/s7_client.h"
#include <condition_variable>
#include <shared_mutex>
#include <queue>
#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<Command*> m_CycleCommands;
std::mutex m_ReadWriteMutex;
bool m_RunFlag;
bool m_AssisRunFlag;
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;
};