From aabaff9cdcf9bb279b762891aedda5a03571fbb5 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期二, 01 七月 2025 08:55:07 +0800
Subject: [PATCH] 1.修改Glass的JobDataS的更新逻辑,在收到OnReceiveJob时,机器内未保存和管理Glass, 此时Glass在Arm上,应通过Arm来更新JobDataS;

---
 SourceCode/Bond/Servo/CArm.cpp            |   29 ++++++++++++++
 SourceCode/Bond/Servo/CEquipment.cpp      |   18 ++++-----
 SourceCode/Bond/Servo/CPortStatusReport.h |    2 
 SourceCode/Bond/Servo/PageTransferLog.cpp |    7 +++
 SourceCode/Bond/Servo/CArm.h              |    4 ++
 SourceCode/Bond/Servo/CLoadPort.cpp       |    1 
 SourceCode/Bond/Servo/Common.h            |    2 
 7 files changed, 50 insertions(+), 13 deletions(-)

diff --git a/SourceCode/Bond/Servo/CArm.cpp b/SourceCode/Bond/Servo/CArm.cpp
index 7ca9be1..c257753 100644
--- a/SourceCode/Bond/Servo/CArm.cpp
+++ b/SourceCode/Bond/Servo/CArm.cpp
@@ -102,4 +102,33 @@
 
 		return 0;
 	}
+
+	int CArm::glassUpdateJobDataS(CJobDataS* pJobDataS)
+	{
+		ASSERT(pJobDataS);
+
+		Lock();
+		CGlass* pGlass = (CGlass*)m_slot[0].getContext();
+		if (pGlass == nullptr) {
+			Unlock();
+			LOGE("<CArm>glassUpdateJobDataS失败,找不到对应的Glass");
+			return -1;
+		}
+
+		CJobDataS* pSrcJs = pGlass->getJobDataS();
+		if (pSrcJs->getCassetteSequenceNo() != pJobDataS->getCassetteSequenceNo()
+			|| pSrcJs->getJobSequenceNo() != pJobDataS->getJobSequenceNo()) {
+			Unlock();
+			LOGE("<CArm>glassUpdateJobDataS失败,CassetteNo不匹配([%d,%d] != [%d,%d])",
+				pSrcJs->getCassetteSequenceNo(),
+				pJobDataS->getCassetteSequenceNo(),
+				pSrcJs->getJobSequenceNo(),
+				pJobDataS->getJobSequenceNo());
+			return -2;
+		}
+
+		pGlass->updateJobDataS(pJobDataS);
+		Unlock();
+		return 0;
+	}
 }
diff --git a/SourceCode/Bond/Servo/CArm.h b/SourceCode/Bond/Servo/CArm.h
index cedb751..5b7bfa6 100644
--- a/SourceCode/Bond/Servo/CArm.h
+++ b/SourceCode/Bond/Servo/CArm.h
@@ -26,6 +26,10 @@
 
         // 调用tempFetchOut后,pGlass必须release一次
         int tempFetchOut(OUT CGlass*& pGlass);
+
+        // 更新JobDataS
+        // Equipment在onReceivedJob事件时调用
+        int glassUpdateJobDataS(CJobDataS* pJobDataS);
 	};
 }
 
diff --git a/SourceCode/Bond/Servo/CEquipment.cpp b/SourceCode/Bond/Servo/CEquipment.cpp
index c7cc0db..817f4bc 100644
--- a/SourceCode/Bond/Servo/CEquipment.cpp
+++ b/SourceCode/Bond/Servo/CEquipment.cpp
@@ -1439,17 +1439,15 @@
 	{
 		LOGI("<CEquipment-%s>onReceivedJob.", m_strName.c_str());
 
-		// 可以在此更新JobDataS数据了
-		CGlass* pGlass = getGlassFromSlot(port);
-		if (pGlass == nullptr) {
-			LOGE("<CEquipment-%s>onSentOutJob,没有找到对应的Glass(CassetteSequenceNo:%d, JobSequenceNo:%d, ID=%s),请检查数据,注意风险。",
-				m_strName.c_str(), pJobDataS->getCassetteSequenceNo(), pJobDataS->getJobSequenceNo(),
-				pJobDataS->getGlass1Id().c_str());
-			return -1;
-		}
-		pGlass->updateJobDataS(pJobDataS);
 
-		return 0;
+		// 可以在此更新JobDataS数据了
+		int nRet = ((CArm*)m_pArm)->glassUpdateJobDataS(pJobDataS);
+		if (nRet < 0) {
+			LOGE("<CEquipment-%s>onReceivedJob,更新JobDataS失败,glassUpdateJobDataS返回%d",
+				m_strName.c_str(), nRet);
+		}
+
+		return nRet;
 	}
 
 	int CEquipment::decodeSentOutJobReport(CStep* pStep, int port, const char* pszData, size_t size)
