| | |
| | | #include "Common.h" |
| | | #include "Log.h" |
| | | #include "SecsTestDlg.h" |
| | | #include "AlarmManager.h" |
| | | #include <chrono> |
| | | #include <thread> |
| | | #include <cmath> |
| | |
| | | #define INDICATE_VACUUM_BAKE 11 |
| | | #define INDICATE_BAKE_COOLING 12 |
| | | #define INDICATE_MEASUREMENT 13 |
| | | |
| | | |
| | | /* 创建终端的定时器 */ |
| | | #define TIMER_ID_CREATE_TERMINAL 1 |
| | | |
| | | |
| | | // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 |
| | |
| | | m_bShowLogWnd = FALSE; |
| | | m_bIsRobotMoving = FALSE; |
| | | m_pLogDlg = nullptr; |
| | | m_pTerminalDisplayDlg = nullptr; |
| | | m_pObserver = nullptr; |
| | | } |
| | | |
| | | void CServoDlg::DoDataExchange(CDataExchange* pDX) |
| | |
| | | ON_UPDATE_COMMAND_UI(ID_MENU_WND_LOG, &CServoDlg::OnUpdateMenuWndLog) |
| | | ON_COMMAND(ID_MENU_HELP_ABOUT, &CServoDlg::OnMenuHelpAbout) |
| | | ON_WM_INITMENUPOPUP() |
| | | ON_WM_TIMER() |
| | | ON_WM_ERASEBKGND() |
| | | END_MESSAGE_MAP() |
| | | |
| | | |
| | | // CServoDlg 消息处理程序 |
| | | |
| | | void CServoDlg::InitRxWindows() |
| | | { |
| | | /* code */ |
| | | // 订阅数据 |
| | | IRxWindows* pRxWindows = RX_GetRxWindows(); |
| | | pRxWindows->enableLog(5); |
| | | if (m_pObserver == NULL) { |
| | | m_pObserver = pRxWindows->allocObserver([&](IAny* pAny) -> void { |
| | | // onNext |
| | | pAny->addRef(); |
| | | int code = pAny->getCode(); |
| | | if (RX_HSMS_TERMINAL_TEXT == code) { |
| | | const char* pszText; |
| | | if (pAny->getStringValue("text", pszText)) { |
| | | ShowTerminalText(pszText); |
| | | } |
| | | } |
| | | else if (RX_CODE_EQ_ALIVE == code) { |
| | | // 通知设备状态 |
| | | SERVO::CEquipment* pEquipment = nullptr; |
| | | if (pAny->getPtrValue("ptr", (void*&)pEquipment)) { |
| | | if (pEquipment != nullptr) { |
| | | int nID = pEquipment->getID(); |
| | | BOOL bAlive = pEquipment->isAlive(); |
| | | if (1 == nID) { |
| | | DeviceStatus status = bAlive ? DeviceStatus::ONLINE : DeviceStatus::OFFLINE; |
| | | UpdateDeviceStatus(INDICATE_ROBOT_ARM1, status); |
| | | UpdateDeviceStatus(INDICATE_ROBOT_ARM2, status); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | pAny->release(); |
| | | }, [&]() -> void { |
| | | // onComplete |
| | | }, [&](IThrowable* pThrowable) -> void { |
| | | // onErrorm |
| | | pThrowable->printf(); |
| | | }); |
| | | |
| | | theApp.m_model.getObservable()->observeOn(pRxWindows->mainThread()) |
| | | ->subscribe(m_pObserver); |
| | | } |
| | | } |
| | | |
| | | BOOL CServoDlg::OnInitDialog() |
| | | { |
| | |
| | | theApp.m_model.init(); |
| | | |
| | | |
| | | SetTimer(TIMER_ID_CREATE_TERMINAL, 3000, nullptr); |
| | | InitRxWindows(); |
| | | OnBnClickedButtonLog(); |
| | | UpdateLogBtn(); |
| | | Resize(); |
| | | |
| | | |
| | | // 相当于延时调用master的初始化 |
| | | theApp.m_model.m_master.init(); |
| | | |
| | | |
| | | return TRUE; // 除非将焦点设置到控件,否则返回 TRUE |
| | | } |
| | | |
| | |
| | | delete m_pLogDlg; |
| | | m_pLogDlg = nullptr; |
| | | } |
| | | if (m_pTerminalDisplayDlg != nullptr) { |
| | | m_pTerminalDisplayDlg->DestroyWindow(); |
| | | delete m_pTerminalDisplayDlg; |
| | | m_pTerminalDisplayDlg = nullptr; |
| | | } |
| | | |
| | | if (m_hbrBkgnd != nullptr) { |
| | | ::DeleteObject(m_hbrBkgnd); |
| | | } |
| | | |
| | | if (m_pObserver != nullptr) { |
| | | m_pObserver->unsubscribe(); |
| | | m_pObserver = NULL; |
| | | } |
| | | |
| | | } |
| | | |
| | | void CServoDlg::OnBnClickedButtonLog() |
| | |
| | | Invalidate(); |
| | | } |
| | | |
| | | void CServoDlg::UpdateDeviceStatus(int id, DeviceStatus status) |
| | | { |
| | | // 根据状态设置颜色 |
| | | COLORREF newBackgroundColor; |
| | | COLORREF newFrameColor1; |
| | | COLORREF newFrameColor2; |
| | | |
| | | switch (status) { |
| | | case ONLINE: |
| | | newBackgroundColor = RGB(255, 0, 0); |
| | | newFrameColor1 = RGB(22, 22, 22); |
| | | newFrameColor2 = RGB(255, 127, 39); |
| | | break; |
| | | case OFFLINE: |
| | | newBackgroundColor = RGB(0, 255, 0); |
| | | newFrameColor1 = RGB(22, 22, 22); |
| | | newFrameColor2 = RGB(255, 127, 39); |
| | | break; |
| | | default: |
| | | newBackgroundColor = RGB(255, 255, 255); // 默认白色背景 |
| | | newFrameColor1 = RGB(0, 0, 0); // 默认黑色框架1 |
| | | newFrameColor2 = RGB(0, 0, 0); // 默认黑色框架2 |
| | | break; |
| | | } |
| | | |
| | | m_pGraph->UpdateIndicateBox1Colors(id, newBackgroundColor, newFrameColor1, newFrameColor2); |
| | | |
| | | // 刷新界面 |
| | | Invalidate(); |
| | | UpdateWindow(); |
| | | } |
| | | |
| | | void CServoDlg::OnSize(UINT nType, int cx, int cy) |
| | | { |
| | | CDialogEx::OnSize(nType, cx, cy); |
| | |
| | | UpdateLogBtn(); |
| | | LOGE("OnLogDlgHide"); |
| | | |
| | | unsigned int DATAID, RPTID; |
| | | DATAID = 111; |
| | | RPTID = 1001; |
| | | std::vector<std::string> v; |
| | | v.push_back("abc"); |
| | | v.push_back("def"); |
| | | theApp.m_model.m_hsmsPassive.requestEventReportSend(DATAID, RPTID, v); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | |
| | | CDialogEx::OnMove(x, y); |
| | | } |
| | | |
| | | void CServoDlg::ShowTerminalText(const char* pszText, unsigned int duration/* = -1*/) |
| | | { |
| | | ASSERT(m_pTerminalDisplayDlg); |
| | | m_pTerminalDisplayDlg->ShowText(pszText, duration); |
| | | } |
| | | |
| | | 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); |
| | | m_pTerminalDisplayDlg = new CTerminalDisplayDlg(); |
| | | m_pTerminalDisplayDlg->SetTemplateHtml(szBuffer); |
| | | m_pTerminalDisplayDlg->Create(IDD_DIALOG_TERMINAL_DISPLAY, this); |
| | | } |
| | | |
| | | CDialogEx::OnTimer(nIDEvent); |
| | | } |
| | | |
| | | |
| | | BOOL CServoDlg::OnEraseBkgnd(CDC* pDC) |
| | | { |