SOEM 与 IgH — 两大主流开源 EtherCAT 主站技术
背景
EtherCAT 是德国倍福(Beckhoff)推出的实时工业以太网协议,核心特点是"飞读飞写"——主站发出一个数据帧,依次穿过所有从站,每个从站在帧经过的瞬间就地提取自己的指令、塞入自己的反馈,单节点处理 < 1μs,连100个伺服轴也只需约100μs刷新一轮。
主站 = 运行在控制器上的软件,负责发起所有通信。开源世界里最成熟的两条路线就是 SOEM 和 IgH。
一、SOEM(Simple Open EtherCAT Master)
一句话定位:轻量、纯用户态、极易移植的 C 语言 EtherCAT 主站库
出身: 最初由瑞典 rt-labs 维护,现由 OpenEtherCATsociety 在 GitHub 托管
核心特征:
-
纯用户态库(User-space Library),用 纯 C 编写,代码量约几千行,非常易读
-
通过 raw socket / L2 帧(如
AF_PACKET)直接收发以太网帧,不走标准 TCP/IP 栈 -
分层架构清晰:
-
OSAL(操作系统抽象层)→ 屏蔽 OS 差异
-
OSHW(硬件抽象层)→ 屏蔽网卡驱动差异
-
只需重新实现这两个抽象层,就能移植到新平台
-
-
官方支持的功能:PDO 周期性通信、SDO 读写、从站状态机管理(Init→PreOp→SafeOp→Op)、CoE/SoE/FoE、分布式时钟 DC、双网口线缆冗余
许可证: Modified BSD(非常宽松,可闭源商用)
优势:
-
✅ 移植性极强——Linux / Windows / RTOS(FreeRTOS、Zephyr)/ 甚至裸机都能跑
-
✅ 集成简单——就像链接一个普通
.a/.so库,不需要碰内核 -
✅ 上手快——API 简洁,适合快速原型、学术研究、中小型设备
局限:
-
⚠️ 运行在用户态,实时性受制于 OS 调度。在标准 Linux(无实时补丁)下 1ms 周期抖动可能达 ±200~300μs
-
⚠️ 高级功能(复杂 DC 主站管理、热插拔拓扑变更等)要么不支持要么需要自己扩展
-
⚠️ 社区相对小,文档偏精简
二、IgH EtherCAT Master(EtherLab)
一句话定位:Linux 内核态的工业级"重型"开源主站,硬实时标杆
出身: 来自德国 TU Darmstadt / EtherLab 项目,IgH 公司维护,历史超过 15 年,是 Linux 平台上最成熟的开源 EtherCAT 主站实现
核心架构(三层):
| 层级 | 角色 |
|---|---|
| Master Module(内核模块) | "大脑"——管理总线、状态机、DC 同步、域/Domain 的 PDO 过程数据交换 |
| Device Modules(优化网卡驱动) | 实时网卡驱动层(如 ec_igb、ec_e1000e),直接操作 DMA/寄存器收发 EtherCAT 帧,绕过内核网络栈 |
| Application / 用户态工具 | 业务逻辑通过 libethercat 库或 ioctl 字符设备 /dev/EtherCATx 与内核主站通信;自带 ethercat CLI 命令行工具 |
核心特征:
-
内核模块架构 → 最高权限、最短路径、最低延迟
-
支持 RTAI / Xenomai / PREEMPT_RT 等实时环境
-
功能极为完整:CoE(含 CiA402)、SoE、FoE、EoE(虚拟网卡)、SDO 信息服务、动态 PDO 配置、DC 分布式时钟(精度可达 ±25ns 级配 PTP 网卡)、热插拔/拓扑变更自动重配、多域不同采样率、总线监控
-
带
ethercat命令行的完整诊断能力(ethercat slaves、ethercat domains、ethercat cstruct…)
许可证: GPL v2(内核部分)——意味着如果你的产品静态链接/集成方式触发 GPL 传染条款,需要注意合规(很多公司通过用户态 API 间接调用规避)
优势:
-
✅ 硬实时标杆——最小稳定周期可做到 62.5μs(Xenomai + igb 优化),抖动可压到 2~3μs 级别
-
✅ 工业级稳定性,广泛用于机器人、CNC、多轴伺服产线
-
✅ 对 Beckhoff/Kollmorgen/汇川等主流从站的兼容性最好
局限:
-
⚠️ 部署复杂——需要编译内核模块 + 适配网卡驱动,对内核版本有依赖
-
⚠️ 跨平台差——绑死 Linux,不便于迁移到裸机或纯 RTOS
-
⚠️ 调试门槛高(内核态 oops 比用户态 crash 难受得多)
三、核心对比一览
| 维度 | SOEM | IgH EtherCAT Master |
|---|---|---|
| 运行层级 | 用户态库 | 内核模块 + 用户态工具 |
| 实时性 | 中~高(取决于 RT 补丁 + busy poll) | 极高(内核直操网卡 DMA) |
| 典型抖动 | 标准 Linux: ±200~300μs;RT-Patch: 可改善 | 可压到 个位数 μs 级 |
| 移植性 | ⭐⭐⭐⭐⭐ 裸机/RTOS/Win/Linux 通吃 | ⭐⭐ Linux only,依赖特定网卡驱动 |
| 功能完整度 | 基础 PDO/SDO/CoE + 简单 DC | 全功能:DC、热插拔、多域、EoE、FoE、SoE… |
| 部署难度 | 很低(链接库即可) | 高(内核模块 + 驱动 + 实时内核) |
| 许可证 | BSD(商用友好) | GPL v2(需注意传染性) |
| 生态工具 | 基本靠自己写 / 看源码 | 自带 ethercat CLI + 文档体系完善 |
| 最适合 | 嵌入式、IO 采集、快速验证、成本敏感、多平台 | 工业机器人、多轴伺服、高速包装机、硬实时产线 |
四、怎么选?
选 SOEM 当:
-
你在做 MCU/嵌入式裸机或轻量 RTOS 方案(IgH 根本跑不了)
-
控制周期在 ≥2ms 够用(如分布式 IO、简单阀组、传感器采集)
-
团队不想碰内核,想 快速出活、降低维护成本
-
商业授权敏感——BSD 许可省心
选 IgH 当:
-
你是 多轴伺服 / 机器人关节 控制,要求 1ms 甚至 sub-ms 周期 + 极低抖动
-
跑在 Linux + PREEMPT_RT(或 Xenomai) 上,可以接受内核模块部署流程
-
你需要 DC 同步精度 + 热插拔 + 完善的从站生态兼容
-
产品的长期稳定性和诊断工具体系是硬要求
实际工业项目中还有一种组合思路:早期原型用 SOEM 快速打通通信,量产阶段切到 IgH(或商业方案如 acontis EC-Master)满足硬实时和认证需求。
如果你告诉我:你的平台(树莓派/x86/某款 ARM?)、目标周期(1ms / 500μs / 2ms?)、从站类型(伺服还是 IO?多少个轴?)、是否需要 DC 同步——我可以帮你更精确地给选型结论和大致的搭建路径。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)