1. 程式人生 > >LabVIEW動態呼叫VI及呼叫路徑問題

LabVIEW動態呼叫VI及呼叫路徑問題

在LabVIEW程式設計中,呼叫VI一般分為靜態呼叫和動態呼叫,靜態呼叫是指被呼叫VI在VI呼叫程式的程式框圖上直接放置子VI,它與VI呼叫程式同時載入,而且常駐記憶體。動態呼叫VI是指在呼叫程式執行時動態載入VI,執行完後從記憶體解除安裝,自動釋放記憶體,動態呼叫VI又分為通過引用呼叫節點(嚴格型別的VI引用)的動態呼叫和通用(我這麼稱呼的)動態呼叫。通過引用呼叫VI不僅指向被呼叫的VI,還指向被呼叫VI的連線板,這樣我們就可以向被呼叫VI傳遞引數,並獲得被呼叫VI的輸出引數。 在實際應用中,對於需要向其傳遞引數、進行復雜資料處理、且不需要顯示介面的子VI呼叫,我一般採用通過引用節點的動態呼叫;如果只是動態呼叫子VI,顯示其介面進行相關操作,我通常採用通用動態呼叫。下面我們通過示例說明兩種動態呼叫方法。

1. 通過引用呼叫節點的動態呼叫

先建立一個子VI,檔名為add.vi,其作用是兩個浮點數相加,設定連線板,輸入端分別指向兩個加數,輸出端指向兩個加數的和,其前面板和程式框圖如下圖所示。 這裡寫圖片描述

設計一個呼叫VI,檔名為CallVIByRef.vi,實現通過引用節點動態呼叫add.vi(呼叫時add.vi不顯示前面板),其前面板和程式框圖如下圖所示。 這裡寫圖片描述

2. 通用動態呼叫

除了通過引用動態呼叫VI外,還有一種動態呼叫VI,我叫它通用動態呼叫VI,以下是其程式框圖。 這裡寫圖片描述

上圖中,“執行VI”呼叫節點的“Wait Until Done”屬性設定為False,表示被呼叫VI被執行、顯示介面後,呼叫VI還可以繼續去幹別的事情,這相當於顯示呼叫了一個無模態對話方塊。如將“Wait Until Done”屬性設定為True,則表示執行模態對話方塊呼叫,即被呼叫VI關閉後,呼叫VI才能繼續幹別的事情程式框圖如下圖所示。 這裡寫圖片描述

以上兩種(模態和無模態呼叫VI)呼叫方式,被呼叫VI執行完畢後需要自己關閉前面板,如下圖所示。 這裡寫圖片描述

3. 被呼叫VI的路徑問題

在動態呼叫VI時,經常發生在開發環境下能正常呼叫VI,一旦打包成執行檔案後,呼叫就出現了異常,原因是打包後LabVIEW會把exe檔案看作是一層目錄,這樣按以前相對路徑關係就找不到被呼叫VI了,所以出現了異常。 讀者可以參考網上的解決辦法,筆者也提出一種解決辦法:先看下面的專案。 這裡寫圖片描述 通過測試分析,不管是開發環境下還是打包成執行檔案,如果把LabVIEW專案根目錄的Main.vi作為當前VI,那專案下所有VI和main.vi的相對路徑關係就確定了(注意必須是磁碟上檔案路徑關係,不是虛擬資料夾中的檔案路徑關係)。在程式中,先呼叫“拆分路徑”函式節點得到main.Vi所在檔案的絕對路徑,再呼叫“建立路徑”函式節點得到所呼叫VI的路徑(含被呼叫VI檔名),如下圖所示。 這裡寫圖片描述

在Main.vi中,如要呼叫專案中的“VIFromSubPath.vi”檔案,則上圖中的“呼叫VI路徑及檔名”賦值為“SubPath\VIFromSubPath.vi”,如要呼叫“VIFromSubVI.vi”,則“呼叫VI路徑及檔名”賦值為“SubPath\SubVI\VIFromSubVI.vi”。這樣,不管是打不打包,呼叫路徑關係都是正確的。 撰寫此文主要是備忘,也希望對讀者有所幫助。

以上示例vi(LabVIEW 2012下設計)放在百度網盤上,有興趣的讀者可以下載使用 。 vi下載地址:DynamicCall.rar