0.工具准备
1.EtherCAT主站
2.EtherCAT从站(本文使用步进电机驱动器)
3.Wireshark
1.EtherCAT报文帧结构
EtherCAT使用标准的IEEE802.3 Ethernet帧结构,帧类型为0x88A4。EtherCAT数据包括2个字节的数据头和44-1498字节的数据。数据区由一个或多个EtherCAT子报文组成,每个子报文对应独立的设备或从站存储区域。EtherCAT数据帧结构定义如下所示:
图中部分内容的定义如下:
3.EtherCAT报文-APRD抓包
APRD报文也就是自动增量读报文,在主站还未设置从站站点地址前,可以使用APRD报文读取各个从站设置的地址别名,并在后续运行中作为从站站点地址使用。使用地址别名作为从站站点地址,可以保证网段拓扑改变或者增删设备时,从站设备仍然可以使用相同的设置地址,这在实际使用中非常有用。
3.1 主站发送APRD报文
主站向从站(2个)发送APRD报文,读取拓扑顺序为2的从站的站点别名寄存器(0x0012),报文如下:
3.1.1 以太网帧头
目的地址:ff:ff:ff:ff:ff:ff
源地址:01:01:01:01:01:01
帧类型:0x88A4
3.1.2 EtherCAT头
EtherCAT数据长度:0x00e(14)
保留位:0
类型:0x1(EtherCAT命令)
3.1.3 子报文
3.1.3.1 子报文头
命令:1(自动增量读命令)
索引(帧存放临时缓冲区编号):0x01
从站地址:0xffff (对应16位有符号数-1,每经过1个从站该值+1,到从站2时该值变为0,从站2发现是寻址到自己的报文便会进行处理)
偏移地址:0x0012(所谓偏移地址就是寄存器地址)
长度:2(和寄存器地址长度相对应,0x0012寄存器长度为2字节)
保留位:0
是否阻止循环帧发送:0(报文不是循环报文)
是否有后续子报文:0(这是最后一个子报文)
状态(中断到来标志):0x0000
3.1.3.2 数据
注意:图中红框标记处为数据
数据:0x00
3.1.3.3 WKC
WKC(工作计数器):由于是主站发出的APRD报文,还没经过从站,因此wkc为0
后面的连续的00是填充字节,使EtherCAT报文满足以太网报文最小64byte的要求。
3.1.3.4 FCS
由于Wireshark不支持显示FCS,这里省略4Byte的FCS。值得说明的是,能够被Wireshark抓取到的报文,都是FCS校验通过的帧。
3.2 主站接收从站返回的APRD报文
主站向从站(2个)发送APRD报文,读取拓扑顺序为2的从站的站点别名寄存器(0x0012),随后会收到从站返回的APRD报文,内容如下:
3.2.1 以太网帧头
目的地址:ff:ff:ff:ff:ff:ff
源地址:03:01:01:01:01:01
帧类型:0x88A4
3.2.2 EtherCAT头
EtherCAT数据长度:0x00e(14)
保留位:0
类型:0x1(EtherCAT命令)
3.2.3 子报文
3.2.3.1 子报文头
命令:1(自动增量读命令)
索引(帧存放临时缓冲区编号):0x01
从站地址:0x0001(-1 + 1 + 1 = 0x0001)
偏移地址:0x0012(所谓偏移地址就是寄存器地址)
长度:2(和寄存器地址长度相对应,0x0012寄存器长度为2字节)
保留位:0
是否阻止循环帧发送:0(报文不是循环报文)
是否有后续子报文:0(这是最后一个子报文)
状态(中断到来标志):0x0000
3.2.3.2 数据
数据:0x0032
3.2.3.3 WKC
WKC(工作计数器):APRD报文只会有一个从站处理,因此wkc = 0 + 1= 1。
后面的连续的00是填充字节,使EtherCAT报文满足以太网报文最小64byte的要求。
3.2.3.4 FCS
由于Wireshark不支持显示FCS,这里省略4Byte的FCS。值得说明的是,能够被Wireshark抓取到的报文,都是FCS校验通过的帧。
总结
(1)顺序寻址时,从站的地址由其在网段内的连接位置确定,用一个负数来表示每个从站在网段内由接线顺序决定的位置。顺序寻址子报文在经过每个从站设备时,其位置地址加1,从站在接收报文时,地址为0的报文就是寻址到自己的报文。例如,顺序为n的从站,使用APRD报文时则设置地址为1-n。
(2)APRD报文寻址成功情况下,WKC+1