在工业自动化领域,如何在通用Linux系统上实现微秒级的硬实时控制,一直是机器人、多轴运动控制等高精度场景落地的关键挑战。开源的IgH EtherCAT Master协议栈,凭借其卓越的高实时性与低抖动特性,成为了连接工业现场总线与上层应用的核心桥梁。然而,要释放其全部潜能,离不开Preempt-RT实时内核的强力加持。
本文将基于飞凌嵌入式OK3576-C开发板,通过1ms周期同步速度模式与125μs周期同步转矩模式的实测对比,展示在CPU隔离核与满负载压力下,系统如何将通讯抖动控制在微秒级,为您呈现一套可落地的高性能实时工业控制完整方案。
先说结论,表现很强悍!
周期同步速度模式,周期抖动由6.3080μs降低为3.5790μs;
周期同步转矩模式,周期抖动由50.0470μs降低为2.1130μs!
1、IgH EtherCAT Master是什么?
在解答这个问题之前,先来看一下什么是EtherCAT ?EtherCAT是发展最快的工业以太网协议之一,采用硬件驱动型架构,具有速度快、传输数据量大、传输距离长、更新周期小、连接设备数量多等多重优势。

IgH EtherCAT则是运行于Linux系统的开源EtherCAT主站程序,IgH EtherCAT主站通过构建Linux字符设备,应用程序通过对字符设备的访问实现与EtherCAT主站模块的通信。

它主要包括以下三部分:
1. Master Module
角色:EtherCAT 主站的“大脑”和内核。
功能:负责管理 EtherCAT 总线通信,实现主站与从站间的数据交换与同步。它包含主站实例及供底层驱动和上层应用调用的接口。
2. Device Modules
角色:经过实时性优化的“网卡驱动”(如瑞芯微RK平台的 stmmac)。
功能:作为主站与物理网口的桥梁。它能智能分流:被主站选中的设备用于收发 EtherCAT 帧;未被选中的设备则作为普通以太网设备走常规协议栈,实现 EtherCAT 与普通网络的并行工作。

3. Application
角色:业务逻辑的执行者(用户编写或生成)。
功能:通过应用接口向主站申请总线控制权。一旦获准,即可配置总线并进行周期性的过程数据交换。应用程序既可以是内核模块,也可以是通过库(EtherCAT/RTDM)调用的用户空间程序。

2、实时内核Preempt-RT
1. 独具优势:
IgH EtherCAT Master要保证高实时性,需要在实时操作系统上运行。Preempt-RT是一种针对实时性能进行了优化的Linux内核,与普通的Linux内核相比,Preempt-RT的优势很明显:
① 硬实时保障:
具备硬实时能力,能确保关键任务在严格规定的时限内完成,不受其他任务干扰,满足工业自动化、航空航天等对时间精度极高的场景需求。
② 高效调度与低延迟:
采用基于优先级的抢占式调度算法,高优先级任务可立即抢占低优先级任务;同时深度优化中断处理机制,大幅缩短响应时间,消除系统抖动。
③ 高精度定时:
提供微秒级的内核定时器精度,配合实时扩展机制,支持用户对内核进行定制,精准满足EtherCAT通信的周期性数据交换需求。
2. 实时性测试
本次测试参考Rockchip RealTime Linux Performance Test Report,分为空载测试和压力测试。测试的环境如下:
① 工具:cyclictest
② 硬件平台:OK3576-C开发板
③ 内核版本:6.1.118-rt36
④ Path:SDK/docs/rk35xx/Patches/Real-Time-Performance/PREEMPT_RT/kernel-6.1/kernel-6.1.118
a. 配置Preempt-RT内核,可以参考用户资料:/1-手册/OK35xx-Linux6.1.118-配置实时内核方法.pdf
b. 不同硬件平台的实时性测试结果,可以参考用户资料:/1-手册/OK35xx-Linux6.1.118-实时性测试.pdf
空载测试:
cyclictest -c 0 -m -t 8 -p99 -D12H
参数介绍:
-c 0:选择时钟源为CLOCK_MONOTONIC
-m:锁定内存,防止内存页交换到磁盘
-t 8:创建8个测试线程
-p 99:设置线程的优先级为99
-D 12h:设置测试持续时间为12h

压力测试:
stress-ng -c8 --io 8 --cpu-load 100 -vm 4 --vm-bytes 512M --timeout 10000000s &
参数介绍:
-c 8:模拟8个CPU逻辑核心满负荷运行
--io 8:模拟磁盘I/O压力
--cpu-load 100:设定 CPU 的目标负载为 100%
--vm 4 --vm-bytes 512M:模拟内存压力
--timeout 10000000s:设置测试持续时间为10000000秒

