From ed1e6f12a1568e6a581211ac39daaa2746c9ed24 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期二, 20 五月 2025 08:44:05 +0800
Subject: [PATCH] 1.IndexerOprationMode

---
 SourceCode/Bond/Servo/CVacuumBake.cpp                        |    5 ++
 Document/ESWIN_EAS_Bonder_Inline_Mapping_Address_v1.1.6.xlsx |    0 
 SourceCode/Bond/Servo/CEFEM.h                                |    1 
 SourceCode/Bond/Servo/CMeasurement.h                         |    2 +
 SourceCode/Bond/Servo/CVacuumBake.h                          |    2 +
 SourceCode/Bond/Servo/CBakeCooling.cpp                       |    5 ++
 SourceCode/Bond/Servo/CMeasurement.cpp                       |    5 ++
 SourceCode/Bond/Servo/CBakeCooling.h                         |    1 
 SourceCode/Bond/Servo/CEquipment.cpp                         |   33 ++++++++++++++++
 SourceCode/Bond/Servo/CEFEM.cpp                              |   17 ++++++++
 SourceCode/Bond/Servo/CEquipment.h                           |   16 ++++++++
 SourceCode/Bond/Servo/CBonder.h                              |    1 
 SourceCode/Bond/Servo/CBonder.cpp                            |    5 ++
 SourceCode/Bond/Servo/Common.h                               |    5 ++
 14 files changed, 97 insertions(+), 1 deletions(-)

diff --git a/Document/ESWIN_EAS_Bonder_Inline_Mapping_Address_v1.1.6.xlsx b/Document/ESWIN_EAS_Bonder_Inline_Mapping_Address_v1.1.6.xlsx
new file mode 100644
index 0000000..85b872f
--- /dev/null
+++ b/Document/ESWIN_EAS_Bonder_Inline_Mapping_Address_v1.1.6.xlsx
Binary files differ
diff --git a/SourceCode/Bond/Servo/CBakeCooling.cpp b/SourceCode/Bond/Servo/CBakeCooling.cpp
index 5e374ab..4b7147a 100644
--- a/SourceCode/Bond/Servo/CBakeCooling.cpp
+++ b/SourceCode/Bond/Servo/CBakeCooling.cpp
@@ -68,4 +68,9 @@
 
 		return (m_glassList.size() < 4);
 	}
+
+	int CBakeCooling::getIndexerOperationModeBaseValue()
+	{
+		return 25000;
+	}
 }
diff --git a/SourceCode/Bond/Servo/CBakeCooling.h b/SourceCode/Bond/Servo/CBakeCooling.h
index 6d85350..bea7a17 100644
--- a/SourceCode/Bond/Servo/CBakeCooling.h
+++ b/SourceCode/Bond/Servo/CBakeCooling.h
@@ -20,6 +20,7 @@
         virtual void getAttributeVector(CAttributeVector& attrubutes);
         virtual int recvIntent(CPin* pPin, CIntent* pIntent);
         virtual BOOL glassWillArrive(CGlass* pGlass);
+        virtual int getIndexerOperationModeBaseValue();
 	};
 }
 
diff --git a/SourceCode/Bond/Servo/CBonder.cpp b/SourceCode/Bond/Servo/CBonder.cpp
index 655c99a..f485a94 100644
--- a/SourceCode/Bond/Servo/CBonder.cpp
+++ b/SourceCode/Bond/Servo/CBonder.cpp
@@ -448,4 +448,9 @@
 
 		return 0;
 	}
+
+	int CBonder::getIndexerOperationModeBaseValue()
+	{
+		return m_nIndex == 0 ? 15000 : 20000;
+	}
 }
diff --git a/SourceCode/Bond/Servo/CBonder.h b/SourceCode/Bond/Servo/CBonder.h
index e05dce4..f24e05b 100644
--- a/SourceCode/Bond/Servo/CBonder.h
+++ b/SourceCode/Bond/Servo/CBonder.h
@@ -23,6 +23,7 @@
         virtual BOOL glassWillArrive(CGlass* pGlass);
         virtual BOOL onPreStoredJob(int port, CJobDataB* pJobDataB);
         virtual int onProcessData(CProcessData* pProcessData);
+        virtual int getIndexerOperationModeBaseValue();
 
     public:
         void setIndex(unsigned int index);
diff --git a/SourceCode/Bond/Servo/CEFEM.cpp b/SourceCode/Bond/Servo/CEFEM.cpp
index 3a277f3..1b792f1 100644
--- a/SourceCode/Bond/Servo/CEFEM.cpp
+++ b/SourceCode/Bond/Servo/CEFEM.cpp
@@ -454,6 +454,18 @@
 				delete pStep;
 			}
 		}
