LabVIEW編程技巧:如何實現子程序動態加載、運行、顯示及值交互

問題提出

在使用LabVIEW軟件編寫大型測試軟件時,對於某些子程序,考慮到程序執行效率及前面板大小有限等因素,有時需要在主程序中動態加載運行並顯示其前面板,同時也要實現主程序與子程序控件之間的值交互,如主程序能夠讀取或修改子程序前面板中某個控件的值。

那麼,如何在LabVIEW平臺中實現這種目的呢?實際上,這兒可以分解為下面兩個問題:

1. 如何在主程序中動態加載調用子程序面板?

2. 如何動態設置(修改)或獲取子程序面板中控件的值?

對於第1個問題,在主程序中可以通過子面板控件動態加載調用子程序。

對於第2個問題,通過子程序中控件的名稱可獲取控件的引用,進而修改或獲取該控件的值。

對於上面兩個問題,下面通過一個簡單的例子給出LabVIEW中的解決方法。

實例說明

該例運行前面板如下圖所示,主界面區域分割成了左右兩部分,右半部分功能是使用子面板控件動態加載並顯示名為“參數子面板.vi”的子程序前面板,該面板上包含了三個控件,分別為“控件1”、“控件2”和“控件3”三個數值控件;左邊部分功能是通過控件名稱用以讀取或修改子面板上這三個控件的值。

LabVIEW編程技巧:如何實現子程序動態加載、運行、顯示及值交互


程序框圖實現方法

其程序框圖使用包含2幀的順序結構,第1幀目的是在子面板中動態加載運行子程序並顯示其前面板,第2幀目的是讀或寫子面板某個控件的值。

第1幀代碼如下圖所示,在子面板中動態加載子程序前面板並顯示時,分別使用了VI的調用節點函數“Run VI”和子面板的調用節點函數“Insert VI”。另外,該幀中,也將打開的子程序的VI引用通過順序結構的局部變量傳遞給了下一幀。

LabVIEW編程技巧:如何實現子程序動態加載、運行、顯示及值交互


在第2幀中使用了事件結構,主要完成通過子程序中控件的名稱設置或獲取某個參數的值,代碼如下圖所示:

LabVIEW編程技巧:如何實現子程序動態加載、運行、顯示及值交互


第2幀中實現的關鍵技術是怎樣得到子程序中被修改控件的引用,為此,本例單獨寫了一個子程序,對應上圖中紅色矩形框內的圖標,其實現代碼如下圖所示。該子程序包含2個輸入參數ControlName和VIRef,即控件的名稱和其所在的VI引用,1個輸出參數“ControlRef”,即根據名稱查找到的控件的引用。其原理是通過VI的引用得到當前VI的面板引用,由面板引用得到當前面板上所有控件的引用,然後由控件引用得到每個控件的名稱,然後在While循環中逐一與被查找的控件名稱比較,與其相等即為查找到的控件的引用。

LabVIEW編程技巧:如何實現子程序動態加載、運行、顯示及值交互


在第2幀框圖程序中,得到被設置或獲取的控件引用後,就可以利用控件的“值”屬性對其進行修改或讀取了。

需要說明的是,這兒得到的控件引用是一個通用型的引用,在直接使用其“值”屬性時,由於該類型的引用對應的值屬性可能是數值型的值、布爾型的值或路徑型的值等等,程序本身是無法判斷的,所有對其“值”屬性讀或寫時,其輸出或輸入參數都是變體類型的變量。如下圖所示,當設置其值時(左圖),可以將前面板上的“參數值”控件的值直接輸入到屬性節點,LabVIEW內部自動可以將任意的數據類型轉換為變體類型。但當獲取其值時(右圖),由於其變體類型可以表示任意類型的數據,需要開發者顯式的通過“變體至數據類型轉換”函數將變體類型的值轉換已知類型的值。對於本例,需將變體類型轉換為“雙精度”類型的變量。

LabVIEW編程技巧:如何實現子程序動態加載、運行、顯示及值交互


總結

本文通過一個具體的例子,詳細演示瞭如何在LabVIEW平臺中實現子程序前面板的動態加載及主/子程序間控件值的交互功能。通過這個例子學到的編程知識點包括:子面板的使用方法,屬性節點的使用方法、變體類型的使用等。

大家加關注並私信回覆:LabVIEW038,可獲取該文章對應的LabVIEW原程序下載。


分享到:


相關文章: