CanOpen的SDO、PDO简单通信使用

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

重点注意:要映射参数必须先将子索引禁用后才能映射,再设置映射数量。

CanOpen的SDO、PDO简单通信使用_第1张图片

3.使用(0x180、0x200等)

CanOpen的SDO、PDO简单通信使用_第2张图片

通过上面的操作,映射0x1a00后,设备发来的COB-ID是0x181,数据则为映射的索引下的值。同理,映射0x1600后,想要修改此索引下的值,则向设备发送的COB-ID是0x201,数据为想要更改的值。

你可能感兴趣的:(记录,canopen)