+
+		{
+			// Indexer Operation Mode Change
+			CEqWriteStep* pStep = new CEqWriteStep();
+			pStep->setName(STEP_EFEM_IN_OP_MODE_CHANGE);
+			pStep->setWriteSignalDev(0x070);
+			pStep->setDataDev(0x023);
+			if (addStep(STEP_ID_IN_OP_CMD_REPLY, pStep) != 0) {
+				delete pStep;
+			}
+		}
+
 	}
 
 	int CEFEM::onStepEvent(CStep* pStep, int code)
@@ -603,4 +615,9 @@
 
 		return -1;
 	}
+
+	int CEFEM::getIndexerOperationModeBaseValue()
+	{
+		return 10000;
+	}
 }
diff --git a/SourceCode/Bond/Servo/CEFEM.h b/SourceCode/Bond/Servo/CEFEM.h
index 4a53122..fc1c739 100644
--- a/SourceCode/Bond/Servo/CEFEM.h
+++ b/SourceCode/Bond/Servo/CEFEM.h
@@ -31,6 +31,7 @@
         virtual int onSentOutJob(int port, CJobDataS* pJobDataS);
         virtual int onFetchedOutJob(int port, CJobDataB* pJobDataB);
         virtual int onStoredJob(int port, CJobDataB* pJobDataB);
+        virtual int getIndexerOperationModeBaseValue();
 
     public:
         void setPort(unsigned int index, CLoadPort* pPort);
diff --git a/SourceCode/Bond/Servo/CEquipment.cpp b/SourceCode/Bond/Servo/CEquipment.cpp
index 1d3f312..4bc9ffc 100644
--- a/SourceCode/Bond/Servo/CEquipment.cpp
+++ b/SourceCode/Bond/Servo/CEquipment.cpp
@@ -1090,6 +1090,34 @@
 		return 0;
 	}
 
+	int CEquipment::indexerOperationModeChange(IDNEXER_OPERATION_MODE mode, ONWRITED onWritedBlock/* = nullptr*/)
+	{
+		SERVO::CEqWriteStep* pStep = (SERVO::CEqWriteStep*)getStepWithName(STEP_EFEM_IN_OP_MODE_CHANGE);
+		if (pStep == nullptr) {
+			return -1;
+		}
+
+		unsigned short operationMode = (unsigned short)(mode + getIndexerOperationModeBaseValue());
+		LOGI("<CEquipment-%s>准备设置indexerOperationMode<%d>", m_strName.c_str(), (int)mode);
+		if (onWritedBlock != nullptr) {
+			pStep->writeShort(operationMode, onWritedBlock);
+		}
+		else {
+			pStep->writeShort(operationMode, [&, mode](int code) -> int {
+				if (code == WOK) {
+					LOGI("<CEquipment-%s>设置indexerOperationMode成功.", m_strName.c_str());
+				}
+				else {
+					LOGI("<CEquipment-%s>设置indexerOperationMode失败,code:%d", m_strName.c_str(), code);
+				}
+
+				return 0;
+				});
+		}
+
+		return 0;
+	}
+
 	int CEquipment::masterRecipeListRequest(short unitNo)
 	{
 		SERVO::CEqWriteStep* pStep = (SERVO::CEqWriteStep*)getStepWithName(STEP_EQ_MASTER_RECIPE_LIST_REQ);
@@ -1364,6 +1392,11 @@
 		return 0;
 	}
 
+	int CEquipment::getIndexerOperationModeBaseValue()
+	{
+		return 0;
+	}
+
 	int CEquipment::addJobDataB(CJobDataB* pJobDataB)
 	{
 		// 添加之前先删除旧的,以免数据重复
diff --git a/SourceCode/Bond/Servo/CEquipment.h b/SourceCode/Bond/Servo/CEquipment.h
index 4e8f6db..90b7a12 100644
--- a/SourceCode/Bond/Servo/CEquipment.h
+++ b/SourceCode/Bond/Servo/CEquipment.h
@@ -73,6 +73,18 @@
 		Local = 2
 	};
 
