CANopen基本理论

目录

一、CANopen简介

二、OD对象字典

2.1 OD对象字典简介

2.2 CANopen预定义连接集

三、PDO过程数据对象

四、SDO过程数据对象

五、特殊协议

5.1 同步协议

5.2 时间戳协议

5.3 紧急报文协议

六、NMT网络管理

6.1 NMT节点状态

6.2 NMT节点上线报文

6.3 NMT心跳报文

6.4 NMT模块控制报文


一、CANopen简介

本文对CANopen基本理论进行总结性的简单描述,面向初学者;

阅读本文须先掌握CAN基本知识,本文不再赘述。

CANopen基于CAN。在OSI的7层网络模型中,CAN仅规定了物理层和数据链路层,而CANopen作为其扩展,在此之上规定了应用层。


二、OD对象字典

2.1 OD对象字典简介

对象字典(Object Dictionary)是一个有序的对象组,举例具象化来说,每个对象就类似于一份身份信息表,记载着其具体信息:

每个对象采用一个16位索引值以寻址,类似于公民身份证。而每个公民都有其具体信息,如生日住址等,为了访问对象数据结构的单个元素,又采用了一个8位子索引值

下表为对象字典索引区域定义,其中通讯对象子协议区及其通用通讯对象为需要关注的区域:

Index RangeDescription

0000h

保留
0001h - 025Fh数据类型
0260h - 0FFFh保留
1000h - 1FFFh通讯对象子协议区
2000h - 5FFFh制造商特定子协议区
6000h - 9FFFh标准化设备子协议区
A000h - AFFFh网络变量
B000h - BFFFh路由网关系统变量
C000h - FFFFh保留

通讯对象子协议区:

通用通讯对象:

CANopen(NMT)主站在启动时,通常需要读取所有从站中通用通讯对象中的索引,所以所有的通用通讯对象都必须在CANopen从站中实现。

 

2.2 CANopen预定义连接集

对于PDO和SDO的报文ID分配,CANopen基于11位CAN-ID的标准帧格式,预定义了缺省标识符分配表:

CAN-ID / COB-ID

Function-ID

Node-ID

10

9

8

7

6

5

4

3

2

1

0

Node-ID:范围1~127(0不允许被使用)。

预定义的连接集定义表如下所示:

SDO服务器指CANopen从节点,SDO客户指CANopen主节点。

PDO分为TXPDO(发送PDO)和RXPDO(接收PDO),这里的发送和接收都以CANopen从节点为参考;而NMT错误控制包括节点守护报文,心跳报文和Boot-up协议。


三、PDO过程数据对象

PDO采用”生产者/消费者“模式,PDO数据传送以一对一/多的方式进行。每条PDO包含了TXPDO和RXPDO,其传送方式定义在PDO通讯参数对象字典索引:

所有的PDO传送数据须透过对象字典映像到对应的索引区上,如图(OD取值为举例需要,不具备实际意义):

PDO DLC为1-8 Bytes,其传输方式分为:

  • 同步传输(通过同步报文让所有节点同时互发);
  • 异步传输(通过特定事件触发)。

四、SDO过程数据对象

SDO特点为“服务确认”,对于每个“问”都会生成一个“答”。其DLC均为8 Bytes,通讯原则为:

  • SDO客户端发送(问)数据:COB-ID为580h+服务器Node-ID;
  • SDO服务器发送(答)数据:COB-ID为600h+服务器Node-ID。

快速SDO协议:

若读写数据不大于32位,可采用快速SDO,即一次问答完成数据发送:

若读写值超过32位,则须使用普通SDO协议进行分帧传输。


五、特殊协议

对于主站对从站的方便管理,CANopen中预定义了特殊报文,主要为:

  • 同步协议;
  • 时间戳协议;
  • 紧急报文协议。
5.1 同步协议

该报文对象主要实现整个网络的同步传输。

DLC

CAN-ID

0-1

80h(在OD索引1006h和1007h中分别约束同步帧循环周期和同步帧发送后从节点发送PDO的时效)

5.2 时间戳协议

NMT主机发送自身时钟,为各节点提供公共时间参考网络对时。

DLC

CAN-ID

6

100h(存于OD索引1012h中)

5.3 紧急报文协议

设备内部发生错误触发,以提示NMT主站,但不影响CANopen通讯。

DLC

CAN-ID

8

80h+Node-ID

(存于OD索引1014h中)

0 - 1

2

3 - 7

EEC(紧急错误代码)

ER(错误寄存器)

MEF(厂商自定义错误代码)


六、NMT网络管理

6.1 NMT节点状态

一主多从,每个CANopen从节点的CANopen协议栈中必须具备NMT网络管理的相应代码。

