這篇我們將介紹 LabVIEW 的 Shift Register。
在 LabVIEW,Shift Register 可以加到 While Loop 和 For Loop 中。Shift Register 提供一個在迴圈迭代 (Loop Iteration) 之間傳遞資料的方法。讓我們從一個簡單的例子來認識 Shift Register。
認識 Shift Register
底下是一個簡單的 While Loop,迴圈裏只有一個 Wait (ms) 等待 1000 ms 的 function:
要建立 Shift Register,方法是在 Loop 的邊框上按右鍵,然後點選 Add Shift Register:
這會建立一個 Shift Register,結果如下圖:
▲ Shift Register 是由左右兩個 Terminals 組成,兩兩一對
簡單的說,你可以把一個輸出接到右邊的 terminal (簡稱 right terminal),然後在下一個 loop iteration 中透過左邊的 terminal (簡稱 left terminal) 取得結果。而且,你也可以在 left terminal 輸入端接個起始值。
所以我們可以建立這樣一個程式:
在這支程式中,While Loop 會不斷的執行直到使用者按下 Stop 鈕為止,而且會在結果上面顯示 left terminal 加 1 後的結果,所以當迴圈執行到第 5 圈時,結果上面就會顯示數字 5:
我們可以在 Block Diagram 的工具列點選 Highlight Execution 這個按鈕,方便觀察資料流的傳遞過程:
現在當我們再執行這支程式,LabVIEW 就會動態的逐一顯示每段資料流的實際執行過程,所以,當迴圈執行到第 1 圈時,得到的畫面如下:
注意上圖 Highlight 的部份,目前 left terminal 是 0,而 Add function 加 1 後的輸出為 1,因為輸出會接到 right terminal,所以這時 right terminal 也是 1。當迴圈執行到第 2 圈時,得到的畫面如下:
而第 3 圈如下:
由此,可以得知 Add function 的輸出會放到 right terminal,所以 right terminal 保存的是目前這個 iteration 的結果,而 left terminal 裏放的則是前一個 iteration 的結果。
初始化 Shift Register
在這篇的例子中,你應該有注意到 left terminal 上有設定一個起始值 0:
▲ 為了簡化圖形程式碼,我把 Add function 換成 Increment function
起始值是用來設定 left terminal 在第 1 圈的初始值。假如我們沒有給 left terminal 初始值的話,left terminal 會取得迴圈前一次的執行結果。
所以,如果我們現在拿掉 left terminal 的初始值:
然後再跑這支程式,當迴圈執行到第 8 圈時得到的結果如下,其中 left terminal 是 7 而 right terminal 是 8:
假如這時我停止程式,然後在不關閉 LabVIEW 的情況下按 Run 鈕重新跑這支程式,那麼就會發現 left terminal 這次會從 8 開始,也就是取得前一次 right terminal 的結果,而不是從 0 開始:
所以,在使用 Shift Register 的時候,記得要替 Shift Register 設定初始值。
0 意見:
張貼留言