a
This commit is contained in:
@@ -0,0 +1,286 @@
|
||||
# 任务配置
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp)
|
||||
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp)
|
||||
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
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<br/>任务包配置对话框"]
|
||||
end
|
||||
subgraph "业务逻辑层"
|
||||
TaskDataOper["TaskDataOper.cpp<br/>任务数据操作"]
|
||||
SptManager["SptManager.cpp<br/>脚本管理"]
|
||||
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)
|
||||
Reference in New Issue
Block a user