a
This commit is contained in:
@@ -0,0 +1,237 @@
|
||||
# ProblemZone模块
|
||||
|
||||
<cite>
|
||||
**本文档中引用的文件**
|
||||
- [Project.cpp](file://cpp/ProblemZone/Project.cpp)
|
||||
- [Project.h](file://h/Project.h)
|
||||
- [Device.cpp](file://cpp/ProblemZone/Device.cpp)
|
||||
- [Device.h](file://h/Device.h)
|
||||
- [Script.cpp](file://cpp/ProblemZone/Script.cpp)
|
||||
- [Script.h](file://h/Script.h)
|
||||
- [Medium.cpp](file://cpp/ProblemZone/Medium.cpp)
|
||||
- [Medium.h](file://h/Medium.h)
|
||||
- [Electrode.cpp](file://cpp/ProblemZone/Electrode.cpp)
|
||||
- [Electrode.h](file://h/Electrode.h)
|
||||
- [SP2DTd.h](file://h/SP2DTd.h)
|
||||
- [SP2DTdRecord.h](file://h/SP2DTdRecord.h)
|
||||
- [SP3DTd.h](file://h/SP3DTd.h)
|
||||
- [SP3DTdRecord.h](file://h/SP3DTdRecord.h)
|
||||
- [SPCETd.h](file://h/SPCETd.h)
|
||||
- [SPCETdRecord.h](file://h/SPCETdRecord.h)
|
||||
- [Rsp2DTd.h](file://h/Rsp2DTd.h)
|
||||
- [Rsp2DTdRecord.h](file://h/Rsp2DTdRecord.h)
|
||||
- [Rsp3DTd.h](file://h/Rsp3DTd.h)
|
||||
- [Rsp3DTdRecord.h](file://h/Rsp3DTdRecord.h)
|
||||
- [RspCETd.h](file://h/RspCETd.h)
|
||||
- [RspCETdRecord.h](file://h/RspCETdRecord.h)
|
||||
- [Ipsp2DTd.h](file://h/Ipsp2DTd.h)
|
||||
- [Ipsp2DTdRecord.h](file://h/Ipsp2DTdRecord.h)
|
||||
- [Ipsp3DTd.h](file://h/Ipsp3DTd.h)
|
||||
- [Ipsp3DTdRecord.h](file://h/Ipsp3DTdRecord.h)
|
||||
- [IpspCETd.h](file://h/IpspCETd.h)
|
||||
- [IpspCETdRecord.h](file://h/IpspCETdRecord.h)
|
||||
- [Channel.h](file://h/Channel.h)
|
||||
- [DevLinkRecord.h](file://h/DevLinkRecord.h)
|
||||
- [Res3DDatFileRecord.h](file://h/Res3DDatFileRecord.h)
|
||||
- [SptRecord.h](file://h/SptRecord.h)
|
||||
- [TdRecord.h](file://h/TdRecord.h)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [项目数据结构与管理](#项目数据结构与管理)
|
||||
2. [设备属性与状态管理](#设备属性与状态管理)
|
||||
3. [脚本配置与生成逻辑](#脚本配置与生成逻辑)
|
||||
4. [地球物理测量模型实现](#地球物理测量模型实现)
|
||||
5. [激电测量数据处理类](#激电测量数据处理类)
|
||||
6. [数据记录类结构设计](#数据记录类结构设计)
|
||||
7. [数据模型关联关系](#数据模型关联关系)
|
||||
|
||||
## 项目数据结构与管理
|
||||
|
||||
`CProject`类是系统中项目管理的核心数据模型,负责封装项目的基本信息和管理功能。该类通过数据库连接获取项目数据,包含项目编号、名称、描述、位置、日期、持续时间、项目负责人、客户、项目经理、质量保证标准等属性。`CProject`类提供了显示项目详细信息的功能,通过`ShowDetailInfo`方法将项目信息填充到列表控件中,便于用户查看。项目数据从数据库的`project`表中读取,使用SQL查询语句获取指定ID的项目记录,并将各字段值存储在相应的成员变量中。
|
||||
|
||||
**本节来源**
|
||||
- [Project.cpp](file://cpp/ProblemZone/Project.cpp#L15-L81)
|
||||
- [Project.h](file://h/Project.h#L14-L38)
|
||||
|
||||
## 设备属性与状态管理
|
||||
|
||||
`CDevice`类负责管理地球物理测量设备的属性和状态。该类包含设备ID、状态、类型、设备序列号、设备名称、型号、生产日期、硬件版本、软件版本、批次等属性。`CDevice`类提供了多种功能方法,包括设置设备状态、重置设备、显示设备详细信息(离线和在线)、显示接地电阻信息、显示视极化率信息等。设备信息从数据库的`device`表和`desetting`表中获取,通过`ShowFLDetailInfo`和`ShowOLDetailInfo`方法分别显示离线和在线设备的详细信息。类中还包含与设备通信相关的成员变量,如串口对象`m_sComPort`和日志文件指针`m_pLogFile`,用于设备通信和日志记录。
|
||||
|
||||
**本节来源**
|
||||
- [Device.cpp](file://cpp/ProblemZone/Device.cpp#L42-L800)
|
||||
- [Device.h](file://h/Device.h#L33-L125)
|
||||
|
||||
## 脚本配置与生成逻辑
|
||||
|
||||
`CScript`类是脚本管理的基础类,定义了脚本的核心属性和接口。该类包含脚本ID、电极数量、脚本类型和装置类型等属性。`CScript`类作为抽象基类,定义了显示脚本内容信息、显示脚本详情信息和显示通道列表的纯虚函数,由派生类具体实现。装置类型`m_iAR`是区分不同测量模式的关键参数,不同的装置类型对应不同的电极配置和测量方法。脚本类通过数据库连接获取相关数据,为上层应用提供脚本配置和生成的基础功能。
|
||||
|
||||
**本节来源**
|
||||
- [Script.cpp](file://cpp/ProblemZone/Script.cpp#L18-L30)
|
||||
- [Script.h](file://h/Script.h#L15-L38)
|
||||
|
||||
## 地球物理测量模型实现
|
||||
|
||||
`CMedium`类是地球物理测量模型的基类,为各种具体的测量装置类型提供通用的功能和接口。该类定义了生成脚本记录电极值、计算脚本测点位置、计算脚本记录层数、计算每层脚本记录位置、获取最大层数等纯虚函数,由具体的装置类型类(如`MediumA`、`MediumB`等)实现。`CMedium`类还提供了通用的测点位置计算、测点重排序、通用脚本信息生成等功能。类中包含装置类型`m_iAR`、电极偏移率`m_fEOffsetR`、层偏移率`m_fLOffsetR`、起始电极`m_iStartPole`和结束电极`m_iEndPole`等成员变量,用于描述测量模型的参数。`CMedium`类通过`std::map`容器`m_mapUniversalLayer`管理通用层信息,支持不同装置类型的层数计算和管理。
|
||||
|
||||
**本节来源**
|
||||
- [Medium.cpp](file://cpp/ProblemZone/Medium.cpp#L12-L657)
|
||||
- [Medium.h](file://h/Medium.h#L73-L115)
|
||||
|
||||
## 激电测量数据处理类
|
||||
|
||||
SP、Rsp、Ipsp系列类分别代表不同类型的激电测量数据处理功能。这些类按照2D、3D和CE(Cross-Sectional)三种测量维度组织,每种维度都有对应的头文件和记录文件。SP系列处理自然电位测量数据,Rsp系列处理电阻率测量数据,Ipsp系列处理激发极化测量数据。每个系列都包含一个主处理类(如`SP2DTd`)和一个记录类(如`SP2DTdRecord`),分别负责数据处理逻辑和数据存储。这些类通过继承和实现`CMedium`类定义的接口,针对特定的测量方法和数据格式进行具体实现,构成了激电测量数据处理的核心框架。
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class SP2DTd {
|
||||
+GenerateSptRecElecVal()
|
||||
+CalculateSptPtLoc()
|
||||
+GenSptRecLevel()
|
||||
+GenSptRecPosInLevel()
|
||||
+GetMaxLevelByEAmount()
|
||||
}
|
||||
class SP2DTdRecord {
|
||||
+m_iLevel
|
||||
+m_iPosInLevel
|
||||
+m_recPtArea
|
||||
+m_fSptXPos
|
||||
}
|
||||
class Rsp2DTd {
|
||||
+GenerateSptRecElecVal()
|
||||
+CalculateSptPtLoc()
|
||||
+GenSptRecLevel()
|
||||
+GenSptRecPosInLevel()
|
||||
+GetMaxLevelByEAmount()
|
||||
}
|
||||
class Rsp2DTdRecord {
|
||||
+m_iLevel
|
||||
+m_iPosInLevel
|
||||
+m_recPtArea
|
||||
+m_fSptXPos
|
||||
}
|
||||
class Ipsp2DTd {
|
||||
+GenerateSptRecElecVal()
|
||||
+CalculateSptPtLoc()
|
||||
+GenSptRecLevel()
|
||||
+GenSptRecPosInLevel()
|
||||
+GetMaxLevelByEAmount()
|
||||
}
|
||||
class Ipsp2DTdRecord {
|
||||
+m_iLevel
|
||||
+m_iPosInLevel
|
||||
+m_recPtArea
|
||||
+m_fSptXPos
|
||||
}
|
||||
SP2DTd <|-- SP3DTd
|
||||
SP2DTd <|-- SPCETd
|
||||
Rsp2DTd <|-- Rsp3DTd
|
||||
Rsp2DTd <|-- RspCETd
|
||||
Ipsp2DTd <|-- Ipsp3DTd
|
||||
Ipsp2DTd <|-- IpspCETd
|
||||
SP2DTd --|> SP2DTdRecord : "creates"
|
||||
Rsp2DTd --|> Rsp2DTdRecord : "creates"
|
||||
Ipsp2DTd --|> Ipsp2DTdRecord : "creates"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [SP2DTd.h](file://h/SP2DTd.h)
|
||||
- [SP2DTdRecord.h](file://h/SP2DTdRecord.h)
|
||||
- [Rsp2DTd.h](file://h/Rsp2DTd.h)
|
||||
- [Rsp2DTdRecord.h](file://h/Rsp2DTdRecord.h)
|
||||
- [Ipsp2DTd.h](file://h/Ipsp2DTd.h)
|
||||
- [Ipsp2DTdRecord.h](file://h/Ipsp2DTdRecord.h)
|
||||
|
||||
## 数据记录类结构设计
|
||||
|
||||
数据记录类包括`Channel`、`Electrode`、`TdRecord`、`SptRecord`等,用于存储测量过程中的具体数据。`Channel`类代表测量通道,`Electrode`类代表电极,包含电极编码、状态、测量日期、测量时间和测量值等属性。`TdRecord`是测量数据记录的基类,`SptRecord`是脚本记录类,存储脚本测点的详细信息,如测点序号、电极配置(C1, C2, P1, P2)、层数、层内位置等。`DevLinkRecord`类用于设备链接记录,`Res3DDatFileRecord`类用于3D电阻率数据文件记录。这些记录类通过指针数组`CPtrArray`进行管理,支持动态的数据存储和访问,构成了系统数据持久化的基础。
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class Channel {
|
||||
+m_iChannelID
|
||||
+m_szChannelName
|
||||
+m_bIsActive
|
||||
}
|
||||
class Electrode {
|
||||
+m_szECode
|
||||
+m_bCState
|
||||
+m_szMDate
|
||||
+m_szMTime
|
||||
+m_fOMValue
|
||||
}
|
||||
class TdRecord {
|
||||
+m_iRecordID
|
||||
+m_szRecordTime
|
||||
+m_fValue
|
||||
}
|
||||
class SptRecord {
|
||||
+m_iTsn
|
||||
+m_iC1
|
||||
+m_iC2
|
||||
+m_iP1
|
||||
+m_iP2
|
||||
+m_iLevel
|
||||
+m_iPosInLevel
|
||||
+m_fSptXPos
|
||||
}
|
||||
class DevLinkRecord {
|
||||
+m_iLinkID
|
||||
+m_dwDeviceID
|
||||
+m_szLinkTime
|
||||
}
|
||||
class Res3DDatFileRecord {
|
||||
+m_szFileName
|
||||
+m_szFilePath
|
||||
+m_iDataCount
|
||||
}
|
||||
Channel "1" -- "0..*" Electrode : "has"
|
||||
TdRecord "1" -- "1" SptRecord : "corresponds to"
|
||||
DevLinkRecord "1" -- "1" Device : "links"
|
||||
Res3DDatFileRecord "1" -- "0..*" TdRecord : "contains"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [Channel.h](file://h/Channel.h)
|
||||
- [Electrode.h](file://h/Electrode.h#L12-L23)
|
||||
- [TdRecord.h](file://h/TdRecord.h)
|
||||
- [SptRecord.h](file://h/SptRecord.h)
|
||||
- [DevLinkRecord.h](file://h/DevLinkRecord.h)
|
||||
- [Res3DDatFileRecord.h](file://h/Res3DDatFileRecord.h)
|
||||
|
||||
## 数据模型关联关系
|
||||
|
||||
系统中的数据模型通过层次化的关联关系组织。`Project`类作为顶级容器,包含多个`TestingZone`(测区)。每个测区包含多个`Script`(脚本),每个脚本定义了一组测量任务。脚本通过`CMedium`类的派生类(如`MediumA`、`MediumB`等)实现具体的测量模型,生成`SptRecord`(脚本记录)。每个脚本记录关联特定的电极配置,由`Electrode`类表示。测量执行时,生成`TdRecord`(测量数据记录),与脚本记录对应。设备`Device`通过`Channel`与电极连接,形成完整的测量链路。这种层次化的数据模型设计,清晰地表达了从项目规划到数据采集的完整流程,支持复杂的地球物理测量任务管理。
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
Project --> TestingZone
|
||||
TestingZone --> Script
|
||||
Script --> MediumA
|
||||
Script --> MediumB
|
||||
Script --> MediumC
|
||||
MediumA --> SptRecord
|
||||
MediumB --> SptRecord
|
||||
MediumC --> SptRecord
|
||||
SptRecord --> Electrode
|
||||
Electrode --> Channel
|
||||
Channel --> Device
|
||||
SptRecord --> TdRecord
|
||||
Device --> DevLinkRecord
|
||||
TdRecord --> Res3DDatFileRecord
|
||||
style Project fill:#f9f,stroke:#333
|
||||
style Device fill:#bbf,stroke:#333
|
||||
style Res3DDatFileRecord fill:#f96,stroke:#333
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [Project.h](file://h/Project.h#L16-L38)
|
||||
- [Device.h](file://h/Device.h#L33-L125)
|
||||
- [Script.h](file://h/Script.h#L15-L38)
|
||||
- [Medium.h](file://h/Medium.h#L73-L115)
|
||||
- [SptRecord.h](file://h/SptRecord.h)
|
||||
- [Electrode.h](file://h/Electrode.h#L12-L23)
|
||||
- [Channel.h](file://h/Channel.h)
|
||||
- [TdRecord.h](file://h/TdRecord.h)
|
||||
- [DevLinkRecord.h](file://h/DevLinkRecord.h)
|
||||
- [Res3DDatFileRecord.h](file://h/Res3DDatFileRecord.h)
|
||||
Reference in New Issue
Block a user