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

12 KiB
Raw Permalink Blame History

设备数据模型

**本文档引用的文件** - [数据库字段修改记录.txt](file://DB/数据库字段修改记录.txt) - [database_modify.xml](file://database_modify.xml) - [DataOperator.cpp](file://cpp/Operator/DataOperator.cpp) - [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp) - [Device.cpp](file://cpp/ProblemZone/Device.cpp) - [Device.h](file://h/Device.h) - [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)

目录

  1. 引言
  2. 设备数据模型结构
  3. 核心组件分析
  4. 数据流与业务规则
  5. 版本演进与兼容性
  6. 结论

引言

本文档旨在深入解析Geomative Studio软件中的设备数据模型,重点阐述device表的结构及其与desetting表的关系。文档将详细说明GPS字段的引入、CableType、LowPowerAlarm、AutoStack等配置字段的用途,解释设备参数配置的数据流和业务规则,包括设备状态监控和固件升级相关的数据存储逻辑。结合数据库变更记录,文档还将阐述设备数据模型的版本演进过程和兼容性处理策略。

设备数据模型结构

设备表(device)与配置表(desetting)关系

设备数据模型的核心是device表和desetting表。device表存储设备的基本信息,如设备名称、序列号、型号、硬件版本、软件版本等。desetting表则存储设备的配置参数,通过DEID字段与device表建立关联。这种分离设计使得设备基本信息和配置参数可以独立管理,提高了数据模型的灵活性和可维护性。

erDiagram
device {
uuid ID PK
string DEname
string SN UK
string modelNO
string HWV
string SWV
timestamp Mdate
string Mbatch
string GPS
}
desetting {
uuid ID PK
uuid DEID FK
int Ifrequency
int numformat
int Tsys
int Mvoltage
int Msys
int maxRG
int Tzone
int STdelay
int PSmode
int PBtone
int Ttone
int dimmer
int lang
string CableType
int LowPowerAlarm
int AutoStack
}
device ||--o{ desetting : "1对多"

图表来源

核心字段说明

  • GPS字段:于2017年9月18日引入,用于记录设备的地理位置信息,支持野外作业的精确定位和数据关联。
  • CableType:于2017年9月18日引入,用于标识设备连接的电缆类型,支持不同型号电缆的识别和管理。
  • LowPowerAlarm:于2017年9月18日引入,用于设置低电量报警阈值,当设备电量低于设定值时触发报警,确保设备在关键作业中不会因电量不足而中断。
  • AutoStack:于2017年9月18日引入,用于控制设备的自动叠加功能,提高数据采集的效率和一致性。

章节来源

核心组件分析

设备管理类(CDevice

CDevice类是设备数据模型的核心实现,负责设备的全生命周期管理,包括设备信息的获取、参数配置、状态监控和固件升级等。该类通过m_pConnection成员变量与数据库连接,实现数据的持久化存储。

classDiagram
class CDevice {
+DWORD m_dwID
+UINT m_uState
+UINT m_uType
+BYTE m_ucDevType
+CSComPort m_sComPort
+CString m_szDevSN
+CString m_szDevName
+CString m_szModelNO
+CString m_szMDate
+CString m_szHWV
+CString m_szSWV
+CString m_szMBatch
+CString m_szMacAddress
+_ConnectionPtr m_pConnection
+FILE *m_pLogFile
+CDevice(DWORD dwID, _ConnectionPtr& pConnection)
+~CDevice()
+BOOL Reset()
+BOOL DelSynInfo()
+BOOL DelGRInfo()
+BOOL GetSynInfo()
+BOOL GetDevInfo()
+BOOL GetGRInfo()
+int GetPoleCount()
+BOOL Register()
+BOOL Unregister()
+BOOL SendFile(const CString &szHostFilePath, const CString &szLocFilePath, const CString& szLocFileName)
+BOOL ReceiveFile(const CString &szLocFilePath, const CString& szHostFileName,int nRetryCnt = 3)
+bool ShowFLDetailInfo(CListCtrl& devDetailList)
+bool ShowOLDetailInfo(CListCtrl& devDetailList)
+bool ShowGRInfo(CListCtrl& devGRList)
+bool ShowACInfo(CListCtrl& devDetailList)
+BOOL ModifyParameter()
+BOOL ShowCableHeadInfoDlg()
+BOOL IsTheNumofPoleChanged()
+BOOL TestGRForPerPole(int iSN, CStringArray& strResArray)
+BOOL TestGRForAllPole()
+void SetState(UINT uState)
+void SetID(DWORD dwID)
+void PrintLog(CString& strLog)
+int IsExistOtherUserData()
+int CheckGD10Password(CString strGD10Password)
}

图表来源

数据操作类(CDataOperator

CDataOperator类负责设备数据的读写操作,提供了一系列方法来初始化设备视图、显示设备信息、创建和删除项目等。该类通过m_pConnection成员变量与数据库连接,执行SQL查询和更新操作。

classDiagram
class CDataOperator {
+_ConnectionPtr m_pConnection
+CStateProcessor m_stateProcessor
+CHandleProcessor m_handleProcessor
+CDataOperator(_ConnectionPtr& pConnection)
+~CDataOperator()
+bool InitialNavDataView(CNavDataView* pNavDataView)
+void ShowProjectInfo(DWORD dwProHandle, CView *pAppDataView)
+void ShowTzInfo(DWORD dwTzHandle, CView *pAppDataView)
+void ShowRsp3DTdInfo(DWORD dwTdHandle, CView *pAppDataView)
+void ShowRsp2DTdInfo(DWORD dwTdHandle, CView *pAppDataView)
+void ShowRspCETdInfo(DWORD dwTdHandle, CView* pAppDataView)
+void LoadRspCERecordbyPage(DWORD dwTdHandle, CView *pAppDataView, int iSType)
+void LoadRsp2dRecordbyPage(DWORD dwTdHandle, CView *pAppDataView, int iSType)
+void LoadRsp3dRecordbyPage(DWORD dwTdHandle, CView *pAppDataView, int iSType)
+void ShowIps2DpTdInfo(DWORD dwTdHandle, CView *pAppDataView)
+void ShowIps3DpTdInfo(DWORD dwTdHandle, CView *pAppDataView)
+void ShowIpsCEpTdInfo(DWORD dwTdHandle, CView *pAppDataView)
+void LoadIpspCERecordbyPage(DWORD dwTdHandle, CView *pAppDataView, int iSType/* = 1*/)
+void LoadIpsp2dRecordbyPage(DWORD dwTdHandle, CView *pAppDataView, int iSType/* = 2*/)
+void LoadIpsp3dRecordbyPage(DWORD dwTdHandle, CView *pAppDataView, int iSType/* = 3*/)
+UINT CreateProjectInDB(CNavDataView* pNavDataView)
+DWORD GetTdIdFromNavDataView(CNavDataView *pNavDataView)
+void UpdateNavDataViewAfterDel(CNavDataView *pNavDataView)
+UINT DeleteProjectInDB(CNavDataView* pNavDataView)
}

图表来源

设备操作类(CDevOperator

CDevOperator类负责设备的在线和离线操作,提供了一系列方法来初始化设备视图、显示设备信息、刷新接地电阻记录等。该类通过m_pConnection成员变量与数据库连接,执行SQL查询和更新操作。

classDiagram
class CDevOperator {
+_ConnectionPtr m_pConnection
+CStateProcessor m_stateProcessor
+CHandleProcessor m_handleProcessor
+HTREEITEM m_hOLRegDevRootItem
+HTREEITEM m_hOLNewDevRootItem
+HTREEITEM m_hFLDevRootItem
+CString m_strLocalFilePath
+CString m_strProCN
+CString m_strTzCN
+CDevOperator(_ConnectionPtr& pConnection)
+~CDevOperator()
+bool InitialNavDevView(CNavDevView* pNavDevView)
+void ShowFLDeviceInfo(DWORD dwDevHandle, CView *pAppFLDevView)
+void ShowOLDeviceInfo(DWORD dwDevHandle, CView *pAppOLDevView)
+void ExpandTree(CTreeCtrl* pTreeCtrl,HTREEITEM hItem)
+UINT DevieUpgrade(CNavDevView *pNavDevView)
+UINT ModifyDeviceParameter(CNavDevView *pNavDevView, CListCtrl &detailList)
+void ShowCableHeadDlg(CNavDevView *pNavDevView)
+UINT RefreshGRRec(CNavDevView *pNavDevView, CListCtrl &grList, int iItemIndex)
+UINT RefreshAllGRRec(CNavDevView *pNavDevView, CListCtrl &grList)
}

图表来源

数据流与业务规则

设备参数配置数据流

设备参数配置的数据流始于用户在图形界面中修改设备参数,通过CDevOperator类的ModifyDeviceParameter方法触发。该方法调用CDevice类的ModifyParameter方法,生成相应的配置命令并发送到设备。设备返回确认后,CDevice类将新的配置参数写入数据库的desetting表中。

sequenceDiagram
participant User as 用户
participant UI as 图形界面
participant DevOperator as CDevOperator
participant Device as CDevice
participant DB as 数据库
User->>UI : 修改设备参数
UI->>DevOperator : 调用ModifyDeviceParameter
DevOperator->>Device : 调用ModifyParameter
Device->>Device : 生成配置命令
Device->>Device : 发送命令到设备
Device->>Device : 接收设备确认
Device->>DB : 更新desetting表
DB-->>Device : 确认更新
Device-->>DevOperator : 返回结果
DevOperator-->>UI : 返回结果
UI-->>User : 显示结果

图表来源

设备状态监控

设备状态监控通过CDevice类的ShowOLDetailInfo方法实现。该方法从数据库的device表和desetting表中读取设备的当前状态和配置参数,并在图形界面中显示。状态信息包括设备名称、型号、序列号、硬件版本、软件版本、制造日期、批次号以及各种配置参数的当前值。

章节来源

固件升级数据存储

固件升级过程由CDevOperator类的DevieUpgrade方法启动。该方法创建一个升级线程,调用CDevice类的ReceiveFile方法从服务器下载固件文件。升级完成后,新的固件版本信息被写入device表的SWV字段,确保版本信息的准确性和一致性。

章节来源

版本演进与兼容性

数据库变更记录

设备数据模型的版本演进记录在DB/数据库字段修改记录.txt文件中。关键变更包括:

  • 2017年9月18日:在device表中增加GPS字段,在desetting表中增加CableType、LowPowerAlarm、AutoStack字段。
  • 2017年9月25日:在td表中添加IsAutoGenerate字段。
  • 2019年7月4日medium表新增加强梯度装置。
  • 2019年7月14日:medium表新增跨孔装置,新增TTaskInfoCoordinetes表。

这些变更记录为数据模型的维护和升级提供了重要的历史参考。

章节来源

兼容性处理策略

系统通过database_modify.xml文件和CUpdateDataBase类实现数据库的兼容性处理。CUpdateDataBase类在启动时解析database_modify.xml文件,根据当前版本和目标版本的差异,自动执行数据库结构的升级操作。升级操作包括增加表、删除表、修改表结构等,确保不同版本之间的数据兼容性。

flowchart TD
Start([系统启动]) --> CheckVersion["检查当前数据库版本"]
CheckVersion --> VersionMatch{"版本匹配?"}
VersionMatch --> |是| End([系统正常运行])
VersionMatch --> |否| ParseXML["解析database_modify.xml"]
ParseXML --> FindUpdate["查找版本更新记录"]
FindUpdate --> ExecuteUpdate["执行数据库更新"]
ExecuteUpdate --> UpdateTable["更新表结构"]
UpdateTable --> UpdateIndex["更新索引"]
UpdateIndex --> UpdateForeignKey["更新外键约束"]
UpdateForeignKey --> WriteVersion["写入新版本号"]
WriteVersion --> End

图表来源

结论

Geomative Studio的设备数据模型设计合理,通过device表和desetting表的分离实现了设备信息和配置参数的独立管理。GPS、CableType、LowPowerAlarm、AutoStack等字段的引入,增强了设备的功能性和智能化水平。系统通过CDevice、CDataOperator、CDevOperator等核心类实现了设备的全生命周期管理,确保了数据的一致性和可靠性。数据库变更记录和兼容性处理策略为系统的长期维护和升级提供了有力支持。