本帖最后由 dffzh 于 2025-4-2 16:18 编辑
#技术资源# #申请原创#
@21小跑堂
关键词备注: Wireshark:网络抓包工具 EtherCAT:工业现场总线 从事工业PLC产品开发的人员,包括软件开发和技术支持等都必须掌握使用Wireshark等工具对产品进行网络抓包及解析,本文就带大家熟悉一下如何搭建抓包环境,如何抓取EtherCAT数据包及如何进行包解析。
一、搭建硬件环境 将TwinCAT软件作为主站,并通过RJ45网线连接EC(EtherCAT Coupler)耦合器。 你的电脑可能会有几个网卡,进入控制面板里的网络连接里确认:
TwinCAT中需要将网卡设置成混杂监听模式: 当然你还需要选择一个网卡,根据自身情况选择合适的网卡: 当然,配置完成后,要运行TwinCAT:
二、Wireshark抓包 首先你需要配置网卡信息: 大功告成,然后你就可以开始捕获EtherCAT总线协议的数据包: 另外,你可以通过停止捕获和开始捕获按钮进行操作:
三、EtherCAT数据包分析 我们先来看下EtherCAT总线协议的报文数据帧结构: 以太网帧头:14个byte (1) 目的地址:第一个从站的MAC(Media Accss Control, 媒体访问控制)地址; (2) 源地址:主站的MAC地址;
(3) 帧类型:对于EtherCAT,固定为0x88a4; EtherCAT头:2个byte (1) 数据长度:所有子报文长度总和,长度为11位,小端模式,所以实际是0x100d, 写成二进制:0001 0000 0000 1101 (2) 类型:1表示与从站通信; 命令:1个byte,表示寻址方式及读写方式 0x08表示使用广播寻址对所有从站写入数据; 其他操作命令可以参考相关文档,这里不详细介绍。
关于EtherCAT寻址方式的解析: 一个EtherCAT数据帧里包含很多个报文,但无论什么样式的报文,其目的只有一个,那就是读写从站寄存器或内存。 所以所谓的寻址就是以什么方式访问哪个从站的哪个寄存器或内存。
EtherCAT的寻址方式主要包括4种,如下所示: 索引:1个byte,BWR命令下每发出1条子报文,索引会加1,范围在0x80到0xff;
可以理解为帧编码; 地址区:4个byte, 对于逻辑寻址:地址区就只有一个32位的LogAddr:0x 01010002; 对于其他寻址:地址区拆分成Slave Addr:0x0002和Offset Addr:0x0101;
长度:2个byte,报文数据长度, 0000 0000 0000 0001: 低11位:数据长度; 第2/3/4/5高位:保留位;
最高位0:帧结构里的M,为0表示只有一帧,为1表示还有后续报文;
状态位:中断到来标志,
数据:报文结构,用户定义; WKC:2个byte,工作计数器,WKC记录子报文被从站操作的次数,主站为每个通信服务子报文设置预期的WKC。发送子报文中的工作计数器初值为0,子报文被从站正确处理后,工作计数器的值将增加一个增量,主站比较返回子报文中的WKC和预期WKC来判断子报文是否被正确处理。WKC由ESC在处理数据帧的同时进行处理,不同的通信服务对WKC的增加方式不同。
下面给大家分析一条广播寻址的广播读(BRD)报文: 其中偏移地址0x0130,通过查阅ESC芯片的数据手册就可以知道,0x130寄存器存放的就是从站的链路层状态(AL Status): 另外,
附件还提供了本人抓取的EtherCAT报文,文件名称为“EtherCAT报文.pcapng”,供大家查看。
|
通过Wireshark工具对EtherCAT总线抓包,并对抓包数据进行逐字解析,图文结合,标注得当。