這篇我們將介紹如何在 LabVIEW 裏建立迴圈 (Loops)。
迴圈是一個可以讓一段程式重覆執行的結構。如果你學過其它程式語言,你可能已經熟悉一些迴圈結構,例如 For Loops, While Loops 或是 Do While。在 LabVIEW 裏,迴圈是一個圖形的結構 (Graphical Structure)。
我們來看底下這支程式 (來自 Data Flow Programming #1):
▲ 左圖是圖形介面,右圖是 Block Diagram,也就是這支程式的程式碼
這是一個很簡單的程式,它可以讓使用者利用 Button 來控制 LED 的開關,你可以按一下 Button,它就會變成按下的狀態,每當你按下 Run 按鈕 執行程式的時候,你就會看到 LED 跟著 Button 改變狀態。與其每次都要按 Run 鈕執行程式,現在我們要讓使用者可以不斷地看到 LED 的最新狀態,這就是為什麼我們需要建立迴圈的原因。
建立 While Loops
當你在 Block Diagram 上按滑鼠右鍵打開 Functions Palette,然後點選 Structures,你會看到前兩個選項就是常見的迴圈 For Loop 和 While Loop:
如果你已經知道迴圈要執行的次數,那麼使用 For Loop 是最好的選擇,你只要設定 For Loop 要執行次數就可以了。另一個是可能比較普遍使用的 While Loop,如果你不曉得迴圈要重覆執行多少次,只知道迴圈要在某個條件成立時停止,那麼就用 While Loop。
現在我們要在這支程式裏用 While Loop。所以請選 While Loop,然後在 Block Diagram 上畫出一個 While Loop,並且把想要放在迴圈裏的程式整個包住。像底下這樣,我們已經建立了一個 While Loop:
這個迴圈會不斷地重覆執行,直到遇到一個符合 Stop Condition 的條件成立時才停止,而 Stop Condition 是由迴圈右下角稱作 Loop Condition 的紅色按鈕決定的,如下圖所示:
我們可以在 Loop Condition 上按右鍵,然後點選 Create Control:
這樣使用者便可以透過一個 Stop 按鈕來決定停止迴圈:
這時如果切到 Front Panel,你會看到 LabVIEW 在 Front Panel 左上角自動建立了一個 Stop 按鈕:
你可以把它移到比較適當的位置並改變大小,以便讓使用容易看得見:
現在這個迴圈會不斷的執行直到使用者按下 Stop 按鈕為止。所以當你按下 Run 鈕執行程式,你可以隨時按下按鈕, LED 也會即時同步更新狀態,直到你按下 Stop 按鈕結束程式為止。
▲ 如果程式裏有迴圈,執行程式時 Run 鈕會變成 Running 按鈕
避免佔用太多 CPU 資源
有一件事要特別注意,在使用迴圈的時候,記得要在迴圈裏放個 Timing function 以節省 CPU 資源。
程式在執行的時候,迴圈執行的速度很快,會佔掉 CPU 大部份的運算資源,事實上我們並不需要讓迴圈跑那麼快,所以請切到 Block Diagram 視窗,打開 Functions Palette,點選 Timing > Wait (ms) :
然後在 While Loop 裏放一個 Wait (ms) function:
接著在 Wait (ms) 上按右鍵選 Create > Constant:
然後輸入 100:
現在再度執行程式的時候,程式一樣可以執行的很順利,LED 的狀態一樣會跟 Button 同步,不過現在迴圈每跑一次的時候都會讓出 100 ms 的時間讓 CPU 去做其它事情,例如跑其它程式之類的。
下面兩張圖是我使用 Wait (ms) 前後的觀察到的 CPU 使用率,可以看到使用 Wait (ms) 前後的差別,在使用 Wait (ms) 前 CPU 使用率飆到 52%,而在使用 Wait (ms) 後 CPU 使用率大幅下降,才用不到 5%:
動動腦
我們在 Data Flow Programming #3 一文中寫過一支華氏溫度轉攝氏溫度的程式,現在請利用在這篇學到的技巧修改華氏轉攝氏的程式,在程式裏加上一個 While Loop 讓程式可以重覆的執行:
記得要在迴圈裏加個 Wait (ms) 的 Timing function 以避免迴圈佔用太多 CPU 資源。
0 意見:
張貼留言