🌻 EtherCAT总线
EtherCAT总线
EtherCAT 总线初见
EtherCAT 名称的由来是: Ethernet for Control Automation Technology,也就是用于控制自动化技术的以太网,其实也就是工业以太网的一种。EtherCAT 是由德国 BECKHOFF 自动化公司于 2003 年提出的实时工业以太网技术。它具有高速和高数据有效率的特点,支持多种设备连接拓扑结构。其从站节点使用专用的控制芯片,主站使用标准的以太网控制器。
EtherCAT 是一种工业以太网技术,看到的大多数应用场景都是伺服电机。因为是基于以太网的技术,所以 EtherCAT 相比于 CAN 总线而言,速率上要快不少。EtherCAT 可以达到 100M 的速率,而 CAN 只有 1M。此外,EtherCAT 还具备低延时和精准同步的特点。
在工业总线中,低延时、精准同步是用户的关键需求。试想一下,工厂中某个器件的生产需要 A/B/C 三个机器协同操作,原本预想的是 A 先操作期间,然后 B 把器件传递给 C,C 再操作。如果,A/B/C 不同步,或者操作命令的传达有延时,A 还没有操作完器件,B 就已经开始进行传递了。这时要么器件损坏,要么就做出来个半成品。而 EtherCAT 相比于普通的以太网技术就有这两点的优点。
EtherCAT 是一个开放架构,以以太网为基础的现场总线系统,其名称的 CAT 为控制自动化技术(Control Automation Technology)字首的缩写。EtherCAT 是确定性的工业以太网,最早是由德国的 Beckhoff(倍福)公司研发。
EtherCAT 基本原理
倍福官方对 EtherCAT 的传递机制的命名叫做:ON The Fly。

On The Fly 技术可以从两方面来解读,第一个方面是以太帧“时分复用”。一般以太帧里都只包含了一个设备发送的消息,5 个设备就会发送 5 条以太帧。而 EtherCAT 则是多个从站共享一条以太帧。就像图中的火车,EtherCAT 主站发出了“火车”(以太帧),各个从站则从这辆火车的不同的“车厢”(子报文)中提取或插入自己的“乘客”(消息)。这样一来就实现了以太帧的“时分复用”,只用一条以太帧(最大 1486byte),就可以让各个从站都收发出自己的消息,大大的降低了通信的延时(这一部分《浅析 EtherCAT 总线》里面讲的比较清楚,还没理解的同学可以看看)。
On The Fly 影响的另一个方面就是总线仲裁了。所谓总线(例如 CAN 总线),就是大家都共用一条通道来通信,各个设备都挂载在同一条总线上。所以,当一个总线上的多个设备同时想要发消息的时候,就会产生冲突,所以,就有总线仲裁的机制。控制器决定当前时刻,谁来发消息,谁来“占用”这条总线。而 EtherCAT 玩了一个花样,EtherCAT 的各个设备之间是一种 P2P(Point to Point)的连接方式,这些设备根本没有连接在“同一条”总线上。下面是 EtherCAT 的连接结构。

最左边的是主站,后面的都是从站,各个从站下面还挂载了不同的设备。可以看到主站向从站 1 发送以太帧,从站 1 接收、处理完自己的子报文后,再把以太帧发送给从站;从站 2 接收,处理完自己的子报文后在发送给从站 3;如此往返,直到最后一个从站 n 接收处理完自己的消息,再把这条以太帧返回回去。所以,各个从站之间根本就不会存在总线冲突。EtherCAT 只需要预先配置好各个从站占用的子报文位置,也就是 On The Fly 技术,就可以解决总线总裁这一个老大难的问题,确实是一箭双雕。
当然,这种解决方案也是有它的缺点的。比如,从站数量非常多的时候,最后一个从站就需要等前面的从站一次次转发才能收到消息。当然,我觉得 EtherCAT 应该也想到了这点,应该也采取了某种机制来避免这种最远设备延迟的缺陷。但是,我还没深挖这个问题,所以,没看到相关的解决机制。如果有了解的同学希望能指教一下。
主站是唯一允许发送帧的节点,子站只能转发帧。数据帧就像火车一样,从主站开出,途经各个子站,把对于子站的数据放下或者带上,最后回到主站。
这种方法有助于确保实时操作并避免延迟。
EtherCAT 网络不需要交换机。每个 EtherCAT 设备通常有两个以太网端口,第一个端口是接收端口,另一个是发送端口,发送给另一个设备。
EtherCAT 系统组成
EtherCAT 系统主要就一个主站和若干从站组成。如所示:

