CANopen学习

1.CANopen协议总述

CANopen 是一个基于 CAN 串行总线的网络传输系统的应用层协议,遵循 ISO/OSI 标准模型。

网络中不同的设备通过对象字典或者对象来相互交换数据,其中,主节点可以通过过程数据对象 (PDO) 或者服务数据对象 (SDO) 来获取或者修改其它节点对象字典列表中的数据。

CANopen协议主要内容分为三大块,如下图CANopen 的设备模型。

推荐书籍:周立功的《CANopen轻松入门》,建议详细拜读,可以带大家入门。

2.通讯接口

入门之后若要深入理解,我建议参看官网的《CANOpen CiA 301》标准这本文档

CiA(CAN in Automation) 301也是大家所说的DS301,为CANopen 基础协议。

我们还常看到类似CiA 401 402这些协议,其实它们是在CiA 301 之上,对各个行业不断推出设备子协议。

所谓的子协议,就是针对不同行业的应用对象,对 CANopen 内部的数据含义进行重新定义,或者添加新的控制逻辑。

按照CANOpen CiA 301协议文档,提取了通信接口的主要内容,如下图:

2.1 网络管理(NMT),包括 Boot-up(上线) 消息, Heartbeat(心跳) 协议及 NMT 消息,基于主从通信模式,

NMT 用于管理和监控网络中的各个节点,主要实现三种功能:节点状态控制、错误控制和节点启动。

  CANOpen网络一般是一个主站,多个从站的局域网络;

  NMT节点具有6种状态:初始化、应用层复位、通讯复位、预操作状态、操作状态、停止状态。可以自己切换状态,也可主站切换状态;

  任何一个 CANopen 从站上线后发出节点上线报文(boot-up)。

2.2 过程数据对象 PDO

每个 CANopen 设备包含 8 个缺省的 PDO 通道, 4 个发送 PDO 通道和 4 个接收 PDO 通道。

  PDO用来传输实时数据,包括接收 PDO(RPDO) 和发送 PDO(TPDO),数据从一个创建者传到一个或多个接收者,属于“生产消费”模型,数据传送限制在 1 到 8 个字节。

  COB-ID( CAN Object Identifier,CANID是其一部分,NodeID是CANID的低7位) 定义只是预定义。

  PDO 的两种传输方式:同步传输和异步传输,由该 PDO 对应的通信参数决定。

  PDO 的通信参数可通过对象字典工具配置。

  PDO 消息的内容是预定义的,由该 PDO 对应的映射参数决定。PDO 的映射参数是一个相对难理解的参数,请结合《CANopen 轻松入门》图文理解。

2.3 服务数据对象 SDO

包括接收 SDO(R-SDO) 和发送 SDO(T-SDO)。

通过使用索引和子索引, SDO 使客户机能够访问设备对象字典中的项。

SDO 通过 CAL 中多元域的 CMS 对象来实现,允许传送任何长度的数据,当数据超过 4 个字节时分拆成几个报文。

协议是确认服务类型,为每个消息生成一个应答。 SDO 请求和应答报文总是包含 8 个字节。

  SDO为请求应答方式;

  发送方(客户端)、接收方(服务器) ;

  通常从节点为 SDO 服务器,主节点为客户端;

  两种协议:快速、普通 SDO 协议;

       CS命令符含义需熟记(查表);

2.4 特殊协议

2.4.1.常见的就是罗列出来的3种:

    同步协议,包含同步对象,同步对象是由 CANopen 主站周期性地广播到 CAN 总线的报文,用来实现基本的网络时钟信号,

 每个设备可以根据自己的配置,决定是否使用该事件来跟其它网络设备进行同步通信。

    时间戳协议。

    紧急报文协议,设备内部通信故障或者应用故障错误时发送的报文。

2.4.2.特殊协议CAN-ID定义(查表);

2.4.3.紧急报文错误代码分类及含义;

3.对象字典

CANopen设备最重要的一个部分就是对象字典。对象字典本质上是一种被预先安排的对象序列,可通过网络访问。字典里面的每一对象均可使用一个16-bit主索引和8-bit子索引寻址到。

对象字典下面主要包含:数据类型、通信对象、应用对象。

3.1 通信子协议区,如上图1000h 到 1FFFh这个区域。也就是通信接口(或通信对象)协议区。

关于创建对象字典,可以使用Canfestival工具,详见:http://www.elecfans.com/d/1153555.html

猜你喜欢

转载自www.cnblogs.com/merlinzjl/p/12907790.html