0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

LabVIEW中的動(dòng)態(tài)事件

華穗科技 ? 來源:華穗科技 ? 2023-05-04 11:53 ? 次閱讀

眾所周知:LabVIEW中的事件結(jié)構(gòu)可以響應(yīng)用戶操作,并且它會(huì)根據(jù)發(fā)生的事件來決定執(zhí)行不同事件分支。當(dāng)發(fā)生某個(gè)事件時(shí),事件結(jié)構(gòu)會(huì)自動(dòng)捕獲,并自動(dòng)執(zhí)行對(duì)應(yīng)代碼。

使用事件結(jié)構(gòu)克服了以前輪詢方式結(jié)構(gòu)的缺點(diǎn),可以讓我們的代碼更加高效,極大提升了界面處理的運(yùn)行效率,同時(shí)也降低了CPU占用,提高了用戶使用體驗(yàn)。但有時(shí)候事件結(jié)構(gòu)中已有的事件種類并不能完全滿足我們的需求,這時(shí)候應(yīng)該怎么辦呢?其實(shí)動(dòng)態(tài)事件就是為此而生,開發(fā)人員可以通過自定義注冊(cè)和使用動(dòng)態(tài)事件,滿足各種特殊情況下的事件響應(yīng)需求。

接下來請(qǐng)大家跟隨小編一起學(xué)習(xí)LabVIEW事件結(jié)構(gòu)以及動(dòng)態(tài)事件的使用!

本文分享:

LabVIEW動(dòng)態(tài)事件

一、 事件結(jié)構(gòu)介紹

事件結(jié)構(gòu)和條件結(jié)構(gòu)比較類似,它們都是通過滿足某個(gè)條件來選擇執(zhí)行其對(duì)應(yīng)分支代碼的一種結(jié)構(gòu);區(qū)別在于條件結(jié)構(gòu)是根據(jù)條件接線端的選擇來決定執(zhí)行對(duì)應(yīng)的分支,而事件結(jié)構(gòu)則是根據(jù)發(fā)生的事件來決定執(zhí)行對(duì)應(yīng)的分支。

事件結(jié)構(gòu)可以自動(dòng)捕獲所發(fā)生的事件,并根據(jù)事件選擇執(zhí)行不同的事件分支。事件結(jié)構(gòu)正上方內(nèi)側(cè)的事件標(biāo)簽可以顯示當(dāng)前分支所對(duì)應(yīng)的事件,除此之外,事件結(jié)構(gòu)還可以捕獲有關(guān)該事件的一些相關(guān)數(shù)據(jù),比如事件發(fā)生的時(shí)間、事件源、類型等。

cfb8803e-e700-11ed-ab56-dac502259ad0.png

二、 事件分類

事件可以根據(jù)事件產(chǎn)生的源來區(qū)分,LabVIEW中的事件可以分為六大類,它們分別是:<應(yīng)用程序>、<本VI>、<窗格>、<分隔欄>、<控件>以及<動(dòng)態(tài)>。這六類事件可以在“編輯事件”對(duì)話框的“事件源”這一欄中看到,而每一個(gè)事件源中對(duì)應(yīng)的具體事件可以在“事件”欄中看到,如下圖所示:

cfcaaf16-e700-11ed-ab56-dac502259ad0.png

<應(yīng)用程序>

這類事件主要反映整個(gè)應(yīng)用程序狀態(tài)的變化,例如程序是否關(guān)閉,書簽信息是否有改動(dòng),是否超時(shí)等。事件結(jié)構(gòu)中默認(rèn)的超時(shí)分支就是該類事件。

cfe73e6a-e700-11ed-ab56-dac502259ad0.png

<本VI>

這類事件主要反映當(dāng)前VI狀態(tài)的改變,例如前面板大小以及狀態(tài)、鼠標(biāo)、鍵盤對(duì)本VI的操作狀態(tài)、是否選擇了本VI菜單項(xiàng)中的某一個(gè)等。

