關於迴圈的問題?

<label id=hbsession sessionid=“1912284166”> 

關於迴圈的問題?

可以幫我說明一下,『Event Structure

這迴圈的用意嗎?

我看不懂怎麼使用,謝謝分享。

在LV6.0以前,沒有Event Structure的時候,如果有判斷使用者是否有按下某ㄧ按鈕,如「Stop鍵」,往往要使用While loop。如果您使用While loop卻沒有設定delay time或是將delay time設定的太短,則會造成系統資源嚴重損耗。原因是While loop一直在檢查使用者到底有沒有按下特定的按鍵。

使用Event Structure,您可以設定成當使用者按下某ㄧ按鍵後,就執行某種動作,比如說執行一個子VI或是關閉程式等等。這樣做的好處是可以大大節省系統資源。而且也使LabVIEW進入「事件導向」的程式編輯方法。

以下有兩個例子,您開啟後,應該會比較明白一些:

booleanvaluechanged.vi (LV6.1)
verifyclose.vi (LV7.0)

以下文章轉載自:http://www.shiningt.com.tw/techno/enentstru.htm

過去LabVIEW的使用者都是使用傳統〝Polling〞的的技巧來撰寫人機介面(User Interface)。一個人機介面VI會在一個迴圈當中讀取所有在Front Panel的控制物件,並且一個一個檢查它們是否有所改變。當然有些聰明的使用者會用諸如將所有布林的控制物件放入一個隱藏的Cluster中以減少它們被處理的次數,或者利用Queued來管理所有的控制物件,藉以改善VI的效率。但無論如何都無法改變LabVIEW的基本問題,這些方法都有一些天生的問題存在,Polling得太快會佔用太多CPU的時間,Polling得太慢又可能漏掉一些已發生過的事件,甚至無法處理來至多位使用者的動作優先順序等問題。

 現在LabVIEW 6.1新增的事件結構(Event Structure)正可以有效的解決這個擾人的問題。

 那麼事件結構(Event Structure)是怎麼一回事呢?<?xml:namespace prefix = o />

事件結構(Event Structure)是自從LabVIEW 1.0以後第一個新的Structure Node,它使LabVIEW進入了事件導向(event-driven)的世界。Event-driven是一個在其他如LabWindows CVIVisual Basic等程式語言環境中早就是一個普遍的範例。有了Event-driven的功能您的應用程式可以休息到有一件您有興趣的事件發生在Front Panel為止,所以作業系統可在這一段時間內將CPU交給其他的程式使用。

 簡單的說一個事件結構(Event Structure)就好像一個〝Wait on Qccurrencefunction與一個Case structure的混合物。就好像Case structure一樣它也具備多層subdiagram,每一層都可規劃來Handle一個或多個事件(event),例如滑鼠移動或某個鍵被按下等事件,當您放入一個事件結構(Event Structure)在您的Diagram當中就好像其他的物件一般,它的執行流程規則跟一般的沒有什麼不一樣。當LabVIEW執行到事件結構(Event Structure)時,將使得這個VI進入睡眠狀態,直到有一個被設定的事件(event)發生,這個時候事件結構(Event Structure)就會自動醒過來並且依照使用者設定的條件執行相關的動作。每一個subdiagram的內側的左邊都有一個Event Data node,提供使用者來定義或使用有關這個事件(event)的相關訊息。這個node看起來與功能就好像一個Unbundle by Name function,所以使用者可以改變它的大小並選擇自己需要的資料欄位來使用。

 

相關的範例讀者可以自行參考LabVIEW 6.1中有關eventexamples

 

太感謝你了,因為最近比較忙沒機會上來,

這個問題一直困擾我,因為一開始我也是做,

WhileLoop但是真的太耗費時間,重複的掃描,

又怕跟我的RS-232GPIBPLC等等資料傳送發生衝突,

所以在時間點的控制一直找不到哪個點,

但是又要做按鍵掃描,真的是很麻煩,

最近是想到用Tab control來減少多層掃描的時間,畫面做起來又蠻好看的,

不過我目前在忙GPIB的控制,我們課長幹了一件讓我覺得很白濫的事,

GPIB卡買凌華(13500)的我不是說不好,明明NI(17500)有出LABVIEWNI

的相容性也高,不知道在省啥錢的,對我這外行來說,公司上下有好像只有我一個人寫LABVIEW也不知道問誰?唉掯我們樓下QE的課長更白木,

每次問他問題都給我說,去測試阿掯就是不會才問你阿,

是怕我學太多喔@@||

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

對了129NI的活動我有要去喔

中餐聽說是吃凱悅的啥去了價值五六百的午餐,

不小心又抽到XBOX就爽了QQ

<label id=hbsession sessionid=“3193245921”> 

剛剛用試了一下好神奇喔!

我們平常做按鍵不是要一直掃描嗎?

我是我看你給我的例子WihleLoop卻什麼資料傳輸都沒有,

但是我一按下按鍵卻會偵測到我有案按鍵,

我還有個疑問?

就是旁邊不是一些觸發狀態後改變的資料種類嗎?

如下:

Soure Type Time CtlRef OldVal NewVal

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

以上我比較不懂得Soure Type   CtlRef

有空再麻煩幫幫解釋一下,感恩。

[QUOTE=菜鳥]

 對了129NI的活動我有要去喔

中餐聽說是吃凱悅的啥去了價值五六百的午餐,

不小心又抽到XBOX就爽了QQ

[/QUOTE]

喝喝...很高興與你交流阿

可是我想我12/9應該不會去吧...因為我沒有$$...![](upload://ekm3yUkVpx9yRp2Oc1K3CjKn5ta.gif)

 

插話問一下,我試過Event,但是他是不是只能偵測控制元的變化,

也就是說,今天我由一個控制元產生一個local變數,再由程式內部運算藉由

這個local變數去改變控制元的內容,這樣的情況好像Event就偵測不到,是

不是如此呢?

[QUOTE=winder]

插話問一下,我試過Event,但是他是不是只能偵測控制元的變化,

也就是說,今天我由一個控制元產生一個local變數,再由程式內部運算藉由

這個local變數去改變控制元的內容,這樣的情況好像Event就偵測不到,是

不是如此呢?

[/QUOTE]

是的,應該是這樣子...因為我以前也有試過,它好像只能偵測使用者做的動作,如果程式內部產生動作,如:某值的變化,那麼Event Structure是沒有辦法偵測出來的。如果是這種情況,可能就需要用其他方式處理...