a
This commit is contained in:
@@ -0,0 +1,230 @@
|
||||
# 实时数据监控
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [DialListRealTimeMeasuData.cpp](file://cpp/Views/DialListRealTimeMeasuData.cpp)
|
||||
- [DialListRealTimeMeasuData.h](file://h/DialListRealTimeMeasuData.h)
|
||||
- [DialListRealTimeMeasuGR.cpp](file://cpp/Views/DialListRealTimeMeasuGR.cpp)
|
||||
- [DialListRealTimeMeasuGR.h](file://h/DialListRealTimeMeasuGR.h)
|
||||
- [DialRealTimeMeasureData.cpp](file://cpp/Views/DialRealTimeMeasureData.cpp)
|
||||
- [DialRealTimeMeasureData.h](file://h/DialRealTimeMeasureData.h)
|
||||
- [appdatatdlistview.cpp](file://cpp/Views/appdatatdlistview.cpp)
|
||||
- [appdatatdgrlistview.cpp](file://cpp/Views/appdatatdgrlistview.cpp)
|
||||
- [SComPort.cpp](file://cpp/Tools/SComPort.cpp)
|
||||
- [NetWorkOper.cpp](file://cpp/Tools/NetWorkOper.cpp)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [引言](#引言)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构概述](#架构概述)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖关系分析](#依赖关系分析)
|
||||
7. [性能考虑](#性能考虑)
|
||||
8. [故障排除指南](#故障排除指南)
|
||||
9. [结论](#结论)
|
||||
|
||||
## 引言
|
||||
本文档深入探讨Geomative Studio软件中实时数据监控功能的实现机制。重点分析DialListRealTimeMeasuData和DialListRealTimeMeasuGR对话框如何实现测量数据的动态刷新与图形化展示,阐述DialRealTimeMeasureData对话框与设备通信模块(SComPort、NetWorkOper)的数据交互流程,包括数据帧解析、状态更新和异常处理。同时,文档将描述appdatatdlistview和appdatatdgrlistview组件在高频数据更新场景下的性能优化策略,并为用户提供操作指南,为开发者提供技术扩展路径。
|
||||
|
||||
## 项目结构
|
||||
实时数据监控功能主要分布在`cpp/Views`目录下的多个对话框实现文件中,这些文件与`cpp/Tools`目录下的通信模块紧密协作。核心的UI组件和数据处理逻辑被清晰地分离,形成了一个模块化的架构。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "UI 层"
|
||||
A[DialRealTimeMeasureData] --> B[DialListRealTimeMeasuData]
|
||||
A --> C[DialListRealTimeMeasuGR]
|
||||
end
|
||||
subgraph "通信层"
|
||||
D[NetWorkOper] --> E[SComPort]
|
||||
end
|
||||
subgraph "数据层"
|
||||
F[appdatatdlistview]
|
||||
G[appdatatdgrlistview]
|
||||
end
|
||||
A --> D
|
||||
B --> F
|
||||
C --> G
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [DialRealTimeMeasureData.cpp](file://cpp/Views/DialRealTimeMeasureData.cpp)
|
||||
- [DialListRealTimeMeasuData.cpp](file://cpp/Views/DialListRealTimeMeasuData.cpp)
|
||||
- [DialListRealTimeMeasuGR.cpp](file://cpp/Views/DialListRealTimeMeasuGR.cpp)
|
||||
- [NetWorkOper.cpp](file://cpp/Tools/NetWorkOper.cpp)
|
||||
- [SComPort.cpp](file://cpp/Tools/SComPort.cpp)
|
||||
- [appdatatdlistview.cpp](file://cpp/Views/appdatatdlistview.cpp)
|
||||
- [appdatatdgrlistview.cpp](file://cpp/Views/appdatatdgrlistview.cpp)
|
||||
|
||||
**章节来源**
|
||||
- [cpp/Views](file://cpp/Views)
|
||||
- [cpp/Tools](file://cpp/Tools)
|
||||
|
||||
## 核心组件
|
||||
实时数据监控系统由多个核心组件构成,它们协同工作以实现数据的采集、处理和展示。DialRealTimeMeasureData作为主控对话框,负责协调数据流和用户交互;DialListRealTimeMeasuData和DialListRealTimeMeasuGR分别负责测量数据和接地电阻数据的列表展示;SComPort和NetWorkOper则构成了底层的通信基础设施。
|
||||
|
||||
**章节来源**
|
||||
- [DialRealTimeMeasureData.h](file://h/DialRealTimeMeasureData.h)
|
||||
- [DialListRealTimeMeasuData.h](file://h/DialListRealTimeMeasuData.h)
|
||||
- [DialListRealTimeMeasuGR.h](file://h/DialListRealTimeMeasuGR.h)
|
||||
- [SComPort.cpp](file://cpp/Tools/SComPort.cpp)
|
||||
- [NetWorkOper.cpp](file://cpp/Tools/NetWorkOper.cpp)
|
||||
|
||||
## 架构概述
|
||||
系统采用分层架构,将用户界面、业务逻辑和数据通信分离。主控对话框(DialRealTimeMeasureData)通过消息机制与子对话框(DialListRealTimeMeasuData/GR)进行通信,而通信模块(NetWorkOper)则通过异步线程处理网络和串口数据,确保UI的响应性。
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[用户界面] --> |用户操作| B[主控对话框]
|
||||
B --> |数据请求| C[通信模块]
|
||||
C --> |串口/网络| D[测量设备]
|
||||
D --> |实时数据| C
|
||||
C --> |数据包| B
|
||||
B --> |更新指令| E[数据展示组件]
|
||||
E --> |刷新UI| A
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [DialRealTimeMeasureData.cpp](file://cpp/Views/DialRealTimeMeasureData.cpp)
|
||||
- [NetWorkOper.cpp](file://cpp/Tools/NetWorkOper.cpp)
|
||||
- [SComPort.cpp](file://cpp/Tools/SComPort.cpp)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### DialListRealTimeMeasuData 对话框分析
|
||||
该对话框负责实时测量数据的列表展示,支持动态数据刷新和多种更新模式。
|
||||
|
||||
#### 动态数据刷新机制
|
||||
DialListRealTimeMeasuData提供了三种数据更新方法,以适应不同的测量场景:
|
||||
- `OnShowTdData`: 用于初始化时的全量数据加载。
|
||||
- `OnShowTdDataAppend`: 用于在现有数据末尾追加新数据点。
|
||||
- `OnShowTdDataUpdate`: 用于单点测量或从当前位置开始测量时的增量更新。
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class CDialListRealTimeMeasureData {
|
||||
+SetSptType(int)
|
||||
+SetTaskID(int)
|
||||
+SetMeasuStatus(const bool*)
|
||||
+ShowMeasuStatus(CString)
|
||||
+OnShowTdData(vector<STTaskDetailBasicData>)
|
||||
+OnShowTdDataAppend(vector<STTaskDetailBasicData>)
|
||||
+OnShowTdDataUpdate(vector<STTaskDetailBasicData>)
|
||||
-m_listData CListCtrl
|
||||
-m_iSptType int
|
||||
-m_strMeasuStatus CString
|
||||
-m_pMeasuStatus const bool*
|
||||
}
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [DialListRealTimeMeasuData.h](file://h/DialListRealTimeMeasuData.h)
|
||||
- [DialListRealTimeMeasuData.cpp](file://cpp/Views/DialListRealTimeMeasuData.cpp)
|
||||
|
||||
**章节来源**
|
||||
- [DialListRealTimeMeasuData.cpp](file://cpp/Views/DialListRealTimeMeasuData.cpp#L171-L343)
|
||||
|
||||
### DialRealTimeMeasureData 与通信模块交互分析
|
||||
该组件是实时数据监控的核心,负责与设备通信模块进行数据交互。
|
||||
|
||||
#### 数据交互序列图
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant UI as DialRealTimeMeasureData
|
||||
participant Net as NetWorkOper
|
||||
participant Dev as 测量设备
|
||||
participant SCom as SComPort
|
||||
UI->>Net : OnMeasureAll()
|
||||
Net->>SCom : SendCtrlMsgDirect()
|
||||
SCom->>Dev : 发送测量命令
|
||||
Dev-->>SCom : 返回实时数据
|
||||
SCom-->>Net : ReceiveDataDirectly()
|
||||
Net->>UI : WM_NET_RECV_REAL_TIME_DATA
|
||||
UI->>UI : 更新UI界面
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [DialRealTimeMeasureData.cpp](file://cpp/Views/DialRealTimeMeasureData.cpp)
|
||||
- [NetWorkOper.cpp](file://cpp/Tools/NetWorkOper.cpp)
|
||||
- [SComPort.cpp](file://cpp/Tools/SComPort.cpp)
|
||||
|
||||
**章节来源**
|
||||
- [DialRealTimeMeasureData.cpp](file://cpp/Views/DialRealTimeMeasureData.cpp#L485-L539)
|
||||
- [NetWorkOper.cpp](file://cpp/Tools/NetWorkOper.cpp#L185-L203)
|
||||
- [SComPort.cpp](file://cpp/Tools/SComPort.cpp#L527-L576)
|
||||
|
||||
### appdatatdlistview 高频数据更新优化分析
|
||||
该组件在处理高频数据更新时采用了多种性能优化策略。
|
||||
|
||||
#### 性能优化流程图
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start([开始数据更新]) --> CheckThread["检查是否在UI线程"]
|
||||
CheckThread --> |是| UseTimer["使用定时器延迟更新"]
|
||||
CheckThread --> |否| PostMessage["使用PostMessage跨线程通信"]
|
||||
UseTimer --> UpdateUI["批量更新UI"]
|
||||
PostMessage --> UpdateUI
|
||||
UpdateUI --> End([结束])
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [appdatatdlistview.cpp](file://cpp/Views/appdatatdlistview.cpp)
|
||||
|
||||
**章节来源**
|
||||
- [appdatatdlistview.cpp](file://cpp/Views/appdatatdlistview.cpp#L72-L78)
|
||||
|
||||
## 依赖关系分析
|
||||
系统各组件之间存在明确的依赖关系,形成了一个稳定的调用链。
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A[DialRealTimeMeasureData] --> B[DialListRealTimeMeasuData]
|
||||
A --> C[DialListRealTimeMeasuGR]
|
||||
A --> D[NetWorkOper]
|
||||
D --> E[SComPort]
|
||||
B --> F[appdatatdlistview]
|
||||
C --> G[appdatatdgrlistview]
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [DialRealTimeMeasureData.h](file://h/DialRealTimeMeasureData.h)
|
||||
- [DialListRealTimeMeasuData.h](file://h/DialListRealTimeMeasuData.h)
|
||||
- [DialListRealTimeMeasuGR.h](file://h/DialListRealTimeMeasuGR.h)
|
||||
|
||||
**章节来源**
|
||||
- [DialRealTimeMeasureData.cpp](file://cpp/Views/DialRealTimeMeasureData.cpp#L154-L169)
|
||||
|
||||
## 性能考虑
|
||||
在高频数据更新场景下,系统采用了多种性能优化策略来确保UI的流畅性。
|
||||
|
||||
### 性能优化策略表
|
||||
| 优化策略 | 实现方式 | 适用场景 |
|
||||
| :--- | :--- | :--- |
|
||||
| 双缓冲绘图 | 使用内存中的缓冲区进行绘制,完成后一次性刷新到屏幕 | 避免UI闪烁 |
|
||||
| 增量更新 | 只更新发生变化的数据项,而非全量刷新 | 减少UI重绘开销 |
|
||||
| UI线程分离 | 将数据接收和处理放在独立线程,通过消息机制更新UI | 保持UI响应性 |
|
||||
| 批量操作 | 将多个小的更新操作合并为一次大的更新 | 减少系统调用次数 |
|
||||
|
||||
**章节来源**
|
||||
- [appdatatdlistview.cpp](file://cpp/Views/appdatatdlistview.cpp)
|
||||
- [appdatatdgrlistview.cpp](file://cpp/Views/appdatatdgrlistview.cpp)
|
||||
|
||||
## 故障排除指南
|
||||
本节提供常见问题的解决方案和调试建议。
|
||||
|
||||
### 常见问题及解决方案
|
||||
| 问题现象 | 可能原因 | 解决方案 |
|
||||
| :--- | :--- | :--- |
|
||||
| 数据无法刷新 | 通信连接中断 | 检查设备连接状态,重新建立连接 |
|
||||
| UI卡顿 | 高频数据更新导致 | 检查是否启用了性能优化策略 |
|
||||
| 数据显示错误 | 数据帧解析异常 | 检查通信协议和数据格式 |
|
||||
| 按钮无响应 | 状态机异常 | 检查按钮状态逻辑和状态转换 |
|
||||
|
||||
**章节来源**
|
||||
- [DialRealTimeMeasureData.cpp](file://cpp/Views/DialRealTimeMeasureData.cpp#L484-L481)
|
||||
- [NetWorkOper.cpp](file://cpp/Tools/NetWorkOper.cpp#L157-L181)
|
||||
|
||||
## 结论
|
||||
Geomative Studio的实时数据监控功能通过精心设计的分层架构和高效的通信机制,实现了稳定可靠的数据采集和展示。系统通过DialListRealTimeMeasuData和DialListRealTimeMeasuGR对话框提供了直观的数据可视化界面,利用DialRealTimeMeasureData与SComPort、NetWorkOper等通信模块的紧密协作确保了数据的实时性。在性能方面,appdatatdlistview和appdatatdgrlistview组件通过双缓冲、增量更新和UI线程分离等策略,有效应对了高频数据更新的挑战。该系统为用户提供了完整的实时监控解决方案,同时也为开发者提供了清晰的扩展接口。
|
||||
Reference in New Issue
Block a user