使用功能全域變數 (FGV) 在同一目標下不同 VI 中包含的兩個並行迴圈之間進行通信,並使用 FGV 通過一個“停止”按鈕停止並行 迴圈 。FGV 的“功能”性質意味著您可以創建超出基本全域變數的附加功能,例如,對存儲值進行操作的計數和計算。






使用情境
- 在同一目標(“目標範圍”)中包含的兩個或多個並行過程迴圈之間通信數據、控制和狀態,無論是在同一 VI 中還是在不同 VI 中
- 使變數的最新值可用於其他過程迴圈
- 從單個控制元件停止多個並行迴圈
- 執行附加操作(FGV 首字母縮略詞的“功能”方面),而不僅僅是存儲數據,例如計數和計算
特徵
- 功能全域變數是具有以下定義特徵的子 VI:
- 未初始化的移位寄存器——while 迴圈中未初始化的移位寄存器會導致 LabVIEW 為單個值分配存儲空間,只要調用的 VI 保留在內存中,該值就會持續存在
- 單次迭代 while 迴圈——while 迴圈條件接線端連接到一個“真”常量,因此它只迭代一次;while 迴圈只是一種保存移位寄存器的機制
- 具有枚舉控制的案例結構——案例結構選擇對存儲值執行的操作;“讀”和“寫”是最基本的操作,附加的case可以實現“遞增”、“遞減”等附加功能。
- 不可重入子VI——這種執行模式確保目標中只存在一個子VI實例;子VI的多個實例都引用同一個存儲值
- 與局部變數和全局變數相比,函數全域變數有兩個優點:
- 內存效率——存儲的值只存在於內存中的一個地方,而本地/全域變數讀取器的每個實例都會創建自己的數據副本
- 避免競爭條件——存儲的值在讀取時不能寫入,因為子 VI 一次只能由一個實體執行
特別注意
子VI的執行模式必須設置為“non-reentrant”(打開子VI,按Ctrl+I,選擇“Execution”類別,選擇“non-reentrant execution”);其他兩種可重入執行模式創建子 VI 的獨立副本(“克隆”),從而消除了 FGV的全域變數方面
