在 LabVIEW 中設計迴圈時,往往必須從迴圈的前次週期存取資料。舉例來說,如果必須從迴圈的各次週期擷取 1 筆資料,且每 5 筆資料又要平均 1 次,則必須從迴圈的前次週期取得資料。
影片:移位暫存區 (Shift Register)

當要將數值從前次週期傳至下次週期時,即可使用移位暫存器 (shift register)。移位暫存器均為成對的端點,並置於迴圈邊框垂直的 2 邊相互對應。
迴圈右邊的端點具備向上箭頭,可於週期完成時儲存資料。LabVIEW 接著將資料傳送至暫存器右邊的週期中。在迴圈執行過後,迴圈右邊的端點隨即傳回最新數值,並將之儲存於暫存器中。
對迴圈左或右側邊框按下滑鼠右鍵,再點選 Add Shift Register 即可建立移位暫存器。
暫存器可傳送任何資料類型,只要是連接暫存器的第一組物件,均可自動變更其資料類型。連接各暫存器端點的資料,必須均為相同類型。
單一迴圈可新增超過 1 組移位暫存器。如果有多個作業使用迴圈的前次週期數值,則可透過多個暫存區儲存框架中的不同資料,如圖 1 所示。

圖 1. 使用多個移位暫存器
當 VI 執行時,初始化暫存器將重新設定傳送至迴圈首次週期的數值。如圖 2 所示,將控制元件或常數接至迴圈左邊的暫存器端點,即可初始化移位暫存器。

圖 2. 初始化移位暫存器
在圖 2 中,For Loop 將執行 5 次,且逐次提高暫存器所儲存的數值。在 For Loop 循環 5 次之後,暫存器隨即傳送最終值「5」至指示元件,且 VI 隨即退出。每次只要執行 VI,暫存區均以「0」開始。如果不要初始化暫存區,則迴圈將使用「最近 1 次執行時寫入至暫存區的值」;如果尚未執行過迴圈,則將使用該資料類型的預設值。針對 VI 後續的執行作業,未初始化暫存器則可保留其間的狀態資訊。

圖 3. 未初始化移位暫存器
在圖 3 中,For Loop 將執行 5 次,且逐次提高暫存器所儲存的數值。當首次執行 VI 時,暫存器即從「0」開始,其為 32 位元整數的預設值。在 For Loop 循環 5 次之後,暫存器隨即傳送最終值「5」至指示元件,且 VI 隨即退出。當下次執行 VI 時,暫存器即從「5」開始,其為前次執行的最後數值。在 For Loop 循環 5 次之後,暫存器隨即傳送最終值「10」至指示元件。再次執行 VI 時,暫存器即以「10」開始,依此類推。未初始化的暫存器將保留前次循環的數值,直到使用者關閉 VI 為止。
堆疊式暫存區 (stacked shift register) 可存取迴圈前次循環的資料。堆疊式暫存器可記憶數組前週期的數值,並將這些數值帶入往後的週期。如果要建立堆疊式移位暫存器,則可對左邊端點按下滑鼠右鍵,並點選 Add Element。
由於右邊端點僅能轉換「目前週期到下次週期」所產生的資料,因此僅能從迴圈左邊設定堆疊式暫存器。

圖 4. 使用堆疊式移位暫存器
將其他元素新增至前述程式圖的左邊端點時,則因為最新數值已儲存於頂端的暫存器,所以最後 2 次週期的數值將帶入下次週期。底部端點將儲存前次週期的資料並傳送之。