版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、LabVIEW實踐之路、北京工業(yè)大學(xué) 先進制造技術(shù)實驗室2010年12月代碼與工具(代序)IT行業(yè)的發(fā)展是有目共睹的,越來越多的年輕人加入到這一領(lǐng)域,對于大部分人來說,編程序、寫代碼成了每天要面對的。LabVIEW實踐之路的內(nèi)容也和程序開發(fā)有關(guān),但不僅僅是編程,而是傳遞一種掌握工具、解決問題的思想。同樣,所有的開發(fā)語言也都是實現(xiàn)功能或系統(tǒng),滿足需求的工具,如果只知coding而忘記了其工具屬性,只知追求編程技巧忘記了功能的實現(xiàn),那顯然不是各種開發(fā)語言產(chǎn)生的目的。對于LabVIEW來說,它有其自身的特點和應(yīng)用范圍,有其獨特的語言構(gòu)架、開發(fā)環(huán)境以及設(shè)計原則等。了解掌握這些內(nèi)容當然很重要,但同樣重要
2、的是把LabVIEW、虛擬儀器當做解決問題的工具,用最適合、最高效的投入獲得令人滿意的結(jié)果。虛擬儀器不只有LabVIEW,就像是操作系統(tǒng)不只有Windows;但LabVIEW是虛擬儀器開發(fā)環(huán)境的霸主,正如Windows在操作系統(tǒng)中的地位。在校的學(xué)生進入LabVIEW的天地,根據(jù)應(yīng)用的不同許多相關(guān)知識需要了解,因為LabVIEW最拿手的測試測量和自動化領(lǐng)域絕對是一個“知識密集”領(lǐng)域,解決問題的同時學(xué)習(xí)一些基礎(chǔ)理論和應(yīng)用技術(shù)對將來的個人發(fā)展是不無裨益的。最后,學(xué)習(xí)本身就是一種苦中作樂的事情,學(xué)習(xí)LabVIEW也是如此。希望本教程能夠讓學(xué)習(xí)的過程少一些彎路,多一些愉悅,尤其是解決工程問題的快樂。PS
3、:意見、交流信箱:santtoy2010年底于北京工業(yè)大學(xué) 說明:本教程不限制無商業(yè)目的的網(wǎng)上分發(fā)、復(fù)制、傳播,如果涉及商業(yè)使用或?qū)W術(shù)引用,請先征得同意。 第一章 LabVIEW起步:做應(yīng)該做的人們提到LabVIEW的時候通常前面會加上“虛擬儀器”這個單詞,這在一個側(cè)面反映了LabVIEW的應(yīng)用特點,那么好的,我們來了解一下什么是虛擬儀器,以及它與LabVIEW之間是什么關(guān)系。下圖來自虛擬儀器的領(lǐng)導(dǎo)廠商,也是LabVIEW的“東家”,美國國家儀器有限公司。兩張圖的區(qū)別主要在幾個方面: a) 傳統(tǒng)測試儀器 b) 虛擬儀器圖1.1 傳統(tǒng)測試儀器和虛擬儀器 虛擬儀器由用戶定義,而傳統(tǒng)儀器則功能固定且
4、由廠商定義。 每一個虛擬儀器系統(tǒng)都由兩部分組成軟件和硬件。對于當前的測量任務(wù),虛擬儀器系統(tǒng)的價格與具有相似功能的傳統(tǒng)儀器相差無幾,甚至比它少很多倍。由于虛擬儀器在測量任務(wù)需要改變時具有更大的靈活性,因而隨著使用時間的延長,通過開發(fā)軟件來增加新的功能以滿足更多測試要求,節(jié)省的成本也不斷累計。 傳統(tǒng)儀器把所有軟件和測量電路封裝在一起,利用儀器前面板為用戶提供一組有限的功能。而虛擬儀器系統(tǒng)提供的則是完成測量或控制任務(wù)所需的所有軟件和硬件設(shè)備,功能完全由用戶自定義。 利用虛擬儀器技術(shù),工程師和科學(xué)家們還可以使用高效且功能強大的軟件來自定義采集、分析、存儲、共享和顯示功能。簡單的說,虛擬儀器的特點是“以
5、軟代硬,軟硬結(jié)合,無縫集成,高度模塊化和高度擴展性”。LabVIEW就是其中的虛擬儀器軟件開發(fā)環(huán)境的佼佼者,用來進行快速開發(fā)的集成開發(fā)環(huán)境(Integrated Development Environment,IDE)。當然,LabVIEW并不是只能依附于相關(guān)的硬件才能使用,諸如科學(xué)計算、數(shù)字信號分析處理、數(shù)字圖像處理、系統(tǒng)仿真等都是它的拿手好戲。必須清楚一件事,“LabVIEW不是一種一般意義上的通用編程語言,但它能用來開發(fā)各種通用應(yīng)用程序”。也就是說,在測試測量等領(lǐng)域LabVIEW可以同硬件結(jié)合大展身手,但如果只想開發(fā)個計算器程序,編一個音樂播放器,或是開發(fā)郵件客戶端等等,LabVIEW也
6、是可以勝任或解決一般需求的,當然可能在程序運行速度及體積大小等方面同JAVA、C#、C/C+、VB等有差距。不信可以看一下,用LabVIEW開發(fā)的Flash播放器,以及超級瑪麗的Demo。不過,這些東西主要還是用來練手的,如果學(xué)習(xí)LabVIEW的目的就是實現(xiàn)這種程序的開發(fā),那就有點“不務(wù)正業(yè)”了。 圖1.2 Flash播放器 圖1.3 超級瑪麗Demo1.1 第一個LabVIEW程序:從解一元二次方程開始LabVIEW開發(fā)環(huán)境的安裝就不多費筆墨了,現(xiàn)在就啟動LabVIEW,開始掌握工具之旅。初中數(shù)學(xué)我們就知道,一元二次方程的解可以表示為。那時候沒少讓大家解方程,現(xiàn)在就用LabVIEW編程來解。
7、LabVIEW里面開發(fā)的程序單元被稱作VI(Virtual Instruments, 虛擬儀器),文件的擴展名是 .vi ,就像是用c語言開發(fā)的 .c 文件或C+開發(fā)的 .cpp 文件等。當然,現(xiàn)在LabVIEW開發(fā)環(huán)境下還包括其它的程序組織類型,如工程(.lvproj)、類(.lvclass)、模板(.vit)、庫(.llb)。這些類型有的是為了讓你更好的組織開發(fā)工作,有的是為了讓你獲得更高效、復(fù)用性更好的程序。我們在前幾章將圍繞 .vi 文件進行學(xué)習(xí),畢竟這是整個LabVIEW開發(fā)的核心。建立 .vi 文件可以在LabVIEW啟動后選擇“新建VI”(如圖1.4所示),也可以在開發(fā)環(huán)境下在文
8、件菜單里選擇“新建VI”。圖1.4 新建VI一個默認文件名的vi文件將被建立,如圖1.5所示,VI開發(fā)環(huán)境中常用模塊包括以下幾個主要部分:前面板、程序框圖、工具快捷選板、控件快捷選板(前面板用)、函數(shù)快捷選板(程序框圖用)等。其中前面板主要進行界面設(shè)計,類似于VB、VC等開發(fā)環(huán)境中的人機界面開發(fā)環(huán)境;而程序框圖則類似于其他編程語言的代碼編輯器,當然,LabVIEW是通過圖形化的拖放來完成“代碼”的生成。好的,我們就開始在前面板和程序框圖中揮灑創(chuàng)意,實現(xiàn)功能了!當然,先把一元二次方程解了圖1.5 VI程序開發(fā)界面 功能分析:程序的要求很簡單,就是一個算法問題。為了盡快展現(xiàn)我們的程序,像二次項系數(shù)
9、是否為0等問題我們先不考慮,程序就是一個三個浮點輸入(a, b, c),兩個浮點輸出(x1, x2)的算法,涉及加、減、乘、除、平方、開方以及取負等運算。 前面板設(shè)計:根據(jù)算法,放置三個數(shù)值輸入控件和兩個數(shù)值顯示控件(如圖1.6(a)所示)。方法很簡單,在控件快捷選板中,找到新式數(shù)值欄,用左鍵將數(shù)值輸入控件和數(shù)值顯示控件拖入前面板即可,需要幾個拖幾個。當然,通常默認的控件標簽名稱不一定符合我們的要求,那么雙擊文字(或在工具快捷選板中選擇文本編輯后,再單擊控件的文字標簽)就能夠輸入新的名稱,如圖1.6(b)所示。OK,界面完成了,雖然有一點簡陋,不過沒關(guān)系,后面我們會學(xué)習(xí)多種方法作出讓人贊嘆的程
10、序界面。 (a)(b)圖1.6 前面板控件的放置 我們點擊一下程序框圖切換過去看一下,五個圖標也出現(xiàn)在程序框圖中,而且標簽和前面板的控件一一對應(yīng)。沒錯,這就是我們在前面板放置的控件,如果仔細觀察一下,會發(fā)現(xiàn)每一個圖標上都會有DBL的字樣,這說明我們放置的輸入輸出控件默認是雙精度浮點數(shù)的,以后再介紹數(shù)據(jù)類型,接下來就要在框圖中編寫算法了!圖1.7 框圖程序中的輸入輸出 在框圖中編寫算法要用到函數(shù)選板,如果沒有出來,在查看菜單里點擊一下(如圖1.8所示)。圖1.8 程序框圖的函數(shù)選板本程序用到了加、減、乘、除、平方、開方等運算,我們可以在數(shù)值選板中找到它們,如圖1.9所示。LabVIEW將各函數(shù)按
11、照類別排放,只要稍加熟悉,便能快速找到所需的子VI。圖1.9 數(shù)值函數(shù)選板 接下來就根據(jù)算法開始在框圖程序完成連線了,也就是“寫代碼”。通常LabVIEW各子VI左側(cè)連線端為輸入,右側(cè)為輸出,當你從工具選板中選中“進行連線”,即使用連線工具后,鼠標形式變換成為連線樣式。將其放置于子VI左側(cè)或右側(cè)的對應(yīng)位置時,開發(fā)環(huán)境便會自動顯示連線端及其名稱。如圖1.10所示。當然通過點擊Tab鍵LabVIEW能自動為您切換工具箱中的定位選擇工具、連線工具、文本工具等。 圖1.10 連線工具及使用框圖“編碼”很簡單,就是在變量/常量/VI的輸入輸出間連線:在輸出/輸入連線端按下鼠標左鍵后拖動到需要連接的輸入/
12、輸出連線端,一條顏色、形狀各異的線出現(xiàn)了,這就是你寫下的代碼。線的顏色、形狀、粗細等標識者傳遞的數(shù)據(jù)類型,以后你會慢慢了解的。通常編寫程序時,盡量讓你的程序從左向右執(zhí)行,也就是連線時若果上一個輸出連接到下一個輸入,那么前面的輸出應(yīng)置于框圖左邊,而后面的輸入置于右邊。按照上面的方法,我們很容易就能夠?qū)⒔庖辉畏匠痰乃惴▽崿F(xiàn),看下面的框圖1.11,是不是都能夠理解呢?圖1.11 解一元二次方程的程序框圖 框圖程序完成后,前面板上的輸入輸出之間就通過我們的算法聯(lián)系起來了。細心的讀者可能會觀察到:不管是前面板還是程序框圖的快捷按鈕欄,有一個按鈕由變?yōu)椤9材?,程序運行按鈕由無法執(zhí)行變?yōu)榱丝梢詧?zhí)行,點
13、擊運行按鈕就可以執(zhí)行我們的程序了-當然,我們先把需要解的方程的系數(shù)填入對應(yīng)的輸入。圖1.12 運行程序結(jié)果如上圖1.12所示,我們解了一個方程,結(jié)果是,看輸出吧,呵呵。和的變化體現(xiàn)出了LabVIEW實時編譯的特點,即不需要你去點擊某一個編譯按鈕,只要程序已經(jīng)到了能夠運行的程度,那就會出現(xiàn)在你的眼前。當然,能夠運行不代表你的程序已經(jīng)正確完成了,只是說明了框圖程序里沒有邏輯錯誤而已。不信你看看,一個空的程序照樣是有的。小結(jié)虛擬儀器程序設(shè)計同主流的程序設(shè)計語言有很大不同,“圖形化編程”、“G語言”不是吹出來的,用好LabVIEW的關(guān)鍵問題之一就是適應(yīng)編程習(xí)慣。前面板的拖放很像VB、Delphi、VC
14、/BCB、JAVA(NetBeans等)集成開發(fā)環(huán)境中截面設(shè)計,拖放即可;主要區(qū)別在于“代碼”的生成,依靠連線為主的虛擬儀器確實很有特點。有兩點必須現(xiàn)在就指出:第一是LabVIEW上手并不難,在一些領(lǐng)域如測試、信號處理、數(shù)值算法等等開發(fā)一些實用系統(tǒng)也比較擅長,但要想成為高手,能夠?qū)崿F(xiàn)良好的程序結(jié)構(gòu)、便利的人機交互、復(fù)雜的功能,你要花費的力氣不比學(xué)好任何一門語言少。如今大部分學(xué)術(shù)論文上充斥的某某虛擬儀器開發(fā)的系統(tǒng)類似于小兒科的玩具,只能停留在那種文章里。第二是LabVIEW有優(yōu)點和缺點,這一點必須一開始就清楚。如果你想學(xué)習(xí)LabVIEW成為數(shù)據(jù)庫系統(tǒng)開發(fā)的高手、網(wǎng)絡(luò)系統(tǒng)開發(fā)的高手,我勸你還是死了
15、這條心的,因為這種系統(tǒng)即使出現(xiàn)也不會有太大價值。另外,程序設(shè)計都是相通的,學(xué)習(xí)LabVIEW也無法繞過軟件工程等等能力的培養(yǎng),比如不會做需求分析就沒法實現(xiàn)良好的軟件系統(tǒng)。但如果只是想解決一些LabVIEW所擅長解決的小問題(某些時候可能是大問題),那你會發(fā)現(xiàn)學(xué)習(xí)、開發(fā)的效率是相當?shù)母摺1窘坛淌褂玫氖荓abVIEW8.2 中文版,好多朋友可能習(xí)慣于使用各版本的英文版,對此表示嚴重支持!但如果剛要開始學(xué)LabVIEW的小盆友,無疑選擇中文版更容易上手。1.2 從控件選板和工具選板看LabVIEW的強項現(xiàn)在我們就來看看LabVIEW開發(fā)環(huán)境給我們提供了哪些前面板控件、框圖程序常量或子VI(即能直接拿
16、來用的LabVIEW子程序)。1.2.1 LabVIEW前面板控件建立VI后,在“查看”菜單選擇“控件選板”,就能夠調(diào)出前面板控件選板。當然,如果你嫌它煩不想老在眼前晃,可以關(guān)掉它,使用時只要在VI的前面板區(qū)域點擊右鍵就可以了。如右圖1.13所示,前面板的各種控件以分類(圖標+文字)來表示。如果看到右上角有一黑色三角形,那說明這是一個空間集合,點開后會有該類的各種控件。 圖1.13 前面板控件以下我們就來看一下常用的LabVIEW新式前面板控件(所謂新式指有點3D風格的控件,是和原來老版本的空間風格不同的。有的小盆友喜歡老版本的風格,那在“經(jīng)典”一類中還能找到。另外我比較喜歡“系統(tǒng)”風格的控件
17、,主要是設(shè)計的前面板同常用的Windows界面非常統(tǒng)一)。 數(shù)值選板里面有各種輸入輸出為數(shù)字的控件,如數(shù)值、時間、進度條、顏色等等。常用的各數(shù)值輸入/輸出控件均可以選擇各種表示法,如各種整型、浮點型等等,稍后會具體介紹。 布爾選板里面有各種輸入輸出為布爾量的控件,如按鈕(按下/彈起)、開關(guān)(開/關(guān))、指示燈(亮/不亮)、選擇框(選中/未選中)等,這些控件只有兩種狀態(tài):真和假,否則就不是布爾量了(當前切換方式有好多種)。 說道字符串和路徑控件,你是否經(jīng)常會碰到Windows程序彈出的各種對話框讓你輸入某些信息?是否用過選中磁盤上的某個文件的按鈕?沒錯,字符串和路徑控件就是干這個用的。 數(shù)組、矩陣
18、和簇比較有特點。數(shù)組控件用來直接從前面板輸入/輸出各種維數(shù)的數(shù)組;矩陣和它比較類似;而簇呢,則同C語言中的結(jié)構(gòu)體很像,將各種你需要的數(shù)據(jù)類型組成特定的數(shù)據(jù)格式;而錯誤輸入/輸出則是一種特定格式的簇,專門用來進行LabVIEW程序錯誤信息的輸入/輸出顯示。 這里面都是Windows編程經(jīng)常用到的,包括列表框、表格、樹形結(jié)構(gòu)控件等等。 圖形控件是學(xué)習(xí)LabVIEW不可不會的。它包括波形顯示的各種二維、三維圖表、圖片控件以及多種專用圖形控件,需要用到DAQ的小盆友們肯定要大笑了。不得不說的是,LabVIEW提供的三維圖表、圖形控件應(yīng)該都是Windows的ActiveX控件,用起來非常不爽,個人感覺。
19、 下拉列表與枚舉控件是Windows編程中常用的人機交互控件,LabVIEW也為你想到了,不過可別報太大希望,畢竟LabVIEW的本行不在這兒,但一般的功能也基本有了。 容器類控件,其實就是能包含或引入其它控件的LabVIEW控件,如大家非常熟悉的選項卡控件,另外還有分割欄控件,此外還有功能強大的ActiveX容器、.Net容器控件,顧名思義也能知道其強大功能了。 輸入/輸出控件是用來輸入或配置你的輸入輸出資源的,比如信號采集時通道的選擇、板卡資源的選擇、串口資源的選擇等等。 提到引用肯定有的小盆友兩眼冒光,沒錯,LabVIEW也提供了引用。于是,你可以不通過連線便能夠調(diào)用了(順便說一句,不通
20、過連線調(diào)用的方法在LabVIEW里還是很多的)。 變體,這東東比較象VB里面的變體類型,如果你需要可以把任何數(shù)據(jù)類型轉(zhuǎn)換為變體。類則是最近版本里才提供的,號稱LabVIEW也要支持面向?qū)ο蟮某绦蛟O(shè)計,不過到底如何還是日后再說了。 修飾,各種形狀讓你的界面更美觀。當然修飾只能是修飾,就像孔雀就是孔雀,無論如何也不會飛到枝頭變成鳳凰,哦,對不起,唐伯虎看多了。修飾只起美化作用,不信你看看,前面板上的修飾控件,在程序框圖里你是找不到的-其他功能控件可是絕對會找到程序框圖中的對應(yīng)變量。 系統(tǒng)、經(jīng)典、Express、好多控件,一句話,如果你用得到,你就順著分類一層層去找。1.2.2 設(shè)計一個示波器前面板
21、為了熟悉一下各種控件,那就動手設(shè)計一個典型的界面吧,對LabVIEW來說,最典型的就是示波器面板了。下面就是一個示波器前面板,試一試,把它做出來?。ㄅ?,對了,這是LabVIEW自帶的例子,你可以在幫助-查找范例里面搜索Two Channel Oscilloscope就能找到,還有左上 圖1.14 示波器前面板角的標志其實是圖片直接貼到前面板上的。)這一部分我們不只熟悉一下部分前面板控件,還要學(xué)會用右鍵,沒錯,LabVIEW中右鍵的功能很好很強大,很傻很天真,簡直是不可或缺的。好的,先找?guī)讉€控件吧,當然我們就用常用風格的就行,同樣的功能可選控件很多,你只要先組合出一個就行。試一試,先用波形圖控件
22、和裝飾控件組合成大致的樣子,如圖1.15所示。圖1.15 示波器UI設(shè)計1哦,我明白看起來不一樣,那我們就在波形圖上點右鍵,把我們不希望看到的左上角的標簽和右上角的圖例隱藏掉。點擊右鍵顯示項,勾掉相應(yīng)的對號就可以了。不用說,你肯定注意到了右鍵下有很多選項,比如創(chuàng)建、替換、數(shù)據(jù)操作、高級等等。這些菜單或之下的次級菜單提供給你了各種快捷操作,當然是針對當前控件的。隱藏掉波形圖的標簽和圖例后,稍微調(diào)整一下大小,那么具體布局差不多了。那么我們仿照示例修改波形圖的背景色為黑色。這就用到了工具選板的設(shè)置顏色。這只毛筆式樣的東東就是用來設(shè)置前景色和背景色的,如果你想問什么是前景色什么是背景色,哦,打開Win
23、dows自帶的畫圖工具體會一下吧。你只要在設(shè)置顏色工具的的前景色顏色塊或背景色顏色塊上點右鍵,便能選擇你想要的前景背景色。我們就把前景來個一篇漆黑,然后刷一下波形圖的邊框,吼吼,神秘的黑色。不過坐標看不見了怎么辦?沒關(guān)系,用工具選板中的文字工具,就是那個大A,選中一下,然后看到菜單欄下方你的前面板上方的快捷按鈕了沒有?點一下文字設(shè)置快捷按鈕,你會發(fā)現(xiàn)什么字體、樣式、顏色這些全都有!對了,你如果覺得這樣找來找去麻煩,那在波形圖控件上點右鍵屬性,找一找,這下滿足了吧。圖1.16 示波器UI設(shè)計2接下來就放置各種數(shù)字控件和布爾控件,還有一些文字說明,文字的東東就交給文字工具大A了。別的控件呢?你盡管
24、放上,熟悉一下有好處的。下面是多多少少做了個樣子,嘿嘿,有點手懶,你的肯定會好很多吧。順便說一句,給的事例的前面板是使用經(jīng)典控件(如圖1.18),努努力,你能夠做出一模一樣甚至更好的。圖1.17 示波器UI設(shè)計3 圖1.18 經(jīng)典控件面板當然,以上只完成了前面板控件的放置,沒有編寫任何框圖程序。如果你切換到框圖(通過點擊菜單窗口顯示框圖程序,或者Ctrl+E快捷鍵,再或者你雙擊任意一個前面板控件-裝飾除外),就能看到有一堆你放置的前面板各控件的VI圖標,如圖19所示。為了讓你的程序也能運行一下,像上圖17一樣顯示正弦波,我們就加一個簡單的波形發(fā)生VI。切換到框圖程序面板,通過點擊查看菜單函數(shù)選
25、板或右鍵直接點擊框圖程序面板空白處,你可以看到各種各樣現(xiàn)成的函數(shù)VI或常量。我們先不管別的,找到信號處理波形生成正弦波形VI,點擊放置到框圖程序里,將該VI右上角信號輸出那條線連到波形圖控件圖標上,OK了。點擊快捷按鈕的運行按鈕,看一看吧。對于虛擬儀器程序設(shè)計來說,UI設(shè)計是非常重要的,也是當前許多“研究論文”或教程里面忽略掉的。除了大家公認的簡潔實用等原則外,其實我個人認為要根據(jù)用途(也就是需求)來設(shè)計。比如若要實現(xiàn)類似示波器或其它測試系統(tǒng)程序,那最好是仿照普遍使用的示波器儀表面板進行設(shè)計和改進,如圖14所示;但如果是開發(fā)常用的交互程序,那么Windows系統(tǒng)風格無疑是比較好的選擇,你能看出
26、來嗎,右圖就是LabVIEW開發(fā)的配置對話框。1.2.3 LabVIEW函數(shù)選板LabVIEW函數(shù)選板提供了各種數(shù)據(jù)類型、常量、流程控制、功能函數(shù)等,實現(xiàn)功能強大的應(yīng)用程序就要靠這些幕后英雄了。函數(shù)選板最能體現(xiàn)LabVIEW圖形化編程的特點,我們來快速認識一下,如果你有其他編程語言的基礎(chǔ),那肯定不是有任何障礙了。建立VI后,在框圖程序窗口“查看”菜單選擇“函數(shù)選板”,或者在框圖程序區(qū)域點擊右鍵就可以調(diào)出函數(shù)選板,點開每一項都能夠得到眾多的可調(diào)用函數(shù),如右圖所示(當然,有可能一些朋友控件選板或函數(shù)選板的排列方式不太一樣,但沒有關(guān)系的)。以下簡單說明一下部分函數(shù)選板的功能。 結(jié)構(gòu)選板 用于控制框圖
27、流程的,只要一說起其中的函數(shù)VI你肯定就明白:For循環(huán)、While循環(huán)、條件(Case)結(jié)構(gòu)、事件結(jié)構(gòu)、定時結(jié)構(gòu)、順序結(jié)構(gòu)??梢哉f,任何編程語言都少不了的流程控制東東在這兒。 數(shù)組選板 還記得C語言里讓人又愛又恨的數(shù)組嗎?數(shù)組越界很危險,數(shù)組大小不能動態(tài)改變在這兒,不用管了,并且各種強大的數(shù)組函數(shù),如插入、刪除、拆分、搜索、排序讓你眼花繚亂! 簇與變體選板 前面已經(jīng)在前面板控件中介紹過了能放置在前面板的簇與變體控件,這兒則提供了各種操作方法VI,尤其是簇操作,讓你隨心所欲定義和操作自己的數(shù)據(jù)類型。 數(shù)值選板、布爾選板 在前面板空間中也有這些類型,框圖程序中可用的數(shù)值與布爾VI更多。數(shù)值類型、
28、數(shù)學(xué)常量、數(shù)學(xué)運算、數(shù)值轉(zhuǎn)換、復(fù)數(shù)操作等等,眼花繚亂,當然更高級功能(統(tǒng)計、微積分、線代、擬合、多項式)還得從專門的數(shù)學(xué)選板里找;而與或非、異或、同或等等布爾預(yù)算則在布爾選板里面。 文件選板 創(chuàng)建、刪除、讀、寫文檔,包括文本、二進制以及在兩者基礎(chǔ)上的電子表格、INI、XML和LabVIEW中自定義的各種文檔格式。選擇合適的數(shù)據(jù)類型關(guān)系著你的文件操作的效率和易用性,真的要具體問題具體分析。 字符串選板 值得大書特書!這是非常有用也是比較好用的,我們將在后面用一節(jié)來專門介紹一下。當然,絕不是挨個把字符串VI功能、連線翻譯一遍,那是LabVIEW幫助文檔干的活。 比較選板 常見的大于等于小于等函數(shù),
29、以及判別是否空、是否是某格式數(shù)據(jù)的VI,在程序流程選擇、導(dǎo)向時會經(jīng)常用到。 定時選板 和時間、定時有關(guān)的函數(shù),請進! 對話框與用戶界面選板 提供了簡單的提示框、錯誤警告、簡單輸入對話框等,要想有復(fù)雜的輸入輸出對話框怎么辦?自己設(shè)計了 波形選板 要知道,LabVIEW可是測控程序設(shè)計高手,同信號采集、分析、顯示打交道的小盆友一定得會用才行。哦,對了,波形也是一種數(shù)據(jù)結(jié)構(gòu),其實就是簇的一種。 應(yīng)用程序控制選板 如果你不想用連線的方式調(diào)用其他VI怎么實現(xiàn)?如果你想在自己的程序中控制LabVIEW的開啟運行怎么實現(xiàn)?這里可以算作一點點高級特性,你會體會到其強大的。 同步選板 還記得VC或其他語言中的信
30、號量、通知器或事件機制嗎?是不是很有用?還記得先入先出的隊列結(jié)構(gòu)嗎?如果你會使用同步選板中的VI,恭喜你,你的程序設(shè)計(不僅僅是LabVIEW程序設(shè)計)已經(jīng)入門了。 圖形與聲音選板 這個選板就不多做解釋了,顧名思義。不過可以簡單說一句,如果你半分鐘就能完成一個看圖軟件或音頻播放是不是很吃驚的事呢? 以上只是基本的函數(shù),還有更多的選板,尤其是LabVIEW擅長的-類似數(shù)學(xué)計算、信號采集與處理、儀器I/O。基本函數(shù)是高樓大廈的基礎(chǔ),而從本教程序言中我們就已經(jīng)知道,用LabVIEW做他擅長的才是王道。好的,我們就以一個例子結(jié)束本章,開始充滿樂趣的LabVIEW學(xué)習(xí)之旅,當然,這個例子也是LabVIE
31、W所擅長的,設(shè)計虛擬波形發(fā)生器(現(xiàn)在是有一點唬人)!1.2.4 虛擬波形發(fā)生器如圖1.19所示,前面板上主要就是一個波形圖控件、退出按鈕以及波形參數(shù)控件。注意,不要著急把所有的東東都放到前面板上,先看看我們用到了哪些框圖VI不遲。圖1.19 虛擬波形發(fā)生器前面板框圖程序涉及while循環(huán)、基本函數(shù)發(fā)生器、高斯白噪聲發(fā)生器以及延時等待(ms) 。如圖1.20所示,完成框圖程序的順序沒有嚴格要求,不過通常還是把流程控制VI拖進來,在這兒就是while循環(huán)。默認循環(huán)右下角是循環(huán)條件(條件為真事停止或繼續(xù)),左下角的i則是循環(huán)次數(shù),從0開始。當然,如果不給循環(huán)條件連一個布爾按鈕或常量,這個程序肯定是不
32、能執(zhí)行的,那你可以放一個按鈕在前面板,然后在框圖程序中找到這個按鈕并連到循環(huán)條件上。當然,最快捷的是在循環(huán)條件上點右鍵,在菜單中選擇創(chuàng)建輸入控件(常量等也可以,由功能決定)。在VI連線端點右鍵后直接創(chuàng)建輸入輸出控件是最常用的快速完成程序的方法。圖1.20 虛擬波形發(fā)生器程序框圖好的,我猜該程序難倒你的應(yīng)該是用到的各函數(shù)在哪兒找:while循環(huán)就不必說了;波形圖也非常容易找;延時等待無疑是在“定時”這一分組里;而基本函數(shù)發(fā)生器、高斯白噪聲發(fā)生器就在信號處理波形生成里;至于加號,不許問!可能你也注意到了,前面板上都是中文標簽,后面的程序里面為什么這么多英文名稱?你很仔細,這是通過右鍵快速生成控件的
33、時候經(jīng)常會碰到的,你在前面板控件上右鍵就會看到顯示項標題上打了勾,但標簽上沒有。那么如果在對應(yīng)的框圖程序圖標上點右鍵呢,沒錯,英文的是標簽!標題和標簽是不一樣的,后面用到屬性節(jié)點時好好講一下。當然,如果你直接在前面板上建立一個控件,一般標簽和標題的文本是一致的哦。簡單說一下這個程序。該虛擬波形發(fā)生器能夠產(chǎn)生常見的正弦波、三角波、鋸齒波、方波(通過基本函數(shù)發(fā)生器),根據(jù)需求可以調(diào)整波形參數(shù);同時能夠給信號添加指定強度的高斯白噪聲;波形通過圖形方式顯示;當然,while循環(huán)是要整個波形產(chǎn)生、顯示的過程持續(xù)進行,不過為了避免循環(huán)全速進行占用過多資源,加了一個500ms的延時。(循環(huán)中的延時是非常常用
34、的,別忘了)最后我們的程序執(zhí)行時面板看起來比較清爽,少了菜單、快捷按鈕等等,這個樣式的實現(xiàn)很簡單:在你的程序文件菜單里選擇VI屬性,找到窗口外觀一項,剩下的就不用再啰嗦了。OK,LabVIEW實踐之路第一章要寫結(jié)語了,就兩句話:用好LabVIEW也得付出努力,用他做應(yīng)該做的。第二章 強筋健骨:由程序流程的控制展開按照通常的教程,現(xiàn)在一般要介紹各種數(shù)據(jù)類型,例如數(shù)字、字符串、數(shù)組與簇等等。不過從程序結(jié)構(gòu)入手,在掌握流程控制VI的同時認識各數(shù)據(jù)類型應(yīng)該更有效,畢竟如果老是把目光集中在樹木上,那很容易忘了郁郁蔥蔥的森林。本章仍然通過實例來學(xué)習(xí),依次完成For循環(huán)、While循環(huán)、條件結(jié)構(gòu)、順序結(jié)構(gòu)、
35、事件結(jié)構(gòu)、公式節(jié)點等LabVIEW實例。2.1 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是任何程序設(shè)計語言都必不可少的,尤其是For循環(huán)、While循環(huán)等。以下將通過實例學(xué)習(xí)LabVIEW的循環(huán)結(jié)構(gòu)以及移位寄存器的用法。2.1.1 For循環(huán)看一下右圖,F(xiàn)or循環(huán)的尊容很容易記。左上角N是循環(huán)體內(nèi)程序執(zhí)行的循環(huán)次數(shù),內(nèi)部的i是當前循環(huán)次數(shù)(第一次從0開始計數(shù))。LabVIEW的For循環(huán)執(zhí)行過程中是無法中斷跳出的,這一點必須明白。另外,雖然左上角的N用來連接總的循環(huán)次數(shù)值,但許多情況下For循環(huán)可以應(yīng)用“自索引”方法,不用連接N,讓循環(huán)自動進行,這種方法在數(shù)組等類型執(zhí)行For循環(huán)時非常普遍。(其實說白了也很簡單,諸如
36、新的JAVA版本也支持數(shù)組等類型的迭代而不用先求出數(shù)組的length,別急,一會兒給幾個例子對比一下) 好的,我們先來最簡單的,同時產(chǎn)生1024點的隨機數(shù)(01之間)和一個周期的正弦波,如圖2.1所示。 圖2.1 For循環(huán)仿真波形上面的例子中For循環(huán)次數(shù)為1024次,循環(huán)體內(nèi)上部為隨機數(shù)產(chǎn)生器,下部是正弦函數(shù)值。每次循環(huán)各產(chǎn)生一個隨機數(shù)和的正弦值。注意:當循環(huán)完成退出時,循環(huán)體右側(cè),邊框上連接內(nèi)外數(shù)據(jù)的小方框就起到了自動索引的作用:將你各次循環(huán)的結(jié)果按順序排列成數(shù)組進行輸出。當然,有時候我們不需要自索引輸出,那可以在索引方框上點右鍵取消的,不過想一想,取消自索引后輸出應(yīng)該是什么?我問的問題
37、太沒有難度了,呵呵。當然,自索引在輸入端也是可以使用的,而且會帶來意想不到的方便,尤其是同移位寄存器結(jié)合使用。閑話少說,下面我們就實現(xiàn)一個求一維DBL數(shù)組最大值和最小值的程序。哦,為了養(yǎng)成良好習(xí)慣,我們畫一下算法的流程簡圖吧(對了,下面的流程簡圖說明一下問題幫助編程,相信你能做得更好)。如圖2.2所示,為了便于說明問題,我們假定數(shù)組非空。我們直接給出了實現(xiàn)的程序,注意,圖2.3和圖2.4的兩個框圖程序都能夠得到圖2.5所示的正確結(jié)果,可能其中幾個vi、循環(huán)兩側(cè)的移位寄存器以及2.3中的條件結(jié)構(gòu)有些陌生。除了這些,兩個程序有什么不一樣嗎?圖2.3 求數(shù)組最大最小值框圖程序1圖2.4 求數(shù)組最大最
38、小值框圖程序2圖 2.2 算法流程圖先說一下有些陌生的東西。圖2.3中在循環(huán)里應(yīng)用了條件結(jié)構(gòu),條件框可對真和假兩種情況作出不同的處理,不過不要急,下一小節(jié)再講它。那么數(shù)組在開始循環(huán)之前使用獲得了數(shù)組長度,并賦給For循環(huán)的循環(huán)次數(shù)N,這時候在循環(huán)內(nèi)部i就會從0循環(huán)遞增到N-1,于是我們使用索引數(shù)組函數(shù)依次獲得第i個數(shù)組元素。每次獲得當前元素后,都同最大值max、最小值min進行比較,以獲得整個數(shù)組的最大最小值。當然,我們用-初始化max和用+初始化min都是為了從第一個數(shù)組元素開始就能夠正確的完成最大值、最小值的查找。這兒有一個關(guān)鍵的實現(xiàn)-移位寄存器,也就是循環(huán)框上的。你可以在循環(huán)框上點右鍵,
39、選擇“添加移位寄存器”便會發(fā)現(xiàn)在循環(huán)框架的左右出現(xiàn)了一對。沒錯,移位寄存器是成對出現(xiàn),它的工作原理是:第i次循環(huán)的輸出(右側(cè))即是第i+1次循環(huán)的輸入(左側(cè))。具體到圖2.3所示的程序,進入循環(huán)體時max移位寄存器初始化為-,而min初始化為+。第一次循環(huán)時數(shù)組元素3讀入,分別與max、min的值比較,結(jié)果是max、min被置為3;第二次循環(huán)時max、min的值都已經(jīng)變成了3,這一次循環(huán)讀入2,比較后min的結(jié)果置為了2。以此類推,直至循環(huán)結(jié)束。圖2.4功能與圖2.3完全一樣,注意,為什么For圖2.5 程序前面板循環(huán)左上角的循環(huán)次數(shù)N并沒有賦值?因為數(shù)組進入循環(huán)體是使用了自索引(如果你連接數(shù)
40、組和For循環(huán)體,默認就是自索引),F(xiàn)or循環(huán)回自動從頭到尾依次獲取每一個元素的值,對我們編程節(jié)省不少力氣。另外程序用選擇函數(shù)代替條件結(jié)構(gòu),這個函數(shù)能夠用于大多數(shù)雙值選擇的情況,但必須是相同類型(如從兩個整型、兩個字符串中根據(jù)真假選擇),上方輸入提供邏輯真時的輸出,下方輸入則提供邏輯假時的輸出,中間則是判別邏輯(真或假)??隙ㄓ袑W(xué)過LabVIEW的小盆友會說,數(shù)組最大值、最小值有專門的VI可以調(diào)用,不用這么麻煩。沒錯,數(shù)組函數(shù)里數(shù)組最大值與最小值函數(shù)能夠直接完成此功能,并且給出最大值、最小值出現(xiàn)的位置。我們舉例是為了學(xué)習(xí),并且你也可以繼續(xù)完善我們的例子實現(xiàn)更多的功能。如果我們在程序運行前無法知
41、道循環(huán)次數(shù)怎么辦?或者需要中途可以中斷跳出的循環(huán)時?當然是While循環(huán)了。2.1.2 While循環(huán)While循環(huán)特征也很明顯,除了內(nèi)部的當前循環(huán)次數(shù)i同F(xiàn)or循環(huán)相同外,由于通常用于無法預(yù)知循環(huán)次數(shù)的循環(huán),所以內(nèi)部的是用來連接跳出循環(huán)的條件:輸入為真時結(jié)束循環(huán)。如果你在上點右鍵,可以選擇輸入為真時繼續(xù)循環(huán)(即輸入為假時結(jié)束循環(huán)),圖標變?yōu)椤:玫?,我們先來實現(xiàn)一個簡單的While循環(huán):求0+1+2+n的值,置于n是多少,我們就讓它隨機吧,直到我們點擊退出按鈕時再停止。最終需要顯示n的值和求和的值。程序框圖和前面板如圖2.6所示。 圖2.6 While循環(huán)實例使用While循環(huán)有幾個問題需要注
42、意:1、 計數(shù)i從0開始,While循環(huán)至少會運行一次。而For循環(huán)如果循環(huán)次數(shù)N設(shè)為0(或空數(shù)組自索引),則一次也不會循環(huán)。2、 合理循環(huán)終止方式。如果是通過內(nèi)部條件觸發(fā)(如循環(huán)3000次后自動停止等),則要注意算法不要有問題;如果是通過點擊按鈕退出,那要注意按鈕的機械動作(后面會講)和循環(huán)條件類型。3、 While循環(huán)里面盡量不要出現(xiàn)While循環(huán)的嵌套。While循環(huán)里面還有While循環(huán)很容易導(dǎo)致死循環(huán),而且?guī)缀跛械膯栴}都有不適用嵌套的解決方法。4、 While循環(huán)內(nèi)要根據(jù)情況設(shè)置延時。許多While循環(huán)是需要一直運行來進行事件處理,如果不加延時會全速循環(huán),耗費大量系統(tǒng)資源。而許多情
43、況下,幾十甚至幾百個毫秒的延時不會對程序的功能和人機交互帶來任何問題。許多東西需要在實踐中總結(jié)和改進,并且經(jīng)驗也不是適用于一切場合的。那么我們再來實現(xiàn)一個While循環(huán)的例子:使用While循環(huán)繪制圖表,我們用到While循環(huán)、隨機數(shù)發(fā)生函數(shù)、波形圖表(chart)、延時函數(shù),如圖2.7。圖2.7 While循環(huán)波形仿真通過調(diào)整延時的毫秒倍數(shù),你能很輕松的控制循環(huán)的速度。但注意的是,這種定時方式不是一種精確的方法,不能用于非常精密的需求中。還有一點必須強調(diào)一下,While循環(huán)(包括For循環(huán)等)中如果存在并行執(zhí)行的框圖程序,那么只有等到所有程序都執(zhí)行完一次循環(huán)后,才能進入下一次循環(huán)的執(zhí)行。如果
44、出現(xiàn)有快有慢的程序段,那對不起了,等著吧,這里的規(guī)矩就是不拋棄不放棄!圖2.8很好的說明了問題。 圖2.8 循環(huán)內(nèi)程序并行執(zhí)行在2.8的While循環(huán)中,兩個紅框是并行的程序,其中一個用來處理各種計算等任務(wù),另一個用來檢測按鈕狀態(tài)決定是否退出。由于檢測狀態(tài)非常簡單,所以瞬時便執(zhí)行完,而計算任務(wù)則需要耗費一秒多時間,所以如果在這期間按鈕狀態(tài)變?yōu)榱苏?,對不起,當時是不能退出程序的,等到這一次循環(huán)的計算任務(wù)也完成了,程序進入下一次循環(huán)時才能退出。同樣,三個紫色框內(nèi)是低一層的并行任務(wù),由于其中的For循環(huán)最耗費時間,從前面板執(zhí)行結(jié)果可以看出,當最下面的顯示“While循環(huán)i值”執(zhí)行完顯示到3時,F(xiàn)or
45、循環(huán)還在努力中,顯示為2。所以并行是好東西,但要用好。我曾看到過有人編寫的采集程序大致每秒鐘循環(huán)50次;但由于把一些網(wǎng)絡(luò)查詢反饋等比較耗時的操作放到了采集循環(huán)中,就導(dǎo)致了采集程序一直等著其執(zhí)行完成后才能繼續(xù)下一次循環(huán),經(jīng)常會緩沖溢出報錯和丟失數(shù)據(jù)。(那怎么辦?后面會說的,別急)2.2 順序結(jié)構(gòu)顧名思義,順序結(jié)構(gòu)就是強制程序運行時的前后順序。有時候我們想將幾個程序段按順序執(zhí)行,而程序本身并沒有連線能夠保證這種順序(還記得前面說的嗎?LabVIEW的數(shù)據(jù)流向是順著連線從左往右的),那么你可以使用順序結(jié)構(gòu)。當然,如果連線能保證的,就不要像圖2.9的采集程序一樣畫蛇添足了,因為不使用順序結(jié)構(gòu)的結(jié)果是一
46、模一樣的,如圖2.10所示。圖2.9 帶有順序結(jié)構(gòu)的采集程序圖2.10 不含順序結(jié)構(gòu)的采集程序從上面的圖中我們認識了順序結(jié)構(gòu)的樣子之一,順序結(jié)構(gòu)還有層疊式的,主要是避免前后多個順序段串起來太長,顯示不方便。圖2.11所示為順序結(jié)構(gòu)的兩種形式。圖2.11 平鋪式和層疊式順序結(jié)構(gòu)順序結(jié)構(gòu)初始只有一個框,想要添加很簡單,直接在框上點右鍵添加就可以了。下面我們來完成一個順序結(jié)構(gòu)的程序:獲得一段程序運行耗費的時間。這兒將用到獲取當前時間的函數(shù)-獲取日期/時間(秒),在框圖的“定時”選板里。程序前面板和框圖如圖2.12所示。 圖2.12 獲取程序運行時間上面的框圖很簡單,就是在程序運行前獲取一下當前時間,
47、在程序結(jié)束后再獲取當前時間,兩者之差就是程序運行時間。順序結(jié)構(gòu)在這兒起了重要的作用。當然,運行一下程序你會發(fā)現(xiàn)每次得出的結(jié)果有點不同,想一想為什么?如果不加順序結(jié)構(gòu)上面程序會得到什么結(jié)果呢?這個問題我問得太簡單了 圖 2.13 刪除順序結(jié)構(gòu)后的結(jié)果2.3 事件結(jié)構(gòu)事件結(jié)構(gòu)的學(xué)習(xí)是挺激動人心的。不是說別的東東不重要,而是因為事件結(jié)構(gòu)是實現(xiàn)眾多UI事件響應(yīng)或其他內(nèi)部事件響應(yīng)的結(jié)構(gòu)類型。也許你學(xué)過VC的事件機制,確實很好很強大,但學(xué)習(xí)者不能太傻太天真,VC的事件機制學(xué)習(xí)曲線有點陡(嘿嘿,不如說MFC太陡,陡陡陡)。不過LabVIEW中的事件機制沒那么難辦,尤其是UI事件。閑話少說,先瞻仰事件結(jié)構(gòu)的尊
48、榮,如圖2.14所示。事件結(jié)構(gòu)也是由邊框圍成的封閉結(jié)構(gòu),結(jié)構(gòu)內(nèi)部就是響應(yīng)特定事件所要執(zhí)行的程序,結(jié)構(gòu)上方是所要響應(yīng)事件的名稱,即事件分支(圖2.14顯示的是響應(yīng)“超時”事件)。注意,以下幾句話比較重要,我們一句句解釋一下: 圖2.14 事件結(jié)構(gòu)1、 一個事件結(jié)構(gòu)可以有多個事件分支,即可以層疊多個框(可以右鍵添加刪除)。不好意思,這一句是廢話2、 同一個事件結(jié)構(gòu)里,不能出現(xiàn)兩個事件分支都對同一個事件進行響應(yīng)(注意,是“同一個事件結(jié)構(gòu)里”,不同事件結(jié)構(gòu)就沒人管了)。簡單說,在一個單位只能“一個蘿卜一個坑”,但不限制你去別的單位兼職。3、 同一個事件分支可以同時對多個事件進行響應(yīng),也就是說可以“殊途
49、同歸”。還有還有,不過先不往下列了,實踐之路就得先實踐。我們來完成第一個事件結(jié)構(gòu)的例子,是UI事件:判斷鼠標是否在前面板內(nèi)部,先上代碼如圖2.15。 圖2.15 事件結(jié)構(gòu)判別鼠標是是否進入前面板好的,我們來解釋一下。程序中的事件結(jié)構(gòu)共有3個事件分支:超時、鼠標進入窗格和鼠標離開窗格。超時是應(yīng)用程序事件,另外兩個則是窗格事件。超時事件左上角連著時間(50毫秒),也就是說當50ms時間沒有發(fā)生本事件結(jié)構(gòu)中其他任何事件分支時,程序?qū)⑦M入下一個循環(huán),那么很容易想到,如果我們不給超時事件賦值(或賦值為-1),那么程序會一直等待有事件分支發(fā)生。以下通過添加“鼠標進入窗格”事件說明事件結(jié)構(gòu)的編輯方法。右鍵點
50、擊事件結(jié)構(gòu)上方的分支列表,選擇“添加事件分支”后就進入了“編輯事件”對話框,如圖2.16所示。下方“事件源”中選擇你的事件的來源,是來自應(yīng)用程序(如超時事件)、窗格(如本例中的鼠標進入)以及某控件(如按鈕、文本框、列表框等等等等)。下方右側(cè)可以選擇特定的事件。那么上部的“事件說明符”列表有什么用嗎?看到和沒有?你可以在當前處理分支里面通過添加多個事件!當然也可以想刪誰就刪誰別急,下一個例子就會讓大家體驗一下。在添加了“窗格”的“鼠標進入”事件后,點擊確認完成本次添加,這時框圖程序的事件結(jié)構(gòu)中就多了該事件分支。為了響應(yīng)鼠標進入窗格的事件,我們在前面板放置一個字符串顯示控件圖2.16 編輯事件對話
51、框并賦值為“鼠標進入”,那么就能保證當鼠標進入前面板窗格時就會顯示“鼠標進入”字符。按照同樣的方法添加“窗格”的“鼠標離開”事件。這時問題來了,我們還想用剛才創(chuàng)建的前面板字符串顯示控件來提示“鼠標離開”,怎么辦?沒法把線連過去???那么我們就來使用一種不采用連線的數(shù)據(jù)流動或共享方法,在這兒可以用局部變量或?qū)傩怨?jié)點(這種方法之后會詳細說)等。我們看一下如圖2.17如何創(chuàng)建控件的局部變量,很簡單,右鍵!創(chuàng)建完成后,根據(jù)需要設(shè)置其是讀取或?qū)懭?,我們的例子當然是寫入,完成狀態(tài)字符串的更新。以上的例子很簡單,事件結(jié)構(gòu)的每一個事件分支均響應(yīng)一個事件,并且這些事件都是預(yù)定義的系統(tǒng)或UI事件。是不是覺得不夠過癮
52、?畢竟有些事件,特別是非UI事件,是必須由用戶自己定義的,這種情況怎么辦呢?很簡單,看圖2.17中的事例-當仿真數(shù)據(jù)大于0.97時顯示該數(shù)值并點亮紅燈半秒鐘(當然,該例中實際上我們可以不用事件結(jié)構(gòu)就能實現(xiàn)該功能,但許多情況下事件結(jié)構(gòu)是不錯的選擇)。 圖2.17 注冊用戶事件首先告訴大家,注冊用戶事件的子VI在函數(shù)選板對話框與用戶界面事件選板下,如右圖所示。對于用戶自己定義的事件,可以用這些VI來實現(xiàn),其流程是這樣的:首先需要“創(chuàng)建用戶事件”,這時需要連接你在事件中所要傳輸數(shù)據(jù)的類型給此VI,并且要給其一個唯一的標簽,就像圖2.17中的;然后注冊該事件,因為注冊事件后才有了事件句柄(嘿嘿,從VC
53、里面借用該詞,不一定準確)可以給處理程序使用;接下來在事件發(fā)生的框圖內(nèi)使用“創(chuàng)建用戶事件”并將值付給該VI;最后需要在事件結(jié)構(gòu)中處理該事件,創(chuàng)建分支的步驟同前一個例子一樣,不過注意的是,事件結(jié)構(gòu)默認樣式下邊框上沒有連接動態(tài)事件接線端的位置,那怎么辦?答對了!點擊右鍵選中就可以了。各位小朋友一定注意到了,上面例子用到了不少局部變量,對于結(jié)束程序的布爾按鈕用到了兩個,而對于報警燈也用到了兩個,這是不需要連線的共享方法(不過我更喜歡用屬性節(jié)點,嘿嘿,后面會有例子)。我們拿停止按鈕來解釋一下這種用法。注意,本例中有兩個while循環(huán),我們準備用一個按鈕來停止。前面已經(jīng)知道了,由于LabVIEW連線的數(shù)
54、據(jù)流本質(zhì),導(dǎo)致了沒有退出循環(huán)前,數(shù)據(jù)流連線無法直接送出去,因此就用按鈕的局部變量來實現(xiàn)。這兒必須注意按鈕等布爾控件對點擊事件的響應(yīng)方式有多種(右鍵能查看、修改),后面我們會細說。要保證點擊按鈕后,兩個循環(huán)都能退出,我們必須做到按鈕為“真”的狀態(tài)保持到兩個循環(huán)都退出以后,當然推出以后按鈕要置回“假”。上例中是我比較喜歡使用的方法,實質(zhì)上也是利用了數(shù)據(jù)流連線連到外面的順序框上保證了兩個循環(huán)都能退出。好了,這個例子不多說了,努努力,你肯定能夠?qū)崿F(xiàn)。如果一步步將所有的流程都列出來,那就不是學(xué)習(xí),而是純粹的模仿和重復(fù),加油吧!事件部分再給一個例子吧,就是通過一個事件分支判斷到底是鼠標那個鍵被按下或釋放,
55、程序如圖2.18所示。 圖2.19 一個事件分支響應(yīng)多個事件上例用一個事件分支響應(yīng)了兩個事件:鼠標按下和鼠標釋放,事件添加方式前面說過了,不會忘了?這個例子比較簡單,因為兩個事件(鼠標按下、鼠標釋放)是同一類型的,所以處理起來很簡單。好的,我們對于事件結(jié)構(gòu)的學(xué)習(xí)暫時到這兒,其實在這一部分還看到了多循環(huán)并行的使用以及局部變量的妙用。后面還有機會使用事件結(jié)構(gòu)完成非常實用的程序,主要是響應(yīng)各種按鈕事件、菜單事件以及各種自定義事件。當然,飯要一口口的吃,諸如21天精通某編程語言的圣經(jīng)屬于大仙們的讀物,作為人類我們可以省省啦。2.4 條件結(jié)構(gòu)條件結(jié)構(gòu),同樣是一個經(jīng)常會用到的類型,只要有其他編程語言的使用
56、經(jīng)歷,那絕對是小菜一碟。當然,即使沒有用過別的編程語言,照樣是一碟小菜。條件結(jié)構(gòu)的尊榮在2.1.1中見到過了,默認如右圖所示,不再羅嗦。但等等,為什么說“默認”如右圖呢?呵呵,這個問題提得好,這個問題提得妙,這個問題呱呱叫!從函數(shù)面板里選擇條件結(jié)構(gòu)放置到框圖程序后,條件結(jié)構(gòu)的左輸入端的選擇條件是布爾型,即如果輸入為“真”,進入一個分支進行處理;而如果輸入為假,則進入另一個分支進行處理。那么很簡單,我們有時候會使用其他類型的輸入作為條件項,如判斷計算結(jié)果,如果為0,1,2分別進行處理(這是數(shù)值型);如判斷某字符串是CHN、JPN、USA、WC分別進行處理(這是字符串型);當然還可以是LabVIE
57、W獨有的“錯誤型”,如右圖所示。條件結(jié)構(gòu)的用法類于其它編程中的Case結(jié)構(gòu),我們只要記住以下幾點就會基本的用法了(但要用好,還得加加油):1) 一組條件結(jié)構(gòu)的輸入條件類型必須是相同的。很容易理解,你如果輸入時布爾(真、假),那就不能出現(xiàn)其他的,如果是數(shù)字也都得是數(shù)字(而且是整形哦),字符串就得都是字符串。2) 各輸入必須能夠覆蓋所有可能的選項。這句話其實也容易理解,布爾量只有真、假兩種情況,沒有第三種。如果是數(shù)字或字符串怎么辦?那也得覆蓋所有的可能。想一想,怎樣能夠快速達到這條件?嗯,和其他編程語言一樣,設(shè)置一個默認選項!除了你明確規(guī)定的輸入外,其他都默認了不久全覆蓋了?比如輸入類型為整型,我們分別單獨處理輸入為0和1的兩種情形,然后再添加一個默
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年單位集體用餐協(xié)議模板解析
- 2024年機票代理購買協(xié)議范本
- 2024防火安全門供應(yīng)安裝協(xié)議
- 2024年建筑項目保險協(xié)議范例全書
- DB11∕T 1725-2020 蔬菜病蟲害全程綠色防控技術(shù)規(guī)程
- 2024年上海勞務(wù)派遣協(xié)議格式
- 2024年度牛肉購銷協(xié)議范本
- 2024年汽車托管租賃模板協(xié)議
- 2024年道路施工合作協(xié)議范本
- 文書模板-《住房換瓦協(xié)議書》
- 辦公室工作流程圖課件
- 東北風俗文化介紹-小學(xué)生講民俗課件
- 少林寺英文簡介-演講課件
- 初二上冊傳統(tǒng)文化魯教版
- 2023年科研誠信理論知識考核試題及答案
- 管道流量計算
- 管理英語3課件
- 鐘表經(jīng)典款式勞力士黑鬼
- 《法學(xué)第一課》讀后感
- 森林防火通道施工組織設(shè)計
- 從消費文化角度解讀波普藝術(shù)的特征
評論
0/150
提交評論