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

前言

想学习些新东西了,原本想直接学学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.hqwc.cn/news/13637.html

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

相关文章

ITIL 4服务连续性管理实践

一、目的和描述 关键信息 服务连续性管理实践的目的是确保灾难发生时,服务的可用性和性能能够保持在足够的水平。本实践提供了一个框架机制,利用产生有效响应的能力来构建组织的弹性,以保障关键利益相关者的利益,还有组织的声誉…

数据库视图与索引经典题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 视图与索引视图:定义视图创建视图删除视图查询视图视图的作用 索引索引的概念索引的类型设计索引 视图与索引 视图: 视图是从一个或几个基…

chatgpt生成pygame opengl实现旋转用图片填充的3d三角形

import pygame from pygame.locals import * from OpenGL.GL import * from OpenGL.GLU import *def draw_triangle():vertices ((0, 2, 0), # 顶点1(-2, -2, 0), # 顶点2(2, -2, 0) # 顶点3)tex_coords ((1, 2), # 顶点1的纹理坐标(1, 1), # 顶点2的纹理坐标(2, …

HTML期末作业-精仿故宫模板(HTML+CSS+JavaScript)

期末作业完成!我仿了故宫官网,老师给了90分。现在分享给大家! 首页包含功能: 轮播图:在首页顶部设置一个可自动轮播的图片展示区域,展示多张宣传图片或产品图片,提升页面的视觉效果和吸引力。…

Ajax简介和实例

目录 什么是 AJAX ? AJAX实例 ajax-get无参 ajax-get有参 对象和查询字符串的互转 ajax-post ajax-post 表单 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 什么是 AJAX ? 菜鸟教程是这样介绍的&#xff1a…

使用TypeScript实现贪吃蛇小游戏(网页版)

本项目使用webpackts所编写 下边是项目的文件目录 /src下边的index.html页面是入口文件 index.ts是引入所有的ts文件 /modules文件夹是用来存放所有类的 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"…

SpringCloud:微服务技术

一、认识微服务&#xff1a; 首先&#xff0c;微服务架构不等于SpringCloud&#xff0c;微服务架构是一种经过良好架构设计的分布式架构方案&#xff0c; &#xff0c;它将应用构建成一系列按业务领域划分模块的&#xff0c;小的自治服务&#xff0c;并解决服务拆分所产生的各种…

【网络】TCP协议详解

目录 TCP协议格式 感性理解TCP报头 认识报头中的字段 序号和确认序号 4位首部长度 窗口大小 标记位 确认应答机制 超时重传机制 TCP协议格式 感性理解TCP报头 linux内核是用C语言写的&#xff0c;所以报头实际上就是一种结构化的数据对象&#xff0c;用伪代码可表示为…

UNI-APP_subNVue原生子窗口使用,web-view层级问题解决

subNVues文档 app-subnvues文档 subNVues开发指南 需求&#xff1a;在pages/cloud_control/index页面使用subNVue原生子窗口 1.pages文件配置 "app-plus": {"bounce": "none","subNVues":[{"id": "control_popup&qu…

Chapter 3: Conditional | Python for Everybody 讲义笔记_En

文章目录 Python for Everybody课程简介Chapter 3: Conditional executionBoolean expressionsLogical operatorsConditional executionAlternative executionChained conditionalsNested conditionalsCatching exceptions using try and exceptShort-circuit evaluation of lo…

idea 启动项目 java: Compilation failed: internal java compiler error

1. 首先查看 项目的 编译的 JDK 版本是否是 匹配了或匹配的 2. 堆分配的内存不足导致&#xff0c;如下图位置 堆 构建程序的 堆大小调大

【JavaWeb】了解JavaScript DOM API

目录 1、什么是DOM 1.1、DOM树 1.2、 了解事件 2、常用的DOM API 2.1、选中页面元素 2.2、获取/修改元素内容 2.2.1、innerHTML和innerText 2.2、获取/修改元素属性 2.3、获取/修改表单元素属性 3、JQuery框架的简单了解和使用 4、代码案例&#xff1a;实现聚合索引功…