← 返回文章列表
TECH NOTE

EtherCAT 与 CANopen/CiA 402 伺服控制入门:从 CoE、SDO/PDO 到状态机

约 10 分钟阅读 4558 字 # EtherCAT# CANopen# CiA 402# 伺服控制

在 EtherCAT 伺服系统中,经常会同时遇到 EtherCAT、CoE、CANopen、CiA 402、SDO、PDO、SoE 和 IgH 等名词。它们并不处于同一层:EtherCAT 负责实时以太网通信,CoE 把 CANopen 的通信机制和对象字典带到 EtherCAT 上,CiA 402 则规定驱动器应该如何被控制。

本文从协议分层出发,梳理 EtherCAT 伺服控制的完整链路,并说明驱动器从上电到进入运行状态的基本过程。

一、先看整体关系

一条典型的 EtherCAT 伺服控制链路可以概括为:

1
2
3
4
5
6
7
8
9
10
11
12
13
应用程序 / 运动控制算法
↓
CiA 402 驱动器与运动控制设备规范
↓
CoE(CANopen over EtherCAT)
├── SDO:配置参数、访问对象字典
└── PDO:周期性交换实时过程数据
↓
EtherCAT 主站(例如 IgH EtherCAT Master)
↓
以太网控制器 / PHY
↓
EtherCAT 从站(伺服驱动器、I/O 模块等)

需要注意: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
2
RxPDO(主站 → 驱动器):控制字、运行模式、目标位置
TxPDO(驱动器 → 主站):状态字、实际位置、实际速度

这里的 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
2
3
4
5
6
7
8
9
10
11
12
13
开始
↓
完成 EtherCAT 和 PDO 初始化
↓
检查故障 ── 有故障 → 发送 Fault reset(控制字 bit 7)
↓ 无故障
发送 0x0006,等待 Ready to switch on
↓
发送 0x0007,等待 Switched on
↓
发送 0x000F,等待 Operation enabled
↓
按控制周期更新目标值并检查状态

工程中还必须处理 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)进行时钟同步。

典型周期任务包括:

  1. 接收 EtherCAT 帧并处理 Domain;
  2. 读取状态字和实际位置等反馈;
  3. 运行轨迹规划或控制算法;
  4. 写入控制字和新的目标值;
  5. 对齐 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 的系统通常按以下顺序启动:

  1. 初始化 EtherCAT 主站并申请 Master;
  2. 扫描从站,核对 Vendor ID、Product Code 和拓扑;
  3. 根据 ESI/手册配置 Sync Manager 与 PDO 映射;
  4. 将 PDO 条目注册到 Domain,记录过程数据偏移量;
  5. 通过 SDO 写入必要的初始化参数;
  6. 激活主站并启动实时周期线程;
  7. 等待 EtherCAT 从站进入 OP;
  8. 通过控制字推进 CiA 402 状态机,直到 Operation enabled;
  9. 在每个周期中通过 PDO 下发目标值、读取反馈;
  10. 持续监测工作计数器、链路状态、状态字和故障码,并在停机时执行安全的状态切换。

总结

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 / 讨论与互动

评论与表情点赞