命令状态机
| 项目 |
内容 |
| 文档编号 |
DES-05 |
| 文档名称 |
命令状态机 |
| 版本 |
V1.0 |
| 状态 |
已评审(Reviewed) |
| 适用系统 |
机器人智慧服务系统(命令服务 Alpha) |
| 编写日期 |
2026-08-10 |
| 关联文档 |
DOC-09 控制命令字典、控制会话状态机、越权-冲突-超时测试记录 |
1. 概述
命令状态机定义控制命令从创建到终态的全部状态与迁移规则。命令服务 Alpha(3030) 已按本文档实现:每条命令携带 status 与 events[](迁移审计链),超时自动重试,取消/重试受状态约束。
2. 命令状态定义(CMD-STATE)
| 状态 |
编码 |
说明 |
| 待发送 |
PENDING |
命令已创建,排队等待下发(预留态) |
| 已下发 |
SENT |
已发送至设备端,等待 ACK |
| 已确认 |
ACKED |
设备已确认收到,准备执行 |
| 执行中 |
EXECUTING |
设备正在执行 |
| 成功 |
SUCCEEDED |
执行成功(终态) |
| 失败 |
FAILED |
执行失败(终态,可手动重试) |
| 超时 |
TIMEOUT |
超时未完成(终态,可手动重试) |
| 已取消 |
CANCELLED |
用户取消/会话关闭(终态) |
3. 状态迁移图
4. 状态迁移表(CMD-TRANSITION)
| 当前状态 |
事件 |
目标状态 |
触发方 |
条件 / 动作 |
PENDING |
DISPATCH |
SENT |
平台 |
发送至设备通道 |
SENT |
DEVICE_ACK |
ACKED |
设备 |
记录 ackAt;ACK 携带 executing:true 可直接进入 EXECUTING |
ACKED |
EXEC_START |
EXECUTING |
设备 |
设备开始执行 |
EXECUTING |
RESULT_OK |
SUCCEEDED |
设备 |
result{status:'success'};清除超时定时器 |
EXECUTING |
RESULT_FAIL |
FAILED |
设备 |
result{status:'failed', errorCode};清除定时器 |
SENT/ACKED/EXECUTING |
TIMEOUT |
TIMEOUT |
平台 |
超时;重试次数 < maxRetries 时先自动重试(→SENT) |
PENDING/SENT/ACKED |
CANCEL |
CANCELLED |
用户/会话 |
仅非执行态可取消 |
TIMEOUT/FAILED |
RETRY |
SENT |
用户 |
手动重试,retries+1 |
| 任意非终态 |
SESSION_CLOSE |
CANCELLED |
平台 |
控制会话关闭,自动取消未终态命令 |
5. 超时与重试策略(CMD-TIMEOUT)
| 参数 |
默认值 |
范围 |
说明 |
timeoutMs |
30000 |
1000~300000 |
从 SENT 起算,到达终态或 ACK+result 全流程的超时预算 |
maxRetries |
1 |
0~3 |
超时自动重试次数;重试后重新计时 |
| 重试间隔 |
0(立即) |
— |
Alpha 版立即重发,后续版本可加指数退避 |
计时规则: 命令创建即启动定时器;进入 SUCCEEDED/FAILED/CANCELLED 时取消;自动重试与手动重试均重新启动定时器。
6. 命令事件审计(CMD-EVENT)
每条命令维护 events[] 不可变事件链,用于联调定位与测试记录核对:
| reason 取值 |
说明 |
dispatch |
创建下发 |
device_ack |
设备确认 |
exec_start |
开始执行 |
exec_result |
结果回传 |
auto_retry |
超时自动重试 |
manual_retry |
用户手动重试 |
user_cancel |
用户取消 |
timeout |
超时终态 |
7. 与设备接入/状态服务的衔接
- 下发前置校验:命令服务调用设备接入服务
GET /api/devices/:id/online,设备离线返回 40902 拒绝下发(设备接入服务不可达时降级放行)。
- 执行联动:命令进入 EXECUTING 时,状态服务侧设备
mode 切换为 working/patrol;命令终态后恢复 idle(联调阶段由设备端模拟上报)。
变更记录
| 版本 |
日期 |
变更内容 |
作者 |
| V1.0 |
2026-08-10 |
初稿:命令状态定义/迁移表/超时重试/事件审计 |
系统组 |