3.3 KiB
3.3 KiB
选择机器人块输出参数立即更新说明
修改背景
选择机器人块(CSelectAgvBp)和机器人执行动作块(CAgvOperationBp)是嵌套关系。之前的实现中,虽然选择机器人块在选择完成后状态就显示为成功,但是输出内容(选择出的机器人结果)要等到整个嵌套的动作块执行完成后才会更新到表中,在任务记录详情里才能显示出来。这不符合实际的显示需求。
修改内容
1. 修改 RobotBlockHandler.update_block_record 方法
文件: services/execution/handlers/robot_scheduling.py
修改点:
- 增加
block_name和output_data参数 - 在选择机器人成功后,立即更新块记录的输出参数到数据库
- 构建完整的输出结构:
{"blocks": {"块名称": {"selectedAgvId": "机器人名称"}}} - 同时更新
output_params和block_out_params_value字段
2. 修改选择机器人块的调用逻辑
文件: services/execution/handlers/robot_scheduling.py
修改点:
- 在选择机器人成功后(第897-902行),立即调用
update_block_record方法 - 传入块名称和输出数据(包含选择的机器人名称)
- 这样用户可以立即在任务记录详情中看到选择的机器人
执行流程
修改前的流程
- 选择机器人块开始执行
- 调用天风系统接口选择机器人
- 等待机器人选择完成
- 更新块记录状态为成功(但不更新输出参数)
- 执行嵌套的动作块
- 等待所有子块执行完成
- 最后才更新输出参数到数据库
- 用户才能看到选择的机器人
修改后的流程
- 选择机器人块开始执行
- 调用天风系统接口选择机器人
- 等待机器人选择完成
- 立即更新块记录状态为成功,并更新输出参数到数据库
- 用户立即可以在任务记录详情中看到选择的机器人
- 执行嵌套的动作块
- 所有子块执行完成后,再次更新输出参数(内容相同,不影响显示)
技术细节
输出参数格式
{
"blocks": {
"块名称": {
"selectedAgvId": "机器人名称"
}
}
}
数据库字段
output_params: 完整的输出结构(包含 blocks 层级)block_out_params_value: 输出参数值(只包含选择的机器人信息)
注意事项
-
输出参数会被更新两次:第一次在选择机器人完成时立即更新,第二次在所有子块执行完成后再次更新。两次更新的内容相同,不会造成问题。
-
不影响子块执行:立即更新输出参数不会影响子块的执行逻辑,子块仍然可以正常访问 context 中的机器人信息。
-
兼容性:这个修改不会影响其他类型的块,只针对选择机器人块(CSelectAgvBp)。
测试建议
- 启动一个包含选择机器人块和嵌套动作块的任务
- 在选择机器人完成后,立即查询任务记录详情
- 验证能否看到选择的机器人信息
- 等待动作块执行完成后,再次查询任务记录详情
- 验证机器人信息保持一致
相关文件
services/execution/handlers/robot_scheduling.py- 选择机器人块处理器services/execution/block_executor.py- 块执行器data/models/blockrecord.py- 块记录数据模型
修改日期
2025-10-17