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

news/2025/3/20 6:38:20/

前言

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

相关文章

将查询字符串改为对象

接下来给大家介绍一个封装的函数,可以通过这个函数将一个url地址中的查询字符串提取出来,并且转换为一个对象。 运行结果如下:

pip改为pip3

pip改为pip3 记录问题: 最近换了电脑用pip安装时总是默认用Python2,导致安装后Python3里仍然不能使用安装的包 已解决: 修改./~bashrc文件,添加: alias pip"pip3.7" alias python"python3.7"执行…

mysql怎么把只读改为读写

如果你想把 MySQL 的只读模式改为读写模式,你可以使用以下步骤: 连接到 MySQL 服务器: mysql -u username -p输入密码并登录到 MySQL 服务器。 使用以下命令来查看当前数据库的只读模式设置: SHOWVARIABLES LIKE read_only;如果只…

用户名中文改为英文

1.管理员身份运行命令行窗口 2.net user administrator /active:yes 3.注销当前账号,使用管理员账号登陆 4.为文件重命名 5. WinR之后输入regedit进入注册表编辑器WinR之后输入regedit进入注册表编辑器

vscode界面改为中文

vscode界面改为中文 一、下载中文简体安装包 二、设置 按住ctrlshiftp,输入configure language,之后按回车 然后保存,并重启。

Linux如何改为北京时间

也许大家在使用国外linux时,感觉linux上的时间不是北京时间,感觉很别扭,今天我们就来改回为北京时间,首先登录你的linux,先用date命令查看下当前时间 1.[rootcentos ~]#date 2.Sun Aug 14 23:18:41 EDT 2011 现在我…

如何将主机改为静态ip

先winr输入cmd 通过ipconfig命令查看动态地址 右键桌面右下角网络图标 点击打开“网络和internet”设置 点击更改适配器选项 将查到的ip填入

pycharm如何改为中文显示?

pycharm改为中文显示 1、下载中文插件 2、放到安装目录下的lib目录下,即可 下载地址:中文插件