本文内容大多摘录自《ETG1000_4_V1i0i4_S_R_EcatDLLProtocols.pdf》
规范中定义EtherCAT数据帧有两种格式,一种是最“原生”的EtherCAT帧,格式如下图第一行,另一种是搭载在UDP报文中EtherCAT数据帧,格式如下图第二行,常用的是第一种。
EtherCAT数据帧格式有三种:
第一种:PDUs(最常用,一般用来周期性传输数据):
在一个EtherCAT数据帧中,可以搭载多个EtherCAT PDU,每个PDU有自己的Header、Data和Working Counter
这种数据帧可以搭载不同指令的PDU,每种指令的格式又不太一样:
1. READ
读指令从站每次处理完成后WKC + 1
(1)自增读(APRD)
这个指令能够让从站指定读取哪个从站的数据,重点关注ADP参数,ADP每经过一个从站自动加一,收到ADP为0的从站处理读请求。ADP初始值是负数,比如-7代表主站和需要处理读指令的从站间间隔7个从站。
(2)配置地址读(FPRD)
报文示例:
(3)广播读(BRD)
这个指令中返回的DATA是所有从站读取结果的或运算结果,
所以这个指令通常用于快速诊断所有从站状态。
(4)逻辑读(LRD)
这个逻辑读用到了逻辑地址,逻辑地址是主站给每个从站的某段内存分配一个虚拟的地址,每个从站的逻辑地址相互不重叠,这个逻辑地址到从站物理内存地址的映射由从站的FMMU管理,每个从站的FMMU由主站在进入OP前通过指令进行配置。
报文示例:
2. WRITE
写指令和上面的读指令是一一对应的,也是四个,对于单独写指令每次从站处理完成后WKC也是加1。
(1)自增写(APWR)
(2)配置地址写(FPWR)
(3)广播写(BWR)
(4)逻辑写(LWR)
3. Read Write
这组指令就是同时读写数据,指令中的DATA从主站发出的时候装载的是要写入从站的数据,从站读取数据的同时把自己的数据再写入DATA,用一帧报文同时完成读写。
本组也包含与上面两组类似的四个指令,对于这四个指令,每个从站成功处理读指令后,WKC加1,成功处理写指令后,WKC加2,如果读写都处理了就加3。另外本组还包含两个特有的指令,对于这两个特有指令,从站读或写处理成功后WKC都只加1,注意不是读写各加1,而是每个从站一共只加1。
(1)自增读写(APRW)
(2)配置地址读写(FPRW)
(3)广播读写(BRW)
(4)逻辑地址读写(LRW)(常用)
报文示例:
两个特殊的读写指令
下面两个指令都是读指令只一个从站执行,写指令所有从站都执行,相当于写是广播写。应用场景一般是把数据从某个从站读出来,然后写到后面的所有从站。常用来做时钟同步,且读的从站一般是第一个从站,这样才能保证所有从站中数据一致。
(5)自增读多从站写(ARMW)
(6)配置地址读多从站写(FRMW)
上文所述的帧格式通常用来传输周期性数据。
第二种:Network Variables(应用较少)
第三种:mailbox(一般用于SDO等非周期性数据传递)
需要注意的是,mailbox帧数据通常搭载在第一种帧格式的PDU中,例如:
mailbox structure定义如下: