LaBVIEW第三章程序結(jié)構(gòu)_第1頁
LaBVIEW第三章程序結(jié)構(gòu)_第2頁
LaBVIEW第三章程序結(jié)構(gòu)_第3頁
LaBVIEW第三章程序結(jié)構(gòu)_第4頁
LaBVIEW第三章程序結(jié)構(gòu)_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

一、循環(huán)結(jié)構(gòu)1、While循環(huán)2、For循環(huán)二、分支結(jié)構(gòu)三、順序結(jié)構(gòu)四、公式節(jié)點五、事件結(jié)構(gòu)六、變量七、定時循環(huán)章程序結(jié)構(gòu)2021/6/271一、循環(huán)結(jié)構(gòu)1、While循環(huán)2、For循環(huán)2021/6/272

While循環(huán)示意圖2021/6/273While循環(huán)創(chuàng)建創(chuàng)建方法:選中→單擊左鍵→拖動→釋放左鍵While循環(huán)結(jié)構(gòu)2021/6/274While循環(huán)結(jié)構(gòu)說明1、重復(fù)端子:用于記錄和輸出已執(zhí)行的循環(huán)的次數(shù),2、條件端子:循環(huán)是否終止的條件端子。i的初始值為零。輸入的是一個布爾變量:真或假,While循環(huán)將一直執(zhí)行到連接條件端子上的布爾值變成真或假為止,取決于條件端子設(shè)置為“真(T)時停止”還是“真(T)時繼續(xù)”。2021/6/275

3、在條件端子上單擊右鍵即可進(jìn)行更改。如圖:4、While循環(huán)是一種框圖上的容器對象,即其內(nèi)部可循環(huán)嵌套。2021/6/276

While循環(huán)框圖內(nèi)添加代碼,有兩種方法:1、結(jié)構(gòu)創(chuàng)建好后添加代碼;2、在已有程序代碼的基礎(chǔ)上添加結(jié)構(gòu)。2021/6/277While循環(huán)運行流程While循環(huán)可以反復(fù)執(zhí)行循環(huán)體的程序,直至到達(dá)某個邊界條件。它類似于普通編程語言中的Do循環(huán)。While循環(huán)的框圖是一個大小可變的方框,用于執(zhí)行框中的程序,直到條件端子接收到的布爾值為FALSE。該循環(huán)有如下特點:(1)計數(shù)從0開始(i=0)。(2)先執(zhí)行循環(huán)體代碼,而后i+1,如果循環(huán)只執(zhí)行一次,那么循環(huán)輸出值i=0。(3)根據(jù)條件端子進(jìn)行判斷是否繼續(xù)循環(huán)。(4)While循環(huán)中的代碼至少要運行一次。

2021/6/278While循環(huán)運行流程While循環(huán)運行流程類似于如下的文本語言的偽代碼:DO

執(zhí)行子框圖While條件判斷的結(jié)果為繼續(xù)循環(huán)2021/6/279例:利用While循環(huán)產(chǎn)生隨機數(shù),當(dāng)產(chǎn)生的隨機數(shù)大于0.8時,循環(huán)停止。步驟如下:

1.打開前面板,新建兩個數(shù)值顯示控件,一個為循環(huán)次數(shù),一個顯示最后產(chǎn)生的那個大于0.8的隨機數(shù)。如圖:2021/6/27102.切換到程序框圖,放置一個While循環(huán),如左圖:3.放置隨機數(shù)函數(shù)到While循環(huán)內(nèi),并連線,如右圖:

2021/6/27114.放置比較函數(shù),將循環(huán)次數(shù)與重復(fù)端子連線,如左圖:5.運行,即可在前面板上看到結(jié)果,如右圖:2021/6/2712在程序框圖中,在數(shù)值顯示控件上單擊右鍵,可更改數(shù)值的類型,如圖:2021/6/2713注意:While循環(huán)的條件端子一定要有連線,否則程序無法運行!如圖:

2021/6/2714作業(yè):練習(xí)3-12021/6/27152、For循環(huán)For循環(huán)用于將某段程序執(zhí)行指定次數(shù)。和While循環(huán)一樣,它不會立刻出現(xiàn)在流程圖中,而是出現(xiàn)一個小的圖標(biāo),而后您可以修改它的大小和位置。具體的方法是,先單擊所有端子的左上方,然后按下鼠標(biāo),拖曳出一個包含所有端子的矩形。釋放鼠標(biāo)時就創(chuàng)建了一個指定大小和位置的For循環(huán)。2021/6/27162、For循環(huán)

For循環(huán)位于函數(shù)→編程→結(jié)構(gòu)→For循環(huán),如前圖:從圖中可以看到,F(xiàn)or循環(huán)將把它的框圖中的程序執(zhí)行指定的次數(shù),F(xiàn)or循環(huán)具有下面這兩個端子:N:計數(shù)端子(輸入端子)——用于指定循環(huán)執(zhí)行的次數(shù)。I:重復(fù)端子(輸出端子)——含有循環(huán)已經(jīng)執(zhí)行的次數(shù)。上圖顯示了一可以產(chǎn)生100個隨機數(shù)并將數(shù)據(jù)顯示在一個圖表上的For循環(huán)。在該例中,i的初值是0,終值是99。

2021/6/2717For循環(huán)舉例:產(chǎn)生10個隨機數(shù),并把最后一個顯示出來。步驟如下:

1.放置一個數(shù)值顯示控件到前面板,并改名為隨機數(shù)。

2.放置For循環(huán)到程序框圖,如圖:2021/6/27183.放置隨機數(shù)函數(shù)到程序框圖,并連線。4.計數(shù)端子上單擊右鍵,選擇創(chuàng)建常量,并輸入10,如圖:

2021/6/27195.運行程序,便可在前面板上看到結(jié)果。6.因為程序的運行的速度非常快,我們無法一個一個地看清所產(chǎn)生的10個隨機數(shù),我們可以在程序框圖中添加時間延遲控件。它位于函數(shù)→編程→定時→時間延遲,如圖:2021/6/27207.放置它到程序框圖上,選擇延遲的時間,即兩次循環(huán)之間的時間間隔。如圖:

8.將時間設(shè)置為1.000,點擊確定即可,再運行程序就可從前面板上看到所產(chǎn)生的隨機數(shù)了。

2021/6/2721練習(xí)3-2使用For循環(huán)2021/6/2722循環(huán)結(jié)構(gòu)內(nèi)外數(shù)據(jù)交換采用:隧道建立隧道方法。自動索引,針對數(shù)組而言。2021/6/27233、移位寄存器移位寄存器用于For循環(huán)或While循環(huán)中從一個迭代傳輸數(shù)據(jù)到下一個迭代,它由循環(huán)垂直邊框上一對反向相反的端子組成。添加方法:在邊框上單擊右鍵,選擇添加移位寄存器,就可進(jìn)行添加。如圖:右端子(帶向上箭頭的矩形)在每完成一次迭代后存儲數(shù)據(jù),移位寄存器將上次迭代的存儲數(shù)據(jù)在下一次迭代開始時移動到左端子(具有向下箭頭的矩形)上。2021/6/2724移位寄存器可存儲任何數(shù)據(jù)類型,包括數(shù)字,布爾,字符串和數(shù)組,但連接到同一個寄存器端子上的數(shù)據(jù)必須是同一類型。移位寄存器的類型與第一個連接到其端子之一的對象數(shù)據(jù)類型相同。2021/6/2725下面是1+2+3+4+…+100的程序,如圖:說明:進(jìn)行第一次運算的是0+0,F(xiàn)or循環(huán)中的重復(fù)端子是從0開始計數(shù),移位即寄存器在沒有初始化的情況下,默認(rèn)的數(shù)值是0,所以第一次運算的是0+0,第二次運算的是寄存器的0與重復(fù)端子的1相加,所以循環(huán)要進(jìn)行101次。而計數(shù)端子輸出的數(shù)據(jù)始終是101。2021/6/2726移位寄存器的初始化移位寄存器的初始化是非常必要的,因為只要用戶不退出VI,移位寄存器便可記錄上次運算完時的結(jié)果,所以上面的程序在第二次執(zhí)行時輸出的結(jié)果不是5050,而是10100!添加初始化即可,如圖:2021/6/2727例:計算1+2?。??。??。?n!在前面板上放置一個數(shù)值輸入控件“階次n”和一個數(shù)值顯示控件“求和結(jié)果”在程序框圖上放置兩個For循環(huán)嵌套結(jié)構(gòu),外層循環(huán)的計數(shù)端口與“階次n”連接,輸出是各個數(shù)的階乘所組成的一個數(shù)組。它的重復(fù)端子加1作為內(nèi)層循環(huán)的循環(huán)次數(shù),內(nèi)層循環(huán)利用一個移位寄存器實現(xiàn)階乘運算,移位寄存器的初始值設(shè)為1。同樣在程序框圖的右邊在放置一個For循環(huán)結(jié)構(gòu),它的計數(shù)端子沒有任何連接數(shù)據(jù),使用的是自動索引功能。這個循環(huán)的作用是對由階乘所組成的一個數(shù)組進(jìn)行索引,對索引出的各個元素進(jìn)行求和計算,最后將計算結(jié)果輸出給“求和結(jié)果”。2021/6/2728完成連線,如右圖:運行結(jié)果,如右圖:

2021/6/27294、反饋節(jié)點反饋節(jié)點和只有一個左端子的移位寄存器的功能相同,同樣用于在兩次循環(huán)之間傳遞數(shù)據(jù)。它是一種更簡潔的表達(dá)方法。(P66)2021/6/2730二、分支結(jié)構(gòu):CaseCase結(jié)構(gòu)含有兩個或者更多的子程序(Case),執(zhí)行哪一個取決于與選擇端子或者選擇對象的外部接口相連接的某個整數(shù)、布爾數(shù)、字符串或者標(biāo)識的值。必須選擇一個默認(rèn)的Case以處理超出范圍的數(shù)值,或者直接列出所有可能的輸入數(shù)值。Case結(jié)構(gòu)見下圖,各個子程序占有各自的流程框,在其上沿有相應(yīng)的子程序標(biāo)識:Ture、False或1、2、3…。按鈕用來改變當(dāng)前顯示的子程序(各子程序是重疊放在屏幕同一位置上的)。2021/6/27311、分支結(jié)構(gòu)的組成子框圖區(qū)域按鈕條件端子(選擇器端子)

條件端子相當(dāng)于C語言的switch后面的變量,每個分支按鈕標(biāo)簽相當(dāng)于case后的常量表達(dá)式。2021/6/2732Case結(jié)構(gòu)舉例目的:創(chuàng)建一個VI以檢查一個數(shù)值是否為正數(shù)。如果它是正的,VI就計算它的平方根,反之則顯示出錯。1.打開一個新的前面板,并按照下圖所示創(chuàng)建對象??刂茖ο笥糜谳斎霐?shù)值,顯示對象用于顯示該數(shù)值的平方根。2.照下圖創(chuàng)建流程圖。

2021/6/27332021/6/27343.從Functions?Structures中選擇一個Case結(jié)構(gòu),并放置在在流程圖中。Case結(jié)構(gòu)是一個可以改變大小的方框。先來做Ture的情況,照流程圖上半部分構(gòu)造。(1)GreaterOrEqualTo0?函數(shù)(Functions?Comparison)——如果輸入數(shù)值大于或者等于0就會返回一個TRUE值。(2)SquareRoot函數(shù)(Functions?Numeric)——返回輸入數(shù)值的平方根。(3)連好線(4)點擊Case框的選擇按鈕,轉(zhuǎn)入False情況編程(5)數(shù)值常數(shù)(Functions?Numeric)——這里用于顯示錯誤的代數(shù)值-999.00。(6)OneButtonDialog函數(shù)(Functions?Time&Dialog)——在這里它用于顯示一個對話框,內(nèi)容是Error...。(7)字符串常數(shù)(Functions?String)——用EditTextTools在對話框中輸入字符串。2021/6/2735(8)該VI在TRUE或者FALSE情況下都會執(zhí)行。如果輸入的數(shù)值大于等于0,VI會執(zhí)行TRUECase,返回該數(shù)的平方根,否則將會輸出-999.00,并顯示一個對話框,內(nèi)容為Error...。4.返回前面板,運行該VI。修改標(biāo)簽為Number的數(shù)字式控制對象的數(shù)值,分別嘗試一個正數(shù)和負(fù)數(shù)。注意,當(dāng)把數(shù)字式控制對象的值改為負(fù)數(shù)時,LabVIEW會顯示Case結(jié)構(gòu)的FALSECase中設(shè)置的出錯信息。5.保存該VI到LabVIEW\Activity目錄中的SquareRoot.vi。2021/6/2736本練習(xí)中的流程圖功能相當(dāng)于代碼式編程語言中的下列偽代碼:if(Number>=0)thenSquareRootValue=QRT(Number)elseSquareRootValue=-999.00DisplayMessage"Error.."endif2021/6/2737三、順序結(jié)構(gòu)順序結(jié)構(gòu)類似C語言的goto語句,它是一種圖形化的數(shù)據(jù)流式編程語言。在下面的左圖中,假設(shè)有A、B、C、D4個節(jié)點,其數(shù)據(jù)流向如下圖所示。按照數(shù)據(jù)流式語言的約定,任何一個節(jié)點只有在所有的輸入數(shù)據(jù)有效時才會執(zhí)行,所以圖中,當(dāng)且僅當(dāng)A、B、C3個節(jié)點執(zhí)行完,使得D節(jié)點的3個輸入數(shù)據(jù)都到達(dá)D節(jié)點后,D節(jié)點才執(zhí)行。

