GrpcPrint/PrintS/PLC/CoreCommunication.h

105 lines
2.5 KiB
C
Raw Normal View History

2024-03-19 17:45:12 +08:00
#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"
2024-03-25 13:22:32 +08:00
#include "SysParam.h"
#include "SignalState.h"
#include "AxisState.h"
#include "Axis.h"
#include "EnvState.h"
2024-03-19 17:45:12 +08:00
#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(); };
2024-03-25 13:22:32 +08:00
void SetIOCfgWrapper(IOCfgWrapper* io) { m_IOCfgWrapper = io; }
void SetSysParamWrapper(SysParamWrapper* param) { m_SysParamWrapper = param; }
2024-03-26 10:33:00 +08:00
void SetPLCAxis(PLCAxis* axis) { m_Axis = axis; }
2024-03-25 13:22:32 +08:00
void SetAlarmStateWrapper(SignalStateWrapper* param) { m_AlarmStateWrapper = param; };
2024-03-19 17:45:12 +08:00
//void GetAlarmState(SignalState& alarmState);
//void GetEnvState(EnvState& envState);
2024-03-25 13:22:32 +08:00
void SetAxisRecordWrapper(AxisRecordWrapper* record) { m_AxisrecordWrapper = record; }
2024-03-19 17:45:12 +08:00
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;
2024-03-25 13:22:32 +08:00
IOCfgWrapper* m_IOCfgWrapper;
SysParamWrapper* m_SysParamWrapper;
SignalStateWrapper* m_AlarmStateWrapper;
2024-03-19 17:45:12 +08:00
CoverCfg* m_CoverCfg;
2024-03-25 13:22:32 +08:00
PLCAxis* m_Axis;
AxisRecordWrapper* m_AxisrecordWrapper;
2024-03-19 17:45:12 +08:00
PLCInvoker* m_Invoker;
static const unsigned int READ_INFO_ITEM_COUNT = 6;
static const unsigned int READ_DATA_ITEM_COUNT = 1;
};