NMT网络管理涉及CANopen节点的六种状态:

  1. 初始化(CAN控制器初始化);
  2. 应用层复位(对象字典索引范围2000h - FFFFh复位);
  3. 通讯复位(对象字典索引范围1000h - 1FFFh复位);
  4. 预操作状态(该节点CANopen通讯就绪,可通过SDO参数配置和NMT网络管理操作,但不能PDO通信);
  5. 操作状态(可通过SDO参数配置和NMT网络管理操作,也可根据OD规定进行PDO通信);
  6. 停止状态(PDO通信停止,但能SDO参数配置和NMT网络管理操作)。

NMT网络中的任一CANopen节点的状态可自行切换,亦可接收NMT主机发送的NMT命令切换。

6.2 NMT节点上线报文

NMT从节点上线时必须发布NMT节点上线报文以通知NMT主节点,表示自身状态已从初始化进入预操作。

COB-ID

DLC

Byte0

0x700 + Node-ID

1

0

6.3 NMT心跳报文

NMT从节点可通过向主站发送NMT心跳报文以确认自身是否在线和自身目前的节点状态。

COB-ID

DLC

Byte0

Description

0x700 + Node-ID

1

04h

停止状态

05h

操作状态

7Fh

预操作状态

NMT节点守护报文:NMT主站通过轮询模式监视从站状态,主从一应一答, 与心跳报文模式二者不能并存。

由于远程帧在CAN发展中逐渐被淘汰,而节点守护由于需要更多的主站开销与增加网络负载,CiA协会已经不建议使用,被心跳报文所取代。

6.4 NMT模块控制报文

只有NMT主节点能发送NMT模块控制报文以切换NMT从节点状态。

COB-ID

DLC

Byte0

Byte1

Description

0x000

2

0x01

Node-ID

启动命令(进入操作状态)

0x02

停止命令(进入停止状态)

0x80

进入预操作状态

0x81

复位节点应用层

0x82

复位CANopen通讯

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

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

相关文章

【Zookeeper搭建】Zookeeper分布式集群搭建完整指南

Zookeeper分布式集群搭建 (一)克隆前准备工作 一、时钟同步 步骤: 1、输入date命令可以查看当前系统时间,可以看到此时系统时间为PDT(部分机器或许为EST),并非中国标准时间。我们在中国地区…

MVC基础概念及相应代码示例

(旧的)代码实现方法 一个功能模块的代码逻辑(显示处理,数据处理,逻辑判定)都写在一起(耦合) (新的)代码MVC分层实现方法 显示部分实现(View视图) 数据处理实…

nginx优化(持续更新!!!)

1.调整文件描述符 # 查看当前系统文件描述符限制 ulimit -n# 永久修改文件描述符限制 # 编辑 /etc/security/limits.conf 文件,添加以下内容 * soft nofile 65535 * hard nofile 65535# 编辑 /etc/sysctl.conf 文件,添加以下内容 fs.file-max 655352.调…

apache连接池机制讨论

apache连接池的连接有效性 server一般会配置keep-alive超时时间,过了这个时间还没新请求到来,则关闭连接。客户端从连接池里拿出连接时,会检查一下连接是否已关闭,如已关闭,会丢弃掉该连接,并尝试从连接池…

【QT5 多线程示例】条件变量

文章目录 条件变量使用 wakeOne()使用 wakeAll() 条件变量 QT的条件变量类是QWaitCondition,有wakeOne() 和 wakeAll() 两个方法 wakeOne():仅唤醒一个等待的线程。wakeAll():唤醒所有等待的线程。 使用 wakeOne() https://github.com/Bi…

备赛蓝桥杯之第十六届模拟赛第1期职业院校组第四题:世纪危机(人口增长推算)

提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议 由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…

从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.2.3预训练任务设计:掩码语言建模(MLM)与下一句预测(NSP)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 3.2.3 预训练任务设计:`掩码语言建模(MLM)`与下一句预测(NSP)1. 掩码语言建模(`Masked Language Modeling, MLM`)1.1 MLM的核心原理与数学形式1.2 高级掩码优化技术1.2.1 `Span Masking(SpanBER…

OpenBMC:BmcWeb 生效路由2 Trie字典树

OpenBMC:BmcWeb 生效路由1 基于method分类路由_openbmc web-CSDN博客 可以看到,在internalAdd中: std::vector<BaseRule*> rules; rules.emplace_back(ruleObject); trie.add(rule, static_cast<unsigned>(rules.size() - 1U)); ruleObject首先被放入了每个meth…

Appium中元素定位之一组元素定位API

应用场景 和定位一个元素相同&#xff0c;但如果想要批量的获取某个相同特征的元素&#xff0c;使用定位一组元素的方式更加方便 在 Appium 中定位一组元素的 API 与定位单个元素的 API 类似&#xff0c;但它们返回的是一个元素列表&#xff08;List<MobileElement>&am…

第五周日志-重新学汇编(2)

机器语言 汇编语言(直接在硬件上工作——硬件系统结构&#xff09;&#xff1a; 1.机器语言 每一种微处理器硬件设计和内部结构不同&#xff08;决定了电信号不同&#xff0c;进而需要不同的机器指令&#xff09; #早期通过纸带机/卡片机输入计算机&#xff0c;进行运算 2…

【9】Strongswan collections —— enumerator

//以目录枚举为例子&#xff0c;说明enumerator&#xff0c;从源码剥离可运行 #include <stdio.h> #include <stdbool.h> #include <dirent.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h&…

谈谈对spring IOC的理解,原理和实现

一、IoC 核心概念 1. 控制反转&#xff08;Inversion of Control&#xff09; 传统编程中对象自行管理依赖&#xff08;主动创建&#xff09;&#xff0c;而IoC将控制权转移给容器&#xff0c;由容器负责对象的创建、装配和管理&#xff0c;实现依赖关系的反向控制。 2. 依赖…

【Hugging Face 开源库】Diffusers 库 —— 扩散模型

Diffusers 的三个主要组件1. DiffusionPipeline&#xff1a;端到端推理工具__call__ 函数callback_on_step_end 管道回调函数 2. 预训练模型架构和模块UNetVAE&#xff08;Variational AutoEncoder&#xff09;图像尺寸与 UNet 和 VAE 的关系EMA&#xff08;Exponential Moving…

甘肃旅游服务平台+论文源码视频演示

4 系统设计 4.1系统概要设计 甘肃旅游服务平台并没有使用C/S结构&#xff0c;而是基于网络浏览器的方式去访问服务器&#xff0c;进而获取需要的数据信息&#xff0c;这种依靠浏览器进行数据访问的模式就是现在用得比较广泛的适用于广域网并且没有网速限制要求的小程序结构&am…

路由选型终极对决:直连/静态/动态三大类型+华为华三思科配置差异,一张表彻底讲透!

路由选型终极对决&#xff1a;直连/静态/动态三大类型华为华三思科配置差异&#xff0c;一张表彻底讲透&#xff01; 一、路由&#xff1a;互联网世界的导航系统二、路由类型深度解析三者的本质区别 三、 解密路由表——网络设备的GPS华为&#xff08;Huawei&#xff09;华三&a…

【RAG综述系列】之 RAG 相关背景和基本原理

系列文章&#xff1a; 【RAG综述系列】之 RAG 相关背景和基本原理 【RAG综述系列】之 RAG 特点与挑战以及方法与评估 【RAG综述系列】之 RAG 先进方法与综合评估 【RAG综述系列】之 RAG 应用和未来方向 正文&#xff1a; 检索增强生成&#xff08;Retrieval-Augmented Gen…

CMake 构建的Qt 项目中的构建套件的配置

在Qt 框架中&#xff0c;使用CMake 构建工具时&#xff0c;需要自己给构建套件添加相关配置&#xff0c;否则已经添加的构建套件将不可选择使用。 创建CMake 项目后&#xff0c;如果打开项目配置时&#xff0c;出现如下构建套件不可选的情况&#xff0c; 需要先确认是否安装…

本地化智能运维助手:基于 LangChain 数据增强 和 DeepSeek-R1 的K8s运维文档检索与问答系统 Demo

写在前面 博文内容为基于 LangChain 数据增强 和 Ollams 本地部署 DeepSeek-R1实现 K8s运维文档检索与问答系统 Demo通过 Demo 对 LEDVR 工作流&#xff0c; 语义检索有基本认知理解不足小伙伴帮忙指正 &#x1f603;,生活加油 我看远山&#xff0c;远山悲悯 持续分享技术干货…

Kotlin when 表达式完全指南:从基础到高级的12种实战用法

掌握 when 的灵活运用&#xff0c;告别繁琐的 if-else 链 以下是 Kotlin 中 when 表达式的 12种核心用法 的全面总结&#xff0c;涵盖基础到高级场景&#xff0c;并附带实用示例&#xff1a; 一、基础用法 1. 替代 Java 的 switch-case when (x) {1 -> println("一&qu…

新加坡 PSB 认证:安全标准、证书特点及申请注意事项

目录 什么是PSB认证&#xff1f; 涉及产品范围 强制性认证产品类别 自愿性认证产品 认证项目与测试标准 1. 安全测试 2. 电磁兼容性&#xff08;EMC&#xff09;测试 3. 能效测试&#xff08;特定产品&#xff09; 认证流程详解 第一步&#xff1a;准备阶段 第二步&a…