EtherCAT
EtherCAT 协议详解
一、概述
1.1 什么是 EtherCAT
EtherCAT(Ethernet for Control Automation Technology,以太网控制自动化技术)是一种实时工业以太网技术,由德国 Beckhoff(倍福) 于 2003 年推出,现由 ETG(EtherCAT Technology Group,EtherCAT 技术组织) 负责维护。
它解决了传统现场总线(如 RS-485、CAN、PROFIBUS)速率低、实时性差,以及标准以太网在硬实时控制场景下延迟/抖动过大的问题,是当前工业自动化领域应用最广的实时以太网方案之一。
它不是像普通以太网那样把帧发给一台设备,而是让一帧穿过所有设备,每台设备在帧经过时顺便读写自己的数据(Processing on the Fly,飞梭式处理),一帧就能完成整个网络的数据交换。
1.2 为什么需要 EtherCAT
痛点一:传统现场总线太慢太笨
| 总线 | 主要局限 |
|---|---|
| RS-485 / Modbus RTU | 半双工、主从轮询、一帧一问一答、节点少 |
| CAN | 每帧最多 8 字节数据、仲裁机制、速率低 |
| PROFIBUS DP | 主从轮询,一个周期要访问每个从站 |
| 传统现场总线通病 | 逐站询问:主站必须为每个从站单独发一帧,从站越多周期越长 |
在伺服多轴同步、高速视觉检测等场景下,要求所有设备在同一时刻采样/输出,且周期短至 100 µs 甚至更低——传统总线根本无法满足。
痛点二:标准以太网不适合硬实时
| 标准以太网问题 | 原因 | 对实时控制的影响 |
|---|---|---|
| 交换机转发延迟 | store-and-forward(存转发) | 每经过一台交换机增加几十 µs 延迟 |
| 抖动 | 排队、拥塞、MAC 层竞争 | 设备动作时间不确定 |
| 协议栈开销 | TCP/IP 协议处理、CPU 参与 | 延迟大、占用 CPU |
| 数据利用率低 | 每帧只服务一台设备 | 带宽浪费严重 |
标准以太网虽然快(100 Mbps 起步),但帧寻址 + 交换机转发的模型是为 IT 场景设计的,不保证确定性——数据到达时间不可预测,而工业控制恰恰最需要确定性。
EtherCAT 的思路:
- 保留以太网的物理层(网线、PHY、100BASE-TX),成本低、基础设施现成;
- 丢弃以太网的帧寻址 + 交换机模型,改为主站发帧、帧穿过所有从站、各从站就地处理;
- 帧内封装多个数据报,每个数据报可对应一组设备的输入/输出数据;
- 用分布式时钟(DC,详见第十章) 把网络内所有设备的时钟同步到 <1 µs,实现同时动作。
EtherCAT = 以太网的物理层 + 现场总线的共享总线思想 + 硬件级的处理速度。
1.3 核心特点总览
| 特点 | 说明 |
|---|---|
| 飞梭式处理 | 帧穿过从站时被硬件即时读写,延迟仅几十 ns |
| 单帧多设备 | 一帧可含最多 15 个数据报,承载整个网络的数据 |
| 全双工利用 | 下行(发数据)+ 上行(回读数据)同时进行 |
| 拓扑灵活 | 线型、树型、星型、环型均可,最大 65535 个节点 |
| 同步精度高 | 分布式时钟同步,抖动 < 1 µs |
| 无需交换机 | 从站本身就是转发器,级联无延迟累积 |
| 主站成本低 | 只需要一个标准以太网口,无需专用网卡 |
| 从站成本低 | 用专用 ESC 芯片(如 ET1100,详见第八章),几块钱即可实现 |
1.4 阅读地图(术语会"先用后讲")
本笔记按"帧 → 寻址 → 从站硬件 → 状态机 → 应用层"递进,部分术语会先出现、后详解。读到卡住时回来看这张表:
| 遇到这个词 | 首次出现在 | 详细讲解在 |
|---|---|---|
| ESC(从站控制器芯片) | 第 3 章(飞梭式处理) | 第 8 章 |
| 命令(LRW / FPRD 等) | 第 4 章(报文示例) | 第 6 章 |
| WKC(工作计数器) | 第 4 章(数据报结构) | 第 7 章 |
| FMMU(逻辑地址映射表) | 第 4 章(报文示例)/ 第 5 章(逻辑寻址) | 8.7 节 |
| SM(同步管理器) | 第 5 章(启动流程) | 8.8 节 |
| 状态机(INIT / OP 等) | 第 4 章(报文示例) | 第 9 章 |
| DC(分布式时钟) | 第 1 章(概述) | 第 10 章 |
| 邮箱 Mailbox | 第 4 章(数据报) | 11.2 节 |
| CoE(应用层协议) | 第 9 章(启动流程) | 11.3 节 |
二、基础知识铺垫(简要回顾)
2.1 标准以太网帧回顾
EtherCAT 直接使用标准以太网帧(IEEE 802.3),因此先回顾帧格式:
+----------------+----------------+------------+---------------------------+----------+
| 目的MAC (6B) | 源MAC (6B) | EtherType | 载荷 Data (46~1500B) | FCS (4B) |
+----------------+----------------+------------+---------------------------+----------+
目的 MAC 前面其实还有前导码(Preamble,7 字节)和帧起始定界符(SFD,1 字节)。它们属于物理层,由 PHY 芯片发送时自动添加、接收时自动剥除,不算 MAC 帧的一部分,所以帧格式图通常从目的 MAC 画起。线上完整顺序为:前导码 → SFD → 目的 MAC → … → FCS,相邻帧之间还有 12 字节帧间隙(IFG)。上面说的 64/1518 字节帧长均不含前导码和 SFD。
- MAC 地址:6 字节,用于标识网卡。
- EtherType:2 字节,标识上层协议类型。例如
0x0800= IPv4,0x86DD= IPv6,0x88A4= EtherCAT。 - 最小帧长:64 字节(不含前导码)。不足时填充 Padding。
- 最大帧长:1518 字节(不含前导码),对应 MTU 1500 字节的 IP 载荷。
- FCS:4 字节 CRC 校验。
EtherCAT 只把 EtherType 换成 0x88A4,把载荷区域全部用于自己的数据报,完全绕开了 IP/TCP/UDP 协议栈。
2.2 为什么标准以太网不适合硬实时
| 因素 | 说明 |
|---|---|
| CSMA/CD 与交换式网络 | 现代以太网多为交换式,交换机采用存转发(store-and-forward),先收完整帧再转发,每跳增加延迟 |
| 排队与拥塞 | 多端口同时发数据时,交换机内部排队,延迟不可预测(抖动) |
| TCP/IP 协议栈 | 协议处理需要 CPU 参与,中断、调度都会引入不确定性 |
| 带宽浪费 | 传统工业以太网(如 Modbus TCP)仍是一帧一问一答,100 台设备就要 100 帧 |
确定性是工业实时通信的核心:数据必须在确定的时间内到达。标准以太网做不到,EtherCAT 通过单帧穿透 + 硬件处理做到了。
三、核心工作原理(重点)
3.1 飞梭式处理(Processing on the Fly)
EtherCAT 最核心的思想可以用一张图概括:
具体过程:
- 主站发送:主站把一帧(内含所有从站的数据报)从端口 A 发出,向下游传播。
- 从站就地处理:每个从站的 ESC(EtherCAT Slave Controller,从站控制器,从站的核心芯片,详见第八章)在帧经过时,以纯硬件方式:
- 读取属于自己的数据(如输出数据);
- 写入自己的数据(如输入数据);
- 整个过程只有几十纳秒的硬件传播延迟,不需要 CPU 参与,不需要存储转发。
- 末站折返:最后一个从站检测到端口无链接/未开放,利用以太网的全双工特性把帧原路折返回主站。
- 主站回收:主站收到返回的帧,其中的数据已经被所有从站填好,直接 DMA 进内存即可使用。
从站处理的是帧经过时的瞬间窗口:每个从站都像一个偷看/改写帧内容的小窗口,处理延迟是纳秒级的硬件延迟,与从站数量几乎无关。
全网只有一个主站:EtherCAT 段内只有主站能主动发帧,从站只转发。这避免了总线竞争,保证了实时性。
3.2 与传统通信方式的对比
传统现场总线(逐站轮询):
主站 ──▶ 从站1 ──▶ 主站 (一问一答,1 次)
主站 ──▶ 从站2 ──▶ 主站 (一问一答,2 次)
主站 ──▶ 从站3 ──▶ 主站 (一问一答,3 次)
...(N 个从站需要 N 帧)
EtherCAT(单帧穿透):
主站 ──▶ 从站1 ──▶ 从站2 ──▶ 从站3 ──▶ ... ──▶ 从站N ──折返──▶ 主站
(1 帧搞定所有从站,帧里同时携带了读写数据)
3.3 全双工与有效数据率
- 以太网全双工下,发送和接收可以同时进行。
- EtherCAT 主站发帧的同时,折返回来的上一帧正在被接收——收发并行,理论上限是 2 × 100 Mbit/s。
- 因为数据报几乎填满了整帧(无 IP/TCP 头、无逐站寻址开销),有效数据率可超过 90%,远超传统一帧一问一答的工业以太网(通常 < 50%)。
四、帧结构详解
4.1 总体布局
EtherCAT 帧直接复用标准以太网帧(从左到右为线上发送顺序):
+---------------+-------------+-----------+-----------------+---------------------------+---------+----------+
| 目的 MAC (6B) | 源 MAC (6B) | EtherType | EtherCAT 头(2B) | EtherCAT 数据报区(≤1498B) | Padding | FCS (4B) |
+---------------+-------------+-----------+-----------------+---------------------------+---------+----------+
从左往右读。前 14 字节(目的 MAC + 源 MAC + EtherType)合起来就是标准以太网头;EtherCAT 头紧跟在它后面(第 14~15 字节),所以看起来粘在一起;从第 16 字节开始才是数据报区。EtherType 填
0x88A4表示这是 EtherCAT 帧,EtherCAT 头内部的 Length / Reserved / Type 三部分见 4.2 节。
| 字段 | 长度 | 说明 |
|---|---|---|
| 目的 MAC | 6 B | 通常为广播地址 FF:FF:FF:FF:FF:FF(主站→所有从站) |
| 源 MAC | 6 B | 主站网卡 MAC |
| EtherType | 2 B | 0x88A4,以太网类型字段标识这是 EtherCAT 帧 |
| EtherCAT 头 | 2 B | Length + Reserved + Type(见下) |
| 数据报区 | ≤ 1498 B | 1~15 个数据报 |
| Padding | 0~32 B | 整帧不足 64 字节时补齐 |
| FCS | 4 B | 帧校验序列(CRC-32) |
一个以太网帧最多 1518 字节,其中以太网头 14 B + FCS 4 B,所以数据报区最多 1500 - 2(EtherCAT 头)= 1498 字节,最多拆成 15 个数据报。
4.2 EtherCAT 头(2 字节)
15 12 11 11 10 0
+--------+---------+------------------------------------+
| Type | Reserved| Length |
| (4bit) | (1bit) | (11bit) |
+--------+---------+------------------------------------+
| 字段 | 位 | 说明 |
|---|---|---|
| Length | bit 0~10(11 位) | 后面所有数据报的总长度(不含 FCS) |
| Reserved | bit 11(1 位) | 保留,必须为 0 |
| Type | bit 12~15(4 位) | 协议类型,0x1 = EtherCAT 数据报(从站只支持此类型) |
4.3 EtherCAT 数据报(Datagram)结构
数据报是 EtherCAT 通信的基本单元,包含报头 + 数据 + 工作计数器(WKC):
+----------------+----------------+----------------+-------------+-------------------+
| 数据报头 (10B) | Data | WKC (2B) | | |
+----------------+----------------+----------------+ | |
| Cmd(1B) Idx(1B) | 要被读/写的数据 | 工作计数器 | ← 一个数据报 | ← 下一个数据报 ... |
| Address(4B) | (0~1486B) | (Working | | |
| Len(11bit) | | Counter) | | |
| R(3) C(1) M(1) | | | | |
| IRQ(2B) | | | | |
+----------------+----------------+----------------+-------------+-------------------+
数据报头逐字段详解:
| 字段 | 长度 | 说明 |
|---|---|---|
| Cmd | 1 B | EtherCAT 命令类型(见第六章,共 15 种) |
| Idx | 1 B | 索引号,主站用来识别重复/丢失的数据报(从站不得修改) |
| Address | 4 B | 地址:位置地址 / 节点地址 / 逻辑地址(见第五章) |
| Len | 11 bit | 本数据报中 Data 的长度(0~1486 字节) |
| R | 3 bit | 保留,必须为 0 |
| C | 1 bit | 循环标志:0 = 帧未循环;1 = 帧已循环一圈(用于环网冗余检测) |
| M | 1 bit | 多数据报标志:0 = 这是最后一个数据报;1 = 后面还有数据报 |
| IRQ | 2 B | 事件请求寄存器,所有从站的事件请求逻辑或汇总 |
| Data | n B | 实际读/写的数据 |
| WKC | 2 B | Working Counter,工作计数器(见第七章) |
多个数据报可以共存于一帧:例如一帧里可以同时放周期过程数据(LRW)、非周期邮箱数据(FPRW,邮箱机制见 11.2 节)、诊断数据(FPRD)(LRW/FPRW/FPRD 等命令的完整列表见第六章),主站自由组合。
4.4 实际报文示例
以下为说明性示例(构造的典型报文),字段遵循协议规则,实际抓包中的数值会不同。
术语预告(避免卡住):下面的示例会用到几个后面章节才详解的术语,先给一句话提示:
- OP:从站的运行状态(从站状态机见第九章)
- LRW / FPRD:EtherCAT 命令,LRW=逻辑读写、FPRD=节点地址读(完整命令表见第六章)
- FMMU:从站内部的"逻辑地址 ↔ 本地内存"映射表(见 5.4 节 / 8.7 节)
- 节点地址:主站给从站分配的固定地址(寻址方式见 5.2 节)
- AL Status:从站的应用层状态寄存器(见 8.3 节)
- WKC:工作计数器,主站用它验证数据交换是否成功(见第七章)
下面的表格是一整帧的逐字节列表,偏移列 = 字节在帧里的位置(从 0 开始数)。以示例 1 为例,整帧 72 字节的结构对应关系如下:
+----------+--------+-----------+-------------+----------+-----------+-------+-------+
| 目的 MAC | 源 MAC | EtherType | EtherCAT 头 | 数据报头 | 数据 Data | WKC | FCS |
+----------+--------+-----------+-------------+----------+-----------+-------+-------+
| (6B) | (6B) | (2B) | (2B) | (10B) | (40B) | (2B) | (4B) |
+----------+--------+-----------+-------------+----------+-----------+-------+-------+
| 00-05 | 06-11 | 12-13 | 14-15 | 16-25 | 26-65 | 66-67 | 68-71 |
+----------+--------+-----------+-------------+----------+-----------+-------+-------+
(整帧 72 字节 = 以太网头(目的 MAC + 源 MAC + EtherType,共 14B)+ EtherCAT 头(2B)+ 一个数据报(数据报头 10B + 数据 40B + WKC 2B,共 52B)+ FCS(4B)。因为数据报头的 M=0 表示后面没有更多数据报了,所以数据报区只有一个数据报。偏移 00-15 是帧头部分,16-25 是数据报头,26 开始才是真正的数据。)
示例 1:OP 状态下的周期过程数据交换(LRW,40 字节过程数据)
偏移 十六进制字节(HEX) 说明
─────────────────────────────────────────────────────────────────────
00-05 FF FF FF FF FF FF 目的 MAC(广播)
06-11 00 01 02 03 04 05 源 MAC(主站)
12-13 88 A4 EtherType = 0x88A4 (EtherCAT)
14-15 34 10 EtherCAT 头: Length=0x034(52B), Type=0x1
16 0B Cmd = 0x0B (LRW 逻辑读写)
17 00 Idx = 0
18-21 00 10 00 00 逻辑地址 0x00001000 (FMMU 映射)
22-23 28 00 Len=0x28(40), R=0, C=0, M=0(最后一个数据报)
24-25 00 00 IRQ = 0x0000
26-65 55 AA 55 AA ...(40 字节过程数据) 输出(主站→从站) / 输入(从站→主站) 数据
66-67 00 00 WKC(返回后与主站预期值比对;LRW 每成功处理一个从站 +3,见第七章)
68-71 ...(FCS) CRC-32 校验
- 数据报区总长 = 10(头)+ 40(数据)+ 2(WKC)= 52 =
0x034,正好填在 EtherCAT 头的 Length 字段。 - 逻辑地址
0x00001000由各从站的 FMMU(逻辑地址映射表,概念见 5.4 节、寄存器细节见 8.7 节)分别映射,因此一个数据报可以同时被多个从站处理。
示例 2:启动时用 FPRD 读取从站 1 的 AL Status 寄存器
偏移 十六进制字节(HEX) 说明
─────────────────────────────────────────────────────────────────────
12-13 88 A4 EtherType = 0x88A4
14-15 0E 10 EtherCAT 头: Length=0x00E(14B), Type=0x1
16 04 Cmd = 0x04 (FPRD 节点地址读)
17 01 Idx = 1
18-21 01 00 30 01 节点地址=0x0001, 偏移=0x0130 (AL Status)
22-23 02 00 Len=2, M=0
24-25 00 00 IRQ
26-27 [2 字节返回数据] AL Status 的值
28-29 00 01 WKC = 1(1 个从站成功处理)
- FPRD 用节点地址寻址单个从站,常用于启动阶段读写寄存器、配置参数。
- 节点地址
0x0001是主站在启动扫描后为从站分配的配置站地址。 - 示例 2 结构与示例 1 相同,只是数据区只有 2 字节:帧头在偏移 12-15,数据报头在 16-25,返回数据在 26-27,WKC 在 28-29。
五、寻址方式
EtherCAT 提供 4 种寻址方式,分别用于不同阶段:
| 寻址方式 | 英文 | 用途阶段 | 特点 |
|---|---|---|---|
| 位置寻址 | Position / Auto-Increment | 启动时扫描拓扑 | 按物理位置(距离主站的远近)寻址 |
| 节点寻址 | Node / Configured Station | 启动后配置、单站访问 | 按主站分配的固定站地址寻址 |
| 广播寻址 | Broadcast | 启动初始化、全局操作 | 同时访问所有从站 |
| 逻辑寻址 | Logical | 运行时的周期过程数据 | 按 4GB 逻辑地址空间寻址,配合 FMMU |
5.1 位置寻址(Position Addressing / 自动增量)
数据报 Address = [Position(2B) | Offset(2B)]
- 发送端(主站):Position 字段填一个负值(二进制补码)。想寻址第 1 个从站就填
0xFFFF(即 -1),第 2 个填0xFFFE(即 -2)……也就是 发送值 = 0xFFFF −(目标从站序号 − 1)。 - 接收端(从站):每个从站把 Position 加 1,加完若等于 0,说明自己就是被寻址的从站;否则只转发、不改动。
- Offset 字段指向该从站 ESC 内部的寄存器/内存偏移。
主站想寻址第 1 个从站 → 发送 Position = 0xFFFF(-1)
从站1: 收到 0xFFFF → +1 → 0x0000 → 等于0!从站1 是目标,就地处理
从站2: 收到 0x0000 → +1 → 0x0001 → 非零,仅转发
从站3: 收到 0x0001 → +1 → 0x0002 → 非零,仅转发
...
用途:位置寻址用于启动时扫描网络拓扑——主站通过逐站 APRD 读取每个从站的类型、名称,从而知道整条链上有哪些设备、什么顺序。因为运行中热插拔后位置会变化,所以运行阶段一般不使用位置寻址。
5.2 节点寻址(Node Addressing / 配置站地址)
数据报 Address = [StationAddress(2B) | Offset(2B)]
- 主站在启动阶段为每个从站分配一个唯一的 Configured Station Address(配置站地址)(写入从站寄存器
0x0010)。 - 该地址从站不能自行修改,由主站写入。
- 另有 Configured Station Alias(站别名)(寄存器
0x0012,来自 ESI-EEPROM 或拨码开关),主站可启用别名寻址。
用途:节点寻址用于运行阶段对单个特定从站进行非周期访问(读寄存器、写参数、邮箱通信等)。即使拓扑变化,只要站地址不变,访问依然有效。
5.3 广播寻址(Broadcast)
- 所有从站都处理该数据报(读时对数据做逻辑或,写时都写入)。
- Position 字段仍会被逐站加 1,但不用于寻址。
- 常用于初始化所有从站(如广播复位、广播写地址等)。
典型应用:启动时主站用 BRD 一次性读取所有从站的 AL Status,判断全网是否就绪。
5.4 逻辑寻址(Logical Addressing)
数据报 Address = [LogicalAddress(4B)]
- 这是一个 4 字节(4 GB)的逻辑地址空间,不属于任何单个从站。
- 每个从站的 FMMU(现场总线内存管理单元) 把逻辑地址的某一段映射到本从站 ESC 的物理内存。
- 多个从站可以把不同 FMMU 配置到同一逻辑地址区间,一个数据报就能同时读写多个从站的数据,这是过程数据周期通信的基础。
逻辑地址 0x00001000~0x0000101F(32 字节的过程映像)
│
├── FMMU(从站1): 0x1000~0x1003 → 从站1 的输入寄存器(4 字节)
├── FMMU(从站2): 0x1004~0x100B → 从站2 的输入寄存器(8 字节)
└── FMMU(从站3): 0x100C~0x101F → 从站3 的输入/输出(20 字节)
- FMMU 支持位级(bitwise)映射,可以精细到半个字节甚至 1 位,不浪费带宽。
- 主站在启动时通过 FPRW 配置每个从站的 FMMU 寄存器。
FMMU 就像信箱分配表:逻辑地址空间是一整条传送带,每个从站被分配了传送带上的某几格;数据报经过时,从站只搬走/放进属于自己的那几格。
逻辑地址与 FMMU 到底是什么关系?
一句话:逻辑地址是"帧上的坐标",FMMU 是"从站内部认领坐标的映射表",二者靠区间匹配建立联系。
- 逻辑地址(在帧里):写在数据报头的 Address 字段,是主站定义的全局虚拟坐标,不属于任何从站。它只描述"这批数据在帧的哪个位置",主站可以自由编排哪个从站的数据放哪一段。
- FMMU(在从站里):由主站启动时写入从站的映射表,声明"逻辑地址区间 [X, X+Len) ↔ 我本地内存 [Y, Y+Len),方向读/写"。
- 联系(区间匹配):帧经过从站时,ESC 硬件把帧里的逻辑地址与自己所有 FMMU 配置的区间比对,落在哪个区间就按对应 FMMU 的方向处理那一段字节。
主站发 LRW:逻辑地址 = 0x1000,Len = 32 字节
│
▼ 帧经过
从站1 FMMU 认领 [0x1000, 0x1004) → 处理自己的 4 字节
从站2 FMMU 认领 [0x1004, 0x100C) → 处理自己的 8 字节
从站3 FMMU 认领 [0x100C, 0x1020) → 处理自己的 20 字节
为什么需要这层映射? 因为每个从站 ESC 的本地内存都是从
0x1000开始的统一布局,而主站需要由自己自由编排的全局地址空间。没有 FMMU,主站就得硬编码"第几个从站的数据在第几段"的绑定关系,无法灵活组态。
5.5 四种寻址方式的协作流程
图中"配置 FMMU/SM"里的 FMMU(逻辑映射,见 8.7 节)和 SM(同步管理器,见 8.8 节)是第 8 章的主题,此处先知道"它们都是启动时由主站写入从站的配置"即可。
六、EtherCAT 命令类型
EtherCAT 定义了 15 种命令(0x00 ~ 0x0E),分为三大类:自动增量(位置)、节点(配置地址)、逻辑(FMMU)。
| 代码 | 名称 | 行为 | 典型用途 |
|---|---|---|---|
| 0x00 | NOP | 无操作,从站忽略 | 填充 |
| 0x01 | APRD | 自动增量读(位置为 0 的从站读) | 启动扫描拓扑 |
| 0x02 | APWR | 自动增量写 | 启动时写站地址 |
| 0x03 | APRW | 自动增量读写(先读后写) | 扫描 + 配置 |
| 0x04 | FPRD | 节点地址读 | 读单站寄存器 |
| 0x05 | FPWR | 节点地址写 | 写单站寄存器/配置 |
| 0x06 | FPRW | 节点地址读写 | 单站寄存器读写 |
| 0x07 | BRD | 广播读(所有从站数据逻辑或) | 读所有从站的公共状态 |
| 0x08 | BWR | 广播写(所有从站都写) | 广播配置/复位 |
| 0x09 | BRW | 广播读写 | 很少使用 |
| 0x0A | LRD | 逻辑读(FMMU 映射区域读) | 周期读输入数据 |
| 0x0B | LWR | 逻辑写 | 周期写输出数据 |
| 0x0C | LRW | 逻辑读写(最常用) | 周期过程数据交换 |
| 0x0D | ARMW | 自动增量读多写(位置 0 读,其余写) | 从站间通信 |
| 0x0E | FRMW | 节点地址读多写 | 从站间通信(少见) |
命令命名规律:
| 前缀 | 含义 | 后缀 | 含义 |
|---|---|---|---|
| AP | Auto-Increment(自动增量/位置寻址) | RD | Read(读) |
| FP | Fixed Position / Configured(节点寻址) | WR | Write(写) |
| B | Broadcast(广播) | RW | Read-Write(读写) |
| L | Logical(逻辑寻址) | ||
| ARM / FRM | ...Read Multiple Write(读多写) |
读写组合命令(RW)的处理顺序:先执行读,再执行写(同一内存区域),WKC 会分别累加(见第七章)。
七、Working Counter(WKC,工作计数器)
7.1 什么是 WKC
每个数据报末尾都有一个 2 字节的 工作计数器。每个成功处理了该数据报的从站都会按命令类型对 WKC 累加(读命令 +1、写命令 +2、读写命令 +3,见 7.2 节)。主站通过比对预期 WKC 与返回 WKC 来确认数据交换是否完整成功。
7.2 WKC 累加规则
| 命令类型 | 处理结果 | WKC 变化 |
|---|---|---|
| 读命令(RD) | 读成功 | +1 |
| 读命令 | 失败 | 不变 |
| 写命令(WR) | 写成功 | +2 |
| 写命令 | 失败 | 不变 |
| 读写命令(RW) | 读成功 | +1 |
| 读写命令 | 写成功 | +2 |
| 读写命令 | 读 + 写都成功 | +3 |
为什么写命令是 +2? WKC 的 16 位中最低两位分工:bit0 记读、bit1 记写。从站读成功 → bit0 +1(数值 +1);写成功 → bit1 +1(数值 +2);读写都成功 → +3。这样主站能从 WKC 数值区分"读成功几个、写成功几个"。
常见误区:网上很多教程说"写命令 WKC +1",是把 WKC 简化为"成功处理的从站数"——这只对读命令成立。
7.3 主站如何用 WKC
- 主站发出数据报前,把 WKC 清零(或设为已知值)。
- 帧返回后,主站读取 WKC。
- 与预期值比对(例如纯读命令 FPRD 只寻址 1 个从站,则预期 WKC=1;LRW 被 3 个从站处理且读写都成功,则预期 WKC=3×3=9):
- 相等 → 所有目标从站都成功处理,数据有效,可使用;
- 不相等 → 有从站未成功处理(掉线/未就绪/地址错误),主站丢弃该数据报的数据,并借助从站状态寄存器定位故障。
例如 4.4 节示例 2 中,FPRD 只寻址 1 个从站,返回 WKC=1 表示读取成功;如果从站不在线,返回 WKC=0,主站就知道这个从站没响应。
WKC 是 EtherCAT 最实用的诊断手段之一:通过对比每个数据报的 WKC,主站可以精确知道哪个数据报、涉及哪些设备的数据出了问题。
八、从站控制器 ESC 与从站硬件
8.1 ESC 的角色
每个 EtherCAT 从站的核心是一颗 ESC(EtherCAT Slave Controller,EtherCAT 从站控制器)。它负责:
- 接收、分析、转发 EtherCAT 帧(纯硬件,纳秒级延迟);
- 在帧经过时实时读写数据(Processing on the Fly 的硬件实现);
- 提供寄存器空间、过程数据内存、邮箱缓冲;
- 与从站应用(MCU/IO)通过 PDI 接口交换数据。
ESC 是 EtherCAT 实时性的基石:网络性能不依赖从站 CPU 的性能,只要 ESC 硬件正确,无论从站应用多简单,实时性都有保障。简单从站甚至不需要 MCU,IO 直接接在 ESC 上。
8.2 ESC 的实现形式
| 实现形式 | 例子 | 特点 |
|---|---|---|
| ASIC 专用芯片 | Beckhoff ET1100 / ET1200 | 成本低、性能稳定、功耗低,最主流 |
| FPGA | 各厂商 IP 核 | 灵活、可集成、适合大批量/特殊需求 |
| 集成到 MCU/SoC | TI、NXP、瑞萨等集成 ESC | 减小体积、降低成本,适合驱动器等复杂设备 |
8.3 ESC 的内存布局
一个 ESC 的地址空间最大 64 KB(0x0000 ~ 0xFFFF):
+----------------------------+ 0x0000
| 寄存器区 (Registers) | ← 4KB:类型、地址、状态、控制等
| 0x0000 ~ 0x0FFF |
+----------------------------+ 0x1000
| 过程数据区 (PDO 内存) | ← 最大 60KB:输入/输出过程数据、邮箱缓冲
| 0x1000 ~ 0xFFFF |
+----------------------------+
内存布局里两个词先说明一下:PDO(Process Data Object,过程数据对象)是应用层协议 CoE 的术语,见 11.3 节;邮箱(Mailbox)机制见 11.2 节。目前只需理解:这块区域存放"周期交换的过程数据"和"非周期通信的邮箱数据"。
常用寄存器一览(部分):
| 地址 | 名称 | 说明 |
|---|---|---|
| 0x0000 | Type | ESC 类型 |
| 0x0002 | Revision | 版本号 |
| 0x0004 | Build | 构建号 |
| 0x0010 | Station Address | 配置站地址(主站写入) |
| 0x0012 | Station Alias | 站别名(EEPROM/从站设置) |
| 0x0120 | AL Control | 应用层控制(状态机切换命令) |
| 0x0130 | AL Status | 应用层状态(当前状态 + 错误) |
| 0x0134 | AL Status Code | 状态码(详细错误原因) |
| 0x0140 | PDI Control | PDI 控制 |
| 0x0100~0x0103 | Port 0~3 状态 | 端口链接/信号状态 |
| 0x0110~0x0113 | Port 0~3 控制 | 端口环路控制 |
完整的寄存器定义见 ETG.1000 规范。调试从站故障时,
AL Status Code是最重要的排查入口。
这些寄存器地址是从哪来的?——ETG.1000 规范统一规定
- 地址不是芯片厂商自定的,而是由 ETG.1000 规范在协议层面统一规定的:只要符合规范的 ESC,无论哪家芯片,
0x0010都是 Station Address、0x0130都是 AL Status、0x0120都是 AL Control。 - 原因:主站软件(TwinCAT / SOEM / IgH)是针对协议编写的,不是针对某颗芯片写的。如果各家寄存器地址不同,主站就无法通用。
- 寄存器分必须实现和可选实现:核心寄存器(如
0x0010、0x0120、0x0130)每个 ESC 都必须有;扩展寄存器可以省略。 - 芯片出厂时部分寄存器已固化(如 Type
0x0000、Revision0x0002);而 Station Address(0x0010)出厂是空的,由主站在启动时写入。
做 EtherCAT 通信需要特别芯片吗?
- 从站:必须。从站的实时性依赖 ESC 硬件,普通 MCU 用软件处理帧达不到纳秒级的"就地读写"。但 ESC 不一定是单独一颗芯片——可以是专用 ASIC(ET1100)、FPGA IP 核,或集成在 MCU/SoC 内部(TI、NXP、瑞萨等,通过片上 PDI 访问)。
- 主站:不需要。主站只要一个标准以太网口 + 软件协议栈(TwinCAT/SOEM/IgH)即可,这也是主站成本低的原因。
芯片有统一标准吗?
- 有,而且是强标准化。协议层(ETG.1000)统一了帧/数据报/命令/寄存器/内存布局;ETG 还提供一致性测试工具(CTT) 对从站做自动化测试,通过后才能宣称"兼容 EtherCAT",也可送官方测试中心(ETC)拿证书。
- 所以不同厂商的 ESC 在协议行为上完全一致,可以互相替换,主站无需关心具体是哪家芯片——就像 USB:各家控制器芯片不同,但协议统一,主机插任何设备都能识别。
8.4 端口与物理层
- ESC 支持 2~4 个端口(逻辑端口 0~3,TwinCAT 中记为 A~D)。
- 物理层有两种:
- Ethernet(MII/RMII):外接标准 PHY 芯片,网线(100BASE-TX)传输,最常用;
- EBUS(EtherCAT Bus,倍福的专用物理层:用 LVDS 差分信号、集成在 ASIC 内部、靠专用短排线传输):直接用短排线级联(成本更低,但距离短,仅限背板级联)。
- 帧从端口 A 进入,Auto-Forwarder(自动转发器:ESC 内部把帧从收到的端口转发到其他端口的纯硬件逻辑)自动转发到下一个有链接的端口;无链接的端口触发 Loop-back(折返),实现末站折返。
为什么需要多个端口?
根源在于 EtherCAT 的通信模型:每个从站本身就是转发器,端口数量直接决定网络能组成什么拓扑。
| 端口数 | 能实现的拓扑 | 说明 |
|---|---|---|
| ≥ 2 | 线型(菊花链) | 最基本的"一进一出":帧从上游端口进、就地读写后从下游端口出。所有 ESC 的底线 |
| 3~4 | 树型/星型(分支) | 多端口从站当"分线器",把帧复制转发到多个下游端口,一条线变多条支路,无需交换机(见 12.1 节) |
| 4 | 环型冗余 | 末端从站用多余端口接回主站形成环,断缆自动闭合(见 12.3 节) |
| 多端口 | 热连接(Hot Connect) | 支持运行中插拔子网段 |
- Auto-Forwarder 与端口选择:帧进来后由 Auto-Forwarder 决定"从哪个有链接的端口出去";所有下游端口都无链接时触发 Loop-back 折返——有多个端口才有"选择出口"这回事。
- 不是每个端口都要接满:末端从站往往只用 1~2 个端口,多余的留作扩展(接支路 / 接回主站)。
- 典型芯片:ET1100 = 4 个端口(每个可配成以太网或 EBUS);ET1200 = 3 个端口(2 个以太网 + 1 个 EBUS,成本更低)。
8.5 PDI(Process Data Interface,过程数据接口)
PDI 是 ESC 与应用处理器(MCU)之间的接口,类型取决于 ESC:
| PDI 类型 | 特点 | 适用场景 |
|---|---|---|
| 数字 I/O(并行 32 位) | 无需 MCU,IO 直连 ESC | 简单数字量输入输出 |
| SPI 从站 | 引脚少、速度快 | 模拟量 IO、编码器、简单驱动器 |
| 8/16 位并行微控制器接口 | 带宽大、带 DPRAM | 复杂节点、大数据量 |
| 片上总线(On-Chip) | ESC 集成在 MCU 内部 | 驱动器等集成设备 |
| 多用途 I/O | 可配置 | 特殊应用 |
这里的"SPI 从站"就是标准 SPI 协议(Serial Peripheral Interface,串行外设接口,SCK / MOSI / MISO / CS 四线)。
- 用法上:ESC 作为 SPI 从机,应用 MCU 作为 SPI 主机,MCU 通过 SPI 读写 ESC 的寄存器/过程数据内存——所以叫"SPI 从站"(指 ESC 的 PDI 口是 SPI 从机模式)。
- 别混淆两个"从":EtherCAT 从站是对主站而言(网络层);SPI 从机是对应用 MCU(SPI 主机)而言(本地接口),这是两个不同层面的概念。
- 这条 SPI 链路是 MCU ↔ ESC 之间的本地通道,与 EtherCAT 网络无关:EtherCAT 帧走的是以太网口(MII/RMII/EBUS),SPI 只负责在 ESC 与 MCU 之间搬运数据。
8.6 SII / ESI-EEPROM 与 ESI 文件
- SII(SubDevice Information Interface):从站上的非易失存储器(EEPROM),存放设备基本信息(厂商 ID、产品码、FMMU 数量等)。主站在启动时可读取 SII,即使没有设备描述文件也能识别设备。
- ESI 文件(EtherCAT Slave Information,XML 格式):随设备提供的完整描述文件,包含过程数据及映射、邮箱协议支持、同步模式等。配置工具据此进行在线/离线组态。
8.7 FMMU(现场总线内存管理单元)
- 每个 ESC 有若干 FMMU(如 ET1100 有 8 个),用于位级映射:把逻辑地址空间的某一段映射到 ESC 本地内存。
- 主站在启动时用 FPRW 配置各 FMMU 的:逻辑起始地址、长度、本地起始地址、读写方向、激活标志。
- 过程数据通信时,从站根据 FMMU 配置自动从帧中提取/插入数据,无需 CPU 参与。
FMMU 寄存器在哪里?配置了什么?
- FMMU 的配置寄存器位于 ESC 地址空间
0x0600 ~ 0x07FF(ET1100 等):每个 FMMU 占 16 字节,8 个 FMMU 共 128 字节,正好填满这段区域。 - 主站用 FPRW(节点寻址写) 逐站写入以下配置:
| 字段 | 长度 | 说明 |
|---|---|---|
| 逻辑起始地址 | 4 B | 映射的逻辑地址起点(主站编排的全局坐标) |
| 逻辑长度 | 2 B | 映射的字节数 |
| 逻辑起始位 | 1 B | 逻辑地址内的起始位(支持位级映射) |
| 本地起始位 | 1 B | 本地内存内的起始位 |
| 本地起始地址 | 2 B | 对应 ESC 本地过程数据内存(0x1000 区)的起点 |
| 类型/方向 | 1 B | 1 = 读(帧→本地),2 = 写(本地→帧) |
| 激活标志 | 1 B | 该 FMMU 是否参与匹配 |
- 配置完成后,帧经过时 ESC 硬件自动比对逻辑地址区间并搬运数据,全程无 CPU 参与。
FMMU 匹配之后,数据去了哪里?——完整数据流
- FMMU 匹配是纯硬件比较:帧经过时 ESC 用硬件比较器把帧里的逻辑地址与已激活的 FMMU 区间逐段比对(纳秒级,无 CPU)。
- 命中后数据落在哪:落到 ESC 的本地过程数据内存(PDO 内存,
0x1000起)——FMMU 配置里的"本地起始地址"指的就是这块内存。 - 但应用 MCU 不能直接读这块内存:还要经过 SM(SyncManager) 和 PDI 才能到达应用。
输出数据(主站 → 从站):
主站写帧 → 帧经过时 ESC 按 FMMU 把数据存入本地过程数据内存
→ SM 校验/发事件 → 应用 MCU 通过 PDI 读走 → 驱动 IO/电机
输入数据(从站 → 主站):
应用 MCU 通过 PDI 写入 ESC 过程数据内存 → SM 管理缓冲区
→ 帧经过时 ESC 按 FMMU 把内存数据插入帧 → 主站从帧里读出
三者的分工(理解 EtherCAT 数据流的关键):
| 部件 | 管什么 | 比喻 |
|---|---|---|
| FMMU | 位置:数据在帧的哪一段、在 ESC 内存的哪一段 | 搬运工(搬哪块) |
| SM | 时机/一致性:什么时候允许读写、缓冲区怎么管理,防止读到半新半旧的数据 | 仓库管理员(什么时候放行) |
| PDI | 通道:应用 MCU 通过什么接口访问 ESC 内存 | 货梯(怎么运出去) |
8.8 SyncManager(同步管理器)
- 每个 ESC 有若干 SyncManager(SM,通常 4~8 个),用于一致性数据交换和邮箱通信。
- 每个 SM 配置了:方向(输入/输出)、起始地址、长度、缓冲区模式(单/三缓冲)、中断使能等。
- 典型分配:
- SM0/SM1:邮箱收发(Mailbox);
- SM2/SM3:过程数据收发(输入/输出)。
- SM 保证要么读到完整的新数据、要么读到旧数据,避免主站和从站应用同时读写造成数据撕裂。
FMMU 负责逻辑地址与本地内存的映射(在哪取/放数据);SM 负责主站与从站应用之间数据交换的一致性(什么时候允许取/放、缓冲区怎么管理)。
九、从站状态机
9.1 状态机总览
每个 EtherCAT 从站都运行一个应用层状态机,主站通过写 AL Control 寄存器(0x0120)命令从站切换状态,从站在 AL Status 寄存器(0x0130)中回报当前状态:
┌──────────┐
上电复位 ──▶ │ INIT │
└──────────┘
│ ▲
INIT→PRE │ │ PRE→INIT
▼ │
┌──────────┐
│ PRE-OP │
└──────────┘
│ ▲
PRE→SAFE │ │ SAFE→PRE
▼ │
┌──────────┐
│ SAFE-OP │
└──────────┘
│ ▲
SAFE→OP │ │ OP→SAFE
▼ │
┌──────────┐
│ OP │
└──────────┘
另外还有 BOOT 状态:INIT ↔ BOOT(用于 FoE 固件升级)
这个状态机是谁规定的、谁实现的? 分三层:
- 协议规定(ETG.1000 强制):状态、转移、
AL Control/AL Status/AL Status Code寄存器的语义都是规范统一规定的,主站(TwinCAT/SOEM/IgH)按这套流程驱动所有从站,所以每个从站都必须符合这个流程,不是自己想怎么切就怎么切。- ESC 硬件实现:芯片内部自带"硬件状态机",负责通信侧——收到主站写的
AL Control请求后校验转移是否合法、维护并更新AL Status;部分转移硬件自己就能完成(如 INIT→PRE-OP 的邮箱初始化)。- 用户软件实现(从站固件):应用侧的准备必须由固件配合——PRE-OP→SAFE-OP 前要准备好输入数据,SAFE-OP→OP 前要确认输出可安全使能;固件没准备好就拒绝切换,状态停在原地,
AL Status Code记录失败原因。一句话:流程是协议定死的,通信侧由 ESC 硬件管,应用侧由用户固件配合,双方通过寄存器握手完成切换。
9.2 各状态含义
| 状态 | 名称 | 允许的通信 | 说明 |
|---|---|---|---|
| INIT | 初始化 | 仅寄存器访问 | 上电后的初始状态,只能读写 ESC 寄存器 |
| PRE-OP | 预运行 | 寄存器 + 邮箱 | 邮箱(Mailbox)可用,可配置参数、下载固件,但无过程数据 |
| SAFE-OP | 安全运行 | 寄存器 + 邮箱 + 过程数据(输入) | 过程数据开始交换,输入数据有效,输出仍被屏蔽(安全考虑) |
| OP | 运行 | 全部 | 输入输出全部有效,正常运行状态 |
| BOOT | 引导 | 邮箱(仅 FoE) | 供引导程序进行固件更新 |
9.3 状态切换流程(从 INIT 到 OP 的完整启动)
主站 从站
─────────────────────────────────────────────────────────────────
1. 扫描拓扑(位置寻址 APRD 读每站类型) → 返回设备信息
2. 分配节点地址(APWR 写 0x0010) → 记录站地址
3. 读 SII/EEPROM,核对设备 → 返回厂商/产品信息
4. 配置 FMMU / SyncManager(FPRW) → 写入映射配置
5. 请求 PRE-OP(写 AL Control) → 初始化邮箱,进入 PRE-OP
6. 邮箱通信:下载配置、参数、CoE 对象 → 确认配置完成
7. 请求 SAFE-OP(写 AL Control) → 输入数据开始刷新
8. 请求 OP(写 AL Control) → 输出使能,进入正常周期运行
流程第 6 步的 CoE(CANopen over EtherCAT)是应用层协议,其对象字典 / SDO / PDO 机制见 11.3 节;邮箱(Mailbox)机制见 11.2 节。
- 每次请求切换后,主站需轮询 AL Status 确认从站确实到达目标状态;
- 若切换失败,读取 AL Status Code(0x0134) 获得失败原因(如无效请求、邮箱未就绪)。
9.4 错误与看门狗
- 从站在 SAFE-OP/OP 下依靠 Watchdog(看门狗) 监控通信:若主站停止发送帧超过设定时间(如 100 ms),从站认为通信故障,自动退回 SAFE-OP 或 PRE-OP(输出被安全屏蔽)。
- 这保证了主站崩溃时,执行器不会保持危险状态。
- 常见调试:从站突然掉回 SAFE-OP → 检查主站是否停止发帧、看门狗时间、AL Status Code。
十、分布式时钟(Distributed Clocks,DC)
10.1 为什么需要分布式时钟
多轴同步控制的难点:所有轴必须在同一时刻采样位置、输出指令。如果靠帧到达时刻触发,离主站近的从站先收到帧,离得远的后收到,动作有先后(传播延迟差),主站发帧的抖动也会影响所有设备。
EtherCAT 不给设备发时间,而是给每个设备装一个精确的本地时钟,再把所有时钟同步起来——设备由本地时钟触发动作,与帧何时到达无关。
10.2 同步原理
参考时钟(通常选第一个 DC 从站)
│ 在每次周期帧中携带系统时间(System Time)
▼
从站2 ── 测量传播延迟,校准本地时钟
从站3 ── 测量传播延迟,校准本地时钟
...
(所有从站时钟同步到参考时钟,误差 < 1 µs)
- 参考时钟:选择网络中的第一个 DC 从站作为参考,其时钟作为全网系统时间。
- 传播延迟测量:由于系统时间到达各从站有延迟,启动时(或运行中)测量每个从站的传播延迟并补偿。
- 时钟校准:主站周期性把参考时钟的时间写入各从站,从站据此微调本地时钟(硬件锁相)。
- 本地触发:同步后,各从站在本地时钟到达设定点(SYNC 时刻)时同时采样输入/刷新输出。
DC 同步的是"本地时钟"本身,不是"帧到达的时刻"。
系统时间从哪来? 取自参考时钟(第一个 DC 从站):主站每个周期用 FPRD 读参考时钟的
0x0910(系统时间寄存器),再用 FPRW 把该值写进帧、广播给所有从站(写入各从站0x0910)。注意:没有单独的"时间帧"——系统时间是顺带放在普通周期帧的一个数据报里捎过去的。例子(主站 — 从1[参考] — 从2,从1→从2 延迟 5 µs):
物理时刻 从1 时钟 发生什么 t=0 1000 主站抓取从1 时间 = 1000,写进帧发出 t=5 µs 1005(它一直在走) 帧到从2,收到快照 1000,算出 1000+5 = 1005,把本地钟对准 1005 1000 是"取快照那一刻"从1 的读数,1005 是"收到快照那一刻"从1 的读数——两个时刻从1 分别显示这两个值。从2 要做的,就是让自己在"收到那一刻"的读数和从1 一样(1005)。所以同一物理时刻,从1 和从2 显示相同时间 = 同步。
采样靠什么触发? 不是"收到帧后延时 x",而是本地时钟走到设定点(SYNC 时刻)时触发。因为所有从站本地时钟一致,所以同一物理时刻一起采样/输出。
主站的任务:只负责"对表"(周期发时间快照校准从站时钟),不负责"吹哨"(精确卡点发帧)——只要帧在 SYNC 触发前到达即可,所以对主站发帧抖动不敏感。
10.3 SYNC 信号
- 同步后的从站由本地时钟产生 SYNC0 / SYNC1 脉冲信号,触发应用层:
- SYNC0:通常用于触发过程数据更新(输出刷新、输入采样);
- SYNC1:可用于双触发(如高速采样+输出)。
- 应用 MCU 通过 PDI 的中断/事件接收 SYNC,实现硬实时动作。
10.4 分布式时钟的精度与优势
| 指标 | 数值 |
|---|---|
| 同步抖动 | < 1 µs(实际工程中常远小于,可到几十 ns) |
| 300 节点 + 120m 电缆的典型系统 | 同步误差远小于 1 µs |
DC 的优势:
- 对主站发帧抖动不敏感:只要帧在 SYNC 触发前到达即可,主站是软件实现也能保证微秒级同步;
- 采样更准确:位置采样由本地时钟触发,采样间隔严格等距,速度/加速度计算更精确;
- 主站负载降低:主站无需精确控制发帧时刻,降低了实时要求。
同步与同时性的区别:同步指所有时钟显示同一时间;同时性指所有设备在同一时刻动作。DC 两者都实现了。
十一、应用层协议
11.1 通信通道总览
EtherCAT 的数据交换分两条通道:
┌─────────────────────────────────────────────────────────────┐
│ EtherCAT 帧 │
│ ┌───────────────────────────────┐ ┌──────────────────────┐ │
│ │ 过程数据通道(周期) │ │ 邮箱通道(非周期) │ │
│ │ Process Data (LRW/LRD/LWR) │ │ Mailbox (FPRW...) │ │
│ │ 每个周期自动交换 │ │ 按需通信,可靠传输 │ │
│ └───────────────────────────────┘ └──────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
| 通道 | 周期 | 特点 | 承载协议 |
|---|---|---|---|
| 过程数据 | 每个周期 | 快、量小、实时 | CoE PDO、SoE 数据 |
| 邮箱 | 非周期/事件驱动 | 可靠(带确认和重传)、可传大块数据 | CoE SDO、EoE、FoE、AoE |
通道是什么意思? 它是 EtherCAT 抽象出的两种通信服务方式(逻辑概念),不是把"帧"分类——两种通道的数据可以并存于同一帧:一帧里的 1~15 个数据报中,可以同时有 LRW 数据报(过程数据)和 FPRW 数据报(邮箱),主站自由组合,从站看到哪个命令就按哪种方式处理。
一句话:通道 = 两种投递方式(普通快递不保价 vs 挂号信可靠签收),两种货物可以装在同一辆火车(帧)里一起走。
怎么选?要持续、实时、每个周期都用的数据 → 过程数据;要偶发、按需、可靠的操作(配置/诊断/偶尔读一次)→ 邮箱。 两者不冲突——比如温度传感器可过程数据周期上报实时温度,同时用邮箱改报警阈值。
11.2 邮箱(Mailbox)机制
- 邮箱提供可靠的非周期通信:帧带序号、接收方确认、错误自动重发(auto-recover)。
- 支持多种应用协议共存于同一邮箱通道,通过邮箱头中的协议类型区分。
- 典型应用:参数读写、固件升级、设备诊断、TCP/IP 隧道。
11.3 CoE(CANopen over EtherCAT)——最常用
CoE 把 CANopen 的机制移植到 EtherCAT,是伺服、IO 等设备最常用的应用层协议:
| CANopen 机制 | EtherCAT 中的角色 |
|---|---|
| 对象字典(Object Dictionary) | 每个设备一个对象字典,编号 0x1000~0x9FFF |
| SDO(Service Data Object) | 邮箱通信,非周期读写对象(配置参数) |
| PDO(Process Data Object) | 过程数据通道,周期交换实时数据 |
| PDO 映射(PDO Mapping) | 把对象字典条目映射到过程数据(启动时配置) |
| 紧急消息(Emergency) | 邮箱传输的故障/警告报文 |
| 网络管理(NMT) | 类似,配合从站状态机 |
为什么 CoE 重要:
- 伺服驱动标准 CiA 402(IEC 61800-7) 直接复用在 EtherCAT 上,电机控制(模式、使能、位置/速度/转矩指令)全部通过 CoE 完成;
- 设备厂商可复用大量 CANopen 固件,迁移成本低;
- 打破了 CANopen 的 8 字节 PDO 限制,可传输更大的数据块,甚至支持整本对象字典上传。
启动时主站通过邮箱(SDO)把要周期性交换的参数配置成 PDO 映射;运行后,这些参数通过过程数据通道(LRW)每周期自动刷新;参数修改、诊断再走邮箱。
11.4 其他应用层协议
| 协议 | 全称 | 作用 | 特点 |
|---|---|---|---|
| SoE | Servo Drive over EtherCAT | 伺服驱动器参数与功能(基于 SERCOS 行规) | 采用 IEC 61800-7 的伺服行规 |
| EoE | Ethernet over EtherCAT | 在 EtherCAT 段内透明传输 TCP/IP | 从站可当普通以太网节点用,主站相当于二层交换机 |
| FoE | File over EtherCAT | 文件传输(类似 TFTP) | 用于固件升级,无需 TCP/IP 栈,引导程序即可支持 |
| AoE | ADS over EtherCAT | ADS 协议(倍福自动化设备协议) | 路由/跨网段访问、远程诊断 |
协议如何共存:从站在 ESI 文件中声明支持的协议,主站据此使用。
11.5 Safety over EtherCAT(FSoE)
- 在同一根电缆、同一个 EtherCAT 网络中传输安全数据(急停、安全门、安全速度等)与普通数据。
- 原理:黑通道(Black Channel)——底层 EtherCAT 不被视为安全相关,安全数据封装在安全容器(Safety Container)中,自带 CRC、序号、看门狗等安全机制。
- 标准:IEC 61784-3,安全等级最高 SIL 3(经 TÜV 认证)。
- 优势:省去单独的安全总线,架构更简单、诊断更强。
11.6 EtherCAT P(数据 + 供电单线)
- EtherCAT P(P = Power):在同一根 4 芯网线上同时传输 EtherCAT 数据和 24V 电源。
- 两路独立电源:US(系统/传感器供电)、UP(外设/执行器供电),电气隔离、可单独关断。
- 协议与标准 EtherCAT 完全一致(只是物理层不同),无需新的 ESC。
- 典型场景:传感器、小型执行机构、移动部件——一根 M8 连接器搞定数据和供电,大幅简化布线。
其他扩展:EtherCAT G(千兆版) 将速率提升到 1 Gbit/s,用于数据量更大的场景;EtherCAT 也与 TSN(时间敏感网络)协同演进,用于控制器间通信。

浙公网安备 33010602011771号