From 6cd9f24e01c7ecbb7ad47137677590d1d4ae2f04 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期一, 24 三月 2025 08:44:06 +0800
Subject: [PATCH] 1.将CPanel修改为CGlass

---
 SourceCode/Bond/Servo/CEquipment.cpp |  129 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 129 insertions(+), 0 deletions(-)

diff --git a/SourceCode/Bond/Servo/CEquipment.cpp b/SourceCode/Bond/Servo/CEquipment.cpp
index 1b29fcd..c24767e 100644
--- a/SourceCode/Bond/Servo/CEquipment.cpp
+++ b/SourceCode/Bond/Servo/CEquipment.cpp
@@ -190,6 +190,21 @@
 			attrubutes.addAttribute(new CAttribute(szTemp,
 				m_bVCREnable[i] ? _T("Enable") : _T("Disable"), ""));
 		}
+
+		for (auto item : m_inputPins) {
+			attrubutes.addAttribute(new CAttribute(item->getName().c_str(),
+				std::to_string((int)item->getType()).c_str(), ""));
+		}
+
+		for (auto item : m_outputPins) {
+			attrubutes.addAttribute(new CAttribute(item->getName().c_str(),
+				std::to_string((int)item->getType()).c_str(), ""));
+		}
+
+		for (auto item : m_glassList) {
+			attrubutes.addAttribute(new CAttribute("Panel",
+				item->getID().c_str(), ""));
+		}
 	}
 
 	void CEquipment::setReadBitBlock(unsigned int start, unsigned int end)
@@ -435,6 +450,120 @@
 
 	int CEquipment::recvIntent(CPin* pPin, CIntent* pIntent)
 	{
+		ASSERT(pPin);
+		CPin* pFromPin = pPin->getConnectedPin();
+		ASSERT(pFromPin);
+		CEquipment* pFromEq = pFromPin->getEquipment();
+		ASSERT(pFromEq);
+
+		LOGI("<CEquipment><%s-%s>收到来自<%s.%s>的Intent<%d,%s,0x%x>",
+			this->getName().c_str(),
+			pPin->getName().c_str(),
+			pFromEq->getName().c_str(),
+			pFromPin->getName().c_str(),
+			pIntent->getCode(),
+			pIntent->getMsg(),
+			pIntent->getContext());
+
+
+
+		// 以下解释处理数据
+		int code = pIntent->getCode();
+
+
+		// 测试
+		if (code == FLOW_TEST) {
+			AfxMessageBox(pIntent->getMsg());
+			return FLOW_ACCEPT;
+		}
+
+
+		// 信号
+		if (code == FLOW_SIGNAL) {
+			return FLOW_ACCEPT;
+		}
+
+
+		// 数据
+		if (code == FLOW_SIGNAL) {
+			return FLOW_ACCEPT;
+		}
+
+
+		// 物料
+		if (code == FLOW_MOVE_MATERIAL) {
+			CGlass* pGlass = (CGlass*)pIntent->getContext();
+			ASSERT(pGlass);
+			if (!glassWillArrive(pGlass)) {
+				return FLOW_REJECT;
+			}
+			return glassArrived(pGlass);
+		}
+
+
+
+		return FLOW_ACCEPT;
+	}
+
+	int CEquipment::outputGlass(int port)
+	{
+		CPin* pOutPin = nullptr;
+		if (port == 0) {
+			pOutPin = getPin("Out");
+			if (pOutPin == nullptr) {
+				pOutPin = getPin("Out1");
+			}
+		}
+		else if (port == 1) {
+			pOutPin = getPin("Out2");
+		}
+		if (pOutPin == nullptr) {
+			return -1;
+		}
+
+
+		// 模拟取出第一张Panel,传送到下一环节
+		Lock();
+		CGlass* pContext = m_glassList.front();
+		pContext->addRef();
+
+		CIntent intent(FLOW_MOVE_MATERIAL, "", pContext);
+		int nRet = pOutPin->sendIntent(&intent);
+		if (nRet == FLOW_REJECT) {
+			LOGE("<CEquipment>对方拒绝接收Intent.");
+		}
+		else if (nRet == FLOW_ACCEPT) {
+			m_glassList.pop_front();
+			pContext->release();		// 添加到列队时addRef, 取出时release
+		}
+
+		pContext->release();
+		Unlock();
+
 		return 0;
 	}
+
+	BOOL CEquipment::glassWillArrive(CGlass* pGlass)
+	{
+		return TRUE;
+	}
+
+	int CEquipment::glassArrived(CGlass* pGlass)
+	{
+		Lock();
+		pGlass->addRef();
+		m_glassList.push_back(pGlass);
+		Unlock();
+		return FLOW_ACCEPT;
+	}
+
+	void CEquipment::addGlassToList(CGlass* pGlass)
+	{
+		ASSERT(pGlass);
+
+		Lock();
+		pGlass->addRef();
+		m_glassList.push_back(pGlass);
+		Unlock();
+	}
 }

--
Gitblit v1.9.3