Files
coco df489d5640 a
2026-07-03 16:05:30 +08:00

12 KiB

项目与任务界面

**本文档引用的文件** - [taskmngframe.cpp](file://cpp\Views\taskmngframe.cpp) - [taskmngframe.h](file://h\taskmngframe.h) - [DialTaskTree.cpp](file://cpp\Views\DialTaskTree.cpp) - [DialTaskTree.h](file://h\DialTaskTree.h) - [DialNew1DTask.cpp](file://cpp\Views\DialNew1DTask.cpp) - [DialNew2DTask.cpp](file://cpp\Views\DialNew2DTask.cpp) - [DialNew3DTask.cpp](file://cpp\Views\DialNew3DTask.cpp) - [TaskDataOper.cpp](file://cpp\Operator\TaskDataOper.cpp) - [TaskDataOper.h](file://h\TaskDataOper.h) - [DialTaskManager.cpp](file://cpp\Views\DialTaskManager.cpp) - [DialTimerTask.cpp](file://cpp\Views\DialTimerTask.cpp) - [DialManageLoopTask.cpp](file://cpp\Views\DialManageLoopTask.cpp) - [DialLoopTaskQuery.cpp](file://cpp\Views\DialLoopTaskQuery.cpp) - [DialUploadLoopTask.cpp](file://cpp\Views\DialUploadLoopTask.cpp)

目录

  1. 项目与任务管理概述
  2. 任务管理框架结构
  3. 任务树形视图实现
  4. 任务创建与配置
  5. 定时任务与循环任务管理
  6. 任务数据持久化机制
  7. 开发者技术指导

项目与任务管理概述

本系统提供全面的项目与任务管理功能,支持1D、2D和3D测量任务的创建、配置和管理。用户可以通过图形化界面完成从项目初始化到任务部署的完整操作流程。系统采用分层架构设计,核心功能包括任务管理框架、任务树形视图、任务配置对话框和任务调度逻辑。任务数据通过XML缓存和数据库同步机制实现持久化存储,确保数据的完整性和可靠性。

Section sources

  • taskmngframe.cpp
  • taskmngframe.h

任务管理框架结构

任务管理框架(taskmngframe)是系统的核心组件,负责协调和管理所有任务相关的操作。该框架基于MFC的CMDIChildWnd类实现,提供多文档界面支持。框架的主要职责包括任务列表的显示、任务状态的更新、任务操作的处理以及与其他模块的通信。

任务管理框架通过消息映射机制处理用户交互事件,如任务创建、删除和刷新等操作。框架内部维护了任务操作器(TaskDataOper)的实例,用于执行具体的数据库操作和数据处理任务。框架还实现了网络响应处理,能够接收来自服务器的实时数据更新并相应地刷新界面。

classDiagram
class CTaskMngFrame {
+CTaskMngFrame()
+~CTaskMngFrame()
}
class CMDIChildWnd {
+Create()
+DestroyWindow()
}
CTaskMngFrame --|> CMDIChildWnd : 继承

**Diagram sources **

  • taskmngframe.cpp
  • taskmngframe.h

Section sources

  • taskmngframe.cpp
  • taskmngframe.h

任务树形视图实现

任务树形视图(DialTaskTree)是用户与任务数据交互的主要界面组件,基于MFC的CTreeCtrl控件实现。该视图以树形结构展示所有可用的任务,支持任务的筛选、排序和状态显示。视图实现了丰富的用户交互功能,包括右键菜单、复选框操作和点击事件处理。

树形视图通过网络请求从服务器获取任务列表数据,并将其组织成树形结构显示。视图支持按时间范围查询任务,能够分批加载大量任务数据以提高性能。每个任务节点包含任务ID、名称、状态等信息,并根据任务状态使用不同颜色的文字进行标识:测试中任务显示为蓝色,测试失败任务显示为红色。

视图实现了自定义绘制功能,通过OnNMCustomdrawTreeTaskList方法实现节点的自定义外观。视图还支持任务的批量操作,用户可以通过复选框选择多个任务进行统一处理。右键菜单提供了创建任务、删除任务、取消测试和刷新列表等常用操作。

sequenceDiagram
participant User as 用户
participant View as DialTaskTree
participant Oper as TaskDataOper
participant Server as 服务器
User->>View : 请求显示任务列表
View->>Oper : ShowTaskTree()
Oper->>Server : 发送任务查询请求
Server-->>Oper : 返回任务数据
Oper->>View : 处理任务数据
View->>View : 构建树形结构
View-->>User : 显示任务列表

**Diagram sources **

  • DialTaskTree.cpp
  • DialTaskTree.h

Section sources

  • DialTaskTree.cpp
  • DialTaskTree.h

任务创建与配置

系统提供专门的对话框用于创建和配置不同类型的任务,包括1D、2D和3D测量任务。每个任务类型都有对应的配置对话框,提供针对性的参数设置选项。

1D任务配置

1D任务配置对话框(DialNew1DTask)提供创建一维测量任务的界面。用户需要设置任务名称、测试地点、测试类型(电阻率、激电或自电)、装置类型、测试脚本、迭代次数、发射波形和发射周期等参数。对话框根据测试类型动态调整可用的发射周期选项,电阻率和激电测试支持多个周期选择,而自电测试则不支持周期设置。

flowchart TD
Start([开始]) --> InputTaskName["输入任务名称"]
InputTaskName --> SelectTestType["选择测试类型"]
SelectTestType --> CheckTestType{"测试类型?"}
CheckTestType --> |电阻率/激电| SetTxPeriod["设置发射周期"]
CheckTestType --> |自电| SkipTxPeriod["跳过发射周期"]
SetTxPeriod --> SetOtherParams["设置其他参数"]
SkipTxPeriod --> SetOtherParams
SetOtherParams --> ValidateInput["验证输入"]
ValidateInput --> CheckValid{"输入有效?"}
CheckValid --> |是| CreateTask["创建任务"]
CheckValid --> |否| ShowError["显示错误信息"]
ShowError --> InputTaskName
CreateTask --> End([结束])

**Diagram sources **

  • DialNew1DTask.cpp

2D任务配置

2D任务配置对话框(DialNew2DTask)提供创建二维测量任务的界面。除了1D任务的基本参数外,2D任务还需要设置电缆布线方式、起始和结束电极、电极间距、孔间距(跨孔测量时)等参数。对话框根据装置类型自动调整界面元素的可见性,例如跨孔装置会显示孔间距输入框。

3D任务配置

3D任务配置对话框(DialNew3DTask)提供创建三维测量任务的界面。3D任务需要设置网格信息、步长、电极间距等参数。对话框能够根据选择的测试脚本自动填充网格大小信息,提高配置效率。

所有任务配置对话框都通过TaskDataOper类与数据库交互,创建任务记录并生成唯一的任务编号。任务编号遵循特定格式:ERI[任务类型][年月日时分秒]_SN[设备ID]。

Section sources

  • DialNew1DTask.cpp
  • DialNew2DTask.cpp
  • DialNew3DTask.cpp
  • TaskDataOper.cpp
  • TaskDataOper.h

定时任务与循环任务管理

系统提供完善的定时任务和循环任务管理功能,支持自动化测量任务的创建和执行。定时任务允许用户在指定时间自动执行测量任务,而循环任务则支持按次数或时间间隔重复执行任务。

定时任务管理

定时任务通过DialTimerTask对话框进行管理。用户可以添加、删除和查看定时任务。每个定时任务包含任务名称、执行时间、PLC ID等信息。系统使用AddTimerTask方法将定时任务信息保存到数据库,并在指定时间自动触发任务执行。

classDiagram
class STTimerTask {
+UINT32 uiTaskID
+CString strTaskName
+CString strRunTime
+CString strPlcID
}
class CTaskDataOper {
+QueryTimerTaskValiad()
+AddTimerTask()
+DeleteTimerTask()
}
class CDialTimerTask {
+OnButtonAdd()
+OnButtonDel()
+OnButtonSave()
}
CTaskDataOper --> STTimerTask : 使用
CDialTimerTask --> CTaskDataOper : 调用

**Diagram sources **

  • DialTimerTask.cpp
  • TaskDataOper.h
  • TaskDataOper.cpp

循环任务管理

循环任务通过DialManageLoopTask对话框进行管理。循环任务支持两种模式:次数循环和定时循环。次数循环按指定次数重复执行任务,而定时循环则按指定时间间隔重复执行。用户可以查看循环任务的详细信息,包括子任务列表、执行状态和进度。

循环任务管理界面提供删除功能,用户可以选择一个或多个循环任务进行删除。删除操作通过发送EN_CANCEL_LOOP_TASK_TRUST网络请求实现,服务器收到请求后会取消相应的循环任务。

Section sources

  • DialTimerTask.cpp
  • DialManageLoopTask.cpp
  • DialLoopTaskQuery.cpp
  • DialUploadLoopTask.cpp

任务数据持久化机制

系统采用XML缓存和数据库同步相结合的机制实现任务数据的持久化存储。核心数据存储在Access数据库中,而临时数据和缓存则使用XML文件格式。

数据库结构

任务相关数据主要存储在以下数据库表中:

  • td表:存储任务基本信息,包括任务名称、类型、状态、创建时间等
  • tdchannel表:存储任务通道信息,包括装置类型、电极配置等
  • tdxdcon表:存储不同维度任务的具体测量点数据
  • tdTaskPacket表:存储任务包信息,用于批量任务管理

TaskDataOper类提供了对这些数据库表的封装操作,包括任务的创建、查询、更新和删除。创建任务时,系统会同时在td表和tdchannel表中插入记录,并根据任务维度在相应的tdxdcon表中批量插入测量点数据。

XML缓存机制

系统使用XML文件作为缓存机制,主要存储临时的任务列表和配置信息。CACHE目录下的project.xml和testzone.xml文件用于缓存项目和测区信息。这种设计提高了数据访问效率,减少了对数据库的频繁访问。

数据同步机制确保XML缓存与数据库内容保持一致。当数据库内容发生变化时,相关的XML缓存文件会被更新或重建。系统在启动时会优先读取XML缓存文件以提高加载速度,然后在后台与数据库进行同步验证。

Section sources

  • TaskDataOper.cpp
  • TaskDataOper.h
  • DialTaskManager.cpp

开发者技术指导

任务类型扩展

要扩展新的任务类型,开发者需要执行以下步骤:

  1. 在TaskDataOper.h中定义新的任务参数结构体
  2. 在TaskDataOper.cpp中实现相应的CreateTask方法
  3. 在任务管理界面中添加新的任务类型选项
  4. 更新数据库结构以支持新任务类型的特定字段

任务调度逻辑修改

任务调度逻辑主要在DialTimerTask和DialManageLoopTask类中实现。要修改调度逻辑,开发者可以:

  1. 调整定时任务的触发条件和执行流程
  2. 修改循环任务的间隔计算算法
  3. 增加新的循环模式或执行策略
  4. 优化任务状态检查和更新机制

任务数据持久化

任务数据持久化主要通过TaskDataOper类实现。开发者在修改数据持久化逻辑时应注意:

  1. 保持数据库事务的完整性,确保数据一致性
  2. 优化SQL查询语句,提高数据访问效率
  3. 维护XML缓存与数据库的同步机制
  4. 实现适当的错误处理和数据恢复机制

Section sources

  • TaskDataOper.cpp
  • TaskDataOper.h
  • DialTimerTask.cpp
  • DialManageLoopTask.cpp