184 lines
4.6 KiB
C
Raw Normal View History

2024-04-18 11:59:51 +08:00
#pragma once
#include "../stdafx.h"
#include "Command.h"
#include "../external/SocketHandle/SocketHandle.h"
#include <vector>
#include "Snap7/s7_client.h"
//#include "../config/bean/CommunicationCfg.h"
#include "SerialPort.h"
#include <queue>
#include <list>
#include "ConnectInterface.h"
#include "BaseData.h"
#include <unordered_map>
#include "../config/bean/AlarmCfg.h"
class BaseStat {
public:
BaseStat()
: isConnected(false)
, writeTimeoutFlag(0)
, readTimeoutFlag(0)
{
};
virtual ~BaseStat() {};
public:
bool isConnected; //通讯连接
unsigned int writeTimeoutFlag;
unsigned int readTimeoutFlag;
};
class BaseClient:public IConnect
{
public:
BaseClient();
virtual ~BaseClient();
virtual void Init() = 0;
virtual void Startup();
virtual void Shutdown();
virtual void CtrlStart() { Startup(); };
virtual void CtrlStop() { Shutdown(); };
void SetRunFlag(bool runflag);
virtual bool IsServerConnected() = 0;
virtual bool IsComConnected() { return m_BaseStat.isConnected; }
//void ClearCycleCommand();
//void SendToClients(WRITETYPE type,const string& addKey = "");
void UpdateData(const ReadData& msg);
protected:
virtual void InitCommand() = 0;
virtual unsigned int GetInterval() { return 600; }
static DWORD WINAPI ThreadProc(BaseClient* pclient);
//virtual void RunProc()=0;
//Command* GetSendCycleCommand();
//void UpdateCycleCommands();
virtual void ServerDisconnectProc() {};
virtual void ServerConnectedProc() {};
virtual void WriteSuccessProc(int wlength, unsigned char* buffer, Command* pcommand) {};
virtual void ReadSuccessProc(int rlength, unsigned char* buffer, Command* pcommand) {};
virtual void WriteTimeoutProc(Command* pcommand) {};
virtual void ReadTimeoutProc(Command* pcommand) {};
virtual void VerifyFaild(Command* pcommand) {};
virtual void CycleBegin() {};
void InsertMp(void* startPtr, size_t count,const string& suff = "");
protected:
HANDLE m_Thread;
queue<Command*> m_RTCommands;
vector<Command*> m_CycleCommands;
CRITICAL_SECTION m_ValueCS;
CRITICAL_SECTION m_RtcCS;
bool m_RunFlag;
//unsigned int m_interval;
//CSocketHandle m_Client;
uint64_t m_LastCycleTickcount;
BaseStat m_BaseStat;
unordered_map<std::string, BaseData*> m_baseMp; //大部分使用这个
unordered_map<std::string, AlarmCfg*> m_alarmCfgMp;
};
class S7Client :public BaseClient
{
public:
S7Client(void* pconfig = nullptr);
virtual ~S7Client();
virtual void Init();
virtual bool IsServerConnected() {
return m_S7Client->Connected;
};
virtual bool IsSignalConnected() {
bool rel = false;
EnterCriticalSection(&m_ValueCS);
rel = m_BaseStat.isConnected;
LeaveCriticalSection(&m_ValueCS);
return rel;
}
//CommunicationCfg* GetConfig() { return m_Config; }
void Shutdown();
//virtual void Startup();
private:
virtual void InitCommand() {}
//virtual void RunProc() {};
//unsigned int GetInterval() { return m_Config->m_Interval; }
protected:
TSnap7Client *m_S7Client;
//CommunicationCfg* m_Config;
int m_WriteTimeout;
int m_ReadTimeout;
word m_LocalTsap;
word m_RemoteTsap;
};
class ComClient :public BaseClient
{
public:
ComClient(void* cfg = nullptr);
virtual ~ComClient();
virtual void Init();
virtual bool IsServerConnected() { return (m_ComClient.IsOpen() == TRUE ? true : false); }
//CommunicationCfg* GetConfig() { return m_Config; }
void Shutdown();
private:
virtual void InitCommand() {}
virtual void InitSerialPort();
//virtual void RunProc();
////unsigned int GetInterval() { return m_Config->m_Interval; }
//virtual void ServerDisconnectProc();
//void WriteSuccessProc(int wlength, unsigned char* buffer, Command* pcommand);
//void WriteTimeoutProc(Command* pcommand);
//void ReadTimeoutProc(Command* pcommand);
//void ReadSuccessProc(int rlength, unsigned char* buffer, Command* pcommand);
protected:
CSerialPort2 m_ComClient;
//CommunicationCfg* m_Config;
int m_Freq;
int m_ReadTimeout;
int m_WriteTimeout;
};
class TcpClient :public BaseClient
{
public:
TcpClient(void* pconfig = nullptr, int freq = 50);
virtual ~TcpClient();
virtual void Init();
virtual bool IsServerConnected() { return (m_Client.IsOpen() == TRUE ? true : false); }
//void Shutdown();
private:
virtual void InitCommand() {}
//virtual void RunProc();
//virtual void ServerDisconnectProc();
//virtual void WriteSuccessProc(int wlength, unsigned char* buffer, Command* pcommand);
//virtual void WriteTimeoutProc(Command* pcommand);
//virtual void ReadTimeoutProc(Command* pcommand);
//virtual void ReadSuccessProc(int rlength, unsigned char* buffer, Command* pcommand);
protected:
CSocketHandle m_Client;
//CommunicationCfg* m_Config;
int m_Freq;
int m_ReadTimeout;
int m_WriteTimeout;
};