CANopen扫盲

news2024/11/15 9:39:41

目录

1 概述

2 CANopen 的基本概念

3 基于对象的通信

4 对象字典

5 EDS 文件

6 服务数据对象(SDO)

7 过程数据对象(PDO)

8 网络管理(NMT)概述

9 守护与心跳

10 紧急消息


1 概述

CANopen是基于CAN协议的高级通信协议和设备配置文件规范。该协议是为嵌入式网络应用(如车载网络)开发的。CANopen涵盖了网络编程框架,设备描述,接口定义和应用程序配置文件。CANopen使来自不同制造商的设备和应用程序之间实现通信标准化。它已被广泛用于各个行业,并在自动化和运动应用中具有突出的表现。

       就OSI通信系统模型而言,CAN覆盖前两个级别:物理层和数据链路层。物理层定义了所使用的线路,电压,高速特性等。标准的CAN协议实现数据链路层,它是基于帧的(消息)协议。CANopen涵盖了上面五层:网络(寻址,路由),传输(端到端可靠性),会话(同步),表示(以标准方式编码的数据,数据表示)和应用。应用层描述了如何配置,传输和同步CANopen设备。

许多处理器都实现了CAN 总线接口和驱动程序。我们假设读者已经了解CANBUS 总线的基本知识,重点介绍应用程CANopen 协议。

2 CANopen 的基本概念

每个新技术的出现,都会伴随着一大堆的技术术语和英文缩写,使初学者难以理解。一位日本人称为是“术语的洪流“。使用简单的语言将一个复杂的事情的基本框架讲明白,要比开头就劈头盖脑地抛术语,讲细节好的多。我写这篇博文也就是这种尝试。

CANBUS 是一种总线型通信网络。所有的节点都并联在两根通信线上。

CANBUS 和以太网类似,是基于帧传输方式,只是以太网一个帧可以是1500个字节,而CANBUS 的帧最多只能传输8个字节

https://img-blog.csdnimg.cn/20201001113401710.png

以太网的帧结构

https://img-blog.csdnimg.cn/20201001113449392.png

CANopen 的帧结构

不要以为数据帧短不好,短有短的优点,它将更可靠,实时性好。

11 位 进一步分成位 4个功能码和7位 ID。7位大小限制CANopen网络上的设备数量限制为127个节点。

在一个控制系统中,设备的ID 和 数据的格式都是由系统厂商规定的。例如笔者曾经开发过一个汽车上的方向盘角度传感器。就是由汽车厂提供的帧数据格式和ID 数据表,来设计的。与博世的同类产品不相同。

我们一直在讲,底层通信协议只是解决语法的问题,没有解决语法的问题-数据代表上面含义?

CANOpen 是建立在CANBUS链路层基础上的应用协议,解决语义的问题(8个字节什么代表意思?)。让不同厂商的产品能够真正的互联互通。

3 基于对象的通信

每个设备都有各种数据要和外界交换,例如方向传感器的角度,速度和加速度。这些参数具有名称,类型,长度等特征。访问这些参数的方式最简单的方式就是定义地址和长度。然后读取。PLC 中modbus 协议就是这么简单粗暴的方法。这种低级的方式显然比较容易出错。设置复杂。

控制协议越来越多地采纳了面向对象程序设计的思想。将每个参数定义成为一个数据对象。并且可以采样人类可读方式编写,例如采样XML 语言来描述。

CANopen 采用了类似的思想,它将参数定义为对象,每个设备中都有一个对象字典,对象字典可以一个文件描述,它叫做EDS(Electronic data sheet),它采用了INI 文件格式。

为了简化协议中的数据交换,CANopen 协议中只是自定对象的索引(index)和子索引(sub index)并不传递对象的所有信息。这就好比只交换字典中的的页码和行,列。通信双方各自去查字典。了解具体的含义。

于是,CANBUS 可怜的8个字节又分成了三个部分。一个字节用于说明符,三个字节用于节点索引和子索引,四个字节用于传输中的实际数据,真正的数据只有4个字节了。

当所有需要传输的数据都不能放入一条消息中时,将选择分段传输,因此必须使用多个消息或“段”来传输数据,说明符的第7 为1 表示有后续数据。

4 对象字典

CANopen的中心主题之一是对象字典(OD),它实质上是一个存储配置和过程数据的表格。所有CANopen设备都必须实现对象字典。

CANopen标准定义了16位的位索引和8位的子索引。也就是说,允许每个索引最多包含65536个索引和256个子条目。

该标准定义某些索引和索引范围必须包含特定参数。例如,标准定义索引1008h(子索引00h)必须包含设备名称。这样,任何CANopen主站都可以从CANopen从站网络读取此索引,

有些对象字典索引(例如设备类型(1000h))是强制性的,而另一些则是可选的,例如制造商软件版本(100Ah)。强制性索引的集合表示最小对象字典,这是标记符合CANopen的设备所必需的。

访问对象字典的两种通信机制是服务数据对象(SDO)和过程数据对象(PDO)。

对象字典中包含的基本数据类型为:布尔值,void(占位符),无符号整数,有符号整数,浮点数和字符。可以从基本数据类型构造更复杂的数据类型,例如字符串,日期和时间。

5 EDS 文件

前面提过,每个CANopen 兼容的设备,都需要提供一个EDS 文件,以便让其它访问该节点的设备形成对象字典。主站程序需要导入EDS文件。EDS 是采用了INI 文件格式。它最早是windows 配置文件的格式。也有厂家开发了EDS 的编辑工具。

6 服务数据对象(SDO)

在CANopen协议的网络上,每个节点必须实现一个服务器,该服务器处理对其对象字典的读/写请求。CANopen主站充当该服务器的客户端。直接访问(读/写)服务器对象字典的机制是服务数据对象(SDO。访问了对象字典的节点称为SDO服务器,获取数据的节点称为SDO客户端。传输始终由SDO客户端启动。

通常,主CANopen节点将向网络发送请求,感兴趣的节点将以请求的数据进行响应。当SDO客户端要从服务器请求信息时,它将使用600h +节点ID的CAN-ID发送SDO请求。   然后,服务器将使用580h的CAN-ID +节点ID进行响应。节点ID指定消息来自哪个从节点。下面所示的示例,主节点(SDO客户端)将消息发送到网络的CAN-ID为603h。尽管所有节点都可以看到此消息,但目标节点以外的所有节点都将忽略该消息。目标节点知道ID为603h的消息意味着该消息是针对该节点的,这是SDO请求。消息的数据字段将指定主节点要访问数据的对象的索引和子索引。然后,目标节点以消息ID 583h进行响应。

7 过程数据对象(PDO)

过程数据表示可以随时间变化的数据,例如节点控制器的输入(即传感器)和输出(即电动机驱动器)。过程数据也存储在对象字典中。但是,由于SDO通信一次仅允许访问一个对象字典索引,因此访问不断变化的数据可能会有很多开销。此外,CANopen协议要求节点必须能够发送自己的数据,而无需由CANopen主站轮询。因此,使用一种称为“过程数据对象”(PDO的通信方法来传输过程数据的方法也有所不同

PDO有两种类型:传输PDO(TPDO)和接收PDO(RPDO)。TPDO是来自节点(产生的)的数据,而RPDO是到达节点(消耗的)的数据。另外,PDO有两种类型的参数:配置参数和映射参数。对象词典中保留给PDO配置和映射信息的部分是索引1400h-1BFFh。

配置参数指定COB-ID,传输类型,禁止时间(仅TPDO)和事件计时器,这将在本节中进行说明。有多种方法可以启动PDO传输。这些方法包括事件驱动,时间驱动,单独轮询和同步轮询。传输类型在PDO的配置参数中指定。在事件驱动的传输中,当其中的过程数据发生更改时,将启动PDO传输。在时间驱动的传输中,PDO传输以固定的时间间隔发生。在单独的轮询中,PDO传输是使用不常用的称为远程请求的机制启动的。在同步轮询中,使用SYNC信号启动PDO传输。同步信号经常用作全局计时器。例如,如果CANopen主站发出SYNC消息,则可以配置多个节点以查看并响应该SYNC。通过这种方式,主站可以同时获取多个过程对象的“快照”。

8 网络管理(NMT)概述

网络管理服务包括在初始化,运行前,运行和停止之间更改从站状态的能力。NMT协议允许CANopen网络控制各个节点的通信状态。操作前状态主要用于配置CANopen设备。因此,在预操作状态下不允许进行PDO通信。在操作状态下可以进行PDO通信。在停止状态下,节点只能执行节点保护或心跳,而不能接收或传输消息。某些类型的CANopen通信允许处于不同状态。例如,在操作前状态下允许SDO,但不允许PDO。这是因为SDO通常用于初始化对象字典参数,

9 守护与心跳

CANopen规范要求节点必须使用某种方法来检查节点是否“活动”。可用的两种方法是:节点保护和心跳,后者是首选方法。

在心跳协议中,CANopen节点定期发送心跳消息,该消息使CANopen主设备或心跳使用者知道该节点仍处于活动状态。如果心跳消息在一定时间内未到达,则主机可以采取特定措施。此类操作可能是重置节点或向操作员报告错误。心跳消息由CAN-ID 0x700 +节点ID标识,其中第一个数据字节等于1110。

在节点保护协议中,CANopen主站轮询从站节点的当前状态信息。如果节点在特定时间段内未响应,则主服务器将认为该节点已死,并将采取措施。

心跳协议是首选方法,因为它的开销比节点保护少。

10 紧急消息

CANopen网络中的??每个节点都分配有一条紧急消息(EMCY),用于传达节点状态。请注意,心跳和节点保护协议旨在用于传达通信故障,而紧急消息则用于传达节点内的错误(即传感器故障)。EMCY消息由80h的COB-ID +节点ID标识。EMCY消息的数据部分包含有关发生的错误的信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1013188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CVPR 2024 截稿时间

CVPR 2024 截稿时间为2023年11月10日,小伙伴们注意提前写好论文,及时投稿,祝大家都能高中!

Git 版本控制系统 笔记

概念:一个免费开源,分布式的代码版本控制系统,帮助开发团队维护代码 作用:记录代码内容,切换代码版本,多人开发时高效合并代码内容【团队开发同一个项目的代码版本管理】 1、Git 安装 之前写了&#xff0…

【视觉SLAM入门】7.4.后端优化 --- 基于位姿图和基于因子图

"议论平恕,无所向背” 1. 位姿图1.1 具体做法1.2 小结 2. 因子图2.1 具体做法2.1.1 贝叶斯网络2.1.2 因子图2.1.3 更具体的因子图2.1.4 增量的求解方法 引入: 上节BA将位姿和路标都作为优化的节点,H矩阵也告诉我们路标远大于位姿&#…

初识Mybatis(二)动态SQL、缓存和逆向工程

动态SQL Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题。 (比如多条件查询的设置,实现判空等) 1、if 创建DynamicSQLMapper接口,DynamicSQL…

C语言基础知识点(六)二维数组指针和地址

#include <stdio.h>int main() {int a[2][3] {2, 4, 6,8, 10, 12};printf("a:%p, a1:%p\n", a, a 1); // 相差3*sizeof&#xff08;int&#xff09;12&#xff0c;二维数组名是一个指向每一行的指针&#xff0c;a:0061FF08, a1:0061FF14prin…

Redis Part1

单体架构&#xff1a;一台Web服务器、一台数据库服务器。 1.了解NoSql 什么是Nosql&#xff1f; NoSQL&#xff0c;即Not-Only-SQL&#xff0c;意思就是我们干事情不能只用SQL&#xff0c;泛指非关系型的数据库&#xff01;NoSQL定位&#xff1a;作为关系型数据库的补充&am…

信息安全三级概述

信息安全三级概述

C语言之const

C语言之const const修饰全局变量 此时全局变量只能使用但是不能修改&#xff0c; 如果直接拿全局变量修改值&#xff0c;编译直接报错 如果使用全局变量的地址修改值&#xff0c;运行时程序异常结束 const修饰普通局部变量 可以读取变量的值 不能直接通过变量进行修改值&a…

开源库源码分析:Okhttp源码分析(一)

开源库源码分析&#xff1a;OkHttp源码分析 导言 接下来就要开始分析一些常用开源库的源码了&#xff0c;作为最常用的网络请求库&#xff0c;OkHttp以其强大的功能深受Android开发者的喜爱&#xff08;比如说我&#xff09;&#xff0c;还有对该库进行二次封装而成的热门库&a…

为何红黑树在B/B+树之上仍然占据重要地位?

为何红黑树在B/B树之上仍然占据重要地位&#xff1f; 引言二、红黑树和B/B树的基本原理2.1、红黑树的特点和性质2.2、B/B树的特点和性质2.3、红黑树和B/B树的比较 三、B/B树相对于红黑树的优势四、红黑树仍然占据重要地位的原因总结 博主简介 &#x1f4a1;一个热爱分享高性能服…

成都营运《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作

成都营运《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作

【深度学习】 Python 和 NumPy 系列教程(廿七):Matplotlib详解:3、多子图和布局:散点矩阵图(Scatter Matrix Plot)

目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 2、3d绘图类型 3、多子图和布局 1. subplot()函数 2. subplots()函数 3. 散点矩阵图&#xff08;Scatter Matrix Plot&#xff09; 一、前言 Python是一种高级编程语言&#xff0c;由Guido van Rossum于…

2327. 知道秘密的人数;1722. 执行交换操作后的最小汉明距离;2537. 统计好子数组的数目

2327. 知道秘密的人数 核心思想&#xff1a;动态规划&#xff0c;每天的人可以分为三种&#xff0c;可分享秘密的人&#xff0c;不可分享秘密的人&#xff0c;忘记秘密的人。定义f[i]为第i天可分享秘密的人&#xff0c;那么第(idelay ,iforget)天&#xff0c;会增加f[i]个可分…

广州口腔医院种植牙-广东省爱牙工程公益种牙,获湾区群众点赞

广州种植牙价格表-自2017年成立以来,广东省爱牙工程一直坚持以公益惠民为宗旨、公益种牙为服务方向,针对群众普遍存在的口腔健康问题,开展形式多样的公益性口腔医疗惠民活动。 广州种植牙费用表-日前,广东省爱牙工程“种植牙惠民行动”第二十季已正式启动。据广东省爱牙工程官方…

DataGrip 2023 年下载、安装教程、亲测可用

文章目录 前言1. 下载2. 安装3、DataGrip 常用操作4 推荐阅读 前言 DataGrip 是 JetBrains 发布的多引擎数据库环境&#xff0c;支持 MySQL 和 PostgreSQL&#xff0c;Microsoft SQL Server 和 Oracle&#xff0c;Sybase&#xff0c;DB2&#xff0c;SQLite&#xff0c;还有 Hy…

窜货链接的有效治理流程

当商跨区域销售时&#xff0c;但产生了窜货&#xff0c;窜货的根本是因为低价&#xff0c;虽然品牌都会禁止经销商窜货销售&#xff0c;但为了获得更多利润&#xff0c;很多经销商还是会悄悄做着窜货销售的行为&#xff0c;而窜货不仅会破坏渠道的正常发展&#xff0c;同时还会…

第六章 图 十、关键路径

开始顶点&#xff08;源点)&#xff1a; 在AOE网中仅有一个入度为0的顶点&#xff0c;称为开始顶点&#xff08;源点)&#xff0c;它表示整个工程的开始; 结束顶点&#xff08;汇点)&#xff1a; 也仅有一个出度为0的顶点&#xff0c;称为结束顶点&#xff08;汇点)&#xf…

Postman应用——初步了解postman

Postman 是一个用于构建和使用 API 的 API 平台&#xff0c;Postman 简化了 API 生命周期的每个步骤并简化了协作&#xff0c;可以更快地创建更好的 API。 Postman 包含一个基于Node.js的强大的运行时&#xff0c;允许您向请求&#xff08;request&#xff09;和分组&#xff…

redis缓存穿透、击穿、雪崩介绍

缓存穿透 概念 缓存穿透指某一特定时间批量请求打进来并访问了缓存和数据库都没有的key&#xff0c;此时会直接穿透缓存直达数据库&#xff0c;从而造成数据库瞬时压力倍增导致响应速度下降甚至崩溃的风险&#xff1b; 解决方案 一、通过布隆过滤器解决 原理&#xff1a;将…

关于content-type的理解

一.content-type的结论 告诉后端传过去的数据是什么类型的数据 二.没有请求体 (1)没有请求体的情况下content-type没有意义。 (2):图示 里面是没有请求体的 (3)有请求体的情况 二.常见的三种方式 (1)application/x-www-form-urlencoded(默认) 参数的表现形式: 传递之前可以…