<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設計應用 > LabVIEW——事件結(jié)構

          LabVIEW——事件結(jié)構

          作者: 時間:2017-01-06 來源:網(wǎng)絡 收藏

          事件結(jié)構

          本文引用地址:http://www.ex-cimer.com/article/201701/337081.htm

          Event Structure 也是一種選擇結(jié)構,程序根據(jù)發(fā)生的事件決定執(zhí)行哪一個頁面的程序。此時,LabVIEW 的界面編寫與 Visual Basic 的界面程序有些類似。

          一. 按照產(chǎn)出源來區(qū)分事件的種類

          按照事件的產(chǎn)生源來區(qū)分,LabVIEW有以下幾種事件:


          圖1:配置事件

          1.應用程序事件(),這類事件主要反映整個應用程序狀態(tài)的變化,例如:程序是否關閉,是否超時等。
          2. VI事件(),這類事件反映當前VI狀態(tài)的改變。例如:當前VI是否被關閉,是否選擇了菜單中的某一項等等。
          3.動態(tài)事件(Dynamic),用于處理用戶自己定義的或在程序中臨時生成的事件。
          4.區(qū)域事件(Pane)和分割線事件(Splitter)是LabVIEW 8中新添加的特性。LabVIEW 8中,用戶可以把一個VI的前面板分割成幾份,這兩類事件用來處理用戶對某個區(qū)域或區(qū)域分割線的狀態(tài)的改變。


          圖2:面板上劃分區(qū)域

          5.控件事件(Control)是最常用的一種事件,用于處理某個控件狀態(tài)的改變。例如,控件值的改變,或者鼠標鍵盤的操作。
          打開上述的“edit events”框,只要選定了某一個事件產(chǎn)生源,其相應的所有事件均排列在右側(cè)events框中。
          有時候,多個事件產(chǎn)生源會對同一個用戶操作分別產(chǎn)生相應事件。比如在某一控件上按下鼠標,區(qū)域事件和控件事件都會發(fā)出鼠標按下(Mouse Down)事件。LabVIEW 按以下規(guī)則順序產(chǎn)生不同的事件:
          ? 鍵盤相關的事件(Key Down, Key Up, etc.)只在當前選中(Key Focused)的控件上產(chǎn)生;
          ? 鼠標相關的事件(Mouse Down, etc.)按照從外向里的順序發(fā)出。例如,區(qū)域的鼠標按下事件先于控件的鼠標按下事件發(fā)出;結(jié)構的鼠標按下事件先于先于結(jié)構內(nèi)控件的鼠標按下事件發(fā)出。
          ?值改變事件按照從內(nèi)向外的順序發(fā)出。結(jié)構(Cluser)內(nèi)控件的值改變事件先于結(jié)構的值改變事件發(fā)出。

          二. 按照發(fā)出時間區(qū)分事件的種類

          按照事件的發(fā)出時間來區(qū)分,LabVIEW的事件可分為通知型事件(Notify Event)和過濾型事件(Filter Event)。

          通知型事件是在LabVIEW處理完用戶操作之后發(fā)出的,比如用戶利用鍵盤操作改變了一個字符串,LabVIEW 在改變了該控件的值之后,發(fā)出一個值改變(Value Changed)通知型事件,告訴事件結(jié)構,控件的值被改變了。如果事件結(jié)構內(nèi)有處理該事件的框架,則程序轉(zhuǎn)去執(zhí)行該框架。
          過濾型事件是在 LabVIEW 處理用戶操作之前發(fā)出的,并等待相對應的事件框架執(zhí)行完成之后,LabVIEW 再處理該用戶操作。這類事件的名稱之后都有一個問號。例如鍵盤按下?事件(Key Down? Event),當用戶處理該事件時,控件的值還沒有被改變,因此,用戶可以在該事件對應的事件框架內(nèi)決定是否讓 LabVIEW先處理該事件,或改變鍵盤按下的值之后再讓LabVIEW繼續(xù)處理該事件。
          可以明顯地看出,過濾型事件比相應的通知型事件要先發(fā)出。
          當同一VI的程序框圖上有多于一個的事件結(jié)構時,通知型事件是同時被發(fā)往所有的事件結(jié)構的,而過濾型事件則是按順序、依次發(fā)往每一個事件結(jié)構的。但是,在同一VI上放置多個事件結(jié)構是沒有必要,而且極易引起錯誤的。所以應該避免在同一VI上使用多個事件結(jié)構。

          下面舉例說明如何使用通知型事件。我們經(jīng)常需要使用到這樣的字符串控件:控件用于輸入電話號碼,因此只接收數(shù)字和橫線,對其他按鍵不起反應。LabVIEW沒有直接提供此種控件,但是它們可以利用通知型事件被方便地實現(xiàn)出來。


          圖3:利用 Key Down? 事件實現(xiàn)電話號碼控件

          這個例子可以在這里下載:Phone Number Control.vi

          三. 動態(tài)事件

          在初始狀態(tài)下,打開事件配置(Edit Events)對話框,動態(tài)事件下的一欄是空的。因為動態(tài)事件只有注冊過之后才能使用。與事件相關的操作在函數(shù)選欄的 Programming -> Dialog & User Interface -> Events 下面。
          用于注冊事件的節(jié)點是事件注冊節(jié)點(Register For Events)。需要注冊某一事件時,先為它的產(chǎn)生者生成一個引用節(jié)點,然后將引用節(jié)點與事件注冊節(jié)點的下方區(qū)域相連,再選取所需的事件。如下例:


          圖4:注冊動態(tài)事件

          對于當前VI上的控件或區(qū)域等類型的事件,一般來說可以在事件結(jié)構中靜態(tài)地被選擇,所以不需要再動態(tài)注冊一遍。但有時,當前VI的程序框圖已經(jīng)過于復雜,我們希望在子 VI 里去處理某些控件的事件。這時就可以把控件的引用傳入子 VI,在子 VI 中動態(tài)注冊所需事件。在子 VI 的事件結(jié)構中處理相應的事件。

          四. 用戶自定義的事件

          用戶自定義的事件是動態(tài)事件的一種。用戶自定義的事件不基于任何一個LabVIEW對象,它是使用創(chuàng)建用戶事件節(jié)點(Create User Event)生成出來的。并且,用戶可以選擇不同的事件數(shù)據(jù)類型。

          五. ActiveX控件的事件

          ActiveX 控件的事件不能直接被LabVIEW的事件結(jié)構所截獲。ActiveX 事件需要用注冊事件回調(diào) VI 節(jié)點(Register Event Callback)來為某一事件指定一個VI。當事件發(fā)生時,執(zhí)行被注冊的 VI。我們也可以利用注冊事件回調(diào) VI 節(jié)點為某一 LabVIEW 自身的事件注冊一個回調(diào) VI,但是出于運行效率,和程序可讀性等方面的考慮,最好不要這樣使用。




          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();