CanOpen部分笔记:
CanOpen的一些简单的使用记录。为了简单明了,假设现在是用CAN盒子向使用CanOpen协议的设备通信(假设设备地址ID为0x01)。
SDO通信:
如果想要读取设备某个参数。则使用
此数据格式发送。
比如读取设备索引为0x60c1,子索引0x01的参数。则发送如下参数:
发送:0x601 40 c1 60 01 00 00 00 00
接收:0x581 43 c1 60 01 01 02 03 04
其中发送中的0x40表示读取数据,接收中的0x43表示接收到4个字节,即数据为0x04030201。
同理:0x4f表示参数响应为一个字节,0x4b表示参数响应为两个字节,0x47表示参数响应为三个字节,0x43表示参数响应为四个字节。
如果想要修改设备某个参数。则使用
其中2F表示的是写入一个字节。对于多个字节,则将2F更换为其他。比如2B表示写入两个字节,比如27表示写入三个字节,比如23表示写入四个字节。
比如向设备索引为0x60c1,子索引0x01写入0x123456。则发送如下参数:
发送:0x601 27 c1 60 01 56 34 12 00
接收:0x581 60 c1 60 01 00 00 00 00
其中发送中的0x60表示写入成功。
PDO通信:
1.Transmit - PDO (TPDO)
如果想要事件发生后接收到PDO上报相应的信息,则需要将索引映射到0x1a00等对象字典,并设置相应的通信参数0x1800等。
此举例将索引0x60c1、子索引0x01、字节32位映射到0x1a00。首先设置通信参数0x1800。参数如下:
发送:0x601 2f 00 18 02 ff 00 00 00 设置索引 1800,事件传输(ff)
发送:0x601 2f 00 18 05 0a 00 00 00 设置索引 1800,时间间隔10ms(0a)
设置完通信再去映射参数。参数如下:
发送:0x601 2f 00 1a 00 00 00 00 00 设置子索引禁用
发送:0x601 23 00 1a 01 20 01 c1 60 设置映射索引0x60c1,子索引01,大小0x20(32位)
发送:0x601 2f 00 1a 00 01 00 00 00 设置映射数量01
2.Receive - PDO (RPDO)
如果想要直接修改某一参数,则需要将索引映射到0x1600等对象字典,并设置相应的通信参数0x1400等。
此举例将索引0x60c1、子索引0x01、字节32位映射到0x1a00。首先设置通信参数0x1400。参数如下:
发送:0x601 2f 00 14 02 ff 00 00 00 设置索引 1800,事件传输(ff)
设置完通信再去映射参数。参数如下:
发送:0x601 2f 00 16 00 00 00 00 00 设置子索引禁用
发送:0x601 23 00 16 01 20 01 c1 60 设置映射索引0x60c1,子索引01,大小0x20(32位)
发送:0x601 2f 00 16 00 01 00 00 00 设置映射数量01
重点注意:要映射参数必须先将子索引禁用后才能映射,再设置映射数量。
3.使用(0x180、0x200等)
通过上面的操作,映射0x1a00后,设备发来的COB-ID是0x181,数据则为映射的索引下的值。同理,映射0x1600后,想要修改此索引下的值,则向设备发送的COB-ID是0x201,数据为想要更改的值。