当前位置: 首页 > news >正文

EtherCAT的4种寻址方式解析

我们知道,一个EtherCAT数据帧(frame)里面包含很多个报文(datagram),不管是什么样式的报文,它们的目的只有一个,就是读写从站寄存器或内存。所以寻址就是以什么方式访问哪个从站的哪个寄存器或内存。理解了寻址方式,就可以结合具体的地址和数据,搞清楚报文对从站到底干了什么事情。

EtherCAT数据帧

1.寻址方式解析

EtherCAT寻址方式只有4种:位置寻址(Position address)、节点寻址(Node address)、广播寻址(Broadcast address)、逻辑寻址(Logical address)。表中给出了不同的Cmd所采用的寻址方式。

Cmd寻址方式和描述

不同寻址方式,报文头的Address字段组成也有所不同:不同寻址方式的Address字段组成

(1)位置寻址

又叫顺序寻址,根据从站在链路上的位置进行寻址,通常用于初始化。

Address字段包括16位ADP和16位ADO。

当从站接收到ADP为0的报文时,则对报文进行读写操作,然后再把ADP加1。(如果是读操作就把从站ADO地址对应的数据写入报文,如果是写操作就把报文中的数据写入从站ADO对应的地址)

例如要对第0个从站进行读写操作,该报文的ADP就为0,第0个从站操作完之后ADP加1,后面的从站就不会根据该报文进行任何操作。又比如要对第2个从站进行读写操作,ADP就为-2(0xFFFE),那它传到第0个从站时ADP=-2,传到第1个从站时ADP=-1,传到第2个从站时才ADP=0,相应的读写操作才会进行。

(2)节点寻址

又叫设置寻址,根据从站被配置的地址进行寻址,通常用于对单独某个从站的读写(如SDO)。

Address字段包括16位ADP和16位ADO。

其中ADP为从站被配置的地址(理论上可以为任意值),ADO为从站里面某个寄存器的地址。如果报文的ADP与从站被配置的地址(存储在寄存器中)匹配,则该从站执行相应的操作。

(3)广播寻址

对链路上的每个从站进行读写操作。

Address字段包括16位ADP和16位ADO。

ADP本身不用于寻址,但每个从站会对它进行加1操作,ADO为从站里面某个寄存器的地址。如果是广播写,从站会将报文数据写入存储;如果是广播读,从站会把存储数据与报文数据求或,再写入报文。

(4)逻辑寻址

根据FMMU映射进行寻址,通常用于PDO过程数据交互。

Address字段包括32位的Addr。

Address为逻辑起始地址(由FMMU配置,存放在0x06y0寄存器中)。如果从站FMMU与报文的Address相符,则根据配置好的映射关系,将报文中特定偏移量的数据写入从站特定的地址,或将从站特定的地址的数据读入报文中特定偏移量。

2.示例解析

接下来通过WireShark抓取实际EtherCAT数据包,来对不同寻址方式进行详细分析。

如图所示为某品牌六轴机械臂运行时收发的数据帧,主站通过串行方式直连6台伺服驱动器从站设备,抓包时机械臂各关节在位置模式下做简单运动。EtherCAT发送数据帧EtherCAT接收数据帧

可以看到EtherCAT数据帧中包含了位置寻址(ARMW)、逻辑寻址(LWR、LRD)、节点寻址(FPRD)和广播寻址(BRD)报文。不同Cmd指令描述见上表。

可见发送出去和接收进来的报文种类数量都没有改变,但其中的数据内容和Working Counter(Cnt)在从站的操作下发生了相应的改变。下面对每种报文进行解析。

(1)ARMW报文 发送ARMW报文接收ARMW报文

如图所示为发送和接收的ARMW报文。采用位置寻址,当从站接收到ADP为0时,将地址为ADO的寄存器内容写入报文数据,如果从站接收到ADP不为0时,则将报文数据写入地址为ADO的寄存器,操作完成后对ADP加1。

该报文用于DC时钟同步,链路上第一个具有DC功能的从站作为主时钟。因此发送数据帧ADP=0意味着只有第一个从站会把自己的0x910寄存器数值写入报文,报文中的数据就是第一个从站的系统时间,后面的从站就只是默默地把该数据读入自己的0x910寄存器中。

