| | |
| | | #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 |
| | | { |
| | |
| | | ~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 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; |
| | | }; |
| | | |