【CANopen】周立功轻松入门CANopen笔记

news/2024/5/11 1:19:00/文章来源:https://blog.csdn.net/tpoem/article/details/131615943

前言

想学习些新东西了,原本想直接学学Ethercat,但是简单看了看对象字典啥的概念一头雾水的,决定先从CANopen开始,Ethercat看着头疼。Etehrcat和CANopen有挺多类似的地方。感谢ZLG的这个入门笔记,我似乎是看懂了些,想写写笔记。

CANopen的ID定义

作为一个CAN的应用层协议

  • 采用11位的标准帧的格式
  • 数据能少发就少发,能单向就单向,能不分包就不分包,提高实时性。

网络管理,特殊协议报文的ID定义

CANopen中需要定义一个主机,也就是网络管理主机,它负责管理网络中的其他从机。
主机和从机之间会进行一系列的通讯,例如初始化,同步,配置等等网络管理报文和特殊报文。
在这里插入图片描述

过程对象数据PDO和服务数据对象SDO

PDOSDO
单向传输需要应答
生产者-消费者模型服务器-客户端模型

在这里插入图片描述
在这里插入图片描述
对于PDO和SDO,协议强制规定了其CAN ID的划分方法。
高4位是功能码,低7位的节点号。CAN ID叫做COB-ID,节点号叫做Node-ID,一个网络最多128个节点。
在这里插入图片描述

协议又更进一步的将PDO细分

分成发送PDO和接收PDO,以从站为参考点。TPDO和RPDO各有4个对象,每个对象一条CAN数据

SDO则规定

发起一方的CAN ID固定就是600H+Node-ID(值为被询问的节点地址),回复一方的ID就是580H+Node-ID

一般来说,只有主机能发起SDO,用来配置和关键参数的传递,另外从机也可以对其他从机发送SDO通讯。
在这里插入图片描述

PDO的传输形式

PDO可以同步传输,也可以异步传输
在这里插入图片描述
异步传输一般由特定的事件来触发。
同步传输一般是主站通过同步报文让所有的从站在同一时刻传输数据。
有细分为周期传输(循环)和非周期传输(无循环)
周期传输通过接收SYNC(同步对象),可以设置1-240个同步对象
非周期传输由远程帧触发或者特定事件对象触发。

PDO的通信参数

PDO通信参数定义了设备的CAN -ID,传输类型,定时周期。
RPDO位于1400H-15FFH
TPDO位于1800H-19FFH
在这里插入图片描述
在这里插入图片描述
试了试编辑器
在这里插入图片描述

PDO的映射参数

它包含了一个对象字典中的对象列表,这些对象映射到相应的 PDO,其中包括数据的长度(单位,位),对于生产者和
消费者都必须要知道这个映射参数,才能够正确的解释 PDO 内容。就是将通信参数、应用数据和具体 CAN 报文中数据联系起来。
RPDO映射参数范围为1600H–17FFH
TPDO映射参数范围为1A00H–1BFFH
在这里插入图片描述
在这里插入图片描述

对象字典

它描述了CANopen节点中的所有参数,它可以以EDS文件的形式进行传递。
其中的每一个对象都采用16位的索引来寻址,范围0-0xFFFF
某些索引下又定义了8位的子索引,范围0-0xFF
每一个索引内具体的参数,最大支持用4字节表示。
每一个具体的参数,都包含名字,索引,子索引,数据类型,是否必须,读写属性。
用的最多的就是DS301子协议,其他的子协议都是对301的补充和扩展。
对象字典区域的定义如下:
在这里插入图片描述
我这里打开一个CANopen的对象字典编辑器给看了看,加深印象
在这里插入图片描述

通讯对象子协议区

其中1000H-1029H是所有CANopen设备都要用到的。
在这里插入图片描述

通用通讯对象

主站在启动时,通常都全部或者部分读取所有从站中通用通讯对象中的索引,所以所有的通用通讯对象都必须在
CANopen 从站中实现。
在这里插入图片描述
这里我也在字典对象编辑器里看到了他们的身影~
在这里插入图片描述

制造商特定子协议

对象字典索引 2000H to 5FFFH为制造商特定子协议,通常是存放所应用子协议的应用数据,这里就可以允许用户自定定义需要的参数。
在这里插入图片描述