+	enum IDNEXER_OPERATION_MODE {
+		Normal = 1,
+		Clear_Out = 2,
+		Cold_Run = 2,
+		Start = 10,
+		Stop = 11,
+		Pause = 12,
+		Resume = 13,
+		Abort = 14,
+		Cancel = 15,
+	};
+
 	enum RCMD {
 		Robot_home = 1,
 		Transfer, 
@@ -158,6 +170,7 @@
 		virtual BOOL onPreStoredJob(int port, CJobDataB* pJobDataB);
 		virtual int onStoredJob(int port, CJobDataB* pJobDataB);
 		virtual int onProcessData(CProcessData* pProcessData);
+		virtual int getIndexerOperationModeBaseValue();
 		void getGlassList(std::list<CGlass*>& list);
 		CGlass* getGlassFromList(const char* pszId);
 		CGlass* getFrontGlass();
@@ -178,6 +191,9 @@
 		int clearCimMessage(short id, short nTouchPanelNo);
 		int setDateTime(short year, short month, short day, short hour, short minute, short second);
 		int setDispatchingMode(DISPATCHING_MODE mode, ONWRITED onWritedBlock = nullptr);
+		int indexerOperationModeChange(IDNEXER_OPERATION_MODE mode, ONWRITED onWritedBlock = nullptr);
+
+
 
 		// 请求主配方列表
 		// unitNo: 0:local; Others:unit No
diff --git a/SourceCode/Bond/Servo/CMeasurement.cpp b/SourceCode/Bond/Servo/CMeasurement.cpp
index 34ff4e6..5664c32 100644
--- a/SourceCode/Bond/Servo/CMeasurement.cpp
+++ b/SourceCode/Bond/Servo/CMeasurement.cpp
@@ -64,4 +64,9 @@
 
 		return m_glassList.empty();
 	}
+
+	int CMeasurement::getIndexerOperationModeBaseValue()
+	{
+		return 35000;
+	}
 }
diff --git a/SourceCode/Bond/Servo/CMeasurement.h b/SourceCode/Bond/Servo/CMeasurement.h
index 28812a1..b6d87bb 100644
--- a/SourceCode/Bond/Servo/CMeasurement.h
+++ b/SourceCode/Bond/Servo/CMeasurement.h
@@ -20,6 +20,8 @@
         virtual void getAttributeVector(CAttributeVector& attrubutes);
         virtual int recvIntent(CPin* pPin, CIntent* pIntent);
         virtual BOOL glassWillArrive(CGlass* pGlass);
+        virtual int getIndexerOperationModeBaseValue();
+
 	};
 }
 
diff --git a/SourceCode/Bond/Servo/CVacuumBake.cpp b/SourceCode/Bond/Servo/CVacuumBake.cpp
index 71b7143..790e3e3 100644
--- a/SourceCode/Bond/Servo/CVacuumBake.cpp
+++ b/SourceCode/Bond/Servo/CVacuumBake.cpp
@@ -92,4 +92,9 @@
 
 		return TRUE;
 	}
+
+	int CVacuumBake::getIndexerOperationModeBaseValue()
+	{
+		return 30000;
+	}
 }
diff --git a/SourceCode/Bond/Servo/CVacuumBake.h b/SourceCode/Bond/Servo/CVacuumBake.h
index dc0c59f..ef0e1ea 100644
--- a/SourceCode/Bond/Servo/CVacuumBake.h
+++ b/SourceCode/Bond/Servo/CVacuumBake.h
@@ -21,6 +21,8 @@
         virtual int recvIntent(CPin* pPin, CIntent* pIntent);
         virtual BOOL glassWillArrive(CGlass* pGlass);
         virtual BOOL onPreStoredJob(int port, CJobDataB* pJobDataB);
+        virtual int getIndexerOperationModeBaseValue();
+
 	};
 }
 
diff --git a/SourceCode/Bond/Servo/Common.h b/SourceCode/Bond/Servo/Common.h
index cf7464a..c315229 100644
--- a/SourceCode/Bond/Servo/Common.h
+++ b/SourceCode/Bond/Servo/Common.h
@@ -209,6 +209,7 @@
 #define STEP_EQ_STORED_JOB15			_T("EQStoredJobReport15")
 #define STEP_EQ_DISPATCHINT_MODE_CHANGE	_T("EQDispatchingModeChangeCommand")
 #define STEP_EFEM_ROBOT_CMD				_T("EFEMRobotCmd")
+#define STEP_EFEM_IN_OP_MODE_CHANGE		_T("EFEMIndexerOperationModeChangeCommand")
 
 
 
@@ -282,7 +283,8 @@
 #define STEP_ID_FETCHED_OUT_JOB_REPORT13		0x5BB
 #define STEP_ID_FETCHED_OUT_JOB_REPORT14		0x5BC
 #define STEP_ID_FETCHED_OUT_JOB_REPORT15		0x5BD
-#define STEP_ID_DISPATCHING_MODE_CHANGE_REPLY	0x5E2
+#define STEP_ID_IN_OP_CMD_REPLY					0x5F0
+#define STEP_ID_DISPATCHING_MODE_CHANGE_REPLY	0x5F1
 #define STEP_ID_PORT1_TYPE_CHANGE				0x600
 #define STEP_ID_PORT2_TYPE_CHANGE				0x601
 #define STEP_ID_PORT3_TYPE_CHANGE				0x602
@@ -334,6 +336,7 @@
 #define STEP_ID_ROBOT_CMD_REPLY					0x6b0
 
 
+
 /* base alarm */
 #define BASE_ALARM_EFEM		10000
 #define BASE_ALARM_BONDER1	20000

--
Gitblit v1.9.3