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