#pragma once
|
#include <string>
|
#include "AlarmMonitor.h"
|
#include "MMSystem.h"
|
#pragma comment(lib,"winmm")
|
|
|
typedef std::function<void(void* pFrom, int)> ONPLCSTATECHANGED;
|
typedef std::function<void(void* pFrom, int)> ONPLCMONITORDATA;
|
typedef std::function<void(void* pFrom, CAlarm*, int)> ONALARM;
|
typedef struct _PLCListener
|
{
|
ONPLCSTATECHANGED onStateChanged;
|
ONPLCMONITORDATA onMonitorData;
|
ONALARM onAlarm;
|
} PLCListener;
|
|
typedef struct _MONITOR
|
{
|
int id;
|
int beginAddr;
|
int readLen;
|
MC::SOFT_COMPONENT softComponent;
|
char* szRecvBuffer;
|
HANDLE hEvent;
|
ULONGLONG readCount;
|
} MONITOR;
|
|
enum class PLCSTATE
|
{
|
READY = 0,
|
CONNECTING,
|
CONNECTED,
|
DISCONNECTED
|
};
|
|
class CPLC
|
{
|
public:
|
CPLC();
|
CPLC(const char* pszName, const char* pszIp, const unsigned int port);
|
~CPLC();
|
|
public:
|
void setWorkDir(const char* pszDir);
|
void init();
|
void term();
|
void sendBroadcast(CComponent* pSender, CIntent* pIntent);
|
void onRecvBroadcast(CComponent* pSender, CIntent* pIntent);
|
bool isConnected();
|
void connect();
|
void setActionInterval(unsigned int nInterval);
|
std::string& getName();
|
std::string& getIp();
|
unsigned int getPort();
|
bool isMute();
|
void addComponent(CComponent* pComponent);
|
CComponent* getComponent(const char* pszName);
|
CAlarmMonitor* getAlarmMonitor();
|
unsigned onMonitor();
|
void OnTimer(UINT nTimerid);
|
int addMonitor(int id, int beginAddr, int endAddr, MC::SOFT_COMPONENT softComponent, char* pszRecvBuffer);
|
int readWord(MC::SOFT_COMPONENT softComponent, unsigned int addr, ONREAD funOnRead);
|
int readData(MC::SOFT_COMPONENT softComponent, unsigned int addr, unsigned int nReadLen, ONREADDATA funOnReadData);
|
int writeWord(MC::SOFT_COMPONENT softComponent, unsigned int addr, int value, ONWRITE funOnWrite);
|
int writeDWord(MC::SOFT_COMPONENT softComponent, unsigned int addr, int value, ONWRITE funOnWrite);
|
int writeBit(MC::SOFT_COMPONENT softComponent, unsigned int addr, BOOL bValue, ONWRITE funOnWrite);
|
int writeData(MC::SOFT_COMPONENT softComponent, unsigned int addr, const char* pszData, unsigned int length, ONWRITE funOnWrite);
|
|
|
public:
|
HANDLE m_hTimeEvent;
|
|
private:
|
void setState(PLCSTATE state);
|
void monitorReadData(MONITOR& monitor);
|
CString& dataToHexString(const char* pData, const int size, CString& strOut);
|
|
private:
|
std::string m_strWorkDir;
|
std::string m_strName;
|
std::string m_strIp;
|
unsigned int m_nPort;
|
IMcChannel* m_pChannel;
|
PLCSTATE m_state;
|
PLCListener m_listener;
|
unsigned int m_nActionInterval;
|
unsigned int m_nUnHeartBeat;
|
std::vector<CComponent*> m_components;
|
|
private:
|
std::vector<MONITOR> m_monitors;
|
HANDLE m_hMcMonitorStop;
|
HANDLE m_hMcMonitorThreadHandle;
|
unsigned m_mcMonitorThrdaddr;
|
MMRESULT m_nTimerId;
|
bool m_bMute;
|
};
|