a
This commit is contained in:
@@ -0,0 +1,305 @@
|
||||
# Device数据模型
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [Device.h](file://h/Device.h)
|
||||
- [Device.cpp](file://cpp/ProblemZone/Device.cpp)
|
||||
- [DevManager.h](file://h/DevManager.h)
|
||||
- [DevManager.cpp](file://cpp/Managers/DevManager.cpp)
|
||||
- [DetcGD10Dev.cpp](file://cpp/Operator/DetcGD10Dev.cpp)
|
||||
- [CtrlProtocolDef.h](file://h/CtrlProtocolDef.h)
|
||||
- [SComPort.h](file://h/SComPort.h)
|
||||
- [config.ini](file://Install/Geomative Studio/config.ini)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [引言](#引言)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构概述](#架构概述)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖分析](#依赖分析)
|
||||
7. [性能考虑](#性能考虑)
|
||||
8. [故障排除指南](#故障排除指南)
|
||||
9. [结论](#结论)
|
||||
|
||||
## 引言
|
||||
本项目GeomativeStudio是一个用于地质勘探设备管理的应用程序,其核心功能围绕设备管理展开。系统通过Device类来封装和管理各种设备(如GD10)的属性和行为,包括设备型号、固件版本、通信端口、设备状态及硬件参数配置等。Device类通过DevManager进行统一管理,并与底层驱动(如stmcdc.inf)和通信协议(CtrlProtocolDef.h)交互。设备检测逻辑在DetcGD10Dev.cpp中实现,负责识别设备并进行状态轮询。设备参数的持久化存储与config.ini文件联动,确保配置信息的持久性。在设备热插拔和通信异常时,系统具备相应的错误处理策略,保证了系统的稳定性和可靠性。
|
||||
|
||||
## 项目结构
|
||||
项目结构清晰地组织了各个模块,便于维护和扩展。核心代码位于`cpp`目录下,分为多个子目录,如`Managers`、`Operator`、`ProblemZone`等,分别处理不同的业务逻辑。头文件位于`h`目录下,定义了类和结构体。安装文件和配置文件位于`Install`目录下,其中`config.ini`文件用于存储用户配置信息。日志文件位于`LOG`目录下,记录系统运行时的信息。数据库相关文件位于`DB`目录下,管理设备和任务数据。
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
subgraph "核心代码"
|
||||
A[cpp] --> B[Managers]
|
||||
A --> C[Operator]
|
||||
A --> D[ProblemZone]
|
||||
end
|
||||
subgraph "头文件"
|
||||
E[h] --> F[Device.h]
|
||||
E --> G[DevManager.h]
|
||||
E --> H[CtrlProtocolDef.h]
|
||||
end
|
||||
subgraph "资源文件"
|
||||
I[Install] --> J[config.ini]
|
||||
I --> K[stmcdc.inf]
|
||||
end
|
||||
subgraph "日志"
|
||||
L[LOG] --> M[detect_gd20_log.txt]
|
||||
end
|
||||
A --> E
|
||||
A --> I
|
||||
A --> L
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [Device.h](file://h/Device.h)
|
||||
- [DevManager.h](file://h/DevManager.h)
|
||||
- [config.ini](file://Install/Geomative Studio/config.ini)
|
||||
|
||||
**Section sources**
|
||||
- [Device.h](file://h/Device.h)
|
||||
- [DevManager.h](file://h/DevManager.h)
|
||||
- [config.ini](file://Install/Geomative Studio/config.ini)
|
||||
|
||||
## 核心组件
|
||||
Device类是设备管理的核心,封装了设备的各种属性和方法。它通过DevManager进行统一管理,实现了设备的注册、注销、参数修改等功能。Device类还负责与底层驱动和通信协议交互,确保设备的正常运行。
|
||||
|
||||
**Section sources**
|
||||
- [Device.h](file://h/Device.h)
|
||||
- [Device.cpp](file://cpp/ProblemZone/Device.cpp)
|
||||
|
||||
## 架构概述
|
||||
系统架构采用分层设计,上层为UI层,中间为业务逻辑层,底层为设备驱动层。DevManager作为业务逻辑层的核心,负责管理所有设备实例。Device类通过SComPort类与设备进行通信,使用Zmodem协议进行文件传输。CtrlProtocolDef.h定义了通信协议,确保数据的正确传输。
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[UI层] --> B[业务逻辑层]
|
||||
B --> C[设备驱动层]
|
||||
B --> D[DevManager]
|
||||
D --> E[Device]
|
||||
E --> F[SComPort]
|
||||
F --> G[设备]
|
||||
H[CtrlProtocolDef.h] --> F
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [DevManager.h](file://h/DevManager.h)
|
||||
- [Device.h](file://h/Device.h)
|
||||
- [SComPort.h](file://h/SComPort.h)
|
||||
- [CtrlProtocolDef.h](file://h/CtrlProtocolDef.h)
|
||||
|
||||
## 详细组件分析
|
||||
### Device类分析
|
||||
Device类封装了设备的各种属性,如设备型号(GD10)、固件版本、通信端口(串口/USB)、设备状态(在线/离线/故障)及硬件参数配置。通过GetDevInfo方法,可以从设备获取这些信息并更新到数据库中。
|
||||
|
||||
#### 类图
|
||||
```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()
|
||||
+void SetState(UINT uState)
|
||||
+void SetID(DWORD dwID)
|
||||
+BOOL Reset()
|
||||
+BOOL GetDevInfo()
|
||||
+BOOL GetGRInfo()
|
||||
+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 PrintLog(CString& strLog)
|
||||
+int IsExistOtherUserData()
|
||||
+int CheckGD10Password(CString strGD10Password)
|
||||
+BOOL EndTransfer()
|
||||
+UINT32 GetXmlMaxTestPoint(int iSubIndex, CString strPrCN, CString strTzCN, CString strXmlFile)
|
||||
}
|
||||
class CSComPort {
|
||||
+HANDLE m_hCom
|
||||
+HWND m_hOwnerWnd
|
||||
+long m_lCommID
|
||||
+CString m_szComName
|
||||
+DCB m_dcbBlock
|
||||
+FILE* m_Log
|
||||
+CSComPort()
|
||||
+CSComPort(HWND hOwnerWnd, long lCommID)
|
||||
+~CSComPort()
|
||||
+BOOL OpenComm(CString szComName)
|
||||
+void CloseComm()
|
||||
+BOOL SendDataDirectly(char* pDataBuff, int iDataSize)
|
||||
+BOOL ReceiveDataDirectly(char* pDataBuff, int* iDataSize)
|
||||
+BOOL ZmodemReceiveDataDirectly(char* pDataBuff, int* iDataSize)
|
||||
+BOOL ZmodemSendDataDirectly(char* pDataBuff, int iDataSize)
|
||||
+void ClearCommReceiveBuff()
|
||||
+void ClearCommSendBuff()
|
||||
+BOOL ExecuteOrder(CString strOrder, CString strSign, CString* pStrResult, int nRepeatCnt=3)
|
||||
+BOOL ExecuteSignleOrder(CString f_szOrder, CString f_szSign, CString* f_szResult)
|
||||
+BOOL ExecuteNoResOrder(CString f_szOrder)
|
||||
}
|
||||
CDevice --> CSComPort : "uses"
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [Device.h](file://h/Device.h)
|
||||
- [SComPort.h](file://h/SComPort.h)
|
||||
|
||||
**Section sources**
|
||||
- [Device.h](file://h/Device.h)
|
||||
- [Device.cpp](file://cpp/ProblemZone/Device.cpp)
|
||||
|
||||
### DevManager类分析
|
||||
DevManager类负责管理所有设备实例,提供设备的增删改查功能。它通过m_devLinkList链表存储设备实例,并通过m_handleProcessor生成设备句柄。
|
||||
|
||||
#### 类图
|
||||
```mermaid
|
||||
classDiagram
|
||||
class CDevManager {
|
||||
+CLinkList<CDevice*> m_devLinkList
|
||||
+_ConnectionPtr m_pConnection
|
||||
+std : : set<STSigRemoteDev> m_setRemoteDev
|
||||
+CHandleProcessor m_handleProcessor
|
||||
+CDevManager(_ConnectionPtr& pConnection)
|
||||
+~CDevManager()
|
||||
+CDevice* GetDeviceByID(DWORD dwDevID)
|
||||
+CDevice* GetDevice(DWORD dwHandle)
|
||||
+CDevice* GetDevice(CString szDevSN)
|
||||
+void InitialDevLinkList()
|
||||
+BOOL AddDevice(CDevice* const pDev)
|
||||
+void DeleteObjInMem(DWORD dwHandle)
|
||||
+void DeleteObjInMem(CString szDevSN)
|
||||
+void AddObjInMem(CString szDevSN)
|
||||
+void AddOfflineObjInMem(CString szDevSN)
|
||||
+BOOL DeleteDevice(DWORD dwHandle)
|
||||
+BOOL DeleteDevice(CString strDev)
|
||||
+BOOL GetOLDevList(CPtrArray* pOLDevList)
|
||||
+BOOL GetFLDevList(CPtrArray* pFLDevList)
|
||||
+void UpdateDevInfo(STSynDevParam stDevParam, BYTE bRemoteDeveTyp)
|
||||
+BOOL SetDeviceHandle(CDevice* const pDev)
|
||||
+CDevice* GetRegisterDevice(CString szDevSN, bool& bIsRegister)
|
||||
+void DeleteRemoteDevice(STSigRemoteDev stDevice)
|
||||
+void AddRemoteDevice(STSigRemoteDev stDevice)
|
||||
+std : : set<STSigRemoteDev> GetRemoteDeviceInfo()
|
||||
}
|
||||
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
|
||||
}
|
||||
CDevManager --> CDevice : "manages"
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [DevManager.h](file://h/DevManager.h)
|
||||
- [Device.h](file://h/Device.h)
|
||||
|
||||
**Section sources**
|
||||
- [DevManager.h](file://h/DevManager.h)
|
||||
- [DevManager.cpp](file://cpp/Managers/DevManager.cpp)
|
||||
|
||||
### DetcGD10Dev类分析
|
||||
DetcGD10Dev类负责检测GD10设备,通过USB接口查找设备并建立连接。它使用FindUsbDevice方法遍历所有可移动驱动器,通过卷标名或特定目录结构来识别设备。
|
||||
|
||||
#### 序列图
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant User as "用户"
|
||||
participant DetcGD10Dev as "CDetcGD10Dev"
|
||||
participant System as "系统"
|
||||
User->>DetcGD10Dev : DetectGD10Dev()
|
||||
DetcGD10Dev->>System : GetLogicalDriveStrings()
|
||||
System-->>DetcGD10Dev : 驱动器列表
|
||||
loop 每个驱动器
|
||||
DetcGD10Dev->>System : GetDriveType()
|
||||
alt 可移动驱动器
|
||||
DetcGD10Dev->>System : GetVolumeInformation()
|
||||
System-->>DetcGD10Dev : 卷标名
|
||||
alt 卷标名匹配
|
||||
DetcGD10Dev-->>User : 找到设备
|
||||
break
|
||||
else 目录结构匹配
|
||||
DetcGD10Dev->>System : _stat()
|
||||
System-->>DetcGD10Dev : 目录存在
|
||||
DetcGD10Dev-->>User : 找到设备
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
alt 未找到设备
|
||||
DetcGD10Dev-->>User : 未找到设备
|
||||
end
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [DetcGD10Dev.cpp](file://cpp/Operator/DetcGD10Dev.cpp)
|
||||
|
||||
**Section sources**
|
||||
- [DetcGD10Dev.cpp](file://cpp/Operator/DetcGD10Dev.cpp)
|
||||
|
||||
## 依赖分析
|
||||
系统依赖于多个外部组件,包括数据库连接、串口通信、文件操作等。DevManager依赖于Device类,Device类依赖于SComPort类进行通信,SComPort类依赖于Windows API进行串口操作。此外,系统还依赖于Zmodem协议进行文件传输。
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[DevManager] --> B[Device]
|
||||
B --> C[SComPort]
|
||||
C --> D[Windows API]
|
||||
B --> E[Zmodem]
|
||||
A --> F[数据库]
|
||||
G[DetcGD10Dev] --> H[Windows API]
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [DevManager.h](file://h/DevManager.h)
|
||||
- [Device.h](file://h/Device.h)
|
||||
- [SComPort.h](file://h/SComPort.h)
|
||||
|
||||
**Section sources**
|
||||
- [DevManager.h](file://h/DevManager.h)
|
||||
- [Device.h](file://h/Device.h)
|
||||
- [SComPort.h](file://h/SComPort.h)
|
||||
|
||||
## 性能考虑
|
||||
系统在设计时考虑了性能优化,如使用链表存储设备实例,减少内存分配开销;使用异步通信避免阻塞主线程;使用缓存减少数据库查询次数。此外,系统还实现了错误重试机制,提高通信的可靠性。
|
||||
|
||||
## 故障排除指南
|
||||
当设备无法连接时,首先检查USB线缆是否连接正常,设备是否上电。然后检查设备的卷标名是否正确,或是否存在特定目录结构。如果问题仍然存在,可以查看日志文件detect_gd20_log.txt,获取详细的错误信息。对于通信异常,可以尝试重启设备或重新插拔USB线缆。
|
||||
|
||||
**Section sources**
|
||||
- [DetcGD10Dev.cpp](file://cpp/Operator/DetcGD10Dev.cpp)
|
||||
- [Install/Geomative Studio/LOG/detect_gd20_log.txt](file://Install/Geomative Studio/LOG/detect_gd20_log.txt)
|
||||
|
||||
## 结论
|
||||
通过深入分析Device类及其相关组件,我们了解了GeomativeStudio项目中设备管理的核心机制。Device类通过封装设备属性和方法,实现了对设备的全面管理。DevManager类提供了统一的管理接口,确保了设备实例的一致性和完整性。DetcGD10Dev类实现了设备检测功能,保证了设备的自动识别和连接。整个系统设计合理,层次分明,具有良好的可维护性和扩展性。
|
||||
Reference in New Issue
Block a user