眾所周知:LabVIEW中的事件結構可以響應用戶操作,并且它會根據發生的事件來決定執行不同事件分支。當發生某個事件時,事件結構會自動捕獲,并自動執行對應代碼。
使用事件結構克服了以前輪詢方式結構的缺點,可以讓我們的代碼更加高效,極大提升了界面處理的運行效率,同時也降低了CPU占用,提高了用戶使用體驗。但有時候事件結構中已有的事件種類并不能完全滿足我們的需求,這時候應該怎么辦呢?其實動態事件就是為此而生,開發人員可以通過自定義注冊和使用動態事件,滿足各種特殊情況下的事件響應需求。
接下來請大家跟隨小編一起學習LabVIEW事件結構以及動態事件的使用!
本文分享:
LabVIEW動態事件
一、 事件結構介紹
事件結構和條件結構比較類似,它們都是通過滿足某個條件來選擇執行其對應分支代碼的一種結構;區別在于條件結構是根據條件接線端的選擇來決定執行對應的分支,而事件結構則是根據發生的事件來決定執行對應的分支。
事件結構可以自動捕獲所發生的事件,并根據事件選擇執行不同的事件分支。事件結構正上方內側的事件標簽可以顯示當前分支所對應的事件,除此之外,事件結構還可以捕獲有關該事件的一些相關數據,比如事件發生的時間、事件源、類型等。
二、 事件分類
事件可以根據事件產生的源來區分,LabVIEW中的事件可以分為六大類,它們分別是:<應用程序>、<本VI>、<窗格>、<分隔欄>、<控件>以及<動態>。這六類事件可以在“編輯事件”對話框的“事件源”這一欄中看到,而每一個事件源中對應的具體事件可以在“事件”欄中看到,如下圖所示:
<應用程序>
這類事件主要反映整個應用程序狀態的變化,例如程序是否關閉,書簽信息是否有改動,是否超時等。事件結構中默認的超時分支就是該類事件。
<本VI>
這類事件主要反映當前VI狀態的改變,例如前面板大小以及狀態、鼠標、鍵盤對本VI的操作狀態、是否選擇了本VI菜單項中的某一個等。
<窗格>
這類事件包括與前面板中某一窗格有關的事件,比如鼠標進入/離開某一個窗格。一般情況下一個VI的前面板都是默認只有一個窗格,但是如果前面板上使用了“分隔欄”那就可以將一個VI的前面板分隔為多個窗格。每個窗格都可以理解為新的且互相獨立的前面板,可以用來放置不同類型的控件。
<分隔欄>
這類事件主要包括與分隔欄有關的事件,比如鼠標在分隔欄上點擊/釋放等。分隔欄可以用來劃分VI前面板的不同功能區域,讓我們的界面設計和布局更加美觀且條理分明。
<動態>
這類事件用于處理在程序中臨時注冊的事件或者用戶自定義的事件,在未注冊動態事件之前,該事件源為灰色不可選狀態,下面本文將詳細介紹動態事件。
二、 動態事件
概述:
動態事件可以分為兩種,一種是由LabVIEW本身可以產生的動態事件,比如前面介紹的除了動態事件以外的其他五種分類的事件(也就是說這五種事件可以被注冊成為動態事件),還有一種是由用戶自己定義的動態事件。
動態事件相關的函數在程序框圖面板>>編程>>對話框與用戶界面>>事件中。接下來我們先了解一下事件子程序框圖中的這些節點。
所有動態事件在使用之前都需要先注冊事件,它的含義其實是將動態事件注冊到事件結構中,即聲明該動態事件將在這個事件結構中響應。兩種動態事件都可以使用“注冊事件”節點來注冊,注意在程序結束后需要使用“取消注冊事件”來關閉注冊事件引用句柄。
在使用用戶自定義的動態事件時需要先使用“創建用戶事件”創建該動態事件,然后再使用“注冊事件”將該動態事件注冊到一個事件結構中,在需要觸發事件的地方使用“產生用戶事件”來讓事件結構響應該事件,在程序不需要再次響應用戶事件時使用“銷毀用戶事件”來銷毀用戶事件引用句柄,釋放用戶事件引用。所有注冊為該用戶事件的事件結構不再接收該事件。
LabVIEW自產生動態事件:
事件分類中提到的除了“動態”事件之外的那五類靜態事件都可以被注冊為LabVIEW自產生的動態事件,區別就是靜態事件只能是本VI中對象產生的,而動態事件卻可以在一個VI中使用其他VI中的對象產生的事件。
設想一個場景:在一個大型項目中,往往會使用大量的子VI,一般情況下我們會有一個VI專門用來響應事件操作,而這個VI經常必須要處理其他VI的控件產生的事件,但是這個控件很明顯并不在這個VI中,所以在這個VI的事件結構編輯事件的對話框中是沒辦法找到這個控件的,LabVIEW中為了應對這種狀況專門設計了動態事件。
在注冊動態事件時,需要先為產生這個事件的對象(控件、窗格、分隔欄等)創建一個引用,然后將該引用連線至“注冊事件”的事件源輸入接線端,隨后將“注冊事件”生成的“注冊事件引用句柄”連線至事件結構的“動態事件接線端”完成事件的注冊,如下圖所示:
上圖中的程序框圖是子VI的程序框圖,一共注冊了兩個動態事件,一個是主VI窗格的鼠標移動事件,另一個是主VI中“停止”按鈕的值改變事件。 這兩個事件注冊完成后可以在這個事件結構的編輯事件對話框<動態>一欄找到并編輯使用。 上圖中前面板為主VI的前面板,功能是在“鼠標坐標”中實時跟隨并刷新鼠標在前面板中的位置坐標,按下停止按鈕后響應并停止程序運行(示例代碼會在后面給出)。
用戶事件:
假設需要在程序中,在滿足其它某種條件時也產生一個事件,而這個條件不是LabVIEW自產生的(如用戶按了某個按鈕、改變某個控件值等),這時就可以考慮用戶自定義事件了。
用戶自定義事件靈活性較高,可以讓用戶自己設計什么時候發生并執行什么事件代碼,使用用戶事件時需要先定義一個用戶事件數據類型,就像建立消息隊列時需要定義隊列元素的數據類型一樣,用戶事件數據類型可以是LabVIEW支持的任意數據類型。
和LabVIEW自產生動態事件相同的是創建用戶事件之后同樣需要在一個事件結構中注冊該事件,不同的是事件什么時候發生、在哪個VI中發生我們都是可以自定義的,只需要拿到創建用戶事件后的輸出句柄使用“產生用戶事件”產生一次該事件。
下面這個示例是模擬一個溫度采集VI和顯示界面VI之間的交互,溫度采集VI采集到溫度信息后使用用戶事件的方式傳遞給顯示界面VI去做對應的處理,顯示當前報警信息并且當溫度太高時LED燈報警(示例代碼會在后面給出)。
示例中注冊了兩個用戶事件,一個是“溫度報警”事件,一個是“停止程序”事件。 注冊用戶事件時有個小技巧就是可以將你要注冊的所有用戶事件輸出句柄捆綁到一個簇中,然后使用“注冊事件”節點直接注冊這個簇,這樣可以方便同時注冊多個事件。
以上就是關于LabVIEW動態事件的知識分享啦。 本文的演示代碼及安裝包已存入百度網盤,有需要的小伙伴可以自行取用,演示代碼請使用LabVIEW 2020及以后版本打開。
審核編輯:湯梓紅
-
cpu
+關注
關注
68文章
10824瀏覽量
211133 -
LabVIEW
+關注
關注
1963文章
3652瀏覽量
322387 -
面板
+關注
關注
13文章
1671瀏覽量
53784 -
代碼
+關注
關注
30文章
4744瀏覽量
68344 -
應用程序
+關注
關注
37文章
3240瀏覽量
57600
原文標題:知識分享 | LabVIEW中的動態事件
文章出處:【微信號:華穗科技,微信公眾號:華穗科技】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論