什么是CANOpenCANOpen是位于CAN总线之上的一个应用层协议。CAN总线只规定了物理层和数据链路层,有了这两层,数据就可以在CAN总线上传输了。我们和哪个设备通信就和哪个设备约定好,哪个ID代表什么,哪个字节代表什么,但是这样一来,每个厂家的设备都定义一个自己的协议,岂不是乱套了。如果约定好一个开放的,标准化的协议,厂商都去遵循这个约定好的标准,那么设备之间互相通信就简单了。 CANOpen协议CANOpen 是由一系列协议组成的。比如CiA301、CiA401、CiA402协议等等。 CANOpen协议报文分类NMT网络管理报文,作用是管理网络,切换节点的状态。一般由主站发送NMT网络管理报文。 CANOpen状态机CANOpen节点共包括:初始化、预操作、操作、停止这四个状态。状态机可以通过NMT服务相互切换。如下图: NMT报文只有CANOpen主站才会发送NMT报文。NMT报文不需要应答,是生产者消费者模型的。NMT报文的ID固定是0,数据域有两个字节,第一个字节是命令,第二个字节是Node-ID。Node-ID为0表示所有的从站。如下图 节点保护报文通过节点保护报文主站可以监视每个从节点的当前状态。主站周期性的发送节点保护报文询问从站的状态,从站收到主站的询问后将自己的状态返回给主节点。
心跳报文:心跳报文是从节点主动发送报文给主节点。心跳报文是周期性的,主节点为每一个从节点设置一个超时时间,如果超时时间到的时候还没有收到从节点的心跳报文,主站将对从站进行相应的动作。 节点上线报文从站主动发送节点上线报文通知主站它已经从初始状态进入到了预操作状态。启动报文如下: SYNC同步报文同步报文的CAN-ID固定是0x80,数据长度是0或1。同步报文是生产者消费者模型,由主站发出,同步从站的TPDO。 EMCY紧急报文当设备内部发生错误,触发该对象,紧急报文的格式如下: 紧急报文的COB-ID存储在0x1014的索引中,一般会定义为0x80+Node-ID。 SDO报文SDO是客户端服务器模型的。通过使用索引子索引SDO客户机能访问设备对象字典中的对象。 SDO读报文如下:
SDO写报文如下
关于PDO通信在下一篇文章中介绍。 |
|