canopen

本文介绍了CANOpen协议,一个用于CAN总线的应用层标准,包括其组成(用户应用层、对象字典和通信)、主要报文类型(如NMT、SDO、PDO、EMCY、SYNC)以及状态机和报文功能。重点讲述了NMT网络管理、SDO服务数据对象和节点保护等报文的作用和工作方式。
摘要由CSDN通过智能技术生成

什么是CANOpen

CANOpen是位于CAN总线之上的一个应用层协议。CAN总线只规定了物理层和数据链路层,有了这两层,数据就可以在CAN总线上传输了。我们和哪个设备通信就和哪个设备约定好,哪个ID代表什么,哪个字节代表什么,但是这样一来,每个厂家的设备都定义一个自己的协议,岂不是乱套了。如果约定好一个开放的,标准化的协议,厂商都去遵循这个约定好的标准,那么设备之间互相通信就简单了。
CANOpen协议通常分为用户应用层、对象字典、通信这三个部分。

CANOpen协议

CANOpen 是由一系列协议组成的。比如CiA301、CiA401、CiA402协议等等。
CANOpen的基础协议是CiA 301协议。每个行业还有自己的设备子协议,

CANOpen协议报文分类

NMT网络管理报文,作用是管理网络,切换节点的状态。一般由主站发送NMT网络管理报文。
SDO服务数据对象报文,作用是设置设备参数,或者是一些关键数据的传输。一般由主站发起SDO报文,从站应答SDO报文。从站也可以发起SDO,主站响应,比如关键数据的传输。
PDO过程数据对象报文,作用是传输一些设备的过程数据,比如传输温度,速度等等。主站和从站都会发送。
EMCY紧急报文,作用是传输设备的故障信息。主站和从站都会发送。
SYNC同步报文,SYNC在CANOPEN网络中的作用是提供同步机制,用来同步数据,比如用来同步从站的TPDO数据。一般由主站发送。假设从站的TPDO传输类型是在同步模式下,当从站收到设定次数的SYNC报文后,从站会发送TPDO。至于PDO如何传输数据在后续的文章中详细阐述。SYNC同步报文的格式:COB-ID是0x80,数据帧,数据长度是0。SYNC报文的优先级仅次于NMT报文的优先级,SYNC的报文没有数据,足够短小,其目的就是为了快,减小抖动。
NODE GUARDING节点保护报文,作用是主站请求从站的状态,主站询问,从站应答。这种模式逐渐已被淘汰,因为太占CAN总线网络带宽。
HeartBeat心跳报文,作用是设备主动发送心跳,表示自己在线。主站和从站都可以发送。

CANOpen状态机

CANOpen节点共包括:初始化、预操作、操作、停止这四个状态。状态机可以通过NMT服务相互切换。如下图:
在这里插入图片描述

NMT报文

只有CANOpen主站才会发送NMT报文。NMT报文不需要应答,是生产者消费者模型的。NMT报文的ID固定是0,数据域有两个字节,第一个字节是命令,第二个字节是Node-ID。Node-ID为0表示所有的从站。如下图
在这里插入图片描述

节点保护报文

通过节点保护报文主站可以监视每个从节点的当前状态。主站周期性的发送节点保护报文询问从站的状态,从站收到主站的询问后将自己的状态返回给主节点。
主站发送的是远程帧,请求从站的状态。从站应答的数据只有一个字节,这个字节bit7是交替0、1出现的。bit0~bit6表示从站的状态。
主站请求格式和从站应答格式如下图:
在这里插入图片描述
从站应答的状态字如下图:

在这里插入图片描述
节点保护报文是0x700+Node-ID ,这个Node-ID是从站的Node-ID,每个节点都要请求一次应答一次。节点保护相对于心跳来说太占用网络带宽了。

心跳报文:

心跳报文是从节点主动发送报文给主节点。心跳报文是周期性的,主节点为每一个从节点设置一个超时时间,如果超时时间到的时候还没有收到从节点的心跳报文,主站将对从站进行相应的动作。

节点上线报文

从站主动发送节点上线报文通知主站它已经从初始状态进入到了预操作状态。启动报文如下:
在这里插入图片描述

SYNC同步报文

同步报文的CAN-ID固定是0x80,数据长度是0或1。同步报文是生产者消费者模型,由主站发出,同步从站的TPDO。
在这里插入图片描述

在这里插入图片描述

EMCY紧急报文

当设备内部发生错误,触发该对象,紧急报文的格式如下:

在这里插入图片描述

紧急报文的COB-ID存储在0x1014的索引中,一般会定义为0x80+Node-ID。
紧急报文的ECC(紧急错误代码)如下:
在这里插入图片描述
紧急报文的错误寄存器位于0x1001索引中。
紧急报文的生产禁止时间,存储在索引0x1015中,防止一直发送紧急报文,占用CAN总线带宽。

SDO报文

SDO是客户端服务器模型的。通过使用索引子索引SDO客户机能访问设备对象字典中的对象。
SDO通常情况下传输的数据长度不超过4个字节,当数据长度超过4字节是分拆成几个报文发送的。
在这里插入图片描述

SDO读报文如下:

在这里插入图片描述
在这里插入图片描述

SDO写报文如下

在这里插入图片描述
在这里插入图片描述
如果使用SDO读取或写入的时候返回0x80错误的话,可以查询返回数据帧的后4个字节,后4个字节是被称为是中止代码,通过中止代码能得知出错的原因。中止代码如下:
在这里插入图片描述

关于PDO通信在下一篇文章中介绍。

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~晓广~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值