玩转单片机与嵌入式
认证:VIP会员
所在专题目录 查看专题
《跟我学CANopen》之一:CANopen介绍2:CANopen在OSI中的位置
《跟我学CANopen》之一:CANopen介绍3:CANopen的设备结构
《跟我学CANopen》之一:CANopen介绍4:CANopen的网络结构(主站设备/从站设备是什么?)
《跟我学CANopen》之二:对象字典1:概述
《跟我学CANopen》之二:对象字典2:通用通讯对象详解1
《跟我学CANopen》之二:对象字典3:通用通讯对象详解2
作者动态 更多
【硬件】深入浅出讲解MOS管的栅极电阻
2022-07-28 09:00
【软件】实现STM32软件精确延时的方法(附源码)
2022-07-28 08:51
嵌入式操作系统三问:what?when?how?
2022-06-11 14:55
做降本或国产替代时,替换原来的晶振,都需要测试哪些内容?
2022-06-11 14:51
深入浅出,明明白白的搞清楚RS-485总线!
2022-06-11 14:48

《跟我学CANopen》之二:对象字典2:通用通讯对象详解1

近期小编开发了【跟我学CANopen】系列课程,会陆陆续续连载更新完毕,相关目录如下(由于内容较多导致文字太小,下图请放大后查看)。

对象字典索引区域定义中,0x1000h~0x9FFFh是通信对象子协议区和制造商特定子协议区。

01:通讯对象子协议区

通讯对象子协议区(Communication profile area)定义了所有和通信有关的对象参数。如下图所示。

标绿色底纹的索引范围1000h ~1029h为通用通讯对象,所有CANopen节点都必须具备这些索引,否则将无法加入CANopen网络。其他索引根据实际情况进行分配与定义。

02、通用通讯对象

由于通用通讯对象十分重要,NMT主站(CANopen主站)在启动时,通常都全部或者部分读取所有从站中通用通讯对象中的索引,所以所有的通用通讯对象都必须在CANopen从站中实现,使用者也必须熟知这些索引地址与其含义。

03、用于设备描述的对象(索引1000h、1008h、1009、100A、1018)

设备类型参数的结构(设备类型索引0x1000h)可用来描述所使用的设备子协议或应用规范,如下图所示“设备子协议编号”字段中包含CiA规定的子协议编号(如401表示I/O。设备子协议)。如果不是标准化的子协议,则子协议编号为0。

附加信息”字段对子协议执行的功能进行详细说明,这些信息在相应的子协议中有规定。如果设备中含有多个逻辑设备,则“附加信息”为FFFFh。第一个逻辑设备的 子协议编号保存在对象67FFh中。下表所列为内置电机驱动器、编码器和I/O模块3个逻辑设备的对象字典。

以下对象也可用来描述设备属性:

  • 索引1008h:制造商设备名称;
  • 索引1009h:制造商硬件版本;
  • 索引100Ah:制造商软件版本。

上面这3个固定不变的对象的数据类型均为Visible String,用户可以读取索引中的信息, 同时还可以用它们对设备进行更详细的描述, 或告知用户当前使用的设备版本。

此外,还有一个可以详细描述设备的对象——相同对象(索引I018h)。它属于一种结构(索引0023h),包含(最多)4个数据类型为unsigned32的条目。4.0版本以后的CANopen协议中,这个对象都规定为必选项,至少制造商ID(子索引01h)必须设置。

制造商ID是每一个制造商在全球的唯一标识,而且必须向CiA提出申请方可使用,禁止使用自行创建的制造商ID。此外,协议软件或CANopen接口卡的供应商可能会提供制造商ID为0的产品,这种制造商ID是无效的, OEM(原始设备制造商)必须自己申请一个有效的ID。

04、用于错误显示的对象(索引1001h和1003h)

错误寄存器(索引1001h) 包含错误类型信息,这些错误是内部设备经常出现的,如下图所示。每一个错误都必须设有一个常规错误位,而特殊的错误位可以选择性地设置。当错误排除后,相应的位复位。如果所有错误都排除了,常规错误位也会复位。错误寄存器是一个8位寄存器,其中所含的错误信息可以通过紧急报文来发送。

错误存储器(预定义错误场,索引1003h) 是一个包含多达254个基本单元的数据场。这些基本单元提供近期引发紧急报文的错误列表。子索引00h表示错误存储器中错误的个数,而基本单元的个数却没有硬性规定,但至少要有一个错误存储单元,这样才能保存最近一次出现的错误。

当设备出现新的错误时,通常会将错误保存在索引01h中。预定义错误场会招之前的错误依次向下移动,也就是升高一个子索引。这也可以算是一种堆栈,即在开头添加新的单元。如果所有子索引都被占用,则删除最早出现的错误。读子索引00h的值会返回所存储的错误的数量。如果所有错误都被排除了,子索引01h的值变为0。外,向子索引00h写入0还可以将预定义错误场清零。

本文小部分内容引用自网络,若有侵权请联系删除。

End

成功没有捷径,只有通过不断的学习、学习再学习才能离成功更近一点点;想要学习的同学欢迎加入我们的技术交流群,共同学习,共同成长,让我们离成功更近一步。

欢迎转发

每篇原创内容都是我们用心血换来的知识精华,如果您觉得本文有价值,欢迎转载分享;

欢迎加入

如果您对单片机及嵌入式设计感兴趣,欢迎加入我们的辩论探讨,加我微信【xyzn3333】

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 2
收藏 2
关注 49
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