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”,为报告设备错误定义了报警报文 ,这些高优先级的紧急报文 通过事件导向传输;错误发生时 ,标准的错误代码详细描述了错误信息。
相关文章:
CAN总线应用协议CANopen
作为一种真正开放的CAN总线高层协议,CANopen协议允许不同的CAN设备以标准化的方式进行通讯,这使得CAN 设备具有互操作性。随着CANopen协议的日益完善,它已经广泛应用于多个行业。本文将对CANopen协议的对象字典、通讯对象、网络管理等几个方面…...
htop安装不了怎么解决
🌟🌌 欢迎来到知识与创意的殿堂 — 远见阁小民的世界!🚀 🌟🧭 在这里,我们一起探索技术的奥秘,一起在知识的海洋中遨游。 🌟🧭 在这里,每个错误都…...
vue 笔记02
目录 01 事件修饰符 02 按键修饰符 03 v-bind属性 04 vue-axios的基本使用 05 vue的生命周期 06 vue生命周期涉及到的其他的知识点 01 事件修饰符 vue的事件修饰符 事件名称.修饰符1.修饰符2...事件驱动函数 stop 阻止冒泡修饰符 prevent 阻止默认行为 once 当前事件只触…...
MySQL8.0免安装及phpmyadmin配置
安装包解压,运行mysqld文件后,启动net start,提示成功,但进入phpmyadmin登录页面后,输入用户名,提示不支持空密码,config.default.php设置密码后,提示 mysqli::real_connect(): (HY…...
【目标解算】相机内外参数详细解读+坐标系转换
一、相机参数介绍 1.1 相机内参矩阵 概念:内参矩阵用于描述相机的内部参数,它包含了相机的焦距、主点坐标和图像的畸变等信息。内参矩阵的形式通常为一个3x3的矩阵,常用表示为K。内参矩阵可以将相机坐标系中的三维点映射到图像平面上的二维…...
【Unity】颜色混合计算
在图形渲染中,颜色混合(Color Blending)是指将多个颜色值组合在一起以生成最终显示的颜色。颜色混合技术广泛用于处理半透明效果、光照效果和后期处理效果。以下是一些常见的颜色混合模式: 1. 正常混合(Normal Blendi…...
Vue源码解析
入门级 <body><div id"app"></div><script>class Vue {constructor(options) {// thisVue 把options.created的this 指向Vue实例options.created.bind(this)();// this.$el 指向#appthis.$el document.querySelector(options.el);// 把opt…...
Linux---网络相关配置
文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 一台主机需要配置必要的网络信息,才可以连接到互联网,需要的配置网络信息包括IP,子网掩码,网关和DNS。 一.查看网络信息 查看IP信息可以通…...
MATLAB分类与判别模型算法:基于Fisher算法的分类程序【含Matlab源码 MX_002期】
算法思路介绍: 费舍尔线性判别分析(Fishers Linear Discriminant Analysis,简称 LDA),用于将两个类别的数据点进行二分类。以下是代码的整体思路: 生成数据: 使用 randn 函数生成随机数&#x…...
长文总结 | Python基础知识点,建议收藏
测试基础-Python篇 基础① 变量名命名规则 - 遵循PEP8原则 普通变量:max_value 全局变量:MAX_VALUE 内部变量:_local_var 和关键字重名:class_ 函数名:bar_function 类名:FooClass 布尔类型的变量名…...
centos中使用Docker安装rabbitmq记录
一、安装rabbitmq docker run -d --name rabbitmq -p 5672:5672 -p15672:15672 -v rabbitmq-plugin:/plugins -e RABBITMQ_DEFAULT_USERxiaoqi -eRABBITMQ_DEFAULT_PASS123456 rabbitmq:latest二、配置web管理界面 # 查看运行的容器 docker ps -a # 根据容器id进入容器内部 …...
STM32系列-STM32介绍
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” STM32介绍 STM32介绍 ST:指的是意法半导体 M:指定微处理器 32:表示计算机处理器位数 ARM分成三个系列: Cortex-A࿱…...
网络原理 一
一、协议 网络通信中,协议是非常重要的概念. 协议进行了分层,此处就是按照这几层顺序来介绍每一层中的核心协议. 应用层,就对应着应用程序,是程序员打交道最多的一层,调用系统提供的 网络api 写出的代码都是基于应用层的. 应用层这里当然也有很多现成的协议,但更多的还是,程…...
xcode配置快速打开终端命令行工具教程
以往我们使用idea编辑器或者vscode编辑器的时候,我们可以快速的在编辑器下面打开终端进行相关的操作,但是在xcode里面却没有这么方便的功能按钮,真的不是很习惯,所以这次就来给xcode配置这么一个方便的功能。 idea的Terminal 这…...
AIGC降重:如何2分钟降低论文AI率和查重率?推荐使用SpeedAI科研小助手
确保学术论文的独立性与诚信性,对于学业的成就及学位的获取至关重要,其中,论文的人工智能查重与降低AIGC相似度扮演着核心角色。 常规的查重手段主要围绕查重软件的运用和个体的自行审查;而降重则通常通过语句重组、同义替换、内…...
Blazor入门-连接MySQL的简单例子:列出数据+简单查询
参考: ASP.NET Core 6.0 Blazor Server APP并使用MySQL数据库_blazor mysql-CSDN博客 https://blog.csdn.net/mzl87/article/details/129199352 本地环境:win10, visual studio 2022 community, mysql 8.0.33 (MySQL Community Server), net core 6.0 目…...
CEEMDAN +组合预测模型(CNN-Transfromer + XGBoost)
注意:本模型继续加入 组合预测模型全家桶 中,之前购买的同学请及时更新下载! 往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 VMD CEEMDAN 二次分解,Transformer-BiGRU预测模…...
箭头函数的意义和函数的二义性
前言 说到箭头函数,可能很多人的第一反应就是和普通函数的区别: 箭头函数没有 this,普通函数的 this 指向依赖它是如何被调用的箭头函数没有 arguments 对象,而是通过剩余参数(rest parameters)来获取所有…...
618必买的数码好物有哪些?盘点兼具设计与实用的数码好物分享
随着618购物节的到来,数码爱好者们又开始跃跃欲试,期待在这个年度大促中寻找到自己心仪的数码好物,在这个数字化时代,数码产品不仅是我们日常生活的必需品,更是提升生活品质的重要工具,那么在众多的数码产品…...
【好书分享第十三期】AI数据处理实战108招:ChatGPT+Excel+VBA
文章目录 一、内容介绍二、内页插图三、作者简介四、前言/序言五、目录 一、内容介绍 《AI数据处理实战108招:ChatGPTExcelVBA》通过7个专题内容、108个实用技巧,讲解了如何运用ChatGPT结合办公软件Excel和VBA代码实现AI办公智能化、高效化。随书附赠了…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
