Skip to content

运维手册

故障处置总则

先停止提交新命令,保留最后一个错误码和轴/组快照,再判断是否允许 FbReset 或需要宿主安全系统接管。FbReset 只清除可复位错误,不替代 STO/SS1,也不证明驱动器已经安全。

错误码表

ErrorCode 常见原因 处置
ok 调用成功,无恢复动作 继续执行下一条命令;无需复位
invalid_argument 空引用、NaN/Inf、零或负动力学参数、无效组合 修正输入;确认 Execute 上升沿只提交一次
out_of_range 超出固定数组、软限位或表点范围 检查维数、目标和固定容量;不要扩大 RT 容器
capacity_exceeded 队列、窗口或固定表已满 降低连续段数/窗口深度,等待已承诺段完成
infeasible 动力学约束下没有可行 OTG/TOPP 解 增加可用周期或放宽合法动力学限值,保留原轨迹
precondition_failed 轴未上电、组非 standby、所有权/同步状态不满足 读取状态快照,按生命周期解除 owner 或先停止
unsupported 当前矩阵明确未实现,如 CENTER/RADIUS 圆弧、EtherCAT 不重试同一输入;切换到已声明支持的路径或宿主实现
bytecode_version_mismatch ST 工件字节码版本与当前运行时不匹配 用当前工具链重新编译 ST 程序,或成对升级编译器与运行时

典型现象

现象 首查项 不要做
命令一直 busy 是否在 buffered 队列、组是否被窗口承诺 不要在 RT 线程强行改目标
command_aborted 是否有 aborting 接管、GroupStop 或掉电 不要把它当作规划失败
blending 变 buffered last_blend_degraded_command() 和提交时机 不要盲目增大公差掩盖反折/过迟提交
cam 换表拒绝 当前 master 相位、新旧 slave 位置差和 tolerance 不要忽略位置连续性门
stream 进入 stopped timeout/extrapolation 配置、生产者心跳 不要在断流时直接写零目标
组进入 errorstop last_cartesian_error()、成员掉电/错误快照 不要只重置组而不检查驱动器

事故记录

每次现场事件至少记录:版本/tag、周期配置、轴/组配置、输入命令、错误码 文本(rt::to_string)、最后 100 个快照、是否触发安全系统,以及回放 语料 ID。修复后先在 ServoSim 和黄金回放复现,再安排真机验证。

Trace 可视化

参考 executor 的 PLCT v1 二进制 trace 可以直接导出为 CSV 或单文件 HTML:

python tools/plcopen_trace.py rt_executor_trace.bin --csv rt_executor_trace.csv --html rt_executor_trace.html

HTML 输出是自包含的 SVG 时序图:每个轴一条 lane,横轴是 tick,绿线是命令位置, 并附带最终位置、最大速度/加速度和最大单周期位置步长摘要。先用它判断是命令 序列、动力学约束还是宿主桥接出了问题,再决定是否需要更深的 replay/真机复现。

安全边界

普通运动错误处理不能宣称 STO、SS1、SIL 或 PL。安全相关动作必须走已验证 的外部安全系统;项目责任矩阵见 STO/SS1 integration boundary