本文章为 周立功CANopen轻松入门 所摘抄的学习笔记
目录
1 CANopen与CAN的关系
2 网络管理(NMT)
2.1 NMT节点状态
2.2 NMT 节点状态切换命令
2.3 NMT节点上线报文
2.4 NMT节点状态与心跳报文
2.5 NMT节点守护
3 对象字典OD(Object dictionary)
3.1 通讯对象子协议区(Communication profile area)
3.2 制造商特定子协议(Manufacturer-specific Profile)
3.3 标准化设备子协议(Standardized profile area)
4 服务数据对象SDO(Service data object)
4.1 通讯原则(communication principle)
4.2 快速SDO协议(Expedited SDO protocol)
4.3 普通SDO协议(Normal SDO protocol)
5 过程数据对象PDO(Process data object)
5.1 PDO的CAN-ID定义
5.2 PDO 的传输形式
5.3 PDO的通信参数
5.4 PDO的映射参数
6 特殊协议(Special protocols)
6.1同步协议(Sync protocol)
6.2 时间戳协议(Time-stamp protocol)
6.3 紧急报文协议(Emergency protocol)
1 CANopen与CAN的关系
原始的CAN总线在OSI 7层网络模型中仅仅定义了物理层和数据链路层,没有规定应用层。因此,基本每个行业的 CAN 应用,都需要一个高层协议来定义 CAN 报文中标识符和数据段的内容。
CANopen协议是在20世纪90年代末,由总部位于德国纽伦堡的CiA组织——CAN-in-Automation,在 CAL(CAN Application Layer)的基础上发展而来。CiA 在 CANopen 基础协议——CiA 301 之上,对各个行业不断推出设备子协议,使 CANopen 协议在各个行业得到更快的发展与推广。
所谓的子协议,就是针对不同行业的应用对象,对CANopen 内部的数据含义进行重新定义,或者添加新的控制逻辑。
CANopen协议通常分为用户应用层、对象字典以及通信三个部分。
CANopen定义为小网络、 控制信号的实时通讯:
(1)报文传输采用 CAN 标准帧格式。即 11bit 的 ID 域,以尽量减小传输时间;
(2)网络控制报文均采用数据最小字节数。比如心跳报文,只有 1 个字节数据;实时更新的过程数据无需接收方报文应答。即采用生产消费模型,降低总线负载;
(3)需要接收方确认的配置参数一般都是采用快速单字传输。即 1 个报文最多传送 1个 32 字节的参数变量,避免了分帧引起的实时性降低。
注:CAN-ID、COB ID、Node ID区别
在CANopen中常把CAN-ID成为COB-ID(Communication Object Identifier),即CANopen中对某种通讯对象的报文帧ID,即CAN报文的11位ID;Node-ID为CAN节点号,是CAN设备在CAN网络中的节点地址。COB-ID和Node-ID无必然联系,只是在过程数据对象(PDO)和服务数据对象(SDO)中,COB-ID包含了Node-ID(4bit Function-ID+7bit Node-ID)
2 网络管理(NMT)
CANopen网络为了稳定可靠可控,都需要置一个网络管理主机NMT-Master(Network Management-Master)。所以每个 CANopen 从节点的 CANopen 协议栈中,必须具备 NMT 管理的相应代码,这是节点具备 CANopen 协议的最基本的要素。
NMT主机一般是CANopen网络中具备监控的PLC或者PC(当然也可以是一般的功能节点),所以也成为CANopen主站。相对应的其他CANopen节点就是NMT从机(NMT-slaves)。
NMT主机和NMT从机之间通讯的报文就称为NMT网络管理报文。管理报文负责层管理、网络管理和 ID 分配服务。例如,初始化、配置和网络管理(其中包括节点保护)。网络管理中,同一个网络中只允许有一个主节点、一个或多个从节点,并遵循主从模式。
2.1 NMT节点状态
NMT节点包含6中状态:
(1)初始化(Initializing):节点上电后对功能部件包括CAN控制器进行初始化;
(2)应用层复位(Application Reset):节点中的应用程序复位(开始),比如开关量输出、模拟量输出的初始值;
(3)通讯复位(Communication reset):节点中的CANopen通讯复位(开始),从这个时刻起,此节点就可以进行CANopen通讯了。
(4)预操作状态(Pre-operational):节点的CANopen通讯处于操作就绪状态,此时此节点不能进行PDO通信,而可以进行SDO进行参数配置和NMT网络管理的操作;
(5)操作状态(operational):节点收到NMT主机发来的启动命令后,CANopen通讯被激活,PDO通信启动后,按照对象字典里面规定的规则进行传输,同样SDO也可以对节点进行数据传输和参数修改;
(6)停止状态(Stopped):节点收到NMT主机发来的停止命令后,节点的PDO通信被停止,但SDO和NMT网络管理依然可以对节点进行操作;
2.2 NMT 节点状态切换命令
NMT 网络管理中,最核心的就是NMT节点状态切换命令,这是NMT主站所进行网络管理的“命令”报文。CANID 均为 000h,具备最高的CAN优先级。数据为2个字节:
第1个字节代表命令类型:
01h为启动命令(让节点进入操作状态);
02h为停止命令(让节点进入停止状态);
80h为进入预操作状态(让节点进入预操作状态);
81h为复位节点应用层(让节点的应用恢复初始状态);
82h为复位节点通讯(让节点的CAN和CANopen通讯重新初始化,一般用于总线收到干扰,导致节点总线错误被动,或者总线关闭时)。
第2个字节代表被控制的节点 Node-ID,如果要对整个网络所有节点同时进行控制,则这个数值为0即可。
2.3 NMT节点上线报文
任一CANopen从站上线后,为了提示主站它已经加入网络(便于热插拔),或者避免与其他从站Node-ID冲突。这个从站必须发出节点上线报文(boot-up)。节点上线报文的ID为 700h+Node-ID,数据为1个字节0。生产者为 CANopen从站。
2.4 NMT节点状态与心跳报文
心跳报文发送的格式,CANID与节点上线报文相同为700h+Node-ID,数据为 1个字节,代表节点目前的状态,04h为停止状态,05h为操作状态,7Fh为预操作状态。
2.5 NMT节点守护
在早期CANopen应用中,还有一种可以通过轮询模式监视从站状态的节点守护模式,它与心跳报文模式二者不能并存。通过节点守护,MNT主机可以检查每个节点的当前状态。
NMT-Master节点发送标准远程帧(无数据)如下:
NMT-Slave节点应答发送数据帧,数据为1个字节:
数据部分包括一个触发位(bit7), 触发位必须在每次节点保护应答中交替置“0”或者“1”。触发位在第一次节点保护请求时置为“0”。位 0 到位 6(bits0~6)表示节点状态。
由于远程帧在CAN发展中逐渐被淘汰,而节点守护由于需要更多的主站开销与增加网络负载, CiA协会已经不建议使用,被心跳报文所取代。
3 对象字典OD(Object dictionary)
CANopen对象字典(OD: Object Dictionary)是CANopen协议最为核心的概念。所谓的对象字典就是一个有序的对象组,描述了对应CANopen节点的所有参数,包括通讯数据的存放位置也列入其索引,这个表变成可以传递形式就叫做EDS文件(电子数据文档Electronic Data Sheet)。
每个对象采用一个16位的索引值来寻址,这个索引值通常被称为索引,其范围在0x0000到0xFFFF之间。为了避免数据大量时无索引可分配,所以在某些索引下也定义了一个8位的索引值,这个索引值通常被称为子索引,其范围是0x00到0xFF之间。每个索引内具体的参数,最大用32位的变量来表示,即Unsigned32,四个字节。
CANopen对象字典中的项由一系列子协议来描述。子协议为对象字典中的每个对象都描述了它的功能、名字、索引、子索引、数据类型,以及这个对象是否必需、读写属性等等,这样可保证不同厂商的同类型设备兼容。
网上看到的一个理解:对象字典就相当于菜单(OD),比如你去饭店吃饭,看到有好多菜(OD中的对象),菜前面都编着号(索引),然后有一些还会让你选甜口还是咸口,微辣还是加辣,也编着小号(子索引)。如果你选择困难,觉得自己点太麻烦,又看到有套餐(PDO),套餐包含的样式有限(64bit),然后你告诉服务员,我要套餐A(已经映射好OD中的对象的PDO),服务员听到后(PDO发送成功),不一会一下上来好几个菜。
对象字典索引区域定义如下
3.1 通讯对象子协议区(Communication profile area)
通讯对象子协议区( Communication profile area)定义了所有和通信有关的对象参数。标绿色底纹的索引范围 1000h to 1029h为通用通讯对象,所有CANopen节点都必须具备这些索引,否则将无法加入 CANopen 网络。
3.2 制造商特定子协议(Manufacturer-specific Profile)
对象字典索引2000h to 5FFFh为制造商特定子协议,通常是存放所应用子协议的实际应用数据。对于在设备子协议中未定义的特殊功能,制造商也可以在此区域根据需求定义对象字典对象。
3.3 标准化设备子协议(Standardized profile area)
标准化设备子协议,为各种行业不同类型的标准设备定义对象字典中的对象。目前已有十几种为不同类型的设备定义的子协议,例如 DS401、 DS402、 DS406 等,其索引值范围为 0x6000~0x9FFF。
4 服务数据对象SDO(Service data object)
服务确认是 SDO 的最大的特点,为每个消息都生成一个应答,确保数据传输的准确性。
4.1 通讯原则(communication principle)
SDO的通讯原则非常单一,发送方(客户端)发送CAN-ID为600h+Node-ID的报文,其中Node-ID为接收方(服务器)的节点地址,数据长度均为8字节;
接收方(服务器)成功接收后,回应CAN-ID为580h+Node-ID 的报文。这里的Node-ID依然是接收方(服务器)的节点地址, 数据长度均为8字节。
4.2 快速SDO协议(Expedited SDO protocol)
最常用最常见的SDO协议是快速SDO,所谓快速,就是1次来回就搞定。前提是读取和写入的值不能大于32位。为快速SDO协议的示意图。命令中直接包含了要读写的索引、子索引、 数据。
4.3 普通SDO协议(Normal SDO protocol)
当需要传输的值超过32位时,就不能使用快速SDO传输。必须使用普通SDO进行分帧传输。在应用中较少用到,一般用于CANopen节点的程序固件升级,或者做网关转换MVB总线之类数据最大可达256位的应用。
当然普通SDO的CAN帧ID与快速SDO相同,依然发送方(客户端)发送的报文CAN-ID为600h+Node-ID, 接收方(服务器)成功接收后, 回应CAN-ID为580h+Node-ID的报文。
将数据报以7字节分段,最后一段根据实际的字节数发送
(1)下载协议 download protocol
(2)上传协议 upload protocol
5 过程数据对象PDO(Process data object)
PDO 属于过程数据用来传输实时数据,即单向传输,无需接收节点回应CAN报文来确认,从通讯术语上来说是属于“生产消费”模型PDO。
5.1 PDO的CAN-ID定义
PDO 通信比较灵活,广义上只要符合PDO范围内的所有CANID都可以作为节点自身的 TPDO或者RPDO使用,也称为COB-ID,不受功能码和Node-ID限制
在PDO预定义中,人为规定了TPDO和RPDO,规定了Node-ID在PDO中的位置,规定了 PDO 的编号。PDO分为TPDO(发送PDO)和(接收RPDO),发送和接收是以CANopen节点自身为参考(如果CAN主站或者其他从站就相反)。 TPDO和RPDO分别有4个数据对象,每种数据对象就是1条CAN报文封装,这些都是数据收发的容器。
注:PDO预定义只是做了一个CAN-ID的划分,实际使用时不一定要严格保持一样,PDO中的CAN-ID的原则是保证在一个传输消息中双方使用相同的ID,不会导致两者之间的误解。例如我站在发送端的角度,可以将TPDO1定位180h+node ID。此时若一个节点利用RPDO1接收,也应该使用相同的CAN-ID去解析。当PDO数量超过4个时,也可以打破预定义的规则,比如我们可以定义 Node-ID为1的节点中TPDO5是182h,这里的 PDO的COB-ID中的低7位不再是表示Node-ID。
5.2 PDO 的传输形式
PDO 的两种传输方式:同步传输和异步传输。1、2为异步传输,3、4为同步传输。
(1)异步传输(由特定事件触发)
其触发方式可有两种, 第一种是由设备子协议中规定的对象特定事件来触发(例如,定时传输,数据变化传输等)。第二种是通过发送与 PDO 的 COB-ID 相同的远程帧来触发 PDO的发送。 目前应用中的异步传输基本都采用第一种。
(2)同步传输(通过接收同步对象实现同步)
同步传输就是通过同步报文让所有节点能在同一时刻进行上传数据或者执行下达的应用指令,可以有效避免异步传输导致的应用逻辑混乱和总线负载不平衡的问题。 一般发送同步报文的节点是 NMT 主机。
5.3 PDO的通信参数
PDO通信参数,定义了该设备所使用的COB-ID、传输类型、定时周期等。 RPDO通讯参数位于对象字典索引的1400h to 15FFh,TPDO通讯参数位于对象字典索引的1800h to 19FFh。 每条索引代表一个PDO的通信参数集,其中的子索引分别指向具体的各种参数。
5.4 PDO的映射参数
PDO 映射参数是初学者学习 CANopen 时的一个难点, 它包含了一个对象字典中的对象列表,这些对象映射到相应的 PDO,其中包括数据的长度(单位,位)
注:PDO映射相当于定义该PDO的数据组成成分,相当于将各个映射到的索引所指示的内容拼接成一个PDO帧发送。
6 特殊协议(Special protocols)
6.1同步协议(Sync protocol)
同步(SYNC),该报文对象主要实现整个网络的同步传输,每个节点都以该同步报文作为 PDO 触发参数,因此该同步报文的COB-ID具有比较高的优先级以及最短的传输时间。一般选用80h作为同步报文的 CAN-ID
同步协议有2个约束:
(1)同步窗口时间:同步帧发送后, 从节点发送PDO的时效, 即在这个时间内发送的PDO 才有效, 超过时间的PDO将被丢弃;
(2)通讯循环周期:规定了同步帧的循环周期。
6.2 时间戳协议(Time-stamp protocol)
时间戳协议采用广播方式,无需节点应答,CAN-ID为100h,数据长度为6,数据为当前时刻与 1984 年1月1日0时的时间差。节点将此时间存储在对象字典1012h的索引中。
6.3 紧急报文协议(Emergency protocol)
紧急事件对象(Emergency),是当设备内部发生错误,触发该对象,发送设备内部错误代码,提示 NMT主站。紧急报文属于诊断性报文,一般不会影响CANopen通讯,其CAN-ID存储在 1014h的索引中,一般会定义为080h +node-ID,数据包含8个字节。