8.6 KiB
8.6 KiB
任务配置
**本文档引用的文件** - [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp) - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp) - [SptManager.cpp](file://cpp/Managers/SptManager.cpp)目录
项目结构
Geomative Studio项目的任务配置功能主要集中在cpp/Views和cpp/Operator目录下。核心文件包括DialCfgTaskPacket.cpp用于任务包配置的UI交互,TaskDataOper.cpp负责任务数据的数据库操作,以及SptManager.cpp管理脚本文件的创建和同步。
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
Section sources
任务包配置流程
任务包配置功能通过DialCfgTaskPacket对话框实现,允许用户将多个测量任务组合成一个任务包进行管理。配置流程包括:
- 初始化对话框时,从数据库查询所有可用任务并填充到下拉列表中
- 用户选择任务后点击"添加"按钮,将选中的任务添加到任务包列表中
- 用户可删除已添加的任务
- 配置任务包的循环次数、时间间隔和PLC ID等属性
- 保存配置时进行数据验证,确保参数在有效范围内
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
Section sources
任务与项目、测区的关联关系
任务配置与项目、测区之间存在明确的层级关联关系。每个任务必须归属于一个测区,而测区又属于特定的项目。这种关系在dptt数据库中通过外键约束实现:
project表存储项目信息tz表存储测区信息,包含指向project表的外键PRIDtd表存储任务信息,包含指向tz表的外键TZID
当创建新任务时,系统会自动获取默认测区ID,并将该ID与任务关联。这种设计确保了任务数据的组织结构清晰,便于按项目和测区进行数据管理和查询。
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
Section sources
任务配置数据的验证机制和错误处理策略
系统在任务配置过程中实施了严格的验证机制和错误处理策略,确保数据的完整性和有效性:
-
输入验证:
- 循环次数必须在1-60000之间
- 时间间隔必须在1-60000之间
- PLC ID不能为空
-
重复性检查:
- 添加任务时检查是否已存在相同任务ID,避免重复
-
事务处理:
- 所有数据库操作都在事务中执行,确保数据一致性
- 操作失败时自动回滚事务
-
异常处理:
- 使用try-catch捕获数据库操作异常
- 显示详细的错误信息给用户
-
多语言支持:
- 根据系统语言设置显示相应的错误提示信息
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
Section sources
任务配置驱动脚本生成过程
任务配置通过SptManager与ProManager的协作模式驱动后续的脚本生成过程。当任务配置完成后,系统会根据配置参数自动生成相应的测量脚本文件。
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
Section sources
任务配置API使用示例
以下是通过编程方式创建和修改任务参数的API使用示例:
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
Section sources