4. EtherCAT主站软件选型与部署
EtherCAT 系统的性能上限,往往不由从站决定,而由主站软件与实时操作系统的组合决定。主站负责生成过程数据帧、维护分布式时钟、处理邮箱通信与状态机,一旦调度抖动超过周期预算,从站就会报工作计数器错误或同步丢失。因此选型的第一步不是比较功能列表,而是明确三个约束:控制周期(如 1 ms、500 µs 甚至 250 µs)、从站规模(I/O 点数与轴数)、以及是否要求硬实时与冗余。
四类主站软件的本质差异
TwinCAT(Beckhoff)与 CODESYS 属于“商业集成型”主站:它们把 EtherCAT 主站栈嵌入到完整的 PLC 运行时中,提供 IEC 61131-3 编程、在线扫描、拓扑诊断、DC 配置等一体化能力。TwinCAT 3 在 Windows 上通过实时内核扩展(如 32 位/64 位实时子系统)实现确定性调度,配合 TwinCAT/BSD 或 Windows 实时网卡可获得更小抖动;CODESYS 则以 CODESYS Control Win/RTE 或 Linux 运行时为载体,跨硬件平台能力强,适合多品牌设备集成。
SOEM(Simple Open EtherCAT Master)是开源轻量级主站库,用 C 编写,直接操作原始套接字,不依赖实时内核,适合嵌入式 Linux、裸机或自研控制器。它的优势是代码透明、可裁剪、便于二次开发;代价是需自行实现 DC 同步、状态机管理、诊断与冗余逻辑。IgH EtherCAT Master 是 Linux 内核态主站,通过内核模块与 EtherCAT 网卡驱动直接交互,配合 Xenomai 或 PREEMPT_RT 可实现微秒级抖动,常用于数控、机器人等对实时性要求苛刻的场合,但配置与调试门槛较高。
实时操作系统的硬性门槛
EtherCAT 主站的实时性由“操作系统调度抖动 + 网卡驱动延迟 + 主站栈处理时间”共同决定。以 1 ms 周期为例,若抖动达到 300 µs,留给应用逻辑与从站响应的时间仅剩约 700 µs,轴同步误差会明显放大。因此:
- PREEMPT_RT:在标准 Linux 上打实时抢占补丁,将大部分内核临界区变为可抢占,配合 CPU 隔离(isolcpus)与中断亲和性设置,抖动可稳定在 20~100 µs,是 IgH 主站最常见的搭配。
- Xenomai:采用双内核架构,实时任务运行在独立微内核上,Linux 作为低优先级域运行,抖动可低于 20 µs,适合 250 µs 级周期,但驱动适配与调试复杂度更高。
- Windows 实时扩展:TwinCAT 通过实时网卡驱动与子系统隔离实现确定性,需在 BIOS 中关闭 C-State、SpeedStep,并避免共享中断。
- 网卡选择:优先使用 Intel I210/I211、Realtek 8169 等有成熟 EtherCAT 驱动的芯片;禁用节能以太网(EEE)与中断合并,否则会引入毫秒级突发延迟。
主站安装与配置流程(以 IgH + PREEMPT_RT 为例)
以下流程给出可复现的关键操作与判断依据,参数为教学示例,实际需按硬件调整。
# 1. 确认内核已启用 PREEMPT_RT
uname -a
# 输出应包含 PREEMPT_RT,例如 5.15.0-rt
# 2. 获取并编译 IgH EtherCAT Master
git clone https://gitlab.com/etherlab.org/ethercat.git
cd ethercat
./bootstrap
./configure --prefix=/opt/etherlab \
--with-linux-dir=/usr/src/linux-headers-5.15.0-rt \
--enable-generic --disable-8139too
make && sudo make install
# 3. 生成主站配置
sudo cp /opt/etherlab/etc/sysconfig/ethercat /etc/sysconfig/ethercat
# 编辑 /etc/sysconfig/ethercat:
# MASTER0_DEVICE="00:1b:21:3c:4d:5e" # 主站网卡MAC
# DEVICE_MODULES="generic"
# 4. 加载模块并启动
sudo depmod
sudo modprobe ec_master
sudo /etc/init.d/ethercat start
# 5. 扫描从站
ethercat slaves
# 期望输出:0 0:0 PREOP + EK1100 Coupler
# 1 0:1 PREOP + EL1008 8Ch. Dig. Input
# 2 0:2 PREOP + EL2008 8Ch. Dig. Output
# 6. 查看DC同步状态
ethercat dc
# 关注 "Diff" 列,正常应小于 100 ns
配置完成后,用 ethercat master 查看主站状态,确认 Link 为 UP、Frames sent/received 持续增长。若 ethercat slaves 显示 INIT 或 ERROR,先检查网线是否接在正确的网口、从站供电是否正常,再用 ethercat pdos 确认 PDO 映射是否与 ESI 文件一致。
cyclictest 测量最大延迟,再决定是否更换内核或主站方案。选型建议速查
| 场景 | 推荐主站 | 实时方案 | 典型周期 |
|---|---|---|---|
| 机床/产线,Beckhoff生态 | TwinCAT 3 | Windows RT / TwinCAT/BSD | 500 µs ~ 1 ms |
| 多品牌OEM设备 | CODESYS Control | Linux RTE / PREEMPT_RT | 1 ms ~ 2 ms |
| 嵌入式自研控制器 | SOEM | 裸机 / RTOS | 1 ms ~ 4 ms |
| 数控/机器人高实时 | IgH EtherCAT Master | Xenomai / PREEMPT_RT | 250 µs ~ 1 ms |
选型的最终判断标准不是“哪个最强”,而是“在目标周期下,最坏情况抖动是否仍小于周期预算的 30%”。建议在部署完成后,用示波器测量 SYNC0 信号或通过 ethercat dc 观察 Diff 值,连续运行 30 分钟无异常,才可认为主站部署达到可用状态。