标准化设备子协议

这些就是为不同行业的设备定义的对象字典了,范围从0x6000H-0x9FFF

在这里插入图片描述

CANopen的主站

节点状态

任何一个CANopen节点都包含这6种运行状态

  • 初始化
  • 应用层复位
  • 通讯复位
  • 预操作状态
  • 操作状态
  • 停止状态
    在这里插入图片描述
    主机是可以通过主站命令让从站进行状态切换的
    在这里插入图片描述

节点上线报文

从站用来提示主站,自己已加入网络或者避免与其他从站ID冲突,必须发,ID为700H+Node-ID,数据就是1个字节0
在这里插入图片描述

节点状态与心跳报文

心跳报文的CAN ID为700H+Node-ID,数据就是1个字节,反映节点的状态,04h为停止状态,05h为操作状态,7Fh为预操作状态。
在这里插入图片描述
我也去编辑器里试了试这个心跳生产者时间1017H和检查时间1016H的设置
在这里插入图片描述
在这里插入图片描述

节点守护

早期的CANopen通过轮询从站的方式监测从站。
通过远程帧来实现。
后期由于CAN总线种远程帧逐渐淡出使用,现在都是用心跳报文来做的了
在这里插入图片描述
在这里插入图片描述

主站节点状态切换命令

CAN-ID是最高优先级的0,数据两个字节,第一个字节是命令类型,第二个字节是被控制的Node-ID,如果需要控制所有节点就写0.
在这里插入图片描述

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

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

相关文章

一、枚举类型——新特性(模式匹配-支配性)

