OpenPLC 下为什么选用了 SOEM 作为 EtherCAT 主站驱动
OpenPLC V4 新增了原生 EtherCAT master——一个 native 插件 libethercat_plugin.so,底层依托 SOEM 子模块(笔者的 LuckFox 部署已实测 SOEM 编入)。为什么是 SOEM,而不是 IgH 或商业栈?答案不是”哪个许可最漂亮”,而是”哪个和 V4 的架构最同构”。
图:V4 是 headless 用户态运行时,SOEM 也是用户态 .so,天然同构;IgH 走内核模块故未选。
一、先定位:SOEM 是什么
- SOEM(Simple Open EtherCAT Master),仓库
github.com/OpenEtherCATsociety/SOEM,由 rt-labs / OpenEtherCATsociety 维护。 - 纯用户态 C 库,几千行,靠 raw socket / L2 帧直接收发以太网帧,不走标准 TCP/IP 栈。
OSAL(操作系统抽象)/OSHW(硬件抽象)两层,让它能跑到 Linux / Windows / RTOS / 甚至裸机。
二、架构同构:用户态对用户态(头号原因)
OpenPLC V4 运行时本身是一个 headless 用户态进程(Python/C++,经 plugins.conf 动态加载 .so 插件)。SOEM 作为用户态库,正好以 native .so 加载,不需要内核模块、不需要给网卡打实时补丁。
对照 IgH EtherCAT Master(EtherLab):它是 Linux 内核模块路线——要编 ec_master.ko + 适配网卡驱动(ec_igb 等),且内核部分 GPLv2 与 V4 的 MIT 用户态运行时定位冲突、部署复杂、跨平台差(仅 Linux)。对一个”MIT、headless、多平台”的运行时来说,IgH 的模型是错配。
结论:SOEM 的”用户态 + 插件 .so”与 V4 的架构天然同构,这是选型的头号原因。
三、跨平台:OpenPLC 要跑很多地方
OpenPLC 支持 Windows / macOS / Linux / Raspberry Pi / Arduino。SOEM 是用户态、只要求”能收发以太网帧”,几乎任何平台都能跑;更关键的是——Windows 上 SOEM 是唯一的开放源码 EtherCAT 主站选项(IgH 仅 Linux)。这与 OpenPLC 的多平台诉求一致。
四、与插件模型契合
- EtherCAT 作为独立 native 插件(
libethercat_plugin.so)经plugins.conf加载,默认禁用(与系列 协议栈篇 一致)。 - IEC 地址空间通过 ESI / ENI 映射到
%IX/%QX/%IW/%QW,与 Modbus / OPC UA 插件同构;Editor 的 Bus 标签页扫描从站、匹配 ESI。 - CoE / SoE / FoE、分布式时钟 DC、线缆冗余 SOEM 都支持。
五、生态与成熟度
SOEM 在机器人、研究领域被广泛验证,rt-labs 持续维护;SOEM 2.0(2025-07)做了现代化、加入 ENI 解析、多平台样例,稳定性与可配置性进一步提升。对一个需要”开箱即用的 EtherCAT 主站”的运行时,生态成熟度是硬指标。
六、许可边界(务必核查,别想当然)
这里最容易写错,单独说清:
- SOEM v1.x:GPLv2 + 链接例外(明确允许链入专有作品)。
- SOEM v2.0:改为双许可 GPLv3 或 RT-Labs 商业许可,链接例外已移除。
- OpenPLC 以独立 native 插件 .so 动态加载 SOEM,把 EtherCAT 功能与 MIT 运行时解耦到不同模块;但是否触发 GPLv3 传染,取决于具体 SOEM 版本与链接方式,商业分发前必须核对所用版本与许可条款。
- 此外,任何 EtherCAT 主站实现都需签署 ETG 的 EtherCAT Master License(免费兼容性协议,非版税)。
- 商业替代:acontis EC-Master(native
.so/.dll、生产级实时网卡驱动,已在 OpenPLC 上提供)。要确定性极限、或不愿碰 GPL 时可选。
七、确定性的代价(呼应 实时性篇)
用户态 SOEM 的实时性依赖宿主机调度:标准 Linux 下抖动约 ±200–300μs;配 PREEMPT_RT + 隔离核可压到几十 μs。微秒级硬实时 / 多轴伺服闭环,要么把关键回路留在边缘硬实时,要么上商业栈。
八、小结
SOEM 被选中的本质是**“架构契合优先于许可漂亮”**:用户态、跨平台、插件化、生态成熟,让它成为 V4 这种 MIT、headless、多平台运行时的自然搭档。代价是实时性要靠宿主机补(实时性篇),许可边界要商用前自查。
→ 收束到产业视角:Edge Control 下的机遇与挑战。
配套代码与参考仓库
- OpenPLC Runtime v4(Autonomy-Logic,MIT):https://github.com/Autonomy-Logic/openplc-runtime
- OpenPLC Editor v4(Autonomy-Logic,GPL-3.0):https://github.com/Autonomy-Logic/openplc-editor
- 本系列配套示例(Docker Compose / 启保停 ST / GPIO 接线 / AI agent):https://gitcode.com/linjian19901122/openplc-v4-samples
- SOEM 仓库:https://github.com/OpenEtherCATsociety/SOEM | IgH(EtherLab):https://github.com/etherlabmaster/ethercat
系列导航 · 双向链接(OpenPLC V4 系列 · 共 12 篇)
- ① 定位:从教学玩具到工业级 vPLC
- ② 协议栈变迁
- ③ 实战入门:Docker + 启保停
- ④ 树莓派 GPIO 与隔离
- ⑤ 编译器管线:MatIEC → STruC++
- ⑥ 安全设计:TLS/JWT/8443
- ⑦ 插件系统实战
- ⑧ AI 增强 PLC(预测性维护)
- ⑨ vPLC 与 Autonomy Edge
- ⑩ 实时性 vPLC:实验室→车间
- ⑪ 为什么选 SOEM(EtherCAT 主站)
- ⑫ Edge Control 机遇与挑战
本系列当前均为草稿(
draft: true)。建议发布序:① → ③ → ② → ④ → ⑧ 打头,⑩⑪⑫ 作深度延展按读者反馈穿插。