原创 【博客大赛】CAN总线应用协议CANOPEN分析

2013-9-12 22:47 2843 17 22 分类: 汽车电子

 

CANopen协议分析

     作为一种真正开放的CAN总线高层协议,CANopen协议允许不同的CAN设备以标准化的方式进行通讯,使得CAN设备具有互操作性.随着CANopen协议的日益完善,它已经广泛应用于多个行业.本文将对CANopen协议的对象字典、通讯对象及网络管理等几个方面进行简要分析。

 1CANopen对象字典

  CANopen对象字典OD(Object Dictionary)是CANopen协议最为核心的概念。所谓的对象字典就是一个有序的对象组,每个对象采用一个16位的索引值来寻址,这个索引值通常被称为索引,其范围在0x1000~0x9FFF之间。为了允许访问数据结构中的单个元素,同时也定义了一个8位的索引值,这个索引值通常被称为子索引。

   每个CANopen设备都有一个对象字典,对象字典包含了描述这个设备和它的网络行为的所有参数,对象字典通常用电子数据文档EDS(Electronic Data Sheet)来记录这些参数,而不需要把这些参数记录在纸上。对于CANopen网络中的主节点来说,不需要对CANopen从节点的每个对象字典项都访问。

   CANopen对象字典中的项由一系列子协议来描述。子协议为对象字典中的每个对象都描述了它的功能、名字、索引、子索引、数据类型,以及这个对象是否必需、读写属性等等,这样可保证不同厂商的同类型设备兼容。

    CANopen协议的核心描述子协议是DS301,其包括了CANopen协议应用层及通信结构描述,其他的协议子协议都是对DS301协议描述文本的补充与扩展。在不同的应用行业都会起草一份CANopen设备子协议,子协议编号一般是DS4xx。

CANopen协议包含了许多的子协议,其主要划分为以下三类:

(1)    通信子协议(Communication Profile)

通信子协议,描述对象字典的主要形式和对象字典中的通信对象以及参数。这个子协议适用所有的CANopen设备,其索引值范围从0x1000~0x1FFF。

(2)    制造商自定义子协议(Manufacturer-specific Profile)

制造商自定义子协议,对于在设备子协议中未定义的特殊功能,制造商可以在此区域根据需求定义对象字典对象。因此这个区域对于不同的厂商来说,相同的对象字典项其定义不一定相同,其索引值范围为0x2000~0x5FFF。

(3)    设备子协议(Device Profile)

设备子协议,为各种不同类型的设备定义对象字典中的对象。目前已有十几种为不同类型的设备定义的子协议,例如DS401、DS402、DS406等,其索引值范围为0x6000~0x9FFF。

2.通讯对象

CANopen网络的通讯是以报文的方式传送,CANopen通讯模型定义了四种报文,也即四种通讯对象,分别是管理报文、服务数据对象SDO(Service Data Object)、过程数据对象PDO(Process Data Object)、预定义报文或者特殊功能对象,下面分别介绍。

1.    管理报文

●层管理,网络管理和ID分配服务:如初始化,配置和网络管理(包括:节点保护)。

●服务和协议符合CAL中的LMT,NMT和DBT服务部分。这些服务都是基于主从通讯模式:在CAN网络中,只能有一个LMT,NMT或DBT主节点以及一个或多个从节点。

2. 服务数据对象SDO(Service Data Object)

●通过使用索引和子索引(在CAN报文的前几个字节),SDO使客户机能够访问设备(服务器)对象字典中的项(对象)。

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

●协议是确认服务类型:为每个消息生成一个应答(一个SDO需要两个ID)。SDO请求和应答报文总是包含8个字节(没有意义的数据长度在第一个字节中表示,第一个字节携带协议信息)。SDO通讯有较多的协议规定。

3. 过程数据对象PDO(Process Data Object)

●用来传输实时数据, 数据从一个生产者传到一个或多个消费者。数据传送限制在1到8个字节(例如,一个PDO可以传输最多64个数字I/O值,或者4个16位的AD值)。

●PDO通讯没有协议规定。PDO数据内容只由它的CAN ID定义,假定生产者和消费者知道这个PDO的数据内容。

每个PDO在对象字典中用2个对象描述:

  ■PDO通讯参数:包含哪个COB-ID将被PDO使用,传输类型,禁止时间和定时器周期。

■PDO映射参数:包含一个对象字典中对象的列表,这些对象映射到PDO里,包括它们的数据长度(in bits)。生产者和消费者必须知道这个映射,以解释PDO内容。

●PDO消息的内容是预定义的(或者在网络启动时配置的):

       映射应用对象到PDO中是在设备对象字典中描述的。如果设备(生产者和消费者)支持可变PDO映射,那么使用SDO报文可以配置PDO映射参数。

PDO可以有多种传送方式:

■同步(通过接收SYNC对象实现同步)

◆非周期:由远程帧预触发传送,或者由设备子协议中规定的对象特定事件预触发传送。

◆周期:传送在每1到240个SYNC消息后触发。

■异步

◆由远程帧触发传送。

◆由设备子协议中规定的对象特定事件触发传送。

4. 预定义报文或者特殊功能对象

●同步(SYNC)

■在网络范围内同步(尤其在驱动应用中):在整个网络范围内当前输入值准同时保存,随后传送(如果需要),根据前一个SYNC后接收到的报文更新输出值。

■主从模式:SYNC主节点定时发送SYNC对象,SYNC从节点收到后同步执行任务。

■在SYNC报文传送后,在给定的时间窗口内传送一个同步PDO。

