CANopen协议报文处理

  • Post author:
  • Post category:其他



CAN 报文由 7 个不同的位域组成,而 CANopen 就是规定其中的仲裁域(11 位标识符) 和数据域(8 字节数据) 的使用情况,11 位标识符和 8 字节数据在 CAN 帧中的位置如下图所示:





图1.1 CANopen的标识符和数据在CAN帧中的位置




CANopen 协议中的各种通讯对象通过 11 位标识符中的功能码部分(10-7 位) 进行分别,比如主节点发送 NMT 控制命令功能码为 0000,SDO 的功能码为 1011(发送) 和 1100(接收) 。CAN 网络中各个从节点的 ID 用节点 ID(6-0 位) 表示,最多可以有127 个从节点。


不同通讯对象对

8

字节数据的使用及各字节代表的意义不同。


(1) 过程数据对象(PDO) :8 个字节全部用来传输实时数据。


(2) 服务数据对象(SDO) :使用 8 个字节,各字节表示的意义如表 1-1。


表1-1 SDO对象数据字节的使用


字节0


字节1~2


字节3


字节4~7


SDO命令字


对象索引


对象子索引


数据值



(3) 网络管理对象(NMT) :NMT 对象使用 2 字节数据,心跳报文使用 1 字节数


据,表示的意义如表1-2


和1-3。


表1-2 NMT对象数据字节的使用


标识符


字节0


字节1


0x000


命令字


从节点ID



表1-3 心跳报文数据字节的使用


标识符


字节0


0x700+Node_ID


从节点状态




CANopen 协议作为 CAN 总线的应用层协议,主要对 CAN 报文中可用于报文控制的 11/29 位 CAN-ID 和 8 字节数据进行定义,实现应用层功能。


CANopen 协议使用 11/29 位 CAN-ID 对报文进行分类,协议支持的报文有以下几类:


1. SDO(服务数据对象)报文。SDO 报文的主要用途是主从节点的数据交互。使用 SDO 报文进行通信时,接收报文的节点需要回送报文进行应答,因此 SDO报文实现的是一种面向连接的可靠性通信。关于 SDO 报文通信的详细定义和处理流程将在后面讨论


2. PDO(过程数据对象)报文。PDO 报文的主要用途与 SDO 报文类似,也是用于主从节点数据交互。与 SDO 报文的主要区别在于,使用 PDO 报文通信时,接收报文的节点不需要回送应答;另外 PDO 报文对数据的访问方式与 SDO 报文不同,PDO 报文的数据访问效率比 SDO 报文更高,因此 PDO 报文常用于需要频繁操作的数据,以及需要高效率传输的数据。PDO 报文可采用同步方式或者异步方式进行传输。当需要同步传输 PDO 报文时,设备的对象字典需要支持同步周期字典项(索引值 0x1006)。


3. NMT(网络管理)报文。该报文的主要功能是进行网络管理,CANopen 主节点通过发送 NMT 报文控制从节点的启动,停止,运行等状态切换,从节点通过NMT 报文(具体来说是心跳报文)来通知主节点自己上线或者下线。


4. 特殊功能报文,主要包括同步报文,紧急事件报文,时间邮戳报文等。



版权声明:本文为iamplane原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。