d00a48e2-e700-11ed-ab56-dac502259ad0.png

<窗格>

這類事件包括與前面板中某一窗格有關(guān)的事件,比如鼠標(biāo)進(jìn)入/離開某一個(gè)窗格。一般情況下一個(gè)VI的前面板都是默認(rèn)只有一個(gè)窗格,但是如果前面板上使用了“分隔欄”那就可以將一個(gè)VI的前面板分隔為多個(gè)窗格。每個(gè)窗格都可以理解為新的且互相獨(dú)立的前面板,可以用來放置不同類型的控件。

d02bc06c-e700-11ed-ab56-dac502259ad0.png

<分隔欄>

這類事件主要包括與分隔欄有關(guān)的事件,比如鼠標(biāo)在分隔欄上點(diǎn)擊/釋放等。分隔欄可以用來劃分VI前面板的不同功能區(qū)域,讓我們的界面設(shè)計(jì)和布局更加美觀且條理分明。

d04d6b04-e700-11ed-ab56-dac502259ad0.png

<動(dòng)態(tài)>

這類事件用于處理在程序中臨時(shí)注冊(cè)的事件或者用戶自定義的事件,在未注冊(cè)動(dòng)態(tài)事件之前,該事件源為灰色不可選狀態(tài),下面本文將詳細(xì)介紹動(dòng)態(tài)事件。

d06964d0-e700-11ed-ab56-dac502259ad0.png

二、 動(dòng)態(tài)事件

概述:

動(dòng)態(tài)事件可以分為兩種,一種是由LabVIEW本身可以產(chǎn)生的動(dòng)態(tài)事件,比如前面介紹的除了動(dòng)態(tài)事件以外的其他五種分類的事件(也就是說這五種事件可以被注冊(cè)成為動(dòng)態(tài)事件),還有一種是由用戶自己定義的動(dòng)態(tài)事件。

動(dòng)態(tài)事件相關(guān)的函數(shù)在程序框圖面板>>編程>>對(duì)話框與用戶界面>>事件中。接下來我們先了解一下事件子程序框圖中的這些節(jié)點(diǎn)。

d081f9c8-e700-11ed-ab56-dac502259ad0.png

所有動(dòng)態(tài)事件在使用之前都需要先注冊(cè)事件,它的含義其實(shí)是將動(dòng)態(tài)事件注冊(cè)到事件結(jié)構(gòu)中,即聲明該動(dòng)態(tài)事件將在這個(gè)事件結(jié)構(gòu)中響應(yīng)。兩種動(dòng)態(tài)事件都可以使用“注冊(cè)事件”節(jié)點(diǎn)來注冊(cè),注意在程序結(jié)束后需要使用“取消注冊(cè)事件”來關(guān)閉注冊(cè)事件引用句柄。

在使用用戶自定義的動(dòng)態(tài)事件時(shí)需要先使用“創(chuàng)建用戶事件”創(chuàng)建該動(dòng)態(tài)事件,然后再使用“注冊(cè)事件”將該動(dòng)態(tài)事件注冊(cè)到一個(gè)事件結(jié)構(gòu)中,在需要觸發(fā)事件的地方使用“產(chǎn)生用戶事件”來讓事件結(jié)構(gòu)響應(yīng)該事件,在程序不需要再次響應(yīng)用戶事件時(shí)使用“銷毀用戶事件”來銷毀用戶事件引用句柄,釋放用戶事件引用。所有注冊(cè)為該用戶事件的事件結(jié)構(gòu)不再接收該事件。

LabVIEW自產(chǎn)生動(dòng)態(tài)事件:

