From cbe189228810812547d16a3211ab0b174831f609 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期一, 24 三月 2025 11:56:04 +0800
Subject: [PATCH] 1.修复一个闪退问题(Glass列表为空仍要下传导致); 2.在CEquipment派生类中实现限制上游移动(如下在加工且加工数量有限制);

---
 SourceCode/Bond/Servo/CVacuumBake.cpp  |   10 +++++
 SourceCode/Bond/Servo/CFliper.cpp      |   10 +++++
 SourceCode/Bond/Servo/CLoadPort.h      |    1 
 SourceCode/Bond/Servo/CEFEM.h          |    1 
 SourceCode/Bond/Servo/CLoadPort.cpp    |   10 +++++
 SourceCode/Bond/Servo/CMeasurement.h   |    1 
 SourceCode/Bond/Servo/CVacuumBake.h    |    1 
 SourceCode/Bond/Servo/CBakeCooling.cpp |   10 +++++
 SourceCode/Bond/Servo/CMeasurement.cpp |   10 +++++
 SourceCode/Bond/Servo/CAligner.cpp     |   10 +++++
 SourceCode/Bond/Servo/CBakeCooling.h   |    1 
 SourceCode/Bond/Servo/CEquipment.cpp   |    6 ++
 SourceCode/Bond/Servo/CAligner.h       |    1 
 SourceCode/Bond/Servo/CEFEM.cpp        |   10 +++++
 SourceCode/Bond/Servo/CBonder.h        |    1 
 SourceCode/Bond/Servo/CBonder.cpp      |   10 +++++
 SourceCode/Bond/Servo/CFliper.h        |    1 
 17 files changed, 93 insertions(+), 1 deletions(-)

diff --git a/SourceCode/Bond/Servo/CAligner.cpp b/SourceCode/Bond/Servo/CAligner.cpp
index 6b76fd9..dc4a93b 100644
--- a/SourceCode/Bond/Servo/CAligner.cpp
+++ b/SourceCode/Bond/Servo/CAligner.cpp
@@ -58,4 +58,14 @@
 	{
 		return __super::recvIntent(pPin, pIntent);
 	}
+
+	BOOL CAligner::glassWillArrive(CGlass* pGlass)
+	{
+		BOOL bRet = __super::glassWillArrive(pGlass);
+		if (!bRet) {
+			return FALSE;
+		}
+
+		return m_glassList.empty();
+	}
 }
diff --git a/SourceCode/Bond/Servo/CAligner.h b/SourceCode/Bond/Servo/CAligner.h
index 8a6be18..acf53e1 100644
--- a/SourceCode/Bond/Servo/CAligner.h
+++ b/SourceCode/Bond/Servo/CAligner.h
@@ -19,6 +19,7 @@
         virtual void serialize(CArchive& ar);
         virtual void getAttributeVector(CAttributeVector& attrubutes);
         virtual int recvIntent(CPin* pPin, CIntent* pIntent);
+        virtual BOOL glassWillArrive(CGlass* pGlass);
 	};
 }
 
diff --git a/SourceCode/Bond/Servo/CBakeCooling.cpp b/SourceCode/Bond/Servo/CBakeCooling.cpp
index 1dcbc72..5e374ab 100644
--- a/SourceCode/Bond/Servo/CBakeCooling.cpp
+++ b/SourceCode/Bond/Servo/CBakeCooling.cpp
@@ -58,4 +58,14 @@
 	{
 		return __super::recvIntent(pPin, pIntent);
 	}
+
+	BOOL CBakeCooling::glassWillArrive(CGlass* pGlass)
+	{
+		BOOL bRet = __super::glassWillArrive(pGlass);
+		if (!bRet) {
+			return FALSE;
+		}
+
+		return (m_glassList.size() < 4);
+	}
 }
diff --git a/SourceCode/Bond/Servo/CBakeCooling.h b/SourceCode/Bond/Servo/CBakeCooling.h
index 22f3c14..6d85350 100644
--- a/SourceCode/Bond/Servo/CBakeCooling.h
+++ b/SourceCode/Bond/Servo/CBakeCooling.h
@@ -19,6 +19,7 @@
         virtual void serialize(CArchive& ar);
         virtual void getAttributeVector(CAttributeVector& attrubutes);
         virtual int recvIntent(CPin* pPin, CIntent* pIntent);
+        virtual BOOL glassWillArrive(CGlass* pGlass);
 	};
 }
 
