LabVIEW 功能全域變數 (FGV)

使用功能全域變數 (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的全域變數方面

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *