GrpcPrint/PrintS/PLC/CoreCommunication.h
2024-03-19 17:45:12 +08:00

105 lines
2.5 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();
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_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;
static const unsigned int READ_INFO_ITEM_COUNT = 6;
static const unsigned int READ_DATA_ITEM_COUNT = 1;
};