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/CReadStep.cpp                    |   11 -
 SourceCode/Bond/Servo/CEqCassetteTransferStateStep.cpp |    2 
 SourceCode/Bond/Servo/CWriteStep.cpp                   |    6 
 SourceCode/Bond/Servo/CMaster.h                        |   17 +-
 SourceCode/Bond/Servo/Model.cpp                        |  103 +++++++----------
 SourceCode/Bond/Servo/CEqProcessStep.cpp               |    6 
 SourceCode/Bond/Servo/CStep.h                          |    8 -
 SourceCode/Bond/Servo/AlarmDlg.cpp                     |   28 ----
 SourceCode/Bond/Servo/CEquipment.cpp                   |   29 ++++
 SourceCode/Bond/Servo/Model.h                          |    1 
 SourceCode/Bond/Servo/CMaster.cpp                      |  105 ++++-------------
 SourceCode/Bond/Servo/CEquipment.h                     |    4 
 SourceCode/Bond/Servo/CStep.cpp                        |    6 -
 13 files changed, 121 insertions(+), 205 deletions(-)

diff --git a/SourceCode/Bond/Servo/AlarmDlg.cpp b/SourceCode/Bond/Servo/AlarmDlg.cpp
index c1d8ecd..4a483e8 100644
--- a/SourceCode/Bond/Servo/AlarmDlg.cpp
+++ b/SourceCode/Bond/Servo/AlarmDlg.cpp
@@ -55,34 +55,6 @@
 
 			if (RX_CODE_ALARM_SET == code) {
 				UpdatePageData();
-
-
-				// 閫氱煡璁惧鐘舵��
-				/*
-				SERVO::CEqAlarmStep* pStep = nullptr;
-				if (pAny->getPtrValue("ptr", (void*&)pStep)) {
-					if (pStep != nullptr) {
-						// 鑾峰彇 AlarmManager 鍗曚緥
-						AlarmManager& alarmManager = AlarmManager::getInstance();
-
-						// 浠� pStep 鑾峰彇闇�瑕佺殑鍙傛暟锛屽亣璁捐繖浜涘�兼槸浠� pStep 涓幏鍙栫殑
-						AlarmData alarmData;
-						alarmData.nId = pStep->getAlarmId();
-						alarmData.nSeverityLevel = pStep->getAlarmLevel();
-						alarmData.nDeviceId = pStep->getEquipment()->getID();
-						alarmData.nUnitId = pStep->getUnitId();
-						alarmData.strDeviceName = alarmManager.getDeviceNameById(alarmData.nDeviceId);
-						alarmData.strUnitName = alarmManager.getUnitNameById(alarmData.nDeviceId, alarmData.nUnitId);
-						const AlarmInfo* pAlarmInfo = alarmManager.getAlarmInfoByID(pStep->getAlarmId());
-						alarmData.strDescription = pAlarmInfo != nullptr ? pAlarmInfo->strAlarmText : "";
-						if (pStep->getAlarmState() == 1) {
-							alarmData.strStartTime = getCurrentTimeString();
-							alarmData.strEndTime = "";
-							InsertAlarmData(&m_listCtrl, alarmData);
-						}
-					}
-				}
-				*/
 			}
 			else if (RX_CODE_ALARM_CLEAR == code) {
 				UpdatePageData();
diff --git a/SourceCode/Bond/Servo/CEqCassetteTransferStateStep.cpp b/SourceCode/Bond/Servo/CEqCassetteTransferStateStep.cpp
index 365da4a..22c85a7 100644
--- a/SourceCode/Bond/Servo/CEqCassetteTransferStateStep.cpp
+++ b/SourceCode/Bond/Servo/CEqCassetteTransferStateStep.cpp
@@ -239,7 +239,7 @@
 		case CASSETTE_MAPPING_USE:
 			strDescription = _T("mapping use");
 			break;
-		case CASSETTE_MAPPING_USE:
+		case CASSETTE_MAPPING_NOT_USE:
 			strDescription = _T("mapping not use");
 			break;
 		default:
diff --git a/SourceCode/Bond/Servo/CEqProcessStep.cpp b/SourceCode/Bond/Servo/CEqProcessStep.cpp
index b988af8..4f08edc 100644
--- a/SourceCode/Bond/Servo/CEqProcessStep.cpp
+++ b/SourceCode/Bond/Servo/CEqProcessStep.cpp
@@ -3,6 +3,7 @@
 #include "CEqProcessStep.h"
 #include "Log.h"
 #include "ToolUnits.h"
+#include "CEquipment.h"
 
 
 namespace SERVO {
@@ -94,8 +95,9 @@
 			index += 20;
 		}
 
-		if (m_nCurrentGroup == m_nTotalGroup && m_listener.onEvent != nullptr) {
-			m_listener.onEvent(this, STEP_EVENT_PROCESS_DATA, nullptr);
+		if (m_nCurrentGroup == m_nTotalGroup) {
+			ASSERT(m_pEquipment);
+			m_pEquipment->onStepEvent(this, STEP_EVENT_PROCESS_DATA);
 		}
 
 
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);
+	}
+
 }
