Files
geomative/GeomativeStudio/.qoder/repowiki/zh/content/开发者指南/代码结构/ProblemZone模块/ProblemZone模块.md
T
coco df489d5640 a
2026-07-03 16:05:30 +08:00

10 KiB
Raw Blame History

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的项目记录,并将各字段值存储在相应的成员变量中。

本节来源

设备属性与状态管理

CDevice类负责管理地球物理测量设备的属性和状态。该类包含设备ID、状态、类型、设备序列号、设备名称、型号、生产日期、硬件版本、软件版本、批次等属性。CDevice类提供了多种功能方法,包括设置设备状态、重置设备、显示设备详细信息(离线和在线)、显示接地电阻信息、显示视极化率信息等。设备信息从数据库的device表和desetting表中获取,通过ShowFLDetailInfoShowOLDetailInfo方法分别显示离线和在线设备的详细信息。类中还包含与设备通信相关的成员变量,如串口对象m_sComPort和日志文件指针m_pLogFile,用于设备通信和日志记录。

本节来源

脚本配置与生成逻辑

CScript类是脚本管理的基础类,定义了脚本的核心属性和接口。该类包含脚本ID、电极数量、脚本类型和装置类型等属性。CScript类作为抽象基类,定义了显示脚本内容信息、显示脚本详情信息和显示通道列表的纯虚函数,由派生类具体实现。装置类型m_iAR是区分不同测量模式的关键参数,不同的装置类型对应不同的电极配置和测量方法。脚本类通过数据库连接获取相关数据,为上层应用提供脚本配置和生成的基础功能。

本节来源

地球物理测量模型实现

CMedium类是地球物理测量模型的基类,为各种具体的测量装置类型提供通用的功能和接口。该类定义了生成脚本记录电极值、计算脚本测点位置、计算脚本记录层数、计算每层脚本记录位置、获取最大层数等纯虚函数,由具体的装置类型类(如MediumAMediumB等)实现。CMedium类还提供了通用的测点位置计算、测点重排序、通用脚本信息生成等功能。类中包含装置类型m_iAR、电极偏移率m_fEOffsetR、层偏移率m_fLOffsetR、起始电极m_iStartPole和结束电极m_iEndPole等成员变量,用于描述测量模型的参数。CMedium类通过std::map容器m_mapUniversalLayer管理通用层信息,支持不同装置类型的层数计算和管理。

本节来源

激电测量数据处理类

SP、Rsp、Ipsp系列类分别代表不同类型的激电测量数据处理功能。这些类按照2D、3D和CECross-Sectional)三种测量维度组织,每种维度都有对应的头文件和记录文件。SP系列处理自然电位测量数据,Rsp系列处理电阻率测量数据,Ipsp系列处理激发极化测量数据。每个系列都包含一个主处理类(如SP2DTd)和一个记录类(如SP2DTdRecord),分别负责数据处理逻辑和数据存储。这些类通过继承和实现CMedium类定义的接口,针对特定的测量方法和数据格式进行具体实现,构成了激电测量数据处理的核心框架。

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"

图表来源

数据记录类结构设计

数据记录类包括ChannelElectrodeTdRecordSptRecord等,用于存储测量过程中的具体数据。Channel类代表测量通道,Electrode类代表电极,包含电极编码、状态、测量日期、测量时间和测量值等属性。TdRecord是测量数据记录的基类,SptRecord是脚本记录类,存储脚本测点的详细信息,如测点序号、电极配置(C1, C2, P1, P2)、层数、层内位置等。DevLinkRecord类用于设备链接记录,Res3DDatFileRecord类用于3D电阻率数据文件记录。这些记录类通过指针数组CPtrArray进行管理,支持动态的数据存储和访问,构成了系统数据持久化的基础。

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"

图表来源

数据模型关联关系

系统中的数据模型通过层次化的关联关系组织。Project类作为顶级容器,包含多个TestingZone(测区)。每个测区包含多个Script(脚本),每个脚本定义了一组测量任务。脚本通过CMedium类的派生类(如MediumAMediumB等)实现具体的测量模型,生成SptRecord(脚本记录)。每个脚本记录关联特定的电极配置,由Electrode类表示。测量执行时,生成TdRecord(测量数据记录),与脚本记录对应。设备Device通过Channel与电极连接,形成完整的测量链路。这种层次化的数据模型设计,清晰地表达了从项目规划到数据采集的完整流程,支持复杂的地球物理测量任务管理。

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

图表来源