This commit is contained in:
coco
2026-07-03 16:05:30 +08:00
commit df489d5640
1101 changed files with 779140 additions and 0 deletions
@@ -0,0 +1,291 @@
# 设备管理界面
<cite>
**本文档引用的文件**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp)
- [devmngframe.h](file://h/devmngframe.h)
- [appdevview.cpp](file://cpp/Views/appdevview.cpp)
- [appdevview.h](file://h/appdevview.h)
- [appdevolview.cpp](file://cpp/Views/appdevolview.cpp)
- [appdevolview.h](file://h/appdevolview.h)
- [navdevview.cpp](file://cpp/Views/navdevview.cpp)
- [navdevview.h](file://h/navdevview.h)
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp)
- [DevOperator.h](file://h/DevOperator.h)
- [appdevdetaillistview.cpp](file://cpp/Views/appdevdetaillistview.cpp)
- [appdevoldetaillistview.cpp](file://cpp/Views/appdevoldetaillistview.cpp)
- [appdevolgrlistview.cpp](file://cpp/ProblemZone/appdevolgrlistview.cpp)
- [appdevolacview.cpp](file://cpp/Views/appdevolacview.cpp)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概述](#架构概述)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
## 简介
设备管理界面是Geomative Studio软件中的一个核心功能模块,负责设备的连接状态监控、串口配置、PLC状态查询与参数显示。该界面通过`devmngframe`框架与多个视图(如`appdevview``appdevolview`)协同工作,为用户提供设备列表、详细信息面板和实时状态窗口。用户可以通过该界面执行设备发现、参数查看与状态诊断等操作。对于开发者而言,该框架提供了扩展设备信息展示、添加新的诊断功能或集成新型硬件协议的接口。
## 项目结构
设备管理界面的相关文件主要分布在`cpp/Views``h`目录下。`devmngframe.cpp``devmngframe.h`定义了设备管理框架的核心逻辑,而`appdevview.cpp``appdevolview.cpp`等文件则实现了具体的应用视图。`DevOperator.cpp``DevOperator.h`提供了设备操作的业务逻辑,包括设备注册、参数修改和状态查询等功能。
```mermaid
graph TB
subgraph "视图层"
devmngframe["devmngframe (设备管理框架)"]
appdevview["appdevview (应用设备视图)"]
appdevolview["appdevolview (在线设备视图)"]
navdevview["navdevview (导航设备视图)"]
end
subgraph "业务逻辑层"
DevOperator["DevOperator (设备操作器)"]
end
subgraph "数据模型"
Device["Device (设备类)"]
end
devmngframe --> appdevview
devmngframe --> appdevolview
devmngframe --> navdevview
devmngframe --> DevOperator
DevOperator --> Device
```
**图表来源**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L1-L1806)
- [appdevview.cpp](file://cpp/Views/appdevview.cpp#L1-L102)
- [appdevolview.cpp](file://cpp/Views/appdevolview.cpp#L1-L120)
- [navdevview.cpp](file://cpp/Views/navdevview.cpp#L1-L180)
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp#L1-L1604)
**章节来源**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L1-L1806)
- [appdevview.cpp](file://cpp/Views/appdevview.cpp#L1-L102)
- [appdevolview.cpp](file://cpp/Views/appdevolview.cpp#L1-L120)
- [navdevview.cpp](file://cpp/Views/navdevview.cpp#L1-L180)
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp#L1-L1604)
## 核心组件
设备管理界面的核心组件包括`CDevMngFrame``CAppDevView``CAppDevOLView``CNavDevView``CDevMngFrame`是设备管理框架的主窗口,负责协调各个视图的显示和交互。`CAppDevView``CAppDevOLView`分别用于显示离线和在线设备的详细信息,而`CNavDevView`则提供设备的导航树视图。`CDevOperator`类封装了设备操作的业务逻辑,如设备注册、参数修改和状态查询。
**章节来源**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L1-L1806)
- [appdevview.cpp](file://cpp/Views/appdevview.cpp#L1-L102)
- [appdevolview.cpp](file://cpp/Views/appdevolview.cpp#L1-L120)
- [navdevview.cpp](file://cpp/Views/navdevview.cpp#L1-L180)
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp#L1-L1604)
## 架构概述
设备管理界面采用MVCModel-View-Controller)架构模式。`CDevMngFrame`作为控制器,负责协调视图和模型之间的交互。`CAppDevView``CAppDevOLView``CNavDevView`作为视图,负责显示设备信息和用户界面。`CDevOperator``CDevice`作为模型,负责处理设备数据和业务逻辑。这种架构使得界面逻辑与业务逻辑分离,提高了代码的可维护性和可扩展性。
```mermaid
classDiagram
class CDevMngFrame {
+CView* m_pAppDevView
+CView* m_pNavDevView
+CDevOperator* m_pDevOperator
+ShowAppView(DWORD, UINT)
+OnModifyDeviceParameter()
+OnRegisterNewDevice()
}
class CAppDevView {
+CView* m_pDevDetailListView
+CView* m_pDevContentListView
}
class CAppDevOLView {
+CView* m_pDevOLDetailListView
+CView* m_pDevOLGRListView
+CView* m_pDevOLACListView
}
class CNavDevView {
+CTreeCtrl m_devTree
}
class CDevOperator {
+CStateProcessor m_stateProcessor
+CHandleProcessor m_handleProcessor
+InitialNavDevView(CNavDevView*)
+ShowFLDeviceInfo(DWORD, CView*)
+ShowOLDeviceInfo(DWORD, CView*)
+ModifyDeviceParameter(CNavDevView*, CListCtrl&)
}
class CDevice {
+CString m_szDevSN
+UINT m_uState
+DWORD m_dwID
+ShowOLDetailInfo(CListCtrl&)
+ShowGRInfo(CListCtrl&)
+ShowACInfo(CListCtrl&)
}
CDevMngFrame --> CAppDevView : "包含"
CDevMngFrame --> CAppDevOLView : "包含"
CDevMngFrame --> CNavDevView : "包含"
CDevMngFrame --> CDevOperator : "使用"
CDevOperator --> CDevice : "操作"
CAppDevView --> CDevice : "显示"
CAppDevOLView --> CDevice : "显示"
```
**图表来源**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L1-L1806)
- [appdevview.cpp](file://cpp/Views/appdevview.cpp#L1-L102)
- [appdevolview.cpp](file://cpp/Views/appdevolview.cpp#L1-L120)
- [navdevview.cpp](file://cpp/Views/navdevview.cpp#L1-L180)
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp#L1-L1604)
## 详细组件分析
### CDevMngFrame 分析
`CDevMngFrame`是设备管理框架的主窗口类,继承自`CMDIChildWnd`。它负责创建和管理设备管理界面的布局,包括导航视图和应用视图。通过`OnCreateClient`方法,它使用`CSplitterWnd`将窗口分割为左右两部分,左侧为`CNavDevView`,右侧为`CAppDevView``CAppDevOLView``ShowAppView`方法根据设备状态动态切换右侧视图。
#### 类图
```mermaid
classDiagram
class CDevMngFrame {
+CView* m_pAppDevView
+CView* m_pNavDevView
+CDevOperator* m_pDevOperator
+CSplitterWnd m_splitter
+ShowAppView(DWORD, UINT)
+OnMDIActivate(BOOL, CWnd*, CWnd*)
+OnClose()
}
CDevMngFrame --|> CMDIChildWnd
```
**图表来源**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L1-L1806)
- [devmngframe.h](file://h/devmngframe.h#L1-L108)
#### 消息处理流程
```mermaid
sequenceDiagram
participant 用户
participant CDevMngFrame
participant CDevOperator
participant CDevice
用户->>CDevMngFrame : 选择设备
CDevMngFrame->>CDevMngFrame : OnSelchangedNavDevTree
CDevMngFrame->>CDevMngFrame : OnSchedule
CDevMngFrame->>CDevOperator : ShowOLDeviceInfo 或 ShowFLDeviceInfo
CDevOperator->>CDevice : 获取设备信息
CDevice-->>CDevOperator : 返回设备信息
CDevOperator-->>CDevMngFrame : 更新视图
CDevMngFrame-->>用户 : 显示设备详细信息
```
**图表来源**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L1-L1806)
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp#L1-L1604)
**章节来源**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L1-L1806)
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp#L1-L1604)
### CAppDevView 与 CAppDevOLView 分析
`CAppDevView``CAppDevOLView`分别用于显示离线和在线设备的详细信息。`CAppDevView`包含`CAppDevDetailListView``CAppDataTdListView`,用于显示设备基本信息和测试数据。`CAppDevOLView`包含`CAppDevOLDetailListView``CAppDevOLGRListView``CAppDevOLACView`,用于显示在线设备的详细信息、接地电阻和交流信息。
#### 布局流程图
```mermaid
flowchart TD
Start([创建视图]) --> CreateSplitter["创建分割窗口"]
CreateSplitter --> CreateDetail["创建详细信息列表"]
CreateDetail --> CreateContent["创建内容列表"]
CreateContent --> SetStyle["设置列表样式"]
SetStyle --> InsertColumns["插入列表列"]
InsertColumns --> InsertItems["插入列表项"]
InsertItems --> End([视图创建完成])
```
**图表来源**
- [appdevview.cpp](file://cpp/Views/appdevview.cpp#L1-L102)
- [appdevolview.cpp](file://cpp/Views/appdevolview.cpp#L1-L120)
**章节来源**
- [appdevview.cpp](file://cpp/Views/appdevview.cpp#L1-L102)
- [appdevolview.cpp](file://cpp/Views/appdevolview.cpp#L1-L120)
### CNavDevView 分析
`CNavDevView`提供设备的导航树视图,用户可以通过树形结构浏览和选择设备。它通过`CTreeCtrl`控件实现树形视图,并在`OnInitialUpdate`方法中初始化树的样式。`OnRclickNavDevTree`方法处理右键点击事件,弹出上下文菜单。
#### 交互流程图
```mermaid
flowchart TD
A([用户右键点击设备]) --> B{是否在设备上?}
B --> |是| C[选择设备]
C --> D[获取设备句柄和状态]
D --> E[发送调度消息]
E --> F[更新应用视图]
F --> G[显示设备详细信息]
B --> |否| H[无操作]
```
**图表来源**
- [navdevview.cpp](file://cpp/Views/navdevview.cpp#L1-L180)
- [navdevview.h](file://h/navdevview.h#L1-L70)
**章节来源**
- [navdevview.cpp](file://cpp/Views/navdevview.cpp#L1-L180)
### CDevOperator 分析
`CDevOperator`类封装了设备操作的业务逻辑,包括设备注册、参数修改和状态查询。它通过`InitialNavDevView`方法初始化导航视图,通过`ShowOLDeviceInfo``ShowFLDeviceInfo`方法显示在线和离线设备的详细信息。`ModifyDeviceParameter`方法用于修改设备参数。
#### 业务逻辑流程图
```mermaid
flowchart TD
Start([修改设备参数]) --> GetSelection["获取选中设备"]
GetSelection --> GetHandle["获取设备句柄"]
GetHandle --> GetID["获取设备ID"]
GetID --> GetDevice["获取设备对象"]
GetDevice --> ModifyParam["修改设备参数"]
ModifyParam --> ShowInfo["更新视图显示"]
ShowInfo --> End([参数修改完成])
```
**图表来源**
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp#L1-L1604)
- [DevOperator.h](file://h/DevOperator.h#L1-L59)
**章节来源**
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp#L1-L1604)
## 依赖分析
设备管理界面的组件之间存在紧密的依赖关系。`CDevMngFrame`依赖于`CDevOperator`来执行设备操作,`CDevOperator`又依赖于`CDevice`来获取设备信息。视图组件如`CAppDevView``CAppDevOLView`依赖于`CDevOperator`来更新显示内容。这种依赖关系通过指针成员变量和方法调用实现。
```mermaid
graph TD
CDevMngFrame --> CDevOperator
CDevOperator --> CDevice
CDevMngFrame --> CNavDevView
CDevMngFrame --> CAppDevView
CDevMngFrame --> CAppDevOLView
CAppDevView --> CDevice
CAppDevOLView --> CDevice
```
**图表来源**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L1-L1806)
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp#L1-L1604)
- [appdevview.cpp](file://cpp/Views/appdevview.cpp#L1-L102)
- [appdevolview.cpp](file://cpp/Views/appdevolview.cpp#L1-L120)
**章节来源**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L1-L1806)
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp#L1-L1604)
## 性能考虑
设备管理界面在处理大量设备时可能会遇到性能瓶颈。建议在初始化导航视图时,采用异步加载的方式,避免阻塞UI线程。此外,对于频繁更新的实时状态数据,可以采用定时器机制,定期刷新视图,而不是实时更新,以减少CPU和内存的消耗。
## 故障排除指南
当设备管理界面无法正常显示设备信息时,首先检查设备连接状态和串口配置。如果设备在线但无法通信,可以尝试重启设备或重新插拔串口线。如果问题仍然存在,可以使用`OnGetAnlyseInfo`功能获取诊断信息,分析日志文件以定位问题。
**章节来源**
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp#L600-L640)
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp#L609-L639)
## 结论
设备管理界面通过`devmngframe`框架与多个视图协同工作,为用户提供了一个功能丰富的设备管理环境。其MVC架构设计使得界面逻辑与业务逻辑分离,便于维护和扩展。开发者可以通过扩展`CDevOperator`类来添加新的诊断功能或集成新型硬件协议,满足不断变化的需求。