从零开发 EtherCAT 主站(二):EtherCAT 通信原理详解,数据为什么能“边经过边处理”?

一、前言

上一篇文章我们介绍了 EtherCAT 的发展背景,以及它为什么能够在工业自动化、机器人、运动控制等领域得到广泛应用。

其中最核心的一个原因就是:

EtherCAT 从站可以在数据帧经过自己的同时完成数据读取和写入,而不需要等待整个数据帧接收完成。

这个机制被称为 On-The-Fly Processing(边经过边处理)

但如果只停留在这个概念层面,我们还是很难真正理解 EtherCAT。

例如:

  • EtherCAT Frame 到底是什么?
  • 一个 Ethernet Frame 里面装了什么?
  • 什么是 EtherCAT Datagram?
  • 主站如何告诉从站“这个数据是给你的”?
  • 从站如何在数据帧经过时修改数据?
  • 一个 Frame 为什么可以同时访问多个从站?
  • WKC(Working Counter)又是在哪里发挥作用的?

这些问题搞明白之后,EtherCAT 的通信机制基本就算入门了。

本文将从 Ethernet Frame 开始,一层一层拆开 EtherCAT 的通信过程。


二、先从普通 Ethernet Frame 说起

EtherCAT 建立在标准 Ethernet 物理层之上,因此理解 EtherCAT 之前,首先需要知道一个普通 Ethernet Frame 是什么。

一个典型的 Ethernet II Frame 可以抽象为:

┌──────────────┐
│ Destination  │  6 Bytes
├──────────────┤
│ Source       │  6 Bytes
├──────────────┤
│ EtherType    │  2 Bytes
├──────────────┤
│ Payload       │
├──────────────┤
│ FCS           │  4 Bytes
└──────────────┘

其中比较重要的是 EtherType

它用于告诉接收设备:

当前 Ethernet Frame 中携带的是什么上层协议。

EtherCAT 使用专门的 EtherType:

0x88A4

因此,当网卡收到一个 EtherType 为 0x88A4 的 Ethernet Frame 时,就可以知道:

这是一个 EtherCAT Frame。


2.1 EtherCAT 并不是重新发明 Ethernet

这一点非常重要。

EtherCAT 并不是:

Ethernet
    ↓
完全换掉
    ↓
EtherCAT

而是在 Ethernet 的基础上定义了自己的实时通信协议。

可以简单理解为:

┌──────────────────────┐
│ EtherCAT Protocol    │
├──────────────────────┤
│ Ethernet              │
├──────────────────────┤
│ PHY                   │
└──────────────────────┘

因此 EtherCAT 可以使用标准的 Ethernet PHY 和常见的双绞线、光纤等物理介质。


三、EtherCAT Frame 到底是什么?

一个 EtherCAT Frame 本质上仍然是一个 Ethernet Frame。

只不过它的 Payload 部分被 EtherCAT 协议重新定义了。

可以简化成:

Ethernet Frame
┌────────────────────────────────────┐
│ Ethernet Header                    │
├────────────────────────────────────┤
│ EtherCAT Datagram 1                │
├────────────────────────────────────┤
│ EtherCAT Datagram 2                │
├────────────────────────────────────┤
│ ...                                │
├────────────────────────────────────┤
│ EtherCAT Datagram N                │
└────────────────────────────────────┘

这里最重要的概念就是:

EtherCAT Datagram。

如果把整个 EtherCAT Frame 理解成“一封快递”,那么 Datagram 就可以理解成快递里面的一条具体操作指令。


3.1 什么是 Datagram?

一个 EtherCAT Datagram 通常包含:

┌──────────────┐
│ Cmd          │
├──────────────┤
│ Index        │
├──────────────┤
│ Address      │
├──────────────┤
│ Length       │
├──────────────┤
│ IRQ          │
├──────────────┤
│ Data         │
├──────────────┤
│ WKC          │
└──────────────┘

其中几个字段非常重要。

字段 作用
Cmd 告诉从站执行什么操作
Index Datagram 的索引编号
Address 指定访问位置
Length 数据长度
Data 实际数据
WKC Working Counter

后面学习 SOEM 时,你会发现 SOEM 大量代码其实就是在构造和解析这些 Datagram。


四、EtherCAT 为什么可以让一个 Frame 访问多个从站?

这是理解 EtherCAT 最关键的一步。

假设我们有三个从站:

Master

  │
  ▼