diff --git a/SourceCode/Bond/Servo/CLoadPort.cpp b/SourceCode/Bond/Servo/CLoadPort.cpp
index 25d2306..f23f005 100644
--- a/SourceCode/Bond/Servo/CLoadPort.cpp
+++ b/SourceCode/Bond/Servo/CLoadPort.cpp
@@ -345,6 +345,7 @@
 					[&](void* pFrom, int code, const char* pszData, size_t size) -> int {
 						if (code == ROK && pszData != nullptr && size > 0) {
 							decodePortStatusReport((CStep*)pFrom, pszData, size);
+							return 0;
 						}
 						return -1;
 					});
diff --git a/SourceCode/Bond/Servo/CPortStatusReport.h b/SourceCode/Bond/Servo/CPortStatusReport.h
index 526c94a..4c6fa4b 100644
--- a/SourceCode/Bond/Servo/CPortStatusReport.h
+++ b/SourceCode/Bond/Servo/CPortStatusReport.h
@@ -40,7 +40,7 @@
 		short m_nJobExistenceSlot[12];		// 12 * 16 = 192 个slot是否存在glass
 		short m_nLoadingCassetteType;		// 1: Actual Cassette 2 : Empty Cassette
 		short m_nQTimeFlag;
-		short m_nCassetteMappingState;		// 1: mapping use  2: mapping not use
+		short m_nCassetteMappingState;		// 1: mapping use, 2: mapping not use
 		short m_nCassetteStatus;
 	};
 }
diff --git a/SourceCode/Bond/Servo/Common.h b/SourceCode/Bond/Servo/Common.h
index ce4a9d9..93ff1aa 100644
--- a/SourceCode/Bond/Servo/Common.h
+++ b/SourceCode/Bond/Servo/Common.h
@@ -34,7 +34,7 @@
 #define PAGE_GRPAH2_BACKGROUND_COLOR		RGB(255, 255, 255)
 #define EQ_BOX_OFFLINE						RGB(222, 222, 222)
 #define EQ_BOX_ONLINE						RGB(0, 176, 80)
-#define EQ_BOX_OCCUPIED                     RGB(0, 204, 102)
+#define EQ_BOX_OCCUPIED                     RGB(255, 127, 39)
 #define EQ_BOX_FRAME1						RGB(22, 22, 22)
 #define EQ_BOX_FRAME2						RGB(255, 127, 39)
 #define CR_MSGBOX_BKGND						RGB(7, 71, 166)
diff --git a/SourceCode/Bond/Servo/PageTransferLog.cpp b/SourceCode/Bond/Servo/PageTransferLog.cpp
index 9896a4e..978a8e0 100644
--- a/SourceCode/Bond/Servo/PageTransferLog.cpp
+++ b/SourceCode/Bond/Servo/PageTransferLog.cpp
@@ -275,7 +275,12 @@
 		return;
 	}
 
-	int nItem = m_listCtrl.InsertItem(0, _T(""));
+	int nIndex = m_listCtrl.GetItemCount();
+	if (nIndex < 0) {
+		return;
+	}
+
+	int nItem = m_listCtrl.InsertItem(nIndex, _T(""));
 	CString str;
 	str.Format(_T("%d"), data.nRecordId);
 	m_listCtrl.SetItemText(nItem, 1, str);

--
Gitblit v1.9.3