过程数据
EtherCAT 实时数据传输通过过程数据(Process data Object)实现。根据数据传输方向,PDO 可分为RPDO( Reception PDO) 和TPDO(Trasmission PDO),RPDO 将主站数据传送到从站,TPDO 将从站数据反馈至 主站。
PDO映射
PDO 映射用于建立对象字典与PDO 的映射关系。1600h~17FFh 为RPDO,1A00h~1BFFh为TPDO, SV660N 系列的伺服驱动器中,具有6 个RPDO 和5 个TPDO 可供选用,如下表所示:
固定映射
SV660N 提供了5 个固定的RPDO 和4 个固定的TPDO 供使用。一些RPDO 与TPDO 的典型使用实例如下表所示。
PP CSP
这是默认配置
PP PV PT CSP CSV CST
PP PV CSP CSV
PP PV PT CSP CSV CST
PP PV CSP CSV
可变PDO 映射
SV660N 提供了1 个可变的RPDO 和1 个可变的TPDO 供用户使用。
同步管理PDO 分配设置
EtherCAT 周期性数据通讯中,过程数据可以包含多个PDO 映射数据对象,CoE 协议使用的数据对象0x1C10 ~ 0x1C2F 定义相应的SM( 同步管理通道) 的PDO 映射对象列表,多个PDO 可以映射在不同的子索引里, 在SV660N 系列的伺服驱动器中,支持1 个RPDO 分配和1 个TPDO 分配,如下表所示:
查看当前设备中的0x1C12和0x1C13的值,确定映射。下面的值说明使用的是固定映射的第一种组合。只支持PP&CSP模式
$ sudo ethercat upload -p 0 -t uint16 0x1c12 1
0x1701 5889
$ sudo ethercat upload -p 0 -t uint16 0x1c13 1
0x1b01 6913
PDO 配置
PDO 映射参数包含指向PDO 需要发送或者接收到的PDO 对应的过程数据的指针,包括索引、子索引及映射 对象长度。其中子索引0 记录该PDO 具体映射的对象个数N,每个PDO数据长度最多可达4*N 个字节,可 同时映射一个或者多个对象。子索引1~N 则是映射内容。映射参数内容定义如下。
索引和子索引共同决定对象在对象字典中的位置,对象长度指明该对象的具体位长,用十六进制表示,即:
例如,表示16 位控制字6040h-00 的映射参数为60400010h。
● SV660N 的 PDO 配置遵循流程:
PDO 的映射配置遵循特定的流程,具体按如下步骤执行:
1. PDO配置映射组。1C12h(或1C13h)的00h子索引写入0;
a. 清除原有的映射组。对1C12h(或1C13h)的00h子索引写入“0”即可清除该PDO配置组;
b. 写入PDO映射组。按场景需求写入映射配置组,1C12h中预写入1600h/1701h1705h的值;1C13h中预写入1A00h/1B01h1B04h的值。注 意:只有1600h和1A00h是可配置映射组,其他是固定映射配置;
c. 写入该PDO映射组总个数到1C12h(或0x1C13h)对象子索引0;
2. 配置PDO映射对象。1600h(或1A00h)的00h子索引写入0。
a. 清除原有的映射对象。对1600h(或1A00h)的00h子索引写入“0”即可清除该PDO映射配置;
b. 写入PDO映射内容。按XML文件中的对象参数定义,分别写入到映射参数子索引1~10中;只有支持映射的对象才能配置为PDO映射内容。
c. 写入PDO映射对象总个数,将步骤b中写入的映射个数写入到子索引0中。
说明
● PDO配置仅可以在EtherCAT通讯状态机处于预运行(Pro-Operation,面板显示2)的时候进行设置,否则报错。
● PDO配置参数不可存储在e2prom中,因此每次上电后,请务必重新配置映射对象,否则,映射对象为伺服驱动器默认参数。
使用ethercat命令进行配置
# 配置0x1C12
$ sudo ethercat download -p 0 -t uint16 0x1C12 0 0
$ sudo ethercat download -p 0 -t uint16 0x1C12 1 0x1702
$ sudo ethercat download -p 0 -t uint16 0x1C12 0 1
$ sudo ethercat upload -p 0 -t uint16 0x1c12 1
0x1702 5890
# 配置0x1C13
$ sudo ethercat download -p 0 -t uint16 0x1C13 0 0
$ sudo ethercat download -p 0 -t uint16 0x1C13 1 0x1B02
$ sudo ethercat download -p 0 -t uint16 0x1C13 0 1
$ sudo ethercat upload -p 0 -t uint16 0x1c13 1
0x1b02 6914
检测是否已生效
$ sudo ethercat rescan
$ sudo ethercat cstruct -p 0
/* Master 0, Slave 0, "InoSV660N"
* Vendor ID: 0x00100000
* Product code: 0x000c010d
* Revision number: 0x00010000
*/
ec_pdo_entry_info_t slave_0_pdo_entries[] = {
{0x6040, 0x00, 16},
{0x607a, 0x00, 32},
{0x60ff, 0x00, 32},
{0x6071, 0x00, 16},
{0x6060, 0x00, 8},
{0x60b8, 0x00, 16},
{0x607f, 0x00, 32},
{0x603f, 0x00, 16},
{0x6041, 0x00, 16},
{0x6064, 0x00, 32},
{0x6077, 0x00, 16},
{0x6061, 0x00, 8},
{0x60b9, 0x00, 16},
{0x60ba, 0x00, 32},
{0x60bc, 0x00, 32},
{0x60fd, 0x00, 32},
};
ec_pdo_info_t slave_0_pdos[] = {
{0x1702, 7, slave_0_pdo_entries + 0},
{0x1b02, 9, slave_0_pdo_entries + 7},
};
ec_sync_info_t slave_0_syncs[] = {
{0, EC_DIR_OUTPUT, 0, NULL, EC_WD_DISABLE},
{1, EC_DIR_INPUT, 0, NULL, EC_WD_DISABLE},
{2, EC_DIR_OUTPUT, 1, slave_0_pdos + 0, EC_WD_ENABLE},
{3, EC_DIR_INPUT, 1, slave_0_pdos + 1, EC_WD_DISABLE},
{0xff}
};