[EtherCAT]从站实现动态PDO功能

一、EtherCAT PDO分配对象和PDO映射对象

承接上文《[EtherCAT]CoE协议与服务数据SDO和过程数据PDO》中详细介绍了EtherCAT PDO的分配和PDO映射(配置)对象。具体通信哪些数据是由PDO分配对象和PDO映射对象两个层级最终决定。

PDO的分配与映射有3种典型的情况:

  1. 固定的PDO分配对象和固定的PDO映射对象, 例如HPM_SDK中的ecat_io例程, 其RxPDO分配对象0x1C12的值是固定的, 其指向RxPDO映射对象0x1600, 而RxPDO映射对象0x1600的值也是固定的。

  2. 可变的PDO分配对象和固定的PDO映射对象, 例如HPM_SDK中的ecat_cia402例程,有3个RxPDO映射对象0x1600/0x1601/0x1602, 每个RxPDO映射对象的值是固定的,用于不同的控制模式。可以修改RxPDO分配对象0x1C12的值选择其中的一个RxPDO映射对象。(该例程使用了Module/Slots概念, 通过在Slots中选中对应的Module即可配置0x1C12和0x1c13)

  3. 可变的PDO分配对象和可变的PDO映射对象,即在情形2的基础上,其RxPDO与TxPDO映射对象的值可以被更改。例如可以通过主站软件配置0x1600的值,实现灵活的组合PDO数据。

二、 基于ECAT_CIA402例程修改实现动态PDO功能

由上可知,实现动态PDO的关键就是实现可配置的PDO映射对象0x160x和0x1A0x和解析. 接下来将举例修改ECAT_CIA402例程的RxPDO映射对象0x1602和TxPDO映射对象0x1A02的属性和修改APPL_InputMapping()和APPL_OutputMapping()函数实现对动态PDO映射的处理。

2.1 修改代码中的0x1602和0x1A02对象

  1. 修改0x1602和0x1A02的entry数目和属性


  2. 修改对象字典的默认值

  3. 修改对象字典中0x1602和0x1A02的最大Entry数目

  4. 修改void APPL_InputMapping(UINT16* pData), 实现动态解析0x1A02映射的PDO数据, 注意使用的dummy数据用于填充位置的情况处理。

  5. 修改void APPL_OutputMapping(UINT16* pData), 实现动态解析0x1602映射的PDO数据, 注意使用的dummy数据用于填充位置的情况处理。

2.2 修改设备描述xml

  1. 修改PdoConfig属性为true

  2. 修改RxPDO和TxPDO的Fixed为true的属性

  3. 添加DT1602和DT1A02数据类型

  4. 添加默认情况下的0x1602和0x1A02对象数值

三、 使用TwinCAT主站验证从站动态PDO功能

将修改后的xml复制到TwinCAT的从设备描述文件目录下,然后使用TwinCAT主站扫描从站, 从站默认处于csv控制模式下。

  1. 按照如下方式即可修改PDO映射关系,实现动态PDO配置


  2. 可以在CoE-Online页面检查0x1602和0x1A02对象的值

  3. 对PDO数据进行赋值,调试从站代码检查相应变量的赋值是否正确。

总结

以上通过对HPM_SDK中ECAT_CIA402例程进行修改实现从站的动态PDO配置功能,修改后cia402appl.h/cia402appl.c以及xml文件见附件ECAT_CIA402动态PDO。 该文章重点介绍实现从站动态PDO的逻辑和方法,可以根据该方法实现其他情况下的从站动态PDO功能。

0
0

订阅

发表回复 0

Your email address will not be published. Required fields are marked *