衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

labview中事件回調的使用

lvxisi ? 來源:lvxisi ? 作者:lvxisi ? 2023-08-24 16:38 ? 次閱讀

最近測試了labview調用dll中的回調函數相關功能,遇到了一些問題,現在做一下整理和總結,相關的內容比較多,分多篇來寫。

在LabVIEW中,新手經常將所有的程序放在事件結構中來執行,有時還不取消前面板鎖定,一個事件觸發沒有執行完成時,又去執行另外一個事件,導致界面鎖死,必須從任務管理器里面關閉程序才行。

wKgZomTnFqOAMqVvAAKtoIyqNeY810.jpg

進一步優化,會采用生產者-消費者結構,在事件結構中觸發,在消費者循環中,處理相關的程序。但如果要處理的程序時間較長,還是會導致隊列阻塞,不能及時處理相應的程序。此時,便可以采用事件回調的方式來來解決。

wKgZomTnFqOALZiXAALB0o0_JfI308.jpg

先簡單介紹一下回調函數,是一種在編程中常見的概念,它通常用于在特定事件發生時執行預定義的操作。回調函數可以作為參數傳遞給其他函數,以便在需要時被調用,從而實現定制的事件處理和邏輯分離。詳細的概念網上很多,可以感興趣可以查一下。

在labview中,無法實現將函數的地址指針傳遞給dll的,實際測試過VI引用是不可以的。可通過包裝器的方式來實現,網上這方面的信息很少,個人理解,就是額外做一個中間層,將labview和dll進行連接。更進一步,就用其他語言如c++,編寫好相關的函數指針,完全實現既定的功能,之后再打包成中間的dll,在labview中進行調用。

labview本身,是支持回調函數的,只不過,這種機制是在內部進行實現(也許還支持其他的交互方式,本人沒有測試出來)。可以利用此功能,編寫一些異步的程序,解決一些程序執行時間較長的問題。

1)搜索找到“事件回調注冊”,這兩個是同樣的東西,在不同的文件路徑下面,選擇一個即可。

wKgaomTnFqOAMiF2AABhurO2fqQ366.jpg

2)拖放到程序框圖內,這個函數包含了事件、VI引用還有用戶參數。

wKgZomTnFqOAfYF8AAEGbSpmYyI094.jpg

3)這里寫一個簡單的測試函數,a+b=sum。其中a傳入值,b和sum傳入引用。

void Add(int a, int& b, int& sum) {

sum = a + b;

}

這幾個參數,作為函數的輸入,連接到用戶參數中上面。

wKgaomTnFqOAEJNrAACAEelHcmM625.jpg

4)選擇這個回調函數的觸發方式,這里使用A的值改變。將A的引用連接到“事件”接線端,選擇相應的事件。

wKgaomTnFqOAUrFcAAGpI-YcXmg316.jpg

5)在VI引用上,右鍵選擇“創建回調VI”,可以自動生成一個用于執行的VI函數。

wKgZomTnFqSATtAMAAEgo5mnho8496.jpgwKgaomTnFqSAQXvMAAGGlQfWglo837.jpg

這個生成的VI與自己編寫的VI靜態調用有所區別,界面顯示多了個*,右鍵查看是選擇了“嚴格類型VI的引用”。

wKgaomTnFqOAQUmBAAH37j7997k875.jpg

6)編程完成相關函數功能,保存VI。

wKgZomTnFqSAMjnRAAFT_7Srmcs758.jpg

7)編寫簡單的循環和延時,保證程序一直是執行狀態。

wKgZomTnFqSAESfKAAFAftMgRv4541.jpg

8)程序測試。輸入A=1,B=1,運行軟件。軟件運行時,程序沒有執行。當用于觸發的A達到“值改變”的條件時,程序運行,sum得到數據為2。

wKgaomTnFqSAe_LiAAD_i-z5EHM316.jpg

9) 后續改變A的數值,發現整個sum沒有發生變化,A的數據是以值的類型傳入的,后面再改變數據,也無法改變最初傳入的數據值。

wKgaomTnFqeAFcBpAAB4W6jkJHU658.jpg

10)修改B的數據,再修改A觸發程序,可以以看到程序運行。說明只需要注冊一次,程序可以觸發多次。

wKgZomTmHWuAIWsAAAFPqHy_OUg638.png

11)在常規用事件結構處理的事件,在“事件檢測窗口”中,都是有記錄的。但是利用事件回調是沒有記錄的,說明這個事件回調和事件結構沒有直接關系。

wKgZomTnFqSAJj0-AAJGzp9lQ2w136.jpg
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • LabVIEW
    +關注

    關注

    1977

    文章

    3657

    瀏覽量

    325644
  • 調試
    +關注

    關注

    7

    文章

    589

    瀏覽量

    34064
  • 程序
    +關注

    關注

    117

    文章

    3795

    瀏覽量

    81415
  • 回調函數
    +關注

    關注

    0

    文章

    87

    瀏覽量

    11622
