# 设备状态监控 **本文档引用的文件** - [appdevolview.cpp](file://cpp/Views/appdevolview.cpp) - [appdevolview.h](file://h/appdevolview.h) - [appdevoldetaillistview.h](file://h/appdevoldetaillistview.h) - [appdevolgrlistview.h](file://h/appdevolgrlistview.h) - [appdevolacview.h](file://h/appdevolacview.h) - [DialPlcStatusShow.cpp](file://cpp/Views/DialPlcStatusShow.cpp) - [DialPlcStatusSetting.cpp](file://cpp/Views/DialPlcStatusSetting.cpp) - [OperPLC.cpp](file://cpp/Tools/OperPLC.cpp) - [StateProcessor.cpp](file://cpp/Tools/StateProcessor.cpp) - [DevManager.cpp](file://cpp/Managers/DevManager.cpp) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构概述](#架构概述) 5. [详细组件分析](#详细组件分析) 6. [依赖分析](#依赖分析) 7. [性能考虑](#性能考虑) 8. [故障排除指南](#故障排除指南) 9. [结论](#结论) ## 简介 本文档全面记录了GeomativeStudio中的设备实时状态监控系统,重点涵盖PLC状态查询、定时任务监控和运行日志显示功能。系统通过UI消息机制触发状态轮询,并在appdevolview中实现状态视图的数据刷新。文档详细描述了关键状态字段如m_bDevState、m_iPlcTimerInterval的含义与更新逻辑,为用户提供操作指南,为开发者提供扩展接口说明。 ## 项目结构 设备状态监控功能主要分布在cpp/Views和h目录下,以appdevolview为核心视图容器,包含多个子视图组件。系统通过分层架构实现状态监控,包括UI层、业务逻辑层和设备通信层。 ```mermaid graph TB subgraph "UI层" appdevolview["appdevolview (主容器)"] appdevoldetaillistview["appdevoldetaillistview (详情列表)"] appdevolgrlistview["appdevolgrlistview (图形列表)"] appdevolacview["appdevolacview (活动状态)"] end subgraph "业务逻辑层" DevManager["DevManager (设备管理)"] StateProcessor["StateProcessor (状态处理)"] end subgraph "设备通信层" OperPLC["OperPLC (PLC操作)"] SComPort["SComPort (串口通信)"] end appdevolview --> appdevoldetaillistview appdevolview --> appdevolgrlistview appdevolview --> appdevolacview appdevolview --> DevManager DevManager --> StateProcessor DevManager --> OperPLC OperPLC --> SComPort ``` **图示来源** - [appdevolview.cpp](file://cpp/Views/appdevolview.cpp#L1-L120) - [DevManager.cpp](file://cpp/Managers/DevManager.cpp#L1-L50) **本节来源** - [appdevolview.cpp](file://cpp/Views/appdevolview.cpp#L1-L120) - [h](file://h#L1-L10) ## 核心组件 设备状态监控系统的核心组件包括主视图容器CAppDevOLView及其三个子视图:设备详情列表视图、图形列表视图和活动状态视图。这些组件通过CSplitterWnd实现分屏布局,提供一体化的状态监控界面。 **本节来源** - [appdevolview.cpp](file://cpp/Views/appdevolview.cpp#L18-L120) - [appdevolview.h](file://h/appdevolview.h#L13-L54) ## 架构概述 系统采用MVC架构模式,CAppDevOLView作为视图控制器,管理三个子视图的布局和显示。状态数据通过DevManager从底层设备获取,经由StateProcessor处理后更新到UI组件。 ```mermaid sequenceDiagram participant UI as "UI界面" participant View as "CAppDevOLView" participant Manager as "DevManager" participant PLC as "OperPLC" participant Device as "PLC设备" UI->>View : OnRemQueryPlcStatus消息 View->>Manager : 请求PLC状态 Manager->>PLC : 执行查询命令 PLC->>Device : 发送查询指令 Device-->>PLC : 返回状态数据 PLC-->>Manager : 解析状态数据 Manager-->>View : 返回设备状态 View->>View : 更新m_bDevState等状态字段 View->>UI : 刷新视图显示 ``` **图示来源** - [appdevolview.cpp](file://cpp/Views/appdevolview.cpp#L68-L105) - [DevManager.cpp](file://cpp/Managers/DevManager.cpp#L15-L80) ## 详细组件分析 ### 主视图容器分析 CAppDevOLView是设备在线状态监控的主视图容器,负责创建和管理三个子视图的分屏布局。通过CSplitterWnd实现灵活的窗口分割,提供最佳的用户体验。 ```mermaid classDiagram class CAppDevOLView { +CView* m_pDevOLDetailListView +CView* m_pDevOLGRListView +CView* m_pDevOLACListView -CSplitterWnd m_firstSplitter -CSplitterWnd m_secondSplitter +Create() bool +OnSize() void +OnDraw() void } class CAppDevOLDetailListView { +int m_iRowCount -CListCtrl* m_pDetailList +OnInitialUpdate() void +OnDraw() void } class CAppDevOLGRListView { +OnInitialUpdate() void +OnRButtonDown() void +OnOpDevRefreshGR() void } class CAppDevOLACView { +OnInitialUpdate() void +OnDraw() void } CAppDevOLView --> CAppDevOLDetailListView : "包含" CAppDevOLView --> CAppDevOLGRListView : "包含" CAppDevOLView --> CAppDevOLACView : "包含" ``` **图示来源** - [appdevolview.h](file://h/appdevolview.h#L13-L54) - [appdevoldetaillistview.h](file://h/appdevoldetaillistview.h#L13-L53) - [appdevolgrlistview.h](file://h/appdevolgrlistview.h#L13-L52) - [appdevolacview.h](file://h/appdevolacview.h#L13-L51) **本节来源** - [appdevolview.cpp](file://cpp/Views/appdevolview.cpp#L18-L120) - [appdevolview.h](file://h/appdevolview.h#L13-L54) ### 状态轮询机制分析 系统通过UI消息OnRemQueryPlcStatus和OnRemGD10TimerTdRun触发状态轮询。当用户请求或定时器触发时,系统调用PLC状态查询接口,实现设备状态的实时监控。 ```mermaid flowchart TD Start([用户操作或定时器]) --> CheckMessage{"消息类型?"} CheckMessage --> |OnRemQueryPlcStatus| QueryPLC["调用PLC状态查询"] CheckMessage --> |OnRemGD10TimerTdRun| CheckInterval["检查m_iPlcTimerInterval"] CheckInterval --> Valid{"间隔有效?"} Valid --> |是| QueryPLC Valid --> |否| End QueryPLC --> SendCommand["发送PLC查询指令"] SendCommand --> ReceiveData["接收PLC响应数据"] ReceiveData --> ParseData["解析状态数据"] ParseData --> UpdateState["更新m_bDevState等字段"] UpdateState --> RefreshView["刷新appdevolview显示"] RefreshView --> End([完成]) ``` **图示来源** - [DialPlcStatusShow.cpp](file://cpp/Views/DialPlcStatusShow.cpp#L1-L50) - [OperPLC.cpp](file://cpp/Tools/OperPLC.cpp#L15-L100) **本节来源** - [DialPlcStatusShow.cpp](file://cpp/Views/DialPlcStatusShow.cpp#L1-L50) - [OperPLC.cpp](file://cpp/Tools/OperPLC.cpp#L15-L100) ## 依赖分析 设备状态监控系统依赖于多个核心组件和工具类,形成完整的监控链条。系统通过清晰的依赖关系确保各组件职责分明,便于维护和扩展。 ```mermaid graph TD appdevolview --> DevManager DevManager --> StateProcessor DevManager --> OperPLC OperPLC --> SComPort DevManager --> TdManager appdevolview --> DialPlcStatusShow DialPlcStatusShow --> DialPlcStatusSetting StateProcessor --> FileOperTools DevManager --> IOManager style appdevolview fill:#f9f,stroke:#333 style DevManager fill:#bbf,stroke:#333 style OperPLC fill:#f96,stroke:#333 ``` **图示来源** - [DevManager.cpp](file://cpp/Managers/DevManager.cpp#L1-L30) - [OperPLC.cpp](file://cpp/Tools/OperPLC.cpp#L1-L20) - [StateProcessor.cpp](file://cpp/Tools/StateProcessor.cpp#L1-L15) **本节来源** - [DevManager.cpp](file://cpp/Managers/DevManager.cpp#L1-L50) - [OperPLC.cpp](file://cpp/Tools/OperPLC.cpp#L1-L30) ## 性能考虑 系统在设计时充分考虑了性能因素,通过合理的更新频率控制和数据缓存机制,确保监控系统的高效运行。m_iPlcTimerInterval字段控制PLC状态查询的间隔,避免频繁查询导致的性能问题。 ## 故障排除指南 当设备状态显示异常时,应首先检查串口通信是否正常,然后验证PLC设备是否在线。可通过DialPlcStatusShow对话框手动触发状态查询,诊断通信问题。日志文件位于Install/Geomative Studio/LOG目录下,可用于分析历史问题。 **本节来源** - [DialPlcStatusShow.cpp](file://cpp/Views/DialPlcStatusShow.cpp#L10-L50) - [OperPLC.cpp](file://cpp/Tools/OperPLC.cpp#L45-L80) ## 结论 GeomativeStudio的设备状态监控系统通过分层架构和模块化设计,实现了PLC状态查询、定时任务监控和运行日志显示等核心功能。系统具有良好的可扩展性,开发者可以基于现有框架添加新的监控指标和告警规则,满足不断变化的监控需求。