From 2a803976ed12e59f3e082e7c08941ef5004e6ea1 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期二, 20 五月 2025 11:40:10 +0800
Subject: [PATCH] 1. 添加机器臂命令配置界面
---
SourceCode/Bond/Servo/CPageGraph2.cpp | 45 ++--
SourceCode/Bond/Servo/Servo.vcxproj | 4
SourceCode/Bond/Servo/Servo.vcxproj.filters | 4
SourceCode/Bond/Servo/resource.h | 0
SourceCode/Bond/Servo/CRobotCmdContainerDlg.cpp | 149 ++++++++++++++++
SourceCode/Bond/Servo/PageRobotCmd.h | 42 ++++
SourceCode/Bond/Servo/Servo.rc | 0
SourceCode/Bond/Servo/CRobotCmdContainerDlg.h | 40 ++++
SourceCode/Bond/Servo/PageRobotCmd.cpp | 208 +++++++++++++++++++++++
9 files changed, 473 insertions(+), 19 deletions(-)
diff --git a/SourceCode/Bond/Servo/CPageGraph2.cpp b/SourceCode/Bond/Servo/CPageGraph2.cpp
index 83e917f..cbce17f 100644
--- a/SourceCode/Bond/Servo/CPageGraph2.cpp
+++ b/SourceCode/Bond/Servo/CPageGraph2.cpp
@@ -12,6 +12,7 @@
#include "CPagePortProperty.h"
#include "CPageCassetteCtrlCmd.h"
#include "CJobDataB.h"
+#include "CRobotCmdContainerDlg.h"
// CPageGraph2 瀵硅瘽妗�
@@ -251,26 +252,32 @@
if (pEquipment->getID() == EQ_ID_EFEM) {
SERVO::CEFEM* pEFEM = (SERVO::CEFEM*)pEquipment;
+ //SERVO::ROBOT_CMD_PARAM cmds[4];
+ //cmds[0].sequenceNo = 1;
+ //cmds[0].rcmd = (short)SERVO::RCMD::Move;
+ //cmds[0].armNo = 1;
+ //cmds[0].getPosition = 1;
+ //cmds[0].putPosition = 2;
+ //cmds[0].getSlotNo = 3;
+ //cmds[0].putSlotNo = 4;
+ //cmds[0].subCmd = 5;
+ //cmds[1].sequenceNo = 2;
+ //cmds[1].rcmd = (short)SERVO::RCMD::Transfer;
+ //cmds[1].armNo = 2;
+ //cmds[1].getPosition = 6;
+ //cmds[1].putPosition = 7;
+ //cmds[1].getSlotNo = 8;
+ //cmds[1].putSlotNo = 9;
+ //cmds[1].subCmd = 10;
+ //pEFEM->robotCmds(cmds, 2);
-
- SERVO::ROBOT_CMD_PARAM cmds[4];
- cmds[0].sequenceNo = 1;
- cmds[0].rcmd = (short)SERVO::RCMD::Move;
- cmds[0].armNo = 1;
- cmds[0].getPosition = 1;
- cmds[0].putPosition = 2;
- cmds[0].getSlotNo = 3;
- cmds[0].putSlotNo = 4;
- cmds[0].subCmd = 5;
- cmds[1].sequenceNo = 2;
- cmds[1].rcmd = (short)SERVO::RCMD::Transfer;
- cmds[1].armNo = 2;
- cmds[1].getPosition = 6;
- cmds[1].putPosition = 7;
- cmds[1].getSlotNo = 8;
- cmds[1].putSlotNo = 9;
- cmds[1].subCmd = 10;
- pEFEM->robotCmds(cmds, 2);
+ CRobotCmdContainerDlg dlg;
+ if (dlg.DoModal() == IDOK) {
+ std::vector<SERVO::ROBOT_CMD_PARAM>& cmds = dlg.GetResultCmds();
+ if (!cmds.empty()) {
+ pEFEM->robotCmds(cmds.data(), (int)cmds.size());
+ }
+ }
}
diff --git a/SourceCode/Bond/Servo/CRobotCmdContainerDlg.cpp b/SourceCode/Bond/Servo/CRobotCmdContainerDlg.cpp
new file mode 100644
index 0000000..9a9601a
--- /dev/null
+++ b/SourceCode/Bond/Servo/CRobotCmdContainerDlg.cpp
@@ -0,0 +1,149 @@
+锘�// CRobotCmdContainerDlg.cpp: 瀹炵幇鏂囦欢
+//
+
+#include "stdafx.h"
+#include "Servo.h"
+#include "afxdialogex.h"
+#include "CRobotCmdContainerDlg.h"
+
+
+// CRobotCmdContainerDlg 瀵硅瘽妗�
+
+IMPLEMENT_DYNAMIC(CRobotCmdContainerDlg, CDialogEx)
+
+CRobotCmdContainerDlg::CRobotCmdContainerDlg(CWnd* pParent /*=nullptr*/)
+ : CDialogEx(IDD_DIALOG_ROBOT_CMD_CONTAINER, pParent)
+{
+
+}
+
+CRobotCmdContainerDlg::~CRobotCmdContainerDlg()
+{
+}
+
+std::vector<SERVO::ROBOT_CMD_PARAM>& CRobotCmdContainerDlg::GetResultCmds()
+{
+ return m_cmdResult;
+}
+
+void CRobotCmdContainerDlg::DoDataExchange(CDataExchange* pDX)
+{
+ CDialogEx::DoDataExchange(pDX);
+ DDX_Control(pDX, IDC_CHECK_ENABLE1, m_chkEnable[0]);
+ DDX_Control(pDX, IDC_CHECK_ENABLE2, m_chkEnable[1]);
+ DDX_Control(pDX, IDC_CHECK_ENABLE3, m_chkEnable[2]);
+ DDX_Control(pDX, IDC_CHECK_ENABLE4, m_chkEnable[3]);
+ DDX_Control(pDX, IDC_STATIC_PLACE1, m_placeHolder[0]);
+ DDX_Control(pDX, IDC_STATIC_PLACE2, m_placeHolder[1]);
+ DDX_Control(pDX, IDC_STATIC_PLACE3, m_placeHolder[2]);
+ DDX_Control(pDX, IDC_STATIC_PLACE4, m_placeHolder[3]);
+}
+
+
+BEGIN_MESSAGE_MAP(CRobotCmdContainerDlg, CDialogEx)
+ ON_BN_CLICKED(IDC_CHECK_ENABLE1, &CRobotCmdContainerDlg::OnCheckEnable1)
+ ON_BN_CLICKED(IDC_CHECK_ENABLE2, &CRobotCmdContainerDlg::OnCheckEnable2)
+ ON_BN_CLICKED(IDC_CHECK_ENABLE3, &CRobotCmdContainerDlg::OnCheckEnable3)
+ ON_BN_CLICKED(IDC_CHECK_ENABLE4, &CRobotCmdContainerDlg::OnCheckEnable4)
+END_MESSAGE_MAP()
+
+
+// CRobotCmdContainerDlg 娑堟伅澶勭悊绋嬪簭
+
+BOOL CRobotCmdContainerDlg::OnInitDialog()
+{
+ CDialogEx::OnInitDialog();
+
+ // TODO: 鍦ㄦ娣诲姞棰濆鐨勫垵濮嬪寲
+ constexpr int kPageCount = 4;
+ constexpr int kColumns = 2;
+ constexpr int kRows = 2;
+ constexpr int kMargin = 10;
+ constexpr int kCheckboxHeight = 20;
+ constexpr int kBorderPadding = 2;
+ constexpr int kButtonHeight = 40;
+
+ // 瀛愰〉闈㈠昂瀵革紙浠庡崰浣嶉潤鎬佹鍙栵級
+ CSize pageSize;
+ CRect rcFrame[kPageCount];
+
+ for (int i = 0; i < kPageCount; ++i)
+ {
+ m_placeHolder[i].GetWindowRect(&rcFrame[i]);
+ ScreenToClient(&rcFrame[i]);
+
+ // 璁板綍椤甸潰灏哄锛堝亣璁惧叏閮ㄤ竴鏍凤級
+ if (i == 0) {
+ pageSize = rcFrame[i].Size();
+ }
+
+ // 鏀剧疆鍕鹃�夋鍦ㄩ潤鎬佹涓婃柟
+ CRect rcCheck = rcFrame[i];
+ rcCheck.bottom = rcCheck.top;
+ rcCheck.top -= kCheckboxHeight;
+ rcCheck.bottom += 2;
+ rcCheck.left += 2;
+ rcCheck.right = rcCheck.left + 60;
+ m_chkEnable[i].MoveWindow(rcCheck);
+ m_chkEnable[i].ShowWindow(SW_SHOW);
+
+ // 鍒涘缓瀛愰〉闈紝缂╄繘鍘讳竴鐐归伩鍏嶉伄杈规
+ CRect rcShrinked = rcFrame[i];
+ rcShrinked.DeflateRect(kBorderPadding, kBorderPadding);
+ m_pageRobotCmd[i].Create(IDD_PAGE_ROBOT_CMD, this);
+ m_pageRobotCmd[i].MoveWindow(rcShrinked);
+ m_pageRobotCmd[i].ShowWindow(SW_SHOW);
+ m_pageRobotCmd[i].EnableWindow(FALSE);
+ m_pageRobotCmd[i].SetSequenceNo(i + 1);
+ }
+
+ // 璁$畻鏁翠綋瀹介珮
+ int totalWidth = kMargin + kColumns * (pageSize.cx + kMargin);
+ int totalHeight = kMargin + kRows * (pageSize.cy + kCheckboxHeight + kMargin) + kButtonHeight;
+
+ // 鏀剧疆鎸夐挳
+ CSize btnSize(80, 28);
+ int btnSpacing = 10;
+ int groupWidth = btnSize.cx * 2 + btnSpacing;
+ int btnStartX = (totalWidth - groupWidth) / 2;
+ int btnY = totalHeight - kButtonHeight + (kButtonHeight - btnSize.cy) / 2;
+
+ if (CWnd* pOK = GetDlgItem(IDOK))
+ pOK->MoveWindow(btnStartX - btnSpacing, btnY + btnSpacing, btnSize.cx, btnSize.cy);
+
+ if (CWnd* pCancel = GetDlgItem(IDCANCEL))
+ pCancel->MoveWindow(btnStartX + btnSize.cx + btnSpacing, btnY + btnSpacing, btnSize.cx, btnSize.cy);
+
+ // 閲嶆柊璁剧疆绐楀彛灏哄锛堝鎴峰尯 -> 鍚竟妗嗭級
+ CRect rcClient(0, 0, totalWidth, totalHeight);
+ DWORD dwStyle = GetStyle();
+ DWORD dwExStyle = GetExStyle();
+ ::AdjustWindowRectEx(&rcClient, dwStyle, TRUE, dwExStyle);
+ SetWindowPos(nullptr, 0, 0, rcClient.Width(), rcClient.Height(), SWP_NOMOVE | SWP_NOZORDER);
+
+ return TRUE; // return TRUE unless you set the focus to a control
+ // 寮傚父: OCX 灞炴�ч〉搴旇繑鍥� FALSE
+}
+
+void CRobotCmdContainerDlg::OnOK()
+{
+ m_cmdResult.clear();
+ for (int i = 0; i < 4; ++i) {
+ if (m_chkEnable[i].GetCheck()) {
+ m_cmdResult.push_back(m_pageRobotCmd[i].GetRobotCmdParam());
+ }
+ }
+
+ CDialogEx::OnOK();
+}
+
+void CRobotCmdContainerDlg::OnCheckEnable1() { ToggleEnable(0); }
+void CRobotCmdContainerDlg::OnCheckEnable2() { ToggleEnable(1); }
+void CRobotCmdContainerDlg::OnCheckEnable3() { ToggleEnable(2); }
+void CRobotCmdContainerDlg::OnCheckEnable4() { ToggleEnable(3); }
+
+void CRobotCmdContainerDlg::ToggleEnable(int index)
+{
+ BOOL bChecked = m_chkEnable[index].GetCheck();
+ m_pageRobotCmd[index].EnableWindow(bChecked);
+}
\ No newline at end of file
diff --git a/SourceCode/Bond/Servo/CRobotCmdContainerDlg.h b/SourceCode/Bond/Servo/CRobotCmdContainerDlg.h
new file mode 100644
index 0000000..383017e
--- /dev/null
+++ b/SourceCode/Bond/Servo/CRobotCmdContainerDlg.h
@@ -0,0 +1,40 @@
+锘�#pragma once
+#include "afxdialogex.h"
+#include "PageRobotCmd.h"
+
+
+// CRobotCmdContainerDlg 瀵硅瘽妗�
+
+class CRobotCmdContainerDlg : public CDialogEx
+{
+ DECLARE_DYNAMIC(CRobotCmdContainerDlg)
+
+public:
+ CRobotCmdContainerDlg(CWnd* pParent = nullptr); // 鏍囧噯鏋勯�犲嚱鏁�
+ virtual ~CRobotCmdContainerDlg();
+
+ std::vector<SERVO::ROBOT_CMD_PARAM>& GetResultCmds();
+
+// 瀵硅瘽妗嗘暟鎹�
+#ifdef AFX_DESIGN_TIME
+ enum { IDD = IDD_DIALOG_ROBOT_CMD_CONTAINER };
+#endif
+
+protected:
+ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 鏀寔
+ virtual BOOL OnInitDialog();
+ virtual void OnOK() override;
+ afx_msg void OnCheckEnable1();
+ afx_msg void OnCheckEnable2();
+ afx_msg void OnCheckEnable3();
+ afx_msg void OnCheckEnable4();
+ DECLARE_MESSAGE_MAP()
+
+private:
+ void ToggleEnable(int index);
+
+ CButton m_chkEnable[4];
+ CStatic m_placeHolder[4];
+ CPageRobotCmd m_pageRobotCmd[4];
+ std::vector<SERVO::ROBOT_CMD_PARAM> m_cmdResult;
+};
diff --git a/SourceCode/Bond/Servo/PageRobotCmd.cpp b/SourceCode/Bond/Servo/PageRobotCmd.cpp
new file mode 100644
index 0000000..bd89ce1
--- /dev/null
+++ b/SourceCode/Bond/Servo/PageRobotCmd.cpp
@@ -0,0 +1,208 @@
+锘�// PageRobotCmd.cpp: 瀹炵幇鏂囦欢
+//
+
+#include "stdafx.h"
+#include "Servo.h"
+#include "afxdialogex.h"
+#include "PageRobotCmd.h"
+
+
+// CPageRobotCmd 瀵硅瘽妗�
+
+std::map<CString, int> g_deviceSlotCount = {
+ {_T("PORT 1"), 1},
+ {_T("PORT 2"), 1},
+ {_T("PORT 3"), 1},
+ {_T("PORT 4"), 1},
+ {_T("RB1"), 1},
+ {_T("RB2"), 1},
+ {_T("ALIGN"), 1},
+ {_T("FLIP"), 1},
+ {_T("VAC BAKE"), 2},
+ {_T("BONDER1"), 2},
+ {_T("BONDER2"), 2},
+ {_T("POST BAKE(COOLING)"), 4},
+ {_T("MEASUREMENT"), 1}
+};
+
+IMPLEMENT_DYNAMIC(CPageRobotCmd, CDialogEx)
+
+CPageRobotCmd::CPageRobotCmd(CWnd* pParent /*=nullptr*/)
+ : CDialogEx(IDD_PAGE_ROBOT_CMD, pParent)
+{
+ m_nSequenceNo = -1;
+ m_nRcmd = -1;
+ m_nArmNo = -1;
+ m_nGetPosition = -1;
+ m_nPutPosition = -1;
+ m_nGetSlotNo = -1;
+ m_nPutSlotNo = -1;
+ m_nSubCmd = -1;
+}
+
+CPageRobotCmd::~CPageRobotCmd()
+{
+}
+
+void CPageRobotCmd::SetSequenceNo(int nSeq)
+{
+ m_nSequenceNo = nSeq;
+
+ if (CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT_SEQ_NO)) {
+ CString str;
+ str.Format(_T("%d"), m_nSequenceNo);
+ pEdit->SetWindowText(str);
+ }
+}
+
+SERVO::ROBOT_CMD_PARAM CPageRobotCmd::GetRobotCmdParam()
+{
+ // 绐楀彛閿�姣佹椂涓嶅彲鐢�
+ if (IsWindow(m_hWnd)) {
+ UpdateData(TRUE); // 鍚屾鎴愬憳鍙橀噺鍒扮晫闈�
+ }
+
+ SERVO::ROBOT_CMD_PARAM param;
+ param.sequenceNo = static_cast<short>(m_nSequenceNo);
+ param.rcmd = static_cast<short>(m_nRcmd + 1);
+ param.armNo = static_cast<short>(m_nArmNo);
+ param.getPosition = static_cast<short>(m_nGetPosition + 1);
+ param.putPosition = static_cast<short>(m_nPutPosition + 1);
+ param.getSlotNo = static_cast<short>(m_nGetSlotNo + 1);
+ param.putSlotNo = static_cast<short>(m_nPutSlotNo + 1);
+ param.subCmd = static_cast<short>(m_nSubCmd + 1);
+
+ return param;
+}
+
+void CPageRobotCmd::DoDataExchange(CDataExchange* pDX)
+{
+ CDialogEx::DoDataExchange(pDX);
+ DDX_Text(pDX, IDC_EDIT_SEQ_NO, m_nSequenceNo);
+ DDX_CBIndex(pDX, IDC_COMBO_RCMD, m_nRcmd);
+ DDX_Radio(pDX, IDC_RADIO_ARM_A, m_nArmNo);
+ DDX_CBIndex(pDX, IDC_COMBO_GET_POS, m_nGetPosition);
+ DDX_CBIndex(pDX, IDC_COMBO_PUT_POS, m_nPutPosition);
+ DDX_CBIndex(pDX, IDC_COMBO_GET_SLOT, m_nGetSlotNo);
+ DDX_CBIndex(pDX, IDC_COMBO_PUT_SLOT, m_nPutSlotNo);
+ DDX_CBIndex(pDX, IDC_COMBO_SUB_CMD, m_nSubCmd);
+}
+
+
+BEGIN_MESSAGE_MAP(CPageRobotCmd, CDialogEx)
+ ON_CBN_SELCHANGE(IDC_COMBO_GET_POS, &CPageRobotCmd::OnCbnSelchangeComboGetPos)
+ ON_CBN_SELCHANGE(IDC_COMBO_PUT_POS, &CPageRobotCmd::OnCbnSelchangeComboPutPos)
+END_MESSAGE_MAP()
+
+
+// CPageRobotCmd 娑堟伅澶勭悊绋嬪簭
+
+BOOL CPageRobotCmd::OnInitDialog()
+{
+ CDialogEx::OnInitDialog();
+
+ // TODO: 鍦ㄦ娣诲姞棰濆鐨勫垵濮嬪寲
+ // 鍒濆鍖� RCMD 涓嬫媺妗�
+ CComboBox* pComboRcmd = (CComboBox*)GetDlgItem(IDC_COMBO_RCMD);
+ pComboRcmd->AddString(_T("Robot_home")); // 1
+ pComboRcmd->AddString(_T("Transfer")); // 2
+ pComboRcmd->AddString(_T("Move")); // 3
+ pComboRcmd->AddString(_T("Get")); // 4
+ pComboRcmd->AddString(_T("Put")); // 5
+ pComboRcmd->AddString(_T("One_Action_Exchange")); // 6
+ pComboRcmd->AddString(_T("Two_Action_Exchange")); // 7
+ pComboRcmd->AddString(_T("Command_Clear")); // 8
+ pComboRcmd->AddString(_T("Batch_get")); // 9
+ pComboRcmd->AddString(_T("Batch_put")); // 10
+ pComboRcmd->SetCurSel(0);
+
+ // 鍒濆鍖栬澶囧悕绉颁笅鎷夋锛圙et/Put Position锛�
+ CStringList eqNameList;
+ eqNameList.AddTail(_T("PORT 1")); // 1 1 UNIT
+ eqNameList.AddTail(_T("PORT 2")); // 2 1 UNIT
+ eqNameList.AddTail(_T("PORT 3")); // 3 1 UNIT
+ eqNameList.AddTail(_T("PORT 4")); // 4 1 UNIT
+ eqNameList.AddTail(_T("RB1")); // 5 1 UNIT
+ eqNameList.AddTail(_T("RB2")); // 6 1 UNIT
+ eqNameList.AddTail(_T("ALIGN")); // 7 1 UNIT
+ eqNameList.AddTail(_T("FLIP")); // 8 1 UNIT
+ eqNameList.AddTail(_T("VAC BAKE")); // 9 2 UNIT
+ eqNameList.AddTail(_T("BONDER1")); // 10 2 UNIT
+ eqNameList.AddTail(_T("BONDER2")); // 11 2 UNIT
+ eqNameList.AddTail(_T("POST BAKE(COOLING)")); // 12 4 UNIT
+ eqNameList.AddTail(_T("MEASUREMENT")); // 13 1 UNIT
+
+ CComboBox* pComboGetPos = (CComboBox*)GetDlgItem(IDC_COMBO_GET_POS);
+ CComboBox* pComboPutPos = (CComboBox*)GetDlgItem(IDC_COMBO_PUT_POS);
+ CComboBox* pComboGetSlot = (CComboBox*)GetDlgItem(IDC_COMBO_GET_SLOT);
+ CComboBox* pComboPutSlot = (CComboBox*)GetDlgItem(IDC_COMBO_PUT_SLOT);
+
+ for (POSITION pos = eqNameList.GetHeadPosition(); pos != NULL;) {
+ CString item = eqNameList.GetNext(pos);
+ pComboGetPos->AddString(item);
+ pComboPutPos->AddString(item);
+ }
+
+ pComboGetPos->SetCurSel(0);
+ pComboPutPos->SetCurSel(0);
+ UpdateSlotList(pComboGetPos, pComboGetSlot);
+ UpdateSlotList(pComboPutPos, pComboPutSlot);
+
+ // 鍒濆鍖� Sub CMD 涓嬫媺妗�
+ CComboBox* pComboSubCmd = (CComboBox*)GetDlgItem(IDC_COMBO_SUB_CMD);
+ pComboSubCmd->AddString(_T("1: Get Ready"));
+ pComboSubCmd->AddString(_T("2: Put Ready"));
+ pComboSubCmd->SetCurSel(0);
+
+ // 鍒濆鍖栧崟閫夋
+ CButton* pRadioArmA = (CButton*)GetDlgItem(IDC_RADIO_ARM_A);
+ CButton* pRadioArmB = (CButton*)GetDlgItem(IDC_RADIO_ARM_B);
+ pRadioArmA->SetCheck(BST_CHECKED);
+ pRadioArmB->SetCheck(BST_UNCHECKED);
+
+ return TRUE; // return TRUE unless you set the focus to a control
+ // 寮傚父: OCX 灞炴�ч〉搴旇繑鍥� FALSE
+}
+
+
+void CPageRobotCmd::UpdateSlotList(CComboBox* pComboDevice, CComboBox* pComboSlot)
+{
+ if (pComboDevice == nullptr || pComboSlot == nullptr) return;
+ int nSelIndex = pComboDevice->GetCurSel();
+ if (nSelIndex < 0) return;
+
+ CString strDeviceName;
+ pComboDevice->GetLBText(nSelIndex, strDeviceName);
+
+ int nMaxSlot = 1; // 榛樿妲戒綅鏁�
+ auto it = g_deviceSlotCount.find(strDeviceName);
+ if (it != g_deviceSlotCount.end()) {
+ nMaxSlot = it->second;
+ }
+
+ // 娓呯┖骞舵坊鍔犳Ы鍙�
+ pComboSlot->ResetContent();
+ for (int i = 1; i <= nMaxSlot; ++i) {
+ CString str;
+ str.Format(_T("%d"), i);
+ pComboSlot->AddString(str);
+ }
+
+ pComboSlot->SetCurSel(0);
+}
+
+void CPageRobotCmd::OnCbnSelchangeComboGetPos()
+{
+ CComboBox* pDevice = (CComboBox*)GetDlgItem(IDC_COMBO_GET_POS);
+ CComboBox* pSlot = (CComboBox*)GetDlgItem(IDC_COMBO_GET_SLOT);
+ UpdateSlotList(pDevice, pSlot);
+
+ GetRobotCmdParam();
+}
+
+void CPageRobotCmd::OnCbnSelchangeComboPutPos()
+{
+ CComboBox* pDevice = (CComboBox*)GetDlgItem(IDC_COMBO_PUT_POS);
+ CComboBox* pSlot = (CComboBox*)GetDlgItem(IDC_COMBO_PUT_SLOT);
+ UpdateSlotList(pDevice, pSlot);
+}
\ No newline at end of file
diff --git a/SourceCode/Bond/Servo/PageRobotCmd.h b/SourceCode/Bond/Servo/PageRobotCmd.h
new file mode 100644
index 0000000..9534384
--- /dev/null
+++ b/SourceCode/Bond/Servo/PageRobotCmd.h
@@ -0,0 +1,42 @@
+锘�#pragma once
+#include "afxdialogex.h"
+#include "CEquipment.h"
+
+
+// CPageRobotCmd 瀵硅瘽妗�
+
+class CPageRobotCmd : public CDialogEx
+{
+ DECLARE_DYNAMIC(CPageRobotCmd)
+
+public:
+ CPageRobotCmd(CWnd* pParent = nullptr); // 鏍囧噯鏋勯�犲嚱鏁�
+ virtual ~CPageRobotCmd();
+
+ void SetSequenceNo(int nSeq);
+ SERVO::ROBOT_CMD_PARAM CPageRobotCmd::GetRobotCmdParam();
+
+// 瀵硅瘽妗嗘暟鎹�
+#ifdef AFX_DESIGN_TIME
+ enum { IDD = IDD_PAGE_ROBOT_CMD };
+#endif
+
+protected:
+ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 鏀寔
+ virtual BOOL OnInitDialog();
+ afx_msg void OnCbnSelchangeComboGetPos();
+ afx_msg void OnCbnSelchangeComboPutPos();
+ DECLARE_MESSAGE_MAP()
+
+private:
+ void UpdateSlotList(CComboBox* pComboDevice, CComboBox* pComboSlot);
+
+ int m_nSequenceNo;
+ int m_nRcmd;
+ int m_nArmNo;
+ int m_nGetPosition;
+ int m_nPutPosition;
+ int m_nGetSlotNo;
+ int m_nPutSlotNo;
+ int m_nSubCmd;
+};
diff --git a/SourceCode/Bond/Servo/Servo.rc b/SourceCode/Bond/Servo/Servo.rc
index d8792b7..f255c93 100644
--- a/SourceCode/Bond/Servo/Servo.rc
+++ b/SourceCode/Bond/Servo/Servo.rc
Binary files differ
diff --git a/SourceCode/Bond/Servo/Servo.vcxproj b/SourceCode/Bond/Servo/Servo.vcxproj
index 5db43c3..18abe4c 100644
--- a/SourceCode/Bond/Servo/Servo.vcxproj
+++ b/SourceCode/Bond/Servo/Servo.vcxproj
@@ -200,6 +200,7 @@
<ItemGroup>
<ClInclude Include="CEquipmentPage3.h" />
<ClInclude Include="CGlassPool.h" />
+ <ClInclude Include="CRobotCmdContainerDlg.h" />
<ClInclude Include="PageRecipe.h" />
<ClInclude Include="CDoubleGlass.h" />
<ClInclude Include="CProcessData.h" />
@@ -283,6 +284,7 @@
<ClInclude Include="LogEdit.h" />
<ClInclude Include="MapPosWnd.h" />
<ClInclude Include="Model.h" />
+ <ClInclude Include="PageRobotCmd.h" />
<ClInclude Include="ProductionLogManager.h" />
<ClInclude Include="Resource.h" />
<ClInclude Include="SECSRuntimeManager.h" />
@@ -299,6 +301,7 @@
<ItemGroup>
<ClCompile Include="CEquipmentPage3.cpp" />
<ClCompile Include="CGlassPool.cpp" />
+ <ClCompile Include="CRobotCmdContainerDlg.cpp" />
<ClCompile Include="PageRecipe.cpp" />
<ClCompile Include="CDoubleGlass.cpp" />
<ClCompile Include="CProcessData.cpp" />
@@ -381,6 +384,7 @@
<ClCompile Include="LogEdit.cpp" />
<ClCompile Include="MapPosWnd.cpp" />
<ClCompile Include="Model.cpp" />
+ <ClCompile Include="PageRobotCmd.cpp" />
<ClCompile Include="ProductionLogManager.cpp" />
<ClCompile Include="SECSRuntimeManager.cpp" />
<ClCompile Include="SecsTestDlg.cpp" />
diff --git a/SourceCode/Bond/Servo/Servo.vcxproj.filters b/SourceCode/Bond/Servo/Servo.vcxproj.filters
index d3871d4..f79e425 100644
--- a/SourceCode/Bond/Servo/Servo.vcxproj.filters
+++ b/SourceCode/Bond/Servo/Servo.vcxproj.filters
@@ -105,6 +105,8 @@
<ClCompile Include="CProcessData.cpp" />
<ClCompile Include="CGlassPool.cpp" />
<ClCompile Include="CEquipmentPage3.cpp" />
+ <ClCompile Include="PageRobotCmd.cpp" />
+ <ClCompile Include="CRobotCmdContainerDlg.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="AlarmManager.h" />
@@ -208,6 +210,8 @@
<ClInclude Include="CProcessData.h" />
<ClInclude Include="CGlassPool.h" />
<ClInclude Include="CEquipmentPage3.h" />
+ <ClInclude Include="PageRobotCmd.h" />
+ <ClInclude Include="CRobotCmdContainerDlg.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Servo.rc" />
diff --git a/SourceCode/Bond/Servo/resource.h b/SourceCode/Bond/Servo/resource.h
index 6f0240f..9b64524 100644
--- a/SourceCode/Bond/Servo/resource.h
+++ b/SourceCode/Bond/Servo/resource.h
Binary files differ
--
Gitblit v1.9.3