3. EtherCAT数据抓包方法分析
检测主站是否请求从站进入op状态
原理性分析:0x120是ESC的AL control寄存器,通过分析该值知道主站是否请求从站进入相应的状态,比如从站进不了op,那么可以先根据该指令判断主站是否请求从站进入op了。AL control寄存器不同值对应不同含义:
1: Request Init State
3: Request Bootstrap State
2: Request Pre-Operational State
4: Request Safe-Operational State
8: Request Operational State
通过设置过滤条件ecat.ado == 0x120,找到该寄存器值为8,从而知道在第32007条报文,主站开始请求从站进入op。
检测从站是否进入op状态
原理性分析:0x130是ESC的AL status寄存器,通过分析该值知道从站是否已进入相应的状态,比如从站是否进入op,AL status寄存器不同值对应不同含义:
Actual State of the Device State Machine:
1: Init State
3: Bootstrap State
2: Pre-Operational State
4: Safe-Operational State
8: Operational State
通过设置过滤条件ecat.ado == 0x130,找到该寄存器值为8,从而知道在第32812条报文,从站才开始进入op,才有周期过程数据(pdo数据),也就是说,分析主站的周期性数据,报文范围是从32812开始算起。
检测主站数据发送周期情况
原理性分析:通过分析进入op后,发送的过程数据逻辑寻址指令Lxx来分析主站报文周期抖动情况,比如每个周期都会发送LWR逻辑写,那么可以将LWR指令过滤出来,cnt等于0表示刚从主站出来,还没经过任何从站,所以WKC为0。
根据章节2连接好拓扑,将数据包通过侦听器抓取出来后,设置数据显示格式如下:
过滤出在第32812条报文,从站开始进入op,主站开始发送周期性报文。
分析周期性报文,注意到每个周期性报文包含三个子报文(逻辑寻址LRD,LWR,LRD)和DC指令,在DC模式下,每个DC周期都会发送相关的ARMW命令。
过滤出周期性报文,使用指令ecat.sub1.cmd == LRD && ecat.sub1.cnt == 0,过滤出子报文1为LRD且计数器值为0(表示从主站发出,未经过从站)的周期性报文,选择三角进行报文排序,可以是从小到大,或者从大到小,可以看出主站周期最小981.160us,最大是1015.040us,wireshark报文保存为CSV格式,然后excel打开 通过对time列数据进行excel波形图分析,绘制出波形图,可以看出主站周期抖动情况,是否有数据包丢失等问题。
全部0条评论
快来发表一下你的评论吧 !