BRD:Broadcast Read。
基于IgH主站接了3个从站,分析报文。
涉及的从站寄存器:Register AL Status 0x0130:0x0131 。
使用场景举例:
IgH启动时,ec_master_idle_thread线程中,通过ec_fsm_master_state_start 状态机封装0x0130:0x0131报文后,下一状态 ec_fsm_master_state_broadcast 广播读AL status报文,从站返回WKC,从而知道master下面挂了多少个从站。接着比较AL status报文的Working count(从站数datagram->working_counter) 和主站上一次记录的从站数fsm->slaves_responding,二者不相等说明网络拓扑改变了,需要重新扫描网络。
Ethercat的报文格式如下:
一、发送报文
1,IgH dmesg看到的报文
[ 2500.968421] EtherCAT DEBUG 0: frame size: 46 [ 2500.968422] EtherCAT DEBUG 0: Sending frame: [ 2500.968422] EtherCAT DEBUG: FF FF FF FF FF FF 6C 24 08 29 52 19 88 A4 0E 10 [ 2500.968427] EtherCAT DEBUG: 07 00 00 00 30 01 02 00 00 00 00 00 00 00 00 00 [ 2500.968432] EtherCAT DEBUG: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 2500.968436] EtherCAT DEBUG: 00 00 00 00 00 00 00 00 00 00 00 00 |
2,报文解析
3,wireshark报文
二、响应报文
1,IgH dmesg看到的报文
[ 2501.084361] EtherCAT DEBUG 0: Received frame: [ 2501.084362] EtherCAT DEBUG: FF FF FF FF FF FF 6E 24 08 29 52 19 88 A4 0E 10 [ 2501.084367] EtherCAT DEBUG: 07 00 03 00 30 01 02 00 00 00 01 00 03 00 00 00 [ 2501.084372] EtherCAT DEBUG: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 2501.084376] EtherCAT DEBUG: 00 00 00 00 00 00 00 00 00 00 00 00 |
2,报文解析
与发送报文差不多,有4个地方有变化:
- “目的mac”被从站改动了一个字节,6C改成了6E。为什么这样改,不清楚,感觉没必要。
- “从站地址ADP”,更新成了从站的地址。测试时有3个从站,响应报文中ADP设置为0x0003(报文图例中,低字节在左边) 。这里有个疑问,为什么ADP不是其他2个从站的地址?
- “子报文数据”,更新成从站的响应数据,0x0130的响应数据2个字节,编码见上图。
- “Working Count”有3个从站响应,所以计数值变成0x0003。