1. 课程导入

1.1 学习目标与课程定位

本课程面向工业自动化领域的嵌入式工程师、运动控制开发者以及希望深入理解实时以太网协议栈的软件技术人员。课程以 EtherCAT IgH 主站 为核心,从协议原理、源码结构、内核驱动机制到实际项目落地,构建一条完整的知识链路。完成本章学习后,你应当能够:

  • 描述 EtherCAT 协议在工业实时以太网中的定位与核心优势;
  • 说出 IgH 主站项目的起源、许可证类型及主要功能模块;
  • 区分主站与从站(ESC)在通信中的角色与数据流向;
  • 理解“帧处理”与“分布式时钟”两个关键概念的基本含义;
  • 为后续章节的源码阅读与实验操作建立整体框架。

课程共 30 章,按“原理 → 环境 → 源码 → 应用 → 排障”五个阶段递进。前 5 章夯实协议与主站框架,第 6~12 章深入 IgH 的源码目录与内核模块,第 13~20 章围绕 PDO、SDO、DC 同步等实操主题展开,第 21~27 章讲解多从站配置、CiA402 驱动与实时性调优,最后 3 章通过完整项目案例复盘常见问题。

1.2 EtherCAT 技术概述

EtherCAT(Ethernet for Control Automation Technology)由德国 Beckhoff 公司于 2003 年提出,是一种基于标准以太网物理层的实时工业现场总线。其最核心的设计思想是 “处理即转发”:主站发送一帧以太网数据,从站(ESC,EtherCAT Slave Controller)在报文经过时,于硬件层面直接抽取或插入其对应的子报文数据,仅产生纳秒级的延迟,随后将帧继续向下游传递。

这种机制与传统的“以太网交换机逐包转发”完全不同。EtherCAT 不需要每个从站拥有独立 IP 地址,也不依赖 TCP/IP 协议栈,而是通过 FMMU(现场总线内存管理单元) 将从站本地地址映射到主站逻辑地址空间。因此,一帧报文即可完成对多个从站的读写操作,总线利用率极高。

关键特性速览:
  • 刷新 100 个数字量从站仅需约 30 µs(理论值);
  • 分布式时钟(DC)可实现各从站间 < 1 µs 的同步精度;
  • 支持线型、树型、星型拓扑,无需专用交换机;
  • 标准以太网帧类型 0x88A4,兼容常规网卡(需特定驱动);
  • 支持热连接(部分从站),具备强大的诊断能力。

下图展示了 EtherCAT 通信的基本数据流结构,帮助理解主站、从站与帧处理的关系:

EtherCAT 主站 IgH Master • 帧构建与发送 • 状态机管理 • 分布式时钟 从站 1 ESC (从站控制器) 伺服驱动器 从站 2 ESC (从站控制器) 数字量 I/O 从站 3 ESC (从站控制器) 编码器接口 以太网帧 (0x88A4) [以太网头] [子报文1: 从站1数据] [子报文2: 从站2数据] [子报文3: 从站3数据] [FCS] 返回帧(从站已插入输出数据) ⚡ 核心机制:处理即转发 1. 主站发送下行帧,从站硬件读取/写入对应子报文 2. 从站处理延迟仅 ~1µs,帧沿总线依次传递

上图展示了 EtherCAT 的典型线型拓扑。主站发送一帧数据,依次经过从站 1、2、3,每个从站通过 ESC 硬件在报文经过时完成数据交换,最终帧从最后一个从站返回主站。整个过程无需软件协议栈参与,实时性由硬件保证。

1.3 IgH 主站项目简介

IgH EtherCAT Master 是一个开源的 EtherCAT 主站实现,由德国 IgH(Ingenieurbüro für Hard- und Software)公司维护。项目采用 GPLv2 许可证(含链接例外),允许在商业闭源应用中通过独立模块方式使用。它运行于 Linux 用户空间与内核空间,是目前工业界应用最广泛的开源 EtherCAT 主站方案之一。

IgH 主站的核心设计包含以下层次:

层次 模块 功能说明
应用层 用户空间 API (libethercat) 提供 ecrt_master_* 系列接口,供应用程序创建域、配置从站、交换 PDO
主站核心 内核模块 (ec_master) 管理总线状态机、周期任务、邮箱通信、分布式时钟
网卡驱动 ec_e1000e / ec_generic 基于裸网卡驱动或通用驱动,实现帧的实时收发
从站配置 XML 从站描述 (ESI) 解析从站信息文件,构建从站对象字典与 PDO 映射

IgH 主站与 Linux 内核的实时性配合紧密。在 PREEMPT_RT 补丁或 Xenomai 环境下,主站周期任务可以获得确定的调度延迟。其源码目录结构清晰,核心文件包括:

ethercat/
├── master/          # 主站核心逻辑
│   ├── master.c     # 主站对象创建与销毁
│   ├── domain.c     # PDO 数据域管理
│   ├── slave.c      # 从站状态机与配置
│   ├── fsm_*.c      # 状态机实现(init、preop、safeop、op)
│   └── ec_master.h  # 主站内部头文件
├── devices/         # 网卡驱动补丁
├── tool/            # 命令行工具(ethercat)
├── lib/             # 用户空间库
├── script/          # 启动脚本与配置模板
└── include/         # 公共头文件(ecrt.h 等)

1.4 主站与从站的通信模型

在 EtherCAT 中,主站是唯一可以主动发起通信的节点。从站永远处于“被动响应”状态。主站通过 状态机 控制从站的生命周期:INIT → PREOP → SAFEOP → OP。每个状态对应不同的通信能力:

  • INIT:仅支持寄存器访问,用于初始化配置;
  • PREOP:邮箱通信已建立,可进行 SDO 参数配置,但无过程数据;
  • SAFEOP:输入过程数据有效,输出仍为安全状态;
  • OP:正常操作状态,输入输出均实时刷新。

状态切换由主站发起,从站 ESC 硬件负责确认。若切换失败,主站可通过 AL 状态寄存器读取错误码进行诊断。这一机制保证了总线在任何时刻都处于可控状态,避免从站未就绪时输出误动作。

常见误区: 初学者常误以为 EtherCAT 从站可以“主动上报”数据。实际上,从站没有主动发送帧的能力,所有数据交换都必须由主站周期性地发送帧来触发。因此,主站的周期任务质量(抖动、延迟)直接决定整个总线的实时性能。

1.5 课程实验环境与工具链

本课程后续章节将基于以下典型环境进行实验:

  • 硬件:x86_64 工控机(或树莓派 4B),Intel I210/I350 网卡(推荐);
  • 操作系统:Ubuntu 22.04 LTS + PREEMPT_RT 内核(或 Xenomai 4);
  • 从站设备:EtherCAT 伺服驱动器(如汇川 IS620N)、数字量 I/O 从站;
  • 工具:IgH 自带 ethercat 命令行工具、Wireshark(EtherCAT 解析插件)、ec_realtime 性能测试脚本。

在开始源码阅读前,建议先通过 ethercat master 命令验证主站是否正常加载:

# 加载主站模块
sudo modprobe ec_master
# 查看主站状态
ethercat master
# 扫描总线上的从站
ethercat slaves