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

EtherCAT PDO映射概述

文章目录
  • 前言
  • 一、PDO映射相关概念介绍
  • 二、PDO映射配置过程详解

前言

当主站使用EtherCAT协议传输过程数据来控制从站设备时,会疑问主站是在什么时候告诉从站要传输什么过程数据的?
答案是,在PDO映射阶段完成的。
PDO映射简单来说就是通过CoE(CANopen over EtherCAT)协议来访问从站内部的一段结构化的数据,向其中写入数据来告诉从站之后会传输哪写PDO。

这段数据就是对象字典(Object Dictionary,OD)。
对象字典涉及的内容很对,包含很多分区。有些区是静态的,让用户从中读取信息,例如标准化设备子协议区,供用户了解该设备支持哪些PDO;有些区是可动态写入的,让用户按需进行配置,例如通信对象子协议区中的PDO参数对象部分,供用户配置PDO映射。

本文将针对过程数据对象的配置过程开展介绍。

一、PDO映射相关概念介绍

下图是EtherCAT从站设备的功能架构。
可以看到,EtherCAT从站设备功能组件可分为三层:物理层、数据链路层和应用层。应用层上方的从站应用功能会与对象字典交互,EtherCAT主站也能通过从站设备的ESC访问到对象字典,即对象字典是EtherCAT主站与从站应用之间过程数据的传输中转站。
在这里插入图片描述
对象字典(Object Dictionary)是用于描述设备信息的一种数据结构,通过索引、子索引可以定位到对象字典中某个数据信息。对象字典中的内容分布如下。

索引

内容

0x0000-0x0FFF

数据类型描述

0x1000-0x1FFF

通信对象子协议区

0x2000-0x5FFF

制造商特定子协议区

0x6000-0x9FFF

标准化设备子协议区

0xA000-0xAFFF

网络变量

0xB000-0xBFFF

用于路由网关的系统变量

0xC000-0xFFFF

保留

PDO(过程数据对象)映射就是通过CoE协议来修改通信对象子协议区中的部分数据
通信对象子协议区中的内容如下。

索引

内容

0x1000-0x1029

通用通讯对象

0x1200-0x12FF

SDO参数对象

0x1300-0x13FF

安全对象

0x1400-0x1BFF

PDO参数对象

0x1F00-0x1F11

SDO管理对象

0x1F20-0x1F27

配置管理对象

0x1F50-0x1F54

程序控制对象

0x1F80-0x1F89

网络管理主机对象

还需要厘清PDO、SDO两个对象。
PDO,过程数据对象,即在周期性控制过程中主从站之间需要传输的数据对象。是对象字典中索引0x6000到0x9FFF的内容。
每个数据对象都有特定功能,有些是主站向从站发送的,称为RxPDO,用于控制从站设备执行功能;有些是从站向主站发送的,称为TxPDO,用于向主站上报从站设备的状态信息。如下图是信捷伺服电机设备的对象字典中的部分PDO。

在这里插入图片描述

SDO,服务数据对象,是主从站之间进行非周期性通信时的数据对象。对象字典中除PDO以外的部分都可以称为SDO。

PDO映射对象PDO分配对象是与PDO的配置相关的两个SDO,虽然名称里带有PDO但并不属于PDO。PDOPDO映射对象PDO分配对象实际上是层层嵌套的关系,三者配合起来用于描述具体使用哪些PDO来控制从站设备。

PDO映射对象分为RxPDO映射对象和TxPDO映射对象两类,每类都有若干个对象,每个PDO映射对象用于映射一组PDO。RxPDO映射对象位于对象字典索引0x1600到0x17FF位置,TxPDO映射对象位于0x1A00到0x1BFF位置。
PDO映射对象包含n个子索引,子索引0表示该PDO映射对象中映射了多少个PDO,其余子索引表示映射了哪些PDO。
如下图是一个EtherCAT电机设备的索引为0x1600的RxPDO映射对象。00子索引的值是0x0B,即该RxPDO映射对象映射了11个RxPDO(虽然实际上只有六个是有意义的RxPDO)。0x01子索引到0x06子索引的值,描述了该RXPDO映射对象映射了哪些PDO。如0x01子索引的值是0x60400010,就表示0x01子索引映射的是对象字典中索引为0x6040,子索引为0x00的PDO,并且其数据长度为0x10。

