[EtherCAT] CoE添加对象字典内容
一、EtherCAT CoE对象字典
承接上文《[EtherCAT]CoE协议与服务数据SDO和过程数据PDO》中详细介绍了CoE、PDO、SDO之间的关系。
在EtherCAT从站开发中,我们经常会遇到需要增加CoE对象字典内容,实现更多参数的配置和通信的需求。
通常我们可以选择两种方式增加CoE对象字典内容:
一种是基于SSC Tool中的OD工具,直接创建新的对象字典;
一种是基于现有的例程,通过修改从站设备xml文件和修改从站设备程序,实现添加新的对象字典内容。
《AN_ET9300》是SSC Tool安装后的帮助文档。该文档是关于SSC Tool的使用介绍, 不仅有助于使用SSC Tool, 还有助于理解从站协议栈代码处理流程,在指导如何添加CoE字典内容方面也非常有帮助。
二、基于SSC Tool中的OD工具, 创建对象字典
HPM_SDK中的ECAT_IO例程就是通过SSC Tool中的OD工具创建的对象字典,并生成与之匹配的从站设备描述文件XML和从站协议栈程序。该方法无须手动修改xml和从站协议栈程序, 降低了修改的难度和出错的可能。
参考《AN_ET9300》中的6.4 Create an own Application和13 OD Tool章节,编辑excel,添加需要的对象字典内容。
操作示例: 基于ECAT_IO增加新的对象字典内容,一部分是PDO,一部分是SDO。
ECAT_IO例程本就是基于SSC tool中的excel构建出来的,当需要增加新的对象字典内容时,我们可以修改原有的excel并重新生成xml和SSC代码。
-
修改excel, 并重新生成ssc代码和xml文件
-
重新生成ssc代码和xml文件
新生成出文件变化可以看到digitial_ioObjects.h和xml中增加了新的对象字典内容, 这部分内容对应于excel中的对象定义。 -
修改应用层代码digitial_io.c
修改PDO数据处理函数(APPL_OutputMapping处理TxPDO, APPL_InputMapping处理RxPDO)。
-
对于添加的SDO数据,添加对应的SDO读写函数test_sdo_write()和test_sdo_read()
需要实现此两个函数是因为在excel中定义SDO数据时申明了专属的读写函数。 如果excel的对应单元格中不申明专属的读写函数,则无须实现。协议中会使用默认的的SDO读写函数,同样能实现新增sdo数据的读写。
-
将新的xml导入TwinCAT,从站烧录程序, 进行通信测试, 检查从站软件中相关变量的数值。
通过观察对xml和ssc代码的改动差异, 有助于理解xml和ssc代码与CoE对象字典的关联。 当需要手动修改增加CoE对象时,也就是需要关注这些差异性的部分。
三、手动修改从设备描述xml和从站程序代码
在原有CoE对象字典复杂且不便于整理到SSC Tool的excel中时,需要新增时可以使用手动添加方法。
当在SSC tool中使能CiA402_SAMPLE_APPLICATION参数时,会生成默认的cia402例程时。此时不支持再通过导入excel创建新的application的方式。也就是如想在cia402例程上增加新的CoE对象时,需要在原有基础上手动修改xml和从站代码,没办法通过编辑excel导入的办法完成。
手动修改时,需要注意:
- 申明相关的对象字典定义,并添加到对象字典中
- 如果是PDO对象, 还需要修改对应的RxPDO(0x160x)和TxPDO(0x1A0x)的定义,添加对象到PDO的映射
- 代码修改与xml修改的一致性
3.1 添加SDO
操作示例:基于ECAT_CIA402例程, 修改xml和从站代码的方法增加一组PID参数对象, 新增的参数使用SDO方式进行通信
对象索引 | 参数类型 | 访问权限 | 数据长度 | 功能描述 |
---|---|---|---|---|
0x60F0 | 比例增益(P) | 读/写(RW) | 32位浮点 | 实时调节比例项系数 |
0x60F1 | 比例增益(I) | 读/写(RW) | 32位浮点 | 实时调节积分项系数 |
0x60F2 | 比例增益(D) | 读/写(RW) | 32位浮点 | 实时调节微分项系数 |
0x60F3 | 比例增益(FF) | 读/写(RW) | 32位浮点 | 前馈补偿参数动态调整 |
修改步骤:
-
修改xml, 添加对象字典内容。 使用REAL32数据类型。
-
修改从站程序
添加对象定义和申明。
将新增对象添加到字典中。
-
TwinCAT中通过CoE字典(SDO)方式配置PID参数数值, 并在从站软件中检查PID参数的数值。
3.2 添加PDO
操作示例:基于ECAT_CIA402例程, 修改xml和从站代码, 新增一组参数(0x60FD Digitial input/0x60FE Digitial output), 采用PDO通信方式。
对象索引 | 参数类型 | 访问权限 | 数据长度 | 功能描述 |
---|---|---|---|---|
0x60FD | Digitial input | 读(R) | UINT32 | 数字信号输入 |
0x60FE | Digitial output | 读/写(RW) | UINT32 | 数字信号输出 |
修改步骤:
-
修改xml
1.1 添加对象定义
1.2 将对象加入到RxPDO
1.3 将对象加入到TxPDO
-
修改从站代码
2.1 添加0x60FD和0x60FE对象定义,并在轴参数中加入digitial_output和digitial_input变量
2.2 修改0x1602和0x1A02中定义
2.3 在ia402 axis的对象默认值, 和修改对象字典内容
2.4 在cia402appl.c中添加数据的赋值处理
-
将xml导入到TwinCAT, 开发板下载修改后的程序, 进行通信测试。
示例代码
由SSC生成的协议栈代码,由于权限问题不能在此直接提供,需要用户自行去ETG官网下载SSC Tool并按HPM_SDK EtherCAT例程中的README, 生成协议栈代码和xml文件。
本例是基于HPM_SDK v1.9.0 EtherCAT例程进行的修改,仅提供修改后的excel、xml和部分ssc的协议站代码以供参考。EtherCAT例程修改示例
示例修改中, 是对csv module做了sdo和pdo修改, cia402例程中还支持csp模式和csv/csp模式, 这些模式的修改同理。