問一個邏輯判斷的問題

![](upload://sP2uQP2INK7zqute85qTfjxFCfR.jpeg)

  問題如上圖,以簡圖來請教各位大大,由於這兩個while loop執行週期時間不一,
上面的時間較短,假設上面boolean為true的時間為1分鐘,而下面while loop
  執行時間只要10秒鐘,想請教各位,如何讓boolean在true的時候,
而下面while loop中的case sturcture (true),中只執行一次,

也就是如何讓boolean由false變true的時候,
下面while loop中的case sturcture (true),中只執行一次,

你可以從這個角度來想一想,

在這一分鐘及10秒鐘裡頭,
這裡頭,發生了什麼變化?

通常我們可能會依據某些情況的發生,
而寫些某段程式,
根據的可能是「觸發事件的當時狀態」或者「觸發事件的某一時間點」。

因為在這一分鐘裡頭,
上面 loop 的 boolean 只要大於 0 就觸發事件,
=> 從 false 變為 true 後
(但此後就一直保持為 true)

而下面 loop 則是 boolean 從 false 變為 true 的一瞬間
" 才 " 觸發一次事件。

所以才會發生你所說的情況,
=> 下面 loop 被觸發了好幾次。

因此只單單用「觸發事件的當時狀態」來當作下面 loop 的判斷式
是不夠的。

要用「觸發事件的某一時間點」,即"從 false 變為 true 的一瞬間"
才會觸發你所要的 下面 loop 的事件。
(有點像是硬體所提到的上、下緣觸發)

朝這個方向去想,
應該可以找到你要的答案。

恩~~這和我之前邊緣觸發的問題有點像...應該是正緣或負緣觸發的問題

之前有大大交過我~~你可以去參考看看

忘了~~我是在幼幼班的

初學者請多多包函38264.4733217593

前緣觸發可以做到類似的功能.

這裡..

前緣觸發好像有個名詞叫上微分跟下微分吧...

觀於您的問題我參考前輩的做法,做了一個類似的,您可以參考看看!!!

1.前者有提到邊緣觸發的問題,這是正確的,但是與邊緣觸發相關的vi在lv中好像是  屬於DAQ相關的VI函式才有這樣的設定,在本例中並不是用在DAQ方面!!

2.雖然我們都知道關鍵在於邊緣觸發才能讓程式僅執行一次,但是LV中並無相對應的VI可以使用,所以並須自行創造一個,我的程式做法如下:

![](upload://mbgXLmCJKPb8R4uDMpDi7AqUaZT.jpeg)

這個程式的關鍵就在於下方WHILE LOOP中的Shift Register,互斥或gate,與and gate!!

例如

(a)當開關保持在"false"狀態時,由於shift register初值設定為false的關係,互斥或gate輸出為"false",基於and gate的特性,會有一個"false"的訊號送至case loop,而使得case loop中的程式不動作(只有true才動作).

(b)當開關向上扳(true)時,互斥或gate輸出為"true",另一方面,由於and gate的另一個輸入接腳接至shift register的第一個輸入(true),因此依據and gate的定義,會輸出一個"true"的訊號,使case loop中的動作執行.

(c)由於接上shift register關係,shift register的兩輸入隨即經由互斥或gate,使得輸出為"false",使得case loop中的動作只動作1次!!

(d)當開關又向下扳(false),雖然互斥或的訊號輸出為"true",但是因為shift register的第一個輸入接在and gate,因此case loop將保持在"false"之狀態,不會重複動作!!!

程式: 2004-10-04_134146_single_action.vi

Sincerely

==================

Writing by 麟仔

LabVIEW 7.0

Windows XP

==================