◇樂山師范學院電子信息與材料學院 張幼麟
LabVIEW是常用的虛擬儀器設計平臺,本文介紹了其向用戶提供的5種常用程序結(jié)構(gòu):順序、分支、循環(huán)、事件響應和公式節(jié)點。通過對每種程序結(jié)構(gòu)的特點與使用方法進行說明,總結(jié)了各個程序結(jié)構(gòu)的適用范圍與注意事項。
隨著計算機,尤其是個人電腦(PC機)的普及,給人們的生產(chǎn)生活帶來了極大的便利,現(xiàn)代社會的正常運行離不開計算機的支持。利用計算機強大的運算能力可以對信號進行分析、處理,從而完成各種測試研究,具有這種功能的系統(tǒng)可以叫做虛擬儀器。LabVIEW就是一款常用的虛擬儀器程序開發(fā)平臺。
虛擬儀器的開發(fā)工具有兩大類:基于傳統(tǒng)的文本語言和基于圖形化的編程語言。文本語言開發(fā)靈活、適用面廣,但它要求較高的編程技術,相對難度大。圖形化的程序語言(Graphics Language)不同于我們熟悉的編程語言,不是由文本代碼組成,而是由一系列的圖形框圖組成;LabVIEW是它的典型代表。所以,LabVIEW把復雜晦澀的文本編程語言轉(zhuǎn)變成了利用線條連接各種功能模塊組成的圖形程序。由此可見,LabVIEW形象、直觀、容易上手;并且在LabVIEW中提供了大量的傳統(tǒng)儀器(示波器、萬用表等)的仿真控件、各種常用仿真信號源和信號處理模塊,所以它特別適用于具有專業(yè)知識但缺乏編程經(jīng)驗的工程師。
與傳統(tǒng)的面向結(jié)構(gòu)的語言不同,作為圖形化的編程語言,LabVIEW采用數(shù)據(jù)流驅(qū)動的控制機制,各個模塊之間的數(shù)據(jù)流向決定了程序的執(zhí)行順序。但是程序結(jié)構(gòu)對于任何一種計算機編程語言來說都是十分重要的,它控制著整個程序語言的執(zhí)行過程,一個好的程序結(jié)構(gòu),可以大大提高程序的執(zhí)行效率。所以,在LabVIEW中,不僅支持基本的程序結(jié)構(gòu):順序、分支、循環(huán),還擴充了其他的程序結(jié)構(gòu):事件結(jié)構(gòu)、公式節(jié)點、定時結(jié)構(gòu)等;當然,各個結(jié)構(gòu)也是圖形化的。LabVIEW在程序框圖中的函數(shù)模塊的編程模塊中提供了各種程序結(jié)構(gòu)的功能模塊。
循環(huán)是計算機程序中必不可少的一個組成部分,一般由循環(huán)體和循環(huán)控制條件2部分組成。在LabVIEW中,提供了For循環(huán)和While循環(huán)兩種程序結(jié)構(gòu),它們都是框圖的形式,用戶將需要重復執(zhí)行的程序塊(循環(huán)體)放置于框體中即可;2種循環(huán)結(jié)構(gòu)差別在于控制條件不同。
在For循環(huán)的框圖中有兩個參數(shù):N和i。N決定了總的循環(huán)次數(shù),可由用戶設置;i是循環(huán)計算器,表示的是已經(jīng)循環(huán)執(zhí)行的次數(shù),如果用戶需要時可調(diào)用,所以For循環(huán)常用于已知循環(huán)次數(shù)的循環(huán)控制。當循環(huán)次數(shù)不確定時可用While循環(huán)結(jié)構(gòu),While結(jié)構(gòu)的框圖中除了有i這個計數(shù)器外,還有一個條件接線端,由它來控制循環(huán)是否繼續(xù);條件接線端接收布爾變量,用戶可以把它設置為真時繼續(xù)或為真時停止。
不同情況下不同的操作由分支結(jié)構(gòu)來完成,LabVIEW中的條件結(jié)構(gòu)模塊提供了分支結(jié)構(gòu)的控制功能。條件結(jié)構(gòu)不似C語言中的if else這種典型的一分為二的結(jié)構(gòu),更相當于switch這種多路分支結(jié)構(gòu),用戶可以根據(jù)自己的需求添加多個分支框圖,不同的條件下執(zhí)行不同的分支框圖。
條件結(jié)構(gòu)的條件由分支選擇器來接收,可對分支選擇器輸入的數(shù)據(jù)類型有:布爾、字符串、整型或枚舉數(shù)據(jù)類型。當分支選擇器中的數(shù)據(jù)與每個分支框圖的選擇器標簽相同時就會執(zhí)行對應分支框圖中的控制程序。需要注意的是,當條件結(jié)構(gòu)需要輸出數(shù)據(jù)時,每個分支框圖都要有數(shù)據(jù)輸出,否則就會造成整個條件結(jié)構(gòu)無法正常運行。
在傳統(tǒng)的文本程序語言中,沒有跳轉(zhuǎn)指令時,指令的執(zhí)行是按照其位置的前后順序來決定的,所以順序結(jié)構(gòu)是最基礎的一種程序結(jié)構(gòu)。但LabVIEW中程序執(zhí)行的先后是靠著數(shù)據(jù)流經(jīng)節(jié)點的動作來決定的;所以要強調(diào)程序執(zhí)行的先后次序時就可以用LabVIEW提供的順序結(jié)構(gòu)來實現(xiàn)。
順序結(jié)構(gòu)由幀組成,用戶可在每一個幀的框體中添加需要執(zhí)行的程序,幀位置的前后就決定了這些程序執(zhí)行的先后次序。LabVIEW提供了兩種順序結(jié)構(gòu):平鋪式順序結(jié)構(gòu)和層疊式順序結(jié)構(gòu);它們的功能相同,只是表達形式不同而已。順序結(jié)構(gòu)經(jīng)常使用在需要統(tǒng)計某功能程序執(zhí)行時間的應用中。
一個事件可以理解為一個活動;事件可以來自用戶(鼠標、鍵盤的操作)、外部的輸入輸出設備(數(shù)據(jù)采集完成、硬件錯誤等)和其他程序的控制來觸發(fā)。對于缺乏編程經(jīng)驗的用戶而言,要設計應用程序進行事件響應相對困難,而LabVIEW提供了簡單方便的事件結(jié)構(gòu)來進行響應控制;不過它只支持由用戶和其他程序觸發(fā)的兩類事件。
右擊事件結(jié)構(gòu)功能圖的框體,在出現(xiàn)的菜單中選擇“編輯本分支所處理的事件”就可以方便的選擇觸發(fā)事件的源頭,它可以是鼠標(系統(tǒng)提供了鼠標的按下、移到、滾輪滑動等各種操作)或鍵盤引發(fā)的窗格變化,也可以是程序框圖中的存在控件,或者是其他的應用程序。這些源頭發(fā)生了指定的變化時就可以執(zhí)行事件結(jié)構(gòu)框體中的程序模塊,即進行事件響應。由此可見,通過LabVIEW系統(tǒng)提供的事件結(jié)構(gòu),可以快速方便的建立事件響應的控制設計模塊。
LabVIEW中還提供了公式節(jié)點這種程序結(jié)構(gòu),當LabVIEW平臺提供的功能模塊不能滿足用戶的靈活要求,而用文本代碼能更加方便的時候,我們就可以使用公式節(jié)點來添加文本代碼模塊。在公式節(jié)點的框圖的框體上可以方便的添加輸入、輸出的變量,在框體內(nèi)中支持C語言,用戶可以輸入用C語言描述的算術表達式;并且公式節(jié)點還支持C語言的控制語句,比如for、while、if、switch等。公式節(jié)點經(jīng)常使用于含有多個輸入、輸出變量或較為復雜的算術表達式。
LabVIEW作為虛擬儀器主要的編程設計平臺,它以數(shù)據(jù)流的方式驅(qū)動程序的運行;但程序的結(jié)構(gòu)設計依然是其一個重要的、基礎的組成元素。本文介紹了LabVIEW支持的幾種程序結(jié)構(gòu),除了其他文本編程語言常見的順序、分支和循環(huán)控制結(jié)構(gòu)外,LabVIEW還提供了事件結(jié)構(gòu)和公式節(jié)點2種特有的程序結(jié)構(gòu),它們的出現(xiàn)使LabVIEW更加簡單方便且靈活。