EtherCAT 一般使用软件的方式来实现主站,包括倍福的 TwinCAT,Igh,KingStar 等等都是基于一台实时操作系统的 PC,通过以太网卡,来实现主站的功能。因为,主站不是我的项目重点,所以,目前了解的还不多。先挖一个坑,后面有时间了研究一下,再来补上。现在我是用 TwinCAT 的免费版来学习和调试的。TwinCAT 本身是收费的,不过,它有试用版,试用版不具备实时功能,调试一下设备还是足够了。
从站的组成如图所示:

从站一般是有 3 部分器件组成的:物理层器件、EtherCAT 从站控制器(EtherCAT Slave Control)和微处理器(MCU)。物理层器件就是以太网的 PHY 芯片和网口,ESC 是实现 EtherCAT 协议栈的专用 ASIC,从站控制微处理器主要实现应用层(如 CANopen)和用户自定义的程序。
看到这里没有通信基础知识的通信可能就有点懵逼了。物理层,数据链路层,应用层这些是个啥玩意?这里我就简单说一下,想要深入理解还是可以看看 OSI 模型,大多数的通信技术都脱离不了这个框架。

OSI 中有 7 层,EtherCAT 系统中只用了 3 层:物理层、数据链路层、应用层。先降维的说一下这几层是啥意思。最基本的通信就是咱们人类说话,我就以我们普通对话来讲解一下这三层的意思。
物理层:人类的语言是通过嘴发声,声波在空气中传播,传递到耳朵,耳朵听音再汇聚到大脑,大脑最终判断出声音中的信息。我们的嘴、耳、声波和空气就是物理层。物理层的重点是信号在介质中的传递表示,不同的字有不同的发音规则,不同的频率和声调,比如“哦”,我们就需要发出“o”这个音,我们听到“o”这个音的时候,才能判断出“哦”这个字。计算机通信的原理和这个也是一样的,信号在光纤、电缆以及空气中传播,计算机需要判断电缆上的电平的高低来判断 0,1bit。当然,计算机比人类要傻很多,它不知道“某句话”的“发音”是从什么时候开始的,什么时候结束的,所以,物理层还需要告诉它信号的起始时刻和持续的长度等等。
数据链路层:通过前面的物理层,我们已经具备了基本的发声的手段,通过嘴改变声音的频率、音调、音长等特征(通信系统中,天线或者光模块改变信号的电平高低、信号频率、调制方式等特征),让声音在空气中传播(通信系统中,信号在相应的介质中传播),然后,耳朵识别这些频率、音调、音长等特征(通信系统中,接收端的识别信号的电平高低、频率、调制方式),最终实现口到耳的传播。
但是,光是这样还足够实现通信。试想一下,你和你的几个朋友处在一个嘈杂的环境当中,远处有汽车的轰鸣,旁边还有小孩子在哭闹,你的朋友们每个人在抢着发言,大家七嘴八舌的,根本听不清对方在说什么。所以,你和你的朋友之间想要对话就必须克服两个困难,第一,屏蔽掉耳旁的那些轰鸣声、哭闹声;第二,需要建立一种对话机制,让大家互相可以听清对方的话语。
第一点中描述的那些轰鸣、哭闹声,实际上就是通信系统中的噪声,噪声太大时,我们是无法通信的,因为我们根本听不清旁边的人在说些什么,只能听到轰鸣、哭闹声。最简单克服噪声的办法就是提高信号的发射功率,也就是大声地说话,让自己的声音盖过那些哭闹声,也即是通信系统中的功率控制。还有一种办法就是我们过滤掉一些噪声,虽然,这些声音都会进入我们的耳朵,但是,我们的大脑可以过滤掉一些不关注的声音,专注的去接收那些关注的声音,也即是通信系统中的频率选择。此外,大家七嘴八舌的说话也是一个问题。7,8 个人同时在说话,你能听清楚一两个就不错了,其他人在说啥,根本没法听清。所以,我们说话的时候,一般会有一个轮流的机制。每个人说两句,别人说话的时候,别插嘴。或者,两个人说悄悄话,不打扰到别人,自己也听得清。这里的轮流说话机制,就是通信系统中的“时分复用”或者“频分复用”;一个人说 7 个人听,就是广播;1 对 1 的悄悄话就是单播。数据链路层实际上就是用来解决以上的这些问题。
数据链路层会将待传输的消息组成一个帧,如图所示:

