# Managers模块 **Referenced Files in This Document** - [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) - [IOManager.cpp](file://cpp/Managers/IOManager.cpp) - [ExecManager.cpp](file://cpp/Managers/ExecManager.cpp) - [PasswordMng.cpp](file://cpp/Managers/PasswordMng.cpp) - [TestManager.cpp](file://cpp/Managers/TestManager.cpp) ## 目录 1. [DevManager职责与实现](#devmanager职责与实现) 2. [ProManager职责与实现](#promanager职责与实现) 3. [SptManager职责与实现](#sptmanager职责与实现) 4. [TdManager职责与实现](#tdmanager职责与实现) 5. [IOManager职责与实现](#iomanager职责与实现) 6. [ExecManager职责与实现](#execmanager职责与实现) 7. [PasswordMng职责与实现](#passwordmng职责与实现) 8. [TestManager职责与实现](#testmanager职责与实现) 9. [管理器间协作示例](#管理器间协作示例) ## DevManager职责与实现 DevManager模块负责设备连接管理、状态监控和固件升级。该管理器通过`CDevManager`类实现,主要功能包括设备的添加、删除、状态更新和在线/离线设备列表的管理。它维护一个设备链表`m_devLinkList`,用于存储和管理所有设备对象。当设备连接时,DevManager会通过`AddDevice`方法将设备信息写入数据库,并在内存中创建设备对象。设备的状态(在线、离线)通过`m_uState`字段进行跟踪,状态更新通过`UpdateDevInfo`方法实现,该方法会将设备的硬件版本、软件版本、电池电压等信息同步到数据库中。对于固件升级,虽然具体实现未在代码中直接体现,但通过设备通信机制,可以实现固件的远程更新。 **Section sources** - [DevManager.cpp](file://cpp/Managers/DevManager.cpp#L24-#L642) ## ProManager职责与实现 ProManager模块负责项目创建、测区管理和任务配置。该管理器通过`CProManager`类实现,提供了创建、显示和管理项目、测区和任务的接口。`CreateProjectInDB`方法用于在数据库中创建新项目,包括项目名称、描述、位置等信息,并确保项目名称的唯一性。`CreateProjectInDev`方法则负责将项目信息同步到设备端,通过生成XML文件并传输到设备的SD卡目录下。对于测区管理,`InsertDefaultTzToProject`方法会在项目创建时自动添加一个默认测区。任务配置方面,ProManager通过`ShowTzList`和`ShowProList`等方法提供项目和测区的列表显示功能,支持用户进行任务的配置和选择。 **Section sources** - [ProManager.cpp](file://cpp/Managers/ProManager.cpp#L32-#L707) ## SptManager职责与实现 SptManager模块负责生成和管理2D/3D/跨孔测量脚本。该管理器通过`CSptManager`类实现,支持多种测量模式的脚本创建。`Create2DSConInDB`方法用于在数据库中创建二维测量脚本,包括脚本名称、电极数量、通道数等参数,并将脚本记录写入`script2d`表。对于跨孔测量,`CreateCESConInDB`方法实现了1D跨孔脚本的创建,支持自定义的测量参数。SptManager还维护了一个介质链表`m_medLinkList`,用于存储不同测量模式对应的介质对象,如`CMediumA`、`CMediumB`等,这些介质对象定义了具体的测量几何配置。脚本的生成过程涉及用户界面交互,通过`COpCreateSptDlg`等对话框收集用户输入,并最终将配置信息持久化到数据库。 **Section sources** - [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L74-#L800) ## TdManager职责与实现 TdManager模块负责测试数据的采集、存储和分析。该管理器通过`CTdManager`类实现,提供了测试数据的列表显示、数据采集和存储功能。`ShowTdListByProject`和`ShowTdListByTz`方法用于根据项目或测区显示相关的测试数据列表,支持多种测试类型(如2D电阻率、IP等)。测试数据的存储通过`CTdManager`与数据库的交互实现,将测量结果写入`td`、`rspcon`、`ipspcon`等数据表中。对于数据分析,TdManager提供了数据导出功能,可以将测试数据导出为Access数据库文件,便于后续处理。此外,该管理器还负责管理测试数据的元信息,如测量时间、天气条件、操作人员等。 **Section sources** - [TdManager.cpp](file://cpp/Managers/TdManager.cpp#L57-#L800) ## IOManager职责与实现 IOManager模块负责数据导入导出功能,支持Excel、CSV、TXT、URF格式。该管理器通过`CIOManager`类实现,提供了`Export`和`Import`两个主要方法。`Export`方法允许用户将项目、测区和测试数据导出为Access数据库文件(.accdb),通过`CreateExpDatabase`方法创建目标数据库,并使用`ExportDataToAccdbFile`方法将数据写入。`Import`方法则从Access文件中读取数据,并将其导入到本地数据库中,支持项目、测区、脚本和测试数据的完整导入。虽然代码中主要实现了Access格式的导入导出,但通过扩展`OperTxtFile`、`OperUrfFile`等工具类,可以支持其他格式如TXT和URF。对于Excel和CSV格式,系统可能通过外部库或工具进行转换。 **Section sources** - [IOManager.cpp](file://cpp/Managers/IOManager.cpp#L23-#L800) ## ExecManager职责与实现 ExecManager模块负责任务执行流程的管理。该管理器通过`CExecManager`类实现,协调测试任务的执行。`Exec2DRSPTest`方法是执行2D电阻率测量的核心,它首先通过`Save2DRSPSetInfo`方法保存测试设置,然后将配置文件发送到设备端,最后初始化测量过程。任务执行流程包括:1) 用户在界面设置测量参数;2) ExecManager生成配置文件并发送到设备;3) 设备接收指令并开始测量;4) 测量数据实时回传并存储。`InitialMeasure`方法负责与设备通信,发送`meas_add`等命令来启动测量。整个流程通过非模态对话框`COpExec2DRSPTestDlg`进行监控,确保用户可以实时查看测量状态。 **Section sources** - [ExecManager.cpp](file://cpp/Managers/ExecManager.cpp#L49-#L613) ## PasswordMng职责与实现 PasswordMng模块负责密码管理机制。该管理器通过`CPasswordMng`类实现,提供密码的创建、修改和删除功能。密码信息存储在数据库的`password_info`表中,包含设备类型、设备名称和密码字段。`OperatePassword`方法根据操作类型(创建、修改、删除)生成相应的SQL语句,并执行数据库事务。对于GD-10设备,该管理器还通过串口命令与设备通信,使用`check_password`命令验证旧密码,并使用`set_param("password,...")`命令在设备端设置新密码,确保数据库和设备端的密码同步。密码的输入通过对话框界面完成,`OnOK`方法负责验证用户输入,确保新密码与确认密码一致,并调用`VerifyPassword`方法检查密码格式(必须由字母和数字组成)。 **Section sources** - [PasswordMng.cpp](file://cpp/Managers/PasswordMng.cpp#L21-#L623) ## TestManager职责与实现 TestManager模块负责测试任务的调度。该管理器通过`CTestManager`类实现,目前代码中仅包含构造函数和析构函数的定义,具体实现细节未在提供的文件中体现。根据命名和模块化设计原则,TestManager可能负责管理测试任务队列、调度任务执行顺序、处理任务间的依赖关系以及监控任务执行状态。它可能与其他管理器(如ExecManager、TdManager)协同工作,确保测试任务能够按照预定计划高效执行。 **Section sources** - [TestManager.cpp](file://cpp/Managers/TestManager.cpp#L18-#L27) ## 管理器间协作示例 各个管理器之间通过紧密协作实现完整的测量工作流。例如,当用户创建一个新项目时,ProManager首先在数据库中创建项目记录,然后触发SptManager生成默认的测量脚本。项目创建完成后,如果设备已连接,DevManager会检测到设备在线状态,并通知ProManager将项目数据同步到设备。ProManager调用`CreateProjectInDev`方法,生成项目配置文件并通过DevManager的设备对象发送到设备端。当用户开始执行测量任务时,ExecManager从ProManager获取项目和测区信息,从SptManager获取测量脚本,配置测试参数后,通过DevManager与设备通信,启动测量。测量过程中,TdManager负责接收和存储从设备传回的数据。整个流程体现了各管理器职责分明又相互协作的设计理念。