倍福EAP协议应用讲解
前言
倍福提供了用于在以太网上进行实时通信的EtherCAT协议,EtherCAT协议属于现场层协议,即具有主从结构,通信只能由主站发起,从站不具备发起通信的功能,只能被动接收数据并插入数据到通信帧中。
EtherCAT协议中主站使用标准以太网卡实现,例如intel i210网卡等,一般PC上均配备有以太网卡,也称为以太网适配器(Ethernet Adapter),从站装配有专门处理EtherCAT 协议的芯片,称之为ESC(EtherCAT SubDevice Controller)芯片,注意,ESC芯片≠以太网卡芯片,其是专有芯片,仅用于EtherCAT从站设备使用。
EAP协议
既然已经有了EtherCAT协议,为什么还要开发一个EAP协议呢,如上所述,EtherCAT协议是主从通信,如果是需要两个主站之间进行实时通信,那就不存在主从的说法,这种情况下就不可以使用EtherCAT协议进行通信,针对这种需求,开发了EAP协议,EAP协议用于两个或多个主站之间进行实时通信。
这里有两个重要的知识点:
1)主站指的是运行有TwinCAT XAR环境的PC,没有运行TwinCAT XAR环境不可以称之为主站;
2)主站通信所使用的网卡都是标准以太网网卡,网卡必须兼容且安装有TwinCAT实时网卡驱动程序,如果不能安装实时网卡驱动是无法进行实时通信的!
EAP通信模型
EAP协议使用“发布/订阅”模型(但不限于此),发布者不需要知道网络中是不是存在订阅者,只负责“发布”,订阅者也不知道是不是存在发布者,只负责“接收”,至于是谁发送的,订阅者并不关心。实际上使用的时候,大部分情况下都会事先进行网络规划,规划员就可以清楚地知道有几个发布者,有几个订阅者,以及他们彼此之间如何进行通信。
EAP发送方式
EAP即支持确定性的实时通信,也支持异步的非实时通信,非实时通信仅支持AoE(ADS over EtherCAT)
等等,这里说的是EAP通信,为什么又提到EtherCAT了,要注意EAP是EtherCAT协议族的一部分,定义在ETG 1020中,属于EtherCAT Protocol Enhancement 部分所以并不是说EAP和EtherCAT是并列关系,属于包含关系!
1)推送模式
EAP实现了主站间的实时通信,这里所说的实时就是指过程数据交换,这种情况下,发布者可以周期性发送过程数据或者过程数据有变化时触发发送,使用的是“发布/订阅”模型,也是EAP最主要的应用方式。
2)拉取模式
拉取模式使用的是“客户端/服务器”模型,这种情况下,由EAP Client发起请求向EAP Server请求数据,EAP Server将请求的数据发送回EAP Client完成一次通信,拉取模式只能是点对点的通信!而且对于一个EAP设备而言,可以即做服务器也做客户端!这种模式效率低,因为需要客户端发起请求,消耗一个数据帧,服务器响应请求还要消耗一个数据帧。
EAP寻址方式
EAP协议支持单播,组播,广播三种连接类型,支持基于MAC寻址,基于 AMS NetID寻址,基于IP地址寻址三种寻址方式,不同的寻址方式会影响连接类型!例如,基于AMS NetID的寻址方式不支持组播和广播!
1)基于MAC寻址
基于MAC寻址支持单播,组播,广播,由于是使用MAC地址进行寻址,所以不存在网络层的概念,仅支持到数据链路层这个级别,因此想要“跨网”通信是不可能的,不支持路由器(因为路由器工作在网络层)
MAC地址是唯一的,没有网络的概念,那怎么能支持组播和广播呢,这里规定了一个固定的规则:
广播MAC地址必须是:FF-FF-FF-FF-FF-FF;
组播MAC地址是:01-01-05-04-00-00,这里有一个复杂的计算规则,对于倍福的设备,只需填写这个地址即可。
2)基于AMS NetID寻址
这中寻址方式更上一个台阶,到了网络层上,本质上是使用了ARP协议,将AMS NetID的地址和MAC地址由ARP协议来进行解析对应,ARP协议是应用在局域网中的一种地址解析协议,该种寻址方式也不能支持“跨网”通信,也不支持路由器。
3)基于IP寻址
基于UDP/IP进行寻址,IP地址由ARP协议负责解析到MAC地址上,此种方式支持“跨网”通讯,可以接入路由器。
广播的IP地址:255.255.255.255;
组播的IP地址范围:244.0.0.0-239.255.255.255
EAP性能
由于EAP可以工作在网络层上,也可以工作在数据链路层上,支持仅有交换机的局域网,也支持包括路由器的广域网,但是不同工作环境下EAP的性能会受到显著的影响。
1)仅有交换机的局域网内,不存在向上转发数据的时间开销,一般可以达到10ms的周期。
2)如果网络中有路由器,需要进行跨网通信,EAP需要使用UDP/IP的寻址方式,时间开销增大,数据包需要进入NDIS堆栈进行处理,此时可以达到100ms的周期
EAP帧结构
EAP可以通过Ethernet协议传输,也可以通过UDP/IP协议传输,通过Ethernet协议传输时,Ethernet type=0x88A4,通过UDP/IP协议传输时,UDP端口=0x88A4。通过Ethernet传输时,使用符合EtherCAT规定的数据帧结构,整个EAP帧被包含在了EtherCAT的用户数据区。
这里需要特别注意,一台PC的网口可以实现多个Publisher,每个Publisher有自己的ID,通常按照顺序ID依次为1,2,3…
不同架构下数据的对齐方式在EAP通信中的处理办法
倍福的PC有基于X86架构的,例如CX2030,也有基于ARM架构的,例如CX9020,不同架构平台下,数据的对齐方式有区别,对于X86架构,最小对齐单位是1byte,对于ARM架构,最小对齐单位是2byte或者4byte,如果你使用的两个PC的架构不一样,如下图所示的情况,就需要特别注意对齐的问题,否则可能导致变量出现错位无法正确识别!
一般处理办法是,当需要使用自定义的数据类型,例如结构体或者已有数据类型,最好按照以下顺序编排变量,优先4字节的变量,例如DINT,DWORD等,其次2字节的变量,例如UINT,WORD,最后1字节的变量,例如BOOL,SINT等。对于STRING类型的变量,默认长度为80byte+1byte,如果自己指定长度为x,则必须保证x+1是4的整数倍
EAP诊断
我们通常最为关注的是EAP的实时性能,即变量更新的最短周期,这个关键参数可以通过订阅者Subscriber下的变量的属性项Quality来判断,Quality表示该变量已经经过多少个100us没有更新,但是这个值也会受cycle time的影响,例如发布者的任务周期是10ms,但是订阅者所关联的任务周期是100ms,那就是说虽然发布者每10ms就会发送一次,但是订阅者每100ms才会去更新一次变量,所以这种情况下,Quality的值必定包含了中间空跑的9个周期,所以最理想的情况也不会低于90ms,Quality≥900.同样地,如果发布者的周期是100ms,订阅者的周期是10ms,那就意味着至少有9个周期订阅者收不到发布者的信息,Quality也不会低于900,所以在一个网络环境中,如果要测试实时性能,需要把发布者和订阅者所关联的任务周期需要设置成一样的时间,这样Quality反应出来的就是网络传输导致的延时。
另一个重要的变量属性是CycleIndex,此变量属性随发布者每个Task周期进行更新,同时随变量进行传送,订阅者通过接收的的CycleIndex来判断变量已经更新了几次,如果发布者的Cycleindex比订阅者接收到的CycleIndex要大,说明中间丢失了几次数据。
随变量进行传送,订阅者通过接收的的CycleIndex来判断变量已经更新了几次,如果发布者的Cycleindex比订阅者接收到的CycleIndex要大,说明中间丢失了几次数据。