3. 测试环境搭建:硬件选型与软件栈配置
做实时性能测试,说白了就是搭一个能让你「看得见」系统极限的台子。硬件选错了,软件配歪了,后面测出来的数据全是废的。我这些年踩过的坑,十有八九都出在这一步。
3.1 硬件选型:工控机、运动控制卡、伺服驱动器
硬件选型有个核心原则:瓶颈不能出在你选的设备上。你想想看,如果工控机CPU跑满了,你测出来的抖动到底是EtherCAT的问题,还是CPU调度的问题?
3.1.1 工控机
我个人习惯,工控机优先看三点:CPU单核性能、内存延迟、PCIe通道数。
- CPU:别只看核心数。实时系统里,单核性能比多核重要得多。我建议选Intel Core i5以上,主频2.5GHz起步。AMD的Ryzen也可以,但要注意BIOS里把C-State和Turbo Boost关掉——嗯,这个坑我后面会细说。
- 内存:DDR4 3200MHz以上,双通道。容量16GB够用,但延迟比容量重要。我在项目中遇到过,换了低延迟内存条,EtherCAT周期抖动直接降了30%。
- PCIe:运动控制卡通常走PCIe x4或x1。确保主板有足够的直连CPU的PCIe通道,别走芯片组转接——那会增加延迟。
3.1.2 运动控制卡
运动控制卡是实时系统的「心脏」。选型时我主要看三个指标:
| 指标 | 要求 | 说明 |
|---|---|---|
| EtherCAT从站数量 | ≥实际轴数+20%余量 | 别卡着上限选,扩展时你会哭 |
| 最小周期 | ≤250μs | 做高性能测试,125μs是标配 |
| 抖动 | ≤1μs(典型值) | 看数据手册里的实测值,别信理论值 |
市面上主流的卡,像Beckhoff的CX系列、Acontis的PC卡、或者国产的固高、雷赛,我都用过。说实话,硬件层面差距不大,真正拉开差距的是驱动和API的设计。我建议选那种提供RTOS原生驱动的卡,别用Windows下的通用驱动——实时性差一个数量级。
3.1.3 伺服驱动器
伺服驱动器这块,我踩过最大的坑是「协议兼容性」。你想想看,EtherCAT主站和从站之间,如果CiA402协议实现不一致,位置模式切速度模式时可能直接报错。
- 协议支持:必须支持CiA402标准。我建议选支持至少三种回零方式的驱动器,方便测试不同场景。
- 反馈分辨率:编码器分辨率至少23位(8388608线)。做高精度测试时,分辨率不够会掩盖真实抖动。
- 电流环带宽:≥2kHz。这个指标决定了驱动器对位置指令的响应速度,直接影响实时性能测试的上限。
3.2 软件栈配置:RTOS与EtherCAT主站
硬件选好了,接下来就是软件。这部分我花的时间比硬件多一倍。为什么?因为硬件选错了可以退,软件配错了,你连问题出在哪都找不到。
3.2.1 RTOS选型与配置
实时操作系统,说白了就是给CPU装一个「准时器」。我常用的RTOS有这几个:
- INtime:老牌RTOS,和Windows共存,适合从Windows过渡过来的团队。我早期项目用过,稳定但生态偏封闭。
- RT-Linux:开源,社区活跃。我现在的项目基本都用它。配置灵活,但需要自己调内核参数。
- QNX:安全性高,汽车和医疗领域用得多。性能测试场景下,它的确定性是最好的,但授权费用贵。
配置RTOS时,有几个关键点:
- 关掉所有不必要的服务:比如网络管理、电源管理、图形界面。我见过有人开着桌面环境跑实时测试,结果周期抖动超过100μs——这哪是实时系统,分明是幻灯片。
- 隔离CPU核心:把EtherCAT主站进程绑定到独立的核心上,用isolcpus内核参数。我一般留一个核心给EtherCAT,其他核心跑应用。
- 设置实时优先级:EtherCAT主站线程的优先级要设成最高(比如SCHED_FIFO,优先级99)。但注意,别把系统关键线程也设成99,否则死锁时你连kill都杀不掉。
核心配置示例(RT-Linux):
# 内核启动参数
isolcpus=1 nohz_full=1 rcu_nocbs=1
# 设置实时优先级
chrt -f 99 ./ethercat_master
# 关掉中断负载均衡
echo 1 > /proc/irq/default_smp_affinity
3.2.2 EtherCAT主站配置
EtherCAT主站,我推荐用开源方案。为什么?因为你能看到源码,出了问题能自己查。商业主站虽然稳定,但遇到性能瓶颈时,你只能等厂商修bug。
常用的开源主站:
- IgH EtherCAT Master:Linux下最成熟的开源主站。我用了五年,社区支持好,文档全。
- SOEM:轻量级,适合嵌入式场景。但功能不如IgH全,做复杂测试时可能不够用。
配置主站时,有几个参数直接影响实时性能:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 周期时间 | 125μs / 250μs | 根据轴数和数据量调整 |
| DC模式 | 启用 | 分布式时钟同步,必须开 |
| 帧大小 | 自动计算 | 别手动设,让主站自己算 |
| 超时时间 | 3倍周期 | 太短容易误报,太长掩盖问题 |
ethercat master命令查看状态。如果看到"DC synchronized"字样,说明时钟同步成功了。如果显示"no DC",赶紧检查从站配置——我曾经因为一根网线没插紧,查了整整两天。
3.3 整体架构图
下面这张图,是我做实时性能测试时的标准架构。你照着搭,基本不会出大问题。
这张图里,工控机跑RTOS和EtherCAT主站,通过PCIe连接运动控制卡,控制卡再通过EtherCAT总线连伺服驱动器。测试工具从主站采集数据,分析周期抖动和同步误差。嗯,这个架构我用了很多年,基本没出过问题。
3.4 验证环境是否搭好
硬件软件都配完了,怎么知道环境搭好了?我一般做三步验证:
- EtherCAT通信测试:用
ethercat slaves命令,看所有从站是否都在线。如果有一个不在,先查网线,再查从站配置。 - DC同步测试:用
ethercat master看DC状态。如果显示"DC synchronized",说明时钟同步成功。如果显示"no DC",检查从站的DC配置。 - 空载抖动测试:让所有轴空转,用示波器或软件记录周期抖动。抖动在±1μs以内,说明环境合格。如果超过±5μs,回头检查RTOS配置和中断绑定。
环境搭好了,后面测出来的数据才有意义。别急着跑测试,先把基础打牢。你想想看,如果连环境都没验证过,你怎么知道测出来的抖动是系统的,还是环境本身的?