一、前言
通过修改CANopen节点的对象字典,改变它发送心跳报文的频率。
测试硬件如下: STM32工程文件: 链接:https://pan.baidu.com/s/1MTahQyMBGKGTEWivzBiwUg 提取码:1yqx
二、实验的目的
当前的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节点。
|