使用LabVIEW編寫程序時(shí),工程師都會將自己程序中的部分代碼封裝為子VI,而封裝的部分可能是某個(gè)經(jīng)典的算法,也可能是調(diào)用某個(gè)設(shè)備的專用代碼,還可能是實(shí)現(xiàn)某個(gè)功能的模塊??傊?,為了提高程序的整潔度和可閱讀性,使用模塊化思想去封裝子VI是開發(fā)過程中十分重要的步驟。
而在封裝子VI的過程中有時(shí)會遇到功能實(shí)現(xiàn)相類似但輸入數(shù)據(jù)類型不同的情況,這時(shí)可能需要封裝多個(gè)子VI以滿足所有的需求,LabVIEW其實(shí)提供了更適用的方法,今天小編為大家?guī)淼淖覸I設(shè)計(jì)中的多態(tài)VI和自適應(yīng)VI就是為此而生,進(jìn)一步簡化程序并提高可閱讀性。
一、多態(tài)VI 多態(tài)VI的概念: 多態(tài)VI最早是在LabVIEW 6.0被引入的,它能夠在指定的輸入以及輸出端口上接受不同的數(shù)據(jù)類型。不同的數(shù)據(jù)類型可以是指不同的數(shù)據(jù)表示法或不同的數(shù)據(jù)維數(shù)大小。一個(gè)多態(tài)VI是一組子VI的集合,這些子VI都有一個(gè)共同的特點(diǎn),它們的連線板模式都是類似的,每一個(gè)子VI對應(yīng)著多態(tài)VI中的一個(gè)VI實(shí)例。LabVIEW中有很多多態(tài)VI,比如NI-DAQmx驅(qū)動庫中的讀取、寫入、定時(shí)、觸發(fā)等。
多態(tài)VI的使用場景:
當(dāng)我們想要對不同數(shù)據(jù)類型的數(shù)據(jù)執(zhí)行類似或相同的操作的時(shí)候,就可以使用多態(tài)VI。根據(jù)連接在輸入接線端上數(shù)據(jù)的類型不同,多態(tài)VI會自動選擇對應(yīng)的實(shí)例子VI。多態(tài)VI允許用戶將它應(yīng)用到功能類似的不同應(yīng)用實(shí)例中去, 并且這些不同的應(yīng)用實(shí)例處理了不同的數(shù)據(jù)類型的數(shù)據(jù)。這樣就可以讓用戶把數(shù)據(jù)類型不同所造成的VI結(jié)構(gòu)差異在VI的內(nèi)部就自動處理掉,從而不需要為不同的數(shù)據(jù)類型放置多個(gè)不同的處理VI。
創(chuàng)建多態(tài)VI:
1、創(chuàng)建不同的子VI實(shí)例,小編創(chuàng)建了幾個(gè)不同數(shù)據(jù)類型簡單計(jì)算的實(shí)例,;
2、在LabVIEW的新建模板界面選擇新建多態(tài)VI;
3、在創(chuàng)建的多態(tài)VI中選擇添加剛才創(chuàng)建的幾個(gè)實(shí)例VI,添加完成后可以給它們分別自定義菜單名稱(在程序框圖面板右鍵多態(tài)VI>>選擇類型中顯示的名稱)和選擇器名稱(多態(tài)VI選擇器顯示的名稱); ?
4、根據(jù)需要勾選對應(yīng)的配置,其中程序框圖外觀勾選“繪制多態(tài)VI圖標(biāo)”和“繪制實(shí)例VI圖標(biāo)”會決定多態(tài)VI顯示的圖標(biāo)?!澳J(rèn)顯示選擇器”選項(xiàng)決定在使用時(shí)圖標(biāo)下方是否顯示多態(tài)VI選擇器(舉例說明:NI-DAQmx的定時(shí)API就是一個(gè)多態(tài)VI,而它圖標(biāo)下面的下拉列表框其實(shí)就是多態(tài)VI選擇器)?!霸试S多態(tài)VI自動匹配數(shù)據(jù)類型”選項(xiàng)可以讓多態(tài)VI自動識別輸入的數(shù)據(jù)類型并選擇對應(yīng)的實(shí)例;
5、多態(tài)VI就制作完成后測試其功能。如下圖所示,連接不同數(shù)據(jù)類型時(shí)多態(tài)VI會自動選擇并執(zhí)行對應(yīng)的實(shí)例,后續(xù)如果要擴(kuò)展其兼容的數(shù)據(jù)類型,可以向多態(tài)VI中添加新的實(shí)例VI;
二、自適應(yīng)VI
自適應(yīng)VI的概念:
自適應(yīng)VI可以自動適應(yīng)輸入的數(shù)據(jù)類型,它的所有接線端均為多態(tài)。用戶每次將輸入數(shù)據(jù)連線至接線端時(shí),自適應(yīng)VI將自動檢查連線的數(shù)據(jù)類型是否可以接受。如可以接受該類型,自適應(yīng)VI會將接線端自動調(diào)整為該輸入數(shù)據(jù)類型;如果不接受該類型則會顯示斷線。通過自適應(yīng)VI可以對任意可接收的數(shù)據(jù)類型執(zhí)行相同的操作,而無需為每種數(shù)據(jù)類型保存單獨(dú)的VI副本。
自適應(yīng)VI的使用場景:
自適應(yīng)VI和多態(tài)VI的使用場景相類似,需要對不同數(shù)據(jù)類型進(jìn)行相似處理的時(shí)候使用,為了提高靈活性,自適應(yīng)VI也可以支持對某些特定數(shù)據(jù)類型進(jìn)行特殊處理。LabVIEW 2020就加入了一些自適應(yīng)VI,它們的圖標(biāo)都是以橙色為背景,比如數(shù)組選板中的“排序二維數(shù)組”。
創(chuàng)建自適應(yīng)VI:
1、在LabVIEW的新建模板界面選擇新建自適應(yīng)VI,也可以新建一個(gè)普通VI后將其后綴名更改為.vim,這個(gè)VI就會變?yōu)橐粋€(gè)自適應(yīng)VI;
2、使用“類型專用結(jié)構(gòu)”編寫自適應(yīng)VI的功能,如果有特殊數(shù)據(jù)類型需要做特殊處理,可以單獨(dú)為其創(chuàng)建分支來處理該數(shù)據(jù)。小編創(chuàng)建了一個(gè)數(shù)組求和的自適應(yīng)VI,該VI可以對一維數(shù)組進(jìn)行求和。其中一維布爾數(shù)組要先經(jīng)過“布爾至0,1轉(zhuǎn)換”之后再求和;一維字符串?dāng)?shù)組要先進(jìn)行“分?jǐn)?shù)/指數(shù)字符串至數(shù)值轉(zhuǎn)換”后再求和。
一維數(shù)組求和
對布爾數(shù)組進(jìn)行特殊處理
對字符串?dāng)?shù)組進(jìn)行特殊處理
3、自適應(yīng)VI創(chuàng)建完成后測試其功能。如下圖所示,該自適應(yīng)VI可以自動適配輸入的一維數(shù)組數(shù)據(jù)類型并且執(zhí)行對應(yīng)功能,如果后續(xù)有要擴(kuò)展的數(shù)據(jù)類型,也可以直接打開自適應(yīng)VI為它創(chuàng)建專用的分支。
三、兩者對比
多態(tài)VI與自適應(yīng)VI都可以為不同輸入數(shù)據(jù)類型執(zhí)行其對應(yīng)的功能,但他們并不是完全相同的,它們之間也有一些不同點(diǎn),下面這個(gè)表格可以清晰地看到兩種VI之間的一些對比:
多態(tài)VI | 自適應(yīng)VI | |
實(shí)現(xiàn)方式 | 帶一組預(yù)定義的可接受數(shù)據(jù)類型的實(shí)例VI組。 | 自動計(jì)算實(shí)現(xiàn)是否接受某種數(shù)據(jù)類型的單個(gè)VI。 |
連線板 | 不同實(shí)例VI可以自定義不同的連線板。 | 所有數(shù)據(jù)類型的連線板相同。 |
生成 | 為每種數(shù)據(jù)類型創(chuàng)建一個(gè)實(shí)例VI,并將實(shí)例VI包含在多態(tài)VI中。 | 創(chuàng)建帶.vim文件擴(kuò)展名的VI,或通過將VI擴(kuò)展名更改為.vim以將標(biāo)準(zhǔn)VI轉(zhuǎn)換為自適應(yīng)VI。 |
自定義 | 在不同實(shí)例VI中實(shí)現(xiàn)不同的代碼,以此對不同數(shù)據(jù)類型定義不同行為。 | 使用類型專用結(jié)構(gòu)在自適應(yīng)VI中為特定數(shù)據(jù)類型自定義代碼。 |
自適應(yīng)類? | 否,調(diào)用類A方法a的多態(tài)VI只接受類A或類A的子孫類。 | 是,如果自適應(yīng)VI調(diào)用類A方法a,則其可接受任何具有與類A方法a相同名稱、連線板模式、接線端方向的公共方法的類。 |
在封裝子VI時(shí),工程師應(yīng)該在什么情況下選擇使用多態(tài)VI?在什么情況下使用自適應(yīng)VI呢?下面這個(gè)表格可以帶給我們答案:
類型 | 適用場景 |
多態(tài)VI |
1、對于不同的數(shù)據(jù)類型,操作的實(shí)現(xiàn)不同。 2、不同數(shù)據(jù)類型的連線板不同。 |
自適應(yīng)VI |
1、可對不同數(shù)據(jù)類型以相似方式實(shí)現(xiàn)操作而無需針對特定數(shù)據(jù)進(jìn)行大量自定義。 2、面向?qū)ο?a href="http://www.brongaenegriffin.com/v/tag/1315/" target="_blank">編程時(shí)可以自動適應(yīng)輸入類。 |
審核編輯:劉清
-
驅(qū)動器
+關(guān)注
關(guān)注
54文章
8697瀏覽量
149951 -
LabVIEW
+關(guān)注
關(guān)注
2002文章
3670瀏覽量
335914 -
選擇器
+關(guān)注
關(guān)注
0文章
110瀏覽量
14824
原文標(biāo)題:知識分享 | LabVIEW子VI設(shè)計(jì)—多態(tài)VI與自適應(yīng)VI
文章出處:【微信號:華穗科技,微信公眾號:華穗科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
LabVIEW中DAQmx子VI斷開或這是“無法執(zhí)行子VI”?
多態(tài)子VI已斷開,運(yùn)行該VI前必須解決多態(tài)子VI的所有錯(cuò)誤。
LabVIEW多態(tài) VI (Polymorphic VIs)的使用
創(chuàng)建和編輯VI程序、及建立和調(diào)用子VI
LabVIEW的登錄主程序和子VI程序運(yùn)行的詳細(xì)概述
labview如何調(diào)用子vi
LabVIEW編程實(shí)用教程之多態(tài)VI的創(chuàng)建的視頻教程免費(fèi)下載
LabVIEW編程的實(shí)用技巧多態(tài)VI的創(chuàng)建視頻教程免費(fèi)下載

LABVIEW打開調(diào)用子VI的幾種辦法
LabVIEW中執(zhí)行系統(tǒng)命令VI介紹

評論