198 lines
12 KiB
Markdown
198 lines
12 KiB
Markdown
# 项目概述
|
||
|
||
<cite>
|
||
**本文档引用的文件**
|
||
- [README.md](file://README.md)
|
||
- [version_info.txt](file://version_info.txt)
|
||
- [config.ini](file://config.ini)
|
||
- [database_modify.xml](file://database_modify.xml)
|
||
- [GeoMative.cpp](file://cpp/Main/GeoMative.cpp)
|
||
- [Global.cpp](file://cpp/Main/Global.cpp)
|
||
- [DevManager.cpp](file://cpp/Managers/DevManager.cpp)
|
||
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
|
||
- [TdManager.cpp](file://cpp/Managers/TdManager.cpp)
|
||
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp)
|
||
- [FileOperTools.cpp](file://cpp/Tools/FileOperTools.cpp)
|
||
- [DataOperator.cpp](file://cpp/Operator/DataOperator.cpp)
|
||
- [SComPort.cpp](file://cpp/Tools/SComPort.cpp)
|
||
</cite>
|
||
|
||
## 目录
|
||
1. [引言](#引言)
|
||
2. [项目结构](#项目结构)
|
||
3. [核心功能模块](#核心功能模块)
|
||
4. [系统架构与设计模式](#系统架构与设计模式)
|
||
5. [关键技术点](#关键技术点)
|
||
6. [配置与版本管理](#配置与版本管理)
|
||
7. [结论](#结论)
|
||
|
||
## 引言
|
||
|
||
GeomativeStudio 是一款专为地球物理勘探领域设计的专业桌面应用程序,旨在提供全面的设备管理与数据处理解决方案。该项目基于MFC(Microsoft Foundation Classes)框架和C++语言构建,为地质勘探工程师和技术人员提供了一个功能强大且用户友好的工作环境。该软件的核心目标是实现对地球物理勘探设备的高效管理、项目的系统化组织、自动化脚本生成以及现场数据的采集与分析。
|
||
|
||
作为地球物理勘探工作流程中的关键工具,GeomativeStudio 支持多种勘探模式,包括二维、三维和交叉孔勘探等复杂场景。通过集成先进的数据处理算法和直观的用户界面,该软件能够显著提高勘探工作的效率和准确性。项目当前版本为2.4.1,表明其已进入成熟稳定阶段,具备完整的生产级功能。
|
||
|
||
**Section sources**
|
||
- [README.md](file://README.md)
|
||
- [version_info.txt](file://version_info.txt)
|
||
|
||
## 项目结构
|
||
|
||
GeomativeStudio 项目具有清晰的目录结构,体现了模块化的设计理念。项目根目录下包含多个关键文件夹:`CACHE`用于缓存项目和脚本配置;`DB`存放数据库文件和字段修改记录;`Install`包含安装包、日志模板和驱动程序;`LOG`记录系统运行日志;`Release`存放编译输出文件;`cpp`和`h`目录分别包含C++源代码和头文件,按功能划分为`Main`、`Managers`、`Operator`、`ProblemZone`、`Scheduler`、`Tools`、`Views`等子模块。
|
||
|
||
源代码组织体现了典型的MFC应用程序结构,`cpp/Main`目录下的`GeoMative.cpp`是应用程序的主入口点,负责初始化和全局管理。`Managers`目录包含设备、项目、测试数据等核心管理器类,实现了业务逻辑的封装。`Operator`目录包含各种操作类,处理具体的业务操作。`Tools`目录提供串口通信、文件操作、CRC校验等基础工具。`Views`目录包含各种对话框和视图类,负责用户界面的呈现。这种清晰的分层结构有助于代码的维护和扩展。
|
||
|
||
**Section sources**
|
||
- [project_structure](file://project_structure)
|
||
|
||
## 核心功能模块
|
||
|
||
GeomativeStudio 的核心功能围绕四个主要模块展开:设备管理、项目管理、脚本生成和数据采集与分析。这些模块相互关联,共同构成了完整的勘探工作流程。
|
||
|
||
**设备管理模块** 负责与地球物理勘探硬件设备的通信和状态监控。通过`DevManager.cpp`中的`CDevManager`类,系统能够识别、注册和管理连接的设备。该模块支持通过USB、串口等多种方式与设备通信,并能获取设备的序列号、MAC地址等关键信息。
|
||
|
||
**项目管理模块** 由`ProManager.cpp`中的`CProManager`类实现,提供对勘探项目的全生命周期管理。用户可以创建、编辑和组织项目,每个项目下可包含多个测区(Testing Zone),形成清晰的层次结构。该模块通过数据库持久化存储项目信息,确保数据的安全性和可追溯性。
|
||
|
||
**脚本生成模块** 是GeomativeStudio的核心创新之一,由`SptManager.cpp`中的`CSptManager`类驱动。该模块支持生成复杂的勘探脚本,包括2D、3D和CE(Cross-hole Electrical)等多种勘探模式。系统内置了多种介质模型(如`MediumA.h`、`MediumB.h`等),可根据不同的地质条件自动生成最优的测量方案。
|
||
|
||
**数据采集与分析模块** 通过`TdManager.cpp`中的`CTdManager`类实现,负责管理和处理采集到的测试数据。该模块支持多种数据格式和分析方法,能够对电阻率、极化率等关键参数进行实时计算和可视化展示,为地质解释提供科学依据。
|
||
|
||
```mermaid
|
||
graph TD
|
||
A[设备管理] --> B[项目管理]
|
||
B --> C[脚本生成]
|
||
C --> D[数据采集与分析]
|
||
D --> E[结果可视化]
|
||
F[用户界面] --> A
|
||
F --> B
|
||
F --> C
|
||
F --> D
|
||
G[数据库] --> B
|
||
G --> D
|
||
H[串口通信] --> A
|
||
```
|
||
|
||
**Diagram sources **
|
||
- [DevManager.cpp](file://cpp/Managers/DevManager.cpp)
|
||
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
|
||
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp)
|
||
- [TdManager.cpp](file://cpp/Managers/TdManager.cpp)
|
||
|
||
## 系统架构与设计模式
|
||
|
||
GeomativeStudio 采用了典型的MVC(Model-View-Controller)架构模式,结合了MFC框架的文档/视图(Document/View)架构。在`GeoMative.cpp`的`InitInstance`方法中,系统初始化了多个核心管理器对象,如`m_pTdManager`、`m_pProManager`、`m_pDevManager`等,这些管理器构成了系统的Model层,负责数据管理和业务逻辑处理。
|
||
|
||
View层由`Views`目录下的众多视图类实现,如`AppDataSP2DTdView.cpp`、`AppDataIpsp3DTdView.cpp`等,负责用户界面的展示和用户交互。Controller的职责则分散在各个管理器和操作类中,通过消息映射机制(如`BEGIN_MESSAGE_MAP`)处理用户操作并更新Model和View。
|
||
|
||
系统采用分层设计,各模块之间通过明确定义的接口进行通信。例如,`CDevManager`通过`_ConnectionPtr`与数据库交互,而`CProManager`则依赖于`CDevManager`来获取设备信息。这种松耦合的设计提高了系统的可维护性和可扩展性。全局变量和函数(如`Global.cpp`中的`g_bScanFun`、`g_ScanTabSection`)提供了跨模块的共享状态和工具函数,确保了系统的一致性。
|
||
|
||
```mermaid
|
||
classDiagram
|
||
class CGeoMativeApp {
|
||
+_ConnectionPtr m_pConnection
|
||
+CTdManager* m_pTdManager
|
||
+CProManager* m_pProManager
|
||
+CDevManager* m_pDevManager
|
||
+InitInstance() bool
|
||
+ExitInstance() int
|
||
}
|
||
class CDevManager {
|
||
+_ConnectionPtr m_pConnection
|
||
+GetDeviceByID(DWORD) CDevice*
|
||
+GetDevice(CString) CDevice*
|
||
+InitialDevLinkList() void
|
||
}
|
||
class CProManager {
|
||
+_ConnectionPtr m_pConnection
|
||
+ShowTzList(DWORD, CListCtrl&) bool
|
||
+GetDMS(DWORD) CDataMngStruct*
|
||
+ShowProList(DWORD, CListCtrl&) bool
|
||
}
|
||
class CTdManager {
|
||
+_ConnectionPtr m_pConnection
|
||
+ShowTdListByProject(DWORD, CListCtrl&) bool
|
||
+GetTdRecord(DWORD) CTdRecord*
|
||
}
|
||
class CSptManager {
|
||
+_ConnectionPtr m_pConnection
|
||
+GetScript(DWORD) CScript*
|
||
+CreateScriptFileInOffline(DWORD) UINT
|
||
}
|
||
CGeoMativeApp --> CDevManager : "拥有"
|
||
CGeoMativeApp --> CProManager : "拥有"
|
||
CGeoMativeApp --> CTdManager : "拥有"
|
||
CGeoMativeApp --> CSptManager : "拥有"
|
||
CProManager --> CDevManager : "依赖"
|
||
CTdManager --> CDevManager : "依赖"
|
||
```
|
||
|
||
**Diagram sources **
|
||
- [GeoMative.cpp](file://cpp/Main/GeoMative.cpp)
|
||
- [DevManager.cpp](file://cpp/Managers/DevManager.cpp)
|
||
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
|
||
- [TdManager.cpp](file://cpp/Managers/TdManager.cpp)
|
||
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp)
|
||
|
||
**Section sources**
|
||
- [GeoMative.cpp](file://cpp/Main/GeoMative.cpp)
|
||
- [Global.cpp](file://cpp/Main/Global.cpp)
|
||
|
||
## 关键技术点
|
||
|
||
GeomativeStudio 的技术实现涉及多个关键领域,确保了系统的稳定性和功能性。
|
||
|
||
**ADO数据库访问** 是系统数据持久化的基础。在`GeoMative.cpp`中,系统通过`m_pConnection.CreateInstance(_uuidof(Connection))`创建ADO连接对象,并使用`Microsoft.ACE.OLEDB.12.0`提供程序连接到Access数据库(GeoMativeDB.accdb)。数据库操作通过SQL语句和`_RecordsetPtr`对象执行,实现了对设备、项目、测试数据等信息的增删改查。`database_modify.xml`文件定义了数据库版本控制和表结构变更策略,确保了数据库的可维护性。
|
||
|
||
**串口通信** 通过`SComPort.cpp`中的`CSComPort`类实现。该类封装了Windows API,提供了串口的打开、配置、读写和关闭功能。系统配置为115200波特率、8位数据位、无奇偶校验、1位停止位(CBR_115200, 8-N-1),以满足高速数据传输的需求。`FindComName`方法枚举系统中的串口设备,为设备发现提供了支持。
|
||
|
||
**XML配置处理** 在系统中扮演着重要角色。`config.ini`文件使用INI格式存储用户偏好、网络设置和系统参数,通过`GetPrivateProfileInt`和`WritePrivateProfileString`等API进行读写。`database_modify.xml`则使用标准XML格式描述数据库结构变更,便于版本管理和自动化更新。
|
||
|
||
此外,系统还集成了CRC校验(`BBCCalculate`函数)、多线程处理(`CreateThread`)、临界区同步(`CRITICAL_SECTION`)等关键技术,确保了数据传输的可靠性和多任务环境下的线程安全。
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant UI as "用户界面"
|
||
participant App as "CGeoMativeApp"
|
||
participant DB as "数据库"
|
||
participant Dev as "勘探设备"
|
||
UI->>App : 启动应用
|
||
App->>App : 初始化全局变量
|
||
App->>DB : 创建ADO连接
|
||
DB-->>App : 连接成功
|
||
App->>App : 初始化各管理器
|
||
App->>Dev : 扫描设备
|
||
Dev-->>App : 返回设备信息
|
||
App->>DB : 加载项目数据
|
||
DB-->>App : 返回项目列表
|
||
App->>UI : 显示主窗口
|
||
```
|
||
|
||
**Diagram sources **
|
||
- [GeoMative.cpp](file://cpp/Main/GeoMative.cpp)
|
||
- [SComPort.cpp](file://cpp/Tools/SComPort.cpp)
|
||
- [FileOperTools.cpp](file://cpp/Tools/FileOperTools.cpp)
|
||
|
||
**Section sources**
|
||
- [config.ini](file://config.ini)
|
||
- [database_modify.xml](file://database_modify.xml)
|
||
- [SComPort.cpp](file://cpp/Tools/SComPort.cpp)
|
||
- [FileOperTools.cpp](file://cpp/Tools/FileOperTools.cpp)
|
||
|
||
## 配置与版本管理
|
||
|
||
GeomativeStudio 的配置和版本管理机制确保了系统的灵活性和可维护性。`config.ini`文件是系统的主要配置文件,包含UI语言、数据导出样式、在线设备连接信息、用户凭证等多个配置节。例如,`[UI]`节中的`Language=1`表示使用中文界面,`[TRANSFER_INFO]`节定义了软件更新服务器的URL。
|
||
|
||
版本信息由`version_info.txt`文件统一管理,当前版本为2.4.1。该版本号在安装包和运行时环境中保持一致,便于用户识别和问题追踪。`database_modify.xml`文件实现了数据库的版本控制,其结构清晰地定义了当前版本(`current_version`)和历史版本(`pre_version`)的变更记录,包括表的增删改操作和列属性定义,为数据库的平滑升级提供了保障。
|
||
|
||
这些配置文件共同构成了系统的“外部化配置”体系,使得无需重新编译代码即可调整系统行为,极大地提高了部署和维护的效率。
|
||
|
||
**Section sources**
|
||
- [config.ini](file://config.ini)
|
||
- [version_info.txt](file://version_info.txt)
|
||
- [database_modify.xml](file://database_modify.xml)
|
||
|
||
## 结论
|
||
|
||
GeomativeStudio 是一个功能全面、架构清晰的地球物理勘探专业软件。它基于成熟的MFC框架和C++语言构建,通过模块化的设计实现了设备管理、项目管理、脚本生成和数据采集分析等核心功能。系统采用MVC架构模式,结合ADO数据库访问、串口通信和XML配置处理等关键技术,确保了高性能和高可靠性。
|
||
|
||
该项目不仅为地球物理勘探工作提供了强大的技术支持,其清晰的代码结构和良好的设计模式也为后续的功能扩展和维护奠定了坚实的基础。对于开发者而言,理解其核心管理器类(如`CDevManager`、`CProManager`)的交互逻辑和关键技术实现(如串口通信、数据库操作)是进行二次开发和定制的关键。 |