From 23cce52f9abd7dfd8e4eddd6068810e70c0a4ffa Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期四, 12 六月 2025 15:10:40 +0800
Subject: [PATCH] 1.转换为新的站号和Slot

---
 SourceCode/Bond/Servo/CMaster.cpp |   78 +++++++++++++++++++++++++++++++++++----
 SourceCode/Bond/Servo/CMaster.h   |    1 
 2 files changed, 71 insertions(+), 8 deletions(-)

diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index 4eca70d..9529f2b 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -1161,11 +1161,14 @@
 
 
 		if (pSrcSlot != nullptr && nullptr != pTarSlot) {
+			int srcPos, srcSlot, tarPos, tarSlot;
+			transformPosAndSlot(pSrcSlot->getPosition(), pSrcSlot->getNo(), srcPos, srcSlot);
+			transformPosAndSlot(pTarSlot->getPosition(), pTarSlot->getNo(), tarPos, tarSlot);
 			pTask = new CRobotTask();
 			pTask->setContext(pSrcSlot->getContext());
 			pTask->setEFEM((CEFEM*)getEquipment(EQ_ID_EFEM));
-			pTask->setRobotTransferParam(++taskSeqNo, armNo, pSrcSlot->getPosition(),
-				pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo());
+			pTask->setRobotTransferParam(++taskSeqNo, armNo, srcPos,
+				tarPos, srcSlot, tarSlot);
 		}
 
 
@@ -1182,11 +1185,14 @@
 		pSrcSlot = pSrcEq->getProcessedSlot(MaterialsType::G1);
 
 		if (pSrcSlot != nullptr && nullptr != pTarSlot) {
+			int srcPos, srcSlot, tarPos, tarSlot;
+			transformPosAndSlot(pSrcSlot->getPosition(), pSrcSlot->getNo(), srcPos, srcSlot);
+			transformPosAndSlot(pTarSlot->getPosition(), pTarSlot->getNo(), tarPos, tarSlot);
 			pTask = new CRobotTask();
 			pTask->setContext(pSrcSlot->getContext());
 			pTask->setEFEM((CEFEM*)getEquipment(EQ_ID_EFEM));
-			pTask->setRobotTransferParam(++taskSeqNo, 1, pSrcSlot->getPosition(),
-				pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo());
+			pTask->setRobotTransferParam(++taskSeqNo, 1, srcPos,
+				tarPos, srcSlot, tarSlot);
 		}
 
 
@@ -1204,11 +1210,14 @@
 		pSrcSlot = pSrcEq->getProcessedSlot2(MaterialsType::G1, slotsSrc);
 
 		if (pSrcSlot != nullptr && nullptr != pTarSlot) {
+			int srcPos, srcSlot, tarPos, tarSlot;
+			transformPosAndSlot(pSrcSlot->getPosition(), pSrcSlot->getNo(), srcPos, srcSlot);
+			transformPosAndSlot(pTarSlot->getPosition(), pTarSlot->getNo(), tarPos, tarSlot);
 			pTask = new CRobotTask();
 			pTask->setContext(pSrcSlot->getContext());
 			pTask->setEFEM((CEFEM*)getEquipment(EQ_ID_EFEM));
-			pTask->setRobotTransferParam(++taskSeqNo, 1, pSrcSlot->getPosition(),
-				pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo());
+			pTask->setRobotTransferParam(++taskSeqNo, 1, srcPos,
+				tarPos, srcSlot, tarSlot);
 		}
 
 
@@ -1225,17 +1234,70 @@
 		pSrcSlot = pSrcEq->getProcessedSlot2(MaterialsType::G1, slots);
 
 		if (pSrcSlot != nullptr && nullptr != pTarSlot) {
+			int srcPos, srcSlot, tarPos, tarSlot;
+			transformPosAndSlot(pSrcSlot->getPosition(), pSrcSlot->getNo(), srcPos, srcSlot);
+			transformPosAndSlot(pTarSlot->getPosition(), pTarSlot->getNo(), tarPos, tarSlot);
 			pTask = new CRobotTask();
 			pTask->setContext(pSrcSlot->getContext());
 			pTask->setEFEM((CEFEM*)getEquipment(EQ_ID_EFEM));
-			pTask->setRobotTransferParam(++taskSeqNo, 1, pSrcSlot->getPosition(),
-				pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo());
+			pTask->setRobotTransferParam(++taskSeqNo, 1, srcPos,
+				tarPos, srcSlot, tarSlot);
 		}
 
 
 		return pTask;
 	}
 
+	void CMaster::transformPosAndSlot(int srcPos, int srcSlot, int& tarPos, int& tarSlot)
+	{
+		switch (srcPos)
+		{
+		case EQ_ID_LOADPORT1:
+		case EQ_ID_LOADPORT2:
+		case EQ_ID_LOADPORT3:
+		case EQ_ID_LOADPORT4:
+		case EQ_ID_ARM_TRAY1:
+		case EQ_ID_ARM_TRAY2:
+		case EQ_ID_ALIGNER:
+		case EQ_ID_FLIPER:
+			tarPos = srcPos;
+			tarSlot = 1;
+			break;
+		case EQ_ID_Bonder1:
+			if (1 <= srcSlot && srcSlot <= 2) {
+				tarPos = 9 + srcSlot;
+				tarSlot = 1;
+			}
+			break;
+		case EQ_ID_Bonder2:
+			if (1 <= srcSlot && srcSlot <= 2) {
+				tarPos = 11 + srcSlot;
+				tarSlot = 1;
+			}
+			break;
+		case EQ_ID_VACUUMBAKE:
+			if (1 <= srcSlot && srcSlot <= 2) {
+				tarPos = 13 + srcSlot;
+				tarSlot = 1;
+			}
+			break;
+		case EQ_ID_BAKE_COOLING:
+			if (1 <= srcSlot && srcSlot <= 4) {
+				tarPos = 15 + srcSlot;
+				tarSlot = 1;
+			}
+			break;
+		case EQ_ID_MEASUREMENT:
+			tarPos = 19;
+			tarSlot = 1;
+			break;
+		default:
+			tarPos = srcPos;
+			tarSlot = srcSlot;
+			break;
+		}
+	}
+
 	int CMaster::abortCurrentTask()
 	{
 		lock();
diff --git a/SourceCode/Bond/Servo/CMaster.h b/SourceCode/Bond/Servo/CMaster.h
index f918d48..2288d79 100644
--- a/SourceCode/Bond/Servo/CMaster.h
+++ b/SourceCode/Bond/Servo/CMaster.h
@@ -91,6 +91,7 @@
         CRobotTask* createTransferTask_bonder_to_bakecooling(CEquipment* pSrcEq, CEquipment* pTarEq);
         CRobotTask* createTransferTask_bake_to_cooling(CEquipment* pSrcEq);
         CRobotTask* createTransferTask_bakecooling_to_measurement(CEquipment* pSrcEq, CEquipment* pTarEq);
+        void transformPosAndSlot(int srcPos, int srcSlot, int& tarPos, int& tarSlot);
 
     private:
         CRITICAL_SECTION m_criticalSection;

--
Gitblit v1.9.3