在工业自动化领域,如何在通用Linux系统上实现微秒级硬实时控制一直是机器人、多轴运动控制等高精度场景实现的关键挑战。开源的IgH EtherCAT Master协议栈以其优异的高实时性能和低抖动特性,成为连接工业现场总线和上层应用的核心桥梁。不过,要发挥其全部潜力,离不开Preempt-RT实时内核的强大加持。
本文将基于飞凌嵌入式OK3576-C开发板。通过1ms周期同步速度模式和125s周期同步扭矩模式的实测对比,展示系统如何在CPU隔离核心和满载压力下将通信抖动控制在微秒级,为您呈现完整的、可实施的高性能实时工业控制解决方案。
先说结论,性能很强!
周期同步速度模式,周期抖动由6.3080s降低为3.5790s;周期同步转矩模式,周期抖动由50.0470s降低为2.1130s!
在回答这个问题之前,我们先来看看什么是EtherCAT? EtherCAT 是发展最快的工业以太网协议之一。它采用硬件驱动架构,具有速度快、传输数据量大、传输距离远、更新周期短、连接设备数量多等多重优点。
IgH EtherCAT则是运行于Linux系统的开源EtherCAT主站程序,IgH EtherCAT主站搭建Linux字符设备,应用程序通过访问字符设备实现与EtherCAT主站模块的通信。
主要包括以下三个部分:
角色:EtherCAT主站的“大脑”和核心。
功能:负责管理EtherCAT总线通信,实现主站和从站之间的数据交换和同步。包含主站实例以及底层驱动和上层应用调用的接口。
角色:针对实时性能优化的“网卡驱动”(如Rockchip RK平台的stmmac)。
功能:作为主站与物理网口之间的桥梁。可智能分流:使用主站选择的设备来发送和接收EtherCAT帧;未选中的设备使用常规协议栈作为普通以太网设备,实现EtherCAT和普通网络的并行工作。
角色:业务逻辑的执行者(用户编写或生成)。
功能:通过申请接口向主站申请总线控制权。一旦获得批准,就可以配置总线并进行循环过程数据交换。应用程序可以是内核模块,也可以是通过库(EtherCAT/RTDM) 调用的用户空间程序。
评论区留言【资料】,即可获得IgH EtherCAT Master官方源码及技术手册的下载方式。
IgH EtherCAT Master 需要运行在实时操作系统上,以保证高实时性。 Preempt-RT 是针对实时性能进行优化的Linux 内核。与普通Linux内核相比,Preempt-RT具有明显的优势:
硬实时保障:具有硬实时能力,可以保证关键任务在严格规定的时限内完成,不受其他任务干扰,满足工业自动化、航空航天等极高时间精度场景的需求。
高效调度与低延迟:采用基于优先级的抢占式调度算法,高优先级任务可以立即抢占低优先级任务;同时,对中断处理机制进行深度优化,大大缩短响应时间,消除系统抖动。
高精度定时:提供微秒级的核心定时器精度,配合实时扩展机制,支持用户定制核心,精确满足EtherCAT通信的周期性数据交换需求。
本测试参考Rockchip RealTime Linux性能测试报告,分为空载测试和压力测试。测试环境如下:
工具:循环测试
硬件平台:OK3576-C开发板
内核版本:6.1.118-rt36
路径:SDK/docs/rk35xx/Patches/Real-Time-Performance/PREEMPT_RT/kernel-6.1/kernel-6.1.118
一个。配置Preempt-RT内核请参考用户资料:/1-Manual/OK35xx-Linux6.1.118-配置实时内核方法.pdf
b.不同硬件平台的实时测试结果请参考用户资料:/1-manual/OK35xx-Linux6.1.118-real-time test.pdf
循环测试-c 0 -m -t 8 -p99 -D12H
参数介绍:
-c 0:选择时钟源为CLOCK_MONOTONIC -m:锁定内存,防止内存页被交换到磁盘-t 8:创建8个测试线程-p 99:设置线程优先级为99 -D 12h:设置测试时长为12h
压力-ng -c8 --io 8 --cpu-load 100 -vm 4 --vm-bytes 512M --超时10000000s
参数介绍:
-c 8:模拟8个CPU逻辑核满载运行--io 8:模拟磁盘I/O压力--cpu-load 100:设置CPU目标负载为100% --vm 4 --vm-bytes 512M:模拟内存压力--timeout 10000000s:设置测试时长为10000000秒
本节演示选择周期同步速度模式(通讯周期为1ms)和周期同步扭矩模式(通讯周期为125s)驱动伺服电机旋转。
开发环境:内核:6.1.118-rt36IgH EtherCAT 主站:IgH EtherCAT 主站1.6.0-rc1EtherCAT 主站:OK3576-CEtherCAT 从站: (1) EtherCAT 耦合器EK1100 (2) 数字量输出模块EL2008 (3) 伺服驱动器IS620NS1R6I+伺服电机MS1H1-10B30CB A330Z
拓扑结构图:
主站通过网线与EtherCAT耦合器EK1100连接。 EK1100通过E-Bus连接数字量输出模块EL2008,通过网线连接伺服驱动器IS620N。交流伺服电机MS1H1-10B30CB通过电源线和编码线与伺服驱动器IS620N连接。
使用EtherCat调试工具输出识别的从站:
使用EtherCat调试工具输出总线拓扑:
IS620N支持7种伺服模式,分别为Profile位置模式(PP)、Profile速度模式(PV)、Profile扭矩模式(PT)、回零模式(HM)、周期同步位置模式(CSP)、周期同步速度模式(CSV)、周期同步扭矩模式(CST)。
不同模式支持不同的通信周期,如下图:
参考以下定义:抖动和延迟的定义
参考官方示例代码:
示例/dc_user/main.c · stable-1.5 · EtherLab/EtherCAT Master · GitLab
有一个通信周期的最大和最小成本的统计。以1s为周期打印该区间内EtherCAT通讯周期时间的最大值和最小值。
周期同步速度模式下,上位控制器周期性同步地将计算出的目标速度60FF发送给伺服驱动器,速度和扭矩调整由伺服内部进行。
基本配置:
使用EtherCat调试工具输出pdo信息:
操作步骤:步骤1:设置模式,OD 6060h=09h,循环同步速度模式。
步骤2:设置目标速度,OD 60FFh=0。由于在速度模式下,一旦切换到Servo On(步骤3),伺服电机就会开始运行,所以设置0是为了保证在Servo On期间保持0rpm而不运行。
步骤3:设置控制命令OD 6040h,请按照以下步骤操作。步骤3.1和3.2是将驱动器的状态机置于就绪状态。
第4步:设置目标速度OD 60FFh。
性能指标: 压力测试(6小时)
压力-c 4 --io 2 --vm 1 --vm-bytes 256M --超时1000000s
./igh_ethercat_motor_csv
隔离测试+隔离芯(6h)
压力-c 4 --io 2 --vm 1 --vm-bytes 256M --超时1000000s
任务集-c 7 ./igh_ethercat_motor_csv
演示二:周期同步转矩模式(125s)该模式下,上位控制器周期性同步将计算出的目标扭矩6071h 发送至伺服驱动器,由伺服内部进行扭矩调整。当速度达到极限值时,进入调速阶段。
基本配置:
使用EtherCat调试工具输出pdo信息:
操作步骤:步骤1:设置模式,OD 6060h=0Ah,周期同步扭矩模式。
步骤2:设置目标扭矩,OD 6071h=0。由于在扭矩模式下,一旦切换到Servo On(步骤3),伺服目标扭矩就会生效,所以先将其设置为0以确保安全。
步骤3:设置控制命令OD 6040h,请按照以下步骤操作。步骤3.1和3.2是将驱动器的状态机置于就绪状态。
第4 步:设置目标扭矩OD 6071h。
性能指标: 压力测试(6小时)
压力-c 4 --io 2 --vm 1 --vm-bytes 256M --超时1000000s
./igh_ethercat_motor_cst
压力测试+隔离核心(6h)
压力-c 4 --io 2 --vm 1 --vm-bytes 256M --超时1000000s
任务集-c 7 ./igh_ethercat_motor_cst
上述测试消除了未及时恢复的数据帧的统计周期样本。当运行125s的周期时,未及时恢复的帧会变得更加频繁。
在两个演示的性能测试中,应用程序都采用了FIFO调度+内存锁定;采用隔离核心策略,可以降低系统的周期抖动。
周期同步速度模式,周期抖动由6.3080s降低为3.5790s。周期同步转矩模式,周期抖动由50.0470s降低为2.1130s。方案展示: