labview循環(huán)-移位寄存器妙用
1. For循環(huán)位于函數(shù)→編程→結(jié)構(gòu)→For循環(huán),如圖:
從圖中可以看到,F(xiàn)or循環(huán)有兩個(gè)端子
計(jì)數(shù)端子:要執(zhí)行循環(huán)的次數(shù),可用于For循環(huán)內(nèi)部的循環(huán)計(jì)數(shù)
重復(fù)端子:已執(zhí)行循環(huán)的次數(shù),可用于For循環(huán)內(nèi)部的重復(fù)計(jì)數(shù)
For循環(huán)應(yīng)用舉例:產(chǎn)生10個(gè)隨機(jī)數(shù),并把最后一個(gè)顯示出來。
步驟如下:
1. 放置一個(gè)數(shù)值顯示控件到前面板,并改名為隨機(jī)數(shù)。
2. 放置For循環(huán)到程序框圖,如圖:
3.放置隨機(jī)數(shù)函數(shù)到程序框圖,并連線4.計(jì)數(shù)端子上單擊右鍵,選擇創(chuàng)建常量,并輸入10,如圖:
5.運(yùn)行程序,便可在前面板上看到結(jié)果。 6.因?yàn)槌绦虻倪\(yùn)行的速度非常快,我們無法一個(gè)一個(gè)地看清所產(chǎn)生的10個(gè)隨機(jī)數(shù),我們可以在程序框圖中添加時(shí)間延遲控件。它位于函數(shù)→編程 →定時(shí)→時(shí)間延遲,如圖:
7. 放置它到程序框圖上,選擇延遲的時(shí)間,即兩次循環(huán)之間的時(shí)間間隔。如圖:
8. 將時(shí)間設(shè)置為1.000,點(diǎn)擊確定即可,再運(yùn)行程序就可從前面板上看到所產(chǎn)生的隨機(jī)數(shù)了。
移位寄存器
移位寄存器用于For循環(huán)或While循環(huán)中從一個(gè)迭代傳輸數(shù)據(jù)到下一個(gè)迭代,它由循環(huán)垂直邊框上一對(duì)反向相反的端子組成,在邊框上單擊右鍵,選擇添加移位寄存器,就可進(jìn)行添加。如圖:
右端子(帶向上箭頭的矩形)在每完成一次迭代后存儲(chǔ)數(shù)據(jù),移位寄存器將上次迭代的存儲(chǔ)數(shù)據(jù)在下一次迭代開始時(shí)移動(dòng)到左端子(具有向下箭頭的矩形)上。移位寄存器可存儲(chǔ)任何數(shù)據(jù)類型,包括數(shù)字,布爾,字符串和數(shù)組,但連接到同一個(gè)寄存器端子上的數(shù)據(jù)必須是同一類型。移位寄存器的類型與第一個(gè)連接到其端子之一的對(duì)象數(shù)據(jù)類型相同。
下面是1+2+3+4+…+100的程序,如圖:
說明:進(jìn)行第一次運(yùn)算的是0+0,F(xiàn)or循環(huán)中的重復(fù)端子是從0開始計(jì)數(shù),移位即寄存器在沒有初始化的情況下,默認(rèn)的數(shù)值是0,所以第一次運(yùn)算的是0+0,第二次運(yùn)算的是寄存器的0與重復(fù)端子的1相加,所以循環(huán)要進(jìn)行101次。而計(jì)數(shù)端子輸出的數(shù)據(jù)始終是101。
移位寄存器的初始化:移位寄存器的初始化是非常必要的,因?yàn)橹灰脩舨煌顺鯲I,移位寄存器便可記錄上次運(yùn)算完時(shí)的結(jié)果,所以上面的程序在第二次執(zhí)行時(shí)輸出的結(jié)果不是5050,而是10100!添加初始化即可,如圖:
下面在舉幾個(gè)復(fù)雜一點(diǎn)的例子。
例一:計(jì)算一組隨機(jī)數(shù)的最大值和最小值
- 新建一個(gè)VI,在前面板上放置一個(gè)波形圖標(biāo),它位于新式→圖形→波形圖表,用它來記錄產(chǎn)生的隨機(jī)數(shù)。同時(shí)在前面板上放置兩個(gè)數(shù)值顯示控件“最大值”和“最小值”,用來顯示隨機(jī)數(shù)中的最大值和最小值。
- 在程序框圖中,放置一個(gè)For循環(huán),設(shè)置循環(huán)次數(shù)為50次。單擊邊框選擇添加兩個(gè)移位寄存器,分別初始化為0和1。
- 放置隨機(jī)數(shù)函數(shù)和最大最小值函數(shù)與程序框圖中,其中最大最小值函數(shù)位于編程→比較→最大值與最小值。然后連線。如圖:
運(yùn)行,便可在前面板上看到結(jié)果,如圖:
例二:計(jì)算
- 在前面板上放置一個(gè)數(shù)值輸入控件“階次n”和一個(gè)數(shù)值顯示控件“求和結(jié)果”
- 在程序框圖上放置兩個(gè)For循環(huán)嵌套結(jié)構(gòu),外層循環(huán)的計(jì)數(shù)端口與“階次n”連接,輸出是各個(gè)數(shù)的階乘所組成的一個(gè)數(shù)組。它的重復(fù)端子加1作為內(nèi)層循環(huán)的循環(huán)次數(shù),內(nèi)層循環(huán)利用一個(gè)移位寄存器實(shí)現(xiàn)階乘運(yùn)算,移位寄存器的初始值設(shè)為1。
- 同樣在程序框圖的右邊在放置一個(gè)For循環(huán)結(jié)構(gòu),它的計(jì)數(shù)端子沒有任何連接數(shù)據(jù),使用的是自動(dòng)索引功能。這個(gè)循環(huán)的作用是對(duì)由階乘所組成的一個(gè)數(shù)組進(jìn)行索引,對(duì)索引出的各個(gè)元素進(jìn)行求和計(jì)算,最后將計(jì)算結(jié)果輸出給“求和結(jié)果”。
- 完成連線,如圖:
運(yùn)行結(jié)果如圖:
例三:計(jì)算自然對(duì)數(shù)中底數(shù)e的近似值。
算法:
步驟:
- 新建一個(gè)VI,打開前面板,添加兩個(gè)數(shù)字顯示控件,分別表示”近似值e”和“臨界階次N”。
- 切換到程序框圖,放置一個(gè)While循環(huán),將條件端子的條件改為“真時(shí)停止”。在它內(nèi)部再放置一個(gè)For循環(huán),計(jì)數(shù)端子與While循環(huán)結(jié)構(gòu)的重復(fù)端子加1后連接。右擊For循環(huán)邊框,添加移位寄存器,并初始化為1,F(xiàn)or循環(huán)結(jié)構(gòu)的功能是計(jì)算各個(gè)數(shù)的階乘。
- 計(jì)算各個(gè)數(shù)階乘的倒數(shù),添加倒數(shù)函數(shù),它位于函數(shù)→編程→數(shù)值→倒數(shù)。
- 添加比較函數(shù),將它的階乘的倒數(shù)與10^-5比較,比較結(jié)果連接到While循環(huán)結(jié)構(gòu)的條件端子上,如果小于則返回“真”,停止循環(huán),否則返回“假”繼續(xù)循環(huán)。
- 由于While循環(huán)默認(rèn)的是不能夠自動(dòng)索引功能,而程序中需要累加保存每次計(jì)算的階乘,這就需要在輸出通道上選擇“啟用索引”,實(shí)現(xiàn)自動(dòng)索引,將各個(gè)元素累加成為一維數(shù)組。
- 在程序框圖右邊再添加一個(gè)For循環(huán),它的功能是進(jìn)行自動(dòng)索引求和,需要主機(jī)的是它的移位寄存器被初始化為1,這是由近似算法所決定的。將輸出結(jié)果送給“近似值e”。
- 完成連線,并運(yùn)行程序。如圖:
運(yùn)行結(jié)果,如圖:
例四:實(shí)現(xiàn)對(duì)隨機(jī)數(shù)進(jìn)行平滑濾波。通過對(duì)4個(gè)連續(xù)的隨機(jī)數(shù)求其平均值來實(shí)現(xiàn)。
- 新建一個(gè)VI,在前面板上放置兩個(gè)波形圖表,一個(gè)為“原始波形”,一個(gè)為“濾波后波形”。
- 在程序框圖上放置一個(gè)While循環(huán),在邊框添加一個(gè)移位寄存器,然后在左邊的寄存器上單擊右鍵,選擇“添加元素”,一共添加3個(gè)。如圖:
- 添加隨機(jī)數(shù)產(chǎn)生函數(shù),并添加符合運(yùn)算,將連續(xù)產(chǎn)生的4個(gè)隨機(jī)數(shù)相加,相加的結(jié)果除以4。
- 放置循環(huán)定時(shí)函數(shù),定義循環(huán)時(shí)間為100ms。
- 完成連線,在While循環(huán)的條件端子處添加輸入控件。如圖:
運(yùn)行結(jié)果:
評(píng)論