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节点的心跳报文发送间隔的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Keil | 解决Keil双击工程名无法
- 下一篇: dos导入mysql数据库表_用DOS命