From 65802dfbbaf135e97a2415e3306aabfd2af49c69 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期四, 05 六月 2025 16:41:04 +0800
Subject: [PATCH] 1.Link Signal数据获取,解释。

---
 SourceCode/Bond/Servo/CPageGraph2.cpp |    5 +++++
 SourceCode/Bond/Servo/CEquipment.cpp  |   29 +++++++++++++++++++++++++++--
 SourceCode/Bond/Servo/CEquipment.h    |   10 +++++++++-
 SourceCode/Bond/Servo/ServoCommo.h    |    2 ++
 4 files changed, 43 insertions(+), 3 deletions(-)

diff --git a/SourceCode/Bond/Servo/CEquipment.cpp b/SourceCode/Bond/Servo/CEquipment.cpp
index 03f4b5d..43067d2 100644
--- a/SourceCode/Bond/Servo/CEquipment.cpp
+++ b/SourceCode/Bond/Servo/CEquipment.cpp
@@ -35,6 +35,7 @@
 		m_bLocalAlarm = FALSE;
 		m_bAutoRecipeChange = FALSE;
 		m_bVCREnable[0] = FALSE;
+		memset(m_bLinkSignal, 0, sizeof(m_bLinkSignal));
 		m_pCclink = nullptr;
 		m_nBaseAlarmId = 0;
 		m_pArm = nullptr;
@@ -363,9 +364,19 @@
 		}
 		*/
 
-		// 以下解释和处理数据
+		// 连接信号解释和保存
 		BOOL bFlag;
-		int index = 0x540;
+		int index = 0;
+		for (int i = 0; i < 8; i++) {
+			m_bLinkSignal[i][SIGNAL_UPSTREAM_INLINE] = isBitOn(pszData, size, index + 0);
+			m_bLinkSignal[i][SIGNAL_UPSTREAM_TROUBLE] = isBitOn(pszData, size, index + 1);
+			m_bLinkSignal[i][SIGNAL_SEND_ABLE] = isBitOn(pszData, size, index + 3);
+			index += 0x40;
+		}		 
+
+
+		// 其它信号及响应
+		index = 0x540;
 
 
 		// alive
@@ -582,6 +593,20 @@
 		return m_bVCREnable[index];
 	}
 
+	BOOL CEquipment::isLinkSignalOn(unsigned int path, unsigned int signal)
+	{
+		if (path >= PATH_MAX) return FALSE;
+		if (signal >= SIGNAL_MAX) return FALSE;
+		return m_bLinkSignal[path][signal];
+	}
+
+	void CEquipment::setLinkSignal(unsigned int path, unsigned int signal, BOOL bOn)
+	{
+		if (path >= PATH_MAX) return;
+		if (signal >= SIGNAL_MAX) return;
+		m_bLinkSignal[path][signal] = bOn;
+	}
+
 	int CEquipment::onStepEvent(CStep* pStep, int code)
 	{
 		if (code == STEP_EVENT_READDATA) {
diff --git a/SourceCode/Bond/Servo/CEquipment.h b/SourceCode/Bond/Servo/CEquipment.h
index a005fba..7b2b24e 100644
--- a/SourceCode/Bond/Servo/CEquipment.h
+++ b/SourceCode/Bond/Servo/CEquipment.h
@@ -38,7 +38,10 @@
 
 
 namespace SERVO {
-#define SLOT_MAX		12
+#define SLOT_MAX				12
+#define SIGNAL_UPSTREAM_INLINE	0
+#define SIGNAL_UPSTREAM_TROUBLE	1
+#define SIGNAL_SEND_ABLE		2
 
 	typedef std::function<void(void* pEiuipment, BOOL bAlive)> ONALIVE;
 	typedef std::function<void(void* pEiuipment, int code)> ONDATACHANGED;
@@ -187,6 +190,10 @@
 		BOOL isLocalAlarm();
 		BOOL isAutoRecipeChange();
 		BOOL isVCREnable(unsigned int index);
+		BOOL isLinkSignalOn(unsigned int path, unsigned int signal);
+
+		// 只在模拟测试时使用的函数,用于模拟信号
+		void setLinkSignal(unsigned int path, unsigned int signal, BOOL bOn);
 
 	protected:
 		inline void Lock() { EnterCriticalSection(&m_criticalSection); }
@@ -231,6 +238,7 @@
 		BOOL m_bLocalAlarm;
 		BOOL m_bAutoRecipeChange;
 		BOOL m_bVCREnable[VCR_MAX];
+		BOOL m_bLinkSignal[PATH_MAX][SIGNAL_MAX];
 
 	protected:
 		CCCLinkIEControl* m_pCclink;
diff --git a/SourceCode/Bond/Servo/CPageGraph2.cpp b/SourceCode/Bond/Servo/CPageGraph2.cpp
index 6f06274..d2a356e 100644
--- a/SourceCode/Bond/Servo/CPageGraph2.cpp
+++ b/SourceCode/Bond/Servo/CPageGraph2.cpp
@@ -128,6 +128,11 @@
 
 		CHMPropertyDlg dlg(pEquipment->getName().c_str(), 658, 788);
 
+		CEquipmentPage1* pPage1 = new CEquipmentPage1();
+		pPage1->setEquipment(pEquipment);
+		pPage1->Create(IDD_PAGE_EQUIPMENT1);
+		dlg.addPage(pPage1, "Link Signal");
+
 		if (_strcmpi(pEquipment->getClassName(), "CLoadPort") == 0) {
 			CPagePortProperty* pPageA = new CPagePortProperty();
 			pPageA->setLoadPort((SERVO::CLoadPort*)pEquipment);
diff --git a/SourceCode/Bond/Servo/ServoCommo.h b/SourceCode/Bond/Servo/ServoCommo.h
index acfd20a..e80ba90 100644
--- a/SourceCode/Bond/Servo/ServoCommo.h
+++ b/SourceCode/Bond/Servo/ServoCommo.h
@@ -5,6 +5,8 @@
 #define BLOCK_BUFFER_MAX			1024
 #define ALIVE_TIMEOUT				15
 #define VCR_MAX						1
+#define PATH_MAX					8
+#define SIGNAL_MAX					8
 #define ARM_ALL						99
 
 	enum class PortType {

--
Gitblit v1.9.3