■用CAL中基本变量类型的CMS对象实现。

■CANopen建议用一个最高优先级的COB-ID以保证同步信号正常传送。SYNC报文可以不传送数据以使报文尽可能短。

●时间标记对象(Time Stamp)

■为应用设备提供公共的时间帧参考。

■用CAL中存储事件类型的CMS对象实现。

●紧急事件(Emergency)

■设备内部错误触发。

■用CAL中存储事件类型的CMS对象实现。

●节点/寿命保护(Node/Life guarding)。

■主从通讯模式

■NMT主节点监控节点状态:称作节点保护(Node guarding)。

■节点也可以(可选择)监控NMT主节点的状态:称作寿命保护(Life guarding)。当NMT从节点接收到NMT主节点发送的第一个Node Guard报文后启动寿命保护。

■检测设备的网络接口错误(不是设备自身的错误):通过应急指示报告。

■根据NMT节点保护协议实现: NMT主节点发送远程请求到一个特定节点,节点给出应答,应答报文中包含了这个节点的状态。

上面提到的通讯对象类型中有二个对象用于数据传输。它们采用二种不同的数据传输机制实现:

●SDO 用来在设备之间传输大的低优先级数据,典型的是用来配置CANopen网络上的设备。

●PDO 用来传输8字节或更少数据,没有其它协议预设定(意味着数据内容已预先定义)。

一个CANopen设备必须支持一定数量的网络管理服务(管理报文,administrative messages),需要至少一个SDO。每个生产或消费过程数据的设备需要至少一个PDO。所有其它的通讯对象是可选的。

3.网络管理

网络管理(NMT)用来管理网络设备的状态,它是主从关系的结构。CANopen设备通过一个启动报文发送一个信号给NMT master,这个启动报文是在网络上被初始化、激活的。用NMT命令可以改变单个设备或整个网络设备的状态,每一个设备的状态是由特定属性决定的。只有在OPERATIONAL状态,PDO才能被传输;在PRE_OPERATIONAL的条件下配置设备。监控CANopen设备的通信状态可选“Node-Guarding”或“Heartbeat”,为报告设备错误定义了报警报文,这些高优先级的紧急报文通过事件导向传输;错误发生时,标准的错误代码详细描述了错误信息。

 

文章评论5条评论)

登录后参与讨论

用户377235 2015-10-25 21:53

We codv'ule done with that insight early on.

wangqiaoyu_888_963244381 2013-9-13 16:08

呵呵,前段时间学习这个协议,感觉很复杂,最主要的是对象字典,在网上看到CanFestival-3的对象字典编辑器的安装使用教程,和同事一块研究,在STM32开发板上面下载程序,跟踪调试,最后终于弄懂了通信过程,但是对中间的好多过程还是比较困惑,还要继续研究探讨。 我们一块学习! http://www.fieldbuses.com/forum.php?mod=viewthread&tid=5369,http://www.dndev.com/cgi-bin/forum/forums.cgi?forum=2

飞言走笔 2013-9-13 11:07

研究了一段时间以CANopen,感觉这个协议栈复杂,项目周期会很长,所以现在我们用裸的CAN上跑自己定义的协议,肯定没有CANopen的完善和稳定,没办法啊,被逼的啊,呵呵。希望能看到你分享CANopen学习的心得,这样我也跟着学学^_^

wangqiaoyu_888_963244381 2013-9-13 10:51

呵呵,现在正在做一个关于CAN总线的项目,用到的是CANOPEN协议,感觉协议挺复杂的

飞言走笔 2013-9-12 23:32

互通有无,呵呵 1)http://bbs.ednchina.com/BLOG_ARTICLE_3011180.HTM 2)http://bbs.ednchina.com/BLOG_ARTICLE_3011206.HTM
相关推荐阅读
wangqiaoyu_888_963244381 2015-08-28 11:42
【创客】先专注而后全面
      学生时代学的是FPGA相关课程,参与的也是与FPGA相关的项目,毕业后进入一家公司分配的是不相称的职位,正好熟人介绍到新公司做嵌入式电路设计,也算是和原来的学习所得有交叉。    ...
wangqiaoyu_888_963244381 2015-08-27 16:43
【创客】我的DIY之路
1 题记           路漫漫之修远兮,吾将上下而求索!---- 从大学时就喜欢电子电路设计,只可惜开始没有遇到高明之士,也怪自己不够狠心,导致浪费了很多宝贵的时光。 当初对于软件编程更是满怀...
wangqiaoyu_888_963244381 2015-02-28 14:07
【博客大赛】什么是NEMA?
在项目使用的一个蜂鸣器手册中看到了NEMA 3R/4x/12资质,就查找相关资料探个究竟。以下是搜集的NEMA部分资料。 NEMA全称是National Electrical Manufacture...
wangqiaoyu_888_963244381 2013-11-25 20:11
【博客大赛】pspice介绍
PSpice软件的发展: Berkley:    SPICE  (Simulation Program with Integrated  Circuit          Emphasis) ...
wangqiaoyu_888_963244381 2013-11-20 22:40
【博客大赛】chs使用略谈
       这两天正在用chs的captial logic来绘制系统电气原理图,感觉功能很强大,在此稍微做个介绍。      Capital Logic是电气系统的逻辑设计工具,它提供一...
wangqiaoyu_888_963244381 2013-11-17 20:37
【博客大赛】CRC16 verilog产生程序
        生成CRC码的基本原理:       任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为...
我要评论
5
17
关闭 站长推荐上一条 /2 下一条