VWED_server/docs/select_agv_output_update.md

3.3 KiB
Raw Blame History

选择机器人块输出参数立即更新说明

修改背景

选择机器人块CSelectAgvBp和机器人执行动作块CAgvOperationBp是嵌套关系。之前的实现中虽然选择机器人块在选择完成后状态就显示为成功但是输出内容选择出的机器人结果要等到整个嵌套的动作块执行完成后才会更新到表中在任务记录详情里才能显示出来。这不符合实际的显示需求。

修改内容

1. 修改 RobotBlockHandler.update_block_record 方法

文件: services/execution/handlers/robot_scheduling.py

修改点:

  • 增加 block_nameoutput_data 参数
  • 在选择机器人成功后,立即更新块记录的输出参数到数据库
  • 构建完整的输出结构:{"blocks": {"块名称": {"selectedAgvId": "机器人名称"}}}
  • 同时更新 output_paramsblock_out_params_value 字段

2. 修改选择机器人块的调用逻辑

文件: services/execution/handlers/robot_scheduling.py

修改点:

  • 在选择机器人成功后第897-902行立即调用 update_block_record 方法
  • 传入块名称和输出数据(包含选择的机器人名称)
  • 这样用户可以立即在任务记录详情中看到选择的机器人

执行流程

修改前的流程

  1. 选择机器人块开始执行
  2. 调用天风系统接口选择机器人
  3. 等待机器人选择完成
  4. 更新块记录状态为成功(但不更新输出参数)
  5. 执行嵌套的动作块
  6. 等待所有子块执行完成
  7. 最后才更新输出参数到数据库
  8. 用户才能看到选择的机器人

修改后的流程

  1. 选择机器人块开始执行
  2. 调用天风系统接口选择机器人
  3. 等待机器人选择完成
  4. 立即更新块记录状态为成功,并更新输出参数到数据库
  5. 用户立即可以在任务记录详情中看到选择的机器人
  6. 执行嵌套的动作块
  7. 所有子块执行完成后,再次更新输出参数(内容相同,不影响显示)

技术细节

输出参数格式

{
  "blocks": {
    "块名称": {
      "selectedAgvId": "机器人名称"
    }
  }
}

数据库字段

  • output_params: 完整的输出结构(包含 blocks 层级)
  • block_out_params_value: 输出参数值(只包含选择的机器人信息)

注意事项

  1. 输出参数会被更新两次:第一次在选择机器人完成时立即更新,第二次在所有子块执行完成后再次更新。两次更新的内容相同,不会造成问题。

  2. 不影响子块执行:立即更新输出参数不会影响子块的执行逻辑,子块仍然可以正常访问 context 中的机器人信息。

  3. 兼容性这个修改不会影响其他类型的块只针对选择机器人块CSelectAgvBp

测试建议

  1. 启动一个包含选择机器人块和嵌套动作块的任务
  2. 在选择机器人完成后,立即查询任务记录详情
  3. 验证能否看到选择的机器人信息
  4. 等待动作块执行完成后,再次查询任务记录详情
  5. 验证机器人信息保持一致

相关文件

  • services/execution/handlers/robot_scheduling.py - 选择机器人块处理器
  • services/execution/block_executor.py - 块执行器
  • data/models/blockrecord.py - 块记录数据模型

修改日期

2025-10-17