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 主站软件选型决策图 选型约束 控制周期 1ms / 500µs / 250µs 从站规模 I/O点数 / 轴数 实时性要求 硬实时 / 软实时 开发能力 IEC编程 / C开发 平台与授权 Windows / Linux / 嵌入式 主站软件对比 TwinCAT 3 商业集成 · Windows实时内核 / TwinCAT/BSD 抖动典型值 50~100µs · 一体化诊断与DC配置 适用:机床、包装、产线,Beckhoff生态 CODESYS Control 商业集成 · Win/Linux/RTE 多平台运行时 抖动典型值 100~500µs · 跨品牌硬件适配强 适用:多品牌集成、OEM设备、中端控制 SOEM 开源轻量 · C库 · 原始套接字 · 无内核依赖 抖动取决于OS · 需自行实现DC与状态机 适用:嵌入式自研、教学、快速原型 IgH EtherCAT Master 开源内核态 · Linux内核模块 + 网卡驱动 配合PREEMPT_RT/Xenomai 抖动可达 <50µs 适用:数控、机器人、高实时自研系统 实时OS要求 PREEMPT_RT Linux内核抢占补丁 抖动 20~100µs Xenomai 双内核实时扩展 抖动 <20µs Windows RT TwinCAT实时子系统 抖动 50~100µs 裸机/RTOS 无OS调度开销 抖动 <10µs 关键:网卡需支持 DMA与专用驱动

实时操作系统的硬性门槛

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 文件一致。

TwinCAT 与 CODESYS 的部署更偏向图形化:TwinCAT 在 Visual Studio 中安装 EtherCAT 驱动后,通过“Scan Devices”自动识别从站并生成 I/O 映射;CODESYS 需在设备树中添加 EtherCAT Master 节点,再扫描从站并绑定 PDO。两者都应先确认实时网卡已独占,避免与普通以太网共用。
常见误区:在虚拟机或未打实时补丁的通用 Linux 上运行 IgH,虽然能扫描到从站,但周期抖动可能超过 1 ms,表现为从站频繁掉线或 DC 同步丢失。此时应先用 cyclictest 测量最大延迟,再决定是否更换内核或主站方案。

选型建议速查

场景推荐主站实时方案典型周期
机床/产线,Beckhoff生态TwinCAT 3Windows RT / TwinCAT/BSD500 µs ~ 1 ms
多品牌OEM设备CODESYS ControlLinux RTE / PREEMPT_RT1 ms ~ 2 ms
嵌入式自研控制器SOEM裸机 / RTOS1 ms ~ 4 ms
数控/机器人高实时IgH EtherCAT MasterXenomai / PREEMPT_RT250 µs ~ 1 ms

选型的最终判断标准不是“哪个最强”,而是“在目标周期下,最坏情况抖动是否仍小于周期预算的 30%”。建议在部署完成后,用示波器测量 SYNC0 信号或通过 ethercat dc 观察 Diff 值,连续运行 30 分钟无异常,才可认为主站部署达到可用状态。