基于IgH主站接了3个从站,分析报文。
APWR:Auto Increment Physical Write。
一条Ethercat报文中可以包含多个子报文,每个子报文的地址由ADP+ADO组成,ADP即16 bit High Addr,ADO即16 bit Low Addr。APWR模式下,ADP代表的是从站在网络中按连线顺序的地址,比如与master连接的第一个从站的ADP=0x00,第二个从站的ADP=0x01,第三个从站的ADP=0x02,以此类推。ADO代表的是从站物理寄存器地址,寄存器地址可参考Beckhoff | New Automation Technology | Beckhoff Worldwide的资料《Section II – Register Description Register overview and detailed》。
APWR模式,从站只处理ADP=0的报文,出站后各子报文的ADP(High Addr)加1。
举个应用场景,系统第一次初始化时,通过ADO=0x0010寄存器配置从站地址:
报文到达第一个从站,处理子报文1(因为它的ADP=0x0000),将data区的值写入ADO寄存器中。报文从第一个从站出来后,子报文2的ADP = 0xFFFF+1 = 0x0000,子报文2的ADP = 0xFFFE+1 =?0xFFFF。报文到达从站2,从站2处理子报文2(因为它的ADP=0x0000),以此类推。
[ 2501.304424] EtherCAT DEBUG 0: frame size: 46 [ 2501.304424] EtherCAT DEBUG 0: Sending frame: [ 2501.304425] EtherCAT DEBUG: FF FF FF FF FF FF 6C 24 08 29 52 19 88 A4 0E 10? [ 2501.304429] EtherCAT DEBUG: 02 03 00 00 10 00 02 00 00 00 01 00 00 00 00 00? [ 2501.304434] EtherCAT DEBUG: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00? [ 2501.304438] EtherCAT DEBUG: 00 00 00 00 00 00 00 00 00 00 00 00? |
[ 2501.412236] EtherCAT DEBUG 0: Received frame: [ 2501.412237] EtherCAT DEBUG: FF FF FF FF FF FF 6E 24 08 29 52 19 88 A4 0E 10? [ 2501.412242] EtherCAT DEBUG: 02 03 03 00 10 00 02 00 00 00 01 00 01 00 00 00? [ 2501.412246] EtherCAT DEBUG: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00? [ 2501.412251] EtherCAT DEBUG: 00 00 00 00 00 00 00 00 00 00 00 00? |
?注意:
1)箭头指的地方并不能说明地址为0x0003的从站的地址被改了,只能说明Ethercat数据帧经过的最后一个从站时0x0003。从wireshark报文中看不出哪个从站被修改了地址。
2)Working Cnt为1说明,3个从站中只有1个从站响应了报文。