在这里插入图片描述
我们也可以到对象字典对应的索引位置看一下,索引为0x6040,子索引为0x00的PDO是控制字。在这里插入图片描述
PDO分配对象只有两个:
一个RxPDO分配对象,在对象字典中的索引为0x1C12;
一个TxPDO分配对象,在对象字典中的索引为0x1C13。
上文提到每个PDO映射对象中映射了一组PDO,而PDO分配对象用于最终选定使用哪几个PDO映射对象,即选定使用哪几组PDO。
PDO分配对象包含5个子索引,子索引0x01到0x04分别指定一个PDO映射对象,子索引0x00表示从子索引0x01开始一共使用几个PDO映射对象。
如下图是一个EtherCAT电机设备的RxPDO分配对象和TxPDO分配对象。RxPDO分配对象子索引0x01的值为0x1600,且子索引0x00的值为1,则表示最终选定了索引为0x1600的RxPDO映射对象,也就是说选定了索引为0x1600的RxPDO映射对象中映射的一组RxPDO作为主站向从站传输使用的PDO。TxPDO分配对象同理,选定了索引为0x1A00的TxPDO映射对象中映射的一组TxPDO作为从站向主站传输使用的PDO。

在这里插入图片描述
在这里插入图片描述
下图更直观的展示了PDOPDO映射对象PDO分配对象之间的关系。
在这里插入图片描述
值得注意的是,有些从站设备对象字典的PDO映射对象和PDO分配对象存在默认的初始配置,设备上电后可直接基于默认配置来传输过程数据。而有些从站设备的PDO映射对象和PDO分配对象中的值默认是空的,需要先向各个对象的子索引写入值完成配置之后,才能传输过程数据。

一旦对象字典中的PDO映射对象、PDO分配对象设置完成,从站控制应用就可以读取对象字典中的PDO相关对象的值来确定需要从对象字典中哪些RxPDO读取数据,以及向对象字典中哪些TxPDO写入数据了。

此外,还需要关注SM(Sync Manager,同步管理器)。可以看到从站在物理层接收到配置PDO的EtherCAT数据帧后,需要通过SM写入对象字典中。

下一节通过EtherCAT数据帧收发记录来介绍具体配置过程。

二、PDO映射配置过程详解

1、清空SM配置

从站最多支持16个SM,配置SM的寄存器地址从0x0800开始,开头8个字节用于配置第一个SM,后面依次类推,如下图所示。

在这里插入图片描述

配置PDO首先需要清空之前的SM配置。
主站发送FPWR类型帧,向从站寄存器0x0800地址开始的64个字的空间写入0,清空所有SM配置。

在这里插入图片描述

2、重新配置SM

然后重新配置前两个SM,SM0用于写入SDO,SM1用于读取SDO。
还是向寄存器0x0800地址写入,共写入32个字的数据,前八个字用于配置SM0,后八个字配置SM1。最后16个字对应的SM2和SM3用于传输PDO,但在该阶段用不到,所以没有配置。

在这里插入图片描述

首先来看对SM0的配置数据:0010 8000 2600 0100 (注意该数据采用小端字节序)。
0-1字节用于配置物理起始地址,即SDO数据写入的位置。SM0配置的物理起始地址一般都是0x1000。

在这里插入图片描述

2-3字节用于配置寄存器长度,单位是字,0x0080表示长度为128个字。

在这里插入图片描述

4字节用于SM0工作参数配置,配置数据为0x26,二进制为0010 0110,第7位到第0位的顺序是从左到右。
工作模式配置数据为10,Mailbox模式;
读写方向配置数据为01,主站可写入,从站应用层可读取;
主站中断请求配置为0,关闭使能;
应用层中断请求配置为1,开启使能;
看门狗配置为0,关闭使能;

在这里插入图片描述

5字节是SM状态寄存器,用于读取SM状态,在配置操作中用不到,因此数据全为0。

在这里插入图片描述

6字节用于激活SM,配置数据为0x01,二进制为0000 0001。0位置1,激活SM。

在这里插入图片描述

7字节用于PDI控制,配置数据为0x00。

在这里插入图片描述

SM1的配置数据:0012 0001 2200 0100
SM1物理起始地址为0x1200,即读取SDO数据的位置。长度为0x0100,256个字。工作参数配置和SM0的区别是读写方向,SM1是从站写入,主站读取。其他配置都相同。

