From d5c8d6545efe0ab2026a4127fde0fa2bad659ccd Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期三, 06 八月 2025 14:45:52 +0800
Subject: [PATCH] 1.实现EAP中ProceedWithCarrier和CarrierRelease的功能模拟及测试;

---
 SourceCode/Bond/Servo/Model.cpp |   61 +++++++++++++++++++++++++++++-
 1 files changed, 59 insertions(+), 2 deletions(-)

diff --git a/SourceCode/Bond/Servo/Model.cpp b/SourceCode/Bond/Servo/Model.cpp
index 7544937..6cc7531 100644
--- a/SourceCode/Bond/Servo/Model.cpp
+++ b/SourceCode/Bond/Servo/Model.cpp
@@ -7,6 +7,7 @@
 #include "AlarmManager.h"
 #include "CGlassPool.h"
 #include "TransferManager.h"
+#include "RecipeManager.h"
 
 
 CModel::CModel()
@@ -50,6 +51,18 @@
 		m_master.setPortType(i, portEnable, portType, portMode, cassetteType,
 			transferMode, autoChangeEnable);
 	}
+}
+
+void CModel::setPortCassetteType(unsigned int index, SERVO::CassetteType type)
+{
+	m_master.setPortCassetteType(index, type);
+	m_configuration.setPortCassetteType(index, (int)type);
+}
+
+void CModel::setPortEnable(unsigned int index, BOOL bEnable)
+{
+	m_master.setPortEnable(index, bEnable);
+	m_configuration.setPortEnable(index, bEnable);
 }
 
 int CModel::init()
@@ -125,6 +138,43 @@
 			m_master.enableAlarmReport(bEnable);
 		}
 	};
+	listener.onQueryPPIDList = [&](void* pFrom) ->std::vector<std::string> {
+		std::vector<std::string> ppids;
+		auto temp = RecipeManager::getInstance().getAllPPID();
+		for (auto item : temp) {
+			if (item.length() > PPID_NAME_MAX) {
+				ppids.push_back(item.substr(0, PPID_NAME_MAX));
+			}
+			else {
+				ppids.push_back(item);
+			}
+		}
+		return ppids;
+	};
+	listener.onCarrierAction = [&](void* pFrom, 
+		unsigned int DATAID, 
+		const char* pszCarrierAction,
+		const char* pszCarrierId,
+		unsigned char PTN,
+		std::string& strErrorTxt) -> unsigned int {
+			if (PTN < 1 || 4 < PTN) {
+				strErrorTxt = "invalid data or argument";
+				return CAACK_3;
+			}
+
+			if (_strcmpi(pszCarrierAction, "ProceedWithCarrier") == 0) {
+				m_master.proceedWithCarrier(PTN);
+				return CAACK_0;
+			}
+			else if (_strcmpi(pszCarrierAction, "CarrierRelease") == 0) {
+				m_master.carrierRelease(PTN);
+				return CAACK_0;
+			}
+
+			strErrorTxt = "rejected - invalid state";
+			return CAACK_5;
+			LOGI("<Model>onCarrierAction %d, %s, %d, %d", DATAID, pszCarrierAction, pszCarrierId, PTN);
+	};
 	m_hsmsPassive.setListener(listener);
 	m_hsmsPassive.setEquipmentModelType((LPTSTR)(LPCTSTR)strModeType);
 	m_hsmsPassive.setSoftRev((LPTSTR)(LPCTSTR)strSoftRev);
@@ -136,7 +186,9 @@
 	m_hsmsPassive.loadReports((LPTSTR)(LPCTSTR)strVarialbleFile);
 	strVarialbleFile.Format(_T("%s\\CollectionEventList.txt"), (LPTSTR)(LPCTSTR)m_strWorkDir);
 	m_hsmsPassive.loadCollectionEvents((LPTSTR)(LPCTSTR)strVarialbleFile);
-	m_hsmsPassive.init(this, "APP", 7000);
+	strVarialbleFile.Format(_T("%s\\HsmsPassive.cache"), (LPTSTR)(LPCTSTR)m_strWorkDir);
+	m_hsmsPassive.loadCacheFromFile(strVarialbleFile);
+
 
 	SERVO::MasterListener masterListener;
 	masterListener.onMasterStateChanged = [&](void* pMaster, SERVO::MASTERSTATE state) -> void {
@@ -299,6 +351,10 @@
 		notifyPtrAndInt(RX_CODE_EQ_ROBOT_TASK, pTask, nullptr, code);
 
 	};
+	masterListener.onLoadPortStatusChanged = [&] (void* pMaster, SERVO::CEquipment* pEquipment, short status, __int64 data) {
+		LOGE("<CModel>onLoadPortStatusChanged. status = %d", status);
+		notifyPtr(RX_CODE_LOADPORT_STATUS_CHANGED, pEquipment);
+	};
 	m_master.setListener(masterListener);
 
 
@@ -306,7 +362,7 @@
 	CString strMasterDataFile;
 	strMasterDataFile.Format(_T("%s\\Master.dat"), (LPTSTR)(LPCTSTR)m_strWorkDir);
 	m_master.setCacheFilepath((LPTSTR)(LPCTSTR)strMasterDataFile);
-
+	m_master.setCompareMapsBeforeProceeding(m_configuration.isCompareMapsBeforeProceeding());
 
 	// 加载警告信息
 	AlarmManager& alarmManager = AlarmManager::getInstance();
@@ -321,6 +377,7 @@
 
 int CModel::term()
 {
+	m_hsmsPassive.saveCache();
 	m_hsmsPassive.term();
 	CLog::GetLog()->SetOnLogCallback(nullptr);
 	m_master.term();

--
Gitblit v1.9.3