From bfe14e41fa5b07771d78af4511ba18d706bc23cc Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期一, 28 七月 2025 17:07:52 +0800
Subject: [PATCH] 1.Spooling Config功能EAP模拟测试;

---
 SourceCode/Bond/BoounionPLC/PLC.h |   99 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 99 insertions(+), 0 deletions(-)

diff --git a/SourceCode/Bond/BoounionPLC/PLC.h b/SourceCode/Bond/BoounionPLC/PLC.h
index 7922f2f..e69e54c 100644
--- a/SourceCode/Bond/BoounionPLC/PLC.h
+++ b/SourceCode/Bond/BoounionPLC/PLC.h
@@ -1,5 +1,40 @@
 #pragma once
 #include <string>
+#include "AlarmMonitor.h"
+#include "MMSystem.h"
+#pragma comment(lib,"winmm")
+
+
+#define ALARM_MONITOR		_T("警告信息")
+
+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
 {
@@ -9,13 +44,77 @@
 	~CPLC();
 
 public:
+	void setListener(PLCListener& listener);
+	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);
+	void readPLCDataRegularly();
+
+public:
+	int getVelocityRatio();
+	double getTackTime();
+	int getDayShiftCapacity();
+	int getNightShiftCapacity();
+
+public:
+	HANDLE m_hTimeEvent;
 
 private:
+	inline void Lock() { EnterCriticalSection(&m_criticalSection); }
+	inline void Unlock() { LeaveCriticalSection(&m_criticalSection); }
+	void setState(PLCSTATE state);
+	void monitorReadData(MONITOR& monitor);
+	CString& dataToHexString(const char* pData, const int size, CString& strOut);
+	int onMonitorData(MONITOR& monitor);
+
+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;
+	char* m_pPlcData;
+
+private:
+	CRITICAL_SECTION m_criticalSection;
+	std::vector<MONITOR> m_monitors;
+	HANDLE m_hMcMonitorStop;
+	HANDLE m_hMcMonitorThreadHandle;
+	unsigned m_mcMonitorThrdaddr;
+	MMRESULT m_nTimerId;
+	bool m_bMute;
+
+private:
+	int m_nVelocityRatio;		// 速度比
+	double m_dTactTime;			// 周期时间
+	int m_nDayShiftCapacity;	// 白班产能
+	int m_nNightShiftCapacity;	// 夜班产能
+	bool m_bBlBtnsStates[7];	// PLC View按钮状态
 };
 

--
Gitblit v1.9.3