前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EtherCAT开发_5_wireshark抓包记录

EtherCAT开发_5_wireshark抓包记录

作者头像
用户5908113
发布2024-05-14 12:24:00
1150
发布2024-05-14 12:24:00
举报
文章被收录于专栏:Pou光明Pou光明

1、TwinCAT 设置成混杂模式

保存后重启TwinCAT。

此时我的设备无法进入OP状态,WireShark也没有任何数据。

2、TwinCAT无法进入OP状态,如何再次进入到OP状态?

①点击绿色按钮后,点击弹窗的确定按钮,消除弹窗,此时仍无法进入OP状态

②重新加载设备

选择是。

可以了。

3、EtherCAT数据帧初步分析

EtherCAT采用标准的IEEE 802.3以太网帧,帧类型为0x88A4。EtherCAT帧是由EtherCAT帧头和最大有效长度为1498字节的EtherCAT报文组成。

Ether CAT 通信帧结构采用标准以外网帧结构,是通过对传统协议进行修改形成,在标准协议里插入专用帧类型的 Ether CAT 数据帧,也就是说,标准协议的数据内容就是 Ether CAT 的数据帧。专用帧类型用 0x88A4 进行标记。也因为如此,Ether CAT 通信可被标准的以太网通信完全兼容。Ether CAT 数据帧的报文结构如图。

两个对比学习。

Ether CAT 的子报文主要由三个部分组成,分别是子报文头、子报文数据和工作计数器 WKC(Working Counter)。工作计数器 WCK 存在的目的是判断子报文是否被从站读取或插入过,通过记录从站对子报文进行操作的次数来实现。

Ether CAT 子报文的结构定义见表 2-2。子报文包含命令、索引、地址区长度、标志位、状态位、数据区和工作计数器等 7 个部分。报文中的命令一般是 8 位,用来表示报文寻址方式和读写操作;索引就是帧编码;从站通信地址是地址去中的32位二进制码;标志位M是后续报文的表示,如果 Ether CAT 数据帧有多个子报文,除最后一个子报文的标志位外,其他子报文的标志位都需要被职位;子报文数据属于用户自定义部分,长度一般是 1486个 byte。

EtherCAT 子报文所有的服务都是以主站操作捎述的 。 数据链路!去规定了从站内部物理存储、读写和交换(读取并马上写入〉数据的服务。读写操作和寻址方式共同决定了子报文的通信服务类型,由子报文头中的命令字节表示。EtherCAT 支持的所有命令如表2.4所列 。

先储备上述基础知识,报文的分析总是枯燥和快乐的,快乐的是从无知到懵懵懂懂。

看抓到的第一帧数据,29字节。

①好理解的数据

6字节(010105010000)目标mac;

6字节(000000000000)源mac;

0x88A4(88a4); …… 目前总计14字节

EtherCAT frame header(16bit,2字节)

.... .000 0000 1101 = Length: 0x00d …… 11位

.... 0... .... .... = Reserved: Valid (0x0) …… 1位

0001 .... .... .... = Type: EtherCAT command (0x1) …… 4位

②子报文

EtherCAT datagram(s): 'BWR': Len: 1, Adp 0x0, Ado 0x101, Wc 0

EtherCAT datagram: Cmd: 'BWR' (8), Len: 1, Adp 0x0, Ado 0x101, Cnt 0

Header

Cmd : 8 (Broadcast Write)

Index: 0x80

索引:80 BWR命令下每发出1条子报文,索引会加1,范围在0x80~0xff

Slave Addr: 0x0000

Offset Addr: 0x0101

地址区: 00 00 01 01 除逻辑寻址命令外,地址区会拆分成Slave Addr 和 Offset Addr,也就是Slave Addr:0x0000,Offset Addr:0x0101,注意一下,这是小端模式,要怎么读你懂的;如果是逻辑寻址,地址区就只有一个32位的 Log Addr:0x 01010000。(我还看不懂…)

Length : 1 (0x1) - No Roundtrip - Last Sub Command

.... .000 0000 0001 = Length: 1

..00 0... .... .... = Reserved: Valid (0)

.0.. .... .... .... = Round trip: Frame is not circulating

0... .... .... .... = Last indicator: Last EtherCAT datagram

长度:0100 报文数据区长度,小端模式,正确排序是0x0001,将它扩写成二进制:

0000 0000 0000 0001;

把无关的位用*代替:

0*** **** **** ****最高位,就是帧结构里的M,为0表示只有一帧,为1表示后续还有后续报文;

*000 0*** **** ****高2、3、4位是保留位,但实际情况下,使用wireshark解析,高第二位的定义是.0.. .... .... .... = Round trip: Frame is not circulating;

**** *000 0000 0001剩余的低11位是数据长度。

Interrupt: 0x0000

状态位:0000中断到来标志

ESC Ctrl (0x101): 0x00, Port 0: Auto loop, Port 1: Auto loop, Port 2: Auto loop, Port 3: Auto loop

.... ..00 = Port 0: Auto loop (0x0)

.... 00.. = Port 1: Auto loop (0x0)

..00 .... = Port 2: Auto loop (0x0)

00.. .... = Port 3: Auto loop (0x0)

数据:00 报文结构,用户定义

Working Cnt: 0

WKC:00 WKC了子报文被从站操作的次数,主站为每个通信服务子报文设置预期的WKC。发送子报文中的工作计数器初值为0,子报文被从站正确处理后,工作计数器的值将增加一个增量,主站比较返回子报文中的WKC和预期WKC来判断子报文是否被正确处理。WKC由ESC在处理数据帧的同时进行处理,不同的通信服务对WKC的增加方式不同。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Pou光明 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档