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.mzph.cn/diannao/19319.shtml

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

相关文章

2024-5-10——统计已测试设备

2024-5-10 题目来源我的题解方法一 模拟 题目来源 力扣每日一题;题序:2960 我的题解 方法一 模拟 add记录前面已测试设备的数量,之后紧挨着的需要减add,若值大于0,则表示该设备可以被测试,add1;若值小于…

【Python】解决Python报错:TypeError: %d format: a number is required, not str

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

STM32定时器及输出PWM完成呼吸灯

文章目录 一、STM32定时器原理1、基本定时器2、通用定时器(1)时钟源(2)预分频器PSC(3)计数器CNT(4)自动装载寄存器ARR 3、高级定时器 二、PWM工作原理三、控制LED以2s的频率周期性地…

C# 枚举高阶

文章目录 0. 示例枚举1.常用静态方法1.1 GetName 根据枚举值获得枚举名1.2 GetNames 返回指定枚举的所有枚举名1.3 Parse 根据枚举名转化为枚举成员 2 位枚举2.1 声明2.2 Flags 特性2.3 常用操作2.3.1 组合枚举值2.3.2 从枚举变量中去除某个或某些枚举项:2.3.3 判断…

CyberDAO M级共识交流会·西安站圆满落幕:共筑Web3美好未来

CyberDAO M级共识交流会于2024年5月28日在西安隆重举行,这是一场CyberDAO精英汇聚的盛会,以同心共筑,志在必达为主题口号与DAO精英携手并进,共筑CyberDAO美好宏图。CyberDAO的使命是降低WEB3的门槛,帮助用户轻松抓住行…

【微服务】springboot 构建docker镜像多模式使用详解

目录 一、前言 二、微服务常用的镜像构建方案 3.1 使用Dockerfile 3.2 使用docker plugin插件 3.3 使用docker compose 编排文件 三、环境准备 3.1 服务器 3.2 安装JDK环境 3.2.1 创建目录 3.2.2 下载安装包 3.2.3 配置环境变量 2.2.4 查看java版本 3.3 安装maven …

妙味web前端开发全套视频教程:深度解析与精彩呈现

妙味web前端开发全套视频教程:深度解析与精彩呈现 在数字化浪潮汹涌的时代,Web前端开发技术日新月异,成为互联网行业的热门领域。对于初学者来说,如何系统、全面地掌握Web前端开发技能,是一个充满挑战与困惑的问题。为…

Makefile 中$(origin V)的作用

在 Makefile 中,$(origin V)的作用是获取变量V的来源。origin函数会返回一个字符串,用于表示变量的定义位置或来源。 具体来说,$(origin V)可能返回以下几种常见的值: undefined:表示变量V未被定义。command line&…

JVM学习-垃圾回收(二)

标记-清除(Mark-Sweep)算法 当堆中的有效内存空间被耗尽的时候,就会停止整个程序(stop the world),然后进行两项工作,第一项则是标记,第二项是清除 标记:Collector从引用根节点开始遍历,标记所有被引用的…

深入理解哈希加密:md5在保护用户数据中的应用

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、md5加密方法简介 二、md5加密方法的实现 示例代码: 三、md5加密方法在实际…

老师如何对付挑事儿的家长?

身为老师,你有没有遇到过这样的家长:孩子在学校里闹点小矛盾,或者作业分数有点争议,他们就气势汹汹地来找你,说你偏心,甚至在其他家长面前说三道四?面对这种爱“挑事”的家长,老师们…

RestTemplet 自定义消息转换器总结

在RestTemplet 请求中,请求发送一个 HTTP 请求时,RestTemplet 会根据请求中的内容类型(Content-Type)选择合适的 HttpMessageConverter 来处理请求体的数据。同样地,当服务器返回一个 HTTP 响应时,RestTemp…

模型实战(21)之 C++ - tensorRT部署yolov8-det 目标检测

C++ - tensorRT部署yolov8-det 目标检测 python环境下如何直接调用推理模型转换并导出:pt -> onnx ->.engineC++ tensorrt 部署检测模型不写废话了,直接上具体实现过程+all代码 1.Python环境下推理 直接命令行推理,巨简单yolo detect predict model=yolov8n.pt source…

中英文语音合成芯片(TTS芯片)WT3000T8-在ETC上的应用案例

一:开发背景: 随着智能化浪潮的推进,ETC(电子不停车收费)系统已逐渐成为现代交通的重要组成部分。在这一背景下,唯创知音自主研发的WT3000T8中文转语音合成芯片(TTS芯片)以其卓越的性…

Pyglet,一款程序员游戏开发多功能Python工具

Pyglet,一款程序员游戏开发多功能Python工具 pyglet 库概述 Pyglet 是一个用于创建图形用户界面 (GUI)、多媒体应用和游戏开发的Python库.它提供了丰富的功能和工具,可以用于创建交互式的图形应用程序和游戏. 安装与用法 首先安装 pyglet:pip install pyglet以下是一个简单…

【开源项目】Excel数据表自动生成工具v1.0版

一、介绍 Excel数据表自动生成工具是Go语言编写的一款小型工具软件,用于将特定的Excel表格内容导出为多种编程语言的代码或可以直接读取的数据内容。 开源Github地址:https://github.com/SkyCreator/goproj 二、版本v1.0功能概览 1.编程语言支持 目前…

Spring Boot发送邮件时如何支持定时功能?

如何使用Spring Boot结合AokSend以实现高效邮件发送? 如何高效地进行sendmail发送邮件并支持定时功能是一个值得探讨的问题。本文将详细介绍如何在Spring Boot中实现定时sendmail发送邮件,并结合AokSend工具实现高效邮件发送。 Spring Boot发送邮件&am…

10W QPS高并发,如何防止重复下单?

小北说在前面 10wqps高并发,如何防止重复提交/支付订单? 10wqps高并发,如何防止重复下单? 10wqps高并发,如何防止重复支付? 10wqps高并发,如何解决重复操作问题? 最近有小伙伴在面试…

JSON.stringify()方法

JSON.stringify()方法 JSON.stringify()方法用于将一个值转为JSON字符串,该字符串符合JSON格式,它也可以被JSON.parse()方法还原。 一、使用JSON.stringify()方法返回的效果,以及需要注意的地方: 注意:原始类型的字符…

奥利奥罚单背后的启示:企业合规与反垄断的边界

在全球化的经济环境中,企业面临着激烈的市场竞争。为了在竞争中脱颖而出,一些企业可能会采取不正当的竞争手段,如垄断、价格歧视等。然而,这些行为往往会触犯反垄断法规,给企业带来严重的法律风险。最近,奥…