收藏 人收藏

    評論

    相關推薦

    GUI調函數

    GUI調函數在哪里編寫?
    發表于 03-21 12:37

    調函數

    C++內編寫的DLL中有很多事件都是通過調函數來反饋,LABVIEW如何可以調用呢?
    發表于 11-06 15:36

    labview怎么處理dll調函數輸出值

    ); PrintLastFlashError(false);} }請問調函數一的參數值progressInPercent, remainingTimeInS,
    發表于 02-19 10:21

    關于labview調用dll的事件并回調問題

    我用c#寫了一個dll,其中方法add中有一個事件MyEvent(圖1),我在labview調用了這個方法并使用了事件調(圖2),
    發表于 11-22 10:55

    詳解java 調機制

    代碼示例 接下來看一下調的代碼示例,代碼模擬的是這樣一種場景:老師問學生問題,學生思考完畢回答老師。 首先定義一個調接口,只有一個方法tellAnswer(int answer),
    發表于 09-28 13:14 ?0次下載

    LabWindows/CVI 程序 調函數設計

    調函數是系統框架設計中非常重要的一種手段,所謂調函數(callback )是指一個通過函數指針調用的函數。
    發表于 05-03 16:54 ?1.1w次閱讀
    LabWindows/CVI 程序 <b class='flag-5'>回</b><b class='flag-5'>調</b>函數設計

    調函數的詳細資料說明

    異步事件的處理,首先將異步事件發生時需要執行的代碼編寫成一個函數,并將該函數注冊成為調函數,這樣當該異步事件發生時,系統會自動調用事先注冊好的調函數。
    發表于 02-28 08:00 ?6次下載
    <b class='flag-5'>回</b><b class='flag-5'>調</b>函數的詳細資料說明

    5個使用帶有中斷的調的技巧

    調是對更高級別軟件傳遞到函數的可執行代碼的引用。這些調能夠極大地提高嵌入式軟件的可移植性和重用性,但是根據它們的定義,它們需要使用函數指針,如果不仔細使用,可能會非常危險。以下是在
    的頭像 發表于 08-09 09:18 ?5153次閱讀
    5個使用帶有中斷的<b class='flag-5'>回</b><b class='flag-5'>調</b>的技巧

    C語言函數的調函數

    來源:嵌入式客棧 1 什么是調函數?首先什么是調呢? 我的理解是:把一段可執行的代碼像參數傳遞那樣傳給其他代碼,而這段代碼會在某個時刻被調用執行,這就叫做回
    的頭像 發表于 09-11 09:57 ?4187次閱讀

    嵌入式開發軟件調函數的使用

    在嵌入式開發軟件調函數是經常接觸的一種軟件設計方法,像我們的事件處理機制基本上都會使用到調函數。
    的頭像 發表于 04-29 08:57 ?2333次閱讀

    根據調機制注冊事件并處理調VI

    通過事件調注冊函數(Register Event Callback)注冊一個調VI,在事件發生時會運行該回調VI,通常用于注冊和處理.N
    的頭像 發表于 11-24 09:15 ?2429次閱讀

    函數指針和調函數的使用方法

    了解開發語言的朋友應該都會對調函數有所了解,在很多的程序開發語言中都能看到調的身影。很多場景下,當某個條件成立以后我們希望代碼執行某些指定的部分,這個時候可以考慮使用回
    的頭像 發表于 04-10 15:08 ?1189次閱讀

    C語言|調函數的不同用法

    調函數是個高級操作技巧,也是日常項目中常常使用到的技能。之所以說調函數是個高級操作技巧,是因為它讓異步操作更加方便,眾所周知程序執行分為同步操作和異步操作,同步操作故名思意就是按代
    發表于 07-10 10:34 ?1347次閱讀

    ??嵌入式調函數的實現方法

    調函數的命名規范沒有固定的標準,但是根據通用慣例和編碼規范,調函數的命名應該能夠反映函數的作用和功能,讓其他開發者能夠快速理解并使用。
    發表于 03-04 14:49 ?813次閱讀

    調函數(callback)是什么?調函數的實現方法

    調函數是一種特殊的函數,它作為參數傳遞給另一個函數,并在被調用函數執行完畢后被調用。調函數通常用于事件處理、異步編程和處理各種操作系統和框架的API。
    發表于 03-12 11:46 ?3143次閱讀
    百家乐2号技术打法| 大发888娱乐城 真钱下载| 百家乐官网出千原理| 百家乐官网国际赌场娱乐网规则| 温州百家乐官网的玩法技巧和规则| 碧桂园太阳城怎么样| 真人百家乐官网怎么对冲| 百家乐的出千手法| 滕州市| 风水8闰24山| 菲彩国际| 圣淘沙百家乐游戏| 御金娱乐城| 百家乐官网娱乐用品| 大佬百家乐的玩法技巧和规则 | 棋牌游戏开发公司| 百家乐官网群shozo| 足球投注网址| 豪博百家乐娱乐城| 百家乐官网输了好多钱| 基础百家乐的玩法技巧和规则| 7人百家乐官网桌子| 百家乐筹码防伪| 新百家乐官网的玩法技巧和规则| 德州扑克游戏大厅| 百家乐游戏高手| 百家乐官网技术方式| 大玩家百家乐的玩法技巧和规则 | 汉百家乐官网春| 百家乐试玩| 网络百家乐的信誉| 百家乐官网平台注册送彩金| 太阳城申博娱乐| 豪享博百家乐官网的玩法技巧和规则| 皇冠在线开户| 真人百家乐赢钱| 百家乐官网怎样概率大| 威尼斯人娱乐城澳门威| 伟易博百家乐官网娱乐城| 图们市| 疯狂百家乐游戏|