CANopen | 对象字典OD 02 - 修改CANopen节点的心跳报文发送间隔
文章目录
- 一、前言
- 二、实验的目的
- 三、对象字典OD
- 3.1、Slave.od
- 3.2、Slave1.c
- 四、CAN盒子(收发器)
- 五、细节补充
- 5.1、Slave1.od文件的作用
一、前言
通过修改CANopen节点的对象字典,改变它发送心跳报文的频率。
测试硬件如下:
STM32工程文件:
链接:https://pan.baidu.com/s/13UsIJYrBbGjtSrTnlg5GdA
提取码:jntw
二、实验的目的
当前的CANopen节点0x05是每1秒时间往CAN总线发送一次心跳报文。
板子上电后,通过CAN盒子可以监控如下CAN报文:
1、从时间戳上看到,报文是每1秒发送1次。
2、从CANID = 0x705得到,这个是Node_ID = 0x05的CANopen节点发出来的心跳报文。
3、报文的数据段只有1个字节(7F),表示该CANopen节点处于预操作状态。(在该状态下,PDO功能是关闭的)
通过下面的步骤,CANopen节点0x05将每2秒时间往CAN总线发送一次心跳报文。
三、对象字典OD
3.1、Slave.od
使用对象字典软件Objdictedit打开工程上的对象字典文件Slave1.od(在我这个演示工程上的命名)。
接着,找到对象字典0x1000 ~ 0x1029 Communication Parameters里,地址0x1017的Producer Heartbeat Time。此时,Producer Heartbeat Time的值等于0x03E8(十进制:1000)。
0x1017 Producer Heartbeat Time是什么意思呢?它的单位是什么?查看《CANopen_meno.pdf》的1.13 General communication objects,找到0x1017 Producer Heartbeat。原来0x1017是生产者心跳时间间隔(单位ms)。
最后,将0x1017 Producer Heartbeat Time从1000ms改为2000ms,即十六进制的0x7D0。
修改它,改为0x7D0。
最后记得生成词典,即Slave1.c代码文件。
替换原来的Slave1.c文件。
3.2、Slave1.c
刚才在Slave1.od文件上修改了0x1017 Producer Heartbeat Time,然后生成了Slave1.c文件。看看工程上的Slave1.c里的0x1017是不是被修改了。
接着,编译新的代码,烧写到STM32单片机里。
四、CAN盒子(收发器)
从CAN盒子收到的CAN报文看来,CANopen节点变成每2S时间发送1次心跳报文,实验成功。
五、细节补充
5.1、Slave1.od文件的作用
Canfestival提供Objdictedit软件修改.od文件(对象字典文件),Objdictedit软件可以将.od文件转换为.c代码文件(单片机的程序),还可以转换为.eds文件(CANopen的设备描述文件)。
.eds文件有什么用?例如,我最近开发完一个CANopen节点,准备将它加入机器人的CAN网络上。进行电气连线之前,需要先生成.eds文件给PLC工程师,PLC工程师将我提供的.eds文件导入到PLC控制器里,让PLC(机器人的主控,同时也是CANopen主站)可以在CAN网络上识别出我设计的CANopen节点。
CANopen | 对象字典OD 02 - 修改CANopen节点的心跳报文发送间隔相关推荐
- CANopen | 对象字典OD 03 - 启动CANopen节点的服务数据对象SDO
文章目录 一.前言 二.实验的目的 三.对象字典OD 3.1.Slave1.od 3.2.Slave1.c 四.CAN盒子(收发器) 4.1.通过SDO方式修改CANopen从站的心跳时间 一.前言 ...
- CANopen | 对象字典OD 04 - 创建对象字典的变量(映射变量)
文章目录 一.前言 二.实验目的 三.对象字典 3.1.找到工程里的对象字典文件 3.2.创建映射变量 四.STM32代码 4.1.Slave1.c 4.2.main.c 五.CAN盒子(收发器) 5 ...
- CANopen | 对象字典OD 01 - canfestival对象字典编辑软件安装与使用
对象字典编辑软件环境的搭建很简单.直接参考<硬石YS-H7Multi开发板开发手册>的第46.3章节-对象字典编辑器的环境搭建与第46.4章节-对象字典编辑器的使用,手册的下载地址我分享: ...
- canopen协议的介绍之NMT节点管理;
耐心查看,必有所获!尽量别跳过,否则有些前面写了的,后面可不一定解释了. 一个系列的首页:https://blog.csdn.net/kissgoodbye2012/article/details/8 ...
- CanOpen 对象字典的理解
CanOpen 对象字典的理解 我们知道,Canopen是在Can2.0B的数据链路层之上的应用协议,是在20世纪90年代基于CAL发展而来的子协议,由于其稳定性.实时性.抗干扰性非常优秀,被广泛应用 ...
- CANopen对象字典
什么是对象字典(Object Dictionary) 想象CANopen的应用场景之一--电机控制 控制器通过CAN总线控制电机1和电机2.同时需要,电机1和电机2把实时的状态参数返回给控制器,两者之 ...
- CANopen | 网络管理NMT01 - 节点上线报文与心跳报文
文章目录 一.前言 二.NMT节点上线报文 三.NMT心跳报文 一.前言 CANopen协议的NMT管理报文既是最简单又是最重要的知识点,为什么网络管理NMT这么重要? 1.CANopen从站上电后, ...
- canopen pdo通信c语言,CANopen通信之PDO通信
过程数据对象(Process Data Object,PDO)是用来传输实时数据的,提供对设备应用对象的直接访问通道,它用来传输实时短帧数据,具有较高的优先权.PDO 传输的数据必须少于或等于 8 个 ...
- 如何修改 Kubernetes 节点 IP 地址?
如何修改 Kubernetes 节点 IP 地址? ✨博主介绍 前言 环境 操作 master 节点 node 节点 推荐操作 个人总结 ✨博主介绍
最新文章
- oracle 提示:ORA-02292:integrity constraint(xxxxxxx) violated - child record found
- 设计模式之职责链模式(Chain of Responsibility)摘录
- 通过hibernate 查询出来的数据默认为持久状态,也就是说:你在后头作出的任何操作都会被hibernate自动同步更新到数据库
- 使用RNN神经网络自动生成名字 (不使用深度学习框架,源码)
- Java 读写Properties配置文件(转)
- 2018-2019 20165208 网络对抗 Exp3 免杀原理与实践
- LeetCode 1180. 统计只含单一字母的子串
- java中如何分隔字符串_Java中分割字符串
- 通过FTP备份IOS
- bzoj1015 [JSOI2008]星球大战 并查集
- python父类方法的装饰器_Python使用装饰器自动调用父类__init__
- Linux运维问题解决(2)——Linux设置定时重启系统的方法:定时任务crontab 和 编写脚本
- Java 1.1.4 检测字符串是否相等
- Vue学习笔记之04-computed计算属性
- 自然语言处理——语言模型(二)
- 附件 计算机 丢失,帮你找回Win7开始菜单附件丢失的工具
- php加载memcache模块
- php 判断来访客户端是否移动设备
- 趣谈网络协议学习笔记[计算机网络]
- 使用函数式编程优化代码