文章目录
第7章 COE
7.1 COE简介
Canopen Over Ethercat(COE),COE是将Canopen作为Ethercat的应用层协议。你可以理解为Ethercat的数据部分需要按照Canopen的格式来进行解析,但是主站在向从站发起读或者写请求后,需要主动去读取从站的回复数据。下面简单对比一下Canopen在CAN总线上和Ethercat总线上的区别。
Ethercat | CAN | |
---|---|---|
非周期性通信 | 邮箱数据通信 | SDO |
周期性通信 | 过程数据通信 | TPDO、RPDO |
COB-ID | 无,ethercat有自己的寻址方式 | 有 |
PDO映射参数 | 0x1600~0x17FF 0x1A00~0x1BFF | 0x1600~0x17FF 0x1A00~0x1BFF |
PDO映射配置 | 0x1400~0x15FF 0x1A00~0x1BFF | 0x1C10~0x1C2 |
7.2 COE非周期性数据通信
7.2.1COE邮箱数据结构
Ethercat主站通过读写邮箱数据实现COE的数据通信,COE协议的邮箱数据结构如下表所示。
邮箱数据头 | 命令 | 数据 |
---|---|---|
6字节 | 2字节 | 最多1478字节 |
1、邮箱数据头
邮箱数据头的结构如下表所示。
数据区域 | 大小 | 说明 |
---|---|---|
Length | 2byte | 邮箱数据的长度,包含2个命令字节。 |
Address | 2byte | 如果主站是客户机,指源站地址,如果从站是客户机,指目的地址。 |
Channel | bit[0:5] | 保留,默认0 |
Priority | bit[6:7] | 数据的优先级,0~3;0最低。 |
Type | bit[0:3] | 0x00:错误;0x01:保留;0x02:EOE;0x03:COE;0x04:FOE;0x05:SOE;0x06~0x0E:保留;0x0F:供应商特定 |
Cnt | bit[4:6] | 邮箱服务计数器(1~7)。从站与主站的邮箱数据中的Cnt没有关联,两者都是递增的。从站通过主站邮箱数据中的Cnt来判断是否是重复写服务。主站通过从站邮箱服务的Cnt可以检查出是否丢包。 |
Reserved | bit[7] | 保留,默认0 |
2、命令
命令字的结构如下表所示。
数据区域 | 大小 | 说明 |
---|---|---|
PDO编号 | bit[0:8] | TPDO或这RPDO的编号。在请求PDO数据的时候才会用到(传输类型为47的时候)。目前47类型的传输基本上没看到有用过,因此也没看到有例程来解释这个编号的值。个人认为这个编号的值可以自定义,但是主站和从站的编号需要对应起来。例如主站在通过邮箱来请求TPDO的数据的时候需要通过编号来告知从站想要请求哪个TPDO的数据,从站收到编号后返回对应的数据。 |
保留 | bit[9:11] | 默认0 |
传输类型 | bit[12:15] | COE服务类型:0:保留;1:紧急事件信息;2:SDO请求;3:SDO响应;4:TXPDO;5:RXPDO;6:远程TXPDO发送请求;7:远程RXPDO发送请求;8:SDO信息;9~15:保留 |
注:远程TXPDO发送请求一般是主机想要通过邮箱读取TXPDO数据时向从机发送的请求,TXPDO则是从站的回复。远程RXPDO发送请求是从机向主机请求RPDO的数据,RXPDO是主机的回复。
3、数据
数据区域的结构如下表所示。
SDO控制字节 | 索引 | 子索引 | 标准数据 | 可选扩展数据 |
---|---|---|---|---|
1byte | 2byte | 1byte | 4byte | 0~1470字节 |
7.2.2 SDO服务说明
1、传输方式
SDO传输分为三种传输:快速传输,常规传输、分段传输。
- 快速传输:与标准的Canopen协议相同,数据是8个字节,最多能传输4字节的有效数据。
- 常规传输:它的数据长度超过8个字节,最大可传输长度取决于SM所管理的邮箱大小。
- 分段传输:当传输的数据总长度超过了邮箱的大小,则需要采用分段传输。分段传输的时候,第一包还是使用常规传输,后续的包采用分段传输。
2、SDO控制字节
(主站)快速传输与常规传输下载请求的控制字节
名称 | 大小 | 说明 |
---|---|---|
数目指示 | bit[0] | 0:未设置字节数目;1:设置字节数目 |
传输类型 | bit[1] | 1:快速传输;0:常规传输 |
传输字节数 | bit[2:3] | 快速传输时有效 4-x;x表示传输的有效字节数。例如1字节的数据,那么这里4-1=3; |
完全操作 | bit[4] | 0:操作索引号和子索引指定的对象字典;1:操作完整的对象字典,子索引应该为0或1,表示操作从子索引0或1开始的所有对象字典 |
CS命令码 | bit[5:7] | 0x01下载请求 |
传输 | 控制字 |
---|---|
快速传输下载请求 | 0x23,0x27,0x2B,0x2F |
常规传输下载请求-非完全操作 | 0x21 |
常规传输下载请求-完全操作 | 0x31 |
(从站)快速传输与常规传输下载响应的控制字节
名称 | 大小 | 说明 |
---|---|---|
保留 | bit[0:4] | 默认为0 |
CS命令码 | bit[5:7] | 0x03下载响应 |
传输 | 控制字 |
---|---|
快速传输与常规传输下载响应 | 0x60 |
(主站)分段传输下载请求的控制字节
名称 | 大小 | 说明 |
---|---|---|
是否有后续分段 | bit[0] | 0:有后续传输分段;1:最后一个下载分段 |
分段数据数目 | bit[1:3] | 如果最后一帧的数据的长度不大于7,那么这里为7-x,x表示最后7个字节中有效数据的数目。其他情况为0。 |
toggle | bit[4] | 翻转握手,每次在分段传输请求时翻转,第一个分段传输的值是0。 |
CS命令码 | bit[5:7] | 0x00分段下载请求 |
(从站)分段传输下载响应的控制字节
名称 | 大小 | 说明 |
---|---|---|
保留 | bit[0:3] | 默认为0 |
toggle | bit[4] | 翻转握手,每次 |