0.工具准备
1.EtherCAT主站
2.EtherCAT从站(本文使用步进电机驱动器)
3.Wireshark
1.EtherCAT报文帧结构
EtherCAT使用标准的IEEE802.3 Ethernet帧结构,帧类型为0x88A4。EtherCAT数据包括2个字节的数据头和44-1498字节的数据。数据区由一个或多个EtherCAT子报文组成,每个子报文对应独立的设备或从站存储区域。EtherCAT数据帧结构定义如下所示:
图中部分内容的定义如下:
3.EtherCAT报文-BWR抓包
BWR报文也就是广播写报文,在主站初始化从站时通常会使用BWR报文切换从站状态机。
3.1 主站发送BWR报文
主站向从站(仅1个)的0x120寄存器(状态控制寄存器)写入0x0001也就是请求从站切换到INIT状态。报文如下:
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 子报文头
命令:8(广播写命令)
索引(帧存放临时缓冲区编号):0x0000
从站地址:0x0000 (这里由于是主站发送的BWR报文,通常都置0x0000)
偏移地址:0x0120(所谓偏移地址就是寄存器地址)
长度:2(和寄存器地址长度相对应,0x0120寄存器长度为2字节)
保留位:0
是否阻止循环帧发送:0(报文不是循环报文)
是否有后续子报文:0(这是最后一个子报文)
状态(中断到来标志):0x0000
3.1.3.2 数据
数据:0x0001(表示请求从站切换到INIT状态)
3.1.3.3 WKC
WKC(工作计数器):由于是主站发出的BWR报文,还没经过从站,因此wkc为0
后面的连续的00是填充字节,使EtherCAT报文满足以太网报文最小64byte的要求。
3.1.3.4 FCS
由于Wireshark不支持显示FCS,这里省略4Byte的FCS。值得说明的是,能够被Wireshark抓取到的报文,都是FCS校验通过的帧。
3.2 主站接收从站返回的BWR报文
主站向从站(仅1个)的0x120寄存器(状态控制寄存器)写入0x0001也就是请求从站切换到INIT状态,随后会收到从站返回的BWR报文,内容如下:
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 子报文头
命令:8(广播写命令)
索引(帧存放临时缓冲区编号):0x00
从站地址:0x0001(从站返回的顺序号)
偏移地址:0x0120(所谓偏移地址就是寄存器地址)
长度:2(和寄存器地址长度相对应,0x0120寄存器长度为2字节)
保留位:0
是否阻止循环帧发送:0(报文不是循环报文)
是否有后续子报文:0(这是最后一个子报文)
状态(中断到来标志):0x0000
3.2.3.2 数据
数据:0x0001(表示请求从站切换到INIT状态)
3.2.3.3 WKC
WKC(工作计数器):经过了一个从站的BWR报文,wkc = 0 +1 = 1。
后面的连续的00是填充字节,使EtherCAT报文满足以太网报文最小64byte的要求。
3.2.3.4 FCS
由于Wireshark不支持显示FCS,这里省略4Byte的FCS。值得说明的是,能够被Wireshark抓取到的报文,都是FCS校验通过的帧。
总结
BWR每经过一个从站wkc+1,本例接入从站数量为1,因此返回wkc=1。