canopen部分 1 简介
1. canopen与cia301协议
CAN报文可以分为数据部分和ID部分,因为多了ID协议的制定可以更加灵活,各个厂家可以根据自己的喜好进行编写协议.
所以就会出现各种各样的用法,各种各样的协议.
CANopen是一个上层的协议.目的是为了消除这种乱糟糟的场面.让CAN报文有更加明确的分类和用途,结合特点发挥出最大优势.所以产生了cia301协议.cia301基本上就等同于CANopen了.
Cia301协议是CANopen最基础的协议.它规定了ID和报文的分类用法,之后大家都按照这个协议去做.
CAN通信的一个特点是有ID.针对ID,CANopen做了下面的功能:


Cia301协议中根据ID的不同,区分不同种类报文,主要划分了下面几类:
SDO :服务器---客户端模式,用于通信,主要用于配制参数.
PDO :生产者---消费者模式用于通信.
NMT :网络管理.用于切换节点工作状态.
……
上面的报文就是通信的基础,通信是为了改变参数.
传输过程中的数据,总要有个地方进行保存,CANopen一般把传输中的数据存到”字典”(即OD)里.字典是CANopen另一个重要的概念,字典里面存有参数和状态.
字典可以看成是一个储物柜.储物柜里面有很多小格子.每个格子上面都有编号(编号就是索引).索引是索引,ID是ID.不能混淆.
举例:
601, 40 ff 60 00 00 00 00 00
202,e8 03
000,01 00
上面是三种从can总线上接收的报文.
怎么去解读,601, 40 ff 60 00 00 00 00 00
首先看ID,查找cia301手册,
可以知道601h是可以拆分成600+1.
1代表向1号驱动器发送的数据.
600h代表了它是一条SDO,然后后面的8字节的数据,就要按照SDO的格式去解析.并不能按照其他的报文解析.
SDO格式在cia301中也有规定,后面的数据,40 ff 60 00 00 00 00 00.可以拆分:
40代表读指令.
Ff 60是小端,正确顺序是60ffh 代表索引是60ff
00是自索引
00 00 00 00是真正的数据,因为这条指令是读指令,所以数据默认填0即可.
至于60ff索引00自索引里面存的是什么数据,就要查看cia402协议了.
这个是字典的东西.所以查看cia402协议,这里存的是驱动器设置的速度值.
怎么去解读,202,e8 03
这里通过查询cia301,可以知道202h拆分为200+2,
2代表向2好驱动器发送的数据.
200是PDO的ID.所以后面的数据e8 03要按照PDO的格式去拆分.
怎么去解读,000,01 00
这里通过查询cia301协议可以知道000是NMT的ID.
所以这条报文是NMT指令,需要按照NMT格式解析.
01 00 可以拆分成:
01:节点进入操作模式.
00:广播模式,通知所有节点.
也即是让所有驱动器进入操作模式.
ID为0x601,等于600+1,其中600就是功能码,1就是节点号.
功能码600代表的是SDO的ID(没有理由,协议规定好的,需要根据协议,记住一些常用的ID),
通过这个0x601的ID我们就可以获得一些信息: (SDO协议的格式)
这个can报文是SDO类型的,并且是发送给1号节点的.
至于发送到1号节点的哪个索引,就需要根据CAN报文后面的数据了.
CAN除了ID,还会有8个字节数据,
按照SDO格式:其中前4个字节被用作命令码,索引和子索引,后面的4个字节才是真正的数据.
如果ID为0x201,则201=200+1;
200是功能码,代表PDO.
1是节点号,代表这条报文是发送给1号节点的.
那么按照PDO的规则,CAN报文后面的8个数据字节(可根据情况减少,最多8个字节),都是表示数据的.
至于为什么600是SDO的功能码,200是PDO的功能码,是因为cia301协议规定好的.大家都会按照cia301协议去做.(需要记住一些常用的报文ID和字典中常用的索引)