CANopen | 对象字典OD 04 - 创建对象字典的变量(映射变量)

该博客介绍了如何在CANopen从站的STM32设备中创建对象字典映射变量,并通过用户程序进行修改。实验目标是实现CANopen主站通过SDO协议读取从站的映射变量状态。文中详细阐述了对象字典的创建、STM32代码修改以及使用CAN盒子作为CANopen主站发送SDO报文获取从站状态的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言


对象字典的映射变量是用户程序与CANopen程序(Canfestival)之间的通讯桥梁,目的是能让用户程序与CANopen程序(Canfestival)通讯。例如CANopen从站0x05的用户程序每隔1S时间读取一次按钮是否被按下,当按钮被按下时,修改映射变量obj_Var_Buttom为1,当按钮抬起时,修改映射变量obj_Var_Buttom为0。CANopen主站可以通过SDO通讯,从CANopen节点0x05读取映射变量obj_Var_Buttom的状态。CANopen主站就能了解CANopen节点0x05上按钮的状态。

这里有一个问题,CANopen主站怎么知道CANopen节点0x05有obj_Var_Buttom这个映射变量呢?CANopen主站怎么知道呢?

答案:CANopen从站0x05的对象字典可以输出eds格式,然后提供给CANopen主站就好了。当我们设计完CANopen从站后,必须将最新的对象字典(输出eds格式)提供给编写CANopen主站程序的同学。目的是让CANopen主站掌握CANopen从站的对象字典的内容(比如PDO映射了哪些映射对象,CANopen从站有多少个映射变量等)。
在这里插入图片描述
STM32工程:
链接:https://pan.baidu.com/s/1bX5-BZSA3JQ8KS8-H_M8ng
提取码:jutn

二、实验目的


在对象字典上创建映射变量obj_Var_Buttom,并让用户程序去修改它。最后,我用CAN盒子(收发器)发送SDO报文从CANopen节点0x05获取obj_Var_Buttom的当前值(使用SDO获取映射对象的值不是本节的重点,纯演示)。
在这里插入图片描述
测试硬件:
在这里插入图片描述

三、对象字典


3.1、找到工程里的对象字典文件

根据电脑里的工程地址,打开.od后缀的对象字典文件。
在这里插入图片描述
在这里插入图片描述

3.2、创建映射变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后的结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、STM32代码


4.1、Slave1.c

在这里插入图片描述
在这里插入图片描述
一切很顺利,接着开始用用户程序修改对象字典创建的映射变量obj_Var_Buttom。

4.2、main.c

在这里插入图片描述
在这里插入图片描述
编译,下载,再进入Debug模式观察obj_Var_Buttom的确被修改为0x01。
在这里插入图片描述

五、CAN盒子(收发器)


上面演示了在对象字典里创建映射对象obj_Var_Buttom,并通过用户程序去修改映射对象obj_Var_Buttom。最后,用CAN盒子(收发器)充当CANopen主站,发送SDO报文从CANopen从站0x05获取obj_Var_Buttom的值。

关于SDO报文的相关细节,后续有博文详细介绍。这里主要是“演示CANopen主站通过SDO指令可以从CANopen从站那里获取映射对象的信息。”

5.1、通过SDO方式获取obj_Var_Buttom的值

从CAN盒子看到,CANopen从站0x05以每2秒的时间间隔发送心跳报文。这里有一个重点,在pre-Operational状态下是可以使用SDO方式进行通讯的,但PDO方式是关闭的。
在这里插入图片描述
使用CAN盒子发送以下CAN报文,CANopen从站0x05有回复,从回复的CAN报文得知映射变量obj_Var_Buttom的值是1。
在这里插入图片描述
再验证一次吧,我用Keil的Debug功能将obj_Var_Buttom改为0x08,再使用CAN盒子发送SDO报文,看看CANopen从站0x05怎样答复吧。
在这里插入图片描述
从CANopen从站0x05答复的CAN报文看到,映射变量obj_Var_Buttom的确是0x08!
在这里插入图片描述

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wallace Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值