4. 实时执行引擎的时钟与调度模型

运动控制器的执行引擎本质上是一个“按时间约束交付动作”的系统。插补算出的轨迹点再精确,如果不能在确定的时刻写入伺服驱动器,最终也会表现为轨迹抖动、跟随误差超限甚至报警。因此,理解实时执行引擎,核心不是“跑得快”,而是“在截止时间前必然完成”。

硬实时与软实时的分界:错过截止时间是否可接受

硬实时(Hard Real-Time)指任务必须在截止时间前完成,一旦超时即视为系统失败。在运动控制中,位置环、电流环、插补周期更新、编码器采样都属于硬实时任务。例如某控制器设定插补周期为 1 ms,位置环每 1 ms 必须把新的位置指令写入伺服,若某次延迟到 1.3 ms,则该周期内电机实际收到的指令与规划轨迹不一致,可能造成速度突变。软实时(Soft Real-Time)则允许偶发超时,只要求平均性能满足体验,例如轨迹预览、日志上传、HMI 刷新、参数保存。它们超时不会直接破坏运动安全,但会降低可观测性。

判断一个任务属于硬实时还是软实时,可以问三个问题:超时是否导致机械碰撞或失步?超时是否导致闭环不稳定?超时是否只影响显示或记录?前两者为硬实时,后者为软实时。工程上常用“截止时间 + 抖动上限”描述硬实时任务,例如“周期 1 ms,抖动 ≤ 50 μs”。

三种调度模型在运动控制中的位置

周期任务调度是最贴近运动控制核心的模型。它把时间划分为等长周期,每个周期内按固定顺序执行采样、插补、位置环、输出。其优点是确定性好、抖动可预测,适合多轴同步。中断驱动调度由硬件事件触发,例如编码器到达、定时器溢出、通信接收完成。它响应快,适合对事件敏感的任务,如急停输入、探针捕获、位置锁存。时间片轮转调度把 CPU 时间切成小片轮流分配给多个任务,适合非实时或弱实时任务,如界面刷新、文件写入、网络上报。它不保证截止时间,因此不能直接承担位置环输出。

实际控制器通常采用混合模型:底层用定时器中断驱动硬实时周期任务,中层用中断响应处理外部事件,上层用时间片轮转运行非实时任务。这样既保证运动核心的确定性,又保留系统管理和人机交互能力。

运动控制器实时执行引擎:时钟与调度分层 硬实时层(周期任务 + 中断驱动) 定时器中断 1 ms 周期触发 插补 + 位置环 截止 1 ms,抖动 ≤ 50 μs 编码器采样 位置锁存 / 探针 急停 / 限位中断 最高优先级 软实时层(时间片轮转) HMI 刷新 20 ms 片 轨迹预览 / 日志 允许偶发超时 参数保存 / 上报 非运动安全 通信上报 弱实时 调度关系 硬实时周期任务优先于软实时任务;中断可抢占周期任务;时间片轮转只在硬实时任务空闲时运行。 硬实时失败示例 插补周期 1 ms,某次延迟至 1.3 ms → 指令与规划不一致,速度突变。 软实时可接受示例 HMI 刷新延迟 30 ms → 仅影响显示,不破坏运动安全与闭环稳定。

周期任务:运动控制确定性的骨架

周期任务的核心参数是周期 T、执行时间 C、截止时间 D 和抖动 J。对位置环而言,通常 T = D,即每个周期必须完成一次输出。若 C 接近 T,系统裕量不足,稍有中断嵌套就会超时。工程上建议硬实时任务 CPU 占用不超过 60%~70%,为中断和抖动留出余量。

以一个三轴插补控制器为例:设定插补周期 1 ms,每周期执行 200 次浮点插补运算、3 轴位置环 PID、3 轴编码器读取和总线写入。假设实测单周期执行时间为 420 μs,则占用率 42%,剩余 580 μs 可容纳通信中断和急停中断。若某次因日志写入导致执行时间涨到 1.1 ms,就发生硬实时超时。此时应把日志写入移到软实时层,而不是提高 CPU 主频硬扛。

中断驱动:事件响应的快速通道

中断驱动适合“事件发生才处理”的任务。运动控制中典型场景包括:编码器 Z 相到达触发位置锁存、探针信号触发坐标捕获、驱动器报警触发急停、总线接收完成触发数据解析。中断服务程序应尽量短,只做标记、锁存和入队,把耗时计算交给周期任务或软实时任务。若在中断里做浮点插补或文件写入,会拉长中断关闭时间,导致周期任务抖动增大。

例如探针捕获任务:探针信号到来时,中断服务程序在 5 μs 内读取编码器锁存值并写入环形缓冲区,随后退出。周期任务在下一个 1 ms 周期读取该值并计算工件坐标。这样既保证捕获时刻精确,又不破坏周期任务的确定性。

时间片轮转:非实时任务的合理归宿

时间片轮转把 CPU 时间切成固定片,轮流分配给多个任务。它适合 HMI 刷新、日志写入、参数保存、网络上报等软实时任务。这些任务超时不会导致运动失败,但长期得不到执行会影响可观测性和数据完整性。配置时应注意:时间片不宜过小,否则上下文切换开销占比升高;也不宜过大,否则软实时任务响应变慢。常见片长为 5~20 ms。

需要强调的是,时间片轮转不能用于位置环输出。因为轮转调度不保证某个任务在固定时刻获得 CPU,位置环一旦被延迟,闭环性能立即下降。若系统只有时间片轮转而没有硬实时周期任务,则只能做低速、低精度、开环或弱闭环运动,不能用于多轴同步插补。

选型判断:按截止时间与后果分配调度模型

任务 实时类型 推荐调度 典型周期/响应 超时后果
电流环 / 位置环 硬实时 周期任务 100 μs~1 ms 闭环失稳、轨迹突变
插补周期更新 硬实时 周期任务 1 ms 多轴不同步
急停 / 限位 硬实时 中断驱动 ≤ 100 μs 机械碰撞
探针捕获 硬实时 中断驱动 ≤ 10 μs 坐标测量错误
HMI 刷新 软实时 时间片轮转 20~50 ms 显示滞后
日志 / 上报 软实时 时间片轮转 100 ms~1 s 数据缺失
配置检查顺序:先确认硬实时任务的周期、执行时间和抖动上限;再把中断服务程序压缩到只做锁存和入队;最后把日志、界面、上报等任务放入时间片轮转,并确认它们不会抢占硬实时任务。
常见错误:把日志写入、参数保存、网络上报放在周期任务中执行。这些操作耗时不可预测,会直接拉长周期任务执行时间,造成硬实时超时。正确做法是周期任务只做运动核心计算,其余工作交给软实时层。

总结来看,硬实时与软实时的区别不在“快慢”,而在“错过截止时间是否可接受”。周期任务提供确定性骨架,中断驱动提供事件快速响应,时间片轮转承载非实时管理任务。三者按优先级和截止时间分层协作,才能让插补、轨迹队列和实时执行引擎在工程上稳定落地。