a
This commit is contained in:
@@ -0,0 +1,266 @@
|
||||
# 设备管理界面
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp)
|
||||
- [DailLogin.cpp](file://cpp/Views/DailLogin.cpp)
|
||||
- [DialFindComShow.cpp](file://cpp/Views/DialFindComShow.cpp)
|
||||
- [DialShowDevParam.cpp](file://cpp/Views/DialShowDevParam.cpp)
|
||||
- [DialPlcStatusShow.cpp](file://cpp/Views/DialPlcStatusShow.cpp)
|
||||
- [DialDevStatusTimerShow.cpp](file://cpp/Views/DialDevStatusTimerShow.cpp)
|
||||
- [DevManager.cpp](file://cpp/Managers/DevManager.cpp)
|
||||
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp)
|
||||
- [Device.cpp](file://cpp/ProblemZone/Device.cpp)
|
||||
- [NetRequestDialog.cpp](file://cpp/socket/NetRequestDialog.cpp)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构概述](#架构概述)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖关系分析](#依赖关系分析)
|
||||
7. [性能考虑](#性能考虑)
|
||||
8. [故障排除指南](#故障排除指南)
|
||||
9. [结论](#结论)
|
||||
|
||||
## 简介
|
||||
本文档深入分析GeomativeStudio项目中设备管理相关的UI组件实现。重点介绍devmngframe.cpp中设备管理框架的布局结构与消息响应机制,DailLogin.cpp中的登录验证流程,DialFindComShow.cpp中的串口检测对话框逻辑,DialShowDevParam.cpp中的设备参数展示机制。解释DialPlcStatusShow.cpp和DialDevStatusTimerShow.cpp中PLC状态与定时状态的实时更新策略。结合MFC消息映射机制,说明用户操作如何触发CDevManager的接口调用。为初学者提供UI与设备通信协同工作的概念性解释,为高级开发者提供多线程环境下UI刷新的最佳实践。
|
||||
|
||||
## 项目结构
|
||||
项目采用典型的MFC应用程序结构,设备管理相关的UI组件主要位于cpp/Views目录下。核心的设备管理框架由devmngframe.cpp实现,负责整体布局和消息分发。各个功能模块如登录、串口检测、设备参数展示等通过独立的对话框类实现。业务逻辑与数据管理由cpp/Managers和cpp/Operator目录下的类负责,形成清晰的分层架构。
|
||||
|
||||
**Section sources**
|
||||
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp)
|
||||
- [DailLogin.cpp](file://cpp/Views/DailLogin.cpp)
|
||||
|
||||
## 核心组件
|
||||
设备管理界面的核心组件包括设备管理框架、登录验证、串口检测、设备参数展示和状态监控等模块。这些组件通过MFC的消息映射机制协同工作,实现用户与设备的交互。CDevManager类作为设备管理的核心,负责设备的生命周期管理和状态维护。
|
||||
|
||||
**Section sources**
|
||||
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp)
|
||||
- [DevManager.cpp](file://cpp/Managers/DevManager.cpp)
|
||||
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp)
|
||||
|
||||
## 架构概述
|
||||
系统采用MFC文档/视图架构,设备管理功能通过CMDIChildWnd派生的CDevMngFrame类实现。该框架使用CSplitterWnd进行界面分割,左侧为导航树视图,右侧为内容显示区域。通过消息映射机制处理用户操作,调用CDevOperator和CDevManager类完成具体业务逻辑。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "UI层"
|
||||
A[CDevMngFrame] --> B[CNavDevView]
|
||||
A --> C[CAppDevView]
|
||||
A --> D[CAppDevOLView]
|
||||
end
|
||||
subgraph "业务逻辑层"
|
||||
E[CDevOperator] --> F[CDevManager]
|
||||
E --> G[CDevice]
|
||||
end
|
||||
subgraph "数据层"
|
||||
F --> H[数据库]
|
||||
G --> I[串口通信]
|
||||
end
|
||||
A --> E
|
||||
B --> E
|
||||
C --> E
|
||||
D --> E
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp)
|
||||
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp)
|
||||
- [DevManager.cpp](file://cpp/Managers/DevManager.cpp)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### 设备管理框架分析
|
||||
CDevMngFrame类实现了设备管理的主框架,负责界面布局和消息处理。通过CSplitterWnd将界面分为导航区域和内容显示区域,支持动态切换视图以显示不同状态的设备信息。
|
||||
|
||||
#### 布局结构
|
||||
```mermaid
|
||||
classDiagram
|
||||
class CDevMngFrame {
|
||||
+CSplitterWnd m_splitter
|
||||
+CView* m_pAppDevView
|
||||
+CView* m_pNavDevView
|
||||
+OnCreateClient()
|
||||
+ShowAppView()
|
||||
}
|
||||
class CNavDevView {
|
||||
+CTreeCtrl m_devTree
|
||||
}
|
||||
class CAppDevView {
|
||||
+CListCtrl m_devDetailList
|
||||
}
|
||||
class CAppDevOLView {
|
||||
+CListCtrl m_devOLDetailList
|
||||
+CListCtrl m_devOLGRList
|
||||
+CListCtrl m_devOLACList
|
||||
}
|
||||
CDevMngFrame --> CNavDevView : "包含"
|
||||
CDevMngFrame --> CAppDevView : "包含"
|
||||
CDevMngFrame --> CAppDevOLView : "包含"
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp)
|
||||
- [navdevview.h](file://h/navdevview.h)
|
||||
- [appdevview.h](file://h/appdevview.h)
|
||||
|
||||
#### 消息响应机制
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant 用户
|
||||
participant CDevMngFrame
|
||||
participant CDevOperator
|
||||
participant CDevManager
|
||||
用户->>CDevMngFrame : 点击"修改设备参数"
|
||||
CDevMngFrame->>CDevMngFrame : OnModifyDeviceParameter()
|
||||
CDevMngFrame->>CDevOperator : ModifyDeviceParameter()
|
||||
CDevOperator->>CDevManager : GetDeviceByID()
|
||||
CDevManager-->>CDevOperator : 返回CDevice对象
|
||||
CDevOperator->>CDevice : ModifyParameter()
|
||||
CDevice-->>CDevOperator : 显示参数对话框
|
||||
CDevOperator->>CDevice : ShowOLDetailInfo()
|
||||
CDevice-->>CDevOperator : 更新UI
|
||||
CDevOperator-->>CDevMngFrame : 返回结果
|
||||
CDevMngFrame-->>用户 : 显示更新后的界面
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp)
|
||||
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp)
|
||||
- [Device.cpp](file://cpp/ProblemZone/Device.cpp)
|
||||
|
||||
### 登录验证流程分析
|
||||
DailLogin.cpp实现了系统的登录验证功能,包括用户身份验证、密码保存和自动登录等特性。
|
||||
|
||||
#### 登录验证流程
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start([开始]) --> ValidateInput["验证输入参数"]
|
||||
ValidateInput --> InputValid{"输入有效?"}
|
||||
InputValid --> |否| ReturnError["显示错误信息"]
|
||||
InputValid --> |是| CheckUserID["验证用户ID"]
|
||||
CheckUserID --> UserIDValid{"ID正确?"}
|
||||
UserIDValid --> |否| ReturnError
|
||||
UserIDValid --> |是| CheckPassword["验证密码"]
|
||||
CheckPassword --> PasswordValid{"密码正确?"}
|
||||
PasswordValid --> |否| ReturnError
|
||||
PasswordValid --> |是| SaveSettings["保存设置"]
|
||||
SaveSettings --> CheckSave["是否保存密码?"]
|
||||
CheckSave --> |是| SavePassword["写入config.ini"]
|
||||
CheckSave --> |否| SkipSave
|
||||
SkipSave --> CheckAutoLogin["是否自动登录?"]
|
||||
CheckAutoLogin --> |是| SaveAutoLogin["写入config.ini"]
|
||||
CheckAutoLogin --> |否| SkipAutoLogin
|
||||
SkipAutoLogin --> Complete["登录成功"]
|
||||
ReturnError --> End([结束])
|
||||
Complete --> End
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [DailLogin.cpp](file://cpp/Views/DailLogin.cpp)
|
||||
|
||||
### 串口检测对话框逻辑
|
||||
DialFindComShow.cpp实现了串口检测结果的显示功能,用于向用户展示串口连接状态。
|
||||
|
||||
#### 串口检测逻辑
|
||||
```mermaid
|
||||
classDiagram
|
||||
class CDialFindComShow {
|
||||
+CString m_strShowCom
|
||||
+OnInitDialog()
|
||||
}
|
||||
CDialFindComShow --> CDialog : "继承"
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [DialFindComShow.cpp](file://cpp/Views/DialFindComShow.cpp)
|
||||
|
||||
### 设备参数展示机制
|
||||
DialShowDevParam.cpp实现了设备参数的展示和修改功能,支持参数的本地编辑和云端同步。
|
||||
|
||||
#### 参数展示与同步
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant CDevMngFrame
|
||||
participant CDialShowDevParam
|
||||
participant Network
|
||||
CDevMngFrame->>CDialShowDevParam : OnShowDevParam()
|
||||
CDialShowDevParam->>CDialShowDevParam : 显示参数对话框
|
||||
CDialShowDevParam->>CDialShowDevParam : 用户修改参数
|
||||
CDialShowDevParam->>CDialShowDevParam : 验证输入
|
||||
CDialShowDevParam->>Network : 发送修改请求
|
||||
Network-->>CDialShowDevParam : 接收响应
|
||||
CDialShowDevParam-->>CDevMngFrame : 返回结果
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [DialShowDevParam.cpp](file://cpp/Views/DialShowDevParam.cpp)
|
||||
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp)
|
||||
|
||||
### PLC状态与定时状态实时更新
|
||||
DialPlcStatusShow.cpp和DialDevStatusTimerShow.cpp实现了PLC状态和定时状态的实时监控功能。
|
||||
|
||||
#### 状态更新策略
|
||||
```mermaid
|
||||
classDiagram
|
||||
class CDialPlcStatusShow {
|
||||
+STRemPlcData* m_pRemPlcData
|
||||
+OnInitDialog()
|
||||
}
|
||||
class CDialDevStatusTimerShow {
|
||||
+CListCtrl m_listData
|
||||
+ShowPlcStatusData()
|
||||
}
|
||||
class CTaskDataOper {
|
||||
+QueryPlcStatusData()
|
||||
}
|
||||
CDialDevStatusTimerShow --> CTaskDataOper : "使用"
|
||||
CDialPlcStatusShow --> CDialDevStatusTimerShow : "关联"
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [DialPlcStatusShow.cpp](file://cpp/Views/DialPlcStatusShow.cpp)
|
||||
- [DialDevStatusTimerShow.cpp](file://cpp/Views/DialDevStatusTimerShow.cpp)
|
||||
- [TaskDataOper.h](file://h/TaskDataOper.h)
|
||||
|
||||
**Section sources**
|
||||
- [DialPlcStatusShow.cpp](file://cpp/Views/DialPlcStatusShow.cpp)
|
||||
- [DialDevStatusTimerShow.cpp](file://cpp/Views/DialDevStatusTimerShow.cpp)
|
||||
|
||||
## 依赖关系分析
|
||||
系统各组件之间存在清晰的依赖关系,UI组件依赖于业务逻辑组件,业务逻辑组件又依赖于数据访问组件。这种分层架构有助于代码的维护和扩展。
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[devmngframe.cpp] --> B[DevOperator.cpp]
|
||||
B --> C[DevManager.cpp]
|
||||
C --> D[Device.cpp]
|
||||
D --> E[SComPort.cpp]
|
||||
A --> F[DialShowDevParam.cpp]
|
||||
F --> G[NetRequestDialog.cpp]
|
||||
A --> H[DialPlcStatusShow.cpp]
|
||||
H --> I[DialDevStatusTimerShow.cpp]
|
||||
I --> J[TaskDataOper.cpp]
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp)
|
||||
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp)
|
||||
- [DevManager.cpp](file://cpp/Managers/DevManager.cpp)
|
||||
|
||||
## 性能考虑
|
||||
在多线程环境下进行UI刷新时,应避免在主线程中执行耗时操作。建议使用工作线程处理设备通信,通过PostMessage或SendMessage将结果发送回UI线程进行界面更新。对于频繁的状态更新,可以采用定时器机制,避免过度刷新导致的性能问题。
|
||||
|
||||
## 故障排除指南
|
||||
常见问题包括设备连接失败、参数同步异常和界面刷新延迟等。检查网络连接状态、验证设备ID和类型、确认串口配置正确性是解决问题的关键步骤。使用日志文件可以帮助定位具体的问题根源。
|
||||
|
||||
**Section sources**
|
||||
- [devmngframe.cpp](file://cpp/Views/devmngframe.cpp)
|
||||
- [Device.cpp](file://cpp/ProblemZone/Device.cpp)
|
||||
|
||||
## 结论
|
||||
本文档详细分析了GeomativeStudio项目中设备管理相关的UI组件实现。通过MFC框架实现了功能完整的设备管理界面,各组件之间通过清晰的消息传递机制协同工作。系统架构合理,代码组织规范,为类似应用的开发提供了有价值的参考。
|
||||
Reference in New Issue
Block a user