From 6dc80508b1c0f431007f8a8c947c152ec00c3d15 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期一, 08 九月 2025 09:24:05 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang

---
 SourceCode/Bond/Servo/CLoadPort.cpp |   62 +++++++++++++++++++-----------
 1 files changed, 39 insertions(+), 23 deletions(-)

diff --git a/SourceCode/Bond/Servo/CLoadPort.cpp b/SourceCode/Bond/Servo/CLoadPort.cpp
index 37f3139..9fe24b5 100644
--- a/SourceCode/Bond/Servo/CLoadPort.cpp
+++ b/SourceCode/Bond/Servo/CLoadPort.cpp
@@ -9,8 +9,8 @@
 	CLoadPort::CLoadPort() : CEquipment()
 	{
 		m_nIndex = 0;
-		m_portType = PortType::Loading;
-		m_portMode = PortMode::ReadyToLoad;
+		m_portType = PortType::Both;
+		m_portMode = PortMode::OutOfService;
 		m_cassetteType = CassetteType::G1;
 		m_transferMode = TransferMode::AGVMode;
 		m_bEnable = FALSE;
@@ -115,6 +115,7 @@
 				[&](void* pFrom, int code, const char* pszData, size_t size) -> int {
 					if (code == ROK && pszData != nullptr && size > 0) {
 						m_portMode = (PortMode)CToolUnits::toInt16(pszData);
+						LOGI("<LoadPort-%d>m_portMode:%d", m_nIndex, m_portMode);
 					}
 					return 0;
 				});
@@ -349,17 +350,44 @@
 	{
 		CEquipment::onTimer(nTimerid);
 
+
+		// 从配置读出的enable,初始化时写给efem
+		static int i_enable[4] = { 0 };
+		if ((++i_enable[m_nIndex]) == 10 + m_nIndex) {
+			eablePort(m_bEnable, [&](int code) -> int {
+				LOGI("<LoadPort-%d>eablePort:code=%d", m_nIndex, code);
+				return 0;
+				});
+		}
+
+
+
 		// 模拟测试
 		/*
 		if (m_nIndex == 0) {
 			static int ii = 0;
 			ii++;
-			if (ii == 20) {
-				char szBuffer[64];
-				CStep* pStep = getStepWithName(STEP_EQ_PORT1_INUSE);
+			if (ii == 50) {
+				char szBuffer[64] = {0};
+				CStep* pStep = getStepWithName(STEP_EQ_PORT1_BLOCKED);
 				CPortStatusReport portStatusReport;
-				portStatusReport.setPortStatus(PORT_INUSE);
+				portStatusReport.setPortStatus(PORT_BLOCKED);
 				portStatusReport.setJobExistenceSlot(0xf);
+				portStatusReport.setCassetteId("CID1001");
+				int nRet = portStatusReport.serialize(szBuffer, 64);
+				decodePortStatusReport(pStep, szBuffer, 64);
+			}
+		}
+		if (m_nIndex == 1) {
+			static int ii = 0;
+			ii++;
+			if (ii == 55) {
+				char szBuffer[64] = { 0 };
+				CStep* pStep = getStepWithName(STEP_EQ_PORT2_BLOCKED);
+				CPortStatusReport portStatusReport;
+				portStatusReport.setPortStatus(PORT_BLOCKED);
+				portStatusReport.setJobExistenceSlot(0xff );
+				portStatusReport.setCassetteId("CID1004");
 				int nRet = portStatusReport.serialize(szBuffer, 64);
 				decodePortStatusReport(pStep, szBuffer, 64);
 			}
@@ -373,23 +401,11 @@
 
 		if (ar.IsStoring()) {
 			ar << m_nIndex;
-			//ar << (int)m_portType;
-			//ar << (int)m_portMode;
-			//ar << (int)m_cassetteType;
-			//ar << (int)m_transferMode;
-			//ar << m_bEnable;
-			//ar << m_bAutoChangeEnable;
 			m_portStatusReport.serialize(ar);
 		}
 		else {
 			int temp;
 			ar >> m_nIndex;
-			//ar >> temp; m_portType = (PortType)temp;
-			//ar >> temp; m_portMode = (PortMode)temp;
-			//ar >> temp; m_cassetteType = (CassetteType)temp;
-			//ar >> temp; m_transferMode = (TransferMode)temp;
-			//ar >> m_bEnable;
-			//ar >> m_bAutoChangeEnable;
 			m_portStatusReport.serialize(ar);
 		}
 	}
@@ -924,12 +940,12 @@
 			else {
 				// 抛出到应用层做选择要加工的片子
 				generateGlassList(getScanCassetteMap());
-				if (m_listener.onPortInUse != nullptr) {
-					m_listener.onPortInUse(this, getScanCassetteMap());
-				}
 			}
 		}
-
+		if (m_listener.onPortStatusChanged != nullptr) {
+			m_listener.onPortStatusChanged(this, portStatusReport.getPortStatus(),
+				getScanCassetteMap());
+		}
 
 
 		// 缓存Attribute,用于调试时显示信息
@@ -1221,7 +1237,7 @@
 		char szBuffer[64];
 		for (int i = 0; i < SLOT_MAX; i++) {
 			if (!m_slot[i].isEnable()) continue;
-			if (!(map >> i) & 1) continue;
+			if (((map >> i) & 1) == 0) continue;
 
 			CJobDataS js;
 			js.setCassetteSequenceNo(getNextCassetteSequenceNo());

--
Gitblit v1.9.3