diff --git a/SourceCode/Bond/Servo/CEquipment.h b/SourceCode/Bond/Servo/CEquipment.h
index f95070a..407b505 100644
--- a/SourceCode/Bond/Servo/CEquipment.h
+++ b/SourceCode/Bond/Servo/CEquipment.h
@@ -29,10 +29,12 @@
 
 	typedef std::function<void(void* pEiuipment, BOOL bAlive)> ONALIVE;
 	typedef std::function<void(void* pEiuipment, int code)> ONDATACHANGED;
+	typedef std::function<void(void* pEiuipment, int state, int alarmId, int unitId, int level)> ONALARM;
 	typedef struct _EquipmentListener
 	{
 		ONALIVE				onAlive;
 		ONALIVE				onCimStateChanged;
+		ONALARM				onAlarm;
 		ONDATACHANGED		onDataChanged;
 	} EquipmentListener;
 
@@ -89,6 +91,7 @@
 		virtual void onTimer(UINT nTimerid);
 		virtual void serialize(CArchive& ar);
 		virtual void onReceiveLBData(const char* pszData, size_t size);
+		virtual int onStepEvent(CStep* pStep, int code);
 		virtual CPin* addPin(PinType type, char* pszName);
 		CPin* getPin(char* pszName);
 		std::vector<CPin*>& CEquipment::getInputPins();
@@ -100,6 +103,7 @@
 		void getGlassList(std::list<CGlass*>& list);
 		CGlass* getFrontGlass();
 		BOOL removeClass(CGlass* pGlass);
+		bool isAlarmStep(SERVO::CStep* pStep);
 
 	// 以下为从CC-Link读取到的Bit标志位检测函数
 	public:
diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index 24dfac0..fff1ab0 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -6,7 +6,6 @@
 #define ADD_EQ_CASSETTE_TRANSFER_STATE_STEP(name,ws,index,psd) {				\
 	CEqCassetteTransferStateStep* pStep = new CEqCassetteTransferStateStep();	\
 	pStep->setName(name);														\
-	pStep->setListener(listener);												\
 	pStep->setWriteSignalDev(ws);												\
 	pStep->setPortStatusDev(psd);												\
 	if (pEquipment->addStep(index, pStep) != 0) {								\
@@ -41,21 +40,12 @@
 	{
 		m_listener.onEqAlive = listener.onEqAlive;
 		m_listener.onEqCimStateChanged = listener.onEqCimStateChanged;
-		m_listener.onEqStepEvent = listener.onEqStepEvent;
+		m_listener.onEqAlarm = listener.onEqAlarm;
 	}
 
 	int CMaster::init()
 	{
 		LOGI("<Master>正在初始化...");
-
-
-		StepListener listener;
-		listener.onEvent = [&](void* pStep, int code, void* pData) -> void {
-			TRACE("<CEquipment>onEvent<%d, 0x%x>.\n", code, pData);
-			if (m_listener.onEqStepEvent != nullptr) {
-				m_listener.onEqStepEvent((CStep*)pStep, code, pData);
-			}
-		};
 
 
 		// 	cclink
@@ -85,17 +75,17 @@
 
 
 		// 初始化添加各子设备
-		addLoadPort(0, listener);
-		addLoadPort(1, listener);
-		addLoadPort(2, listener);
-		addLoadPort(3, listener);
-		addFliper(listener);
-		addVacuumBake(listener);
-		addAligner(listener);
-		addEFEM(listener);
-		addBonder(0, listener);
-		addBonder(1, listener);
-		addBakeCooling(listener);
+		addLoadPort(0);
+		addLoadPort(1);
+		addLoadPort(2);
+		addLoadPort(3);
+		addFliper();
+		addVacuumBake();
+		addAligner();
+		addEFEM();
+		addBonder(0);
+		addBonder(1);
+		addBakeCooling();
 		connectEquipments();
 
 		
@@ -139,6 +129,12 @@
 				m_listener.onEqCimStateChanged(this, p, bOn);
 			}
 		};
+		listener.onAlarm = [&](void* pEquipment, int state, int alarmId, int unitId, int level) -> void {
+			CEquipment* p = (CEquipment*)pEquipment;
+			if (m_listener.onEqAlarm != nullptr) {
+				m_listener.onEqAlarm(this, p, state, alarmId, unitId, level);
+			}
+		};
 		listener.onDataChanged = [&](void* pEquipment, int code) -> void {
 			m_bDataModify = TRUE;
 		};
@@ -167,7 +163,7 @@
 	/* 添加LoadPort1
 	 * index -- 0~3
 	 */
-	int CMaster::addLoadPort(int index, StepListener& listener)
+	int CMaster::addLoadPort(int index)
 	{
 		ASSERT(index == 0 || index == 1 || index == 2 || index == 3);
 		char szName[64];
@@ -185,7 +181,7 @@
 		return 0;
 	}
 
