簇
簇是一種類似數(shù)組的數(shù)據(jù)結(jié)構(gòu),用于分組數(shù)據(jù)。簇和數(shù)組有著重要的差別,其中一個(gè)重要差別是,簇可以包含不同的數(shù)據(jù)類型,而數(shù)組僅可以包含相同的數(shù)據(jù)類型。例如,一個(gè)數(shù)組可以包含10個(gè)數(shù)字指示器,一個(gè)簇卻可以包含一個(gè)數(shù)字控件,一個(gè)開(kāi)關(guān)和一個(gè)字符串控件。
盡管簇和數(shù)組的元素都是有序存放的,但訪問(wèn)簇的元素最好是通過(guò)釋放的方法同時(shí)訪問(wèn)其中部分或全部元素,而不是通過(guò)索引一次訪問(wèn)一個(gè)元素。簇和數(shù)組的另一個(gè)差別是簇具有固定的大小。
簇通常用于將出現(xiàn)在框圖上的有關(guān)數(shù)據(jù)元素分組管理。因?yàn)榇卦诳驁D中僅用唯一的連線表示,所以對(duì)于減少連線混亂和子VI需要的連接器端子個(gè)數(shù),使用簇有著積極的效果??梢詫⒋乜醋鍪且焕B線,線纜中每一個(gè)連線表示簇的不同元素。在框圖上,只有當(dāng)簇具有相同類型,相同元素?cái)?shù)量和相同元素順序時(shí),才可以將簇的子端連接。多態(tài)性應(yīng)用于簇時(shí),只需要簇具有同樣順序,同樣數(shù)量的元素。
下面來(lái)向大家介紹簇的創(chuàng)建簇的創(chuàng)建框位于前面板中的控件→新式→數(shù)組,矩陣和簇→簇,如圖:
然后就可以往簇的框中添加各種類型的控件了,例如現(xiàn)在要建立一個(gè)學(xué)生的記錄信息,包括學(xué)生的姓名,學(xué)號(hào),性別和年齡.這就需要在簇外殼里依次放入兩個(gè)字符串輸入控件,一個(gè)數(shù)字控件和一個(gè)布爾控件.如圖:
與數(shù)組的創(chuàng)建類似,簇也可以從程序框圖中創(chuàng)建,先在程序框圖上放置一個(gè)簇外殼,然后就可以在簇外殼里放置各種數(shù)據(jù)類型常數(shù)。如圖:
簇內(nèi)對(duì)象的大小是可以調(diào)整的,右擊簇邊界,在彈出的快捷菜單中可以選擇各種調(diào)節(jié)操作,如圖:
選擇調(diào)整為匹配大小,即可縮小簇的邊框,如圖為調(diào)整后的結(jié)果:
簇結(jié)構(gòu)中的元素排列是按照它們放置的先后來(lái)排序的,它與簇內(nèi)元素的位置無(wú)關(guān)。放入簇內(nèi)的第一個(gè)元素序號(hào)為0,第二個(gè)元素序號(hào)是1,依次向下排列。如果刪除了一個(gè)元素,序號(hào)將重新自動(dòng)調(diào)整。簇的排序很重要,它直接影響著后面將要介紹的“捆綁”以及“接觸捆綁”函數(shù)的端口順序,如果你想將一個(gè)簇與另一個(gè)簇連接,這兩個(gè)簇的序和類型必須相同。
如果想要改變簇內(nèi)元素的排列順序,可以右擊簇結(jié)構(gòu)的邊框,在彈出的快捷菜單中執(zhí)行“重新排序簇中控件”,如圖:
這時(shí)鼠標(biāo)會(huì)變成一個(gè)帶“#”號(hào)的手柄箭頭,黑框指出新設(shè)置的排列序號(hào),白框表示原先的排列序號(hào),可以改變標(biāo)題欄上的“單擊設(shè)置”內(nèi)容,然后單擊簇元素即可設(shè)置新的序號(hào)。設(shè)置完畢后單擊工具欄上的“”按鈕確定更改,如果想恢復(fù)原先設(shè)定值,單擊“”取消設(shè)置。
b) 簇函數(shù)
簇函數(shù)的模版如圖:
簇函數(shù)中最主要的就是構(gòu)造打包生成簇的“捆綁”函數(shù),還有從簇中解包提取簇中元素的“解除捆綁”函數(shù)。它們是根據(jù)簇成員的順序來(lái)進(jìn)行操作的,這也說(shuō)明了簇內(nèi)成員順序排列的重要性。
簇函數(shù)舉例:
創(chuàng)建簇,解包簇,再打包簇該例的目的是學(xué)習(xí)使用簇的兩個(gè)基本函數(shù),如圖:首先放置一個(gè)簇外殼到前面板上,將標(biāo)簽內(nèi)容改為“輸入簇”
在簇外殼中依次放入字符串控件“Name”,布爾控件“Sex”,數(shù)字輸入控件“Pay”以及字符串控件“Address”,通過(guò)這些簇元素來(lái)組成某一公司內(nèi)一名員工的工資記錄。如圖:
切換到程序框圖,放置一個(gè)“解除捆綁”解包簇函數(shù),函數(shù)剛放入時(shí),它的右側(cè)只有2個(gè)輸出端口,當(dāng)輸入端口與“輸入簇”端子相連后,右側(cè)端口會(huì)自動(dòng)增加為簇元素的數(shù)目,端口從上向下排列的順序與簇內(nèi)元素的放置順序相對(duì)應(yīng),并且數(shù)據(jù)類型也是與簇元素?cái)?shù)據(jù)類型相對(duì)應(yīng)。如圖:
同樣放置一個(gè)“捆綁”打包簇函數(shù),用定位工具將輸入端口的數(shù)目增加到4個(gè),依次將它們與解包出來(lái)的4個(gè)簇元素相連,表示又把它們進(jìn)行打包生成一個(gè)新的簇。在輸出端口創(chuàng)建一個(gè)簇顯示器,把標(biāo)簽改為“輸出簇”,如圖:
替換簇成員該例的目的是學(xué)習(xí)使用“按名稱捆綁”函數(shù)來(lái)替換簇內(nèi)的某些元素。
新建一個(gè)VI,在前面板上創(chuàng)建一個(gè)簇外殼,依次向簇內(nèi)添加一個(gè)數(shù)字輸入控件,一個(gè)布爾控件,一個(gè)字符串輸入控件,如圖:打開(kāi)程序框圖,選擇“按名稱捆綁”函數(shù),它的功能是按照名稱來(lái)替換簇成員的值。在函數(shù)剛放入時(shí),它的左側(cè)只有一個(gè)輸入端口,將函數(shù)的“輸入簇”端口與創(chuàng)建的簇端子相連之后,左側(cè)端口會(huì)顯示簇內(nèi)第一個(gè)元素的名稱數(shù)值,用操作工具單擊它可以選擇其他的簇成員。如圖:在前面板上創(chuàng)建一個(gè)輸入控件,將標(biāo)簽改為“輸入數(shù)字”,在程序框圖將它與“數(shù)值”端口相連,表示將用它來(lái)替換簇元素。如圖:在“按名稱捆綁”函數(shù)后面創(chuàng)建輸出簇,完成后即可運(yùn)行程序,如圖:插接生成簇?cái)?shù)組該例的目的是學(xué)習(xí)使用“索引與捆綁簇?cái)?shù)組”函數(shù)插接簇?cái)?shù)組函數(shù)來(lái)生成一個(gè)簇?cái)?shù)組。
新建一個(gè)VI,打開(kāi)程序框圖,放置一個(gè)該函數(shù),剛放入時(shí)它只有一個(gè)輸入的端口,用定位工具拖拉它為3個(gè)輸入端口。在程序框圖上放置三個(gè)數(shù)組外殼,然后分別添加字符串常量,數(shù)值常量和布爾常量,建立三個(gè)數(shù)組,如圖:然后給他們賦如圖所示的值,如圖:
然后連線,并創(chuàng)建顯示控件,如圖:
運(yùn)行,結(jié)果如圖:
說(shuō)明:該函數(shù)從輸入的3個(gè)數(shù)組中依次取值,相同索引值的數(shù)據(jù)被攢程一個(gè)簇,所有的簇構(gòu)成一個(gè)一維數(shù)組。插接成的數(shù)組的長(zhǎng)度與所有輸入數(shù)組中長(zhǎng)度最短的一個(gè)相等,多余的數(shù)據(jù)被丟棄。
建立“數(shù)組的數(shù)組”該例看起來(lái)好像是不可以實(shí)現(xiàn)的,因?yàn)樵跀?shù)組的學(xué)習(xí)中,已經(jīng)知道數(shù)組的成員不可以是數(shù)組。這里將學(xué)習(xí)把一維數(shù)組當(dāng)成一個(gè)簇,然后通過(guò)建立簇的數(shù)組,因?yàn)榇財(cái)?shù)組的每一個(gè)成員都是一個(gè)簇(即一維數(shù)組),從而實(shí)現(xiàn)建立“數(shù)組的數(shù)組”的目的。
先新建一個(gè)VI,打開(kāi)程序框圖,放置一個(gè)“創(chuàng)建簇?cái)?shù)組”函數(shù),該函數(shù)的功能是建立簇的數(shù)組,簇?cái)?shù)組的每個(gè)成員都是一個(gè)簇。剛放入程序框圖時(shí),函數(shù)只有一個(gè)輸入端口,用定位工具拖動(dòng)它的邊框,使它具有3個(gè)輸入端口。在程序框圖上創(chuàng)建3個(gè)數(shù)值型數(shù)組,分別對(duì)它們進(jìn)行賦值,第一個(gè)和第三個(gè)數(shù)組長(zhǎng)度設(shè)定為5,第二個(gè)數(shù)組的長(zhǎng)度設(shè)定為4。在“創(chuàng)建簇?cái)?shù)組”函數(shù)的輸出端口創(chuàng)建一個(gè)簇顯示器,將簇顯示器的標(biāo)簽內(nèi)容改為“數(shù)組的數(shù)組”,如圖:運(yùn)行程序,即可在前面板上看到結(jié)果,如圖:Error簇
Error簇是一類很重要的簇,許多的控件里都有“錯(cuò)誤輸入”和“錯(cuò)誤輸出”這兩個(gè)簇的端口,通常來(lái)講,當(dāng)一個(gè)VI中間出現(xiàn)錯(cuò)誤而導(dǎo)致不能運(yùn)行時(shí),可以在出錯(cuò)的控件的“錯(cuò)誤輸出”端子創(chuàng)建一個(gè)顯示控件,則可以讓程序繼續(xù)運(yùn)行,如圖所示,即為Error簇:
而Error簇更重要的應(yīng)用在于,它可以控制控件執(zhí)行的先后順序,也可以通過(guò)Error簇來(lái)控制循環(huán)的終止。如圖:
當(dāng)信號(hào)的發(fā)生出現(xiàn)錯(cuò)誤的時(shí)候,就可以把循環(huán)停止。