From f56051fa3102feb35ea60650ebda80f49e62d025 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期二, 05 八月 2025 14:54:24 +0800
Subject: [PATCH] 1. SGMeasurement实现规划的地址 2. 优化读取位时输入的地址不是8的倍数的问题 3. 添加读写心跳的功能
---
SourceCode/Bond/Servo/PortConfigurationDlg.cpp | 124 +++++++++++++++++++++++++++++++++++++++-
1 files changed, 119 insertions(+), 5 deletions(-)
diff --git a/SourceCode/Bond/Servo/PortConfigurationDlg.cpp b/SourceCode/Bond/Servo/PortConfigurationDlg.cpp
index 891aaac..8b0f98f 100644
--- a/SourceCode/Bond/Servo/PortConfigurationDlg.cpp
+++ b/SourceCode/Bond/Servo/PortConfigurationDlg.cpp
@@ -12,6 +12,9 @@
#include "ServoCommo.h"
+
+#define CHECKBOX_ALL_ID 0x1234
+
// CPortConfigurationDlg 瀵硅瘽妗�
IMPLEMENT_DYNAMIC(CPortConfigurationDlg, CDialogEx)
@@ -25,6 +28,8 @@
m_pPort[2] = dynamic_cast<SERVO::CLoadPort*>(theApp.m_model.m_master.getEquipment(EQ_ID_LOADPORT3));
m_pPort[3] = dynamic_cast<SERVO::CLoadPort*>(theApp.m_model.m_master.getEquipment(EQ_ID_LOADPORT4));
m_nCurSelPort = -1;
+ m_pCheckBox = nullptr;
+ m_bCheckedAll = FALSE;
}
CPortConfigurationDlg::~CPortConfigurationDlg()
@@ -91,6 +96,7 @@
}
}
}
+ m_pCheckBox->SetCheck(IsCheckedAll() ? BST_CHECKED : BST_UNCHECKED);
}
void CPortConfigurationDlg::InitGrid()
@@ -123,7 +129,8 @@
m_wndGrid.SetColumnWidth(nColIdx, 50);
m_wndGrid.SetItemText(0, nColIdx++, _T("Slot ID"));
m_wndGrid.SetColumnWidth(nColIdx, 60);
- m_wndGrid.SetItemText(0, nColIdx++, _T("鍚敤"));
+ m_wndGrid.SetItemText(0, nColIdx++, _T("Glass ID"));
+
// 璁剧疆琛屼负鏍峰紡
m_wndGrid.SetFixedRowSelection(FALSE);
@@ -146,6 +153,17 @@
for (int i = 0; i < nRows; ++i) {
m_wndGrid.SetRowHeight(i, nEachRowHeight);
}
+
+ CRect rect;
+ BOOL bOK = m_wndGrid.GetCellRect(0, 1, rect);
+ m_pCheckBox = new CCustomCheckBox();
+ m_pCheckBox->Create(_T("閫夋嫨鎵�鏈�"),
+ WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, // 鑷姩鍕鹃��
+ CRect(0, 0, 150, 32), &m_wndGrid, CHECKBOX_ALL_ID);
+ m_pCheckBox->SetFont(GetFont());
+ m_pCheckBox->MoveWindow(rect.left + 5, rect.top + 3, 150, rect.Height() - 6);
+ m_pCheckBox->SetBackgroundColor(g_nGridFixCellColor);
+ m_pCheckBox->SetNotifyHwnd(GetSafeHwnd());
}
void CPortConfigurationDlg::DoDataExchange(CDataExchange* pDX)
@@ -161,6 +179,10 @@
BEGIN_MESSAGE_MAP(CPortConfigurationDlg, CDialogEx)
ON_CBN_SELCHANGE(IDC_COMBO_PORT, &CPortConfigurationDlg::OnSelchangeComboPort)
ON_BN_CLICKED(IDC_BUTTON_APPLY, &CPortConfigurationDlg::OnBnClickedButtonApply)
+ ON_MESSAGE(WM_CHECKBOX_STATE_CHANGED, &CPortConfigurationDlg::OnCheckAllClicked)
+ ON_WM_DESTROY()
+ ON_BN_CLICKED(IDC_BUTTON_PROCESS_START, &CPortConfigurationDlg::OnBnClickedButtonProcessStart)
+ ON_BN_CLICKED(IDC_BUTTON_PROCESS_CANCEL, &CPortConfigurationDlg::OnBnClickedButtonProcessCancel)
END_MESSAGE_MAP()
@@ -203,7 +225,8 @@
LoadPortConfigToUI(m_pPort[0]); // 榛樿鍔犺浇绗竴涓鍙g殑閰嶇疆
// 璁剧疆瀵硅瘽妗嗘爣棰�
- if (0 <= m_nCurSelPort && m_nCurSelPort <= 3) {
+ BOOL bAutoPopup = 0 <= m_nCurSelPort && m_nCurSelPort <= 3;
+ if (bAutoPopup) {
CString strTitle;
strTitle.Format(_T("%s Configuration"), ports[m_nCurSelPort]);
SetWindowText(strTitle);
@@ -212,6 +235,10 @@
SetWindowText(_T("Port Configuration"));
}
+
+ // Porcess Start / Process Cancel 鎸夐挳鐘舵��
+ GetDlgItem(IDC_BUTTON_PROCESS_START)->EnableWindow(FALSE);
+ GetDlgItem(IDC_BUTTON_PROCESS_CANCEL)->EnableWindow(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// 寮傚父: OCX 灞炴�ч〉搴旇繑鍥� FALSE
@@ -226,6 +253,12 @@
}
// 鍔犺浇閫変腑绔彛鐨勯厤缃埌 UI
+ for (int i = 1; i <= 8; i++) {
+ m_wndGrid.SetItemText(i, 0, "");
+ m_wndGrid.SetItemText(i, 1, "");
+ m_wndGrid.SetCellType(i, 1, RUNTIME_CLASS(CGridCellNumeric));
+ }
+ m_wndGrid.Invalidate();
LoadPortConfigToUI(m_pPort[selPort]);
}
@@ -284,7 +317,7 @@
}
// 鑾峰彇 Grid 琛ㄦ牸涓� Slot 鐘舵�侊紙绗�1~8琛岋級
- for (int i = 1; i <= 8; ++i) {
+ for (int i = 1; i <= SLOT_MAX; ++i) {
SERVO::CGlass* pGlass = (SERVO::CGlass*)m_wndGrid.GetItemData(i, 0);
if (pGlass != nullptr) {
CGridCellCheck* pCheck = dynamic_cast<CGridCellCheck*>(m_wndGrid.GetCell(i, 1));
@@ -297,9 +330,90 @@
pJobDataS->setProductId(config.strProductID.c_str());
pJobDataS->setOperationId(config.strOperationID.c_str());
pJobDataS->setMaterialsType(config.nMaterialType);
+
+ RecipeInfo stRecipeInfo = RecipeManager::getInstance().getRecipeByPPID(config.strRecipe);
+ std::vector<DeviceRecipe> vecRecipeInfo = stRecipeInfo.vecDeviceList;
+
+ for (const auto& info : vecRecipeInfo) {
+ const std::string& name = info.strDeviceName;
+ short nRecipeID = (short)info.nRecipeID;
+
+ if (name == EQ_NAME_EFEM) {
+ pJobDataS->setDeviceRecipeId(0, nRecipeID);
+ }
+ else if (name == EQ_NAME_BONDER1) {
+ pJobDataS->setDeviceRecipeId(1, nRecipeID);
+ }
+ else if (name == EQ_NAME_BONDER2) {
+ pJobDataS->setDeviceRecipeId(2, nRecipeID);
+ }
+ else if (name == EQ_NAME_BAKE_COOLING) {
+ pJobDataS->setDeviceRecipeId(3, nRecipeID);
+ }
+ else if (name == EQ_NAME_VACUUMBAKE) {
+ pJobDataS->setDeviceRecipeId(4, nRecipeID);
+ }
+ else if (name == EQ_NAME_MEASUREMENT) {
+ pJobDataS->setDeviceRecipeId(5, nRecipeID);
+ }
+ }
+ }
+ }
+
+ GetDlgItem(IDC_BUTTON_PROCESS_START)->EnableWindow(TRUE);
+ GetDlgItem(IDC_BUTTON_PROCESS_CANCEL)->EnableWindow(TRUE);
+}
+
+void CPortConfigurationDlg::OnDestroy()
+{
+ CDialogEx::OnDestroy();
+
+ if (m_pCheckBox != nullptr) {
+ m_pCheckBox->DestroyWindow();
+ delete m_pCheckBox;
+ m_pCheckBox = nullptr;
+ }
+}
+
+LRESULT CPortConfigurationDlg::OnCheckAllClicked(WPARAM wParam, LPARAM lParam)
+{
+ UINT ctrlID = (UINT)wParam;
+ BOOL bChecked = (BOOL)lParam;
+ for (int i = 1; i <= SLOT_MAX; ++i) {
+ CGridCellCheck* pCheck = dynamic_cast<CGridCellCheck*>(m_wndGrid.GetCell(i, 1));
+ if (pCheck != nullptr) {
+ pCheck->SetCheck(bChecked);
}
}
- OnOK();
-}
\ No newline at end of file
+ return 0;
+}
+
+BOOL CPortConfigurationDlg::IsCheckedAll()
+{
+ for (int i = 1; i <= SLOT_MAX; ++i) {
+ CGridCellCheck* pCheck = dynamic_cast<CGridCellCheck*>(m_wndGrid.GetCell(i, 1));
+ if (pCheck != nullptr) {
+ if (!pCheck->GetCheck()) return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+void CPortConfigurationDlg::OnBnClickedButtonProcessStart()
+{
+ int selPort = (0 <= m_nCurSelPort && m_nCurSelPort <= 3) ? m_nCurSelPort
+ : m_comboPort.GetCurSel();
+ if (selPort < 0 || selPort >= 4) return;
+ m_pPort[selPort]->sendCassetteCtrlCmd(CCC_PROCESS_START, nullptr, 0, 0, 0, nullptr, nullptr);
+}
+
+void CPortConfigurationDlg::OnBnClickedButtonProcessCancel()
+{
+ int selPort = (0 <= m_nCurSelPort && m_nCurSelPort <= 3) ? m_nCurSelPort
+ : m_comboPort.GetCurSel();
+ if (selPort < 0 || selPort >= 4) return;
+ m_pPort[selPort]->sendCassetteCtrlCmd(CCC_PROCESS_CANCEL, nullptr, 0, 0, 0, nullptr, nullptr);
+}
--
Gitblit v1.9.3