Slave 1
  │
  ▼
Slave 2
  │
  ▼
Slave 3

主站可以发送一个 EtherCAT Frame:

┌─────────────────────────────┐
│ Ethernet Header             │
├─────────────────────────────┤
│ Datagram                    │
│                             │
│ Data for Slave 1            │
│ Data for Slave 2            │
│ Data for Slave 3            │
└─────────────────────────────┘

这个 Frame 会依次经过所有从站。

但是,每个从站只会处理属于自己的那部分数据。

于是就出现了非常有意思的过程:

Master
  │
  │ Frame
  ▼
┌─────────┐
│ Slave 1 │ ← 读取/写入自己的数据
└─────────┘
  │
  │ Frame
  ▼
┌─────────┐
│ Slave 2 │ ← 读取/写入自己的数据
└─────────┘
  │
  │ Frame
  ▼
┌─────────┐
│ Slave 3 │ ← 读取/写入自己的数据
└─────────┘
  │
  ▼
Master

这就是 EtherCAT 所谓的:

Processing on the fly。


五、On-The-Fly 到底是怎么实现的?

仅仅说“边经过边处理”还不够。

真正实现这个机制的关键是:

EtherCAT Slave Controller(ESC)。

5.1 ESC 是什么?

ESC 可以理解为 EtherCAT 从站专用的硬件控制器。

很多 EtherCAT 从站芯片或者 MCU 内置的 EtherCAT 外设,本质上都需要具备类似 ESC 的功能。

常见的 EtherCAT Slave Controller 包括:

  • Beckhoff ET1100
  • Microchip LAN9252
  • TI AM243x EtherCAT Subsystem
  • STM32 部分带 EtherCAT 从站功能的产品

ESC 的核心任务不是运行复杂的应用算法,而是负责高速处理 EtherCAT 数据。


5.2 数据帧经过 ESC 时发生了什么?

假设主站发送:

Data = 0x12345678

当 Frame 经过某个从站时,ESC 会根据 Datagram 中的地址判断:

这个地址是不是我的?

如果是,那么 ESC 可以直接访问内部寄存器或者 Process Data 区域。

整个过程可以抽象为:

EtherCAT Frame
      │
      ▼
     PHY
      │
      ▼
     ESC
      │
      ├── 地址匹配?
      │
      ├── YES → 读/写数据
      │
      └── NO  → 直接转发
      │
      ▼
下一个 Slave

注意:

这里并不需要 CPU 把整个 Ethernet Frame 收下来,再交给软件协议栈处理。

这正是 EtherCAT 与普通网络通信非常重要的区别。


六、EtherCAT 的地址到底是什么?

既然从站需要判断:

“这个数据是不是我的?”

那么就必须存在寻址机制。

EtherCAT 提供了多种寻址方式。

比较常见的包括:

  • Auto Increment Address
  • Configured Station Address
  • Broadcast
  • Logical Address

其中最重要的是:

Logical Address(逻辑地址)。


6.1 逻辑地址

在 EtherCAT PDO 通信中,主站通常不会简单地说:

“给 3 号从站发送数据。”

而是建立一个统一的逻辑地址空间。

例如:

Logical Address

0x00000000
     │
     ├── Slave 1 Input
     │
     ├── Slave 1 Output
     │
     ├── Slave 2 Input
     │
     ├── Slave 2 Output
     │
     ├── Slave 3 Input
     │
     └── Slave 3 Output

这就需要引出 EtherCAT 中非常重要的一个概念:

FMMU(Fieldbus Memory Management Unit)。

FMMU 会把从站内部的数据区域映射到 EtherCAT 的逻辑地址空间。

后面讲 PDO 映射时,我们会专门深入 FMMU。


七、FMMU:主站如何把数据“拼”到一起?

假设系统中有三个伺服:

Servo 1
Position
Velocity
Torque

Servo 2
Position
Velocity
Torque

Servo 3
Position
Velocity
Torque

主站希望把这些数据组织成一个连续的逻辑地址空间:

Logical Address

0x0000
 │
 ├── Servo1 Position
 ├── Servo1 Velocity
 ├── Servo1 Torque
 │
 ├── Servo2 Position
 ├── Servo2 Velocity
 ├── Servo2 Torque
 │
 ├── Servo3 Position
 ├── Servo3 Velocity
 └── Servo3 Torque

这时候每个从站只需要通过 FMMU 将自己的本地数据映射到对应逻辑地址。