这个帧里就会包含目的地址、源地址、帧数据、帧校验位等。通过目的地址就可以确定帧传递的对象,通过源地址接收方也可以知道是谁发送了这条帧。在数据帧之外的地方,一般还会存在一个控制器(比如 EtherCAT 主站),这个控制器会决定,其他的从站什么时候传输数据,数据可以占用多少的资源。在其他的一些更复杂的通信系统中,数据链路层还会根据当前的信道条件(噪声情况),来决定各个设备的发射功率,调制方式等。
应用层:说完了数据链路层,我们还需要继续了解一下应用层。首先需要明确的一点,这里的应用层和我们手机、电脑上的应用程序不是一个东西。最为常见的应用层协议就是 HTTP。简单来说,应用层是对数据的一种格式约定。这里还是用人类的对话来打个比方。你和一个老外,大家都有口有耳,也都是文明人,知道等对方说完自己再说。但是,你不懂英文,他不懂中文,你们还是无法交流。他说了“double”,你以为是“打包”;他说“You need cry deal”,你以为是“有你的快递”。这实际上就是你们的应用层协议不对等,他安装的是“英语”应用层协议,你安装的是“中文”应用层协议,大家说话牛头不对马嘴,根本无法交流。再夸张一点,我和你都是中国人,我们都听得懂中文,当时我是学通信的,你是学自动化的,我说 PRACH 信道,信道检查与估计,匹配滤波这些词的时候,你能明白每一个字的意思,但是连着一起是啥就不知道了。这就是因为你确实“通信系统”这个应用层协议。应用层协议最终的目的,就是让消息的收发双方知道这一串“1010101010”代表的是什么意思。
EtherCAT 特性
① 开放的技术
EtherCAT 全称 EtherNet Control Automation Technology,是由德国倍福(Beckhoff)公司提出的一种实时以太网技术。EtherCAT 是一种开放但不开源的技术,意味着您可以任意使用这项技术,但若要进行相关设备的开发,则需要向倍福公司获取相关授权。
② 快速性

相比传统现场总线,EtherCAT 的数据传输速率有了极大的提升,可选 10Mbit/s 或 100Mbit/s,甚至依托补充的 EtherCAT G 技术,传输速率可达 1000Mbit/s;同时 EtherCAT 基于标准以太网帧传输,单帧数据用容量可达 1486 Bytes。这使得在传输数据量方面 EtherCAT 有无比的优越性。
③ 拓扑的灵活性

EtherCAT 几乎支持所有的拓扑结构:星型、线性、树型、菊花链型等,并支持各类电缆、光纤等多种通信介质,还支持热插拔特性,保证了各设备之间连接的灵活性。同时 EtherCAT 几乎没有设备容量限制,最大从站设备数可达 65535 个,使得网络中无需交换机的存在,仅通过设备间的拓扑结构即能使得 EtherCAT 数据直达每个从站。
④ 同步的精准性

对于像多个伺服轴执行协同运动等一类应用,其对数据同步性要求甚高。而 EtherCAT 可选择使用分布式时钟(DC)的方式同步节点,并采用完全基于硬件的时间校准机制,使得整个系统抖动时间远小于 1us,能够完全适用于这样的应用之下。如下图所示,300 个 EtherCAT 站点间的信号时间抖动仅有 20ns:
⑤ 高可用性


EtherCAT 可通过简单的措施实现线缆的冗余性。通过将网络中最后一个站点与主站设备中的以太网端口连接,即可将线型拓扑结构扩展为环型冗余拓扑结构。当线缆损坏或站点故障发生时,主站堆栈中的附加软件检测就会检测到,并立刻切到换冗余线路中运行,而各站点无需为此而改变,甚至不会意识到网络通信正在冗余线路中运行。
ISO/OSI 参考模型

