10 KiB
脚本数据模型
**本文档中引用的文件** - [database_modify.xml](file://database_modify.xml) - [config.ini](file://config.ini) - [Script.h](file://h/Script.h) - [Script2D.h](file://h/Script2D.h) - [Script3D.h](file://h/Script3D.h) - [ScriptCE.h](file://h/ScriptCE.h) - [TdManager.cpp](file://cpp/Managers/TdManager.cpp) - [DataOperator.cpp](file://cpp/Operator/DataOperator.cpp) - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp)目录
引言
本文档旨在全面阐述Geomative Studio中2D/3D/CE测量脚本的数据模型设计,重点分析td2dcon、td3dcon、td1dcon等表的结构设计,以及bUse字段在记录有效性管理中的设计意图与实现方式。同时,深入解析SCON表中Rect、RectLoc、PoleDistance等字段在跨孔测量中的作用,阐明脚本生成过程中的数据访问模式、约束条件及SkipCable、IsAutoGenerate等字段的业务逻辑。
项目结构
Geomative Studio项目采用典型的C++/MFC架构,其核心功能围绕地质测量脚本的生成、管理和执行。项目结构清晰地划分为cpp(源代码)、h(头文件)、DB(数据库相关)、Install(安装配置)等目录。脚本相关的数据模型和业务逻辑主要集中在cpp/Managers和cpp/Operator目录下的TdManager.cpp、DataOperator.cpp等文件中,而数据结构定义则位于h目录下的Script*.h系列头文件。
graph TB
subgraph "核心模块"
Script[脚本管理]
Data[数据操作]
Task[任务执行]
end
subgraph "数据层"
DB[(数据库)]
Config[配置文件]
end
Script --> Data
Data --> DB
Task --> Script
Task --> Data
Config --> Script
Config --> Task
图示来源
本节来源
核心组件
本系统的核心组件围绕测量脚本(Script)的生命周期管理展开。CScript基类定义了所有脚本的通用属性和接口,而CScript2D、CScript3D、CScriptCE等派生类则分别实现了二维、三维和电容耦合(CE)测量脚本的特定功能。TdManager类负责将脚本配置转化为具体的测量任务,并管理任务数据的生成与存储。DataOperator类则提供了对数据库中测量记录的直接操作能力,如启用/禁用特定记录。
本节来源
架构概述
系统采用分层架构,上层为用户界面,中层为业务逻辑处理(Manager和Operator),底层为数据存储(数据库)。脚本数据模型是连接业务逻辑与数据存储的核心。当用户创建一个测量任务时,系统会根据选择的测量类型(2D/3D/CE)实例化相应的脚本类,生成具体的测量序列,并将这些序列作为记录插入到td2dcon、td3dcon或td1dcon等结果表中。bUse字段在此过程中起到关键的过滤作用,确保只有有效的测量序列被实际执行。
graph LR
UI[用户界面] --> BL[业务逻辑层]
BL --> DL[数据层]
subgraph 业务逻辑层
SptMng[脚本管理器]
TdMng[任务管理器]
DataOp[数据操作器]
end
subgraph 数据层
DB[(数据库)]
end
SptMng --> TdMng
TdMng --> DataOp
DataOp --> DB
TdMng --> DB
图示来源
详细组件分析
脚本数据表结构分析
系统为不同类型的测量任务设计了专用的结果表,以存储测量配置和结果。这些表包括td2dcon(二维测量)、td3dcon(三维测量)和td1dcon(一维测量)。这些表的结构高度相似,均包含电极配置(如C1, C2, P1, P2或a, b, x, y)、几何因子K、测量值V, I、视电阻率R0以及关键的bUse字段。
bUse字段的设计意图与实现
bUse字段(类型为Yes/No)是标记记录有效性的核心机制。其设计意图在于提供一种灵活的“软删除”或“临时禁用”功能,允许用户在不删除原始数据的情况下,排除某些测量序列。例如,当某个电极被确认为故障时,可以批量更新所有涉及该电极的记录的bUse字段为false,从而在后续的数据处理和成图中忽略这些无效数据。
该字段的实现主要通过DataOperator类中的SQL更新语句完成。例如,在DataOperator.cpp中,存在多个update td*con set bUse = false的语句,用于根据电极编号或测点坐标批量禁用记录。这表明bUse字段是数据质量控制流程中的关键一环。
flowchart TD
Start([开始]) --> CheckElectrode["检查电极状态"]
CheckElectrode --> Faulty{"电极故障?"}
Faulty --> |是| UpdateDB["更新数据库: bUse = false"]
Faulty --> |否| KeepActive["保持 bUse = true"]
UpdateDB --> End([结束])
KeepActive --> End
图示来源
本节来源
SCON表字段在跨孔测量中的作用
虽然database_modify.xml中未直接定义SCON表,但从TdManager.cpp的SQL语句中可以推断出其存在及部分字段。Clayout(电缆布局)、SkipCable(跳过电缆)、rect(矩形区域)、rect_loc(矩形位置)等字段是配置跨孔测量的关键参数。
rect和rect_loc: 这两个字段共同定义了跨孔测量的几何范围。rect可能表示矩形的尺寸(如长宽),而rect_loc则指定了该矩形在三维空间中的具体位置(如中心坐标或角点坐标)。它们为生成孔间测量的电极组合提供了空间约束。PoleDistance: 虽然在代码中未直接出现,但根据命名惯例,它很可能存储了电极之间的间距,这是计算几何因子K的基础。SkipCable: 此字段用于标记在测量过程中需要跳过的电缆。在复杂的多电缆系统中,某些电缆可能因损坏或维护而暂时不可用。SkipCable字段允许系统在生成测量序列时自动排除这些电缆上的电极,确保测量计划的可行性。
classDiagram
class SCON {
+int Clayout
+int SkipCable
+float CRTime
+float Edistance
+string rect
+string rect_loc
+int DESN
+datetime STime
+datetime ETime
}
class td2dcon {
+int TCHID
+int TSN
+int C1
+int C2
+int P1
+int P2
+int N
+float K
+float I
+float V
+float R0
+float SP
+bool bUse
}
SCON --> td2dcon : "生成"
图示来源
本节来源
依赖分析
系统的数据模型依赖于一个关系型数据库(从SQL语句推断,可能为Access或SQLite)。td*con系列表通过TCHID(通道ID)与tdchannel表关联,而tdchannel又通过TDID(任务ID)与更高层级的任务表关联,形成了清晰的层级依赖关系。此外,Script*.h头文件定义了数据结构,被TdManager.cpp和DataOperator.cpp等实现文件所依赖,体现了代码层面的依赖。
erDiagram
SCON ||--o{ td2dcon : "生成"
SCON ||--o{ td3dcon : "生成"
SCON ||--o{ td1dcon : "生成"
tdchannel ||--o{ td2dcon : "包含"
tdchannel ||--o{ td3dcon : "包含"
tdchannel ||--o{ td1dcon : "包含"
TASK ||--o{ tdchannel : "包含"
SCON {
int Clayout
int SkipCable
string rect
string rect_loc
}
td2dcon {
int TCHID PK, FK
int TSN PK
int C1
int C2
int P1
int P2
bool bUse
}
tdchannel {
int ID PK
int TDID FK
}
图示来源
本节来源
性能考虑
脚本数据模型的设计对性能有重要影响。bUse字段的使用避免了物理删除大量记录,减少了I/O开销。然而,频繁地更新bUse字段(如批量禁用)可能会产生大量的数据库写操作。为优化性能,建议在应用层进行批量操作,减少数据库事务的提交次数。此外,td*con表上的TCHID和TSN字段应建立索引,以加速按通道和序列号的查询。
故障排除指南
当遇到测量数据异常时,应首先检查bUse字段的状态。如果预期的测量序列未被执行,可能是其bUse字段被错误地设置为false。可以通过查询td*con表中bUse = false的记录来定位问题。对于跨孔测量失败的情况,应检查SCON表中的SkipCable和rect/rect_loc配置是否正确,确保测量范围和电缆布局符合现场实际情况。
本节来源
结论
Geomative Studio的脚本数据模型设计精巧,通过td2dcon、td3dcon、td1dcon等专用表实现了对不同类型测量任务的有效管理。bUse字段作为记录有效性的开关,为数据质量控制提供了极大的灵活性。SCON表中的rect、rect_loc和SkipCable等字段则是实现复杂跨孔测量配置的关键。理解这些数据结构和字段的业务逻辑,对于正确使用系统、分析测量数据以及进行故障排除至关重要。