-	int CMaster::addFliper(StepListener& listener)
+	int CMaster::addFliper()
 	{
 		CFliper* pEquipment = new CFliper();
 		pEquipment->setID(EQ_ID_FLIPER);
@@ -202,7 +198,7 @@
 		return 0;
 	}
 
-	int CMaster::addVacuumBake(StepListener& listener)
+	int CMaster::addVacuumBake()
 	{
 		CVacuumBake* pEquipment = new CVacuumBake();
 		pEquipment->setID(EQ_ID_VACUUMBAKE);
@@ -219,7 +215,7 @@
 		return 0;
 	}
 
-	int CMaster::addAligner(StepListener& listener)
+	int CMaster::addAligner()
 	{
 		CAligner* pEquipment = new CAligner();
 		pEquipment->setID(EQ_ID_ALIGNER);
@@ -236,7 +232,7 @@
 		return 0;
 	}
 
-	int CMaster::addEFEM(StepListener& listener)
+	int CMaster::addEFEM()
 	{
 		CEFEM* pEquipment = new CEFEM();
 		pEquipment->setID(EQ_ID_EFEM);
@@ -252,7 +248,6 @@
 		{
 			CEqModeStep* pStep = new CEqModeStep();
 			pStep->setName(STEP_MODE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x30);
 			pStep->setModeDev(0x4a8c);
 			if (pEquipment->addStep(0x360, pStep) != 0) {
@@ -262,7 +257,6 @@
 		{
 			CEqStatusStep* pStep = new CEqStatusStep();
 			pStep->setName(STEP_STATUS);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x31);
 			pStep->setStatusDev(0x4a68);
 			if (pEquipment->addStep(0x361, pStep) != 0) {
@@ -272,7 +266,6 @@
 		{
 			CEqAlarmStep* pStep = new CEqAlarmStep();
 			pStep->setName(STEP_ALARM_BLOCK1);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x32);
 			pStep->setAlarmDev(0x4c1d);
 			if (pEquipment->addStep(0x362, pStep) != 0) {
@@ -282,7 +275,6 @@
 		{
 			CEqAlarmStep* pStep = new CEqAlarmStep();
 			pStep->setName(STEP_ALARM_BLOCK2);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x33);
 			pStep->setAlarmDev(0x4c4a);
 			if (pEquipment->addStep(0x363, pStep) != 0) {
@@ -292,7 +284,6 @@
 		{
 			CEqAlarmStep* pStep = new CEqAlarmStep();
 			pStep->setName(STEP_ALARM_BLOCK3);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x34);
 			pStep->setAlarmDev(0x4c77);
 			if (pEquipment->addStep(0x364, pStep) != 0) {
@@ -302,7 +293,6 @@
 		{
 			CEqAlarmStep* pStep = new CEqAlarmStep();
 			pStep->setName(STEP_ALARM_BLOCK4);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x35);
 			pStep->setAlarmDev(0x4ca4);
 			if (pEquipment->addStep(0x365, pStep) != 0) {
@@ -312,7 +302,6 @@
 		{
 			CEqAlarmStep* pStep = new CEqAlarmStep();
 			pStep->setName(STEP_ALARM_BLOCK5);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x36);
 			pStep->setAlarmDev(0x4cd1);
 			if (pEquipment->addStep(0x366, pStep) != 0) {
@@ -322,7 +311,6 @@
 		{
 			CEqProcessStep* pStep = new CEqProcessStep();
 			pStep->setName(STEP_PROCESS);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x37);
 			pStep->setProcessDev(0x5864);
 			if (pEquipment->addStep(0x367, pStep) != 0) {
@@ -332,7 +320,6 @@
 		{
 			CEqCimModeChangeStep* pStep = new CEqCimModeChangeStep();
 			pStep->setName(STEP_CIM_MODE_CHANGE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x50);
 			pStep->setCimModeDev(0x15);
 			if (pEquipment->addStep(0x350, pStep) != 0) {
@@ -342,7 +329,6 @@
 		{
 			CEqCimMessageCmdStep* pStep = new CEqCimMessageCmdStep();
 			pStep->setName(STEP_CIM_MESSAGE_CMD);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x51);
 			pStep->setCimMessageDev(0x0);
 			if (pEquipment->addStep(0x351, pStep) != 0) {
@@ -352,7 +338,6 @@
 		{
 			CEqCimMessageClearStep* pStep = new CEqCimMessageClearStep();
 			pStep->setName(STEP_CIM_MESSAGE_CLEAR);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x52);
 			pStep->setClearCimMessageDev(0x13);
 			if (pEquipment->addStep(0x352, pStep) != 0) {
@@ -362,7 +347,6 @@
 		{
 			CEqDateTimeSetCmdStep* pStep = new CEqDateTimeSetCmdStep();
 			pStep->setName(STEP_DATETIME_SET_CMD);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x53);
 			pStep->setDateTimeDev(0x16);
 			if (pEquipment->addStep(0x353, pStep) != 0) {
@@ -372,7 +356,6 @@
 		{
 			CEqVCREnableStep* pStep = new CEqVCREnableStep();
 			pStep->setName(STEP_EQ_VCR_ENABLE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x54);
 			pStep->setEqVCRModeDev(0x1F);
 			if (pEquipment->addStep(0x354, pStep) != 0) {
@@ -382,7 +365,6 @@
 		{
 			CEqModeChangeStep* pStep = new CEqModeChangeStep();
 			pStep->setName(STEP_EQ_MODE_CHANGE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x55);
 			pStep->setEqModeDev(0x1E);
 			if (pEquipment->addStep(0x355, pStep) != 0) {
@@ -394,7 +376,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d1f);
 			pStep->setName(STEP_EQ_PORT1_TYPE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x80);
 			if (pEquipment->addStep(0x3e0, pStep) != 0) {
 				delete pStep;
@@ -403,7 +384,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d20);
 			pStep->setName(STEP_EQ_PORT1_MODE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x88);
 			if (pEquipment->addStep(0x3e8, pStep) != 0) {
 				delete pStep;
@@ -412,7 +392,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT32, 0x4d21);
 			pStep->setName(STEP_EQ_PORT1_CASSETTE_TYPE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x90);
 			if (pEquipment->addStep(0x3f0, pStep) != 0) {
 				delete pStep;
@@ -421,7 +400,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d23);
 			pStep->setName(STEP_EQ_PORT1_TRANSFER_MODE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x98);
 			if (pEquipment->addStep(0x3f8, pStep) != 0) {
 				delete pStep;
@@ -430,7 +408,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d24);
 			pStep->setName(STEP_EQ_PORT1_ENABLE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0xa0);
 			if (pEquipment->addStep(0x400, pStep) != 0) {
 				delete pStep;
@@ -439,7 +416,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d25);
 			pStep->setName(STEP_EQ_PORT1_TYPE_ATUO);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0xa8);
 			if (pEquipment->addStep(0x408, pStep) != 0) {
 				delete pStep;
@@ -450,7 +426,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d2f);
 			pStep->setName(STEP_EQ_PORT2_TYPE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x81);
 			if (pEquipment->addStep(0x3e1, pStep) != 0) {
 				delete pStep;
@@ -459,7 +434,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d30);
 			pStep->setName(STEP_EQ_PORT2_MODE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x89);
 			if (pEquipment->addStep(0x3e9, pStep) != 0) {
 				delete pStep;
@@ -468,7 +442,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT32, 0x4d31);
 			pStep->setName(STEP_EQ_PORT2_CASSETTE_TYPE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x91);
 			if (pEquipment->addStep(0x3f1, pStep) != 0) {
 				delete pStep;
@@ -477,7 +450,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d33);
 			pStep->setName(STEP_EQ_PORT2_TRANSFER_MODE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x99);
 			if (pEquipment->addStep(0x3f9, pStep) != 0) {
 				delete pStep;
@@ -486,7 +458,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d34);
 			pStep->setName(STEP_EQ_PORT2_ENABLE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0xa1);
 			if (pEquipment->addStep(0x401, pStep) != 0) {
 				delete pStep;
@@ -495,7 +466,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d35);
 			pStep->setName(STEP_EQ_PORT2_TYPE_ATUO);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0xa9);
 			if (pEquipment->addStep(0x409, pStep) != 0) {
 				delete pStep;
@@ -506,7 +476,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d3f);
 			pStep->setName(STEP_EQ_PORT3_TYPE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x82);
 			if (pEquipment->addStep(0x3e2, pStep) != 0) {
 				delete pStep;
@@ -515,7 +484,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d40);
 			pStep->setName(STEP_EQ_PORT3_MODE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x8a);
 			if (pEquipment->addStep(0x3ea, pStep) != 0) {
 				delete pStep;
@@ -524,7 +492,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT32, 0x4d41);
 			pStep->setName(STEP_EQ_PORT3_CASSETTE_TYPE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x92);
 			if (pEquipment->addStep(0x3f2, pStep) != 0) {
 				delete pStep;
@@ -533,7 +500,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d43);
 			pStep->setName(STEP_EQ_PORT3_TRANSFER_MODE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x9a);
 			if (pEquipment->addStep(0x3fa, pStep) != 0) {
 				delete pStep;
@@ -542,7 +508,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d44);
 			pStep->setName(STEP_EQ_PORT3_ENABLE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0xa2);
 			if (pEquipment->addStep(0x402, pStep) != 0) {
 				delete pStep;
@@ -551,7 +516,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d45);
 			pStep->setName(STEP_EQ_PORT3_TYPE_ATUO);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0xaa);
 			if (pEquipment->addStep(0x40a, pStep) != 0) {
 				delete pStep;
@@ -562,7 +526,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d4f);
 			pStep->setName(STEP_EQ_PORT4_TYPE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x83);
 			if (pEquipment->addStep(0x3e3, pStep) != 0) {
 				delete pStep;
@@ -571,7 +534,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d50);
 			pStep->setName(STEP_EQ_PORT4_MODE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x8b);
 			if (pEquipment->addStep(0x3eb, pStep) != 0) {
 				delete pStep;
@@ -580,7 +542,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT32, 0x4d51);
 			pStep->setName(STEP_EQ_PORT4_CASSETTE_TYPE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x93);
 			if (pEquipment->addStep(0x3f3, pStep) != 0) {
 				delete pStep;
@@ -589,7 +550,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d53);
 			pStep->setName(STEP_EQ_PORT4_TRANSFER_MODE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0x9b);
 			if (pEquipment->addStep(0x3fb, pStep) != 0) {
 				delete pStep;
@@ -598,7 +558,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d54);
 			pStep->setName(STEP_EQ_PORT4_ENABLE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0xa3);
 			if (pEquipment->addStep(0x403, pStep) != 0) {
 				delete pStep;
@@ -607,7 +566,6 @@
 		{
 			CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d55);
 			pStep->setName(STEP_EQ_PORT4_TYPE_ATUO);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(0xab);
 			if (pEquipment->addStep(0x40b, pStep) != 0) {
 				delete pStep;
@@ -674,7 +632,7 @@
 	 * index -- 0, bonder1
 	 * index -- 1, bonder2
 	 */
-	int CMaster::addBonder(int index, StepListener& listener)
+	int CMaster::addBonder(int index)
 	{
 		ASSERT(index == 0 || index == 1);
 		CBonder* pEquipment = new CBonder();
@@ -691,7 +649,6 @@
 		{
 			CEqModeStep* pStep = new CEqModeStep();
 			pStep->setName(STEP_MODE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(index == 0 ? 0x330 : 0x630);
 			pStep->setModeDev(index == 0 ? 0x6a8c : 0x848c);
 			if (pEquipment->addStep(0x360, pStep) != 0) {
@@ -701,7 +658,6 @@
 		{
 			CEqStatusStep* pStep = new CEqStatusStep();
 			pStep->setName(STEP_STATUS);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(index == 0 ? 0x331 : 0x631);
 			pStep->setStatusDev(index == 0 ? 0x6a68 : 0x8a68);
 			if (pEquipment->addStep(0x361, pStep) != 0) {
@@ -711,7 +667,6 @@
 		{
 			CEqAlarmStep* pStep = new CEqAlarmStep();
 			pStep->setName(STEP_ALARM_BLOCK1);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(index == 0 ? 0x332 : 0x632);
 			pStep->setAlarmDev(index == 0 ? 0x6c1d : 0x8c1d);
 			if (pEquipment->addStep(0x362, pStep) != 0) {
@@ -721,7 +676,6 @@
 		{
 			CEqAlarmStep* pStep = new CEqAlarmStep();
 			pStep->setName(STEP_ALARM_BLOCK2);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(index == 0 ? 0x333 : 0x633);
 			pStep->setAlarmDev(index == 0 ? 0x6c4a : 0x8c4a);
 			if (pEquipment->addStep(0x363, pStep) != 0) {
@@ -731,7 +685,6 @@
 		{
 			CEqAlarmStep* pStep = new CEqAlarmStep();
 			pStep->setName(STEP_ALARM_BLOCK3);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(index == 0 ? 0x334 : 0x634);
 			pStep->setAlarmDev(index == 0 ? 0x6c77 : 0x8c77);
 			if (pEquipment->addStep(0x364, pStep) != 0) {
@@ -741,7 +694,6 @@
 		{
 			CEqAlarmStep* pStep = new CEqAlarmStep();
 			pStep->setName(STEP_ALARM_BLOCK4);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(index == 0 ? 0x335 : 0x635);
 			pStep->setAlarmDev(index == 0 ? 0x6ca4 : 0x8ca4);
 			if (pEquipment->addStep(0x365, pStep) != 0) {
@@ -751,7 +703,6 @@
 		{
 			CEqAlarmStep* pStep = new CEqAlarmStep();
 			pStep->setName(STEP_ALARM_BLOCK5);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(index == 0 ? 0x336 : 0x636);
 			pStep->setAlarmDev(index == 0 ? 0x6cd1 : 0x8cd1);
 			if (pEquipment->addStep(0x366, pStep) != 0) {
@@ -761,7 +712,6 @@
 		{
 			CEqProcessStep* pStep = new CEqProcessStep();
 			pStep->setName(STEP_PROCESS);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(index == 0 ? 0x337 : 0x637);
 			pStep->setProcessDev(index == 0 ? 0x7864 : 0x9864);
 			if (pEquipment->addStep(0x367, pStep) != 0) {
@@ -771,7 +721,6 @@
 		{
 			CEqCimModeChangeStep* pStep = new CEqCimModeChangeStep();
 			pStep->setName(STEP_CIM_MODE_CHANGE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(index == 0 ? 0x350 : 0x650);
 			pStep->setCimModeDev(index == 0 ? 0x965 : 0x12b5);
 			if (pEquipment->addStep(0x350, pStep) != 0) {
@@ -781,7 +730,6 @@
 		{
 			CEqCimMessageCmdStep* pStep = new CEqCimMessageCmdStep();
 			pStep->setName(STEP_CIM_MESSAGE_CMD);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(index == 0 ? 0x351 : 0x651);
 			pStep->setCimMessageDev(index == 0 ? 0x950 : 0x12a0);
 			if (pEquipment->addStep(0x351, pStep) != 0) {
@@ -791,7 +739,6 @@
 		{
 			CEqCimMessageClearStep* pStep = new CEqCimMessageClearStep();
 			pStep->setName(STEP_CIM_MESSAGE_CLEAR);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(index == 0 ? 0x352 : 0x652);
 			pStep->setClearCimMessageDev(index == 0 ? 0x963 : 0x12b3);
 			if (pEquipment->addStep(0x352, pStep) != 0) {
@@ -801,7 +748,6 @@
 		{
 			CEqDateTimeSetCmdStep* pStep = new CEqDateTimeSetCmdStep();
 			pStep->setName(STEP_DATETIME_SET_CMD);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(index == 0 ? 0x353 : 0x653);
 			pStep->setDateTimeDev(index == 0 ? 0x966 : 0x12b6);
 			if (pEquipment->addStep(0x353, pStep) != 0) {
@@ -811,7 +757,6 @@
 		{
 			CEqModeChangeStep* pStep = new CEqModeChangeStep();
 			pStep->setName(STEP_EQ_MODE_CHANGE);
-			pStep->setListener(listener);
 			pStep->setWriteSignalDev(index == 0 ? 0x355 : 0x655);
 			pStep->setEqModeDev(index == 0 ? 0x96E : 0x12be);
 			if (pEquipment->addStep(0x355, pStep) != 0) {
@@ -827,7 +772,7 @@
 		return 0;
 	}
 
-	int CMaster::addBakeCooling(StepListener& listener)
+	int CMaster::addBakeCooling()
 	{
 		CBakeCooling* pEquipment = new CBakeCooling();
 		pEquipment->setID(EQ_ID_BAKE_COOLING);
diff --git a/SourceCode/Bond/Servo/CMaster.h b/SourceCode/Bond/Servo/CMaster.h
index f3a531b..c6180cc 100644
--- a/SourceCode/Bond/Servo/CMaster.h
+++ b/SourceCode/Bond/Servo/CMaster.h
@@ -14,11 +14,12 @@
 namespace SERVO {
     typedef std::function<void(void* pMaster, CEquipment* pEiuipment, BOOL bAlive)> ONEQALIVE;
     typedef std::function<void(CStep* pStep, int code, void* pData)> ONEQSTEPEVENT;
+    typedef std::function<void(void* pMaster, CEquipment* pEquipment, int state, int alarmId, int unitId, int level)> ONEQALARM;
     typedef struct _MasterListener
     {
         ONEQALIVE				onEqAlive;
         ONEQALIVE		        onEqCimStateChanged;
-        ONEQSTEPEVENT		    onEqStepEvent;
+        ONEQALARM               onEqAlarm;
     } MasterListener;
 
     class CMaster
@@ -39,13 +40,13 @@
 
     private:
         int addToEquipmentList(CEquipment* pEquipment);
-        int addLoadPort(int index, StepListener& listener);
-        int addFliper(StepListener& listener);
-        int addVacuumBake(StepListener& listener);
-        int addAligner(StepListener& listener);
-        int addEFEM(StepListener& listener);
-        int addBonder(int index, StepListener& listener);
-        int addBakeCooling(StepListener& listener);
+        int addLoadPort(int index);
+        int addFliper();
+        int addVacuumBake();
+        int addAligner();
+        int addEFEM();
+        int addBonder(int index);
+        int addBakeCooling();
         void connectEquipments();
         int saveCache();
         int saveCacheAndBackups();
diff --git a/SourceCode/Bond/Servo/CReadStep.cpp b/SourceCode/Bond/Servo/CReadStep.cpp
index c633c2f..7e05c00 100644
--- a/SourceCode/Bond/Servo/CReadStep.cpp
+++ b/SourceCode/Bond/Servo/CReadStep.cpp
@@ -1,6 +1,7 @@
 #include "stdafx.h"
 #include "CReadStep.h"
 #include "Common.h"
+#include "CEquipment.h"
 
 
 namespace SERVO {
@@ -83,9 +84,8 @@
 				nextStep();
 				ASSERT(m_pCclink);
 				if (0 == onReadData()) {
-					if (m_listener.onEvent != nullptr) {
-						m_listener.onEvent(this, STEP_EVENT_READDATA, nullptr);
-					}
+					ASSERT(m_pEquipment);
+					m_pEquipment->onStepEvent(this, STEP_EVENT_READDATA);
 				}
 
 				// 2.给对方写ON
@@ -112,9 +112,8 @@
 				// 6.完成
 				nextStep();
 				if (0 == onComplete()) {
-					if (m_listener.onEvent != nullptr) {
-						m_listener.onEvent(this, STEP_EVENT_COMPLETE, nullptr);
-					}
+					ASSERT(m_pEquipment);
+					m_pEquipment->onStepEvent(this, STEP_EVENT_COMPLETE);
 				}
 			}
 		}
diff --git a/SourceCode/Bond/Servo/CStep.cpp b/SourceCode/Bond/Servo/CStep.cpp
index dbbf161..0f23732 100644
--- a/SourceCode/Bond/Servo/CStep.cpp
+++ b/SourceCode/Bond/Servo/CStep.cpp
@@ -6,7 +6,6 @@
 
 	CStep::CStep()
 	{
-		m_listener = {nullptr};
 		m_pCclink = nullptr;
 		InitializeCriticalSection(&m_criticalSection);
 	}
@@ -14,11 +13,6 @@
 	CStep::~CStep()
 	{
 		DeleteCriticalSection(&m_criticalSection);
-	}
-
-	void CStep::setListener(StepListener listener)
-	{
-		m_listener.onEvent = listener.onEvent;
 	}
 
 	void CStep::setCcLink(CCCLinkIEControl* pCcLink)
diff --git a/SourceCode/Bond/Servo/CStep.h b/SourceCode/Bond/Servo/CStep.h
index 95ce06b..aae469e 100644
--- a/SourceCode/Bond/Servo/CStep.h
+++ b/SourceCode/Bond/Servo/CStep.h
@@ -8,12 +8,6 @@
 #define STEP_EVENT_READDATA			0x01
 #define STEP_EVENT_COMPLETE			0x02
 
-	typedef std::function<void(void* pStep, int code, void* pData)> ONSTEPEVENT;
-	typedef struct _StepListener
-	{
-		ONSTEPEVENT			onEvent;
-	} StepListener;
-
 	class CEquipment;
 	class CStep
 	{
@@ -22,7 +16,6 @@
 		virtual ~CStep();
 
 	public:
-		void setListener(StepListener listener);
 		void setCcLink(CCCLinkIEControl* pCcLink);
 		void setEquipment(CEquipment* pEquipment);
 		CEquipment* getEquipment();
@@ -39,7 +32,6 @@
 		void convertString(const char* pszBuffer, int size, std::string& strOut);
 
 	protected:
-		StepListener m_listener;
 		StationIdentifier m_station;
 		std::string m_strName;
 		CEquipment* m_pEquipment;
diff --git a/SourceCode/Bond/Servo/CWriteStep.cpp b/SourceCode/Bond/Servo/CWriteStep.cpp
index 34dc627..6d79f55 100644
--- a/SourceCode/Bond/Servo/CWriteStep.cpp
+++ b/SourceCode/Bond/Servo/CWriteStep.cpp
@@ -1,6 +1,7 @@
 #include "stdafx.h"
 #include "CWriteStep.h"
 #include "Common.h"
+#include "CEquipment.h"
 
 
 namespace SERVO {
@@ -120,9 +121,8 @@
 				// 6.完成
 				nextStep();
 				if (0 == onComplete()) {
-					if (m_listener.onEvent != nullptr) {
-						m_listener.onEvent(this, STEP_EVENT_COMPLETE, nullptr);
-					}
+					ASSERT(m_pEquipment);
+					m_pEquipment->onStepEvent(this, STEP_EVENT_COMPLETE);
 				}
 			}
 		}
diff --git a/SourceCode/Bond/Servo/Model.cpp b/SourceCode/Bond/Servo/Model.cpp
index a757adc..9ef4836 100644
--- a/SourceCode/Bond/Servo/Model.cpp
+++ b/SourceCode/Bond/Servo/Model.cpp
@@ -105,64 +105,50 @@
 		notifyPtr(RX_CODE_EQ_ALIVE, pEquipment);
 
 	};
-	masterListener.onEqStepEvent = [&](SERVO::CStep* pStep, int code, void* pData) -> void {
-		if (code == STEP_EVENT_READDATA) {
-			LOGI("<CModel>onEqStepEvent,数据变化:%s(%s, 0x%x).\n", pStep->getEquipment()->getName().c_str(),
-				pStep->getName().c_str(), pData);
-			notifyPtr(RX_CODE_STEP_EVENT_READDATA, pStep);
-			
-			// 处理警告信息
-			if (isAlarmStep(pStep)) {
-				// 保存到数据库
-				AlarmManager& alarmManager = AlarmManager::getInstance();
-				std::string strAlarmText;
-				SERVO::CEquipment* pEquipment = pStep->getEquipment();
-				SERVO::CEqAlarmStep* pEqAlarmStep = (SERVO::CEqAlarmStep*)pStep;
-				const AlarmInfo* pAlarmInfo = alarmManager.getAlarmInfoByID(pEqAlarmStep->getAlarmId());
-				if (pAlarmInfo != nullptr) {
-					strAlarmText = pAlarmInfo->strAlarmText;
-				}
-				int state = pEqAlarmStep->getAlarmState();
-				if (state == 1) {
-					AlarmData alarmData;
-					alarmData.nId = pEqAlarmStep->getAlarmId();
-					alarmData.nSeverityLevel = pEqAlarmStep->getAlarmLevel();
-					alarmData.nDeviceId = pEqAlarmStep->getEquipment()->getID();
-					alarmData.nUnitId = pEqAlarmStep->getUnitId();
-					alarmData.strDeviceName = alarmManager.getDeviceNameById(alarmData.nDeviceId);
-					alarmData.strUnitName = alarmManager.getUnitNameById(alarmData.nDeviceId, alarmData.nUnitId);
-					alarmData.strStartTime = CToolUnits::timeToString2(CToolUnits::getTimestamp());
-					alarmData.strEndTime = "";
-
-					const AlarmInfo* alarmInfo = alarmManager.getAlarmInfoByID(alarmData.nId);
-					alarmData.strDescription = alarmInfo != nullptr ? alarmInfo->strAlarmText : "";
-	
-					int nAlarmEventId = 0;
-					bool result = alarmManager.addAlarm(alarmData, nAlarmEventId);
-					if (result) {
-						LOGI("<CModel> Alarm added successfully!");
-					}
-					else {
-						LOGE("<CModel> Failed to add alarm.");
-					}
-
-					notifyPtr(RX_CODE_ALARM_SET, pStep);					
-				}
-				else {
-					alarmManager.clearAlarmByAttributes(pEqAlarmStep->getAlarmId(),
-						pEqAlarmStep->getEquipment()->getID(),
-						pEqAlarmStep->getUnitId(),
-						CToolUnits::getCurrentTimeString());
-					notifyPtr(RX_CODE_ALARM_CLEAR, pStep);
-				}
-
-				m_hsmsPassive.requestAlarmReport(pEqAlarmStep->getAlarmState(),
-					pEquipment->getBaseAlarmId() + pEqAlarmStep->getAlarmId(),
-					strAlarmText.c_str());
-			}
+	masterListener.onEqAlarm = [&](void* pMaster, SERVO::CEquipment* pEquipment, int state, int alarmId, int unitId, int level) -> void {
+		AlarmManager& alarmManager = AlarmManager::getInstance();
+		std::string strAlarmText;
+		const AlarmInfo* pAlarmInfo = alarmManager.getAlarmInfoByID(alarmId);
+		if (pAlarmInfo != nullptr) {
+			strAlarmText = pAlarmInfo->strAlarmText;
 		}
-	};
+		if (state == 1) {
+			AlarmData alarmData;
+			alarmData.nId = alarmId;
+			alarmData.nSeverityLevel = level;
+			alarmData.nDeviceId = pEquipment->getID();
+			alarmData.nUnitId = unitId;
+			alarmData.strDeviceName = alarmManager.getDeviceNameById(alarmData.nDeviceId);
+			alarmData.strUnitName = alarmManager.getUnitNameById(alarmData.nDeviceId, alarmData.nUnitId);
+			alarmData.strStartTime = CToolUnits::timeToString2(CToolUnits::getTimestamp());
+			alarmData.strEndTime = "";
 
+			const AlarmInfo* alarmInfo = alarmManager.getAlarmInfoByID(alarmData.nId);
+			alarmData.strDescription = alarmInfo != nullptr ? alarmInfo->strAlarmText : "";
+
+			int nAlarmEventId = 0;
+			bool result = alarmManager.addAlarm(alarmData, nAlarmEventId);
+			if (result) {
+				LOGI("<CModel> Alarm added successfully!");
+			}
+			else {
+				LOGE("<CModel> Failed to add alarm.");
+			}
+
+			notify(RX_CODE_ALARM_SET);
+		}
+		else {
+			alarmManager.clearAlarmByAttributes(alarmId,
+				pEquipment->getID(),
+				unitId,
+				CToolUnits::getCurrentTimeString());
+			notify(RX_CODE_ALARM_CLEAR);
+		}
+
+		m_hsmsPassive.requestAlarmReport(state,
+			pEquipment->getBaseAlarmId() + alarmId,
+			strAlarmText.c_str());
+	};
 	m_master.setListener(masterListener);
 
 
@@ -395,9 +381,4 @@
 	}
 
 	return 0;
-}
-
-bool CModel::isAlarmStep(SERVO::CStep* pStep)
-{
-	return CToolUnits::startsWith(pStep->getName(), STEP_ALARM_START);
 }
diff --git a/SourceCode/Bond/Servo/Model.h b/SourceCode/Bond/Servo/Model.h
index 3b92364..6e2655c 100644
--- a/SourceCode/Bond/Servo/Model.h
+++ b/SourceCode/Bond/Servo/Model.h
@@ -14,7 +14,6 @@
 	void setWorkDir(const char* pszWorkDir);
 	int init();
 	int term();
-	bool isAlarmStep(SERVO::CStep* pStep);
 
 public:
 	int notify(int code);

--
Gitblit v1.9.3