事件分類中提到的除了“動(dòng)態(tài)”事件之外的那五類靜態(tài)事件都可以被注冊(cè)為L(zhǎng)abVIEW自產(chǎn)生的動(dòng)態(tài)事件,區(qū)別就是靜態(tài)事件只能是本VI中對(duì)象產(chǎn)生的,而動(dòng)態(tài)事件卻可以在一個(gè)VI中使用其他VI中的對(duì)象產(chǎn)生的事件。

設(shè)想一個(gè)場(chǎng)景:在一個(gè)大型項(xiàng)目中,往往會(huì)使用大量的子VI,一般情況下我們會(huì)有一個(gè)VI專門用來響應(yīng)事件操作,而這個(gè)VI經(jīng)常必須要處理其他VI的控件產(chǎn)生的事件,但是這個(gè)控件很明顯并不在這個(gè)VI中,所以在這個(gè)VI的事件結(jié)構(gòu)編輯事件的對(duì)話框中是沒辦法找到這個(gè)控件的,LabVIEW中為了應(yīng)對(duì)這種狀況專門設(shè)計(jì)了動(dòng)態(tài)事件。

在注冊(cè)動(dòng)態(tài)事件時(shí),需要先為產(chǎn)生這個(gè)事件的對(duì)象(控件、窗格、分隔欄等)創(chuàng)建一個(gè)引用,然后將該引用連線至“注冊(cè)事件”的事件源輸入接線端,隨后將“注冊(cè)事件”生成的“注冊(cè)事件引用句柄”連線至事件結(jié)構(gòu)的“動(dòng)態(tài)事件接線端”完成事件的注冊(cè),如下圖所示:

d09904f6-e700-11ed-ab56-dac502259ad0.png

d0b48852-e700-11ed-ab56-dac502259ad0.png

上圖中的程序框圖是子VI的程序框圖,一共注冊(cè)了兩個(gè)動(dòng)態(tài)事件,一個(gè)是主VI窗格的鼠標(biāo)移動(dòng)事件,另一個(gè)是主VI中“停止”按鈕的值改變事件。 這兩個(gè)事件注冊(cè)完成后可以在這個(gè)事件結(jié)構(gòu)的編輯事件對(duì)話框<動(dòng)態(tài)>一欄找到并編輯使用。 上圖中前面板為主VI的前面板,功能是在“鼠標(biāo)坐標(biāo)”中實(shí)時(shí)跟隨并刷新鼠標(biāo)在前面板中的位置坐標(biāo),按下停止按鈕后響應(yīng)并停止程序運(yùn)行(示例代碼會(huì)在后面給出)。

spacer.gif?t=B8DJ5M3用戶事件:

假設(shè)需要在程序中,在滿足其它某種條件時(shí)也產(chǎn)生一個(gè)事件,而這個(gè)條件不是LabVIEW自產(chǎn)生的(如用戶按了某個(gè)按鈕、改變某個(gè)控件值等),這時(shí)就可以考慮用戶自定義事件了。

用戶自定義事件靈活性較高,可以讓用戶自己設(shè)計(jì)什么時(shí)候發(fā)生并執(zhí)行什么事件代碼,使用用戶事件時(shí)需要先定義一個(gè)用戶事件數(shù)據(jù)類型,就像建立消息隊(duì)列時(shí)需要定義隊(duì)列元素的數(shù)據(jù)類型一樣,用戶事件數(shù)據(jù)類型可以是LabVIEW支持的任意數(shù)據(jù)類型。

和LabVIEW自產(chǎn)生動(dòng)態(tài)事件相同的是創(chuàng)建用戶事件之后同樣需要在一個(gè)事件結(jié)構(gòu)中注冊(cè)該事件,不同的是事件什么時(shí)候發(fā)生、在哪個(gè)VI中發(fā)生我們都是可以自定義的,只需要拿到創(chuàng)建用戶事件后的輸出句柄使用“產(chǎn)生用戶事件”產(chǎn)生一次該事件。