EtherCAT 仅使用了物理层、链路层、应用层三层协议,与多数传统的现场总线相同,但相比于其它实时以太网协议,如 PROFINET、EtherNet/IP 等,其协议栈更加精简。这也是 EtherCAT 协议的实时性优越于其它实时以太网协议的重要原因之一。
EtherCAT 主从架构
EtherCAT 网络采用主从架构,网络组态于 PC 主机上进行配置,需要使用到相应的 EMI(EtherCAT Master Information Files)、ESI(EtherCAT Slave Information Files)文件,经专用配置软件(通常于主站配置软件中集成)进行配置后生成 ENI(EtherCAT Network Information Files)文件下载至主站中,主站便依据该文件进行整个网络的识别。
图中关于 EtherCAT 从站设备的内部组成,即是一个实现 EtherCAT 协议 OSI 模型的过程:RJ45 网口、PHY 物理层芯片用于实现物理层协议;ESC 用于实现链路层协议,通常使用倍福官方的 ET1100 芯片实现;MCU 则用于实现应用层协议,需要厂商自行根据相应的协议编写程序代码,或是直接使用协议栈代码实现。
EtherCAT 运行机制
EtherCAT 的关键在于每个节点对以太网数据帧进行处理。在通信过程中,每个从站从主站发送过来的数据帧中读取数据,与此同时,将自身产生的数据插入到该数据帧中,然后转发到下一个从站。这种传输方式提高了带宽的利用率,通常一个数据帧就可以完成一个周期的通信。

EtherCAT 的拓扑结构
EtherCAT 支持多种拓扑结构:线形、树形、菊花链形等等。由于 EtherCAT 基于传统以太网,因此可以使用标准以太网电缆或光缆进行连接,使用 100Base-TX 电缆时,每个站之间距离可达 100 米,整个网络最多可以连接 65535 个设备。不仅如此,EtherCAT 还支持热连接、热插拔、冗余、安全等功能。

EtherCAT 的使用成本
使用 EtherCAT 的成本非常低廉,任何带有以太网控制器的控制单元都可以作为 EtherCAT 主站,从站可以使用多家供应商提供的产品,也可以使用 ETG 提供的从站源码进行开发。
EtherCAT 的性能
控制 1000 个开关量输入和输出的刷新时间大约为 30us。单个以太网帧最多可以容纳 1486 字节的过程数据,相当于 12000 位开关量数字输入和输出,刷新时间大约为 300us。控制 100 台伺服电机的数据通信周期约为 100us。
由于 EtherCAT 使用分布式时钟,因此也具有良好的实时性能。每个具有分布式时钟的从站周期性地与参考时钟进行同步,消除误差,各从站时间误差小于 1us。

EtherCAT 帧结构
因为 EtherCAT 采用了 IEEE 802.3 作为其标准以太网帧,只是对 IEEE 802.3 Ethernet 规格进行扩充,并未对基本结构进行任何变更,因此可以转送标准的 Ethernet 帧内的数据,同时可以使用标准的以太网控制器,无需单独设计硬件。

以太网帧分为以太网头、以太网数据和帧校验序列几个部分。EtherCAT 在标准以太网帧的基础上进行了一定的修改:
- 以太网头:EtherType 为 EtherCAT 保留,设为 0x88A4 ,以与其它以太网帧相区别。
- 以太网数据:以太网数据分为 EtherCAT 头与 1 个以上的 EtherCAT 子报文两个部分。 细分 ETC Header,前 11bit 表示子报文的长度,范围为 44\~1498 字节;中间 1bit 保留,最后 4bit Type \= 1,表示从站通信。

一个 EtherCAT 报文由数个子报文组成,总长度在 44\~1498 字节之间。每个子报文分为 10 字节的报文头、0\~1486 字节的数据和 2 字节的工作计数器三个部分。
- Cmd:表示 EtherCAT 指令类型,即应当如何处理后面的数据。
- Idx:表示帧的索引号,用来帮助主站对报文进行识别。
- Address:表示从站地址,有三种寻址模式,分别为位置寻址、节点寻址、逻辑寻址。
- Len:表示报文数据的长度。
- R:表示保留位。
- M:表示后续报文标志,0 表示当前为最后一个报文,1 表示 EtherCAT 随后将提供更多报文。
- IRQ:表示中断请求寄存器。
- Data:表示数据区
- WKC:表示工作计数器。
EtherCAT 设备寻址方式
在 EtherCAT 的每个子报文中,有 32 位空间用于对 EtherCAT 设备进行寻址。寻址方式有三种,分别为:
- 位置寻址
- 节点寻址
- 逻辑寻址
位置寻址

