| 2025-10-16 | LAPTOP-SNT8I5JK\Boounion | ![]() |
| 2025-10-15 | LAPTOP-SNT8I5JK\Boounion | ![]() |
| SourceCode/Bond/Servo/CMaster.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CMaster.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CPageGlassList.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CPageGlassList.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/ClientListDlg.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/ClientListDlg.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Servo.rc | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Servo.vcxproj | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Servo.vcxproj.user | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/ServoDlg.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/ServoDlg.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/resource.h | 补丁 | 查看 | 原始文档 | blame | 历史 |
SourceCode/Bond/Servo/CMaster.cpp
@@ -239,6 +239,10 @@ 0, &m_nReadBitsThreadAddr); // æ²çº¿æå¡ CreateDAQBridgeServer(); LOGI("<Master>åå§å宿."); return 0; } @@ -3147,12 +3151,12 @@ } auto& vacuumbakeTypes = dataTypes[EQ_ID_VACUUMBAKE]; for (size_t i = 0; i < bonderTypes.size(); ++i) { for (size_t i = 0; i < vacuumbakeTypes.size(); ++i) { m_pCollector->buffersSetChannelName(EQ_ID_VACUUMBAKE, i + 1, vacuumbakeTypes[i].c_str()); } auto& coolingTypes = dataTypes[EQ_ID_BAKE_COOLING]; for (size_t i = 0; i < bonderTypes.size(); ++i) { for (size_t i = 0; i < coolingTypes.size(); ++i) { m_pCollector->buffersSetChannelName(EQ_ID_VACUUMBAKE, i + 1, coolingTypes[i].c_str()); } } SourceCode/Bond/Servo/CMaster.h
@@ -1,4 +1,4 @@ #pragma once #pragma once #include <list> #include "CEquipment.h" #include "CEFEM.h" @@ -171,7 +171,7 @@ CEquipment* pTarEq, int nTarSlot, int armNo = 1); public: // ââ IResourceView è¦å ââï¼æ³¨æ constï¼ // ââ IResourceView è¦å ââï¼æ³¨æ constï¼ bool isProcessJobsEmpty() const override; bool recipeExists(const std::string& ppid) const override; bool carrierPresent(const std::string& carrierId) const override; @@ -183,7 +183,7 @@ std::string& getLastErrorText(); public: // æ°å¢å½æ° // æ°å¢å½æ° CProcessJob* acquireNextProcessJob(); CGlass* acquireNextGlass(); int acquireGlassToQueue(); @@ -199,6 +199,9 @@ bool canCreateControlJob(); bool canCompleteControlJob(); bool canDeleteControlJob(); // DAQ Bridgeé©ç¨¿å§ Collector* getCollector() const { return m_pCollector; } private: CRITICAL_SECTION m_criticalSection; @@ -211,42 +214,42 @@ bool m_bBatch; private: /* çæ§æ¯ç¹ä½ç线ç¨*/ /* çæ§æ¯ç¹ä½ç线ç¨*/ HANDLE m_hEventReadBitsThreadExit[2]; HANDLE m_hReadBitsThreadHandle; unsigned m_nReadBitsThreadAddr; // è°åº¦çº¿ç¨ // è°åº¦çº¿ç¨ HANDLE m_hDispatchEvent; HANDLE m_hEventDispatchThreadExit[2]; HANDLE m_hDispatchThreadHandle; unsigned m_nDispatchThreadAddr; // å¯å¨æ¶é´ï¼è¿è¡æ¶é´ï¼ç¶æ // å¯å¨æ¶é´ï¼è¿è¡æ¶é´ï¼ç¶æ ULONGLONG m_ullStartTime; ULONGLONG m_ullRunTime; MASTERSTATE m_state; // å½åä»»å¡å已宿任å¡å表 // å½åä»»å¡å已宿任å¡å表 CRobotTask* m_pActiveRobotTask; std::list< CRobotTask* > m_listTask; // é误代ç // é误代ç int m_nLastError; std::string m_strLastError; // å¨å¼å§å·¥èºåæ¯å¦å éè¦å æ¯è¾map // å¨å¼å§å·¥èºåæ¯å¦å éè¦å æ¯è¾map BOOL m_isCompareMapsBeforeProceeding; BOOL m_bJobMode; // åä¼ åæ°è®¡æ° // åä¼ åæ°è®¡æ° int m_nContinuousTransferCount; int m_nContinuousTransferStep; int m_nContinuousWorkingPort; int m_nContinuousWorkingSlot; // æ°å¢å·²ç»å¼å§å¤ççProcessJobå表 // æ°å¢å·²ç»å¼å§å¤ççProcessJobå表 std::vector<CProcessJob*> m_inProcesJobs; std::vector<CProcessJob*> m_completeProcessJobs; std::vector<CGlass*> m_queueGlasses; SourceCode/Bond/Servo/CPageGlassList.cpp
@@ -100,6 +100,9 @@ // ====== å¼å ³ï¼1=å¯ç¨åæ°æ®ï¼åªæ¿æ¢ DB æ¥è¯¢ï¼ï¼0=ç¨çå® DB ====== #define USE_FAKE_DB_DEMO 0 // ====== å¼å ³ï¼1=å¯ç¨æ¨¡æä¼ æå¨æ°æ®çæï¼0=使ç¨ç宿°æ® ====== #define USE_MOCK_SENSOR_DATA 0 #if USE_FAKE_DB_DEMO #include <ctime> #include <atlconv.h> // CStringA @@ -1471,6 +1474,10 @@ if (!row.pretty.empty()) { SERVO::CGlass tempGlass; if (GlassJson::FromString(row.pretty, tempGlass)) { #if USE_MOCK_SENSOR_DATA // çææ¨¡æçSVDataç¨äºæµè¯ GenerateMockSVData(tempGlass); #endif // 对æ¯ä¸ªæºå¨çæè¡¨æ ¼ for (const auto& machinePair : tempGlass.getAllSVData()) { int machineId = machinePair.first; @@ -1934,4 +1941,92 @@ int64_t CPageGlassList::timePointToMs(const std::chrono::system_clock::time_point& tp) { return std::chrono::duration_cast<std::chrono::milliseconds>(tp.time_since_epoch()).count(); } // çææ¨¡æçSVDataç¨äºæµè¯ void CPageGlassList::GenerateMockSVData(SERVO::CGlass& glass) { // è·åè®¾å¤æ°æ®ç±»åé ç½® auto& dataTypes = SERVO::CServoUtilsTool::getEqDataTypes(); // 为æ¯ä¸ªè®¾å¤çææ¨¡ææ°æ® for (const auto& machinePair : dataTypes) { int machineId = machinePair.first; const auto& dataTypeList = machinePair.second; // çææ¶é´åºåï¼ä»å½åæ¶é´å¾åæ¨10åéï¼æ¯1ç§ä¸ä¸ªæ°æ®ç¹ auto now = std::chrono::system_clock::now(); auto startTime = now - std::chrono::minutes(10); // 为æ¯ä¸ªæ°æ®ç±»åçææ¨¡ææ°æ® for (const auto& dataType : dataTypeList) { std::vector<SERVO::SVDataItem> mockData; // çæ600ä¸ªæ°æ®ç¹ï¼10åé * 60个ç¹/åéï¼ for (int i = 0; i < 600; ++i) { auto timestamp = startTime + std::chrono::seconds(i * 1); // æ ¹æ®è®¾å¤ç±»ååæ°æ®ç±»åçæä¸åçæ¨¡æå¼ double value = GenerateMockValue(machineId, dataType, i); mockData.emplace_back(timestamp, value); } // å°æ¨¡ææ°æ®æ·»å å°glasså¯¹è±¡ä¸ glass.addSVData(machineId, dataType, mockData); } } } // æ ¹æ®è®¾å¤ç±»ååæ°æ®ç±»åçææ¨¡ææ°å¼ double CPageGlassList::GenerateMockValue(int machineId, const std::string& dataType, int index) { // åºç¡å¼èå´ double baseValue = 0.0; double variation = 0.0; // æ ¹æ®è®¾å¤ç±»å设置åºç¡å¼ switch (machineId) { case EQ_ID_Bonder1: case EQ_ID_Bonder2: if (dataType.find("åå") != std::string::npos) { baseValue = 50.0; // åååºç¡å¼ variation = 10.0; // ååååèå´ } else if (dataType.find("温度") != std::string::npos) { baseValue = 180.0; // 温度åºç¡å¼ variation = 5.0; // 温度ååèå´ } else if (dataType.find("æ©å±å¼") != std::string::npos) { baseValue = 100.0; // æ©å±å¼åºç¡å¼ variation = 15.0; // æ©å±å¼ååèå´ } break; case EQ_ID_VACUUMBAKE: if (dataType.find("æ©å±å¼") != std::string::npos) { baseValue = 80.0; variation = 12.0; } else if (dataType.find("温度") != std::string::npos) { baseValue = 200.0; variation = 8.0; } break; case EQ_ID_BAKE_COOLING: if (dataType.find("温度") != std::string::npos) { baseValue = 25.0; // å·å´æ¸©åº¦ variation = 3.0; } break; default: baseValue = 50.0; variation = 5.0; break; } // æ·»å æ¶é´ç¸å ³çè¶å¿åéæºåå double timeTrend = sin(index * 0.1) * 2.0; // æ£å¼¦æ³¢è¶å¿ double randomNoise = (rand() % 100 - 50) / 100.0 * variation * 0.3; // éæºåªå£° return baseValue + timeTrend + randomNoise; } SourceCode/Bond/Servo/CPageGlassList.h
@@ -2,6 +2,10 @@ #include "CExpandableListCtrl.h" #include "GlassLogDb.h" // ====== ç¼è¯å¼å ³è¯´æ ====== // USE_MOCK_SENSOR_DATA: 1=å¯ç¨æ¨¡æä¼ æå¨æ°æ®çæï¼0=使ç¨ç宿°æ® // å¨ CPageGlassList.cpp ä¸å®ä¹ // CPageGlassList å¯¹è¯æ¡ @@ -64,6 +68,8 @@ static std::vector<std::string> getMachineColumnOrder(int machineId); static std::string timePointToString(const std::chrono::system_clock::time_point& tp); static int64_t timePointToMs(const std::chrono::system_clock::time_point& tp); void GenerateMockSVData(SERVO::CGlass& glass); double GenerateMockValue(int machineId, const std::string& dataType, int index); // å¯¹è¯æ¡æ°æ® #ifdef AFX_DESIGN_TIME SourceCode/Bond/Servo/ClientListDlg.cpp
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,141 @@ #include "stdafx.h" #include "ClientListDlg.h" #include "afxdialogex.h" #include "../DAQBridge/core/Collector.h" #include "CMaster.h" #include "Model.h" #include "Servo.h" #include <chrono> #include <iomanip> #include <sstream> // CClientListDlg å¯¹è¯æ¡ IMPLEMENT_DYNAMIC(CClientListDlg, CDialogEx) CClientListDlg::CClientListDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_DIALOG_CLIENT_LIST, pParent) { } CClientListDlg::~CClientListDlg() { } void CClientListDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST_CLIENTS, m_listClients); } BEGIN_MESSAGE_MAP(CClientListDlg, CDialogEx) ON_BN_CLICKED(IDC_BUTTON_REFRESH, &CClientListDlg::OnBnClickedRefresh) ON_WM_SYSCOMMAND() END_MESSAGE_MAP() // CClientListDlg æ¶æ¯å¤çç¨åº BOOL CClientListDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // åå§åå表æ§ä»¶ m_listClients.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP); // æ·»å å m_listClients.InsertColumn(0, _T("IPå°å"), LVCFMT_LEFT, 120); m_listClients.InsertColumn(1, _T("端å£"), LVCFMT_CENTER, 80); m_listClients.InsertColumn(2, _T("çæ¬ç¶æ"), LVCFMT_CENTER, 100); m_listClients.InsertColumn(3, _T("è¿æ¥ç¶æ"), LVCFMT_CENTER, 100); m_listClients.InsertColumn(4, _T("è¿æ¥æ¶é´"), LVCFMT_LEFT, 150); // å·æ°å®¢æ·ç«¯å表 RefreshClientList(); return TRUE; // é¤éå°ç¦ç¹è®¾ç½®å°æ§ä»¶ï¼å¦åè¿å TRUE } void CClientListDlg::OnBnClickedRefresh() { RefreshClientList(); } void CClientListDlg::OnSysCommand(UINT nID, LPARAM lParam) { if (nID == SC_CLOSE) { CDialogEx::OnCancel(); return; } CDialogEx::OnSysCommand(nID, lParam); } void CClientListDlg::RefreshClientList() { // æ¸ ç©ºå½åå表 m_listClients.DeleteAllItems(); m_clients.clear(); // è·åCollectorå®ä¾ extern CServoApp theApp; SERVO::CMaster& master = theApp.m_model.getMaster(); Collector* pCollector = master.getCollector(); if (pCollector) { // è·åçå®ç客æ·ç«¯å表 auto clientSummaries = pCollector->getClientList(); // è½¬æ¢æ°æ®æ ¼å¼ for (const auto& summary : clientSummaries) { ClientInfo client; client.ip = summary.ip; client.port = summary.port; client.versionOk = summary.versionOk; client.status = summary.versionOk ? "å·²è¿æ¥" : "çæ¬ä¸å¹é "; // è·åå½åæ¶é´ä½ä¸ºè¿æ¥æ¶é´ï¼å®é å®ç°ä¸åºè¯¥ä»Collectorè·åçå®è¿æ¥æ¶é´ï¼ auto now = std::chrono::system_clock::now(); auto time_t = std::chrono::system_clock::to_time_t(now); std::tm tm; localtime_s(&tm, &time_t); std::ostringstream oss; oss << std::put_time(&tm, "%Y-%m-%d %H:%M:%S"); client.connectTime = oss.str(); m_clients.push_back(client); } } else { // å¦ææ æ³è·åCollectorå®ä¾ï¼æ¾ç¤ºæç¤ºä¿¡æ¯ ClientInfo noData; noData.ip = "æ æ³è·åæ°æ®"; noData.port = 0; noData.versionOk = false; noData.status = "Collectoræªåå§å"; noData.connectTime = ""; m_clients.push_back(noData); } // æ´æ°å表æ¾ç¤º UpdateClientList(m_clients); } void CClientListDlg::UpdateClientList(const std::vector<ClientInfo>& clients) { m_listClients.DeleteAllItems(); for (size_t i = 0; i < clients.size(); ++i) { const ClientInfo& client = clients[i]; int nItem = m_listClients.InsertItem(i, CString(client.ip.c_str())); m_listClients.SetItemText(nItem, 1, CString(std::to_string(client.port).c_str())); m_listClients.SetItemText(nItem, 2, client.versionOk ? _T("æ£å¸¸") : _T("å¼å¸¸")); m_listClients.SetItemText(nItem, 3, CString(client.status.c_str())); m_listClients.SetItemText(nItem, 4, CString(client.connectTime.c_str())); } } SourceCode/Bond/Servo/ClientListDlg.h
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,47 @@ #pragma once #include "afxwin.h" #include <vector> #include <string> // 客æ·ç«¯ä¿¡æ¯ç»æ struct ClientInfo { std::string ip; uint16_t port; bool versionOk; std::string status; std::string connectTime; }; // CClientListDlg å¯¹è¯æ¡ class CClientListDlg : public CDialogEx { DECLARE_DYNAMIC(CClientListDlg) public: CClientListDlg(CWnd* pParent = nullptr); // æ åæé 彿° virtual ~CClientListDlg(); // å¯¹è¯æ¡æ°æ® #ifdef AFX_DESIGN_TIME enum { IDD = IDD_DIALOG_CLIENT_LIST }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV æ¯æ DECLARE_MESSAGE_MAP() public: virtual BOOL OnInitDialog(); afx_msg void OnBnClickedRefresh(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); private: void RefreshClientList(); void UpdateClientList(const std::vector<ClientInfo>& clients); private: CListCtrl m_listClients; std::vector<ClientInfo> m_clients; }; SourceCode/Bond/Servo/Servo.rcBinary files differ
SourceCode/Bond/Servo/Servo.vcxproj
@@ -237,6 +237,7 @@ <ClInclude Include="CExpandableListCtrl.h" /> <ClInclude Include="CGlassPool.h" /> <ClInclude Include="ChangePasswordDlg.h" /> <ClInclude Include="ClientListDlg.h" /> <ClInclude Include="CMyStatusbar.h" /> <ClInclude Include="CPageCollectionEvent.h" /> <ClInclude Include="CPageGlassList.h" /> @@ -449,6 +450,7 @@ <ClCompile Include="CExpandableListCtrl.cpp" /> <ClCompile Include="CGlassPool.cpp" /> <ClCompile Include="ChangePasswordDlg.cpp" /> <ClCompile Include="ClientListDlg.cpp" /> <ClCompile Include="CMyStatusbar.cpp" /> <ClCompile Include="CPageCollectionEvent.cpp" /> <ClCompile Include="CPageGlassList.cpp" /> SourceCode/Bond/Servo/Servo.vcxproj.user
@@ -7,6 +7,6 @@ <RemoteDebuggerCommand>\\DESKTOP-IODBVIQ\Servo\Debug\Servo.exe</RemoteDebuggerCommand> <RemoteDebuggerWorkingDirectory>\\DESKTOP-IODBVIQ\Servo\Debug\</RemoteDebuggerWorkingDirectory> <RemoteDebuggerServerName>DESKTOP-IODBVIQ</RemoteDebuggerServerName> <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> <DebuggerFlavor>WindowsRemoteDebugger</DebuggerFlavor> </PropertyGroup> </Project> SourceCode/Bond/Servo/ServoDlg.cpp
@@ -1,5 +1,5 @@ // ServoDlg.cpp : å®ç°æä»¶  // ServoDlg.cpp : å®ç°æä»¶ // #include "stdafx.h" @@ -28,6 +28,7 @@ #include "CPageCollectionEvent.h" #include "CControlJobDlg.h" #include "InputDialog.h" #include "ClientListDlg.h" #include "CControlJobManagerDlg.h" @@ -36,32 +37,32 @@ #endif /* å建ç»ç«¯ç宿¶å¨ */ /* å建ç»ç«¯ç宿¶å¨ */ #define TIMER_ID_CREATE_TERMINAL 1 /* è¿è¡æ¶é´å®æ¶å¨ */ /* è¿è¡æ¶é´å®æ¶å¨ */ #define TIMER_ID_UPDATE_RUMTIME 2 /* Test */ #define TIMER_ID_TEST 3 // ç¨äºåºç¨ç¨åºâå ³äºâèå项ç CAboutDlg å¯¹è¯æ¡ // ç¨äºåºç¨ç¨åºâå ³äºâèå项ç CAboutDlg å¯¹è¯æ¡ class CAboutDlg : public CDialogEx { public: CAboutDlg(); // å¯¹è¯æ¡æ°æ® // å¯¹è¯æ¡æ°æ® #ifdef AFX_DESIGN_TIME enum { IDD = IDD_ABOUTBOX }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV æ¯æ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV æ¯æ // å®ç° // å®ç° protected: DECLARE_MESSAGE_MAP() }; @@ -79,7 +80,7 @@ END_MESSAGE_MAP() // CServoDlg å¯¹è¯æ¡ // CServoDlg å¯¹è¯æ¡ CServoDlg::CServoDlg(CWnd* pParent /*=NULL*/) @@ -134,6 +135,8 @@ ON_UPDATE_COMMAND_UI(ID_MENU_TEST_MESSAGE_SET, &CServoDlg::OnUpdateMenuTestMessageSet) ON_COMMAND(ID_MENU_TEST_MESSAGE_CLEAR, &CServoDlg::OnMenuTestMessageClear) ON_UPDATE_COMMAND_UI(ID_MENU_TEST_MESSAGE_CLEAR, &CServoDlg::OnUpdateMenuTestMessageClear) ON_COMMAND(ID_MENU_TOOLS_CLIENT_LIST, &CServoDlg::OnMenuToolsClientList) ON_UPDATE_COMMAND_UI(ID_MENU_TOOLS_CLIENT_LIST, &CServoDlg::OnUpdateMenuToolsClientList) ON_COMMAND(ID_MENU_HELP_ABOUT, &CServoDlg::OnMenuHelpAbout) ON_WM_INITMENUPOPUP() ON_WM_TIMER() @@ -144,12 +147,12 @@ END_MESSAGE_MAP() // CServoDlg æ¶æ¯å¤çç¨åº // CServoDlg æ¶æ¯å¤çç¨åº void CServoDlg::InitRxWindows() { /* code */ // è®¢é æ°æ® // è®¢é æ°æ® IRxWindows* pRxWindows = RX_GetRxWindows(); pRxWindows->enableLog(5); if (m_pObserver == NULL) { @@ -208,7 +211,7 @@ else if (state == SERVO::MASTERSTATE::STARTING) { m_pMyStatusbar->setBackgroundColor(STATUSBAR_BK_STARTING); m_pMyStatusbar->setForegroundColor(RGB(0, 0, 0)); m_pMyStatusbar->setRunTimeText("æ£å¨å¯å¨..."); m_pMyStatusbar->setRunTimeText("æ£å¨å¯å¨..."); } else if (state == SERVO::MASTERSTATE::MSERROR) { m_pTopToolbar->GetBtn(IDC_BUTTON_RUN)->EnableWindow(TRUE); @@ -217,7 +220,7 @@ m_pTopToolbar->GetBtn(IDC_BUTTON_STOP)->EnableWindow(FALSE); m_pMyStatusbar->setBackgroundColor(STATUSBAR_BK_ALARM); m_pMyStatusbar->setForegroundColor(RGB(0, 0, 0)); m_pMyStatusbar->setRunTimeText("å¯å¨å¤±è´¥."); m_pMyStatusbar->setRunTimeText("å¯å¨å¤±è´¥."); m_pTopToolbar->GetBtn(IDC_BUTTON_ALARM)->EnableWindow(TRUE); KillTimer(TIMER_ID_UPDATE_RUMTIME); } @@ -230,7 +233,7 @@ m_pMyStatusbar->setForegroundColor(RGB(0, 0, 0)); m_pMyStatusbar->setRunTimeText(theApp.m_model.getMaster().getLastErrorText().c_str()); if (theApp.m_model.getMaster().getLastError() == ER_CODE_AOI_NG) { AfxMessageBox(_T("AOIæ£æµå¤±è´¥ï¼è¯·æä½åä»å ¥è§£å³é®é¢ï¼")); AfxMessageBox(_T("AOIæ£æµå¤±è´¥ï¼è¯·æä½åä»å ¥è§£å³é®é¢ï¼")); } m_pTopToolbar->GetBtn(IDC_BUTTON_ALARM)->EnableWindow(TRUE); KillTimer(TIMER_ID_UPDATE_RUMTIME); @@ -274,13 +277,13 @@ } } else if (exCode == ROBOT_EVENT_FINISH) { m_pMyStatusbar->setCurTaskBtnText("æ "); m_pMyStatusbar->setCurTaskBtnText("æ "); } else if (exCode == ROBOT_EVENT_ABORT) { m_pMyStatusbar->setCurTaskBtnText("æ "); m_pMyStatusbar->setCurTaskBtnText("æ "); } else if (exCode == ROBOT_EVENT_RESTORE) { m_pMyStatusbar->setCurTaskBtnText("æ "); m_pMyStatusbar->setCurTaskBtnText("æ "); } } } @@ -330,9 +333,9 @@ { CDialogEx::OnInitDialog(); // å°âå ³äº...âèå项添å å°ç³»ç»èåä¸ã // å°âå ³äº...âèå项添å å°ç³»ç»èåä¸ã // IDM_ABOUTBOX å¿ é¡»å¨ç³»ç»å½ä»¤èå´å ã // IDM_ABOUTBOX å¿ é¡»å¨ç³»ç»å½ä»¤èå´å ã ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); @@ -350,17 +353,17 @@ } } // 设置æ¤å¯¹è¯æ¡ç徿 ã å½åºç¨ç¨åºä¸»çªå£ä¸æ¯å¯¹è¯æ¡æ¶ï¼æ¡æ¶å°èªå¨ // æ§è¡æ¤æä½ SetIcon(m_hIcon, TRUE); // è®¾ç½®å¤§å¾æ SetIcon(m_hIcon, FALSE); // 设置å°å¾æ // 设置æ¤å¯¹è¯æ¡ç徿 ã å½åºç¨ç¨åºä¸»çªå£ä¸æ¯å¯¹è¯æ¡æ¶ï¼æ¡æ¶å°èªå¨ // æ§è¡æ¤æä½ SetIcon(m_hIcon, TRUE); // è®¾ç½®å¤§å¾æ SetIcon(m_hIcon, FALSE); // 设置å°å¾æ // model init theApp.m_model.init(); SetTimer(TIMER_ID_TEST, 1000, nullptr); // èå // èå CMenu menu; menu.LoadMenu(IDR_MENU_APP); SetMenu(&menu); @@ -397,13 +400,13 @@ CHmTab* m_pTab = CHmTab::Hook(GetDlgItem(IDC_TAB1)->m_hWnd); m_pTab->SetPaddingLeft(20); m_pTab->SetItemMarginLeft(18); m_pTab->AddItem("״̬ͼ", FALSE); m_pTab->AddItem("è¿æ¥å¾", TRUE); m_pTab->AddItem("ç¶æå¾", FALSE); m_pTab->AddItem("è¿æ¥å¾", TRUE); m_pTab->AddItem("Glass", TRUE); m_pTab->AddItem("é æ¹", TRUE); m_pTab->AddItem("æ¥è¦", TRUE); m_pTab->AddItem("æ¥å¿", TRUE); m_pTab->AddItem("æ¬è¿ä»»å¡", TRUE); m_pTab->AddItem("é æ¹", TRUE); m_pTab->AddItem("æ¥è¦", TRUE); m_pTab->AddItem("æ¥å¿", TRUE); m_pTab->AddItem("æ¬è¿ä»»å¡", TRUE); m_pTab->SetCurSel(0); m_pTab->SetBkgndColor(RGB(222, 222, 222)); ShowChildPage(0); @@ -425,7 +428,7 @@ // è°æ´åå§çªå£ä½ç½® // è°æ´åå§çªå£ä½ç½® CRect rcWnd; GetWindowRect(&rcWnd); int width = GetSystemMetrics(SM_CXSCREEN); @@ -439,22 +442,22 @@ Resize(); // ç¸å½äºå»¶æ¶è°ç¨masterçåå§å // ç¸å½äºå»¶æ¶è°ç¨masterçåå§å theApp.m_model.m_master.init(); theApp.m_model.loadPortParams(); // åå§åmaster以åéè¦æ§ä»¶ç»å®æ°æ® // åå§åmaster以åéè¦æ§ä»¶ç»å®æ°æ® m_pPageGraph1->BindEquipmentToGraph(); // æ´æ°ç»å½ç¶æ // æ´æ°ç»å½ç¶æ UpdateLoginStatus(); //SystemLogManager::getInstance.log(SystemLogManager::LogType::Info, _T("BondEqå¯å¨...")); //SystemLogManager::getInstance.log(SystemLogManager::LogType::Info, _T("BondEqå¯å¨...")); //SystemLogManager::getInstance. return TRUE; // é¤éå°ç¦ç¹è®¾ç½®å°æ§ä»¶ï¼å¦åè¿å TRUE return TRUE; // é¤éå°ç¦ç¹è®¾ç½®å°æ§ä»¶ï¼å¦åè¿å TRUE } void CServoDlg::OnSysCommand(UINT nID, LPARAM lParam) @@ -470,19 +473,19 @@ } } // 妿åå¯¹è¯æ¡æ·»å æå°åæé®ï¼åéè¦ä¸é¢ç代ç // æ¥ç»å¶è¯¥å¾æ ã 对äºä½¿ç¨ææ¡£/è§å¾æ¨¡åç MFC åºç¨ç¨åºï¼ // è¿å°ç±æ¡æ¶èªå¨å®æã // 妿åå¯¹è¯æ¡æ·»å æå°åæé®ï¼åéè¦ä¸é¢ç代ç // æ¥ç»å¶è¯¥å¾æ ã 对äºä½¿ç¨ææ¡£/è§å¾æ¨¡åç MFC åºç¨ç¨åºï¼ // è¿å°ç±æ¡æ¶èªå¨å®æã void CServoDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // ç¨äºç»å¶ç设å¤ä¸ä¸æ CPaintDC dc(this); // ç¨äºç»å¶ç设å¤ä¸ä¸æ SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // ä½¿å¾æ å¨å·¥ä½åºç©å½¢ä¸å± ä¸ // ä½¿å¾æ å¨å·¥ä½åºç©å½¢ä¸å± ä¸ int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; @@ -490,7 +493,7 @@ int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // ç»å¶å¾æ // ç»å¶å¾æ dc.DrawIcon(x, y, m_hIcon); } else @@ -499,8 +502,8 @@ } } //å½ç¨æ·æå¨æå°åçªå£æ¶ç³»ç»è°ç¨æ¤å½æ°åå¾å æ //æ¾ç¤ºã //å½ç¨æ·æå¨æå°åçªå£æ¶ç³»ç»è°ç¨æ¤å½æ°åå¾å æ //æ¾ç¤ºã HCURSOR CServoDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); @@ -660,6 +663,17 @@ pCmdUI->Enable(TRUE); } void CServoDlg::OnMenuToolsClientList() { CClientListDlg dlg; dlg.DoModal(); } void CServoDlg::OnUpdateMenuToolsClientList(CCmdUI* pCmdUI) { pCmdUI->Enable(TRUE); } void CServoDlg::OnMenuHelpAbout() { theApp.m_model.getMaster().test(); @@ -669,14 +683,14 @@ void CServoDlg::OnBnClickedOk() { // TODO: 卿¤æ·»å æ§ä»¶éç¥å¤çç¨åºä»£ç // TODO: 卿¤æ·»å æ§ä»¶éç¥å¤çç¨åºä»£ç CDialogEx::OnOK(); } void CServoDlg::OnBnClickedCancel() { // TODO: 卿¤æ·»å æ§ä»¶éç¥å¤çç¨åºä»£ç // TODO: 卿¤æ·»å æ§ä»¶éç¥å¤çç¨åºä»£ç CDialogEx::OnCancel(); } @@ -870,7 +884,7 @@ void CServoDlg::OnClose() { // TODO: 卿¤æ·»å æ¶æ¯å¤çç¨åºä»£ç å/æè°ç¨é»è®¤å¼ // TODO: 卿¤æ·»å æ¶æ¯å¤çç¨åºä»£ç å/æè°ç¨é»è®¤å¼ CDialogEx::OnClose(); } @@ -895,7 +909,7 @@ void CServoDlg::OnTimer(UINT_PTR nIDEvent) { if (TIMER_ID_CREATE_TERMINAL == nIDEvent) { // é¢å å建ç»ç«¯çªå£ // é¢å å建ç»ç«¯çªå£ KillTimer(TIMER_ID_CREATE_TERMINAL); char szBuffer[MAX_PATH]; sprintf_s(szBuffer, MAX_PATH, "%s\\RES\\TeminalMsg.html", (LPTSTR)(LPCTSTR)theApp.m_strAppDir); @@ -982,7 +996,7 @@ ::EnableMenuItem(hMenu, ID_OPEATOR_SWITCH, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); ::EnableMenuItem(hMenu, ID_OPERATOR_LOGOUT, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); m_pTopToolbar->SetOperatorBtnText(_T("æªç»å½")); m_pTopToolbar->SetOperatorBtnText(_T("æªç»å½")); } } @@ -992,14 +1006,14 @@ if (id == IDC_BUTTON_RUN || id == IDC_BUTTON_STOP) { UserRole emRole = UserManager::getInstance().getCurrentUserRole(); if (emRole != UserRole::SuperAdmin) { AfxMessageBox(_T("å½åç¨æ·å¹¶é管çåï¼ï¼ï¼")); AfxMessageBox(_T("å½åç¨æ·å¹¶é管çåï¼ï¼ï¼")); return 1; } } if (id == IDC_BUTTON_RUN) { if (theApp.m_model.getMaster().getState() == SERVO::MASTERSTATE::MSERROR) { AfxMessageBox("å½åææºå°åçé误ï¼ä¸è½å¯å¨ï¼è¯·ç¡®è®¤è§£å³é®é¢ååå°è¯éæ°å¯å¨ï¼"); AfxMessageBox("å½åææºå°åçé误ï¼ä¸è½å¯å¨ï¼è¯·ç¡®è®¤è§£å³é®é¢ååå°è¯éæ°å¯å¨ï¼"); } else { if (theApp.m_model.getMaster().start() == 0) { @@ -1011,7 +1025,7 @@ } else if (id == IDC_BUTTON_RUN_BATCH) { if (theApp.m_model.getMaster().getState() == SERVO::MASTERSTATE::MSERROR) { AfxMessageBox("å½åææºå°åçé误ï¼ä¸è½å¯å¨ï¼è¯·ç¡®è®¤è§£å³é®é¢ååå°è¯éæ°å¯å¨ï¼"); AfxMessageBox("å½åææºå°åçé误ï¼ä¸è½å¯å¨ï¼è¯·ç¡®è®¤è§£å³é®é¢ååå°è¯éæ°å¯å¨ï¼"); } else { if (theApp.m_model.getMaster().startBatch() == 0) { @@ -1023,7 +1037,7 @@ } else if (id == IDC_BUTTON_RUN_CT) { if (theApp.m_model.getMaster().getState() == SERVO::MASTERSTATE::MSERROR) { AfxMessageBox("å½åææºå°åçé误ï¼ä¸è½å¯å¨ï¼è¯·ç¡®è®¤è§£å³é®é¢ååå°è¯éæ°å¯å¨ï¼"); AfxMessageBox("å½åææºå°åçé误ï¼ä¸è½å¯å¨ï¼è¯·ç¡®è®¤è§£å³é®é¢ååå°è¯éæ°å¯å¨ï¼"); } else { if (theApp.m_model.getMaster().startContinuousTransfer() == 0) { @@ -1082,7 +1096,7 @@ else if (2 == menuId) { CUserManagerDlg dlg; if (dlg.DoModal() != IDOK) { logManager.log(SystemLogManager::LogType::Operation, _T("ç¨æ·ç®¡çç颿ä½è¢«åæ¶ï¼")); logManager.log(SystemLogManager::LogType::Operation, _T("ç¨æ·ç®¡çç颿ä½è¢«åæ¶ï¼")); } } else if (3 == menuId) { @@ -1090,14 +1104,14 @@ dlg.DoModal(); } else if (4 == menuId) { int ret = AfxMessageBox(_T("æ¯å¦åæ¢ç¨æ·ï¼åæ¢ç¨æ·ä¼éåºå½åè´¦å·ï¼"), MB_OKCANCEL | MB_ICONEXCLAMATION); int ret = AfxMessageBox(_T("æ¯å¦åæ¢ç¨æ·ï¼åæ¢ç¨æ·ä¼éåºå½åè´¦å·ï¼"), MB_OKCANCEL | MB_ICONEXCLAMATION); if (ret != IDOK) { return 0; } logManager.log(SystemLogManager::LogType::Operation, _T("ç¡®è®¤åæ¢è§è²ï¼")); logManager.log(SystemLogManager::LogType::Operation, _T("ç¡®è®¤åæ¢è§è²ï¼")); if (userManager.isLoggedIn()) { logManager.log(SystemLogManager::LogType::Info, _T("éåºç»å½ï¼")); logManager.log(SystemLogManager::LogType::Info, _T("éåºç»å½ï¼")); userManager.logout(); } @@ -1106,13 +1120,13 @@ } else { CString cstrMessage; cstrMessage.Format(_T("æ¯å¦éåºç¨æ· [%s]ï¼"), userManager.getCurrentUser().c_str()); cstrMessage.Format(_T("æ¯å¦éåºç¨æ· [%s]ï¼"), userManager.getCurrentUser().c_str()); int ret = AfxMessageBox(_T(cstrMessage), MB_OKCANCEL | MB_ICONEXCLAMATION); if (ret != IDOK) { return 0; } logManager.log(SystemLogManager::LogType::Info, _T("éåºç»å½ï¼")); logManager.log(SystemLogManager::LogType::Info, _T("éåºç»å½ï¼")); userManager.logout(); } @@ -1156,16 +1170,16 @@ SERVO::MASTERSTATE state = theApp.m_model.getMaster().getState(); if (state == SERVO::MASTERSTATE::RUNNING) { strText.Format(_T("æ£å¨è¿è¡ï¼%02d:%02d:%02d %s"), h, m, s, pszSuffix); strText.Format(_T("æ£å¨è¿è¡ï¼%02d:%02d:%02d %s"), h, m, s, pszSuffix); } else if (state == SERVO::MASTERSTATE::RUNNING_CONTINUOUS_TRANSFER) { strText.Format(_T("åä¼ æ¨¡å¼ï¼%02d:%02d:%02d %s"), h, m, s, pszSuffix); strText.Format(_T("åä¼ æ¨¡å¼ï¼%02d:%02d:%02d %s"), h, m, s, pszSuffix); } else if (state == SERVO::MASTERSTATE::RUNNING_BATCH) { strText.Format(_T("JOB模å¼ï¼%02d:%02d:%02d %s"), h, m, s, pszSuffix); strText.Format(_T("JOB模å¼ï¼%02d:%02d:%02d %s"), h, m, s, pszSuffix); } else { strText.Format(_T("å·²è¿è¡ï¼%02d:%02d:%02d %s"), h, m, s, pszSuffix); strText.Format(_T("å·²è¿è¡ï¼%02d:%02d:%02d %s"), h, m, s, pszSuffix); } return strText; SourceCode/Bond/Servo/ServoDlg.h
@@ -1,5 +1,5 @@ // ServoDlg.h : 头æä»¶  // ServoDlg.h : 头æä»¶ // #pragma once @@ -20,12 +20,12 @@ #include "CPageGlassList.h" // CServoDlg å¯¹è¯æ¡ // CServoDlg å¯¹è¯æ¡ class CServoDlg : public CDialogEx { // æé // æé public: CServoDlg(CWnd* pParent = NULL); // æ åæé 彿° CServoDlg(CWnd* pParent = NULL); // æ åæé 彿° public: @@ -50,16 +50,16 @@ CPageLog* m_pPageLog; CPageTransferLog* m_pPageTransferLog; // å¯¹è¯æ¡æ°æ® // å¯¹è¯æ¡æ°æ® #ifdef AFX_DESIGN_TIME enum { IDD = IDD_SERVO_DIALOG }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV æ¯æ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV æ¯æ // å®ç° // å®ç° protected: HICON m_hIcon; COLORREF m_crBkgnd; @@ -70,7 +70,7 @@ CPanelAttributes* m_pPanelAttributes; CMyStatusbar* m_pMyStatusbar; // çæçæ¶æ¯æ å°å½æ° // çæçæ¶æ¯æ å°å½æ° virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); @@ -98,6 +98,8 @@ afx_msg void OnUpdateMenuTestMessageSet(CCmdUI* pCmdUI); afx_msg void OnMenuTestMessageClear(); afx_msg void OnUpdateMenuTestMessageClear(CCmdUI* pCmdUI); afx_msg void OnMenuToolsClientList(); afx_msg void OnUpdateMenuToolsClientList(CCmdUI* pCmdUI); afx_msg void OnMenuHelpAbout(); afx_msg void OnTimer(UINT_PTR nIDEvent); afx_msg LRESULT OnPanelResize(WPARAM wParam, LPARAM lParam); SourceCode/Bond/Servo/resource.hBinary files differ