ethercat sdo 报文分析

EtherCAT SDO报文分析

EtherCAT网络帧结构

完整的EtherCAT报文由以下三部分组成:

  • Ethernet Header(以太网头部):包含源MAC地址、目的MAC地址及帧类型标识(0x88A4表示EtherCAT协议),总长度14字节。

  • Ethernet Data(数据段):包含EtherCAT协议定义的子报文(Datagram),用于传输具体指令与数据。

  • FCS(Frame Check Sequence):4字节的CRC校验字段,用于数据完整性验证。

    Ethercat 报文结构


SDO Download服务分析

以对象字典索引0x2002为例,执行以下操作:

  1. 向子索引0x01写入4字节数据0x0100ACD3

  2. 向子索引0x02写入3字节数据0x23456

    在这里插入图片描述
    wireshark筛选制定对象字的方法:

    (eth.type == 0x88a4) && (ecat_mailbox.coe) && (ecat_mailbox.coe.sdoidx==0x2002)
    

报文抓取与解析

通过Wireshark过滤COE(CANopen over EtherCAT)协议内容,捕获SDO下载服务报文:

  • EtherCAT Header解析

    Ethercat datagram header

    • CMD:0x05,表示FPWR(Configured Physical Address Write)命令,用于从站非周期性数据写入。

    • Index:0xE8,标识从站逻辑地址映射。

    • ADP(Address Pointer):0x03EC,表示从站物理地址,由主站自动分配。

    • ADO(Address Offset):0x1000,指向从站DPRAM(分布式过程数据内存)的偏移地址,由ESI(EtherCAT从站信息)文件定义。

    • Length:16字节,表示数据段长度,对应SDO下载服务的有效载荷。

      在这里插入图片描述

  • EtherCAT Mailbox协议解析

    • CoE SDO Request:服务类型为“Initial Download Request”(操作码0x23),总长度10字节。

    • SDO请求字段

      • Object Index:0x2002(2字节),目标对象字典索引。

      • Subindex:0x01(1字节),目标子索引。

      • Data:0x0100ACD3(4字节),写入的32位数据。

  • Working Counter机制
    从站成功执行写操作后,Working Counter(WKC)值递增。通过对比写请求前后的WKC值(如0x0000→0x0001),可验证操作是否成功。
    working counter递增机制


多Datagram现象分析

在抓包结果中观察到两个EtherCAT Datagram,原因如下:

  • 单缓冲Mailbox实现:当Mailbox输出缓冲区(MBX Out)配置为0x80字节时,需填充完整缓冲区后从站方可读取数据。

  • 数据填充逻辑:实际SDO下载服务仅占用16字节,剩余缓冲区需通过附加Datagram(如向偏移地址0x107F写入1字节标志位)补足,以触发从站读取操作。

    在这里插入图片描述

SDO Initiate Download过程

在这里插入图片描述
1512行和1514行是ethercat模拟canopen协议中SDO服务的请求下载报文(只有ethercat主站才能主动发起报文)。1512行是主站发起请求下载报文,1514行是请求下载报文经过指定从站时,从站将下载数据0x0100acd3放进自己的SMbuffer,然后将working counter加1放入ethercat报文中,最后回到主站。

可以看FPWR中的SDO req 为0x23这是请求写4字节数据
sdo写请求过程
0x23就是SDO的命令符,请求写4个字节
SDO CS命令符
在这里插入图片描述
1518行和1520行是对SDO Initiate download的响应(SDO Res);报文由ethercat主站发起,经过指定从站时将128字节数据放在报文中最后回到主站。注意这128字节数据是定义的MBX out缓冲区的大小。
在FPRD这段报文中, COE部分显示的是SDO req,这就是SDO应答的意思,0x60就是表示写成功应答;在ethercat通信中,SDO的写请求与写成功应答都是由主站发起的

SDO写应答过程

initiate download指令,是请求写从站的DPRAM中的MBX out缓冲区(缓冲区为空的时候才能写),即Ado为0x1000的偏移地址;写成功后由从站将WKC加1并生成一个事件。然后从站的应用读取这片区域后,会将数据写道MBX in缓冲区,准备主站的写应答命令,相应的SM通道解锁该内存区域,保证了主站下一次的写入操作。
主站写邮箱过程
邮箱交互的握手模式
在FPWR之后主站发送FPRD命令就是为了确认从站是否真的被正确的写入数据,从站在被成功写入数据后,会将数据放到MBX in缓冲区,让主站去读,这个过程如下:
邮箱读过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值