2021/6/2738順序結(jié)構(gòu)但是你要注意,這里并沒有規(guī)定A、B、C3個節(jié)點的執(zhí)行順序。在LabVIEW中這種情況下,A、B、C的執(zhí)行順序是不確定的,如果你需要對它們規(guī)定一個確定的順序,那就需要使用本節(jié)介紹的“順序結(jié)構(gòu)”。右圖是順序結(jié)構(gòu)的圖標(biāo),它看上去像是電影膠片。它可以按一定順序執(zhí)行多個子程序。首先執(zhí)行0幀中的程序,然后執(zhí)行1幀中的程序,逐個執(zhí)行下去。與Case結(jié)構(gòu)類似,這多幀程序在流程圖中占有同一個位置。2021/6/2739順序結(jié)構(gòu)

1、堆疊順序結(jié)構(gòu):與case結(jié)構(gòu)相似,都是在框圖窗口的同一位置堆疊多個子框圖。每個子框圖都有自己的序號,執(zhí)行時,按照序號從小到大逐個執(zhí)行,最小序號是0,每個子框圖稱為一個幀。

優(yōu)點:節(jié)省框圖窗口空間。

2、平鋪順序結(jié)構(gòu):可實現(xiàn)堆疊順序結(jié)構(gòu)同樣的功能,其區(qū)別在于表現(xiàn)形式不同。

優(yōu)點:當(dāng)幀數(shù)不多時,把每個幀平鋪,比較直觀,方便代碼閱讀。

3、添加局部變量:在堆疊順序結(jié)構(gòu)中,用添加局部變量的方法,使接入該變量的數(shù)據(jù)在當(dāng)前幀后面的各個幀中可以作為輸入數(shù)據(jù)使用。平鋪順序結(jié)構(gòu)可以不添加局部變量,因為每個幀都是可見的,不需要借局部變量機制在幀之間傳送數(shù)據(jù)。2021/6/2740例題:創(chuàng)建一個VI,計算生成等于某個給定值的隨機數(shù)所需要的時間。1、打開一個新的前面板,并按照下圖所示創(chuàng)建對象。假設(shè)約定數(shù)據(jù)是0到100范圍的整數(shù)。當(dāng)前值用于顯示當(dāng)前產(chǎn)生的隨機數(shù)?!皥?zhí)行次數(shù)”用于顯示達(dá)到指定值循環(huán)執(zhí)行的次數(shù)。匹配時間用來顯示達(dá)到指定值所用的時間。2021/6/2741流程圖2021/6/27421、在流程圖中放置順序結(jié)構(gòu)(Functions?Structures)。

用鼠標(biāo)右鍵單擊幀的邊框,在快捷菜單中選擇AddFrameAfter,創(chuàng)建一個新幀。重復(fù)這個步驟,再創(chuàng)建一個幀。共3楨。

2、選中第0楨,設(shè)置讀取初始時間(子)程序。第0幀的下邊框上含有一個小方框,其中有一個箭頭。這個方框叫做順序局部變量,可以在同一個順序結(jié)構(gòu)中的各個幀之間傳遞數(shù)據(jù)。

用鼠標(biāo)右鍵單擊第0幀的底部邊框,選擇AddSequenceLocal,創(chuàng)建順序局部變量。

順序局部變量顯示為一個空的方塊。當(dāng)您將某個功能函數(shù)與順序局部變量相連時,方塊中的箭頭就會自動顯示。

TickCount(ms)函數(shù)(Functions?Time&Dialog)——返回啟動到現(xiàn)在的時間(以毫秒為單位)。在這里例子里需要使用兩個這個函數(shù)。另一個在第2幀中。2021/6/27433、按圖連好線。轉(zhuǎn)入第1幀。該幀是匹配計算,內(nèi)含一個循環(huán)結(jié)構(gòu)。該圖中使用的新函數(shù)有:

RoundtoNearest函數(shù)(Functions?Numeric)——在該例中,它用于取0到100之間的隨機數(shù)到距離最近的整數(shù)。

NotEqual?函數(shù)(Functions?Comparison)——在該例中,它將隨機數(shù)和前面板中設(shè)置的數(shù)相比較,如果兩者不相等會返回TRUE值,否則返回FALSE。

Increment函數(shù)(Functions?Numeric)——在該例中,它將While循環(huán)的計數(shù)器加1。

4、按圖連好線。轉(zhuǎn)入第2幀

在第0幀中,TickCount(ms)功能函數(shù)將以毫秒為單位表示當(dāng)前時間。這個數(shù)值被連到順序局部變量,這樣它就可以被后續(xù)的幀使用。

