Files
coco df489d5640 a
2026-07-03 16:05:30 +08:00

9.7 KiB
Raw Permalink Blame History

设备连接与发现

**本文档引用的文件** - [devmngframe.cpp](file://cpp/Views/devmngframe.cpp) - [DevManager.cpp](file://cpp/Managers/DevManager.cpp) - [DialFindComShow.cpp](file://cpp/Views/DialFindComShow.cpp) - [DetcGD10Dev.cpp](file://cpp/Operator/DetcGD10Dev.cpp) - [SComPort.cpp](file://cpp/Tools/SComPort.cpp) - [CtrlProtocolDef.h](file://h/CtrlProtocolDef.h) - [DevManager.h](file://h/DevManager.h) - [DetcGD10Dev.h](file://h/DetcGD10Dev.h) - [SComPort.h](file://h/SComPort.h) - [DevOperator.h](file://h/DevOperator.h)

目录

  1. 引言
  2. 项目结构
  3. 核心组件
  4. 架构概述
  5. 详细组件分析
  6. 依赖分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论

引言

本文档深入文档化GeomativeStudio软件中设备连接与发现功能的实现机制。重点描述了串口扫描、设备识别协议(GD10)和通信建立流程。详细解释了CDevMngFrame中OnRefreshNavDevice消息处理如何触发设备列表更新,以及DialFindComShow对话框在串口配置中的作用。提供了用户操作指南,涵盖手动/自动设备发现、串口参数设置与连接测试。为开发者说明了如何扩展支持新型设备型号、修改设备识别逻辑或集成网络设备发现协议(如UDP广播)。结合DevManager的设备枚举接口,阐述了底层通信层与UI层的数据同步机制。

项目结构

GeomativeStudio项目是一个用于地质勘探设备管理的桌面应用程序。项目结构清晰,主要分为以下几个部分:

  • CACHE: 缓存文件目录
  • DB: 数据库相关文件
  • Install: 安装包和部署文件
  • LOG: 日志文件目录
  • Release: 发布版本文件
  • cpp: C++源代码目录,包含主要的业务逻辑
  • h: C++头文件目录
  • res: 资源文件目录
  • tools: 工具脚本

核心的设备连接与发现功能主要实现在cpp/Managerscpp/Operatorcpp/Tools目录下的源文件中。

核心组件

设备连接与发现功能的核心组件包括:

  • CDevManager: 设备管理器,负责设备的增删改查和状态管理
  • CDetcGD10Dev: GD10设备检测器,负责通过USB接口发现和连接GD10设备
  • CSComPort: 串口通信类,提供底层串口读写功能
  • CDevMngFrame: 设备管理框架窗口,处理UI与设备管理的交互
  • CDevOperator: 设备操作员,协调UI和设备管理器之间的操作

这些组件共同协作,实现了从设备发现、连接到参数配置的完整流程。

本文档引用的文件

架构概述

设备连接与发现功能的架构可以分为三层:用户界面层、业务逻辑层和通信层。

graph TB
subgraph "用户界面层"
UI[CDevMngFrame]
Dialog[DialFindComShow]
end
subgraph "业务逻辑层"
Operator[CDevOperator]
Manager[CDevManager]
end
subgraph "通信层"
Detector[CDetcGD10Dev]
ComPort[CSComPort]
Protocol[CtrlProtocolDef]
end
UI --> Operator
Operator --> Manager
Manager --> Detector
Detector --> ComPort
ComPort --> Protocol

本文档引用的文件

详细组件分析

CDevMngFrame分析

CDevMngFrame是设备管理的主框架窗口,负责处理用户界面与设备管理功能的交互。

消息处理机制

CDevMngFrame通过Windows消息机制与系统其他部分通信。关键的消息处理函数包括:

sequenceDiagram
participant User as "用户"
participant UI as "CDevMngFrame"
participant Operator as "CDevOperator"
participant Manager as "CDevManager"
User->>UI : 点击"刷新设备"
UI->>UI : 发送WM_REFRESH_NAV_DEVICE消息
UI->>Operator : 调用InitialNavDevView()
Operator->>Manager : 获取设备列表
Manager-->>Operator : 返回设备列表
Operator-->>UI : 更新设备树
UI-->>User : 显示更新后的设备列表

本文档引用的文件

OnRefreshNavDevice消息处理

当收到WM_REFRESH_NAV_DEVICE消息时,CDevMngFrame会触发设备列表的更新。这个过程是设备发现和状态同步的核心。

flowchart TD
Start([开始]) --> CheckNull["检查m_pNavDevView和m_pDevOperator是否为空"]
CheckNull --> |否| CallInitial["调用m_pDevOperator->InitialNavDevView()"]
CallInitial --> UpdateTree["更新设备树视图"]
UpdateTree --> End([结束])
CheckNull --> |是| ShowError["显示错误消息"]
ShowError --> End

本文档引用的文件

CDetcGD10Dev分析

CDetcGD10Dev类负责GD10设备的检测和连接,是设备发现功能的核心。

设备检测流程

CDetcGD10Dev通过枚举系统中的可移动驱动器来发现GD10设备。

flowchart TD
Start([开始]) --> GetDrivers["获取所有逻辑驱动器"]
GetDrivers --> LoopDrivers["遍历每个驱动器"]
LoopDrivers --> IsRemovable["是否为可移动驱动器?"]
IsRemovable --> |是| GetVolumeInfo["获取卷信息"]
GetVolumeInfo --> CompareName["卷名是否为GD10/GD20?"]
CompareName --> |是| FoundDevice["找到设备,返回驱动器路径"]
CompareName --> |否| CheckSDFolder["检查是否存在\\SD\\equipment目录"]
CheckSDFolder --> |存在| FoundDevice
CheckSDFolder --> |不存在| NextDriver["下一个驱动器"]
IsRemovable --> |否| NextDriver
NextDriver --> LoopDrivers
FoundDevice --> End([结束])
LoopDrivers --> |所有驱动器检查完毕| End

本文档引用的文件

CSComPort分析

CSComPort类提供了底层串口通信功能,是设备通信的基础。

串口初始化流程

CSComPort在打开串口时会进行一系列配置,确保通信的稳定性和可靠性。

flowchart TD
Start([开始]) --> CheckHandle["检查串口句柄是否已打开"]
CheckHandle --> |否| SetComName["设置串口名称"]
SetComName --> CreateFile["创建串口文件句柄"]
CreateFile --> |成功| SetupComm["设置通信缓冲区"]
SetupComm --> GetCommState["获取当前通信状态"]
GetCommState --> SetBaudRate["设置波特率为115200"]
SetBaudRate --> SetDataBits["设置数据位为8"]
SetDataBits --> SetParity["设置无奇偶校验"]
SetParity --> SetStopBits["设置停止位为1"]
SetStopBits --> SetCommState["应用通信设置"]
SetCommState --> SetCommMask["设置事件掩码"]
SetCommMask --> End([结束])
CreateFile --> |失败| ReturnFalse["返回FALSE"]
ReturnFalse --> End

本文档引用的文件

依赖分析

设备连接与发现功能的组件之间存在明确的依赖关系。

classDiagram
class CDevMngFrame {
+CDevOperator* m_pDevOperator
+OnRefreshNavDevice()
+PreNetResponse()
}
class CDevOperator {
+CDevManager* m_pDevManager
+InitialNavDevView()
+ShowOLDeviceInfo()
}
class CDevManager {
+CLinkList<CDevice*> m_devLinkList
+InitialDevLinkList()
+AddDevice()
+DeleteDevice()
}
class CDetcGD10Dev {
+static CDetcGD10Dev* m_pDetcDev
+DetectGD10Dev()
+GetGD10DevAddr()
}
class CSComPort {
+HANDLE m_hCom
+OpenComm()
+SendDataDirectly()
+ReceiveDataDirectly()
}
CDevMngFrame --> CDevOperator : "使用"
CDevOperator --> CDevManager : "使用"
CDevManager --> CDetcGD10Dev : "使用"
CDetcGD10Dev --> CSComPort : "使用"

本文档引用的文件

性能考虑

设备连接与发现功能在设计时考虑了以下性能因素:

  1. 异步通信: 使用重叠I/OOverlapped I/O)实现异步串口通信,避免阻塞UI线程
  2. 缓存机制: CDevManager维护设备链表缓存,减少数据库访问频率
  3. 批量操作: 设备列表更新采用批量处理,减少UI重绘次数
  4. 资源管理: 及时释放串口句柄和内存资源,防止资源泄漏

故障排除指南

常见问题及解决方案

问题现象 可能原因 解决方案
无法发现GD10设备 设备未正确连接或驱动未安装 检查USB连接,安装正确的驱动程序
串口通信失败 波特率或参数设置不匹配 确认设备和软件的串口参数一致
设备列表不更新 消息处理异常 重启软件或检查日志文件
连接超时 设备响应慢或网络问题 延长超时时间或检查设备状态

本文档引用的文件

结论

GeomativeStudio的设备连接与发现功能通过分层架构实现了稳定可靠的设备管理。从底层的串口通信到上层的UI交互,各组件职责明确,协作良好。系统支持自动和手动设备发现,提供了完整的设备生命周期管理功能。通过理解本文档描述的实现机制,用户可以更好地使用该功能,开发者也可以在此基础上进行功能扩展和优化。