因此:

主站看到的是一个连续的逻辑内存,而不是几十个完全独立的从站。

这也是 EtherCAT PDO 高效通信的重要基础。


八、一个 EtherCAT Frame 可以包含多个 Datagram

前面说一个 EtherCAT Frame 可以访问多个从站,但还需要补充一个细节:

一个 EtherCAT Frame 内部可以包含多个 Datagram。

例如:

Ethernet Frame
│
├── Datagram 1
│      └── PDO Output
│
├── Datagram 2
│      └── PDO Input
│
├── Datagram 3
│      └── SDO / Mailbox
│
└── Datagram 4
       └── 状态读取

因此主站可以根据实际需要,将多个操作组合到一个 Ethernet Frame 中。

这样可以进一步降低:

  • Ethernet Frame 数量;
  • 协议处理开销;
  • CPU 负担;
  • 网络延迟。

在这里插入图片描述


九、Working Counter(WKC)为什么如此重要?

前面多次提到 WKC。

现在可以理解它存在的意义了。

假设主站发送一个 Datagram:

Master
  │
  ▼
Slave1
  │
  ▼
Slave2
  │
  ▼
Slave3
  │
  ▼
Master

如果三个从站都正确处理了这个 Datagram,那么 WKC 就会按照协议规则增加。

最终主站收到 Frame 后检查:

Expected WKC
      ==
Actual WKC

如果相等:

通信正常

如果不相等:

可能存在从站掉线、
数据未处理或通信异常

因此,在 SOEM 中你会经常看到类似:

wkc = ec_receive_processdata(EC_TIMEOUTRET);

然后判断:

if (wkc < expectedWKC)
{
    // 通信异常
}

这也是后续我们阅读 SOEM 源码时必须理解的核心概念。


十、EtherCAT 数据交换的完整过程

现在把前面的知识全部串起来。

假设系统中有三个从站:

Master
 │
 ▼
Slave 1
 │
 ▼
Slave 2
 │
 ▼
Slave 3

主站首先根据设备配置建立:

Object Dictionary
        ↓
PDO Mapping
        ↓
FMMU
        ↓
Logical Address

然后进入周期通信。

10.1 主站发送 Process Data

Master
  │
  │ EtherCAT Frame
  ▼
Slave 1
  │
  │ 处理自己的数据
  ▼
Slave 2
  │
  │ 处理自己的数据
  ▼
Slave 3
  │
  │ 处理自己的数据
  ▼
Master

10.2 从站实时处理数据

每个从站的 ESC 在数据经过时完成:

检测地址
   ↓
读取/写入 DPRAM
   ↓
更新 WKC
   ↓
继续转发

CPU 主要负责:

应用算法
状态机
控制逻辑
参数管理

而不是负责逐字节搬运 EtherCAT Frame。


10.3 主站检查通信结果

最终:

Actual WKC
     ↓
与 Expected WKC 比较
     ↓
通信正常?

如果通信正常:

继续下一个周期

如果异常:

进入错误处理
Slave Recovery
重新检查状态

后面我们会专门分析 EtherCAT 主站如何进行从站恢复。


十一、EtherCAT 为什么适合运动控制?

到这里我们就可以理解为什么 EtherCAT 特别适合伺服和机器人。

一个典型的运动控制系统可能是:

          EtherCAT Master
                │
      ┌─────────┼─────────┐
      │         │         │
      ▼         ▼         ▼
    Servo1    Servo2    Servo3
      │         │         │
      ▼         ▼         ▼
    Motor1    Motor2    Motor3

主站可以在一个周期内同时发送:

Position Command
Velocity Command
Torque Command
Control Word

同时接收:

Actual Position
Actual Velocity
Actual Torque
Status Word

这样就可以实现高性能的多轴运动控制。

进一步结合 Distributed Clocks(DC),还可以让多个从站在统一时间基准下进行同步。

这也是 EtherCAT 能够应用于:

  • 机器人
  • CNC
  • 伺服系统
  • 半导体设备
  • 高速包装设备

的重要原因。


十二、EtherCAT 与传统 CAN 通信的核心区别

如果你熟悉 CAN,那么可以用下面这个思路快速理解两者。

CAN:

多个节点共享总线

        ↓

竞争发送

        ↓

仲裁

        ↓

一个节点发送一帧

EtherCAT:

Master 统一调度

        ↓

