




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章程序結(jié)構(gòu)5.1順序結(jié)構(gòu)5.2循環(huán)結(jié)構(gòu)5.3條件結(jié)構(gòu)5.4事件結(jié)構(gòu)5.5禁用結(jié)構(gòu)5.6公式節(jié)點(diǎn)第5章程序結(jié)構(gòu)5.1順序結(jié)構(gòu)程序結(jié)構(gòu)對(duì)任何一種計(jì)算機(jī)編程語(yǔ)言來(lái)說(shuō)都是十分重要的,它控制整個(gè)程序語(yǔ)言的執(zhí)行過(guò)程,一個(gè)好的程序結(jié)構(gòu),可以大大提高程序的執(zhí)行效率。LabVIEW作為一種圖形化的高級(jí)程序開(kāi)發(fā)語(yǔ)言,執(zhí)行的是數(shù)據(jù)流驅(qū)動(dòng)機(jī)制,在程序結(jié)構(gòu)方面除支持循環(huán)、順序、條件等通用編程語(yǔ)言支持的結(jié)構(gòu)外,還包含一些特殊的程序結(jié)構(gòu),如事件結(jié)構(gòu)、使能結(jié)構(gòu)、公式節(jié)點(diǎn)等等。由于LabVIEW是圖形化編程語(yǔ)言,它的代碼以圖形形式表現(xiàn),因此各種結(jié)構(gòu)的實(shí)現(xiàn)也是圖形化的。每種結(jié)構(gòu)都含有一個(gè)可調(diào)整大小的清晰邊框,用于包圍根據(jù)結(jié)構(gòu)規(guī)則執(zhí)行的程序框圖部分。結(jié)構(gòu)邊框中的程序框圖部分被稱為子程序框圖,從結(jié)構(gòu)外接收數(shù)據(jù)和將數(shù)據(jù)輸出結(jié)構(gòu)的接線端稱為隧道,隧道是結(jié)構(gòu)邊框上的連接點(diǎn)。程序結(jié)構(gòu)簡(jiǎn)介程序結(jié)構(gòu)對(duì)任何一種計(jì)算機(jī)編程語(yǔ)言來(lái)說(shuō)都是十分重要的,它控制整5.1順序結(jié)構(gòu)5.1.1LabVIEW程序數(shù)據(jù)流編程Result=(A+B)/C的控制流編程和數(shù)據(jù)流編程的流程圖LabVIEW作為一種圖形化的編程語(yǔ)言,有其獨(dú)特的程序執(zhí)行順序——數(shù)據(jù)流執(zhí)行方式(只有當(dāng)節(jié)點(diǎn)所有輸入點(diǎn)的數(shù)據(jù)都流到該節(jié)點(diǎn)時(shí),才會(huì)執(zhí)行該節(jié)點(diǎn))。節(jié)點(diǎn)在執(zhí)行時(shí)產(chǎn)生輸出數(shù)據(jù)并將該數(shù)據(jù)傳送給數(shù)據(jù)流路徑中的下一個(gè)節(jié)點(diǎn)。數(shù)據(jù)流經(jīng)節(jié)點(diǎn)的動(dòng)作決定了程序框圖上VI和函數(shù)的執(zhí)行順序。5.1順序結(jié)構(gòu)5.1.1LabVIEW程序數(shù)據(jù)流編程Result=(A+B)/C的LabVIEW實(shí)現(xiàn)
在數(shù)據(jù)流編程中,“獲取數(shù)據(jù)A”和“獲取數(shù)據(jù)B”沒(méi)有先后之分,兩個(gè)任務(wù)根據(jù)需要在時(shí)間上相互交疊,不僅如此,對(duì)于“獲取數(shù)據(jù)A”、“獲取數(shù)據(jù)B”、“執(zhí)行A+B”的過(guò)程與“獲取數(shù)據(jù)C”這個(gè)過(guò)程之間也沒(méi)有先后之分。多段代碼的并行執(zhí)行這兩段代碼的實(shí)際執(zhí)行過(guò)程并不是按照從左到右的順序先執(zhí)行第一段代碼再執(zhí)行第二段代碼的,這兩段代碼是并行獨(dú)立執(zhí)行的。這些因?yàn)樵贚abVIEW中自動(dòng)實(shí)現(xiàn)了多線程,從而使得代碼的執(zhí)行效率大大提高。Result=(A+B)/C的LabVIEW實(shí)現(xiàn)在數(shù)據(jù)流編5.1.2順序結(jié)構(gòu)的組成
在LabVIEW中,順序結(jié)構(gòu)一般有多個(gè)框架組成,從框架0到框架n,首先執(zhí)行框架0中的程序,然后執(zhí)行框架1中的程序……,這樣依次執(zhí)行下去。LabVIEW的順序結(jié)構(gòu)看起來(lái)就像放映機(jī)中的電影膠片按照順序一副圖像接一副圖像的放映,而LabVIEW順序結(jié)構(gòu)是按照順序一幀(框架)接一幀順序執(zhí)行的。1.層疊式順序結(jié)構(gòu)5.1.2順序結(jié)構(gòu)的組成在LabVIEW2.平鋪式順序結(jié)構(gòu)層疊式順序結(jié)構(gòu)的優(yōu)點(diǎn)是節(jié)省程序框圖窗口空間,但用戶在某一時(shí)刻只能看到一幀代碼,這會(huì)給程序代碼的閱讀和理解帶來(lái)一定的難度。平鋪式順序結(jié)構(gòu)比較直觀,方便代碼的閱讀,但當(dāng)它占用的窗口空間較大。兩種順序結(jié)構(gòu)可以通過(guò)“替換為平鋪式/層疊式順序”菜單選項(xiàng)可以相互轉(zhuǎn)換,2.平鋪式順序結(jié)構(gòu)層疊式順序結(jié)構(gòu)的優(yōu)點(diǎn)是節(jié)省程序框圖窗口空5.1.3順序結(jié)構(gòu)中數(shù)據(jù)傳遞在順序結(jié)構(gòu)的編程過(guò)程中,在不同的幀之間可能需要傳遞數(shù)據(jù),順序結(jié)構(gòu)外部和內(nèi)部也可能存在數(shù)據(jù)傳遞。順序結(jié)構(gòu)有層疊式和平鋪式兩種結(jié)構(gòu),這兩種結(jié)構(gòu)中不同幀之間的數(shù)據(jù)傳遞方式是不同的,但這兩種結(jié)構(gòu)內(nèi)部與外部之間的數(shù)據(jù)傳遞方式是相同的。1.層疊式順序結(jié)構(gòu)中的數(shù)據(jù)傳遞層疊式順序結(jié)構(gòu)通過(guò)局部變量的機(jī)制來(lái)實(shí)現(xiàn)不同幀之間的數(shù)據(jù)傳遞的。在層疊式順序結(jié)構(gòu)的邊框上單擊右鍵彈出快捷菜單,選擇“添加順序局部變量”選項(xiàng),在順序結(jié)構(gòu)邊框上出現(xiàn)一個(gè)小方塊(所有幀程序框的同一位置都有),表示添加了一個(gè)局部變量。小方塊可以沿框四周移動(dòng),顏色隨傳輸數(shù)據(jù)類型的系統(tǒng)顏色發(fā)生變化。局部變量局部變量寫入(賦值)之前幀的局部變量將不可用。局部變量讀取5.1.3順序結(jié)構(gòu)中數(shù)據(jù)傳遞在順序結(jié)構(gòu)的編程過(guò)程中,在2.平鋪式順序結(jié)構(gòu)中的數(shù)據(jù)傳遞在平鋪式順序結(jié)構(gòu)中,每個(gè)幀都是可見(jiàn)的,不需要借助局部變量來(lái)實(shí)現(xiàn)幀間的數(shù)據(jù)傳遞,故平鋪式順序結(jié)構(gòu)不能添加局部變量。平鋪式順序結(jié)構(gòu)中的數(shù)據(jù)通過(guò)連線直接穿過(guò)幀壁(隧道)進(jìn)行傳遞。3.順序結(jié)構(gòu)外部與內(nèi)部的數(shù)據(jù)交換順序結(jié)構(gòu)外部與內(nèi)部之間的數(shù)據(jù)傳遞是通過(guò)在結(jié)構(gòu)邊框上建立隧道來(lái)實(shí)現(xiàn)的。隧道有輸入隧道和輸出隧道,輸入隧道用于從外部向內(nèi)部傳遞數(shù)據(jù),輸出隧道用于從內(nèi)部向外部傳遞數(shù)據(jù)。2.平鋪式順序結(jié)構(gòu)中的數(shù)據(jù)傳遞在平鋪式順序結(jié)構(gòu)中,每個(gè)幀都在順序結(jié)構(gòu)執(zhí)行前,輸入隧道上得到輸入值,在執(zhí)行結(jié)構(gòu)的過(guò)程中,這個(gè)值保持不變,且每幀都能讀取該值。只能在某一幀中向輸出隧道寫入數(shù)據(jù),如在超過(guò)一個(gè)幀中對(duì)同一輸出隧道賦值,則會(huì)引起多個(gè)數(shù)據(jù)源錯(cuò)誤,輸出隧道上的值只能在整個(gè)順序結(jié)構(gòu)執(zhí)行完后才會(huì)輸出。在順序結(jié)構(gòu)執(zhí)行前,輸入隧道上得到輸入值,在執(zhí)行結(jié)構(gòu)的過(guò)程中,5.1.4順序結(jié)構(gòu)應(yīng)用舉例本實(shí)例程序具有以下功能:輸入一個(gè)0-10000的整數(shù),測(cè)量計(jì)算機(jī)利用隨機(jī)數(shù)產(chǎn)生器需要多長(zhǎng)時(shí)間才能產(chǎn)生與之相等的數(shù)。在給定一個(gè)整數(shù)后,程序開(kāi)始運(yùn)行,記下開(kāi)始運(yùn)行時(shí)間并開(kāi)始產(chǎn)生隨機(jī)數(shù),產(chǎn)生的隨機(jī)數(shù)與給定的數(shù)值相比較,當(dāng)兩者相等時(shí),程序停止運(yùn)行并記下程序停止運(yùn)行時(shí)間,最后計(jì)算兩時(shí)間差便得到題目需要計(jì)算的時(shí)間。由于需要用到前后兩個(gè)時(shí)刻的差,即用到了先后次序,故可用順序結(jié)構(gòu)來(lái)解決此題。5.1.4順序結(jié)構(gòu)應(yīng)用舉例本實(shí)例程序具有以下功能:輸入一5.2循環(huán)結(jié)構(gòu)5.2.1For循環(huán)1.For循環(huán)的構(gòu)成for(i=0;i<N;i++){
循環(huán)體}最基本的For循環(huán)由循環(huán)框架、總數(shù)接線端N和計(jì)數(shù)接線端i組成。For循環(huán)中程序?qū)ο蟮膬煞N添加方法將對(duì)象拖曳到已放置的循環(huán)結(jié)構(gòu)內(nèi)將循環(huán)結(jié)構(gòu)包圍在已存在的對(duì)象周圍5.2循環(huán)結(jié)構(gòu)5.2.1For循環(huán)1.For循環(huán)的2.For循環(huán)的執(zhí)行過(guò)程For循環(huán)的執(zhí)行流程:在開(kāi)始執(zhí)行前,從循環(huán)總數(shù)接線端子讀入循環(huán)執(zhí)行次數(shù),然后循環(huán)計(jì)數(shù)接線端子輸出當(dāng)前已經(jīng)執(zhí)行循環(huán)次數(shù)的數(shù)值(從0開(kāi)始),接下執(zhí)行循環(huán)框架中的程序代碼,循環(huán)框架中的程序執(zhí)行完后,如果執(zhí)行循環(huán)次數(shù)未達(dá)到設(shè)定次數(shù),則繼續(xù)執(zhí)行,否則退出循環(huán)。如果循環(huán)總數(shù)接線端子的初始值為0,則For循環(huán)內(nèi)的程序一次都不執(zhí)行。在循環(huán)執(zhí)行過(guò)程中,改變循環(huán)總數(shù)接線端的值將不改變循環(huán)執(zhí)行次數(shù),循環(huán)按執(zhí)行前讀入的循環(huán)總數(shù)接線端所確定的次數(shù)執(zhí)行。
利用For循環(huán)繪制正弦波曲線的實(shí)例2.For循環(huán)的執(zhí)行過(guò)程For循環(huán)的執(zhí)行流程:在開(kāi)始執(zhí)行前3.For循環(huán)的執(zhí)行中止在一些文本編程語(yǔ)言中,可以使用goto或exit語(yǔ)句使程序從循環(huán)體內(nèi)跳轉(zhuǎn)到循環(huán)體外,從而中止循環(huán)的執(zhí)行。而在LabVIEW早期版本,對(duì)For循環(huán)不提供中止循環(huán)的機(jī)制,如果要實(shí)現(xiàn)這個(gè)功能,必須采用While循環(huán)。從LabVIEW8.5開(kāi)始,F(xiàn)or循環(huán)增加了條件接線端,同While循環(huán)一樣可在滿足條件時(shí)停止循環(huán)。在For循環(huán)結(jié)構(gòu)邊框單擊右鍵彈出快捷菜單,從快捷菜單中選擇“條件接線端”。將停止循環(huán)的布爾數(shù)據(jù)(如布爾控件或比較函數(shù)的輸出值)連至條件接線端,則可以通過(guò)條件接線端的輸入中止循環(huán)的執(zhí)行。在For循環(huán)中使用條件接線端時(shí),必須連接布爾數(shù)據(jù)或錯(cuò)誤簇至條件接線端;連接數(shù)值到總數(shù)接線端或?qū)斎霐?shù)組建立自動(dòng)索引。For循環(huán)使用條件接線端中止循環(huán)執(zhí)行實(shí)例3.For循環(huán)的執(zhí)行中止在一些文本編程語(yǔ)言中,可以使用go4.并行For循環(huán)并行For循環(huán)為一個(gè)For循環(huán)分配多個(gè)線程以實(shí)現(xiàn)并發(fā)執(zhí)行一個(gè)For循環(huán),通過(guò)并行For循環(huán)利用多個(gè)處理器可以提高For循環(huán)的執(zhí)行速度,特別是對(duì)于處理大量計(jì)算,能大大提高執(zhí)行效率。右鍵單擊For循環(huán)外框,在快捷菜單中選擇“配置循環(huán)并行…”,打開(kāi)For循環(huán)并行迭代對(duì)話框,啟用并行循環(huán)。4.并行For循環(huán)并行For循環(huán)為一個(gè)For循環(huán)分配多個(gè)線程并行For循環(huán)實(shí)現(xiàn)數(shù)組求和實(shí)例并行For循環(huán)實(shí)現(xiàn)數(shù)組求和實(shí)例5.2.2While循環(huán)While循環(huán)是循環(huán)次數(shù)不固定的一種循環(huán)結(jié)構(gòu),類似于文本編程語(yǔ)言中的Do循環(huán)或Repeat-Until循環(huán),While循環(huán)執(zhí)行子程序框圖直到滿足某個(gè)條件?;镜腤hile循環(huán)由循環(huán)框架、計(jì)數(shù)接線端i和條件接線端組成。條件接線端是一個(gè)布爾變量,接入布爾值用于控制循環(huán)執(zhí)行。條件接線端有兩種使用狀態(tài):默認(rèn)狀態(tài)接線端圖標(biāo)為一個(gè)綠色方框包圍的紅色實(shí)心圓點(diǎn),其含義為“真(True)時(shí)停止”,表示當(dāng)接入的布爾值為“真(True)”時(shí),循環(huán)停止,否則循環(huán)繼續(xù)執(zhí)行;在條件接線端的右鍵快捷菜單中選擇“真(True)時(shí)繼續(xù)”,則切換到另外一種使用狀態(tài),接線端圖標(biāo)變?yōu)橐粋€(gè)綠色方框包圍的帶箭頭的圓弧,表示當(dāng)接入的布爾值為“真(True)”時(shí),循環(huán)繼續(xù)執(zhí)行,否則循環(huán)停止。真(True)時(shí)停止真(True)時(shí)繼續(xù)5.2.2While循環(huán)While循環(huán)是循環(huán)次數(shù)不固定的一While循環(huán)的執(zhí)行流程:(1)“循環(huán)計(jì)數(shù)”接線端輸出當(dāng)前執(zhí)行的循環(huán)的次數(shù);(2)開(kāi)始執(zhí)行循環(huán)框架內(nèi)的程序,程序執(zhí)行完成后,循環(huán)計(jì)數(shù)器的值加1;(3)根據(jù)流入“條件接線端”的布爾型數(shù)據(jù)判斷是否繼續(xù)執(zhí)行循環(huán);(4)在While循環(huán)中,循環(huán)框架中的代碼至少執(zhí)行一次。利用While循環(huán)畫隨機(jī)曲線實(shí)例While循環(huán)的執(zhí)行流程:(1)“循環(huán)計(jì)數(shù)”接線端輸出當(dāng)前5.2.3循環(huán)結(jié)構(gòu)外部與內(nèi)部數(shù)據(jù)交換與自動(dòng)索引1.循環(huán)結(jié)構(gòu)外部與內(nèi)部數(shù)據(jù)交換循環(huán)結(jié)構(gòu)(包括For循環(huán)和While循環(huán))外部和內(nèi)部之間的數(shù)據(jù)交換是通過(guò)隧道來(lái)進(jìn)行的。直接將循環(huán)結(jié)構(gòu)外部對(duì)象與內(nèi)部對(duì)象用連線連接起來(lái),這時(shí),連線在循環(huán)結(jié)構(gòu)邊框上將出現(xiàn)一個(gè)小方格,這就是實(shí)現(xiàn)結(jié)構(gòu)內(nèi)外數(shù)據(jù)交換的隧道,小方格的顏色代表了流過(guò)其中的數(shù)據(jù)類型。輸入數(shù)值通過(guò)輸入隧道傳入循環(huán)中,在每次循環(huán)時(shí),這個(gè)數(shù)值與循環(huán)計(jì)數(shù)端子輸出循環(huán)計(jì)數(shù)值進(jìn)行求和,并在循環(huán)內(nèi)部顯示每次求和結(jié)果,當(dāng)求和結(jié)果等于輸入數(shù)值的2倍時(shí),循環(huán)停止,同時(shí)通過(guò)邊框上的輸出隧道將最后結(jié)果傳遞到循環(huán)結(jié)構(gòu)外進(jìn)行輸出顯示。循環(huán)結(jié)構(gòu)外部與內(nèi)部數(shù)據(jù)交換實(shí)例循環(huán)的所有輸入端子(輸入隧道)都是在進(jìn)入循環(huán)之前讀取完畢的,循環(huán)開(kāi)始之后就不再讀取輸入端子值,通過(guò)輸出隧道輸出數(shù)據(jù)只有在循環(huán)完全退出后才輸出。5.2.3循環(huán)結(jié)構(gòu)外部與內(nèi)部數(shù)據(jù)交換與自動(dòng)索引1.循環(huán)2.自動(dòng)索引For循環(huán)和While循環(huán)均具有一種特殊的自動(dòng)索引功能。當(dāng)把一個(gè)數(shù)組連接到循環(huán)結(jié)構(gòu)的邊框上生成隧道后,可以選擇是否打開(kāi)自動(dòng)索引功能。如果自動(dòng)索引功能被打開(kāi),則數(shù)組將在每次循環(huán)中按順序取出一個(gè)值,該值在原數(shù)組中的索引與當(dāng)次循環(huán)的重復(fù)端子值相同,就是說(shuō)數(shù)組在循環(huán)內(nèi)部將會(huì)降低一維,比如二維數(shù)組變?yōu)橐痪S數(shù)組,一維數(shù)組變?yōu)闃?biāo)量元素等。自動(dòng)索引默認(rèn)打開(kāi),此時(shí)用戶不需要為循環(huán)總數(shù)接線端N賦值來(lái)指定循環(huán)執(zhí)行的次數(shù),而會(huì)自動(dòng)根據(jù)數(shù)組的大小決定循環(huán)執(zhí)行的次數(shù)。如果用戶硬要給N指定一個(gè)值,則循環(huán)按照N和數(shù)組確定的最小的執(zhí)行次數(shù)執(zhí)行。即如果數(shù)組有5個(gè)元素,指定的N為10,則之后循環(huán)次數(shù)為5次。當(dāng)循環(huán)結(jié)構(gòu)輸入隧道禁用自動(dòng)索引功能后,循環(huán)執(zhí)行次數(shù)由循環(huán)總數(shù)端子接入數(shù)據(jù)決定。For循環(huán)自動(dòng)索引2.自動(dòng)索引For循環(huán)和While循環(huán)均具有一種特殊的自動(dòng)利用For循環(huán)自動(dòng)索引輸入和輸出一維數(shù)組實(shí)例自動(dòng)索引打開(kāi)循環(huán)總數(shù)接線端子N沒(méi)有接入數(shù)據(jù),循環(huán)次數(shù)根據(jù)輸入隧道接入的數(shù)組元素個(gè)數(shù)確定,循環(huán)次數(shù)為輸入數(shù)組長(zhǎng)度5,每次循環(huán)取出該數(shù)組的一個(gè)元素與循環(huán)計(jì)數(shù)值做求和運(yùn)算,求和結(jié)果在輸出隧道上累積生成數(shù)組,當(dāng)循環(huán)結(jié)束后,在輸出隧道上的累積生成的數(shù)組一次傳遞到輸出數(shù)組中顯示。
標(biāo)量數(shù)據(jù)線利用For循環(huán)自動(dòng)索引輸入和輸出一維數(shù)組實(shí)例自動(dòng)索引打開(kāi)循禁用自動(dòng)索引功能的循環(huán)執(zhí)行情況執(zhí)行1次循環(huán),數(shù)組一次性完整輸入循環(huán)框架內(nèi),各元素分別與循環(huán)計(jì)數(shù)值(循環(huán)一次為0)求和,執(zhí)行完后一次性輸出。執(zhí)行2次循環(huán),循環(huán)執(zhí)行前,數(shù)組一次性完整輸入循環(huán)內(nèi),每次循環(huán),輸入數(shù)組中的各元素與循環(huán)計(jì)數(shù)值求和,循環(huán)執(zhí)行完后,將最后一次循環(huán)執(zhí)行結(jié)果輸出。數(shù)組數(shù)據(jù)線禁用自動(dòng)索引功能的循環(huán)執(zhí)行情況執(zhí)行1次循環(huán),數(shù)組一次性完整For循環(huán)輸入和輸出隧道分別啟用和禁用自動(dòng)索引實(shí)例For循環(huán)輸入和輸出隧道分別啟用和禁用自動(dòng)索引實(shí)例For循環(huán)索引方式下二維數(shù)組的輸入與輸出實(shí)例For循環(huán)多個(gè)數(shù)組同時(shí)按索引方式輸入情況實(shí)例For循環(huán)索引方式下二維數(shù)組的輸入與輸出實(shí)例For循環(huán)多While循環(huán)自動(dòng)索引自動(dòng)索引默認(rèn)關(guān)閉。循環(huán)的執(zhí)行次數(shù)受“條件接線端”的輸入決定,與是否啟用自動(dòng)索引無(wú)關(guān)。禁用自動(dòng)索引:數(shù)組一次性整體輸入循環(huán)內(nèi),每次循環(huán)數(shù)組與循環(huán)體其他數(shù)據(jù)整體進(jìn)行運(yùn)算,循環(huán)停止后輸出。啟用自動(dòng)索引:數(shù)組按元素依次輸入循環(huán)內(nèi),每次循環(huán)順序取出一個(gè)元素,當(dāng)數(shù)組元素取完而循環(huán)還沒(méi)有停止時(shí),接入數(shù)組的連線取“0”作為數(shù)組元素,每次循環(huán)結(jié)果在輸出隧道上累積生成數(shù)組,當(dāng)循環(huán)停止后,在輸出隧道上的累積生成的數(shù)組一次傳遞到輸出數(shù)組中顯示。While循環(huán)自動(dòng)索引的使用實(shí)例While循環(huán)自動(dòng)索引自動(dòng)索引默認(rèn)關(guān)閉。循環(huán)的執(zhí)行次數(shù)受5.2.4移位寄存器及反饋節(jié)點(diǎn)1.移位寄存器為了實(shí)現(xiàn)將前幾次循環(huán)完成時(shí)的某個(gè)數(shù)據(jù)傳遞到下一次循環(huán)的開(kāi)始,LabVIEW在循環(huán)結(jié)構(gòu)中引入了稱為移位寄存器的附加對(duì)象。移位寄存器的功能是將i-1、i-2、i-3…次循環(huán)的計(jì)算結(jié)果保存在循環(huán)的緩沖區(qū)中,并在第i次循環(huán)時(shí)將這些數(shù)據(jù)從循環(huán)框架左側(cè)的移位寄存器中送出,供循環(huán)框架內(nèi)的節(jié)點(diǎn)使用。在循環(huán)結(jié)構(gòu)框架邊框上單擊右鍵,在彈出的快捷菜單中選擇“添加移位寄存器”選項(xiàng),可以為循環(huán)結(jié)構(gòu)創(chuàng)建一個(gè)移位寄存器,如果需要,可以為循環(huán)結(jié)構(gòu)添加多個(gè)移位寄存器。5.2.4移位寄存器及反饋節(jié)點(diǎn)1.移位寄存器為了實(shí)現(xiàn)移位寄存器由左、右兩個(gè)端子組成,左、右兩個(gè)端子分別有一個(gè)向下和向上的箭頭,移位寄存器端子的顏色由接入的數(shù)據(jù)類型決定。其中帶向上箭頭的右端子在每一次循環(huán)結(jié)束時(shí)傳入數(shù)據(jù),然后將這一數(shù)據(jù)在下一次循環(huán)開(kāi)始前傳給帶向下箭頭的左端子,這樣就可以從左端子得到前一次循環(huán)結(jié)束時(shí)保存在右端子中的值??梢詾橐莆患拇嫫鞯淖蠖俗又付ǔ跏贾?,其初始化值將在循環(huán)開(kāi)始前讀入一次,循環(huán)執(zhí)行后就不再讀取該初始值,一般情況下,為了避免錯(cuò)誤建議為移位寄存器左端子明確提供一個(gè)初始值。移位寄存器的值也可以通過(guò)右端子輸出到循環(huán)結(jié)構(gòu)外,輸出發(fā)生在循環(huán)結(jié)束后,因此,輸出的值是移位寄存器右端子的最終值。移位寄存器由左、右兩個(gè)端子組成,左、右兩個(gè)端子分別有一個(gè)向下移位寄存器添加左端子移位寄存器應(yīng)用實(shí)例(求100以內(nèi)的被3整除的整數(shù)個(gè)數(shù))移位寄存器添加左端子移位寄存器應(yīng)用實(shí)例(求100以內(nèi)的被32.反饋節(jié)點(diǎn)在循環(huán)結(jié)構(gòu)中,反饋節(jié)點(diǎn)和只有一個(gè)左端子的移位寄存器的功能相同,用于將數(shù)據(jù)從一次循環(huán)傳遞到下一次循環(huán)。和移位寄存器相比,反饋節(jié)點(diǎn)是一種在兩次循環(huán)之間傳遞數(shù)據(jù)更簡(jiǎn)潔的表示形式。實(shí)例反饋節(jié)點(diǎn)的創(chuàng)建在程序框圖合適位置放置一個(gè)“反饋節(jié)點(diǎn)”函數(shù)節(jié)點(diǎn)并根據(jù)數(shù)據(jù)流建立連線。在需要建立反饋節(jié)點(diǎn)輸出和輸入端利用連線工具直接將輸出和輸入相連,自動(dòng)建立一個(gè)反饋節(jié)點(diǎn)。反饋節(jié)點(diǎn)由兩部分組成,分別為反饋節(jié)點(diǎn)和初始化接線端,反饋節(jié)點(diǎn)在沒(méi)有連線的時(shí)是黑色的,連線后其顏色由接入的數(shù)據(jù)的數(shù)據(jù)類型決定。2.反饋節(jié)點(diǎn)在循環(huán)結(jié)構(gòu)中,反饋節(jié)點(diǎn)和只有一個(gè)左端子的移位寄存反饋節(jié)點(diǎn)的初始化
反饋節(jié)點(diǎn)在循環(huán)框架內(nèi)初始化反饋節(jié)點(diǎn)在循環(huán)框架外初始化反饋節(jié)點(diǎn)應(yīng)用舉例(小于5的正整數(shù)疊加求和)
反饋節(jié)點(diǎn)的初始化反饋節(jié)點(diǎn)在循環(huán)框架內(nèi)初始化反饋在移位寄存器中,我們可以通過(guò)創(chuàng)建多個(gè)左端子來(lái)獲取前面多次循環(huán)的值,如i-1、i-2、i-3…次循環(huán)的值,在反饋節(jié)點(diǎn)中,要實(shí)現(xiàn)該功能,可以通過(guò)設(shè)定反饋節(jié)點(diǎn)的“延遲”屬性來(lái)實(shí)現(xiàn)。反饋節(jié)點(diǎn)延遲屬性的功能反饋節(jié)點(diǎn)的延遲設(shè)置為2應(yīng)用示例在移位寄存器中,我們可以通過(guò)創(chuàng)建多個(gè)左端子來(lái)獲取前面多次循環(huán)5.3條件結(jié)構(gòu)5.3.1條件結(jié)構(gòu)的組成條件結(jié)構(gòu)也是LabVIEW的基本結(jié)構(gòu)之一,它相當(dāng)與C語(yǔ)言中的if…else語(yǔ)句或Switch語(yǔ)句,用來(lái)控制在不同條件下執(zhí)行不同程序塊的功能?;緱l件結(jié)構(gòu)由條件結(jié)構(gòu)分支程序子框架、分支選擇器端子、選擇器標(biāo)簽及減量增量按鈕組成。默認(rèn)分支選擇器為布爾數(shù)據(jù)類型,同時(shí)自動(dòng)生成兩個(gè)選擇器標(biāo)簽分別為“真”和“假”的子框圖。5.3條件結(jié)構(gòu)5.3.1條件結(jié)構(gòu)的組成條件結(jié)構(gòu)也是L5.3.2條件結(jié)構(gòu)的配置及操作條件結(jié)構(gòu)根據(jù)不同的使用情況有一個(gè)或者多個(gè)子框圖,每個(gè)子框圖都是一個(gè)執(zhí)行分支,每一個(gè)執(zhí)行分支都有自己的選擇器標(biāo)簽。分支選擇器的值可以是布爾型、字符串型、整型或者枚舉類型,其顏色會(huì)隨連接的數(shù)據(jù)類型而改變,同時(shí)根據(jù)分支選擇接入的數(shù)據(jù)類型不同,選擇器標(biāo)簽的設(shè)置也有差異,1.布爾型如選擇器接線端的數(shù)據(jù)類型是布爾值型,其選擇器標(biāo)簽只能設(shè)置為“真”和“假”,該結(jié)構(gòu)只包含“真”和“假”分支。5.3.2條件結(jié)構(gòu)的配置及操作條件結(jié)構(gòu)根據(jù)不同的使用情況2.整型如果分支選擇器接線端是一個(gè)整數(shù),則該結(jié)構(gòu)可以包括任意個(gè)分支。對(duì)于每個(gè)分支,可使用標(biāo)簽工具在條件結(jié)構(gòu)上部的條件選擇器標(biāo)簽中輸入值、值列表或值范圍。如使用列表,數(shù)值之間用逗號(hào)隔開(kāi)。如使用數(shù)值范圍,指定一個(gè)類似10…20的范圍可用于表示10到20之間的所有數(shù)字(包括10和20)。也可以使用開(kāi)集范圍,例如,..100表示所有小于等于100的數(shù),100..表示所有大于等于100的數(shù)。2.整型如果分支選擇器接線端是一個(gè)整數(shù),則該結(jié)構(gòu)可以包括任3.字符串型如果分支選擇器接線端是一個(gè)字符串,則該結(jié)構(gòu)同樣包括任意個(gè)分支。對(duì)于每個(gè)分支,也可使用標(biāo)簽工具在條件結(jié)構(gòu)上部的條件選擇器標(biāo)簽中輸入值、值列表或值范圍。對(duì)于字符串,..a和a..都是開(kāi)集范圍,表示以小于a(不包括a和以a開(kāi)頭的字符串)和大于a(包含以a開(kāi)頭的字符串)開(kāi)頭的字符串;a..c表示范圍,包括所有以a或b而不包括以c開(kāi)頭的字符串;a僅表示單個(gè)字符a,不表示以a開(kāi)頭的字符串,如要表示以a開(kāi)頭的字符串,需定義標(biāo)簽為a..b,abc和bcd均僅表示字符串a(chǎn)bc和bcd。字符串范圍區(qū)分大小寫,A..c和a..c表示不同的范圍,在設(shè)置“不區(qū)分大小寫選項(xiàng)”情況下,所有小寫字母轉(zhuǎn)換為大寫后在進(jìn)行范圍比較。如果分支接線端是字符串,在選擇器標(biāo)簽中輸入的值將自動(dòng)加上雙引號(hào)。3.字符串型如果分支選擇器接線端是一個(gè)字符串,則該結(jié)構(gòu)同樣包4.枚舉型對(duì)于分支選擇器接線端接入枚舉型數(shù)據(jù),選擇器標(biāo)簽應(yīng)根據(jù)枚舉型數(shù)據(jù)選項(xiàng)列表中的選項(xiàng)值進(jìn)行設(shè)定。當(dāng)接入枚舉型數(shù)據(jù)時(shí),如枚舉型數(shù)據(jù)選項(xiàng)列表中的某些選項(xiàng)值沒(méi)有與其對(duì)應(yīng)分支子框圖的話,則在選擇結(jié)構(gòu)框架右鍵快捷菜單中將出現(xiàn)“為每個(gè)值添加分支”選項(xiàng),選擇該選項(xiàng),將自動(dòng)根據(jù)枚舉數(shù)據(jù)的選項(xiàng)列表中的值創(chuàng)建對(duì)應(yīng)的分支子框圖,和接入字符串類型一樣,接入枚舉型數(shù)據(jù)時(shí),選擇器標(biāo)簽中輸入的值自動(dòng)加上雙引號(hào)。4.枚舉型對(duì)于分支選擇器接線端接入枚舉型數(shù)據(jù),選擇器標(biāo)簽應(yīng)條件結(jié)構(gòu)快捷菜單選項(xiàng)操作在后面添加分支:在當(dāng)前分支后面增加一個(gè)空白分支并自動(dòng)生成合適的標(biāo)簽;在前面添加分支:在當(dāng)前分支前面增加一個(gè)空白分支;復(fù)制分支:復(fù)制當(dāng)前框圖分支并且把新生成的分支置于當(dāng)前分支的后面;刪除本分支:刪除當(dāng)前分支;刪除空分支:刪除所有不包含代碼的空白分支;顯示分支:列出所有分支的標(biāo)簽,可以實(shí)現(xiàn)分支之間的快速跳轉(zhuǎn);交換分支的程序框圖:把當(dāng)前分支內(nèi)容和目標(biāo)分支內(nèi)容對(duì)換,其他分支不受影響;將程序框圖移位至分支:把當(dāng)前分支內(nèi)容移動(dòng)到目標(biāo)分支之后,兩者之間的所有分支順序移動(dòng);刪除默認(rèn):去除當(dāng)前分支的默認(rèn)標(biāo)記,對(duì)非默認(rèn)標(biāo)記分支,命令為“本分支設(shè)置為默認(rèn)分支”;重排分支:打開(kāi)的“重排分支”對(duì)話框?qū)λ蟹种нM(jìn)行重排序。條件結(jié)構(gòu)快捷菜單選項(xiàng)操作在后面添加分支:在當(dāng)前分支后面增加5.3.3條件結(jié)構(gòu)內(nèi)部與外部的數(shù)據(jù)交換條件結(jié)構(gòu)內(nèi)部與外部之間的數(shù)據(jù)也是通過(guò)隧道來(lái)交換傳遞的。向條件結(jié)構(gòu)邊框內(nèi)輸入數(shù)據(jù)時(shí),各個(gè)子程序框圖連接或不連接這個(gè)數(shù)據(jù)的隧道都可以。從條件結(jié)構(gòu)邊框向外輸出數(shù)據(jù)時(shí),各個(gè)子程序框圖都必須為這個(gè)隧道連接數(shù)據(jù),否則隧道圖標(biāo)是空的,程序“運(yùn)行”按鈕也是斷開(kāi)的。當(dāng)各個(gè)子程序框圖都為這個(gè)隧道連接好數(shù)據(jù)以后,隧道圖標(biāo)才成為實(shí)心的,程序才可以運(yùn)行。如果允許沒(méi)有連線的子程序框圖輸出默認(rèn)值,可以在數(shù)據(jù)隧道上右擊,在彈出的快捷菜單中選擇“未連線時(shí)使用默認(rèn)”命令,在這種情況下,程序執(zhí)行到?jīng)]有為輸出隧道連線的子程序框圖時(shí),就輸出相應(yīng)數(shù)據(jù)類型的默認(rèn)值。5.3.3條件結(jié)構(gòu)內(nèi)部與外部的數(shù)據(jù)交換條件結(jié)構(gòu)內(nèi)部與外部5.3.4條件結(jié)構(gòu)應(yīng)用舉例
用條件結(jié)構(gòu)來(lái)實(shí)現(xiàn)兩個(gè)數(shù)之間加、減、乘、除等4種不同的運(yùn)算5.3.4條件結(jié)構(gòu)應(yīng)用舉例用條件結(jié)構(gòu)來(lái)實(shí)現(xiàn)兩個(gè)數(shù)之間加5.4事件結(jié)構(gòu)5.4.1事件驅(qū)動(dòng)概念單擊計(jì)數(shù)器的實(shí)例(對(duì)鼠標(biāo)單擊按鈕次數(shù)進(jìn)行計(jì)數(shù))實(shí)現(xiàn)方法:利用前面介紹的知識(shí)來(lái)實(shí)現(xiàn)該功能的唯一辦法就是通過(guò)While循環(huán)和條件結(jié)構(gòu)不斷地去查詢這個(gè)按鈕是否被單擊,如果被單擊的話,計(jì)數(shù)器加1,否則計(jì)數(shù)器值不變。問(wèn)題:程序在沒(méi)有用戶點(diǎn)擊的情況下處于循環(huán)“空轉(zhuǎn)”,浪費(fèi)了大量的CPU資源,當(dāng)“單擊事件”發(fā)生太快時(shí)可能會(huì)被忽略。因此Labview提供了事件結(jié)構(gòu)來(lái)解決這個(gè)問(wèn)題,即僅當(dāng)“事件”發(fā)生時(shí),程序才做相應(yīng)的響應(yīng)。事件驅(qū)動(dòng)的基本概念
事件是對(duì)活動(dòng)發(fā)生的異步通知。事件可以來(lái)自于用戶界面、外部I/O或程序的其他部分。用戶界面事件包括鼠標(biāo)點(diǎn)擊、鍵盤按鍵等動(dòng)作。外部I/O事件則是諸如數(shù)據(jù)采集完畢或發(fā)生錯(cuò)誤時(shí)硬件定時(shí)器或觸發(fā)器發(fā)出信號(hào)。其他類型的事件可通過(guò)編程生成并與程序的不同部分通信。LabVIEW支持用戶界面事件和通過(guò)編程生成的事件,但不支持外部I/O事件。5.4事件結(jié)構(gòu)5.4.1事件驅(qū)動(dòng)概念單擊計(jì)數(shù)器的5.4.2事件結(jié)構(gòu)的組成事件超時(shí)端子隸屬于整個(gè)事件結(jié)構(gòu),用于設(shè)定事件結(jié)構(gòu)在等待指定事件發(fā)生時(shí)的超時(shí)時(shí)間,以毫秒為單位。當(dāng)值為-1時(shí),事件結(jié)構(gòu)處于永遠(yuǎn)等待狀態(tài),直到指定的事件發(fā)生為止。當(dāng)值為一個(gè)大于0的整數(shù)時(shí),時(shí)間結(jié)構(gòu)會(huì)等待相應(yīng)的時(shí)間,當(dāng)事件在指定的時(shí)間內(nèi)發(fā)生時(shí),事件接受并響應(yīng)該事件,若超過(guò)指定的時(shí)間,事件沒(méi)發(fā)生,則事件會(huì)停止執(zhí)行,并返回一個(gè)超時(shí)事件。通常情況下,應(yīng)當(dāng)為事件結(jié)構(gòu)指定一個(gè)超時(shí)時(shí)間,否則事件結(jié)構(gòu)將一直處于等待狀態(tài)。事件數(shù)據(jù)節(jié)點(diǎn)為子框圖提供所處理事件的相關(guān)數(shù)據(jù),事件數(shù)據(jù)節(jié)點(diǎn)由若干個(gè)事件數(shù)據(jù)端子組成,使用操作值工具單擊事件數(shù)據(jù)節(jié)點(diǎn)的某個(gè)端子將打開(kāi)數(shù)據(jù)列表,可以在其中選擇所要訪問(wèn)的數(shù)據(jù)。使用定位工具拖曳事件數(shù)據(jù)節(jié)點(diǎn)的上下邊沿,可以增減數(shù)據(jù)端子。選擇器標(biāo)簽用于標(biāo)識(shí)當(dāng)前顯示的子框圖所處理事件的事件源,其增減與層疊式順序結(jié)構(gòu)和選擇結(jié)構(gòu)中的增減類似。5.4.2事件結(jié)構(gòu)的組成事件超時(shí)端子事件數(shù)據(jù)節(jié)點(diǎn)選擇器5.4.3事件結(jié)構(gòu)的配置與操作刪除事件結(jié)構(gòu):刪除事件結(jié)構(gòu),僅僅保留當(dāng)前事件分支的代碼;編輯本分支所處理的事件:編輯當(dāng)前事件分支的事件源和事件類型;添加事件分支:在當(dāng)前事件分支后面增加新的事件分支;復(fù)制事件分支:復(fù)制當(dāng)前事件分支,并且把復(fù)制結(jié)果放置在當(dāng)前分支后面;刪除本事件分支:刪除當(dāng)前分支;顯示動(dòng)態(tài)事件接線端:用于顯示動(dòng)態(tài)事件端子。5.4.3事件結(jié)構(gòu)的配置與操作刪除事件結(jié)構(gòu):刪除事件結(jié)編輯事件對(duì)話框事件結(jié)構(gòu)在執(zhí)行編輯、添加還是復(fù)制等操作時(shí),都會(huì)打開(kāi)“編輯事件”對(duì)話框。每個(gè)事件分支都可以配置為處理多個(gè)事件,當(dāng)這些事件中的任何一個(gè)發(fā)生時(shí),對(duì)應(yīng)事件分支的代碼都會(huì)得到執(zhí)行?!笆录种А绷谐鏊惺录种У男蛱?hào)和名稱。
“事件說(shuō)明符”列出“事件分支”中當(dāng)前事件配置的所有事件。每一行是一個(gè)配置好的事件事件詳細(xì)信息:左邊列出事件源(應(yīng)用程序、本VI、動(dòng)態(tài)、窗格、分隔欄和控件這6個(gè)可能值之一),右邊給出該事件源產(chǎn)生的事件名稱?!疤砑邮录卑粹o可以為當(dāng)前事件分支添加事件,添加后需要在“事件源”列表框選擇合適的事件源,并在“事件”列表框選擇所需要的事件,即完成事件添加操作?!皠h除”按鈕,刪除事件。編輯事件對(duì)話框“事件分支”列出所有事件分支的序號(hào)和名稱?!巴ㄖ录瓦^(guò)濾器事件通知事件過(guò)濾事件通知事件通知事件用于通知程序代碼某個(gè)用戶界面事件發(fā)生了,并且LabVIEW已經(jīng)進(jìn)行了最基本的處理。例如修改一個(gè)數(shù)值控件的數(shù)值時(shí),LabVIEW會(huì)先進(jìn)行默認(rèn)的處理,即把新數(shù)值顯示在數(shù)值控件中。此后,如果已經(jīng)為這個(gè)控件注冊(cè)了“值改變”事件,該事件的代碼將得到執(zhí)行。過(guò)濾事件過(guò)濾器事件用于告訴程序代碼某個(gè)事件發(fā)生了,LabVIEW還未對(duì)其進(jìn)行任何處理,從而便于用戶就程序如何與用戶界面的交互作出自己相應(yīng)的定制。使用過(guò)濾事件參與事件處理可能會(huì)覆蓋事件的默認(rèn)行為。在過(guò)濾事件的事件結(jié)構(gòu)分支中,可在LabVIEW結(jié)束處理該事件之前驗(yàn)證或改變事件數(shù)據(jù),或完全放棄該事件以防止數(shù)據(jù)的改變影響到VI。例如,將一個(gè)事件結(jié)構(gòu)配置為放棄前面板關(guān)閉事件可防止用戶關(guān)閉VI的前面板。過(guò)濾事件的名稱以問(wèn)號(hào)結(jié)束,如“前面板關(guān)閉?”,以便與通知事件區(qū)分。通知事件和過(guò)濾器事件通知事件過(guò)濾事件通知事件過(guò)濾事處理過(guò)濾事件的事件結(jié)構(gòu)分支有一個(gè)事件過(guò)濾節(jié)點(diǎn),可將新的數(shù)據(jù)值連接至這些接線端以改變事件數(shù)據(jù)。如果不對(duì)某一數(shù)據(jù)項(xiàng)連線,那么該數(shù)據(jù)項(xiàng)將保持不變。可將真值連接至“放棄?”接線端以完全放棄某個(gè)事件。處理過(guò)濾事件的事件結(jié)構(gòu)分支有一個(gè)事件過(guò)濾節(jié)點(diǎn),可將新的數(shù)據(jù)值5.4.4事件結(jié)構(gòu)的應(yīng)用舉例分支0:響應(yīng)“按鈕1”控件上“鼠標(biāo)按下”的通知事件,當(dāng)用鼠標(biāo)點(diǎn)擊按鈕1時(shí),計(jì)數(shù)器1將加1,實(shí)現(xiàn)對(duì)單擊操作進(jìn)行計(jì)數(shù)。分支1:同時(shí)響應(yīng)“按鈕1”和“按鈕2”控件的“值改變”通知事件,即分支1同時(shí)處理了兩個(gè)事件,當(dāng)用鼠標(biāo)點(diǎn)擊這兩個(gè)按鈕中的任何一個(gè)以改變按鈕的取值,則計(jì)數(shù)器2將加1以實(shí)現(xiàn)計(jì)數(shù)。分支2,響應(yīng)“停止”按鈕控件的“鼠標(biāo)按下?”過(guò)濾事件,該分支放置了一個(gè)雙按鈕對(duì)話框,并將對(duì)話框的輸出取反接入事件過(guò)濾節(jié)點(diǎn)中的“放棄?”。分支3:響應(yīng)“停止”按鈕控件的“鼠標(biāo)按下”通知事件,該分支放入了一個(gè)真常量,并將其連接至While循環(huán)條件接線端。當(dāng)程序運(yùn)行時(shí),按下“停止”按鈕,則彈出對(duì)話框,如果選擇“是”,“鼠標(biāo)按下”事件得以發(fā)生,分支3中的程序得以執(zhí)行,循環(huán)結(jié)束,vi停止運(yùn)行;若選擇“否”,“鼠標(biāo)按下”事件被屏蔽,分支3中的程序不運(yùn)行,vi繼續(xù)執(zhí)行。
5.4.4事件結(jié)構(gòu)的應(yīng)用舉例分支0:響應(yīng)“按鈕1”控件5.5禁用結(jié)構(gòu)禁用結(jié)構(gòu)是自LabVIEW8后增加的功能,主要用來(lái)控制程序是否被執(zhí)行,有兩種禁用結(jié)構(gòu)。(1)程序框圖禁用結(jié)構(gòu),其功能類似于C語(yǔ)言中的注釋語(yǔ)句/*...*/,用于大段地注釋程序。(2)條件禁用結(jié)構(gòu),用于通過(guò)外部環(huán)境變量來(lái)控制代碼是否執(zhí)行,類似于在C語(yǔ)言中通過(guò)宏定義來(lái)實(shí)現(xiàn)條件編譯。在禁用結(jié)構(gòu)中,其注釋屏蔽掉的代碼不僅不執(zhí)行,而且不編譯,這對(duì)程序調(diào)試很有用。5.5禁用結(jié)構(gòu)禁用結(jié)構(gòu)是自LabVIEW8后增加的功5.5.1程序框圖禁用結(jié)構(gòu)程序框圖禁用結(jié)構(gòu)從形式上看與條件結(jié)構(gòu)有些相似,但它的每一個(gè)子程序框圖執(zhí)行與否,是由選擇器標(biāo)簽中的文本(禁用/啟用)來(lái)決定的。程序框圖禁用結(jié)構(gòu)最初放置在程序框圖中時(shí)只有一個(gè)子程序框圖,默認(rèn)為禁用狀態(tài)。此時(shí)程序框圖禁用結(jié)構(gòu)邊框內(nèi)的代碼都是灰色的,但可以編輯。運(yùn)行這個(gè)程序時(shí),邊框內(nèi)的代碼不編譯,也不執(zhí)行,有數(shù)據(jù)輸出隧道時(shí)輸出默認(rèn)值??梢酝ㄟ^(guò)快捷菜單“啟用本程序子框圖”命令啟用禁用的子程序框圖,還可以通過(guò)“禁用本程序子框圖”再禁用。再次禁用以后則必須設(shè)置一個(gè)處于啟用狀態(tài)的子程序框圖,程序才能運(yùn)行。5.5.1程序框圖禁用結(jié)構(gòu)程序框圖禁用結(jié)構(gòu)從形式上看與5.5.2條件禁用結(jié)構(gòu)條件禁用結(jié)構(gòu)通過(guò)定義外部環(huán)境變量為真或假來(lái)控制代碼是否執(zhí)行,還可以通過(guò)判斷當(dāng)前操作系統(tǒng)的類型來(lái)選擇執(zhí)行哪段代碼,其選擇其標(biāo)簽列出了執(zhí)行該子程序框圖代碼的條件。5.5.2條件禁用結(jié)構(gòu)條件禁用結(jié)構(gòu)通過(guò)定義外部環(huán)境變量為真5.6公式節(jié)點(diǎn)公式節(jié)點(diǎn)也是一種程序結(jié)構(gòu),是便于在程序框圖上執(zhí)行數(shù)學(xué)運(yùn)算的文本節(jié)點(diǎn)。適用于含有多個(gè)變量或較為復(fù)雜的方程。通過(guò)邊框上右鍵快捷菜單中選擇添加輸入或添加輸出并鍵入相應(yīng)的變量名即可添加輸入、輸出變量,變量的數(shù)目可以根據(jù)具體情況而定,變量名稱大小寫敏感。使用標(biāo)簽工具或操作工具,輸入要在公式節(jié)點(diǎn)中計(jì)算的方程。每個(gè)賦值中賦值運(yùn)算符(=)的左側(cè)僅可有一個(gè)變量。每個(gè)賦值必須以分號(hào)(;)結(jié)束。注釋內(nèi)容可通過(guò)/*…*/封閉起來(lái)。在公式節(jié)點(diǎn)中輸入公式時(shí),必須確保使用正確的公式節(jié)點(diǎn)語(yǔ)法。LabVIEW公式節(jié)點(diǎn)主要有以下幾種語(yǔ)句:變量聲明語(yǔ)句、賦值語(yǔ)句、條件語(yǔ)句、循環(huán)語(yǔ)句、Switch語(yǔ)句、控制語(yǔ)句。5.6公式節(jié)點(diǎn)公式節(jié)點(diǎn)也是一種程序結(jié)構(gòu),是便于在程序框第5章程序結(jié)構(gòu)5.1順序結(jié)構(gòu)5.2循環(huán)結(jié)構(gòu)5.3條件結(jié)構(gòu)5.4事件結(jié)構(gòu)5.5禁用結(jié)構(gòu)5.6公式節(jié)點(diǎn)第5章程序結(jié)構(gòu)5.1順序結(jié)構(gòu)程序結(jié)構(gòu)對(duì)任何一種計(jì)算機(jī)編程語(yǔ)言來(lái)說(shuō)都是十分重要的,它控制整個(gè)程序語(yǔ)言的執(zhí)行過(guò)程,一個(gè)好的程序結(jié)構(gòu),可以大大提高程序的執(zhí)行效率。LabVIEW作為一種圖形化的高級(jí)程序開(kāi)發(fā)語(yǔ)言,執(zhí)行的是數(shù)據(jù)流驅(qū)動(dòng)機(jī)制,在程序結(jié)構(gòu)方面除支持循環(huán)、順序、條件等通用編程語(yǔ)言支持的結(jié)構(gòu)外,還包含一些特殊的程序結(jié)構(gòu),如事件結(jié)構(gòu)、使能結(jié)構(gòu)、公式節(jié)點(diǎn)等等。由于LabVIEW是圖形化編程語(yǔ)言,它的代碼以圖形形式表現(xiàn),因此各種結(jié)構(gòu)的實(shí)現(xiàn)也是圖形化的。每種結(jié)構(gòu)都含有一個(gè)可調(diào)整大小的清晰邊框,用于包圍根據(jù)結(jié)構(gòu)規(guī)則執(zhí)行的程序框圖部分。結(jié)構(gòu)邊框中的程序框圖部分被稱為子程序框圖,從結(jié)構(gòu)外接收數(shù)據(jù)和將數(shù)據(jù)輸出結(jié)構(gòu)的接線端稱為隧道,隧道是結(jié)構(gòu)邊框上的連接點(diǎn)。程序結(jié)構(gòu)簡(jiǎn)介程序結(jié)構(gòu)對(duì)任何一種計(jì)算機(jī)編程語(yǔ)言來(lái)說(shuō)都是十分重要的,它控制整5.1順序結(jié)構(gòu)5.1.1LabVIEW程序數(shù)據(jù)流編程Result=(A+B)/C的控制流編程和數(shù)據(jù)流編程的流程圖LabVIEW作為一種圖形化的編程語(yǔ)言,有其獨(dú)特的程序執(zhí)行順序——數(shù)據(jù)流執(zhí)行方式(只有當(dāng)節(jié)點(diǎn)所有輸入點(diǎn)的數(shù)據(jù)都流到該節(jié)點(diǎn)時(shí),才會(huì)執(zhí)行該節(jié)點(diǎn))。節(jié)點(diǎn)在執(zhí)行時(shí)產(chǎn)生輸出數(shù)據(jù)并將該數(shù)據(jù)傳送給數(shù)據(jù)流路徑中的下一個(gè)節(jié)點(diǎn)。數(shù)據(jù)流經(jīng)節(jié)點(diǎn)的動(dòng)作決定了程序框圖上VI和函數(shù)的執(zhí)行順序。5.1順序結(jié)構(gòu)5.1.1LabVIEW程序數(shù)據(jù)流編程Result=(A+B)/C的LabVIEW實(shí)現(xiàn)
在數(shù)據(jù)流編程中,“獲取數(shù)據(jù)A”和“獲取數(shù)據(jù)B”沒(méi)有先后之分,兩個(gè)任務(wù)根據(jù)需要在時(shí)間上相互交疊,不僅如此,對(duì)于“獲取數(shù)據(jù)A”、“獲取數(shù)據(jù)B”、“執(zhí)行A+B”的過(guò)程與“獲取數(shù)據(jù)C”這個(gè)過(guò)程之間也沒(méi)有先后之分。多段代碼的并行執(zhí)行這兩段代碼的實(shí)際執(zhí)行過(guò)程并不是按照從左到右的順序先執(zhí)行第一段代碼再執(zhí)行第二段代碼的,這兩段代碼是并行獨(dú)立執(zhí)行的。這些因?yàn)樵贚abVIEW中自動(dòng)實(shí)現(xiàn)了多線程,從而使得代碼的執(zhí)行效率大大提高。Result=(A+B)/C的LabVIEW實(shí)現(xiàn)在數(shù)據(jù)流編5.1.2順序結(jié)構(gòu)的組成
在LabVIEW中,順序結(jié)構(gòu)一般有多個(gè)框架組成,從框架0到框架n,首先執(zhí)行框架0中的程序,然后執(zhí)行框架1中的程序……,這樣依次執(zhí)行下去。LabVIEW的順序結(jié)構(gòu)看起來(lái)就像放映機(jī)中的電影膠片按照順序一副圖像接一副圖像的放映,而LabVIEW順序結(jié)構(gòu)是按照順序一幀(框架)接一幀順序執(zhí)行的。1.層疊式順序結(jié)構(gòu)5.1.2順序結(jié)構(gòu)的組成在LabVIEW2.平鋪式順序結(jié)構(gòu)層疊式順序結(jié)構(gòu)的優(yōu)點(diǎn)是節(jié)省程序框圖窗口空間,但用戶在某一時(shí)刻只能看到一幀代碼,這會(huì)給程序代碼的閱讀和理解帶來(lái)一定的難度。平鋪式順序結(jié)構(gòu)比較直觀,方便代碼的閱讀,但當(dāng)它占用的窗口空間較大。兩種順序結(jié)構(gòu)可以通過(guò)“替換為平鋪式/層疊式順序”菜單選項(xiàng)可以相互轉(zhuǎn)換,2.平鋪式順序結(jié)構(gòu)層疊式順序結(jié)構(gòu)的優(yōu)點(diǎn)是節(jié)省程序框圖窗口空5.1.3順序結(jié)構(gòu)中數(shù)據(jù)傳遞在順序結(jié)構(gòu)的編程過(guò)程中,在不同的幀之間可能需要傳遞數(shù)據(jù),順序結(jié)構(gòu)外部和內(nèi)部也可能存在數(shù)據(jù)傳遞。順序結(jié)構(gòu)有層疊式和平鋪式兩種結(jié)構(gòu),這兩種結(jié)構(gòu)中不同幀之間的數(shù)據(jù)傳遞方式是不同的,但這兩種結(jié)構(gòu)內(nèi)部與外部之間的數(shù)據(jù)傳遞方式是相同的。1.層疊式順序結(jié)構(gòu)中的數(shù)據(jù)傳遞層疊式順序結(jié)構(gòu)通過(guò)局部變量的機(jī)制來(lái)實(shí)現(xiàn)不同幀之間的數(shù)據(jù)傳遞的。在層疊式順序結(jié)構(gòu)的邊框上單擊右鍵彈出快捷菜單,選擇“添加順序局部變量”選項(xiàng),在順序結(jié)構(gòu)邊框上出現(xiàn)一個(gè)小方塊(所有幀程序框的同一位置都有),表示添加了一個(gè)局部變量。小方塊可以沿框四周移動(dòng),顏色隨傳輸數(shù)據(jù)類型的系統(tǒng)顏色發(fā)生變化。局部變量局部變量寫入(賦值)之前幀的局部變量將不可用。局部變量讀取5.1.3順序結(jié)構(gòu)中數(shù)據(jù)傳遞在順序結(jié)構(gòu)的編程過(guò)程中,在2.平鋪式順序結(jié)構(gòu)中的數(shù)據(jù)傳遞在平鋪式順序結(jié)構(gòu)中,每個(gè)幀都是可見(jiàn)的,不需要借助局部變量來(lái)實(shí)現(xiàn)幀間的數(shù)據(jù)傳遞,故平鋪式順序結(jié)構(gòu)不能添加局部變量。平鋪式順序結(jié)構(gòu)中的數(shù)據(jù)通過(guò)連線直接穿過(guò)幀壁(隧道)進(jìn)行傳遞。3.順序結(jié)構(gòu)外部與內(nèi)部的數(shù)據(jù)交換順序結(jié)構(gòu)外部與內(nèi)部之間的數(shù)據(jù)傳遞是通過(guò)在結(jié)構(gòu)邊框上建立隧道來(lái)實(shí)現(xiàn)的。隧道有輸入隧道和輸出隧道,輸入隧道用于從外部向內(nèi)部傳遞數(shù)據(jù),輸出隧道用于從內(nèi)部向外部傳遞數(shù)據(jù)。2.平鋪式順序結(jié)構(gòu)中的數(shù)據(jù)傳遞在平鋪式順序結(jié)構(gòu)中,每個(gè)幀都在順序結(jié)構(gòu)執(zhí)行前,輸入隧道上得到輸入值,在執(zhí)行結(jié)構(gòu)的過(guò)程中,這個(gè)值保持不變,且每幀都能讀取該值。只能在某一幀中向輸出隧道寫入數(shù)據(jù),如在超過(guò)一個(gè)幀中對(duì)同一輸出隧道賦值,則會(huì)引起多個(gè)數(shù)據(jù)源錯(cuò)誤,輸出隧道上的值只能在整個(gè)順序結(jié)構(gòu)執(zhí)行完后才會(huì)輸出。在順序結(jié)構(gòu)執(zhí)行前,輸入隧道上得到輸入值,在執(zhí)行結(jié)構(gòu)的過(guò)程中,5.1.4順序結(jié)構(gòu)應(yīng)用舉例本實(shí)例程序具有以下功能:輸入一個(gè)0-10000的整數(shù),測(cè)量計(jì)算機(jī)利用隨機(jī)數(shù)產(chǎn)生器需要多長(zhǎng)時(shí)間才能產(chǎn)生與之相等的數(shù)。在給定一個(gè)整數(shù)后,程序開(kāi)始運(yùn)行,記下開(kāi)始運(yùn)行時(shí)間并開(kāi)始產(chǎn)生隨機(jī)數(shù),產(chǎn)生的隨機(jī)數(shù)與給定的數(shù)值相比較,當(dāng)兩者相等時(shí),程序停止運(yùn)行并記下程序停止運(yùn)行時(shí)間,最后計(jì)算兩時(shí)間差便得到題目需要計(jì)算的時(shí)間。由于需要用到前后兩個(gè)時(shí)刻的差,即用到了先后次序,故可用順序結(jié)構(gòu)來(lái)解決此題。5.1.4順序結(jié)構(gòu)應(yīng)用舉例本實(shí)例程序具有以下功能:輸入一5.2循環(huán)結(jié)構(gòu)5.2.1For循環(huán)1.For循環(huán)的構(gòu)成for(i=0;i<N;i++){
循環(huán)體}最基本的For循環(huán)由循環(huán)框架、總數(shù)接線端N和計(jì)數(shù)接線端i組成。For循環(huán)中程序?qū)ο蟮膬煞N添加方法將對(duì)象拖曳到已放置的循環(huán)結(jié)構(gòu)內(nèi)將循環(huán)結(jié)構(gòu)包圍在已存在的對(duì)象周圍5.2循環(huán)結(jié)構(gòu)5.2.1For循環(huán)1.For循環(huán)的2.For循環(huán)的執(zhí)行過(guò)程For循環(huán)的執(zhí)行流程:在開(kāi)始執(zhí)行前,從循環(huán)總數(shù)接線端子讀入循環(huán)執(zhí)行次數(shù),然后循環(huán)計(jì)數(shù)接線端子輸出當(dāng)前已經(jīng)執(zhí)行循環(huán)次數(shù)的數(shù)值(從0開(kāi)始),接下執(zhí)行循環(huán)框架中的程序代碼,循環(huán)框架中的程序執(zhí)行完后,如果執(zhí)行循環(huán)次數(shù)未達(dá)到設(shè)定次數(shù),則繼續(xù)執(zhí)行,否則退出循環(huán)。如果循環(huán)總數(shù)接線端子的初始值為0,則For循環(huán)內(nèi)的程序一次都不執(zhí)行。在循環(huán)執(zhí)行過(guò)程中,改變循環(huán)總數(shù)接線端的值將不改變循環(huán)執(zhí)行次數(shù),循環(huán)按執(zhí)行前讀入的循環(huán)總數(shù)接線端所確定的次數(shù)執(zhí)行。
利用For循環(huán)繪制正弦波曲線的實(shí)例2.For循環(huán)的執(zhí)行過(guò)程For循環(huán)的執(zhí)行流程:在開(kāi)始執(zhí)行前3.For循環(huán)的執(zhí)行中止在一些文本編程語(yǔ)言中,可以使用goto或exit語(yǔ)句使程序從循環(huán)體內(nèi)跳轉(zhuǎn)到循環(huán)體外,從而中止循環(huán)的執(zhí)行。而在LabVIEW早期版本,對(duì)For循環(huán)不提供中止循環(huán)的機(jī)制,如果要實(shí)現(xiàn)這個(gè)功能,必須采用While循環(huán)。從LabVIEW8.5開(kāi)始,F(xiàn)or循環(huán)增加了條件接線端,同While循環(huán)一樣可在滿足條件時(shí)停止循環(huán)。在For循環(huán)結(jié)構(gòu)邊框單擊右鍵彈出快捷菜單,從快捷菜單中選擇“條件接線端”。將停止循環(huán)的布爾數(shù)據(jù)(如布爾控件或比較函數(shù)的輸出值)連至條件接線端,則可以通過(guò)條件接線端的輸入中止循環(huán)的執(zhí)行。在For循環(huán)中使用條件接線端時(shí),必須連接布爾數(shù)據(jù)或錯(cuò)誤簇至條件接線端;連接數(shù)值到總數(shù)接線端或?qū)斎霐?shù)組建立自動(dòng)索引。For循環(huán)使用條件接線端中止循環(huán)執(zhí)行實(shí)例3.For循環(huán)的執(zhí)行中止在一些文本編程語(yǔ)言中,可以使用go4.并行For循環(huán)并行For循環(huán)為一個(gè)For循環(huán)分配多個(gè)線程以實(shí)現(xiàn)并發(fā)執(zhí)行一個(gè)For循環(huán),通過(guò)并行For循環(huán)利用多個(gè)處理器可以提高For循環(huán)的執(zhí)行速度,特別是對(duì)于處理大量計(jì)算,能大大提高執(zhí)行效率。右鍵單擊For循環(huán)外框,在快捷菜單中選擇“配置循環(huán)并行…”,打開(kāi)For循環(huán)并行迭代對(duì)話框,啟用并行循環(huán)。4.并行For循環(huán)并行For循環(huán)為一個(gè)For循環(huán)分配多個(gè)線程并行For循環(huán)實(shí)現(xiàn)數(shù)組求和實(shí)例并行For循環(huán)實(shí)現(xiàn)數(shù)組求和實(shí)例5.2.2While循環(huán)While循環(huán)是循環(huán)次數(shù)不固定的一種循環(huán)結(jié)構(gòu),類似于文本編程語(yǔ)言中的Do循環(huán)或Repeat-Until循環(huán),While循環(huán)執(zhí)行子程序框圖直到滿足某個(gè)條件。基本的While循環(huán)由循環(huán)框架、計(jì)數(shù)接線端i和條件接線端組成。條件接線端是一個(gè)布爾變量,接入布爾值用于控制循環(huán)執(zhí)行。條件接線端有兩種使用狀態(tài):默認(rèn)狀態(tài)接線端圖標(biāo)為一個(gè)綠色方框包圍的紅色實(shí)心圓點(diǎn),其含義為“真(True)時(shí)停止”,表示當(dāng)接入的布爾值為“真(True)”時(shí),循環(huán)停止,否則循環(huán)繼續(xù)執(zhí)行;在條件接線端的右鍵快捷菜單中選擇“真(True)時(shí)繼續(xù)”,則切換到另外一種使用狀態(tài),接線端圖標(biāo)變?yōu)橐粋€(gè)綠色方框包圍的帶箭頭的圓弧,表示當(dāng)接入的布爾值為“真(True)”時(shí),循環(huán)繼續(xù)執(zhí)行,否則循環(huán)停止。真(True)時(shí)停止真(True)時(shí)繼續(xù)5.2.2While循環(huán)While循環(huán)是循環(huán)次數(shù)不固定的一While循環(huán)的執(zhí)行流程:(1)“循環(huán)計(jì)數(shù)”接線端輸出當(dāng)前執(zhí)行的循環(huán)的次數(shù);(2)開(kāi)始執(zhí)行循環(huán)框架內(nèi)的程序,程序執(zhí)行完成后,循環(huán)計(jì)數(shù)器的值加1;(3)根據(jù)流入“條件接線端”的布爾型數(shù)據(jù)判斷是否繼續(xù)執(zhí)行循環(huán);(4)在While循環(huán)中,循環(huán)框架中的代碼至少執(zhí)行一次。利用While循環(huán)畫隨機(jī)曲線實(shí)例While循環(huán)的執(zhí)行流程:(1)“循環(huán)計(jì)數(shù)”接線端輸出當(dāng)前5.2.3循環(huán)結(jié)構(gòu)外部與內(nèi)部數(shù)據(jù)交換與自動(dòng)索引1.循環(huán)結(jié)構(gòu)外部與內(nèi)部數(shù)據(jù)交換循環(huán)結(jié)構(gòu)(包括For循環(huán)和While循環(huán))外部和內(nèi)部之間的數(shù)據(jù)交換是通過(guò)隧道來(lái)進(jìn)行的。直接將循環(huán)結(jié)構(gòu)外部對(duì)象與內(nèi)部對(duì)象用連線連接起來(lái),這時(shí),連線在循環(huán)結(jié)構(gòu)邊框上將出現(xiàn)一個(gè)小方格,這就是實(shí)現(xiàn)結(jié)構(gòu)內(nèi)外數(shù)據(jù)交換的隧道,小方格的顏色代表了流過(guò)其中的數(shù)據(jù)類型。輸入數(shù)值通過(guò)輸入隧道傳入循環(huán)中,在每次循環(huán)時(shí),這個(gè)數(shù)值與循環(huán)計(jì)數(shù)端子輸出循環(huán)計(jì)數(shù)值進(jìn)行求和,并在循環(huán)內(nèi)部顯示每次求和結(jié)果,當(dāng)求和結(jié)果等于輸入數(shù)值的2倍時(shí),循環(huán)停止,同時(shí)通過(guò)邊框上的輸出隧道將最后結(jié)果傳遞到循環(huán)結(jié)構(gòu)外進(jìn)行輸出顯示。循環(huán)結(jié)構(gòu)外部與內(nèi)部數(shù)據(jù)交換實(shí)例循環(huán)的所有輸入端子(輸入隧道)都是在進(jìn)入循環(huán)之前讀取完畢的,循環(huán)開(kāi)始之后就不再讀取輸入端子值,通過(guò)輸出隧道輸出數(shù)據(jù)只有在循環(huán)完全退出后才輸出。5.2.3循環(huán)結(jié)構(gòu)外部與內(nèi)部數(shù)據(jù)交換與自動(dòng)索引1.循環(huán)2.自動(dòng)索引For循環(huán)和While循環(huán)均具有一種特殊的自動(dòng)索引功能。當(dāng)把一個(gè)數(shù)組連接到循環(huán)結(jié)構(gòu)的邊框上生成隧道后,可以選擇是否打開(kāi)自動(dòng)索引功能。如果自動(dòng)索引功能被打開(kāi),則數(shù)組將在每次循環(huán)中按順序取出一個(gè)值,該值在原數(shù)組中的索引與當(dāng)次循環(huán)的重復(fù)端子值相同,就是說(shuō)數(shù)組在循環(huán)內(nèi)部將會(huì)降低一維,比如二維數(shù)組變?yōu)橐痪S數(shù)組,一維數(shù)組變?yōu)闃?biāo)量元素等。自動(dòng)索引默認(rèn)打開(kāi),此時(shí)用戶不需要為循環(huán)總數(shù)接線端N賦值來(lái)指定循環(huán)執(zhí)行的次數(shù),而會(huì)自動(dòng)根據(jù)數(shù)組的大小決定循環(huán)執(zhí)行的次數(shù)。如果用戶硬要給N指定一個(gè)值,則循環(huán)按照N和數(shù)組確定的最小的執(zhí)行次數(shù)執(zhí)行。即如果數(shù)組有5個(gè)元素,指定的N為10,則之后循環(huán)次數(shù)為5次。當(dāng)循環(huán)結(jié)構(gòu)輸入隧道禁用自動(dòng)索引功能后,循環(huán)執(zhí)行次數(shù)由循環(huán)總數(shù)端子接入數(shù)據(jù)決定。For循環(huán)自動(dòng)索引2.自動(dòng)索引For循環(huán)和While循環(huán)均具有一種特殊的自動(dòng)利用For循環(huán)自動(dòng)索引輸入和輸出一維數(shù)組實(shí)例自動(dòng)索引打開(kāi)循環(huán)總數(shù)接線端子N沒(méi)有接入數(shù)據(jù),循環(huán)次數(shù)根據(jù)輸入隧道接入的數(shù)組元素個(gè)數(shù)確定,循環(huán)次數(shù)為輸入數(shù)組長(zhǎng)度5,每次循環(huán)取出該數(shù)組的一個(gè)元素與循環(huán)計(jì)數(shù)值做求和運(yùn)算,求和結(jié)果在輸出隧道上累積生成數(shù)組,當(dāng)循環(huán)結(jié)束后,在輸出隧道上的累積生成的數(shù)組一次傳遞到輸出數(shù)組中顯示。
標(biāo)量數(shù)據(jù)線利用For循環(huán)自動(dòng)索引輸入和輸出一維數(shù)組實(shí)例自動(dòng)索引打開(kāi)循禁用自動(dòng)索引功能的循環(huán)執(zhí)行情況執(zhí)行1次循環(huán),數(shù)組一次性完整輸入循環(huán)框架內(nèi),各元素分別與循環(huán)計(jì)數(shù)值(循環(huán)一次為0)求和,執(zhí)行完后一次性輸出。執(zhí)行2次循環(huán),循環(huán)執(zhí)行前,數(shù)組一次性完整輸入循環(huán)內(nèi),每次循環(huán),輸入數(shù)組中的各元素與循環(huán)計(jì)數(shù)值求和,循環(huán)執(zhí)行完后,將最后一次循環(huán)執(zhí)行結(jié)果輸出。數(shù)組數(shù)據(jù)線禁用自動(dòng)索引功能的循環(huán)執(zhí)行情況執(zhí)行1次循環(huán),數(shù)組一次性完整For循環(huán)輸入和輸出隧道分別啟用和禁用自動(dòng)索引實(shí)例For循環(huán)輸入和輸出隧道分別啟用和禁用自動(dòng)索引實(shí)例For循環(huán)索引方式下二維數(shù)組的輸入與輸出實(shí)例For循環(huán)多個(gè)數(shù)組同時(shí)按索引方式輸入情況實(shí)例For循環(huán)索引方式下二維數(shù)組的輸入與輸出實(shí)例For循環(huán)多While循環(huán)自動(dòng)索引自動(dòng)索引默認(rèn)關(guān)閉。循環(huán)的執(zhí)行次數(shù)受“條件接線端”的輸入決定,與是否啟用自動(dòng)索引無(wú)關(guān)。禁用自動(dòng)索引:數(shù)組一次性整體輸入循環(huán)內(nèi),每次循環(huán)數(shù)組與循環(huán)體其他數(shù)據(jù)整體進(jìn)行運(yùn)算,循環(huán)停止后輸出。啟用自動(dòng)索引:數(shù)組按元素依次輸入循環(huán)內(nèi),每次循環(huán)順序取出一個(gè)元素,當(dāng)數(shù)組元素取完而循環(huán)還沒(méi)有停止時(shí),接入數(shù)組的連線取“0”作為數(shù)組元素,每次循環(huán)結(jié)果在輸出隧道上累積生成數(shù)組,當(dāng)循環(huán)停止后,在輸出隧道上的累積生成的數(shù)組一次傳遞到輸出數(shù)組中顯示。While循環(huán)自動(dòng)索引的使用實(shí)例While循環(huán)自動(dòng)索引自動(dòng)索引默認(rèn)關(guān)閉。循環(huán)的執(zhí)行次數(shù)受5.2.4移位寄存器及反饋節(jié)點(diǎn)1.移位寄存器為了實(shí)現(xiàn)將前幾次循環(huán)完成時(shí)的某個(gè)數(shù)據(jù)傳遞到下一次循環(huán)的開(kāi)始,LabVIEW在循環(huán)結(jié)構(gòu)中引入了稱為移位寄存器的附加對(duì)象。移位寄存器的功能是將i-1、i-2、i-3…次循環(huán)的計(jì)算結(jié)果保存在循環(huán)的緩沖區(qū)中,并在第i次循環(huán)時(shí)將這些數(shù)據(jù)從循環(huán)框架左側(cè)的移位寄存器中送出,供循環(huán)框架內(nèi)的節(jié)點(diǎn)使用。在循環(huán)結(jié)構(gòu)框架邊框上單擊右鍵,在彈出的快捷菜單中選擇“添加移位寄存器”選項(xiàng),可以為循環(huán)結(jié)構(gòu)創(chuàng)建一個(gè)移位寄存器,如果需要,可以為循環(huán)結(jié)構(gòu)添加多個(gè)移位寄存器。5.2.4移位寄存器及反饋節(jié)點(diǎn)1.移位寄存器為了實(shí)現(xiàn)移位寄存器由左、右兩個(gè)端子組成,左、右兩個(gè)端子分別有一個(gè)向下和向上的箭頭,移位寄存器端子的顏色由接入的數(shù)據(jù)類型決定。其中帶向上箭頭的右端子在每一次循環(huán)結(jié)束時(shí)傳入數(shù)據(jù),然后將這一數(shù)據(jù)在下一次循環(huán)開(kāi)始前傳給帶向下箭頭的左端子,這樣就可以從左端子得到前一次循環(huán)結(jié)束時(shí)保存在右端子中的值??梢詾橐莆患拇嫫鞯淖蠖俗又付ǔ跏贾?,其初始化值將在循環(huán)開(kāi)始前讀入一次,循環(huán)執(zhí)行后就不再讀取該初始值,一般情況下,為了避免錯(cuò)誤建議為移位寄存器左端子明確提供一個(gè)初始值。移位寄存器的值也可以通過(guò)右端子輸出到循環(huán)結(jié)構(gòu)外,輸出發(fā)生在循環(huán)結(jié)束后,因此,輸出的值是移位寄存器右端子的最終值。移位寄存器由左、右兩個(gè)端子組成,左、右兩個(gè)端子分別有一個(gè)向下移位寄存器添加左端子移位寄存器應(yīng)用實(shí)例(求100以內(nèi)的被3整除的整數(shù)個(gè)數(shù))移位寄存器添加左端子移位寄存器應(yīng)用實(shí)例(求100以內(nèi)的被32.反饋節(jié)點(diǎn)在循環(huán)結(jié)構(gòu)中,反饋節(jié)點(diǎn)和只有一個(gè)左端子的移位寄存器的功能相同,用于將數(shù)據(jù)從一次循環(huán)傳遞到下一次循環(huán)。和移位寄存器相比,反饋節(jié)點(diǎn)是一種在兩次循環(huán)之間傳遞數(shù)據(jù)更簡(jiǎn)潔的表示形式。實(shí)例反饋節(jié)點(diǎn)的創(chuàng)建在程序框圖合適位置放置一個(gè)“反饋節(jié)點(diǎn)”函數(shù)節(jié)點(diǎn)并根據(jù)數(shù)據(jù)流建立連線。在需要建立反饋節(jié)點(diǎn)輸出和輸入端利用連線工具直接將輸出和輸入相連,自動(dòng)建立一個(gè)反饋節(jié)點(diǎn)。反饋節(jié)點(diǎn)由兩部分組成,分別為反饋節(jié)點(diǎn)和初始化接線端,反饋節(jié)點(diǎn)在沒(méi)有連線的時(shí)是黑色的,連線后其顏色由接入的數(shù)據(jù)的數(shù)據(jù)類型決定。2.反饋節(jié)點(diǎn)在循環(huán)結(jié)構(gòu)中,反饋節(jié)點(diǎn)和只有一個(gè)左端子的移位寄存反饋節(jié)點(diǎn)的初始化
反饋節(jié)點(diǎn)在循環(huán)框架內(nèi)初始化反饋節(jié)點(diǎn)在循環(huán)框架外初始化反饋節(jié)點(diǎn)應(yīng)用舉例(小于5的正整數(shù)疊加求和)
反饋節(jié)點(diǎn)的初始化反饋節(jié)點(diǎn)在循環(huán)框架內(nèi)初始化反饋在移位寄存器中,我們可以通過(guò)創(chuàng)建多個(gè)左端子來(lái)獲取前面多次循環(huán)的值,如i-1、i-2、i-3…次循環(huán)的值,在反饋節(jié)點(diǎn)中,要實(shí)現(xiàn)該功能,可以通過(guò)設(shè)定反饋節(jié)點(diǎn)的“延遲”屬性來(lái)實(shí)現(xiàn)。反饋節(jié)點(diǎn)延遲屬性的功能反饋節(jié)點(diǎn)的延遲設(shè)置為2應(yīng)用示例在移位寄存器中,我們可以通過(guò)創(chuàng)建多個(gè)左端子來(lái)獲取前面多次循環(huán)5.3條件結(jié)構(gòu)5.3.1條件結(jié)構(gòu)的組成條件結(jié)構(gòu)也是LabVIEW的基本結(jié)構(gòu)之一,它相當(dāng)與C語(yǔ)言中的if…else語(yǔ)句或Switch語(yǔ)句,用來(lái)控制在不同條件下執(zhí)行不同程序塊的功能。基本條件結(jié)構(gòu)由條件結(jié)構(gòu)分支程序子框架、分支選擇器端子、選擇器標(biāo)簽及減量增量按鈕組成。默認(rèn)分支選擇器為布爾數(shù)據(jù)類型,同時(shí)自動(dòng)生成兩個(gè)選擇器標(biāo)簽分別為“真”和“假”的子框圖。5.3條件結(jié)構(gòu)5.3.1條件結(jié)構(gòu)的組成條件結(jié)構(gòu)也是L5.3.2條件結(jié)構(gòu)的配置及操作條件結(jié)構(gòu)根據(jù)不同的使用情況有一個(gè)或者多個(gè)子框圖,每個(gè)子框圖都是一個(gè)執(zhí)行分支,每一個(gè)執(zhí)行分支都有自己的選擇器標(biāo)簽。分支選擇器的值可以是布爾型、字符串型、整型或者枚舉類型,其顏色會(huì)隨連接的數(shù)據(jù)類型而改變,同時(shí)根據(jù)分支選擇接入的數(shù)據(jù)類型不同,選擇器標(biāo)簽的設(shè)置也有差異,1.布爾型如選擇器接線端的數(shù)據(jù)類型是布爾值型,其選擇器標(biāo)簽只能設(shè)置為“真”和“假”,該結(jié)構(gòu)只包含“真”和“假”分支。5.3.2條件結(jié)構(gòu)的配置及操作條件結(jié)構(gòu)根據(jù)不同的使用情況2.整型如果分支選擇器接線端是一個(gè)整數(shù),則該結(jié)構(gòu)可以包括任意個(gè)分支。對(duì)于每個(gè)分支,可使用標(biāo)簽工具在條件結(jié)構(gòu)上部的條件選擇器標(biāo)簽中輸入值、值列表或值范圍。如使用列表,數(shù)值之間用逗號(hào)隔開(kāi)。如使用數(shù)值范圍,指定一個(gè)類似10…20的范圍可用于表示10到20之間的所有數(shù)字(包括10和20)。也可以使用開(kāi)集范圍,例如,..100表示所有小于等于100的數(shù),100..表示所有大于等于100的數(shù)。2.整型如果分支選擇器接線端是一個(gè)整數(shù),則該結(jié)構(gòu)可以包括任3.字符串型如果分支選擇器接線端是一個(gè)字符串,則該結(jié)構(gòu)同樣包括任意個(gè)分支。對(duì)于每個(gè)分支,也可使用標(biāo)簽工具在條件結(jié)構(gòu)上部的條件選擇器標(biāo)簽中輸入值、值列表或值范圍。對(duì)于字符串,..a和a..都是開(kāi)集范圍,表示以小于a(不包括a和以a開(kāi)頭的字符串)和大于a(包含以a開(kāi)頭的字符串)開(kāi)頭的字符串;a..c表示范圍,包括所有以a或b而不包括以c開(kāi)頭的字符串;a僅表示單個(gè)字符a,不表示以a開(kāi)頭的字符串,如要表示以a開(kāi)頭的字符串,需定義標(biāo)簽為a..b,abc和bcd均僅表示字符串a(chǎn)bc和bcd。字符串范圍區(qū)分大小寫,A..c和a..c表示不同的范圍,在設(shè)置“不區(qū)分大小寫選項(xiàng)”情況下,所有小寫字母轉(zhuǎn)換為大寫后在進(jìn)行范圍比較。如果分支接線端是字符串,在選擇器標(biāo)簽中輸入的值將自動(dòng)加上雙引號(hào)。3.字符串型如果分支選擇器接線端是一個(gè)字符串,則該結(jié)構(gòu)同樣包4.枚舉型對(duì)于分支選擇器接線端接入枚舉型數(shù)據(jù),選擇器標(biāo)簽應(yīng)根據(jù)枚舉型數(shù)據(jù)選項(xiàng)列表中的選項(xiàng)值進(jìn)行設(shè)定。當(dāng)接入枚舉型數(shù)據(jù)時(shí),如枚舉型數(shù)據(jù)選項(xiàng)列表中的某些選項(xiàng)值沒(méi)有與其對(duì)應(yīng)分支子框圖的話,則在選擇結(jié)構(gòu)框架右鍵快捷菜單中將出現(xiàn)“為每個(gè)值添加分支”選項(xiàng),選擇該選項(xiàng),將自動(dòng)根據(jù)枚舉數(shù)據(jù)的選項(xiàng)列表中的值創(chuàng)建對(duì)應(yīng)的分支子框圖,和接入字符串類型一樣,接入枚舉型數(shù)據(jù)時(shí),選擇器標(biāo)簽中輸入的值自動(dòng)加上雙引號(hào)。4.枚舉型對(duì)于分支選擇器接線端接入枚舉型數(shù)據(jù),選擇器標(biāo)簽應(yīng)條件結(jié)構(gòu)快捷菜單選項(xiàng)操作在后面添加分支:在當(dāng)前分支后面增加一個(gè)空白分支并自動(dòng)生成合適的標(biāo)簽;在前面添加分支:在當(dāng)前分支前面增加一個(gè)空白分支;復(fù)制分支:復(fù)制當(dāng)前框圖分支并且把新生成的分支置于當(dāng)前分支的后面;刪除本分支:刪除當(dāng)前分支;刪除空分支:刪除所有不包含代碼的空白分支;顯示分支:列出所有分支的標(biāo)簽,可以實(shí)現(xiàn)分支之間的快速跳轉(zhuǎn);交換分支的程序框圖:把當(dāng)前分支內(nèi)容和目標(biāo)分支內(nèi)容對(duì)換,其他分支不受影響;將程序框圖移位至分支:把當(dāng)前分支內(nèi)容移動(dòng)到目標(biāo)分支之后,兩者之間的所有分支順序移動(dòng);刪除默認(rèn):去除當(dāng)前分支的默認(rèn)標(biāo)記,對(duì)非默認(rèn)標(biāo)記分支,命令為“本分支設(shè)置為默認(rèn)分支”;重排分支:打開(kāi)的“重排分支”對(duì)話框?qū)λ蟹种нM(jìn)行重排序。條件結(jié)構(gòu)快捷菜單選項(xiàng)操作在后面添加分支:在當(dāng)前分支后面增加5.3.3條件結(jié)構(gòu)內(nèi)部與外部的數(shù)據(jù)交換條件結(jié)構(gòu)內(nèi)部與外部之間的數(shù)據(jù)也是通過(guò)隧道來(lái)交換傳遞的。向條件結(jié)構(gòu)邊框內(nèi)輸入數(shù)據(jù)時(shí),各個(gè)子程序框圖連接或不連接這個(gè)數(shù)據(jù)的隧道都可以。從條件結(jié)構(gòu)邊框向外輸出數(shù)據(jù)時(shí),各個(gè)子程序框圖都必須為這個(gè)隧道連接數(shù)據(jù),否則隧道圖標(biāo)是空的,程序“運(yùn)行”按鈕也是斷開(kāi)的。當(dāng)各個(gè)子程序框圖都為這個(gè)隧道連接好數(shù)據(jù)以后,隧道圖標(biāo)才成為實(shí)心的,程序才可以運(yùn)行。如果允許沒(méi)有連線的子程序框圖輸出默認(rèn)值,可以在數(shù)據(jù)隧道上右擊,在彈出的快捷菜單中選擇“未連線時(shí)使用默認(rèn)”命令,在這種情況下,程序執(zhí)行到?jīng)]有為輸出隧道連線的子程序框圖時(shí),就輸出相應(yīng)數(shù)據(jù)類型的默認(rèn)值。5.3.3條件結(jié)構(gòu)內(nèi)部與外部的數(shù)據(jù)交換條件結(jié)構(gòu)內(nèi)部與外部5.3.4條件結(jié)構(gòu)應(yīng)用舉例
用條件結(jié)構(gòu)來(lái)實(shí)現(xiàn)兩個(gè)數(shù)之間加、減、乘、除等4種不同的運(yùn)算5.3.4條件結(jié)構(gòu)應(yīng)用舉例用條件結(jié)構(gòu)來(lái)實(shí)現(xiàn)兩個(gè)數(shù)之間加5.4事件結(jié)構(gòu)5.4.1事件驅(qū)動(dòng)概念單擊計(jì)數(shù)器的實(shí)例(對(duì)鼠標(biāo)單擊按鈕次數(shù)進(jìn)行計(jì)數(shù))實(shí)現(xiàn)方法:利用前面介紹的知識(shí)來(lái)實(shí)現(xiàn)該功能的唯一辦法就是通過(guò)While循環(huán)和條件結(jié)構(gòu)不斷地去查詢這個(gè)按鈕是否被單擊,如果被單擊的話,計(jì)數(shù)器加1,否則計(jì)數(shù)器值不變。問(wèn)題:程序在沒(méi)有用戶點(diǎn)擊的情況下處于循環(huán)“空轉(zhuǎn)”,浪費(fèi)了大量的CPU資源,當(dāng)“單擊事件”發(fā)生太快時(shí)可能會(huì)被忽略。因此Labview提供了事件結(jié)構(gòu)來(lái)解決這個(gè)問(wèn)題,即僅當(dāng)“事件”發(fā)生時(shí),程序才做相應(yīng)的響應(yīng)。事件驅(qū)動(dòng)的基本概念
事件是對(duì)活動(dòng)發(fā)生的異步通知。事件可以來(lái)自于用戶界面、外部I/O或程序的其他部分。用戶界面事件包括鼠標(biāo)點(diǎn)擊、鍵盤按鍵等動(dòng)作。外部I/O事件則是諸如數(shù)據(jù)采集完畢或發(fā)生錯(cuò)誤時(shí)硬件定時(shí)器或觸發(fā)器發(fā)出信號(hào)。其他類型的事件可通過(guò)編程生成并與程序的不同部分通信。LabVIEW支持用戶界面事件和通過(guò)編程生成的事件,但不支持外部I/O事件。5.4事件結(jié)構(gòu)5.4.1事件驅(qū)動(dòng)概念單擊計(jì)數(shù)器的5.4.2事件結(jié)構(gòu)的組成事件超時(shí)端子隸屬于整個(gè)事件結(jié)構(gòu),用于設(shè)定事件結(jié)構(gòu)在等待指定事件發(fā)生時(shí)的超時(shí)時(shí)間,以毫秒為單位。當(dāng)值為-1時(shí),事件結(jié)構(gòu)處于永遠(yuǎn)等待狀態(tài),直到指定的事件發(fā)生為止。當(dāng)值為一個(gè)大于0的整數(shù)時(shí),時(shí)間結(jié)構(gòu)會(huì)等待相應(yīng)的時(shí)間,當(dāng)事件在指定的時(shí)間內(nèi)發(fā)生時(shí),事件接受并響應(yīng)該事件,若超過(guò)指定的時(shí)間,事件沒(méi)發(fā)生,則事件會(huì)停止執(zhí)行,并返回一個(gè)超時(shí)事件。通常情況下,應(yīng)當(dāng)為事件結(jié)構(gòu)指定一個(gè)超時(shí)時(shí)間,否則事件結(jié)構(gòu)將一直處于等待狀態(tài)。事件數(shù)據(jù)節(jié)點(diǎn)為子框圖提供所處理事件的相關(guān)數(shù)據(jù),事件數(shù)據(jù)節(jié)點(diǎn)由若干個(gè)事件數(shù)據(jù)端子組成,使用操作值工具單擊事件數(shù)據(jù)節(jié)點(diǎn)的某個(gè)端子將打開(kāi)數(shù)據(jù)列表,可以在其中選擇所要訪問(wèn)的數(shù)據(jù)。使用定位工具拖曳事件數(shù)據(jù)節(jié)點(diǎn)的上下邊沿,可以增減數(shù)據(jù)端子。選擇器標(biāo)簽用于標(biāo)識(shí)當(dāng)前顯示的子框圖所處理事件的事件源,其增減與層疊式順序結(jié)構(gòu)和選擇結(jié)構(gòu)中的增減類似。5.4.2事件結(jié)構(gòu)的組成事件超時(shí)端子事件數(shù)據(jù)節(jié)點(diǎn)選擇器5.4.3事件結(jié)構(gòu)的配置與操作刪除事件結(jié)構(gòu):刪除事件結(jié)構(gòu),僅僅保留當(dāng)前事件分支的代碼;編輯本分支所處理的事件:編輯當(dāng)前事件分支的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年陜西省安全員知識(shí)題庫(kù)附答案
- 北京幕墻施工合同范本
- 興業(yè)銀行信托合同范本
- 廠房轉(zhuǎn)賣合同范本
- 南非臍橙采購(gòu)合同范本
- 三方協(xié)議就業(yè)合同范本
- 統(tǒng)編教材非單元模塊教學(xué)策略探究
- 幼兒教學(xué)中幼小銜接的策略與研究
- 2025重慶市建筑安全員-C證考試(專職安全員)題庫(kù)附答案
- 代運(yùn)營(yíng)合同范本 鑒于
- 1.裝配式建筑概述(裝配式混凝土結(jié)構(gòu)施工技術(shù))
- 第七講+漢字字音
- 新零件的成熟保障MLA
- 【基于杜邦分析法的企業(yè)盈利能力研究國(guó)內(nèi)外文獻(xiàn)綜述4000字】
- 初中語(yǔ)文七下-上下句默寫
- 《董存瑞舍身炸碉堡》PPT課件新
- 新川教版信息技術(shù)六年級(jí)下冊(cè)全冊(cè)教案
- 第20章補(bǔ)充芯片粘接技術(shù)
- 旅行社運(yùn)營(yíng)實(shí)務(wù)電子課件 5.1 旅行社電子商務(wù)概念
- 《計(jì)算機(jī)與網(wǎng)絡(luò)技術(shù)基礎(chǔ)》
- 手機(jī)號(hào)碼段歸屬地?cái)?shù)據(jù)庫(kù)(2016年3月)
評(píng)論
0/150
提交評(píng)論