位置寻址方式是根据从站的连接顺序,即物理位置实现的。在报文头的 32bit 地址中,前 16bit 的 Position 用于存放地址值,Offset 用于存放 ESC 逻辑寄存器或者内存地址。报文每经过一个从站设备,其 Position 中的地址值加 1。当一个从站接收到 EtherCAT 报文后,如果报文中的地址值为 0,则该报文就是这个从站要要接收的报文。

在上图中,如果需要总线上第 8 个设备响应报文,则主站需要将报文的地址设为 0xFFF9,当报文经过第 1 个从站时,地址为 0xFFF9,不等于 0,第 1 个从站不会响应报文,报文地址加 1,变为 0xFFFA。当报文经过第 2 个从站时,地址为 0XFFFA,不等于 0,第 2 个从站不会响应该报文,报文地址加 1,变为 0xFFFB。以此类推,当报文到达第 8 个从站时,此时地址值为 0x0000,当前从站将接收报文。
节点寻址
在报文中,报文头的 32bit 地址,前 16bit 的 Address 用于存放站点地址值,Offset 用于存放 ESC 逻辑寄存器或者内存地址。在每个从站中站点地址保存在寄存器(0x0010) 中。顺序寻址时,主站可以对每个从站的站点地址进行设置,也可以直接读取每个从站的的站点地址。
节点寻址方式的优点是,每个从站的地址与其在总线中的位置无关。在添加/删除从站,甚至是改变总线拓扑结构的时候都能对从站进行正确的访问。

上图是节点寻址方式的示意图。8 个从站的地址与其在总线中的位置并没有关系。出于直观的目的,4 台伺服驱动器的地址被设置为连续的,4 个 I/O 模块的地址被设置为连续的,在实际中并没有这样的要求。
逻辑寻址
EtherCAT 的第三种寻址方式是逻辑寻址,首先需要了解的是 FMMU。
FMMU:FMMU 称为总线内存管理单元,它存在与从站芯片 ESC 中,负责对从站物理地址与主站逻辑地址进行翻译并建立映射关系。主站在总线启动过程中对 FMMU 进行配置,内容包括:
- 逻辑地址的起始地址
- 数据长度(按跨字节数计算)
- 逻辑地址的起始位
- 逻辑地址的终止位
- 从站物理地址的起始地址
- 从站物理地址的起始位
- 操作类型(只读、只写、读写)
- 使能
在报文中,使用报文头的 32bit 地址的全部,用来表示大小为 4GB 的逻辑地址空间。

以上图为例,FMMU 将逻辑地址中 0x00012345 第 2 位开始的,到 0x00012346 以第 2 位终止的区域,与从站物理地址中 0x0010 第 0 位开始的区域进行映射。
当从站收到来自主站的报文时,会检查报文中的地址是否与 FMMU 中的地址相符,如果有,将根据操作类型进行读写操作。

