EtherCAT通讯简介
笔者的话
笔者工作需要写Maxon驱动器EPOS 4与倍福TwinCAT间的接口文件,由于之前没有学过计算机网络基础,本篇文章主要讲一下自己刚接触EtherCAT通讯时用到的计算机网络知识,和EtherCAT数据帧的构成,阅读本文中的OSI模型部分可以更好掌握EtherCAT通讯的运行原理,速览EtherCAT通讯可略过。如果读者想系统学习计算机网络和通讯,推荐入门者阅读:《网络是怎样连接的》[日]户根勤。
概述
EtherCAT:Ethernet Control Automation Technology,将计算机网络中的以太网技术应用于工业自动化领域,传输速度更快,数据包容量大,传输距离长。与CANopen相比1:
- 波特率:
CANopen最多几Mbps,EtherCAT可达上百Mbps;
- 数据容量:
CANopen一条数据帧中最多八个字节,EtherCAT一条包含上千字节;
- 传输距离:
CANopen在1Mbps下最多四十几米,EtherCAT两个节点间使用网线可以几百米;
运行原理
OSI模型2
OSI模型(Open System Interconnection Model)是将网络通信功能分为七层的概念框架。
- 物理层:
物理层是指物理通信介质和通过该介质传输数据的技术。数据通信的核心是通过光纤电缆、铜缆和空气等各种物理通道传输数字和电子信号,本层数据为比特(bit)。 - 数据链路层:
数据链路层是指用于通过物理层已经存在的网络连接两台计算机的技术。该层管理数据帧,这些数据帧是封装在数据包中的数字信号。数据的流量控制和错误控制通常是数据链路层的重点。数据链路层通常分为两个子层:介质访问控制(MAC)层和逻辑链路控制(LLC)层。由于客户端主机最初并不知道默认网关的IP地址,可以利用ARP协议广播,找到网关IP对应的MAC地址,把包封装成帧。 - 网络层:
网络层涉及的概念包括跨分散网络或者节点或计算机的多个互连网络进行的路由、转发和寻址。网络层也可以管理流量控制。在整个互联网上,互联网协议 v4(IPv4)和 IPv6 是主要的网络层协议。本层数据将段加上IP地址(源IP和目标IP)封装成包。 - 传输层:
传输层的主要重点是确保数据包以正确的顺序到达,没有丢失或错误,或者在需要时可以无缝恢复。流量控制和错误控制通常是传输层的重点。在这一层,常用的协议包括传输控制协议(TCP)(一种近乎无损、基于连接的协议)和用户数据报协议(UDP)(一种有损的无连接协议)。TCP 通常用于所有数据必须完好无损的情况(例如文件共享),而 UDP 则用于没有必要保留所有数据包的情况(例如视频通话可以接受丢包,具有实时性)。本层数据将报文加上端口号(源端口+目标端口)封装为段。 - 会话层:
会话层负责会话中两个独立应用程序之间的网络协调。会话管理一对一应用程序连接的开始和结束以及同步冲突。网络文件系统(NFS)和服务器消息块(SMB)是会话层的常用协议。 - 表示层:
表示层主要关注应用程序发送和使用的数据本身的语法。例如,超文本标记语言(HTML)、JavaScript 对象标记(JSON)和逗号分隔值(CSV)都是描述表示层数据结构的建模语言。 本层涉及数据的编码、解码、压缩、解压。 - 应用层:
应用层关注应用程序本身的特定类型及其标准化通信方法。例如,浏览器可以使用超文本传输安全协议(HTTPS)进行通信,而 HTTP 和电子邮件客户端可以使用 POP3(邮局协议版本 3)和 SMTP(简单邮件传输协议)进行通信。
在OSI模型中的通信流程:
- 发送方的应用层将数据通信向下传递到下一个层;
- 在传递数据之前,每个层都会为数据添加自己的标头和寻址;
- 数据通信向下层移动,直到最终通过物理介质传输;
- 在介质的另一端,每层根据该级别的相关标头处理数据;
- 在接收端,数据向上层移动并逐渐解包,直到另一端的应用程序收到数据;
说人话部分:
MAC地址相当于是名字,IP地址相当于是住址,端口相当于是发送的东西拿什么读。客户端要发送信息到一个地方,就得知道地址(IP),但是他一般没办法直接送过去,就得送到一个邮件的集散地(网关),广播过之后可以知道网关在哪,就可以直接送过去(发送信息到网关),网关拿到信看名字(MAC)是给自己的,就拆开来,但是地址(IP)不是给自己的,就知道这是让自己帮忙送信,就发送到快递网络(互联网)里,到了当地的邮件集散点(当地网关),网关看到名字(MAC)写自己的信里的地址,发现自己认识地址(IP),就拿过去送给名字(MAC)叫这个的人,这个人拆开信就可以看到了。 广播就是,刚到这个地方,不知道网关在哪(IP),但是有个规矩,就是你说给某个名字(MAC)的人,那大家都会拿一份(交换机给人手一份),这样网关就一定能拿到,他一看是这个约定的名字(MAC),就知道这个是有人在问自己住在哪,就记录下这个人的名字和住址,再把自己的名字传回去,这样就知道了。
网络基础:
以太网帧3
以太网帧是以太网传输数据的基本单元,其结构如下图所示:
- 前导码(Preamble):这是以太网帧的开始部分,包含7个字节的交替的1和0,用于告诉接收设备有一个帧正在开始。
- 起始帧定界符(Start Frame Delimiter,SFD):这是一个1字节的字段,标志着帧的开始。
- 目标MAC地址(Destination MAC Address):这是一个6字节的字段,指定了帧的目标设备的物理地址。
- 源MAC地址(Source MAC Address):这是一个6字节的字段,指定了发送帧的设备的物理地址。
- 类型/长度(Type/Length):这是一个2字节的字段,指定了帧中数据的类型或长度。如果这个字段的值小于1500,那么它表示的是数据字段的长度;如果这个字段的值大于或等于1536,那么它表示的是数据字段的类型。
- 数据(Data):这是一个可变长度的字段,包含了帧的实际数据。
- 帧校验序列(Frame Check Sequence,FCS):这是一个4字节的字段,用于检查帧在传输过程中是否出现错误。。这个字段的值是通过对整个帧(除了FCS字段本身)进行CRC(循环冗余校验)计算得到的。当接收设备接收到一个帧后,它会使用同样的CRC算法对接收到的帧进行计算,然后将计算结果与帧中的FCS字段进行比较。如果两者相同,那么接收设备就认为这个帧没有出现错误;如果两者不同,那么接收设备就认为这个帧出现了错误。然而,CRC只能检测出错误,但不能纠正错误。如果一个帧出现了错误,接收设备通常会丢弃这个帧,并可能向发送设备发送一个错误报告,请求发送设备重新发送这个帧。
EtherCAT
如同一个高速火车:火车为以太网帧在主站与从站构成的通讯回路中不停行驶,从站为一个个火车站,可以看到整个火车,而车厢的长度可变(子报文),在每列火车经过从站时从站可以提取和插入单独的乘客(bit)或多组乘客。
EtherCAT主站
纯软件实现,不需要任何专用硬件,由EtherCAT配置工具和主站驱动组成。配置工具(倍福TwinCAT软件)解析设备描述文件,生产网络初始化命令和周期性通讯数据帧格式;主站驱动在线运行,可以在线操作从站设备。
EtherCAT从站
采用精简的OSI模型:仅使用了物理层、数据链路层、应用层三层协议,从而实时性更加优越。
EtherCAT协议
概述
-
CANopen over EtherCAT(CoE,基于EtherCAT的CANopen应用协议)
-
CANopen设备和应用行规广泛应用于多种设备类别和应用,如I/O组件、驱动、编码器、比例阀、液压控制器等。
-
EtherCAT可以提供与CANopen机制相同的通讯机制,包括对象字典、PDO(过程数据对象)、SDO(服务数据对象)等。
-
-
Servo Driver over EtherCAT(SoE,EtherCAT伺服驱动行规)
- SERCOS interface 是全球公认的、用于高性能实时运行系统的通讯接口,尤其适用于运动控制的应用场合。
-
Ethernet over EtherCAT(EoE)
- 在EtherCAT网段内实现任何以太网数据的传输;
- 交换机端口可用于连接以太网设备;
- 以太网数据帧通过嵌入到EtherCAT协议中进行传输;
-
File access over EtherCAT(FoE)
- 类似于TFTP的简单协议;
- 可通过网络访问设备中的文件;
- 将统一的固件跨网络上传到设备;
EtherCAT数据帧
采用标准的以太网帧结构,只是帧类型固定为0x88A4(十六进制数,0x为十六进制前缀,88A4转为二进制为1000100010100100,既上文中提到的代表数据类型的2个字节的字段)。
- EtherCAT数据帧中的数据包由EtherCAT头和EtherCAT数据组成。
- 若干个子报文组成EtherCAT数据区,而子报文又由子报文头、数据域及工作计数器组成。
- 子报文头标记该子报文应传输到哪一个从站,并且要读该子报文进行读或写操作;
- 子报文数据域可以是从站ESC(EtherCAT Slave Controller)寄存器,也可以是邮箱报文或过程数据;
- 16位的工作计数器(WKC,Working Counters)的值记录子报文被从站操作(读写)的次数,主站发起周期控制时,设置预期的WKC值,发送子报文中的WKC的值为0,子报文到达从站被从站正确处理后,WKC的值将增加一个量,当数据帧遍历完整个设备时,通过对比返回的WKC值,验证数据报文是否被各从站节点正确处理;
EtherCAT数据帧的传输
- 主站发起系统的控制周期;
- 主站发布下行报文,数据帧遍历所有从站设备,每个设备在数据帧经过该设备时分析寻址到的本机报文,根据报文头命令决定读取或写入数据到报文中指定位置;(从站输入数据和输出数据)
- 从站硬件把该报文的工作计数器WKC加相应的计数表示该数据被处理;
- 数据帧访问最后一个从站时,将处理的数据帧作为上行报文发送给主站,主站收到后处理返回数据;