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 节拍内完成一次“读入—计算—回写”,否则该周期被判定为超时。
三、抖动来源分析
抖动(Jitter)指实际周期与标称周期之间的偏差。RSI 中主要来源有四类:一是 KRC 系统负载,如后台任务、示教器刷新、日志写入;二是 KLI 网络,交换机拥塞、非实时协议混跑、网卡中断合并;三是 RSI 程序自身,如 WAIT、文件读写、MsgNotify 等阻塞调用;四是外部传感器,如力传感器通过非实时通道上传,数据到达时刻本身抖动。抖动超过周期的一半,就可能在下一个周期才被消费,造成相位滞后。
四、周期超时故障排查
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 和运动平滑度,确认没有引入新的抖动源,才算完成一次有效的实时性验证。