# 任务配置 **本文档引用的文件** - [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp) - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp) - [SptManager.cpp](file://cpp/Managers/SptManager.cpp) ## 目录 1. [项目结构](#项目结构) 2. [任务包配置流程](#任务包配置流程) 3. [任务与项目、测区的关联关系](#任务与项目测区的关联关系) 4. [任务配置数据的验证机制和错误处理策略](#任务配置数据的验证机制和错误处理策略) 5. [任务配置驱动脚本生成过程](#任务配置驱动脚本生成过程) 6. [任务配置API使用示例](#任务配置api使用示例) ## 项目结构 Geomative Studio项目的任务配置功能主要集中在`cpp/Views`和`cpp/Operator`目录下。核心文件包括`DialCfgTaskPacket.cpp`用于任务包配置的UI交互,`TaskDataOper.cpp`负责任务数据的数据库操作,以及`SptManager.cpp`管理脚本文件的创建和同步。 ```mermaid graph TB subgraph "UI层" DialCfgTaskPacket["DialCfgTaskPacket.cpp
任务包配置对话框"] end subgraph "业务逻辑层" TaskDataOper["TaskDataOper.cpp
任务数据操作"] SptManager["SptManager.cpp
脚本管理"] end subgraph "数据层" Database[(dptt数据库)] end DialCfgTaskPacket --> TaskDataOper TaskDataOper --> Database SptManager --> TaskDataOper ``` **Diagram sources** - [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp) - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp) - [SptManager.cpp](file://cpp/Managers/SptManager.cpp) **Section sources** - [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp) - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp) - [SptManager.cpp](file://cpp/Managers/SptManager.cpp) ## 任务包配置流程 任务包配置功能通过`DialCfgTaskPacket`对话框实现,允许用户将多个测量任务组合成一个任务包进行管理。配置流程包括: 1. 初始化对话框时,从数据库查询所有可用任务并填充到下拉列表中 2. 用户选择任务后点击"添加"按钮,将选中的任务添加到任务包列表中 3. 用户可删除已添加的任务 4. 配置任务包的循环次数、时间间隔和PLC ID等属性 5. 保存配置时进行数据验证,确保参数在有效范围内 ```mermaid flowchart TD Start([开始]) --> Init["初始化对话框"] Init --> Query["查询可用任务"] Query --> Display["显示任务下拉列表"] Display --> Select["用户选择任务"] Select --> Add["点击添加按钮"] Add --> Check["检查任务是否重复"] Check --> |是| Warn["提示任务已存在"] Check --> |否| Insert["插入任务到列表"] Insert --> Continue["继续添加其他任务?"] Continue --> |是| Select Continue --> |否| Config["配置循环参数"] Config --> Validate["验证输入参数"] Validate --> |无效| Error["显示错误信息"] Validate --> |有效| Save["保存任务包配置"] Save --> End([结束]) ``` **Diagram sources** - [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp) **Section sources** - [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp) ## 任务与项目、测区的关联关系 任务配置与项目、测区之间存在明确的层级关联关系。每个任务必须归属于一个测区,而测区又属于特定的项目。这种关系在dptt数据库中通过外键约束实现: - `project`表存储项目信息 - `tz`表存储测区信息,包含指向`project`表的外键`PRID` - `td`表存储任务信息,包含指向`tz`表的外键`TZID` 当创建新任务时,系统会自动获取默认测区ID,并将该ID与任务关联。这种设计确保了任务数据的组织结构清晰,便于按项目和测区进行数据管理和查询。 ```mermaid erDiagram PROJECT { uuid id PK string PRname timestamp create_time } TZ { uuid id PK string TzName uuid PRID FK timestamp create_time } TD { uuid id PK string TDname uuid TZID FK uuid SCID FK int Ttype int Stype timestamp CreateTime } PROJECT ||--o{ TZ : "包含" TZ ||--o{ TD : "包含" ``` **Diagram sources** - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp) **Section sources** - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp) ## 任务配置数据的验证机制和错误处理策略 系统在任务配置过程中实施了严格的验证机制和错误处理策略,确保数据的完整性和有效性: 1. **输入验证**: - 循环次数必须在1-60000之间 - 时间间隔必须在1-60000之间 - PLC ID不能为空 2. **重复性检查**: - 添加任务时检查是否已存在相同任务ID,避免重复 3. **事务处理**: - 所有数据库操作都在事务中执行,确保数据一致性 - 操作失败时自动回滚事务 4. **异常处理**: - 使用try-catch捕获数据库操作异常 - 显示详细的错误信息给用户 5. **多语言支持**: - 根据系统语言设置显示相应的错误提示信息 ```mermaid flowchart TD Start([开始保存]) --> ValidateLoop["验证循环次数"] ValidateLoop --> |无效| ShowError1["显示范围错误"] ValidateLoop --> |有效| ValidateInterval["验证时间间隔"] ValidateInterval --> |无效| ShowError2["显示范围错误"] ValidateInterval --> |有效| ValidatePLC["验证PLC ID"] ValidatePLC --> |为空| ShowError3["显示不能为空"] ValidatePLC --> |有效| BeginTrans["开始事务"] BeginTrans --> InsertData["插入任务包数据"] InsertData --> Commit["提交事务"] Commit --> |成功| Success["显示保存成功"] Commit --> |失败| Rollback["回滚事务"] Rollback --> ShowError4["显示保存失败"] ``` **Diagram sources** - [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp) **Section sources** - [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp) ## 任务配置驱动脚本生成过程 任务配置通过`SptManager`与`ProManager`的协作模式驱动后续的脚本生成过程。当任务配置完成后,系统会根据配置参数自动生成相应的测量脚本文件。 ```mermaid sequenceDiagram participant UI as "用户界面" participant TaskConfig as "任务配置" participant SptManager as "SptManager" participant ProManager as "ProManager" participant Database as "数据库" UI->>TaskConfig : 配置任务参数 TaskConfig->>Database : 保存任务配置 Database-->>TaskConfig : 保存成功 TaskConfig->>SptManager : 请求生成脚本 SptManager->>ProManager : 获取项目/测区信息 ProManager-->>SptManager : 返回项目结构 SptManager->>Database : 查询任务详情 Database-->>SptManager : 返回任务数据 SptManager->>SptManager : 生成脚本文件 SptManager->>Database : 保存脚本信息 Database-->>SptManager : 保存成功 SptManager-->>TaskConfig : 脚本生成完成 TaskConfig-->>UI : 显示操作结果 ``` **Diagram sources** - [SptManager.cpp](file://cpp/Managers/SptManager.cpp) - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp) **Section sources** - [SptManager.cpp](file://cpp/Managers/SptManager.cpp) - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp) ## 任务配置API使用示例 以下是通过编程方式创建和修改任务参数的API使用示例: ```mermaid classDiagram class CTaskDataOper { +Create1DTask(ST1DTaskParam, CString) int +Create2DTask(ST2DTaskParam, CString) int +Create3DTask(ST3DTaskParam, CString) int +InsertTaskPacketInfo(vector~STTdBrowseInfo~, STTaskPacketAttr) bool +QueryTaskPacketInfo(vector~STTdBrowseInfo~) bool +QueryTaskPacketAttr(int&, int&, CString&) bool } class ST1DTaskParam { +CString strTDName +int iSptID +CString strSptName +int iSptType +int iTestType +int iStacking +int iTxWave +int iTxPeriod +int iSAInterval +CString strTestPlace } class ST2DTaskParam { +CString strTDName +int iSptID +CString strSptName +int iSptType +int iTestType +int iStacking +int iTxWave +int iTxPeriod +int iSAInterval +CString strTestPlace +int iStartElec +int iEndElec +int iEAmount +int iAR +int iCableLayout +int iSkipCable +int iRollCnt +float fEspace +BYTE ucTestGRFlag +UINT uiDevID } class ST3DTaskParam { +CString strTDName +int iSptID +CString strSptName +int iSptType +int iTestType +int iStacking +int iTxWave +int iTxPeriod +int iSAInterval +CString strTestPlace +int iEAmount +int iAR +int iCableLayout +int iSkipCable +BYTE ucTestGRFlag +UINT uiDevID } class STTaskPacketAttr { +int iLoopTimes +int iInterval +CString strPlcID } CTaskDataOper --> ST1DTaskParam : "使用" CTaskDataOper --> ST2DTaskParam : "使用" CTaskDataOper --> ST3DTaskParam : "使用" CTaskDataOper --> STTaskPacketAttr : "使用" ``` **Diagram sources** - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp) **Section sources** - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp)