a
This commit is contained in:
@@ -0,0 +1,283 @@
|
||||
# 设备数据模型
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [数据库字段修改记录.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)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [引言](#引言)
|
||||
2. [设备数据模型结构](#设备数据模型结构)
|
||||
3. [核心组件分析](#核心组件分析)
|
||||
4. [数据流与业务规则](#数据流与业务规则)
|
||||
5. [版本演进与兼容性](#版本演进与兼容性)
|
||||
6. [结论](#结论)
|
||||
|
||||
## 引言
|
||||
本文档旨在深入解析Geomative Studio软件中的设备数据模型,重点阐述device表的结构及其与desetting表的关系。文档将详细说明GPS字段的引入、CableType、LowPowerAlarm、AutoStack等配置字段的用途,解释设备参数配置的数据流和业务规则,包括设备状态监控和固件升级相关的数据存储逻辑。结合数据库变更记录,文档还将阐述设备数据模型的版本演进过程和兼容性处理策略。
|
||||
|
||||
## 设备数据模型结构
|
||||
|
||||
### 设备表(device)与配置表(desetting)关系
|
||||
设备数据模型的核心是device表和desetting表。device表存储设备的基本信息,如设备名称、序列号、型号、硬件版本、软件版本等。desetting表则存储设备的配置参数,通过DEID字段与device表建立关联。这种分离设计使得设备基本信息和配置参数可以独立管理,提高了数据模型的灵活性和可维护性。
|
||||
|
||||
```mermaid
|
||||
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对多"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [数据库字段修改记录.txt](file://DB/数据库字段修改记录.txt#L23-L24)
|
||||
- [Device.h](file://h/Device.h#L88-L103)
|
||||
|
||||
### 核心字段说明
|
||||
- **GPS字段**:于2017年9月18日引入,用于记录设备的地理位置信息,支持野外作业的精确定位和数据关联。
|
||||
- **CableType**:于2017年9月18日引入,用于标识设备连接的电缆类型,支持不同型号电缆的识别和管理。
|
||||
- **LowPowerAlarm**:于2017年9月18日引入,用于设置低电量报警阈值,当设备电量低于设定值时触发报警,确保设备在关键作业中不会因电量不足而中断。
|
||||
- **AutoStack**:于2017年9月18日引入,用于控制设备的自动叠加功能,提高数据采集的效率和一致性。
|
||||
|
||||
**章节来源**
|
||||
- [数据库字段修改记录.txt](file://DB/数据库字段修改记录.txt#L23-L24)
|
||||
|
||||
## 核心组件分析
|
||||
|
||||
### 设备管理类(CDevice)
|
||||
CDevice类是设备数据模型的核心实现,负责设备的全生命周期管理,包括设备信息的获取、参数配置、状态监控和固件升级等。该类通过m_pConnection成员变量与数据库连接,实现数据的持久化存储。
|
||||
|
||||
```mermaid
|
||||
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)
|
||||
}
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [Device.h](file://h/Device.h#L33-L125)
|
||||
- [Device.cpp](file://cpp/ProblemZone/Device.cpp#L42-L71)
|
||||
|
||||
### 数据操作类(CDataOperator)
|
||||
CDataOperator类负责设备数据的读写操作,提供了一系列方法来初始化设备视图、显示设备信息、创建和删除项目等。该类通过m_pConnection成员变量与数据库连接,执行SQL查询和更新操作。
|
||||
|
||||
```mermaid
|
||||
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)
|
||||
}
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [DataOperator.cpp](file://cpp/Operator/DataOperator.cpp#L69-L846)
|
||||
|
||||
### 设备操作类(CDevOperator)
|
||||
CDevOperator类负责设备的在线和离线操作,提供了一系列方法来初始化设备视图、显示设备信息、刷新接地电阻记录等。该类通过m_pConnection成员变量与数据库连接,执行SQL查询和更新操作。
|
||||
|
||||
```mermaid
|
||||
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)
|
||||
}
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp#L39-L800)
|
||||
|
||||
## 数据流与业务规则
|
||||
|
||||
### 设备参数配置数据流
|
||||
设备参数配置的数据流始于用户在图形界面中修改设备参数,通过CDevOperator类的ModifyDeviceParameter方法触发。该方法调用CDevice类的ModifyParameter方法,生成相应的配置命令并发送到设备。设备返回确认后,CDevice类将新的配置参数写入数据库的desetting表中。
|
||||
|
||||
```mermaid
|
||||
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 : 显示结果
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp#L435-L461)
|
||||
- [Device.cpp](file://cpp/ProblemZone/Device.cpp#L71-L72)
|
||||
|
||||
### 设备状态监控
|
||||
设备状态监控通过CDevice类的ShowOLDetailInfo方法实现。该方法从数据库的device表和desetting表中读取设备的当前状态和配置参数,并在图形界面中显示。状态信息包括设备名称、型号、序列号、硬件版本、软件版本、制造日期、批次号以及各种配置参数的当前值。
|
||||
|
||||
**章节来源**
|
||||
- [Device.cpp](file://cpp/ProblemZone/Device.cpp#L154-L278)
|
||||
|
||||
### 固件升级数据存储
|
||||
固件升级过程由CDevOperator类的DevieUpgrade方法启动。该方法创建一个升级线程,调用CDevice类的ReceiveFile方法从服务器下载固件文件。升级完成后,新的固件版本信息被写入device表的SWV字段,确保版本信息的准确性和一致性。
|
||||
|
||||
**章节来源**
|
||||
- [DevOperator.cpp](file://cpp/Operator/DevOperator.cpp#L384-L433)
|
||||
- [Device.cpp](file://cpp/ProblemZone/Device.cpp#L682-L726)
|
||||
|
||||
## 版本演进与兼容性
|
||||
|
||||
### 数据库变更记录
|
||||
设备数据模型的版本演进记录在`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表。
|
||||
|
||||
这些变更记录为数据模型的维护和升级提供了重要的历史参考。
|
||||
|
||||
**章节来源**
|
||||
- [数据库字段修改记录.txt](file://DB/数据库字段修改记录.txt#L1-L61)
|
||||
|
||||
### 兼容性处理策略
|
||||
系统通过`database_modify.xml`文件和CUpdateDataBase类实现数据库的兼容性处理。CUpdateDataBase类在启动时解析`database_modify.xml`文件,根据当前版本和目标版本的差异,自动执行数据库结构的升级操作。升级操作包括增加表、删除表、修改表结构等,确保不同版本之间的数据兼容性。
|
||||
|
||||
```mermaid
|
||||
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
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [database_modify.xml](file://database_modify.xml#L1-L25)
|
||||
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp#L20-L874)
|
||||
|
||||
## 结论
|
||||
Geomative Studio的设备数据模型设计合理,通过device表和desetting表的分离实现了设备信息和配置参数的独立管理。GPS、CableType、LowPowerAlarm、AutoStack等字段的引入,增强了设备的功能性和智能化水平。系统通过CDevice、CDataOperator、CDevOperator等核心类实现了设备的全生命周期管理,确保了数据的一致性和可靠性。数据库变更记录和兼容性处理策略为系统的长期维护和升级提供了有力支持。
|
||||
Reference in New Issue
Block a user