这种寻址方式的优点是,在主站想对每个从站进行访问的时候,只需要对逻辑空间中的地址进行操作,而无须关心该地址对应的从站物理地址,减轻了主站的负担。
总结
EtherCAT 使用三种方式对设备进行寻址,在启动过程中,使用顺序寻址方式为从站分配节点地址,然后通过节点寻址方式配置从站寄存器,将逻辑地址与从站物理地址进行映射,之后就可以使用逻辑寻址方式进行过程数据交换了。
EtherCAT 同步管理器
EtherCAT 从站芯片 ESC 可以用于主站于从站之间的数据交换,但是它有一些弱点:
- 数据的完整性不能保证(必须由软件实现协同数据交换)
- 数据安全不能保证(必须由软件实现安全机制)
- 主站和从站都必须轮询存储器,直到一方确认访问完成。
EtherCAT 使用同步管理器 SM 进行主站与从站间的数据交换,并产生改变通知中断,发送给双方。SM 由主站配置,并且使用一个缓冲区用于数据交换。缓冲区的访问由 SM 硬件控制,而且必须首先访问起始地址,否则将拒绝访问。在起始地址被访问之后,整个缓冲区都可以进行访问,当访问到结束地址时,缓冲区状态将改变,产生中断。如果设置了看门狗,则看门狗也可以触发中断。
SM 支持两种通信模式:
- 缓存模式
缓存模式支持任意时刻访问主站和从站上的通信缓冲区。接受方总可以读取发送方最新写的缓冲区数据,发送方总可以更新缓冲区的值。如果写缓冲区比读缓冲区速度快,旧数据将会丢失。缓冲模式通常用于 PDO 的 TXPDO 和 RXPDO 通信。
- 邮箱模式
由于使用了握手机制,在邮箱模式数据不会丢失,。主站和从站都可以访问缓冲区,但前提是另一方已经结束访问。首先,发送方写入缓冲区,然后写操作被锁定,直到接收方读取完数据。邮箱模式通常同于应用层的非周期性数据交换。
EtherCAT 物理层和链路层
物理层
倍福对 EtherCAT 协议的物理层实现提供了两种方案:普通方案以及 EtherCAT P 方案;
① 普通方案:采用通用的、低成本的 RJ45 接口,以及物理层 PHY 芯片,通信介质可采用 TX(双绞线,最大传输距离 100m)或 FX(光纤,最大传输距离 20km)进行传输,另有 LVDS 形式可供进行电路板级的协议数据传输。

②EtherCAT P 方案:EtherCAT P(P \= power,电源)是对 EtherCAT 标准协议的补充。它不仅传输通信数据,而且通过单根、标准的四线以太网电缆传输外围电压。

链路层
EtherCAT 链路层的总体特点如下:
① 采用 IEEE 802.3 标准以太网帧结构;
② 支持 UDP,不支持 IP 协议;
③ 报文帧的传输要通过专用硬件(如 ET1100)。
其帧结构如下图所示:

EtherCAT 报文帧分为基础报文帧和 UDP 报文帧,区别在于帧结构中是否含有 UDP 的数据部分,并均支持带上 VLAN 标签;而由于 UDP 报文帧因为时延较大,应用较少,因此我们仅以基础报文帧进行介绍,以下为基础报文帧的帧结构:

其中 Datagram 部分参数含义如下:
Cmd:8bit 命令码。具体有 RD(读)、WR(写)、RW(读写)等行为,结合下面提到的数种寻址方式(AP、FP、L、B)共同构成命令码部分;

Idx:8bit 索引值,表示该帧的索引号,可供主站识别该帧;
Address:32bit 寻址方式,又可细分为 4 种具体的寻址方式:
1)广播寻址(B):表明每个从站都可识别该帧;
2)自增量寻址(AP):从 0 开始,以负自增的形式,顺序识别每一个从站(0x0000、0xFFFF、0xFFFE……),每经过一个从站,该帧的地址值会自动减 1;通常用于主站启动时进行整个网络组态的扫描;

3)定点寻址(FP):表明该帧识别特定从站种的特定数据,包括 16bit 节点地址与 16bit 偏移量;意味着固定寻址最多带动 65536(216)个从站,且每个从站的数据最多也为 65536(216)个:

4)逻辑寻址(L):主站配备 4G(232)的内存空间用于逻辑地址的存储,而逻辑地址依据各从站中的 FMMU 管理机制,映射至所有从站中的所有数据;主站在帧中只需携带某个逻辑地址,即可寻址到任意从站中的任意数据:

Len:11bit 数据段长度,与后面 Data 段长度对应;
R:3bit 保留位;
C:1bit 帧循环标志;
M:1bit 后续报文标志,0 表示当前报文为最后一个报文,1 表示后续会提供更多报文;
IRQ:16bit 中断请求标志;
Data:报文帧数据段,可为 0-1486 Bytes;
FMMU 管理机制:

FMMU 管理机制用于每个从站的每个数据进行自身物理地址与通信逻辑地址的映射。对于主站而言,相同一个逻辑地址可以对应多个从站的物理地址,从而能够实现 1 条报文访问多个从站的特定数据。
WKC 自增计数器:

自增计数器,用于校检报文帧的命令是否正确的运行。报文帧的命令码得到正确执行后,相应的 WKC 会自增相应的值,在该报文从发出到返回主站时,主站会依据报文帧 WKC 内的值,与发送时计算得出的正确执行命令时应该接收到的值作对比,从而判断该报文帧有无正确执行。
EtherCAT 应用层

