2. 实时性能指标与测量基础
在PC-Based控制中,TwinCAT把一台标准工业PC变成软PLC与运动控制平台。与专用控制器不同,Windows与TwinCAT实时核共享同一颗CPU,因此“实时性”不是一句口号,而是一组可被量化的时间指标。调优的第一步不是改参数,而是建立统一的度量语言:抖动、延迟、周期时间、CPU负载、实时任务响应时间。只有先能准确测量,后续的优先级设置、CPU隔离、网卡优化才有判断依据。
五个核心指标的定义与相互关系
周期时间(Cycle Time)是实时任务被调度执行的标称间隔,例如PLC任务设为1 ms,意味着理论上每1 ms执行一次。它是配置值,不是实测值。实测的相邻两次任务启动间隔称为实际周期,其波动量就是抖动(Jitter)。抖动通常用最大值、最小值或标准差表示,例如标称1 ms的任务,实测间隔在0.98~1.06 ms之间,则最大抖动约为±60 µs。
延迟(Latency)描述信号从产生到被处理的时间。在TwinCAT中常见三段:输入端子采样到EtherCAT帧到达的输入延迟、任务计算耗时、输出帧发出到端子输出的输出延迟。端到端延迟是三者之和,它决定了控制回路的相位滞后。
实时任务响应时间指从触发事件(如EtherCAT同步信号、外部中断)到任务代码开始执行的时间,包含调度等待与上下文切换开销。它与抖动共同决定控制品质:响应时间偏大意味着控制动作滞后,抖动偏大意味着滞后量不稳定,二者都会降低闭环带宽与稳定性。
CPU负载是实时任务与Windows系统占用CPU时间的比例。TwinCAT实时核的负载应留有余量,一般建议实时任务负载不超过50%~70%,为抖动尖峰和突发计算留出空间。负载过高会直接放大抖动,甚至导致任务超时。
指标之间的因果链
这五个指标并非孤立。CPU负载升高会延长调度等待,使响应时间变大;响应时间波动又表现为抖动;抖动增大使实际周期不稳定,进而影响EtherCAT分布式时钟同步质量,最终反映为端到端延迟的波动。因此调优时通常先看CPU负载与抖动,再定位到具体任务或驱动。
用TwinCAT Scope测量抖动与响应时间
TwinCAT Scope是观察时间行为最直接的工具。典型做法是:在PLC任务中记录任务开始与结束的时间戳,将两个变量添加到Scope,采样周期设为任务周期的1/10或更小,运行数分钟后观察波形。若任务标称1 ms,Scope采样100 µs,可以看到每次任务执行的起止时刻。相邻起始时刻之差即实际周期,其最大值与最小值之差即抖动。
更工程化的做法是使用TwinCAT提供的PlcTaskSystemInfo或F_GetTaskTime读取任务时间,配合F_GetSystemTime获取高精度时间戳。例如在任务首尾分别调用时间函数,差值即为任务执行时间;连续记录1000个周期,用Scope的统计功能查看最大、最小、平均值。若发现抖动尖峰周期性出现,往往与Windows后台任务、网卡中断或另一个高优先级任务有关。
// 示例:在PLC任务中采集周期与执行时间(示意)
tStart := F_GetSystemTime();
// ... 控制逻辑 ...
tEnd := F_GetSystemTime();
nExecTime := tEnd - tStart; // 任务执行时间
nCycle := tStart - tPrevStart; // 实际周期
tPrevStart := tStart;
把nCycle与nExecTime同时加入Scope,可以直观看到:执行时间接近周期时间时,抖动会迅速恶化,因为任务几乎没有余量。经验上,任务执行时间应控制在周期时间的30%~50%以内。
用Performance Monitor观察CPU负载与中断
Windows Performance Monitor(perfmon)可添加TwinCAT相关计数器,观察实时核的CPU占用、上下文切换速率与中断时间。关键计数器包括:Processor Time(各核总占用)、Interrupts/sec(中断频率)、DPC Time(延迟过程调用耗时)。若某核的DPC Time持续偏高,说明驱动或网卡中断处理占用了过多时间,会直接推高实时任务响应时间。
在TwinCAT中还可通过TwinCAT System Manager的Real-Time设置查看各任务的CPU占用估算,以及通过TcRTime相关诊断变量读取实时核的负载。建议在系统稳定运行、控制逻辑全部激活的状态下测量,而不是空载测量,否则负载数据没有参考价值。
测量结果的判读与调优方向
拿到数据后,可按以下逻辑判断:若CPU负载长期高于70%,优先做CPU隔离或降低非实时任务干扰;若抖动尖峰与中断频率相关,检查网卡与驱动设置;若响应时间偏大但抖动小,说明调度延迟稳定,可考虑提高任务优先级或减少任务数量;若端到端延迟大而抖动小,则更多是滤波、采样或通信周期设置问题,而非实时性不足。
| 现象 | 可能原因 | 优先检查 |
|---|---|---|
| 抖动尖峰周期性出现 | Windows后台任务、网卡中断 | 中断频率、CPU隔离 |
| CPU负载持续偏高 | 任务过多、逻辑过重 | 任务拆分、执行时间 |
| 响应时间大但稳定 | 优先级低、调度等待长 | 任务优先级设置 |
| 端到端延迟大 | 滤波、采样、通信周期 | EtherCAT周期、滤波器 |