| SourceCode/Bond/Servo/CPageGraph2.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CRobotCmdContainerDlg.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CRobotCmdContainerDlg.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/PageRobotCmd.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/PageRobotCmd.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Servo.rc | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Servo.vcxproj | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Servo.vcxproj.filters | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/resource.h | 补丁 | 查看 | 原始文档 | blame | 历史 |
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()); } } } 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); } 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; }; 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); // åå§å设å¤åç§°ä¸ææ¡ï¼Get/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); } 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; }; SourceCode/Bond/Servo/Servo.rcBinary files differ
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" /> 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" /> SourceCode/Bond/Servo/resource.hBinary files differ