一个 Frame

        ↓

依次经过所有 Slave

        ↓

各 Slave On-The-Fly 处理

因此,两者的设计哲学完全不同。

CAN 的核心思想是:

让多个节点公平、可靠地共享一条总线。

EtherCAT 的核心思想则是:

让主站高效地控制整个网络,并让从站在数据帧经过时直接完成数据处理。

这也是为什么 EtherCAT 特别适合集中式运动控制系统。


十三、从主站开发角度理解 EtherCAT

到了这里,我们已经可以开始思考:

如果我要自己开发一个 EtherCAT Master,需要做什么?

从软件角度来看,大致可以分成:

┌──────────────────────────────┐
│          Qt 上位机            │
├──────────────────────────────┤
│      EtherCAT Master          │
├──────────────────────────────┤
│          SOEM                 │
├──────────────────────────────┤
│       Raw Ethernet            │
├──────────────────────────────┤
│       Ethernet NIC            │
└──────────────────────────────┘

SOEM 位于中间这一层。

它负责帮助我们完成:

  • EtherCAT Frame 构造;
  • 从站扫描;
  • 状态管理;
  • PDO 配置;
  • SDO 通信;
  • Process Data 通信;
  • WKC 处理;
  • 从站状态恢复。

因此,接下来真正进入本系列的核心:

SOEM。


十四、总结

本文从 Ethernet Frame 开始,一步一步分析了 EtherCAT 的基本通信机制。

需要重点记住以下几个概念:

14.1 EtherCAT Frame

EtherCAT Frame 本质上是一个 Ethernet Frame,其 Payload 中携带 EtherCAT Datagram。

14.2 Datagram

Datagram 是 EtherCAT 实际执行读写操作的基本数据单元,其中包含 Command、Address、Data、WKC 等信息。

14.3 ESC

EtherCAT Slave Controller 是实现从站实时数据处理的核心硬件。

14.4 On-The-Fly

数据帧经过从站时,从站即可直接读取或修改自己的数据,然后继续转发。

这正是 EtherCAT 高实时性的核心原因之一。

14.5 FMMU

FMMU 将从站本地数据映射到 EtherCAT 的逻辑地址空间,使主站可以使用统一的逻辑地址访问分布式数据。

14.6 WKC

Working Counter 用于判断 Datagram 是否被预期数量的从站正确处理,是主站判断周期通信是否正常的重要依据。

把这些概念串起来,就得到了 EtherCAT 最核心的通信模型:

EtherCAT Master
       │
       │ Ethernet Frame
       ▼
    Slave 1
       │
       │ On-The-Fly
       ▼
    Slave 2
       │
       │ On-The-Fly
       ▼
    Slave 3
       │
       │ On-The-Fly
       ▼
EtherCAT Master
       │
       ▼
   Check WKC
       │
       ▼
  Next Cycle

这就是 EtherCAT 能够实现高带宽、低延迟、高效率实时通信的核心机制。

下一篇,我们将继续往上走,研究一个非常重要的问题:

EtherCAT 从站为什么有 Init、Pre-OP、Safe-OP、OP 这些状态?主站到底是如何一步一步把一个刚上电的从站带到 OP 状态的?

这就是 EtherCAT State Machine(ESM)


系列文章导航

章节 标题 状态
第一篇 EtherCAT 为什么能成为工业实时通信的主流?
第二篇 EtherCAT 通信原理详解,数据为什么能“边经过边处理”?
第三篇 EtherCAT 状态机(ESM)完整解析,Init、Pre-OP、Safe-OP、OP 到底有什么区别? 待更新
第四篇 PDO、Mailbox、CoE、FoE 到底是什么?一文搞懂 EtherCAT 通信体系 待更新
第五篇 SOEM 框架源码解析,一个例程带你读懂整个主站 待更新
…… …… ……

写在最后

到这里,我们已经完成了 EtherCAT 主站开发前最重要的第一层知识储备。

下一阶段将正式进入 SOEM 源码

从下一篇开始,我们不再只讲协议概念,而是会逐渐结合实际代码,看看一个 EtherCAT Master 到底是如何:

打开网卡
   ↓
扫描从站
   ↓
配置从站
   ↓
建立 PDO
   ↓
进入 OP
   ↓
周期通信

最终,我们会把这些内容全部串起来,完成一个真正可以运行的 EtherCAT 主站。

参考链接:
ECAT

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