EtherCAT 应用层支持多种设备行规以实现邮箱通讯,包括 CANopen、SERCOS、HTTP 等,基于 EtherCAT 的应用层行规被称为 xoE 协议(xxx over EtherCAT)。设备开发中,从站设备无需支持所有行规,根据其应用选择最合适的一种即可。下面将以应用最为广泛的 CoE 协议举例描述。
CoE 协议

CoE 全称 CAN application protocol over EtherCAT,是 EtherCAT 应用层协议实现的一种,其特点是根据 CiA402 协议编写,使用对象和对象字典的功能实现邮箱通讯。
CANopen 协议已经有成熟且大规模的应用,使用 CoE 协议,相关设备只需要经过少量的更改即可应用于 EtherCAT 协议上,大部分 CANopen 的固件也可以得到重复利用。
站点状态机

EtherCAT 对于站点所处的状态与运行功能进行了规范,如上图所示,各状态功能简介如下:
Init:初始化状态,站点在此状态下将检查数据链路是否正确,与应用层无数据交互。
Pre-Op:预操作状态(POP),站点在此状态下仅进行邮箱通信,不进行过程数据交互。
Safe-Op:安全运行(SOP),站点在此状态下可进行邮箱通信,并允许过程数据输入,不可输出。
OP:操作状态,站点可进行完全的数据通信,处于正常的工作状态。
Bootstrap:引导模式,仅适用于 FoE 的邮箱通信,用于固件的更新
同步模式及工作原理
EtherCAT 存在三种同步的模式:Free RUN、SM 同步(Sync Manager,同步管理器)、DC 同步(Distributed Clock,分布式时钟),下面将简要介绍三种同步模式及其工作的原理。
①Free RUN

Free RUN 模式表示网络中各站点运行于异步的状态下,不进行同步。
从站应用程序完全按照从站自身时钟的时间片进行触发与运行,与报文帧的收发无关。Free RUN 模式分离了主站与从站的时间关系,当主从站时钟频率差别较大时,可能会出现丢帧等状况。该模式适用于完全没有同步性要求的应用。
②SM 同步

SM 同步模式依赖于 EtherCAT 主站发送的同步帧,各从站依据收到的同步帧的数量进行自身应用程序的触发,如某从站收到两次 EtherCAT 同步帧,就进入一次中断服务函数进行相应的处理。
SM 同步模式的同步精度受多种因素的影响,如:主站自身的时间抖动,从而影响同步帧的发送;报文帧的物理传输时延决定了每个从站收到同步帧的时间一定有差异,在整个网络比较大时这个时间差也会放大。因此该模式比较适用于同步性要求一般的应用。
③DC 同步

DC 同步模式的形式与 SM 同步类似,都是依据于中断触发信号来进行自身应用程序的触发,不同在于 SM 同步依据的是同步帧,而 DC 同步依据的是各站点内 ESC 进行产生的 SYNC 信号。
EtherCAT 制定了一套完整的机制以保证 DC 同步能够精确运行,其运行流程总体可分为两个阶段:初始化阶段和动态补偿阶段,如下图所示:

初始化阶段将网络中各设备在上电时紊乱的触发时间修正到可以容忍的水平,其过程是:
1)主站启动后发送广播帧扫描整个网络,各从站计算该报文环回自己一次的时间戳值,并将该值写入本地的寄存器中,差值计算从而得到报文帧的传输延时,如下图所示。后续再将该传输延时补偿到 SYNC 信号的发送过程中,从而消除物理传输延时的影响。

2)以从站中第一个具有 DC 单元的从站的时钟作为参考时钟,发送大量的 ARMW 报文将读取参考值并发送至各个从站当中去,使得每个从站本地的时钟都调整到接近参考时钟的值。
而由于存在时钟源不同,晶振频率抖动等等不可控因素,网络还需要进入动态补偿阶段,使所有站点的同步时间抖动能够长时间的维持在一个较低的水平,其过程如下:

主站的每个发送周期都会发送 ARMW 报文,将参考时钟值发送至所有站点,各站点对比该参考值与本地时钟值(结合传输延时)后,进行本地时钟值的更新(ESC 硬件的加速或减速)。从而实现整个网络长时间低水平的时间抖动。