diff --git a/SourceCode/Bond/Servo/CBonder.cpp b/SourceCode/Bond/Servo/CBonder.cpp
index f9f27b9..1bb185f 100644
--- a/SourceCode/Bond/Servo/CBonder.cpp
+++ b/SourceCode/Bond/Servo/CBonder.cpp
@@ -57,4 +57,14 @@
 	{
 		return __super::recvIntent(pPin, pIntent);
 	}
+
+	BOOL CBonder::glassWillArrive(CGlass* pGlass)
+	{
+		BOOL bRet = __super::glassWillArrive(pGlass);
+		if (!bRet) {
+			return FALSE;
+		}
+
+		return m_glassList.empty();
+	}
 }
diff --git a/SourceCode/Bond/Servo/CBonder.h b/SourceCode/Bond/Servo/CBonder.h
index 1785a5c..e6f9843 100644
--- a/SourceCode/Bond/Servo/CBonder.h
+++ b/SourceCode/Bond/Servo/CBonder.h
@@ -19,6 +19,7 @@
         virtual void serialize(CArchive& ar);
         virtual void getAttributeVector(CAttributeVector& attrubutes);
         virtual int recvIntent(CPin* pPin, CIntent* pIntent);
+        virtual BOOL glassWillArrive(CGlass* pGlass);
     };
 }
 
diff --git a/SourceCode/Bond/Servo/CEFEM.cpp b/SourceCode/Bond/Servo/CEFEM.cpp
index e68f73f..6b0548f 100644
--- a/SourceCode/Bond/Servo/CEFEM.cpp
+++ b/SourceCode/Bond/Servo/CEFEM.cpp
@@ -55,4 +55,14 @@
 	{
 		return __super::recvIntent(pPin, pIntent);
 	}
+
+	BOOL CEFEM::glassWillArrive(CGlass* pGlass)
+	{
+		BOOL bRet = __super::glassWillArrive(pGlass);
+		if (!bRet) {
+			return FALSE;
+		}
+
+		return m_glassList.empty();
+	}
 }
diff --git a/SourceCode/Bond/Servo/CEFEM.h b/SourceCode/Bond/Servo/CEFEM.h
index 76b0ded..35d8db2 100644
--- a/SourceCode/Bond/Servo/CEFEM.h
+++ b/SourceCode/Bond/Servo/CEFEM.h
@@ -19,6 +19,7 @@
         virtual void serialize(CArchive& ar);
         virtual void getAttributeVector(CAttributeVector& attrubutes);
         virtual int recvIntent(CPin* pPin, CIntent* pIntent);
+        virtual BOOL glassWillArrive(CGlass* pGlass);
     };
 }
 
diff --git a/SourceCode/Bond/Servo/CEquipment.cpp b/SourceCode/Bond/Servo/CEquipment.cpp
index c24767e..4baffcc 100644
--- a/SourceCode/Bond/Servo/CEquipment.cpp
+++ b/SourceCode/Bond/Servo/CEquipment.cpp
@@ -202,7 +202,7 @@
 		}
 
 		for (auto item : m_glassList) {
-			attrubutes.addAttribute(new CAttribute("Panel",
+			attrubutes.addAttribute(new CAttribute("Glass",
 				item->getID().c_str(), ""));
 		}
 	}
@@ -524,6 +524,10 @@
 
 		// 模拟取出第一张Panel,传送到下一环节
 		Lock();
+		if (m_glassList.empty()) {
+			Unlock();
+			return -2;
+		}
 		CGlass* pContext = m_glassList.front();
 		pContext->addRef();
 
diff --git a/SourceCode/Bond/Servo/CFliper.cpp b/SourceCode/Bond/Servo/CFliper.cpp
index cbf9a53..acd7654 100644
--- a/SourceCode/Bond/Servo/CFliper.cpp
+++ b/SourceCode/Bond/Servo/CFliper.cpp
@@ -57,4 +57,14 @@
 	{
 		return __super::recvIntent(pPin, pIntent);
 	}
+
+	BOOL CFliper::glassWillArrive(CGlass* pGlass)
+	{
+		BOOL bRet = __super::glassWillArrive(pGlass);
+		if (!bRet) {
+			return FALSE;
+		}
+
+		return m_glassList.empty();
+	}
 }
diff --git a/SourceCode/Bond/Servo/CFliper.h b/SourceCode/Bond/Servo/CFliper.h
index 2bb285f..a010953 100644
--- a/SourceCode/Bond/Servo/CFliper.h
+++ b/SourceCode/Bond/Servo/CFliper.h
@@ -19,6 +19,7 @@
         virtual void serialize(CArchive& ar);
         virtual void getAttributeVector(CAttributeVector& attrubutes);
         virtual int recvIntent(CPin* pPin, CIntent* pIntent);
