From f354ac6647f9d763c0119717c202e684b261d8ae Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期六, 29 三月 2025 17:26:42 +0800
Subject: [PATCH] 1.修改逻辑,CStep不在设置和调用Listener,而是直接调用成员变量m_pEquipment的虚函数onStepEvent来传递数据。

---
 SourceCode/Bond/Servo/CEquipment.cpp |   29 ++++++++++++++++++++++++++++-
 1 files changed, 28 insertions(+), 1 deletions(-)

diff --git a/SourceCode/Bond/Servo/CEquipment.cpp b/SourceCode/Bond/Servo/CEquipment.cpp
index 4a771d2..85f5a0b 100644
--- a/SourceCode/Bond/Servo/CEquipment.cpp
+++ b/SourceCode/Bond/Servo/CEquipment.cpp
@@ -23,7 +23,7 @@
 
 	CEquipment::CEquipment() : m_nID(0), m_strName(""), m_strDescription(""), m_station(0, 255)
 	{
-		m_listener = { nullptr, nullptr, nullptr };
+		m_listener = { nullptr, nullptr, nullptr, nullptr };
 		m_alive = {FALSE, 0, FALSE};
 		m_bCimState = FALSE;
 		m_bUpstreamInline = FALSE;
@@ -65,6 +65,7 @@
 	{
 		m_listener.onAlive = listener.onAlive;
 		m_listener.onCimStateChanged = listener.onCimStateChanged;
+		m_listener.onAlarm = listener.onAlarm;
 		m_listener.onDataChanged = listener.onDataChanged;
 	}
 
@@ -485,6 +486,26 @@
 		return m_bVCREnable[index];
 	}
 
+	int CEquipment::onStepEvent(CStep* pStep, int code)
+	{
+		if (code == STEP_EVENT_READDATA) {
+			if (isAlarmStep(pStep)) {
+				SERVO::CEqAlarmStep* pEqAlarmStep = (SERVO::CEqAlarmStep*)pStep;
+				int state = pEqAlarmStep->getAlarmState();
+				ASSERT(state == 0 || state == 1);
+				if (m_listener.onAlarm != nullptr) {
+					m_listener.onAlarm(this, state, 
+						pEqAlarmStep->getAlarmId(),
+						pEqAlarmStep->getUnitId(),
+						pEqAlarmStep->getAlarmLevel());
+				}
+			}
+		}
+
+
+		return 0;
+	}
+
 	CPin* CEquipment::addPin(PinType type, char* pszName)
 	{
 		// 不允许名字添加重复的pin
@@ -715,4 +736,10 @@
 
 		return pGlass;
 	}
+
+	bool CEquipment::isAlarmStep(SERVO::CStep* pStep)
+	{
+		return CToolUnits::startsWith(pStep->getName(), STEP_ALARM_START);
+	}
+
 }

--
Gitblit v1.9.3