下面這個(gè)示例是模擬一個(gè)溫度采集VI和顯示界面VI之間的交互,溫度采集VI采集到溫度信息后使用用戶事件的方式傳遞給顯示界面VI去做對(duì)應(yīng)的處理,顯示當(dāng)前報(bào)警信息并且當(dāng)溫度太高時(shí)LED燈報(bào)警(示例代碼會(huì)在后面給出)。

d11a5934-e700-11ed-ab56-dac502259ad0.png

示例中注冊(cè)了兩個(gè)用戶事件,一個(gè)是“溫度報(bào)警”事件,一個(gè)是“停止程序”事件。 注冊(cè)用戶事件時(shí)有個(gè)小技巧就是可以將你要注冊(cè)的所有用戶事件輸出句柄捆綁到一個(gè)簇中,然后使用“注冊(cè)事件”節(jié)點(diǎn)直接注冊(cè)這個(gè)簇,這樣可以方便同時(shí)注冊(cè)多個(gè)事件。

spacer.gif?t=B8DJ5M3以上就是關(guān)于LabVIEW動(dòng)態(tài)事件的知識(shí)分享啦。 本文的演示代碼及安裝包已存入百度網(wǎng)盤,有需要的小伙伴可以自行取用,演示代碼請(qǐng)使用LabVIEW 2020及以后版本打開。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10772

    瀏覽量

    210445
  • LabVIEW
    +關(guān)注

    關(guān)注

    1958

    文章

    3651

    瀏覽量

    321446
  • 面板
    +關(guān)注

    關(guān)注

    13

    文章

    1666

    瀏覽量

    53724
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4697

    瀏覽量

    68085
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3223

    瀏覽量

    57504

原文標(biāo)題:知識(shí)分享 | LabVIEW中的動(dòng)態(tài)事件