3、演示案例
本节的演示选取周期同步速度模式(通讯周期时间为1ms)与周期同步转矩模式(通讯周期时间为125μs)驱动伺服电机转动。
1. 环境介绍
开发环境:
Kernel:6.1.118-rt36
IgH EtherCAT Master:IgH EtherCAT master 1.6.0-rc1
EtherCAT主站:OK3576-C
EtherCAT从站:
(1)EtherCAT耦合器EK1100
(2)数字量输出模块EL2008
(3)伺服驱动器IS620NS1R6I + 伺服电机MS1H1-10B30CB A330Z
拓扑结构图:

主站通过网线连接EtherCAT耦合器EK1100,EK1100通过E-Bus连接数字量输出模块EL2008、通过网线连接伺服驱动器IS620N,交流伺服电机MS1H1-10B30CB通过动力线和编码线与伺服驱动器IS620N相连。
使用EtherCat调试工具输出识别到的从站:

使用EtherCat调试工具输出总线拓扑:

2. 伺服模式
IS620N 支持 7 种伺服模式,分别为轮廓位置模式(PP)、轮廓速度模式(PV)、轮廓转矩模式(PT)、回零模式(HM)、周期同步位置模式(CSP)、周期同步速度模式(CSV)、周期同步转矩模式(CST)。
不同模式支持的通讯周期不同,如下所示:

3. 主站性能测试方法
以下定义参考:Definitions of Jitter and Latency

参考官方示例代码:
examples/dc_user/main.c · stable-1.5 · EtherLab / EtherCAT Master · GitLab
里面有实现统计一个通讯周期的所花费的最大值和最小值。以1s为周期循环打印该区间EtherCAT通讯周期时间的最大值和最小值。

演示一:周期同步速度模式(1ms)
周期同步速度模式下,上位控制器将计算好的目标速度 60FF 周期性同步发送给伺服驱动器,速度、转矩调节由伺服内部执行。
基本配置:

使用EtherCat调试工具输出的pdo信息:

操作步骤:
步骤1:设定模式,OD 6060h = 09h,周期同步速度模式。
步骤2:设定目标速度,OD 60FFh = 0。由于速度模式下,一旦切至 Servo On (步骤 3),伺服电机就会开始运转,因此设定 0 是确保在 Servo On 时先保持 0 rpm 而不作动。
步骤3:设定控制指令 OD 6040h,请依照以下步骤操作。步骤 3.1 与 3.2 是为了使驱动器的状态机 (state machine) 进入准备状态。

步骤4:设定目标速度 OD 60FFh。
性能指标:
① 压力测试(6h)
stress -c 4 --io 2 --vm 1 --vm-bytes 256M --timeout 1000000s&
./igh_ethercat_motor_csv


② 隔离测试+隔离核(6h)
stress -c 4 --io 2 --vm 1 --vm-bytes 256M --timeout 1000000s &
taskset -c 7 ./igh_ethercat_motor_csv


演示二:周期同步转矩模式(125μs)
此模式下,上位控制器将计算好的目标转矩 6071h 周期性同步的发送给伺服驱动器,转矩调节由伺服内部执行。当速度达到限幅值后将进入调速阶段。
基本配置:

使用EtherCat调试工具输出的pdo信息:

操作步骤:
步骤1:设定模式,OD 6060h = 0Ah,周期同步转矩模式。
步骤2:设定目标扭矩,OD 6071h = 0。由于扭矩模式下,一旦切至Servo On (步骤 3),伺服目标扭矩即作用,因此先设定 0,以确保安全。
步骤3:设定控制指令,OD 6040h,请依照以下步骤操作。步骤 3.1 与 3.2 是为了使驱动器的状态机 (state machine) 进入准备状态。

步骤4:设定目标扭矩 OD 6071h。
性能指标:
① 压力测试(6h)
stress -c 4 --io 2 --vm 1 --vm-bytes 256M --timeout 1000000s&
./igh_ethercat_motor_cst


② 压力测试+隔离核(6h)
stress -c 4 --io 2 --vm 1 --vm-bytes 256M --timeout 1000000s &
taskset -c 7 ./igh_ethercat_motor_cst


以上测试对未及时收回来的数据帧时统计的周期样本进行剔除,在跑125μs周期,帧未及时收回来的情况会更加频繁。
两种演示的性能测试,应用程序都采用FIFO调度+内存锁定;在采取隔离核策略时,系统的周期抖动降低。
周期同步速度模式,周期抖动由6.3080μs降低为3.5790μs。
周期同步转矩模式,周期抖动由50.0470μs降低为2.1130μs。
方案展示:

652
