Files
geomative/GeomativeStudio/.qoder/repowiki/zh/content/API参考/设备管理API.md
T
coco df489d5640 a
2026-07-03 16:05:30 +08:00

15 KiB
Raw Blame History

设备管理API

**本文引用的文件** - [DevManager.h](file://h/DevManager.h) - [DevManager.cpp](file://cpp/Managers/DevManager.cpp) - [Device.h](file://h/Device.h) - [Device.cpp](file://cpp/ProblemZone/Device.cpp) - [CtrlProtocolDef.h](file://h/CtrlProtocolDef.h) - [ProManager.h](file://h/ProManager.h) - [SptManager.h](file://h/SptManager.h) - [FileOperTools.h](file://h/FileOperTools.h) - [StdThread.h](file://h/socket/StdThread.h) - [StdThread.cpp](file://cpp/socket/StdThread.cpp) - [Concurrentlist.h](file://h/socket/Concurrentlist.h) - [AutoLock.h](file://h/Lock/AutoLock.h) - [checkupdate.cpp](file://cpp/Tools/checkupdate.cpp) - [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向Geomative Studio中的设备管理API,重点围绕DevManager类与Device类的公共接口进行系统化文档化。内容涵盖:

  • 方法签名、输入参数、返回值类型与可能抛出的异常
  • 设备连接、状态监控、参数配置与固件升级等核心流程
  • 实际使用示例(以代码片段路径形式呈现)
  • 与项目管理(ProManager)与脚本管理(SptManager)的集成方式
  • 线程安全与异步操作机制
  • 常见错误处理策略与性能优化建议

项目结构

设备管理API位于cpp/Managers与cpp/ProblemZone目录中,分别实现设备管理器与设备实体;同时通过CtrlProtocolDef.h定义协议与数据结构,FileOperTools.h提供通用日志与文件操作能力;Socket与Lock子模块提供线程与并发支持;Tools与Operator子模块提供固件升级与设备操作流程。

graph TB
subgraph "设备管理层"
DM["DevManager<br/>设备管理器"]
DEV["Device<br/>设备实体"]
end
subgraph "协议与数据"
CPD["CtrlProtocolDef.h<br/>协议/结构体定义"]
FOT["FileOperTools.h<br/>日志/文件工具"]
end
subgraph "项目与脚本管理"
PM["ProManager<br/>项目管理"]
SM["SptManager<br/>脚本管理"]
end
subgraph "线程与并发"
STDH["StdThread.h/.cpp<br/>线程框架"]
CL["Concurrentlist.h<br/>并发队列"]
AL["AutoLock.h<br/>自动锁"]
end
subgraph "固件与操作"
CU["checkupdate.cpp<br/>固件升级"]
DO["DevOperator.cpp<br/>设备操作流程"]
end
DM --> DEV
DM --> CPD
DM --> FOT
DEV --> CPD
DEV --> FOT
PM --> DM
SM --> DM
CU --> DEV
DO --> DEV
STDH --> DM
CL --> STDH
AL --> DM

图表来源

章节来源

核心组件

  • DevManager:负责设备列表的初始化、增删改查、远程设备集合维护、设备句柄映射、设备信息更新等。
  • Device:负责设备状态设置、参数读取与显示、文件收发、命令执行、日志输出等。

章节来源

架构总览

设备管理API围绕DevManager与Device展开,通过CtrlProtocolDef.h中的协议结构体与命令字进行设备通信;通过FileOperTools.h统一日志与文件操作;通过ProManager与SptManager实现与项目/脚本的集成;通过StdThread/Concurrentlist/AutoLock提供线程与并发保障;通过checkupdate与DevOperator实现固件升级与设备操作流程。

classDiagram
class DevManager {
+GetOLDevList(pOLDevList)
+GetFLDevList(pFLDevList)
+GetDeviceByID(dwDevID)
+GetDevice(dwHandle)
+GetDevice(szDevSN)
+GetRegisterDevice(szDevSN, bIsRegister)
+InitialDevLinkList()
+AddDevice(pDev)
+DeleteDevice(dwHandle)
+DeleteDevice(strDev)
+SetDeviceHandle(pDev)
+UpdateDevInfo(stDevParam, bRemoteDeveTyp)
+AddRemoteDevice(stDevice)
+DeleteRemoteDevice(stDevice)
+GetRemoteDeviceInfo()
}
class Device {
+ExecuteOrder(strOrder, strSign, pStrResult, nRepeatCnt, nPollCnt)
+ExecuteSignleOrder(f_szOrder, f_szSign, f_szResult, nCmdPollCnt)
+ModifyTimeWindow()
+LockDevice()
+Reset()
+DelSynInfo()
+DelGRInfo()
+GetSynInfo()
+GetDevInfo()
+GetGRInfo()
+GetPoleCount()
+Register()
+Unregister()
+SendFile(szHostFilePath, szLocFilePath, szLocFileName)
+ReceiveFile(szLocFilePath, szHostFileName, nRetryCnt)
+ShowFLDetailInfo(devDetailList)
+ShowOLDetailInfo(devDetailList)
+ShowGRInfo(devGRList)
+ShowACInfo(devDetailList)
+ModifyParameter()
+ShowCableHeadInfoDlg()
+IsTheNumofPoleChanged()
+TestGRForPerPole(iSN, strResArray)
+TestGRForAllPole()
+SetState(uState)
+SetID(dwID)
+PrintLog(strLog)
+IsExistOtherUserData()
+CheckGD10Password(strGD10Password)
}
DevManager --> Device : "管理/持有"

图表来源

详细组件分析

DevManager 类

  • 职责

    • 维护设备链表与句柄映射
    • 提供设备查询、新增、删除、句柄设置
    • 远程设备集合维护(在线/离线)
    • 设备信息同步更新(硬件版本、软件版本、电池电压、功率频率、通道数等)
  • 公共接口与行为要点

    • GetOLDevList:收集在线设备列表(状态为在线或新)
    • GetFLDevList:收集离线设备列表(基于数据库与当前在线状态过滤)
    • GetDeviceByID/GetDevice/GetDevice(CString):按ID/句柄/序列号获取设备
    • GetRegisterDevice:根据序列号与MAC匹配判断是否已注册
    • InitialDevLinkList:从数据库初始化设备链表,设置初始状态与句柄
    • AddDevice/DeleteDevice:事务性地新增/删除设备及其关联表记录
    • SetDeviceHandle:为设备生成并设置句柄
    • UpdateDevInfo:解析设备上报的同步参数,更新数据库字段
    • AddRemoteDevice/DeleteRemoteDevice/GetRemoteDeviceInfo:维护远程设备集合
  • 异常与错误处理

    • 数据库事务:AddDevice/DeleteDevice内部使用BeginTrans/CommitTrans/RollbackTrans
    • 异常捕获:捕获_com_error并弹窗提示,回滚事务
    • 空指针检查:DeleteObjInMem/AddObjInMem等对空指针进行保护
  • 性能与复杂度

    • 列表遍历:GetDeviceByID/GetOLDevList/GetFLDevList涉及线性扫描,复杂度O(n)
    • 事务批量操作:AddDevice一次性插入多条记录,减少往返
  • 使用示例(以路径代替代码)

章节来源

Device 类

  • 职责

    • 设备状态与标识管理(ID、状态、类型、MAC、序列号)
    • 参数读取与显示(离线/在线详情、GR信息、AC信息)
    • 文件收发(Zmodem/自定义协议)
    • 命令执行与轮询(ExecuteOrder/ExecuteSignleOrder
    • 日志输出与辅助功能(打印日志、密码校验、GR测试等)
  • 公共接口与行为要点

    • ExecuteOrder/ExecuteSignleOrder:发送命令并等待特定应答标记,支持重复与轮询
    • SendFile/ReceiveFile:封装进度对话框与重试逻辑
    • ShowFLDetailInfo/ShowOLDetailInfo/ShowGRInfo/ShowACInfo:查询数据库并填充UI列表
    • ModifyParameter/ModifyTimeWindow/LockDevice/Reset/Register/Unregister:参数与状态操作
    • TestGRForPerPole/TestGRForAllPole:逐点/全点测试接地电阻
    • SetState/SetID/PrintLog/IsExistOtherUserData/CheckGD10Password:状态与辅助功能
  • 异常与错误处理

    • 命令执行超时与轮询上限控制
    • 文件传输失败时的重试与终止处理
    • 日志统一写入设备日志文件
  • 性能与复杂度

    • 数据库查询:详情与GR/AC信息查询,复杂度取决于记录数量
    • 文件传输:受网络/设备响应影响,重试策略降低失败概率
  • 使用示例(以路径代替代码)

章节来源

协议与数据结构(CtrlProtocolDef.h

  • 关键结构体
    • STSynDevParam:设备同步参数(机器ID、软硬件版本、温度、电池电压、功率频率、通道数、下发点数等)
    • STModifyDevParam:设备修改参数(功率频率、线缆类型、阈值、堆叠、下发点数等)
    • STSigRemoteDev:远程设备信息(类型、ID、状态)
  • 命令字与状态枚举
    • 控制命令:登录、参数同步、设置参数、设置任务参数、测量GR、测量数据、心跳等
    • 接收状态:链接中断、超时、数据错序、数据错误、云端发送失败、设备上下线通知等

章节来源

与项目管理/脚本管理的集成

  • 项目管理(ProManager
    • 在设备中创建/删除工程、测区,建立DMS结构,支持从设备上载/下传
    • 与DevManager配合,通过句柄/序列号定位设备,再调用ProManager的工程/测区操作
  • 脚本管理(SptManager
    • 在设备中创建/删除脚本,初始化脚本列表,支持从设备加载/下传脚本
    • 与DevManager配合,先获取设备实例,再调用SptManager的脚本操作

章节来源

固件升级与设备操作流程

  • 固件升级
    • checkupdate.cpp:下载文件、兼容性校验、复制到固件目录、执行升级命令、结果判定
    • DevOperator.cpp:设备升级流程封装,包含功能板升级、固件升级等步骤
  • 设备操作
    • 通过Device的命令执行接口与文件收发接口完成升级过程中的交互

章节来源

依赖关系分析

graph LR
DM["DevManager"] --> |使用| DEV["Device"]
DM --> |使用| CPD["CtrlProtocolDef.h"]
DM --> |使用| FOT["FileOperTools.h"]
DEV --> |使用| CPD
DEV --> |使用| FOT
PM["ProManager"] --> |依赖| DM
SM["SptManager"] --> |依赖| DM
CU["checkupdate.cpp"] --> |依赖| DEV
DO["DevOperator.cpp"] --> |依赖| DEV
STDH["StdThread.h/.cpp"] --> |提供线程| DM
CL["Concurrentlist.h"] --> |提供并发| STDH
AL["AutoLock.h"] --> |提供锁| DM

图表来源

性能考量

  • 列表遍历与查询
    • DevManager的设备查询(按ID/序列号/句柄)为线性扫描,建议在高频场景下引入索引或缓存
  • 事务与数据库
    • AddDevice/DeleteDevice使用事务保证一致性,但批量写入可能带来延迟;可考虑分批提交或异步化
  • 文件传输
    • ReceiveFile/ReceiveFile具备重试机制,避免单次失败导致整体失败;建议结合断点续传与进度回调
  • 并发与线程
    • StdThread/Concurrentlist提供生产者/消费者模型,适合异步处理设备事件与数据;注意临界区保护与死锁规避

[本节为通用指导,无需列出具体文件来源]

故障排查指南

  • 设备连接与命令执行
    • ExecuteOrder/ExecuteSignleOrder超时:检查轮询次数与设备响应;确认命令格式与应答标记
    • 文件传输失败:查看重试次数与终止处理;确认设备端可用空间与权限
  • 数据库异常
    • AddDevice/DeleteDevice抛出_com_error:检查SQL语句与参数绑定;确保BeginTrans/CommitTrans/RollbackTrans配对
  • 日志定位
    • 统一日志输出:通过FileOperTools::WriteComLog记录关键SQL与流程信息
  • 线程问题
    • 并发访问冲突:使用AutoLock或临界区保护共享资源;避免在UI线程阻塞过久

章节来源

结论

DevManager与Device共同构成了Geomative Studio的设备管理API核心。前者负责设备生命周期与状态管理,后者负责设备侧的具体操作与数据交互。通过CtrlProtocolDef.h统一协议与数据结构,配合ProManager/SptManager实现项目与脚本层面的协同;借助StdThread/Concurrentlist/AutoLock提供线程与并发保障;checkupdate与DevOperator完善了固件升级与设备操作流程。建议在高频查询与批量操作场景中进一步优化索引与事务策略,在文件传输与命令执行中强化重试与超时控制,以提升整体稳定性与性能。

[本节为总结性内容,无需列出具体文件来源]

附录

API调用流程图:固件升级(概念示意)

sequenceDiagram
participant UI as "界面"
participant DevMgr as "DevManager"
participant Dev as "Device"
participant Upd as "checkupdate"
participant DB as "数据库"
UI->>DevMgr : "选择设备并发起升级"
DevMgr->>Dev : "获取设备实例"
Dev->>Upd : "准备升级文件/校验兼容性"
Upd->>Upd : "复制文件到固件目录"
Upd->>Dev : "执行升级命令"
Dev-->>Upd : "返回升级结果"
Upd->>DB : "更新设备版本信息"
DB-->>Upd : "提交成功"
Upd-->>DevMgr : "升级完成"
DevMgr-->>UI : "反馈升级结果"

[本图为概念示意,不直接映射具体源文件,故无图表来源]

API调用流程图:枚举连接设备(概念示意)

flowchart TD
Start(["开始"]) --> Init["InitialDevLinkList()<br/>从数据库加载设备并初始化链表"]
Init --> List["GetOLDevList()/GetFLDevList()<br/>筛选在线/离线设备"]
List --> Show["展示设备列表<br/>UI层绑定数据"]
Show --> End(["结束"])

[本图为概念示意,不直接映射具体源文件,故无图表来源]