4. 实时周期与时间同步

RSI 的“实时”并不是一个抽象形容词,而是由一组可配置、可测量、可验证的时间参数共同约束出来的工程结果。理解这一节的关键,是把 RSI 看成一个以固定节拍运行的控制回路:KRC 在每个周期把新的位置设定值、状态字和传感器数据推给 RSI 对象,RSI 在周期内完成计算并回写修正量,超时或抖动过大都会直接表现为运动不平滑、报错甚至安全停止。

一、RSI 周期时间:谁在定节拍

RSI 的周期时间由 $RSI_CYCLE_TIME 定义,单位毫秒,常见取值为 4 ms、8 ms、12 ms。它决定了 RSI 对象 RSIOnCycle() 被调用的节拍,也决定了 IPO 插补器向 RSI 递交数据的节拍。周期越短,控制带宽越高,但对控制器负载、网络抖动和程序执行时间的要求也越苛刻。工程上通常遵循一个经验约束:

RSI 周期 ≥ 单周期内 RSI 程序执行时间 × 2 + 通信余量
通信余量一般取 1~2 ms(KLI 以太网)

例如某打磨应用,RSI 程序单周期计算约 1.2 ms,KLI 往返约 0.6 ms,则周期不宜低于 4 ms;若强行设为 2 ms,就会频繁触发周期超时。周期时间必须在 RSI_ON 之前通过 RSI_CYCLE_TIME 参数写入,运行中不可动态修改。

二、IPO 模式与实时性约束

RSI 与 KRC 的插补器通过 IPO 模式协同。常见模式有 IPO_MODE_OFF、IPO_MODE_C(笛卡尔)和 IPO_MODE_JOINT(关节)。在 IPO_MODE_C 下,RSI 接收的是笛卡尔位姿修正量,KRC 内部完成逆解;在关节模式下,RSI 直接给出各轴角度增量,实时性更好但需自行处理奇异与限位。无论哪种模式,RSI 都必须在每个 IPO 节拍内完成一次“读入—计算—回写”,否则该周期被判定为超时。

IPO 模式与 RSI 周期必须匹配:若 IPO 周期为 12 ms 而 RSI 设为 4 ms,RSI 会在部分周期内拿不到新设定值,表现为修正量被重复应用,运动出现台阶感。

三、抖动来源分析

抖动(Jitter)指实际周期与标称周期之间的偏差。RSI 中主要来源有四类:一是 KRC 系统负载,如后台任务、示教器刷新、日志写入;二是 KLI 网络,交换机拥塞、非实时协议混跑、网卡中断合并;三是 RSI 程序自身,如 WAIT、文件读写、MsgNotify 等阻塞调用;四是外部传感器,如力传感器通过非实时通道上传,数据到达时刻本身抖动。抖动超过周期的一半,就可能在下一个周期才被消费,造成相位滞后。

RSI 周期时间链与抖动来源 t0 t1 t2 t3 t4 周期 T 周期 T 周期 T 周期 T +0.4ms +1.8ms +0.6ms +3.2ms KRC 系统负载 后台任务/日志/示教器 KLI 网络 拥塞/非实时协议混跑 RSI 程序阻塞 WAIT/文件读写/消息 外部传感器 非实时通道上传抖动 周期超时阈值(通常为 1.5×T)

四、周期超时故障排查

RSI 周期超时的典型报错是 KSS01400 或 RSI 内部 RSI_ERR_CYCLE_TIMEOUT,表现为运动突然停止、$RSI_ACTIVE 被复位。排查应按“先看现象、再分来源、后做隔离”的顺序进行。

第一步,读取 $RSI_CYCLE_TIME 与 $RSI_ACTUAL_CYCLE_TIME,对比标称与实际。若实际值持续大于标称,说明程序执行时间已接近或超过周期。第二步,用 RSIMON 或示波器观察 KLI 报文到达间隔,判断抖动是否来自网络。第三步,注释掉 RSI 程序中的 WAIT、文件操作和 MsgNotify,观察超时是否消失。第四步,检查 KLI 是否与 KRC 的其它非实时服务共用网口,必要时为 RSI 单独划分 VLAN 或使用独立网卡。

不要用“加大周期”作为唯一手段。周期加大虽然能暂时消除超时,但会降低控制带宽,在力控、视觉伺服等场景中直接导致稳定性下降。应先定位抖动来源,再决定是否调整周期。

五、一个可复用的排查记录表

下面给出一个可直接填写的排查记录表,字段只围绕 RSI 周期与时间同步,不引入无关管理项。

检查项 观察值/命令 正常范围 异常处理
标称周期 $RSI_CYCLE_TIME 4/8/12 ms 与 IPO 周期匹配
实际周期 $RSI_ACTUAL_CYCLE_TIME ≤ 1.2×标称 优化程序或加大周期
KLI 抖动 RSIMON 报文间隔 ≤ 0.5×标称 隔离网络/换交换机
程序阻塞 注释 WAIT/文件/消息 无阻塞调用 移出周期回调
IPO 模式 IPO_MODE_* 与周期一致 重新配置并重启 RSI

最后强调一点:RSI 的时间同步不是“设一个周期就结束”,而是周期、IPO 模式、程序执行时间和网络抖动四者之间的持续平衡。每次修改周期或 IPO 模式后,都应重新观察 $RSI_ACTUAL_CYCLE_TIME 和运动平滑度,确认没有引入新的抖动源,才算完成一次有效的实时性验证。