文章出處:【微信號(hào):華穗科技,微信公眾號(hào):華穗科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    動(dòng)態(tài)數(shù)據(jù)怎樣轉(zhuǎn)化成數(shù)組進(jìn)行比較

    labview 動(dòng)態(tài)數(shù)據(jù) 怎樣 轉(zhuǎn)化成數(shù)組進(jìn)行 比較
    發(fā)表于 07-13 22:37

    LabVIEW調(diào)用動(dòng)態(tài)dll

    急急急。。。求助,,,,,,,LabVIEW調(diào)用在vc++建立的動(dòng)態(tài)dll動(dòng)態(tài)dll的返回值在vc++上一定要return,返回才行嗎?
    發(fā)表于 10-23 14:50

    labview動(dòng)態(tài)創(chuàng)建控件的問題

    如題,labview 有沒有動(dòng)態(tài)創(chuàng)建的控件的辦法,比如說我在 程序設(shè)計(jì)之初不知道我運(yùn)行時(shí)候具體有幾個(gè)LED燈泡,我想根據(jù)實(shí)際運(yùn)行情況進(jìn)行動(dòng)態(tài)創(chuàng)建,類似于C++ 的new
    發(fā)表于 03-17 21:03

    【畢業(yè)設(shè)計(jì)求助】大神們求教!

    我的畢業(yè)設(shè)計(jì)的題目是用labview做一個(gè)系統(tǒng)界面實(shí)現(xiàn)虛擬的3D打印,現(xiàn)在界面做好了。我在想如何實(shí)現(xiàn)虛擬打印的過程,我想問有什么插件來實(shí)現(xiàn)在labview動(dòng)態(tài)畫圖嗎?如下圖在打印顯示
    發(fā)表于 05-06 12:26

    請(qǐng)問labview動(dòng)態(tài)調(diào)用子vi的輸入輸出怎么和主程序交互

    labview動(dòng)態(tài)調(diào)用子vi,子vi的輸入輸出怎么和主程序交互
    發(fā)表于 01-16 20:17

    LabVIEWDLL文件的創(chuàng)建過程和編程結(jié)果

    ,他的許多新功能也是通過DLL來實(shí)現(xiàn)的?! ?b class='flag-5'>LabVIEW動(dòng)態(tài)鏈接庫的調(diào)用是通過CLF(Call Library Function) 節(jié)點(diǎn)實(shí)現(xiàn)的,如圖1所示。CLF可被用來調(diào)用32位的Windows
    發(fā)表于 05-15 07:24

    labview動(dòng)態(tài)創(chuàng)建右鍵自定義快捷菜單

    attach://885619.docx放在附件里面了,大家有需要的可以下載來看。
    發(fā)表于 03-19 17:06

    LabVIEW在汽車ABS制動(dòng)管道動(dòng)態(tài)特性測(cè)試的應(yīng)用

    介紹了LabVIEW的背景、結(jié)構(gòu)和特點(diǎn),并簡(jiǎn)要地介紹了其在汽車ABS制動(dòng)管道動(dòng)態(tài)特性測(cè)試的應(yīng)用。 關(guān)鍵詞:LabVIEW;虛擬儀器;ABS
    發(fā)表于 07-25 09:57 ?16次下載

    動(dòng)態(tài)鏈接庫在LabVIEW的高級(jí)應(yīng)用

    LabVIEW 的提供了調(diào)用共享庫函數(shù)的接口,但是一些現(xiàn)成的函數(shù)庫卻因?yàn)榻涌趨?shù)類型不同而不能在LabVIEW 中使用。利用重新編寫動(dòng)態(tài)鏈接庫的方法可以建立舊函數(shù)庫與
    發(fā)表于 08-04 10:09 ?57次下載

    基于LabVIEW的紗線動(dòng)態(tài)張力檢測(cè)系統(tǒng)

    摘要:紗線動(dòng)態(tài)張力的檢測(cè)在紡織生產(chǎn)中有著很重要的意義。本文給出了一種基于LabVIEW的紗線動(dòng)態(tài)張力檢測(cè)系統(tǒng)。它充分利用虛擬儀器技術(shù)的優(yōu)勢(shì),方便的實(shí)現(xiàn)了信號(hào)的采集和數(shù)據(jù)
    發(fā)表于 05-30 16:57 ?12次下載

    Labview動(dòng)態(tài)窗口樣式之一

    Labview動(dòng)態(tài)窗口樣式之一,很好的Labview資料,快來下載學(xué)習(xí)吧。
    發(fā)表于 04-19 10:56 ?0次下載

    Labview動(dòng)態(tài)窗口樣式之二

    Labview動(dòng)態(tài)窗口樣式之二,很好的Labview資料,快來下載學(xué)習(xí)吧。
    發(fā)表于 04-19 10:56 ?0次下載

    Labview動(dòng)態(tài)窗口樣式之三

    Labview動(dòng)態(tài)窗口樣式之三,很好的Labview資料,快來下載學(xué)習(xí)吧。
    發(fā)表于 04-19 10:56 ?0次下載

    labview的優(yōu)勢(shì)與缺點(diǎn)_LabVIEW類的動(dòng)態(tài)類型處理

    本文主要介紹了labview的優(yōu)勢(shì)與缺點(diǎn)及LabVIEW類的動(dòng)態(tài)類型處理。
    發(fā)表于 05-07 09:10 ?4.2w次閱讀
    <b class='flag-5'>labview</b>的優(yōu)勢(shì)與缺點(diǎn)_<b class='flag-5'>LabVIEW</b>類的<b class='flag-5'>動(dòng)態(tài)</b>類型處理

    LabVIEWXY圖曲線圖免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是LabVIEWXY圖曲線圖免費(fèi)下載標(biāo)簽動(dòng)態(tài)跟隨,游標(biāo)動(dòng)態(tài)跟隨顯示。
    發(fā)表于 10-26 08:00 ?24次下載
    <b class='flag-5'>LabVIEW</b><b class='flag-5'>中</b>XY圖曲線圖免費(fèi)下載