日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CANopen | 对象字典OD 04 - 创建对象字典的变量(映射变量) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、前言
  • 二、實(shí)驗(yàn)?zāi)康?/li>
  • 三、對(duì)象字典
    • 3.1、找到工程里的對(duì)象字典文件
    • 3.2、創(chuàng)建映射變量
  • 四、STM32代碼
    • 4.1、Slave1.c
    • 4.2、main.c
  • 五、CAN盒子(收發(fā)器)
    • 5.1、通過SDO方式獲取obj_Var_Buttom的值

一、前言


對(duì)象字典的映射變量是用戶程序與CANopen程序(Canfestival)之間的通訊橋梁,目的是能讓用戶程序與CANopen程序(Canfestival)通訊。例如CANopen從站0x05的用戶程序每隔1S時(shí)間讀取一次按鈕是否被按下,當(dāng)按鈕被按下時(shí),修改映射變量obj_Var_Buttom為1,當(dāng)按鈕抬起時(shí),修改映射變量obj_Var_Buttom為0。CANopen主站可以通過SDO通訊,從CANopen節(jié)點(diǎn)0x05讀取映射變量obj_Var_Buttom的狀態(tài)。CANopen主站就能了解CANopen節(jié)點(diǎn)0x05上按鈕的狀態(tài)。

這里有一個(gè)問題,CANopen主站怎么知道CANopen節(jié)點(diǎn)0x05有obj_Var_Buttom這個(gè)映射變量呢?CANopen主站怎么知道呢?

答案:CANopen從站0x05的對(duì)象字典可以輸出eds格式,然后提供給CANopen主站就好了。當(dāng)我們?cè)O(shè)計(jì)完CANopen從站后,必須將最新的對(duì)象字典(輸出eds格式)提供給編寫CANopen主站程序的同學(xué)。目的是讓CANopen主站掌握CANopen從站的對(duì)象字典的內(nèi)容(比如PDO映射了哪些映射對(duì)象,CANopen從站有多少個(gè)映射變量等)。

STM32工程:
鏈接:https://pan.baidu.com/s/1bX5-BZSA3JQ8KS8-H_M8ng
提取碼:jutn

二、實(shí)驗(yàn)?zāi)康?/h1>

在對(duì)象字典上創(chuàng)建映射變量obj_Var_Buttom,并讓用戶程序去修改它。最后,我用CAN盒子(收發(fā)器)發(fā)送SDO報(bào)文從CANopen節(jié)點(diǎn)0x05獲取obj_Var_Buttom的當(dāng)前值(使用SDO獲取映射對(duì)象的值不是本節(jié)的重點(diǎn),純演示)。

測(cè)試硬件:

三、對(duì)象字典


3.1、找到工程里的對(duì)象字典文件

根據(jù)電腦里的工程地址,打開.od后綴的對(duì)象字典文件。

3.2、創(chuàng)建映射變量




最后的結(jié)果:


四、STM32代碼


4.1、Slave1.c



一切很順利,接著開始用用戶程序修改對(duì)象字典創(chuàng)建的映射變量obj_Var_Buttom。

4.2、main.c



編譯,下載,再進(jìn)入Debug模式觀察obj_Var_Buttom的確被修改為0x01。

五、CAN盒子(收發(fā)器)


上面演示了在對(duì)象字典里創(chuàng)建映射對(duì)象obj_Var_Buttom,并通過用戶程序去修改映射對(duì)象obj_Var_Buttom。最后,用CAN盒子(收發(fā)器)充當(dāng)CANopen主站,發(fā)送SDO報(bào)文從CANopen從站0x05獲取obj_Var_Buttom的值。

關(guān)于SDO報(bào)文的相關(guān)細(xì)節(jié),后續(xù)有博文詳細(xì)介紹。這里主要是“演示CANopen主站通過SDO指令可以從CANopen從站那里獲取映射對(duì)象的信息?!?/p>

5.1、通過SDO方式獲取obj_Var_Buttom的值

從CAN盒子看到,CANopen從站0x05以每2秒的時(shí)間間隔發(fā)送心跳報(bào)文。這里有一個(gè)重點(diǎn),在pre-Operational狀態(tài)下是可以使用SDO方式進(jìn)行通訊的,但PDO方式是關(guān)閉的。

使用CAN盒子發(fā)送以下CAN報(bào)文,CANopen從站0x05有回復(fù),從回復(fù)的CAN報(bào)文得知映射變量obj_Var_Buttom的值是1。

再驗(yàn)證一次吧,我用Keil的Debug功能將obj_Var_Buttom改為0x08,再使用CAN盒子發(fā)送SDO報(bào)文,看看CANopen從站0x05怎樣答復(fù)吧。

從CANopen從站0x05答復(fù)的CAN報(bào)文看到,映射變量obj_Var_Buttom的確是0x08!

總結(jié)

以上是生活随笔為你收集整理的CANopen | 对象字典OD 04 - 创建对象字典的变量(映射变量)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。