在第1幀中,只要函數(shù)返回的值與指定值不等,VI就會持續(xù)執(zhí)行While循環(huán)。在第2幀中,TickCount(ms)功能函數(shù)以毫秒為單位返回新的時間。VI從中減去原來的時間(由第0幀通過順序局部變量提供)就可以計算出花費的時間。

5、返回前面板,在NumbertoMatch控制對象中輸入一個數(shù)值,執(zhí)行該VI。2021/6/2744四、公式節(jié)點(FormulaNode)公式節(jié)點是一個大小可變的方框,可以利用它直接在流程圖中輸入公式。從Functions?Structures中選擇公式節(jié)點就可以把它放到流程圖中。當(dāng)某個等式有很多變量或者非常復(fù)雜時,這個功能就非常有用。例如等式:y=x2+x+1使用公式節(jié)點可以表示為:利用公式節(jié)點可以直接輸入一個或者多個復(fù)雜的公式,而不用創(chuàng)建流程圖的很多子程序。使用文本編輯工具來輸入公式。創(chuàng)建公式節(jié)點的輸入和輸出端子的方法是,用鼠標(biāo)右鍵單擊第0幀的底部邊框,選擇AddInput(AddOutput)。再在節(jié)點框中輸入變量名稱。變量名對大小寫敏感。然后就可以在框中輸入公式。每個公式語句都必須以分號(;)結(jié)尾。2021/6/2745下面這個例子顯示了如何在一個公式節(jié)點中執(zhí)行不同條件時的數(shù)據(jù)發(fā)送。請閱讀下面這段程序代碼,如果X為正數(shù),它將算出X的平方根并把該值賦給Y,如果X為負(fù)數(shù),程序就給Y賦值-99。if(x>=0)theny=sqrt(x)elsey=-99endif可以用公式節(jié)點取代上面這段代碼,如右圖所示:注意:公式節(jié)點中變量字母X,Y大、小寫是有區(qū)別的,開方的函數(shù)sqrt(X)中函數(shù)名稱是小寫。公式節(jié)點中的函數(shù)和操作符與C語言中的基本相符,遇到特殊函數(shù)時查表即可。2021/6/2746例題:創(chuàng)建一個VI,它用公式節(jié)點計算下列等式:y1=x3–x2+5y2=m*x+bx的范圍是從0到10??梢詫@兩個公式使用同一個公式節(jié)點,并在同一個圖表中顯示結(jié)果。前面板:打開一個新的前面板,按照上圖(該圖中包含運行結(jié)果)創(chuàng)建前面板中的對象。波形圖顯示對象用于顯示等式的圖形。該VI使用兩個數(shù)字式控制對象來輸入m和b的值。2021/6/2747按照下圖創(chuàng)建流程圖。

在創(chuàng)建某個輸入或者輸出端子時,必須給它指定一個變量名。這個變量名必須與公式節(jié)點中使用的變量名完全相符。公式節(jié)點中,在邊框上單擊鼠標(biāo)右鍵,在快捷菜單中選擇AddInput,可以創(chuàng)建三個輸入端子。在快捷菜單中選擇AddOutput,創(chuàng)建輸出端子。x的范圍是從0到10(包括10),就必須連接11到計數(shù)端子。BuildArray(Functions?Array)——在這個例子中,它用于將兩個數(shù)據(jù)構(gòu)成數(shù)組形式提供給一個多曲線的圖形中。通過用變形工具拖拉邊角就可以創(chuàng)建兩個輸入端子。返回前面板,嘗試給m和b賦以不同的值再執(zhí)行該VI。2021/6/2748全局變量和局部變量1、全局變量和局部變量是LabVIEW用來傳遞數(shù)據(jù)的工具。2、用戶也許會經(jīng)常碰到這樣一種情況,既能夠?qū)Τ绦蛑幸粋€控件對象寫入數(shù)據(jù),又要能夠讀出它的數(shù)據(jù),這在數(shù)據(jù)流編程中是無法實現(xiàn)的,這也需要用到局部變量或者全局變量3、局部變量:用于一個程序太復(fù)雜的話,有時連線會很困難甚至無法連接;一個VI的多個位置實現(xiàn)對前面板控件的訪問。4、全局變量:主要是針對不同VI程序之間的通信。2021/6/2749局部變量建立局部變量的方法有兩種:1、一種是在程序框圖中直接添加,如左圖;2、另一種方法是右擊控件對象,在彈出的快捷菜單中執(zhí)行“創(chuàng)建/局部變量”如右圖。2021/6/2750全局變量全局變量與局部變量不同,它是在不同的程序之間

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論