+        virtual BOOL glassWillArrive(CGlass* pGlass);
 	};
 }
 
diff --git a/SourceCode/Bond/Servo/CLoadPort.cpp b/SourceCode/Bond/Servo/CLoadPort.cpp
index feef8e9..b881e5a 100644
--- a/SourceCode/Bond/Servo/CLoadPort.cpp
+++ b/SourceCode/Bond/Servo/CLoadPort.cpp
@@ -76,4 +76,14 @@
 
 		return __super::outputGlass(port);
 	}
+
+	BOOL CLoadPort::glassWillArrive(CGlass* pGlass)
+	{
+		BOOL bRet = __super::glassWillArrive(pGlass);
+		if (!bRet) {
+			return FALSE;
+		}
+
+		return (m_glassList.size() < 8);
+	}
 }
diff --git a/SourceCode/Bond/Servo/CLoadPort.h b/SourceCode/Bond/Servo/CLoadPort.h
index 355bd1d..3fa8afd 100644
--- a/SourceCode/Bond/Servo/CLoadPort.h
+++ b/SourceCode/Bond/Servo/CLoadPort.h
@@ -19,6 +19,7 @@
 		virtual void serialize(CArchive& ar);
 		virtual void getAttributeVector(CAttributeVector& attrubutes);
 		virtual int recvIntent(CPin* pPin, CIntent* pIntent);
+		virtual BOOL glassWillArrive(CGlass* pGlass);
 
 	public:
 		virtual int outputGlass(int port);
diff --git a/SourceCode/Bond/Servo/CMeasurement.cpp b/SourceCode/Bond/Servo/CMeasurement.cpp
index 217e092..34ff4e6 100644
--- a/SourceCode/Bond/Servo/CMeasurement.cpp
+++ b/SourceCode/Bond/Servo/CMeasurement.cpp
@@ -54,4 +54,14 @@
 	{
 		return __super::recvIntent(pPin, pIntent);
 	}
+
+	BOOL CMeasurement::glassWillArrive(CGlass* pGlass)
+	{
+		BOOL bRet = __super::glassWillArrive(pGlass);
+		if (!bRet) {
+			return FALSE;
+		}
+
+		return m_glassList.empty();
+	}
 }
diff --git a/SourceCode/Bond/Servo/CMeasurement.h b/SourceCode/Bond/Servo/CMeasurement.h
index 9b13681..28812a1 100644
--- a/SourceCode/Bond/Servo/CMeasurement.h
+++ b/SourceCode/Bond/Servo/CMeasurement.h
@@ -19,6 +19,7 @@
         virtual void serialize(CArchive& ar);
         virtual void getAttributeVector(CAttributeVector& attrubutes);
         virtual int recvIntent(CPin* pPin, CIntent* pIntent);
+        virtual BOOL glassWillArrive(CGlass* pGlass);
 	};
 }
 
diff --git a/SourceCode/Bond/Servo/CVacuumBake.cpp b/SourceCode/Bond/Servo/CVacuumBake.cpp
index 3a8a984..556d029 100644
--- a/SourceCode/Bond/Servo/CVacuumBake.cpp
+++ b/SourceCode/Bond/Servo/CVacuumBake.cpp
@@ -57,4 +57,14 @@
 	{
 		return __super::recvIntent(pPin, pIntent);
 	}
+
+	BOOL CVacuumBake::glassWillArrive(CGlass* pGlass)
+	{
+		BOOL bRet = __super::glassWillArrive(pGlass);
+		if (!bRet) {
+			return FALSE;
+		}
+
+		return m_glassList.empty();
+	}
 }
diff --git a/SourceCode/Bond/Servo/CVacuumBake.h b/SourceCode/Bond/Servo/CVacuumBake.h
index 6bd084e..f8b4bff 100644
--- a/SourceCode/Bond/Servo/CVacuumBake.h
+++ b/SourceCode/Bond/Servo/CVacuumBake.h
@@ -19,6 +19,7 @@
         virtual void serialize(CArchive& ar);
         virtual void getAttributeVector(CAttributeVector& attrubutes);
         virtual int recvIntent(CPin* pPin, CIntent* pIntent);
+        virtual BOOL glassWillArrive(CGlass* pGlass);
 	};
 }
 

--
Gitblit v1.9.3