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

2020-12-04 編碼那些事

問題提出

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

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

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

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

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

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

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

實例說明

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

程序框圖實現方法

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

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

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

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

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

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

總結

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

如果你覺得這篇文章對你有用的話,關注+收藏+點讚吧。

相關焦點

  • LabVIEW實例,如何編程實現一個虛擬FFT分析儀
    LabVIEW又稱為G語言,簡單易學、形象直觀,採用圖形化的編程方式,是專為測試、測量和控制應用而設計的系統工程軟體。因此,LabVIEW軟體在數據仿真、信號分析處理方面有著得天獨厚的優勢。本文以一個具體實例,演示在LabVIEW中如何實現一個虛擬的FFT分析儀設計,包括採樣信號的仿真、頻域的FFT分析及數據結果的圖形顯示等功能。
  • LabVIEW串口通信的一個例子-串口"示波器"
    VI將等待 發表於 2020-11-25 labview圖形和圖表的類型 LabVIEW包含以下類型的圖形和圖表:波形圖和圖表-顯示採樣率恆定的數據。XY圖-顯示採樣率非均勻的數據及多值函數的數據。
  • LabVIEW編程實例:如何求解自然常數e
    它的一個經典的數學定義公式是:使用計算機計算e的值時,可以使用下面的公式近似計算:那麼在LabVIEW中如何編程實現求解這個公式即e的值呢?編程思路從上面的近似公式可以看出,e的值與n的階乘有關,可將上式分解為兩個步驟:求解n的階乘:n!=1×2×3×......
  • LabVIEW編程技巧:功能強大的變體數據類型用法
    但是,有時候我們需要設計的子程序具有更強大的靈活性,在一個連接埠上能接入不同的數據類型,在程序內部能自動識別其原始的實際數據類型,然後分別進行不同的處理,這時候變體數據(Variant data)類型就派上用場了。變體數據類型類似於C語言中的void類型的指針,它可以兼容任何數據類型。
  • 基於LabVIEW的光纖布拉格光柵動態解調系統
    LabVIEW程序主要用來進行數據採集、儀器控制及數據處理分析,是一款開放式的虛擬儀器開發系統應用軟體。軟體部分的實時數據採集程序由LabVIEW提供的硬體驅動模塊和VI子程序搭建完成,完成對硬體的配置,測量函數功能的設定以及最終數據採集。數據分析處理模塊主要完成測量數據曲線的校正、濾波、信號特性分析、信號存儲與讀取功能。
  • LabVIEW編程實例:如何求解1000以內的所有素數
    素數有無窮多個,那麼在LabVIEW中如何編程實現求解1000以內的所有素數呢?下面看一下在LabVIEW中如何編程解決這兩個問題。如何判斷一個數是否為素數在LabVIEW寫一個子程序,命名為「isPrimeNumber.vi」,該子程序輸入一個整數「x」,輸出一個布爾值「是素數?」
  • C語言編程技巧:控制臺程序中自定義函數實現數組內容的特定顯示
    在用C語言編寫算法調試方面的程序中,經常會遇到這種情況,在不同地方需要對處理後的數組內容多次進行顯示,並且很多情況下並非顯示數組裡面的全部內容,而僅僅是想觀察數組中的部分數據內容,若每次顯示時都用printf函數寫的話,未免太過麻煩了。
  • 編程新手快來看!關於程式語言和程序,這篇文章可以說講透了
    不嚴格地講,計算機只能執行低級語言編寫的程序。正因如此,高級語言編寫的程序需要經過翻譯才能運行。翻譯也要消耗時間,這是高級語言的一個小缺點。但高級語言的優勢是巨大的。首先,使用高級語言編程要容易得多,「容易」意味著編程時間更少,代碼更簡短易讀,出錯的可能性更小。
  • LabVIEW編程實例:計算階乘,學習for循環+移位寄存器+遞歸調用
    =1根據這兩種定義方式,下面給出在LabVIEW中編程實現求解n!的兩種方法。階乘求解方法1:使用for循環+移位寄存器實現這種方法實現相對來說比較簡單,程序框圖如下圖所示:在上圖中,直接根據階乘定義使用for循環與移位寄存器的思路實現n!的計算,for循環的次數為n次,移位寄存器的初始值為1,作n次乘法運算即可計算出n的階乘。
  • Linux編程時遇到Oops提示該如何排查?
    各位工程師在Linux下開發程序時,有沒有遇到由於系統中存在某些小故障而跳出了「Oops」提示的情況,此時你是如何排查故障?一行行的查看代碼嗎?其實不用那麼複雜,本文將為你介紹一種高效的Linux編程的故障排除方法。
  • 數控銑床編程中主程序和子程序的關係?
    1、主程序和子程序:程序有主程序和子程序兩種程序形式。一般情況下,CNC根據主程序運行。但是當主程序遇到調用子程序的指令時,控制轉到子程序,當子程序遇到返回主程序的指令時,控制返回到主程序。如果程序包含固定的順序或多次重複的模式程序,這樣的順序或模式程序可以編成子程序在存儲器中存儲。以簡化編程。CNC最多能存儲400個主程序和子程序。子程序只有在自動方式中才被調用。子程序可以有主程序調用,被調用的子程序也可以調用另一個子程序。
  • Power BI技巧:在表格中動態顯示列
    今天分享一個可視化小技巧,如何在PowerBI的表格中動態顯示需要的列?那麼進一步的,矩陣中的度量值是不是也能這樣動態顯示呢,當然是可以的。假設有以下三個度量值,生成的矩陣如下,這種情況下,是不能直接通過切片器來選擇是否顯示某一個度量值的,為了能實現動態的效果,步驟如下:/1/新建一個包含各個度量值名稱的表/2/生成產品名稱和度量值名稱的笛卡爾積表
  • C語言編程技巧:以實例跟我學動態數組的創建及使用方法
    問題提出在C語言編程中,對於普通數組的定義,如定義一個包含10個int類型元素的一維數組a,我們採用下面的方式:int a[10];這種方式定義的數組是靜態數組,其特點是定義方便,無需管理其內存的佔用情況,但其缺點是一旦定義後,其數組的長度就固定了,而不能動態的改變其大小
  • 在VBA中如何使用動態數組,以及利用動態數組去除重複值的方法
    大家好,我們今日繼續講解VBA數組與字典解決方案第22講:在VBA中如何使用動態數組,以及利用動態數組去除重複值的方法。如果文本中含有大量的重複值,此時,如果我們要剔除重複值,該怎麼辦?用VBA的方法該如何做到呢?我在這講和下一講中將解答這個問題,並提供給讀者一個可以測試的實例。今日先講這個內容要用到的知識點。
  • 「JAVA」萬字長篇詳述字節碼對象與反射機制完成動態編程
    ,便會啟動JVM,將字節碼文件加載到JVM中,然後開始運行;當運行java命令時,該命令將會啟動一個JVM進程,在這個JVM進程中,會保存有該JVM創建的所有線程、變量、對象,這些線程、變量、對象會共享該JVM的內存區域。
  • 十個超級好用的R語言編程技巧,一般人絕不知道!
    這些技巧往往非常簡單,但對於完成工作有很大的幫助。本文將介紹十個能夠讓R語言編程工作更加輕鬆的小知識。 1. switch函數在if語句基於其他變量值來選定某個值時,switch可以很方便地縮短if語句。這個技巧在編程中需要根據之前的抉擇加載一個不同的數據集時非常有用。
  • 360、騰訊、迅雷Windows編程面試題及答案
    問MainFrm,CDocument和CView類之間的關係,  MainFrm為框架類,包含應用程式外框所包含部分。CView為視圖類,用於顯示數據的空白區域窗口。  CDocument為文檔類。  MFC提供了文檔/視類結構,採用數據本身和顯示分離的機制。其中文檔類CDocument用於數據的存儲和加載,視類CView用於數據的顯示與修改。
  • LabVIEW+Arduino之四位數碼管顯示
    經過幾天的摸索,分別使用LabVIEW和Arduino C/C++實現了同樣的效果,今天跟大家簡單分享一下。LabVIEW程序框圖所有條件分支Arduino原始碼#defineF_CPU 16000000UL#include<avr/io.h>#include
  • Tobit, Truncreg, Heckman, Probit及其邊際效應實現程序及解讀
    隨機係數Logit模型及Stata實現,6.雙重聚類cluster咋做? 線性, logit, tobit可以雙聚類嗎?,7.面板數據中多項logit模型如何估計?各位看過來,8.Clad還是Tobit, 歸併最小絕對偏差, 做Tobit做不好的,9.
  • Power BI可視化技巧:柱形圖動態顯示預算實際
    接著前面關於預算分析文章的介紹,如果直接把實際和預算數據放到簇狀柱形圖中,效果是這樣的:現在打算實現的效果是,已經發生完整業務的月份就只顯示實際數,未發生業務的月份只顯示預算數。比如在這個案例中,完整的業務月份是到9月份,如何讓1-9月顯示實際數據,而第四季度的三個月顯示預算數據呢?並且用不同的顏色表示預算和實際數據。