switch 中 case 语句的顺序很重要。如果基类先出现,就会支配任何出现在后面的 case: Dominance.java JDK 17 sealed interface Base { }record Derived() implements Base { }public class Dominance {static String test(Base base) {return switch (ba…

视频行为识别(一)——综述

Deep Neural Networks in Video Human Action Recognition: A Review 本次分享的文章是2023年收录在计算机视觉领域的顶刊“CVPR”(级别:视觉类TOP)期刊上。该期刊详细信息可关注公众号 AI八倍镜 点击菜单项查询。 论文地址:http…

代码随想录二刷day46 | 动态规划之139.单词拆分

day46 139.单词拆分1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp[i] 139.单词拆分 题目链接 解题思路:单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满…

第三章 SSD存储介质:闪存 3.4

3.4 闪存数据完整性 可采用以下数据完整性的技术确保用户数据不丢失: (1)ECC纠错; (2)RAID数据恢复; (3)重读(Read Retry); &#xff…

vue 进阶---动态组件 插槽 自定义指令

目录 动态组件 如何实现动态组件渲染 使用 keep-alive 保持状态 keep-alive 对应的生命周期函数 keep-alive 的 include 属性和exclude属性 插槽 插槽的基础用法 具名插槽 作用域插槽 自定义指令 自定义指令的分类 私有自定义指令 全局自定义指令 了解 eslint 插件…

免费开源 | 基于SpringBoot的博客系统

介绍 基于springboot后端架构,websocket实现私信,前端采用thymeleafbootstraplayuiRedis 注册使用邮箱验证注册,且验证码存在redis中,所以需要有redis环境 软件架构 springbootwebsocketthymeleafbootstraplayuiRedismysql 8.…

Vue 数据双向绑定

双向数据绑定 : 通过前面学习知道 Vue 是数据驱动的,数据驱动有一个精髓之处是数据双向绑定, 即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化。(就是mvvm数据发生变化…

C#,中国福利彩票《刮刮乐》的数学算法(01)——幸运123

彩票名称:幸运123面值:20元/张最高奖:100万(人民币)全套款式:2款玩法介绍: 一份好运,二倍快乐,三重惊喜。福彩刮刮乐新游戏“幸运123”,红色的票面上点缀着礼…

spring 详解二 IOC(Bean xml配置及DI)

配置列表 Xml配置 功能描述 <bean id"" class""></bean> Bean的id&#xff0c;配置id会转为Bean名称和不配就是全限定类名 <bean name"" ></bean> Bean的别名配置&#xff0c;存储在Factory的aliasMap中通过别名也…

Qt自定义控件之动画文本

文章目录 前言一、动画文本的效果二、具体实现定义动画对象设置动画时长的实现设置text函数实现绘制代码设置字体函数 三、高级部分操作代码总结 前言 在 Qt 中&#xff0c;自定义控件可以让我们实现丰富的用户界面效果和交互体验。其中&#xff0c;动画文本是一种常见的效果&…

使用 tail -f 实时观测服务器日志输出

在开发阶段, 有 console 端的输出, 总是可以方便实时地看到应用的日志. 可一旦应用部署到服务器上之后呢, 日志被输出到文件中, 在某些情景下需要不停地查看日志文件的输出以定位某些问题, 此时是否还能像开发那样实时查看日志呢? 答案是可以的! 这个命令就是 tail -f . tail…

Git使用详细教程

1. cmd面板的常用命令 clear&#xff1a;清屏cd 文件夹名称----进入文件夹cd … 进入上一级目录(两个点)dir 查看当前目录下的文件和文件夹(全拼:directory)Is 查看当前目录下的文件和文件夹touch 文件名----创建文件echo 内容 > 创建文件名----创建文件并写入内容rm 文件名…

Redis知识补充(1)

1)Redis本身就是在内存中进行存储数据的&#xff0c;那么为什么不直接定义一个变量来针对数据直接进行存储呢&#xff1f;因为Redis主要是应用于分布式系统&#xff0c;才能发挥它的最大威力&#xff0c;如果只是一个单机程序&#xff0c;通过变量存储数据的方式&#xff0c;是…

Kotlin~Composite组合模式

概念 能够帮助实现树状结构的模式。 主要特点 递归组合树状结构统一处理所有对象 角色介绍 Component: 组合接口Leaf: 叶子节点&#xff0c;无子节点Composite&#xff1a;枝节点&#xff0c;用来存储子部件 UML 代码实现 interface Organ {fun personCount():Int } cla…

[VUE学习】从头搭建权限管理系统前端-初始化

1.安装Node 2.安装Vue Cli vue的一个脚手架 npm install -g vue/cli 3.vue ui搭建vue项目 cmd 运行 vue ui 然后创建新项目 选择npm 选择配置 Babel 是编译的 Router 是路由 vuex 是状态保存的 Linter/fomatter 代码检测和格式化 创建完成 这个时候 代码在我们本地…

解决IDEA/WebStorm的Ctrl+Shift+F冲突失效

IDEA 的 CtrlShiftF 是全文或全项目搜索搜索快捷键&#xff0c;非常好用。 当这个快捷键偶而会失效时&#xff0c;基本可以确定是快捷键冲突了。 检查所有运行的软件的快捷键&#xff0c;若有设置为CtrlShiftF的则改掉。特别是输入法会占用较多的快捷键。 例如我这里的搜过输…

Skywalking高级使用

Skywalking高级使用 RPC调用监控Mysql调用监控Skywalking常用插件获取追踪ID过滤指定的端点告警功能Skywalking原理Open Tracing介绍 RPC调用监控 Skywalking(6.5.0)支持的RPC框架有以下几种&#xff1a; (1) Dubbo 2.5.4 -> 2.6.0 (2) Dubbox 2.8.4 (3) Apache Dubbo 2.7.…

Git gui教程---第四篇 Git gui的使用 添加文件,并提交

添加文件&#xff0c;并提交 新建一个txt文件点击扫描重新扫描&#xff0c;未缓存改动多了我们刚刚新建的文件。 点击缓存改动&#xff0c;文件位置变换。 如果缓存选错&#xff0c;想撤销&#xff0c;在菜单栏选择“提交”&#xff0c;“从本次提交撤销”&#xff0c;文件变更…

实例解释在lingo中使用集合模型

某部门有三个生产同一产品的工厂&#xff08;产地&#xff09;&#xff0c;生产的产品运往四个销售点&#xff08;销地&#xff09;出售&#xff0c;各个工厂的生产量、各销地的销量&#xff08;单位&#xff1a;吨&#xff09;、从各个工厂到各个销售点的单位运价&#xff08;…

动态规划之62 不同路径(第4道)

题目&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&…