3、配置PDO映射对象

完成SM0和SM1的配置后,就能够通过SM0、1读写SDO数据来完成PDO映射的配置过程了。
本文以配置索引为0x1600的RxPDO映射对象为例,介绍配置过程。

(1)对PDO映射对象的0x00子索引置零

主站发送FPWR类型帧,可以看到帧包含了一个CoE包。
向索引为0x1600,子索引为0x00的位置写入数据0x00。
子索引0x00用于表示该映射对象中映射的PDO数量。
所以操作逻辑是先将数量清零,映射完PDO后,再重新写入映射数量。

在这里插入图片描述

(2) 依次配置PDO映射对象的其他子索引

向0x01子索引写入0x60400010。也就是将对象字典中索引为0x6040,子索引为0x00的PDO,映射到该RxPDO映射对象中。0x60400010最后的10,表示该PDO长度为16比特。

在这里插入图片描述

然后再依次向该RxPDO映射对象的0x02子索引以及后面的子索引写入数据。

(3) 向PDO映射对象的0x00子索引写入映射的PDO个数

PDO映射完成后,再向PDO映射对象的0x00子索引写入PDO映射数量。

在这里插入图片描述

到此完成了一个RxPDO映射对象的配置,然后还可以继续配置其他PDO映射对象,配置过程相同。

4、配置PDO分配对象

完成PDO映射对象后,开始配置PDO分配对象。
以索引为0x1C12的RxPDO分配对象为例,介绍配置过程。

(1)对PDO分配对象的0x00子索引置零

和配置PDO映射对象类似,先将PDO分配对象的0x00子索引置零。

在这里插入图片描述

(2)依次配置PDO分配对象的其他子索引

向0x01子索引写入需要分配的PDO映射对象的索引值,例如下图中写入的是0x1600这个RxPDO映射对象。

在这里插入图片描述

然后还可以继续在该PDO分配对象下分配PDO映射对象。但最多只能分配4个PDO映射对象。

(3)向PDO分配对象的0x00子索引写入分配的PDO映射对象个数

最后,向0x00子索引写入分配的PDO映射对象个数。
需要注意的是,即便在该PDO分配对象中分配了4个PDO映射对象,但在0x00子索引写入0x01后,那就只有分配的第一个PDO映射对象会起作用。

在这里插入图片描述

到此,完成了PDO映射的配置过程。相当于主站、从站双方已经知道要传输哪写PDO了,接下来再配置完SM2、3以及FMMU,就可以开始正式传输过程数据了。


http://www.kler.cn/a/506731.html

相关文章:

  • springcloud中的Feign调用
  • Vulnhub DC-8靶机攻击实战(一)
  • 网络安全技术深度解析与实践案例
  • 【Linux】Mysql部署步骤
  • 数字人助力企业出海增长,魔珐科技亮相2025晋江跨境电商峰会
  • Django框架:python web开发
  • 浅谈云计算19 | OpenStack管理模块 (上)
  • No.32 笔记 | 业务逻辑漏洞全解析:概念、成因与挖掘思路
  • C 语言中二维数组的退化
  • 【MVCC过程中会加锁吗?】
  • Ubuntu无法进入图像化界面
  • 英伟达 2025 CES:GPU与智算中心协同驱动 GPU算力智能变革
  • 一次完整的tcpdump -XX输出报文详解
  • 寒假康复训练2 edu111(A-C)
  • JAVA-Exploit编写(1)--HttpURLConnection库使用
  • Vue2+OpenLayers给2个标点Feature分别添加独立的点击事件(提供Gitee源码)
  • 细说STM32F407单片机窗口看门狗WWDG的原理及使用方法
  • 【数据可视化-12】数据分析岗位招聘分析
  • 开源在线聊天服务Fiora本地搭建个性化社交网络定制专属聊天工具
  • 校园能源管理:从困境到突破的智慧之旅
  • 数据结构、数据类型、数字编码、字符编码:保姆级图文详解
  • K8S 亲和性与反亲和性 深度好文
  • 使用jupyter notebook没有正常打开浏览器的几种情况解决
  • frameworks 之 AMS与ActivityThread交互
  • LLaMA Pro是什么 相比于lora full freeze有什么区别 怎么使用
  • [Qt]常用控件介绍-输入类控件-QLineEdit、QTextEdit、QComboBox控件