当前位置: 首页 > news >正文

CAN总线应用协议CANopen

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

一、CANopen对象字典

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

二、通讯对象

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。所有其它的通讯对象是可选的。

三、网络管理(NMT)

        网络管理(NMT)用来管理网络设备的状态 ,它是主从关系的结构。CANopen设备通过一个启动报文发送一个信号给NMT master这个启动报文是在网络上被初始化、激活的。用NMT命令可以改变单个设备或整个网络设备的状态 ,每一个设备的   状态是由特定属性决定的。

        只有在OPERATIONAL状态 ,PDO才能被传输;在PRE_OPERATIONAL的条件下配置设备。监控CANopen设备的通信状态可选“Node-Guarding”或“Heartbeat”,为报告设备错误定义了报警报文 ,这些高优先级的紧急报文 通过事件导向传输;错误发生时 ,标准的错误代码详细描述了错误信息。

http://www.lryc.cn/news/357146.html

相关文章:

  • htop安装不了怎么解决
  • vue 笔记02
  • MySQL8.0免安装及phpmyadmin配置
  • 【目标解算】相机内外参数详细解读+坐标系转换
  • 【Unity】颜色混合计算
  • Vue源码解析
  • Linux---网络相关配置
  • MATLAB分类与判别模型算法:基于Fisher算法的分类程序【含Matlab源码 MX_002期】
  • 长文总结 | Python基础知识点,建议收藏
  • centos中使用Docker安装rabbitmq记录
  • STM32系列-STM32介绍
  • 网络原理 一
  • xcode配置快速打开终端命令行工具教程
  • AIGC降重:如何2分钟降低论文AI率和查重率?推荐使用SpeedAI科研小助手
  • Blazor入门-连接MySQL的简单例子:列出数据+简单查询
  • CEEMDAN +组合预测模型(CNN-Transfromer + XGBoost)
  • 箭头函数的意义和函数的二义性
  • 618必买的数码好物有哪些?盘点兼具设计与实用的数码好物分享
  • 【好书分享第十三期】AI数据处理实战108招:ChatGPT+Excel+VBA
  • 001 CentOS 7.9 安装及配置jdk-8u411-linux-x64.tar.gz
  • Revit二次开发-WPF ProgressBar 执行程序中显示进度条
  • React:构建Web应用的未来
  • 【Elasticsearch】Centos7安装Elasticsearch、kibana、IK分词
  • IDEA中各种Maven相关问题(文件飘红、下载依赖和启动报错)
  • Android 13 VSYNC重学习
  • std::move和左值右值
  • QT学习备份
  • 【wiki知识库】03.前后端的初步交互(展现所有的电子书)
  • AOP——学习
  • Linux静态库、共享动态库介绍、制作及使用