# ProblemZone模块 **本文档中引用的文件** - [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) ## 目录 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)