From 7096025175b6d100923dcd66c1face07d2e28555 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期四, 24 七月 2025 15:20:21 +0800
Subject: [PATCH] 1. 完善获取配方列表的功能 2. 添加获取配方超时警告

---
 SourceCode/Bond/Servo/CRecipesManager.cpp |   16 +++++++-
 SourceCode/Bond/Servo/CEFEM.cpp           |   22 ++++++-----
 SourceCode/Bond/Servo/CRecipeList.cpp     |    8 ++-
 SourceCode/Bond/Servo/CRecipeList.h       |    2 
 SourceCode/Bond/Servo/CRecipesManager.h   |    1 
 SourceCode/Bond/Servo/PageRecipe.cpp      |   12 +++---
 6 files changed, 39 insertions(+), 22 deletions(-)

diff --git a/SourceCode/Bond/Servo/CEFEM.cpp b/SourceCode/Bond/Servo/CEFEM.cpp
index fbd1b22..99c833a 100644
--- a/SourceCode/Bond/Servo/CEFEM.cpp
+++ b/SourceCode/Bond/Servo/CEFEM.cpp
@@ -547,16 +547,18 @@
 
 		{
 			// master recipe list report
-			CEqReadStep* pStep = new CEqReadStep(0x6955, 250 * 2,
-			[&](void* pFrom, int code, const char* pszData, size_t size) -> int {
-				if (code == ROK && pszData != nullptr && size > 0) {
-					// 此处解释配方数据
-					short ret = decodeRecipeListReport(pszData, size);
-					pStep->setReturnCode(ret);
-				}
-				pStep->setReturnCode(MRLRC_OK);
-				return -1;
-			});
+			CEqReadStep* pStep = new CEqReadStep(0x6955, 255 * 2,
+				[&](void* pFrom, int code, const char* pszData, size_t size) -> int {
+					/*CEqReadStep* pTmpStep = dynamic_cast<CEqReadStep*>((CEqReadStep*)pFrom);*/
+					CEqReadStep* pTmpStep = (CEqReadStep*)pFrom;
+					short ret = MRLRC_OK;
+					if (code == ROK && pszData != nullptr && size > 0) {
+						// 此处解释配方数据
+						ret = decodeRecipeListReport(pszData, size);
+					}
+					pTmpStep->setReturnCode(ret);
+					return -1;
+				});
 			pStep->setName(STEP_EQ_MASTER_RECIPE_LIST);
 			pStep->setWriteSignalDev(0x4b);
 			pStep->setReturnDev(0x91d);
diff --git a/SourceCode/Bond/Servo/CRecipeList.cpp b/SourceCode/Bond/Servo/CRecipeList.cpp
index 62306a3..01eec82 100644
--- a/SourceCode/Bond/Servo/CRecipeList.cpp
+++ b/SourceCode/Bond/Servo/CRecipeList.cpp
@@ -26,7 +26,7 @@
 		return m_nUnitNo;
 	}
 
-	int CRecipeList::addRecipePacket(int totalGroup, int currentGroup, const char* pszData, size_t size)
+	int CRecipeList::addRecipePacket(int totalCount, int totalGroup, int currentGroup, const char* pszData, size_t size)
 	{
 		if (m_nToatlGroupCount == 0) m_nToatlGroupCount = totalGroup;
 		if (m_nToatlGroupCount != totalGroup) {
@@ -47,7 +47,9 @@
 		for (int i = 0; i < size; i += 4) {
 			int index = CToolUnits::toInt16(&pszData[i]);
 			short id = CToolUnits::toInt16(&pszData[i + 2]);
-			addRecipe(index, id);
+			if (index != 0 && id != 0) {
+				addRecipe(index, id);
+			}
 		}
 
 		if (m_nCurrentGroupCount == m_nToatlGroupCount) {
@@ -67,7 +69,7 @@
 		}
 
 		m_ids[index] = id;
-		return 0;
+		return (int)m_ids.size();
 	}
 
 	std::map<int, short>& CRecipeList::getIds()
diff --git a/SourceCode/Bond/Servo/CRecipeList.h b/SourceCode/Bond/Servo/CRecipeList.h
index 7cb4577..74e89c3 100644
--- a/SourceCode/Bond/Servo/CRecipeList.h
+++ b/SourceCode/Bond/Servo/CRecipeList.h
@@ -12,7 +12,7 @@
 
 	public:
 		int getUnitNo();
-		int addRecipePacket(int totalGroup, int currentGroup, const char* pszData, size_t size);
+		int addRecipePacket(int totalCount,int totalGroup, int currentGroup, const char* pszData, size_t size);
 		int addRecipe(int index, short id);
 		std::map<int, short>& getIds();
 		void reset();
diff --git a/SourceCode/Bond/Servo/CRecipesManager.cpp b/SourceCode/Bond/Servo/CRecipesManager.cpp
index 591dfa7..354aaac 100644
--- a/SourceCode/Bond/Servo/CRecipesManager.cpp
+++ b/SourceCode/Bond/Servo/CRecipesManager.cpp
@@ -86,7 +86,18 @@
 		if (m_onSyncingStateChanged != nullptr) {
 			m_onSyncingStateChanged(m_nSyncStatus);
 		}
+	}
 