这里由于链路上第一个从站对该报文进行了1次写操作,另外五个从站对该报文进行了总共5次读操作,因此Cnt=1+1+5=7。

(2)LRD报文发送LRD报文接收LRD报文

如图所示为发送和接收的LRD报文。LWR、LRD都采用逻辑寻址,因此从站只需要按照约定(配置)好的,将内存中特定的数据写入报文数据中特定的位置即可。发送时该报文的数据为全零,接收回来的时候就已经被填上数据了。这里的数据内容无非就是PDO过程数据,比如伺服电机的位置、速度、电流、状态字什么的。

这里六个从站分别对该报文进行了1次写操作,因此Cnt=1+6=7。

(3)FPRD报文

发送FPRD报文接收FPRD报文

如图所示为发送和接收的FPRD报文,采用节点寻址。从站接收到ADP与自己被配置的地址相符,就把ADO地址的寄存器数据写入报文。这里链路上某个从站地址被配置为0x3ec,然后读取它的0x130寄存器的数值写入报文数据。

这里由于链路上只有一个从站对该报文进行了1次写操作,因此Cnt=0+1=1。

(4)BRD报文

 发送BRD报文

接收BRD报文

如图所示为发送和接收的BRD报文。采用广播寻址,ADP没有实际意义,但每经过一个从站就会被加1。这里每个从站都会把ADO,也就是0x130地址的寄存器数值与报文中的数据按位或,然后写入报文。

查手册可知0x130寄存器存放的是从站的数据链路层状态(AL Status),当从站处于不同的状态,对应的比特位就会置1。也就是说,当报文数据中只有bit3为1时,可判断链路上所有从站都进入了OP状态;而当报文数据中bit2和bit3同时为1时(0x000c),链路上至少有一个从站处于SAFEOP且至少有一个处于OP,但具体哪一个也不知道。

这里六个从站分别对该报文进行了1次写操作,因此Cnt=2+6=8。

3.总结

总的来说,位置寻址用于从站都没有被配置,仅知道它在链路中位置的情况;节点寻址用于对从站点对点的通信,可用于从站配置和数据读取;广播寻址用于比较宽泛的设置和读取操作;逻辑寻址则用于数据量较大的读写操作,具有更高的信息密度和报文使用率。

参考网址:

EtherCAT寻址方式解析 - 知乎

Beckhoff Information System - English

http://www.lryc.cn/news/212892.html

相关文章:

  • Trino 源码剖析
  • element表格自定义筛选
  • 全方位 Linux 性能调优经验总结
  • Linux机器网络检查
  • 使用示例和应用程序全面了解高效数据管理的Golang MySQL数据库
  • ubuntu 22.04 源码安装 apollo 8.0
  • RK3588编译MXNet框架
  • 港府Web3宣言周年思考:合规困境中的“隐患”
  • vue点击按钮跳转页面
  • 大中小企业对CRM系统的需求
  • .net core iis 发布后登入的时候请求不到方法报错502
  • 知识图谱实战应用30-知识图谱在反欺诈情报分析项目中的应用实践
  • [云原生1. ] 使用Docker-compose一键部署Wordpress平台
  • springboot--基本特性--自定义 Banner
  • Vue3:checkbox使用及限制选中数量
  • ​如何选择更快更稳定的存储服务器​
  • AcWing89. a^b
  • 【推荐系统】推荐算法:冷启动-召回-粗排-精排-重排 解读
  • NB-IOT的粮库挡粮门异动监测装置
  • 六、【图像去水印】
  • 电子电器架构 —— 车载网关初入门(二)
  • AT32固件库外设使用,ArduinoAPI接口移植,模块化
  • 【Postgres】Postgres常用命令
  • pthread 读写锁使用详解
  • MySQL扩展语句
  • 阿里云号码认证服务(一键登录)在连接wifi的情况下部分机型下存在的问题
  • 电脑屏幕监控软件,能够帮助企业完成哪些事情?
  • java--方法的其他形式
  • IDEA配置类、方法注释模板
  • PowerDesigner 16数据库(mysql)逆向生成pdm