EtherCAT 与 CANopen/CiA 402 伺服控制入门:从 CoE、SDO/PDO 到状态机
在 EtherCAT 伺服系统中,经常会同时遇到 EtherCAT、CoE、CANopen、CiA 402、SDO、PDO、SoE 和 IgH 等名词。它们并不处于同一层:EtherCAT 负责实时以太网通信,CoE 把 CANopen 的通信机制和对象字典带到 EtherCAT 上,CiA 402 则规定驱动器应该如何被控制。
本文从协议分层出发,梳理 EtherCAT 伺服控制的完整链路,并说明驱动器从上电到进入运行状态的基本过程。
一、先看整体关系
一条典型的 EtherCAT 伺服控制链路可以概括为:
1 | 应用程序 / 运动控制算法 |
需要注意:CoE 并不是把完整的 CAN 报文直接封装进 Ethernet。它复用了 CANopen 的对象字典、SDO、PDO 和设备规范,但底层数据传输由 EtherCAT 完成,因此不再受经典 CAN 单帧 8 字节以及 CAN 总线带宽的限制。
二、EtherCAT、CANopen 与 CiA 规范
1. EtherCAT
EtherCAT 是面向工业实时控制的以太网技术。主站发送的帧经过各个从站时,从站会在帧通过过程中读取属于自己的输出数据,同时写入输入数据。这种“边经过、边处理”的机制减少了逐站收发完整报文带来的延迟。
IgH EtherCAT Master 是 Linux 上常见的开源 EtherCAT 主站实现。应用程序通常通过主站 API 完成从站扫描、PDO 配置、Domain 注册、周期数据交换和状态监控。
2. CANopen 与对象字典
CANopen 建立在对象字典(Object Dictionary,OD)之上。设备的配置参数、控制命令和运行状态都以“索引 + 子索引”的方式组织。例如 CiA 402 驱动器中最常见的对象包括:
| 索引 | 对象 | 作用 |
|---|---|---|
0x6040 |
Controlword | 控制驱动器状态切换 |
0x6041 |
Statusword | 反馈驱动器当前状态 |
0x6060 |
Modes of operation | 设置运行模式 |
0x6061 |
Modes of operation display | 反馈当前运行模式 |
0x607A |
Target position | 目标位置 |
0x60FF |
Target velocity | 目标速度 |
0x6071 |
Target torque | 目标转矩 |
CAN in Automation(CiA)制定了多种 CANopen 规范:
- CiA 301:CANopen 应用层和通信规范,是 CANopen 的基础。
- CiA 401:通用 I/O 模块设备规范。
- CiA 402:驱动器与运动控制设备规范,定义状态机、运行模式及相关对象字典条目。
3. CoE
CoE(CANopen over EtherCAT)使 EtherCAT 设备能够继续使用成熟的 CANopen 上层模型。对于运动控制系统,常见组合是:
1 | EtherCAT + CoE + CiA 402 |
也就是说,底层总线换成了 EtherCAT,而驱动器的对象字典、SDO/PDO 访问方式以及 CiA 402 状态机仍然保留。
三、SDO 与 PDO:配置通道和实时通道
SDO 和 PDO 的用途不同,可以简单理解为:SDO 用来配置,PDO 用来跑周期控制。
| 对比项 | SDO | PDO |
|---|---|---|
| 全称 | Service Data Object | Process Data Object |
| 通信模型 | 客户端—服务器,请求—响应 | 生产者—消费者 |
| 确认机制 | 有响应,可检测超时或错误 | 通常无逐帧确认 |
| 实时性 | 较低 | 高 |
| 数据传输 | 支持快速、分段或块传输 | 传输预先映射的过程数据 |
| 典型用途 | 参数读写、PDO 映射、初始化配置 | 控制字、目标值、状态字、实际值 |
1. SDO:访问对象字典
SDO 适合在初始化或维护阶段使用,例如:
- 设置驱动器运行模式;
- 配置 PDO 映射关系;
- 设置限位、加速度和控制增益;
- 读取设备信息和故障码;
- 下发不要求固定周期完成的参数。
SDO 采用请求—响应方式,主站需要等待从站应答。一次访问失败时,还可以根据超时或 Abort Code 进行诊断。大数据可使用分段传输或块传输,但它不适合放在高频控制环中反复调用。
2. PDO:交换过程数据
PDO 用于周期性的实时数据交换。主站会在启动前确定 PDO 映射,把对象字典中的条目放入过程数据区。例如:
1 | RxPDO(主站 → 驱动器):控制字、运行模式、目标位置 |
这里的 Rx/Tx 是站在从站角度命名的:从站接收的是 RxPDO,从站发送的是 TxPDO。
在 IgH 主站中,应用程序会把 PDO 条目注册到 Domain,并取得每个条目在过程数据内存中的偏移量。实时线程按固定周期读写这些偏移位置,主站再统一收发 EtherCAT 帧。所谓“实时内核与线程绑定”,通常还包括使用实时调度策略、锁定内存、设置 CPU 亲和性并减少调度抖动,而不只是完成 PDO 映射。
四、EtherCAT 从站状态与 CiA 402 状态机
实际调试时有两套状态机需要区分:
1. EtherCAT 状态机
EtherCAT 从站一般依次经历:
1 | INIT → PRE-OP → SAFE-OP → OP |
- INIT:初始化通信控制器,过程数据通信尚未建立。
- PRE-OP:邮箱通信可用,可以使用 SDO 完成参数和 PDO 配置。
- SAFE-OP:输入过程数据已经可用,输出保持在安全状态。
- OP:输入、输出过程数据均正常交换。
从站进入 EtherCAT 的 OP 状态,只代表总线过程数据通信已经就绪,并不等于伺服电机已经使能。
2. CiA 402 驱动器状态机
在 EtherCAT OP 之后,还需要通过 0x6040 控制字推动 CiA 402 状态机。典型使能流程如下:
| 目标状态 | 常用控制字 | Statusword 典型判定值(掩码后) |
|---|---|---|
| Switch on disabled | — | 0x0040 |
| Ready to switch on | 0x0006(Shutdown) |
0x0021 |
| Switched on | 0x0007(Switch on) |
0x0023 |
| Operation enabled | 0x000F(Enable operation) |
0x0027 |
状态字中还包含电压、警告、目标到达以及厂商自定义等其他位,所以实际读数可能是 0x0231、0x0233、0x0237 等。程序不应该只比较整个 16 位数值,而应根据 CiA 402 定义使用掩码判断关键状态位。
一个简化的启动控制逻辑如下:
1 | 开始 |
工程中还必须处理 Quick stop、Disable voltage、Fault reaction active 和 Fault 等分支。发生故障时,应先读取错误码并消除故障原因,再执行故障复位,不能无条件反复复位。
五、位置、速度和转矩控制模式
CiA 402 常见运行模式可以分为两类。
1. Profile 模式
- PP(Profile Position):轮廓位置模式;
- PV(Profile Velocity):轮廓速度模式;
- PT(Profile Torque):轮廓转矩模式,具体支持情况取决于驱动器。
在 Profile 模式中,主站给出目标值及速度、加速度等参数,轨迹主要由驱动器内部规划。它对主站控制周期的严格程度相对较低。
2. Cyclic Synchronous 模式
- CSP(Cyclic Synchronous Position):周期同步位置模式;
- CSV(Cyclic Synchronous Velocity):周期同步速度模式;
- CST(Cyclic Synchronous Torque):周期同步转矩模式。
在同步模式下,主站每个控制周期都通过 PDO 更新目标值,轨迹规划通常由主站完成。为了保证多个轴在同一时间基准下运行,系统常使用 EtherCAT Distributed Clocks(DC)进行时钟同步。
典型周期任务包括:
- 接收 EtherCAT 帧并处理 Domain;
- 读取状态字和实际位置等反馈;
- 运行轨迹规划或控制算法;
- 写入控制字和新的目标值;
- 对齐 DC 时钟并发送下一周期数据。
控制周期越短,对实时线程、网卡、CPU 调度和时钟同步的要求越高。周期本身并非越短越好,应结合驱动器能力和控制目标选择。
六、SoE、FoE 与 EoE
EtherCAT 除了 CoE,还定义了多种邮箱协议:
- SoE(Servo over EtherCAT):面向伺服驱动的实时参数与控制协议,基于 SERCOS 的驱动器配置模型。它与“CoE + CiA 402”是两种不同的应用层方案,具体使用哪一种取决于驱动器支持。
- FoE(File access over EtherCAT):用于在 EtherCAT 网络中传输文件,常见于固件或配置文件下载。
- EoE(Ethernet over EtherCAT):在 EtherCAT 邮箱中传输普通以太网帧,使设备能够承载 IP 等以太网通信。
因此,看到一台 EtherCAT 伺服驱动器时,首先要从 ESI 文件和厂商手册确认它支持 CoE、SoE 还是其他协议,不能仅凭“EtherCAT 伺服”就假定其一定使用 CiA 402。
七、一次完整的工程配置流程
把上面的概念串起来,基于 IgH 与 CoE/CiA 402 的系统通常按以下顺序启动:
- 初始化 EtherCAT 主站并申请 Master;
- 扫描从站,核对 Vendor ID、Product Code 和拓扑;
- 根据 ESI/手册配置 Sync Manager 与 PDO 映射;
- 将 PDO 条目注册到 Domain,记录过程数据偏移量;
- 通过 SDO 写入必要的初始化参数;
- 激活主站并启动实时周期线程;
- 等待 EtherCAT 从站进入 OP;
- 通过控制字推进 CiA 402 状态机,直到 Operation enabled;
- 在每个周期中通过 PDO 下发目标值、读取反馈;
- 持续监测工作计数器、链路状态、状态字和故障码,并在停机时执行安全的状态切换。
总结
EtherCAT 伺服控制可以用三层关系来记忆:
- EtherCAT 解决高速、确定性的总线传输;
- CoE 的 SDO/PDO 与对象字典 解决参数配置和过程数据交换;
- CiA 402 解决驱动器如何使能、如何运行以及如何处理故障。
调试时也应按层排查:先确认 EtherCAT 链路与从站状态,再确认 PDO 映射和工作计数器,最后检查 CiA 402 状态机、运行模式与目标值。把总线状态和驱动器状态分开观察,通常能更快定位问题。
八、相关开源工具推荐
在实际调试 EtherCAT 从站、观察 CiA 402 状态机或对比主站抖动时,欢迎参考配套开源工程:
- 🔍 EtherCAT_CiA402_Monitor:基于 SOEM + Qt 6 的通用 EtherCAT CiA402 状态诊断器,支持从站标准字典只读在线监控与周期扫描。
- 📈 motor_jitter_viewer:跨主站(EC-Master / SOEM / IgH)电机位置跟踪曲线与通信周期抖动多维度对比分析与可视化工具。
INTERACTION / 讨论与互动
评论与表情点赞