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。PDO
、PDO映射对象
和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。
下图更直观的展示了PDO
、PDO映射对象
、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,就可以开始正式传输过程数据了。