CANopen | 对象字典OD 04 - 创建对象字典的变量(映射变量)
文章目錄
- 一、前言
- 二、實驗目的
- 三、對象字典
- 3.1、找到工程里的對象字典文件
- 3.2、創建映射變量
- 四、STM32代碼
- 4.1、Slave1.c
- 4.2、main.c
- 五、CAN盒子(收發器)
- 5.1、通過SDO方式獲取obj_Var_Buttom的值
一、前言
對象字典的映射變量是用戶程序與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!
總結
以上是生活随笔為你收集整理的CANopen | 对象字典OD 04 - 创建对象字典的变量(映射变量)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.8 编程基础之多维数组 04 错误探
- 下一篇: 两个构件的重合点_GTJ2018软件中如