+	void CRecipesManager::syncTimeout()
+	{
+		lock();
+		m_nSyncStatus = SS_TIMEOUT;
+		m_nTimeoutCount = 0;
+		unlock();
+
+		if (m_onSyncingStateChanged != nullptr) {
+			m_onSyncingStateChanged(m_nSyncStatus);
+		}
 	}
 
 	short CRecipesManager::decodeRecipeListReport(const char* pszData, size_t size)
@@ -150,7 +161,7 @@
 
 		}
 		else if (reportType == RT_REQUEST_FROM_EAS) {
-			int nRet = pRecipeList->addRecipePacket(toatlGroupCount, currentGroupCount, pszIdsData, 250 * 2);
+			int nRet = pRecipeList->addRecipePacket(totalMasterRecipeCount, toatlGroupCount, currentGroupCount, pszIdsData, 250 * 2);
 			if (MRLRC_CURRENT_RECIPE_COMPLETE == nRet) {
 				lock();
 				for (auto item : m_mapRecipes) {
@@ -304,9 +315,10 @@
 			if (m_nSyncStatus == SS_SYNCING) {
 				m_nTimeoutCount++;
 				if (m_nTimeoutCount > 10) {
-					m_nSyncStatus = SS_TIMEOUT;
 					unlock();
+					syncTimeout();
 					TRACE("CRecipesManager::TimeoutCheckWorkingProc 超时退出\n");
+					lock();
 				}
 			}
 
diff --git a/SourceCode/Bond/Servo/CRecipesManager.h b/SourceCode/Bond/Servo/CRecipesManager.h
index 33252aa..388fe4e 100644
--- a/SourceCode/Bond/Servo/CRecipesManager.h
+++ b/SourceCode/Bond/Servo/CRecipesManager.h
@@ -24,6 +24,7 @@
 		unsigned TimeoutCheckWorkingProc();
 		int syncing();
 		void syncFailed();
+		void syncTimeout();
 		short decodeRecipeListReport(const char* pszData, size_t size);
 		short decodeRecipeParameterReport(const char* pszData, size_t size);
 		CRecipeList* getRecipeListFromTemp(int unitNo);
diff --git a/SourceCode/Bond/Servo/PageRecipe.cpp b/SourceCode/Bond/Servo/PageRecipe.cpp
index 2ffdfdb..6863f01 100644
--- a/SourceCode/Bond/Servo/PageRecipe.cpp
+++ b/SourceCode/Bond/Servo/PageRecipe.cpp
@@ -189,12 +189,12 @@
 	pListCtrl->InsertColumn(0, _T(""), LVCFMT_RIGHT, 0); // 闅愯棌鍒�
 	pListCtrl->InsertColumn(1, _T("No."), LVCFMT_LEFT, width[1]);
 	pListCtrl->InsertColumn(2, _T("PPID/Recipe ID"), LVCFMT_LEFT, width[2]);
-	pListCtrl->InsertColumn(3, _T("EFEM"), LVCFMT_LEFT, width[3]);
+	pListCtrl->InsertColumn(3, _T("鐪熺┖鐑樼儰"), LVCFMT_LEFT, width[6]);
 	pListCtrl->InsertColumn(4, _T("Bonder1"), LVCFMT_LEFT, width[4]);
 	pListCtrl->InsertColumn(5, _T("Bonder2"), LVCFMT_LEFT, width[5]);
-	pListCtrl->InsertColumn(6, _T("鐪熺┖鐑樼儰"), LVCFMT_LEFT, width[6]);
-	pListCtrl->InsertColumn(7, _T("鍚庣儤鍐峰嵈"), LVCFMT_LEFT, width[7]);
-	pListCtrl->InsertColumn(8, _T("绮惧害妫�鏌�"), LVCFMT_LEFT, width[8]);
+	pListCtrl->InsertColumn(6, _T("鍚庣儤鍐峰嵈"), LVCFMT_LEFT, width[7]);
+	pListCtrl->InsertColumn(7, _T("绮惧害妫�鏌�"), LVCFMT_LEFT, width[8]);
+	pListCtrl->InsertColumn(8, _T("EFEM"), LVCFMT_LEFT, width[3]);
 	pListCtrl->InsertColumn(9, _T("鍒涘缓鏃堕棿"), LVCFMT_LEFT, width[9]);
 	pListCtrl->InsertColumn(10, _T("鎻忚堪"), LVCFMT_LEFT, width[10]);
 	pListCtrl->SetColumnWidth(10, LVSCW_AUTOSIZE_USEHEADER);
@@ -441,9 +441,9 @@
 		// enable port
 		CMsgDlg msgDlg("璇风瓑寰�", "姝e湪鑾峰彇閰嶆柟...");
 		pEq->masterRecipeListRequest(0, [&](int status) -> void {
-			if (status == SS_FAILED) {
+			if (status == SS_FAILED || status == SS_TIMEOUT) {
 				CString strMsg;
-				strMsg.Format(_T("鑾峰彇閰嶆柟澶辫触锛�"));
+				strMsg.Format(status == SS_FAILED ? _T("鑾峰彇閰嶆柟澶辫触锛�") : _T("鑾峰彇閰嶆柟瓒呮椂锛�"));
 				msgDlg.DelayClose(3000);
 				msgDlg.SetIcon(MSG_BOX_ERROR);
 				msgDlg.SetTitle(_T("鎿嶄綔澶辫触"));

--
Gitblit v1.9.3