can 和canopen 协议
CAN现场总线仅仅定义了第 1 层、 第 2 层; 实际设计中,这两层完全由硬件实现,设计人员无需再为此开发相关软件或固件。
同时 CAN 只定义物理层和数据链路层, 没有规定应用层, 本身并不完整, 需要一个高层协议来定义CAN 报文中的 11/29 位标识符、 8 字节数据的使用。
而且, 基于 CAN 总线的工业自动化应用中, 越来越需要一个开放的、 标准化的高层协议。这个协议支持各种 CAN 厂商设备的互用性、 互换性,
能够实现在 CAN网络中提供标准的、统一的系统通讯模式,提供设备功能描述方式,执行网络管理功能。
基于 CAN 的高层协议主要有CAL 协议和基于 CAL 协议扩展的 CANopen 协议。 CANopen协议是 CAN-in-Automation(CiA)定义的标准之一,
并且在发布后不久就获得了广泛的承认。 尤其是在欧洲,CANopen 协议被认为是在基于 CAN 的工业系统中占领导地位的标准。
大多数重要的设备类型,例如数字和模拟的输入输出模块、驱动设备、操作设备、控制器、可编程控制器或编码器,都在称为“设备描述”的协议中进行描述;
“设备描述” 定义了不同类型的标准设备及其相应的功能。 依靠 CANopen 协议的支持,可以对不同厂商的设备通过总线进行配置。
一、can协议
CAN协议的报文传输主要由下面的4种帧来实现:
数据帧:从发射端携带数据到接收端。
一个完整的数据帧有7部分组成,依次为帧起始(SOF)、仲裁场(Arbitration Field)、控制场(Control Field)、数据场(Data Field)、CRC场、
应答场(ACK Field)、帧结尾(EOF)。
标准帧ID是11位,扩展帧ID是29位
远程帧:总线单元发出远程帧,请求发送具有同一识别符的数据帧。
远程帧的主要作用是向其他的CAN节点发送数据请求,发送相同标识符的数据帧。与数据帧相比,远程帧的RTR位是隐性的,而且没有数据场。
错误帧:任何单元检测到一总线错误就发出错误帧。
过载帧:过载帧用以在先行的和后续的数据帧(或远程帧)之间提供一附加的延时。
同时帧间空间用来间隔数据帧/远程帧与其他帧。
二、canopen协议
CANOpen协议是处于应用层
一个CANOpen设备从结构上可以分为3个模块。
对象字典描述了所有的数据类型,通讯对象和应用对象。通讯模块可以收发总线上的各种通讯对象。应用模块提供了控制功能和处理硬件的接口。
对象字典是通讯模块和应用模块之间的接口。
1、对象字典
i、对象字典的结构
对象字典是CANOpen最重要的特性,它将设备的描述标准化。
对象字典中的每一个对象都由16位的索引和8位的子索引来寻址。对于单个的对象字典项子索引总是0,所以一个数据字典最多有65536项。
静态数据类型包含标准数据类型的定义,比如BOOLEAN, INTEGER, floating, string,等。
复杂数据类型包含那些由标准数据类型构成的预定义的数据结构,他们对所有设备都是通用的。
制造商定义的复杂数据类型是由标准数据类型构成的数据结构,但是这些数据类型只是特定的设备使用。
设备子协议可能会为它们的设备定义一些额外的数据类型其中静态数据类型存放在0060-007F,复杂数据类型存放在0080-009F。
通讯子协议区指定了CAN网络的一些参数,它们对所有设备都是通用的。
标准设备子协议区包含了一类设备的所有数据对象。它们可以通过CAN网络读写。
2、通讯对象
ANOpen协议共有6种通讯对象,分别是:PDO、SDO、SYNC、TIME、EMCY、NMT。这6种通讯对象完成了CANOpen协议的所有通讯功能。
其中我们只介绍使用较多的PDO、SDO。
i、通讯对象ID
CANOpen协议的通讯对象主要利用了CAN协议中的数据帧和远程帧。为了区分不同的通讯对象,CANOpen协议利用数据帧/远程帧中的ID。
其中第7位到第10位为功能代码。第0位到第6位为节点ID,用以区分不同节点的相同功能。这样就允许最多127个从节点与主节点通讯。
COB-ID的大小也决定了通讯对象的优先级,其中NMT的优先级最高,PDO的优先级高于SDO。
ii、PDO
CANOpen中的实时数据传输是由PDO来完成的。PDO的传输采用了生产者消费者模式。共有两种PDO,TPDO和RPDO。
TPDO用来传输数据,支持TPDO的节点都是PDO数据的生产者。RPDO用来接收PDO数据,支持RPDO的节点是PDO数据的消费者。
一个节点最多支持4个TPDO(分别是180h+NodeID、280h +NodeID、380h+NodeID、480h +NodeID)
和4个RPDO(分别是200h +NodeID、300h +NodeID、400h +NodeID、500h +NodeID)。
每一个PDO都对应一些参数,包括通讯参数和映射参数。
PDO的参数包括两部分,通讯参数和映射参数。他们占据了对象字典中从1400到1BFF之间的位置。
PDO的通讯参数定义了COB-ID,传输类型(同步,异步,循环,时间出发),inhibit time(两个PDO的最小间隔)等
PDO的映射参数.一个PDO最多可以映射到64个对象。每一项的含义见图29。最高16位是对象字典的索引,后面8位是子索引。最低8位是数据长度。
iii、SDO
SDO(Service Data Object)使用Client-Server模式建立起点到点的通讯并实现了对对象字典中条目的读写。其中被访问的对象字典的所在设备作为Server,
访问对象字典的设备作为client。SDO采用的请求应答模式,每次SDO访问都会有2条CAN的数据帧对应。一条是请求,一条是应答。
SDO主要提供3种服务:段传输,块传输,中止传输。
段传输---首先由client端发起,然后Server端应答。这样一来一回。知道把数据传输完毕。当传输的数据长度小于4时,一次应答就可把数据传输完毕。
块传输---主要目的是为了提高传输效率。它与段传输的主要区别在于:块传输时,可以传输多次数据之后,才会有一次应答。
CANOpen将数据分为多个block,每个block又由1-127个segment组成。在传输完一个block的数据之后,才会有一次的应答。
中止传输---无论CAN设备处于段传输还是块传输中,都可以使用中止传输协议来中止传输。