基于LabVIEW實(shí)現(xiàn)電梯控制系統(tǒng)的設(shè)計(jì)
引言:
LabVIEW是一種在圖形化的編程語言(G語言),與以往的C程序、C++或者Java等編程語言不同的是,它用各種圖標(biāo)、連線和框圖代替文字程序代碼,使得編寫的程序結(jié)構(gòu)比較清晰,也能比較形象地觀察數(shù)據(jù)的傳輸過程。目前,計(jì)算機(jī)輔助實(shí)時(shí)測量技術(shù)的發(fā)展,使得實(shí)時(shí)測量和控制更加智能化、高精度和高效率。LabVIEW基于以上的特點(diǎn),已經(jīng)成為國內(nèi)外應(yīng)用最廣的數(shù)據(jù)采集和控制開發(fā)的語言環(huán)境,例如基于LabVIEW的信號處理與數(shù)據(jù)分析,進(jìn)行圖形獲取和傳輸?shù)鹊?。其中尤其以?shù)據(jù)的采集和處理分析為主要功能而設(shè)計(jì)出來很多種實(shí)驗(yàn)系統(tǒng),比如虛擬示波器的設(shè)計(jì)以及如何進(jìn)行信號去噪,無創(chuàng)脈搏血氧檢測,速度測量及校正等等。
我們通過對LabVIEW的初步認(rèn)識,了解并熟悉了這是怎樣的一個(gè)虛擬開發(fā)環(huán)境。然后演示一些簡單的實(shí)驗(yàn)案例,不斷地加深對LabVIEW編程的了解和學(xué)習(xí)。通過演示,我們再嘗試著尋找一些新的想法和思路,把幾個(gè)小系統(tǒng)用自己的方式組合成一個(gè)結(jié)構(gòu)比較完整、功能更為豐富的智能電梯系統(tǒng)。
1、 模擬系統(tǒng)的結(jié)構(gòu)組成
a) 控制集成箱或者外圍電路與傳感器
這部分結(jié)構(gòu)是實(shí)驗(yàn)?zāi)M系統(tǒng)的核心,因?yàn)閷?shí)驗(yàn)數(shù)據(jù)的最終來源還在于外圍電路中傳感器的電壓信號輸出,而控制信號也是需要傳輸給這部分電路。一個(gè)實(shí)驗(yàn)系統(tǒng)關(guān)鍵的結(jié)構(gòu)就是這部分電路的結(jié)構(gòu),而其他要做的僅僅是信號的輸入與輸出。我們所做的這個(gè)智能電梯系統(tǒng)的電路原理,實(shí)際上是借用了演示實(shí)驗(yàn)的電路控制集成箱。該箱子里包含了溫度測量、光強(qiáng)測量、紅外傳輸、模擬電梯(步進(jìn)電機(jī))、紅綠燈顯示等模塊。不同的功能模塊是一個(gè)完整的電路區(qū)域,其中有和功能相關(guān)的傳感器還有相關(guān)的復(fù)雜電路。另外整個(gè)控制集成箱有數(shù)據(jù)輸入與輸出的端口。
b) A/D數(shù)據(jù)采集卡
所謂A/D采集卡是指模擬量(Analog)的數(shù)字化(Digital),或者是數(shù)字量的模擬量輸出。一般A/D采集卡上都設(shè)計(jì)有12-16Bit分辨率的A/D轉(zhuǎn)換器和D/A轉(zhuǎn)換器,并且可以進(jìn)行多通道(8-16路)的數(shù)據(jù)輸入和輸出。我們實(shí)驗(yàn)中的采用的U18 A/D采集卡上設(shè)計(jì)有12Bit分辨率的A/D轉(zhuǎn)換器和D/A轉(zhuǎn)換器,提供了16路單端或8路雙端的模擬輸入通道和4路D/A輸出通道,A/D轉(zhuǎn)換器輸入信號范圍:±5V、±10V、0~10V,D/A轉(zhuǎn)換器輸入信號范圍: 0~5V、0~10V、±5V、±10V。16路開關(guān)量輸入,16路開關(guān)量輸出且均能上電清零。
c) LabVIEW編程設(shè)計(jì)
有了實(shí)驗(yàn)原理電路,其中傳感器也能實(shí)時(shí)反應(yīng)得到信號,并且A/D采集卡也可以采集數(shù)據(jù)了。但是如何實(shí)現(xiàn)控制?就需要用LabVIEW編寫控制程序。程序通過A/D卡把控制信號傳輸給外圍電路,電路反饋回來電壓信號通過A/D采集卡轉(zhuǎn)換成數(shù)字信號,并返回到程序里面。假如返回的數(shù)據(jù)滿足程序要求就可以顯示出來、或者繼續(xù)往外傳輸控制信號。LabVIEW程序就完全成為一個(gè)可視化、圖形化的“C程序”,因?yàn)樗灿蓄愃频难h(huán)、條件等語句,只不過這里都變成了結(jié)構(gòu)化的圖形。而且LabVIEW還可以做出一個(gè)控制面板,可以通過操作控制面板,控制后臺程序的運(yùn)行。
2、 模擬智能電梯系統(tǒng)
我們通過對演示實(shí)驗(yàn)的不同功能模塊的探究,構(gòu)想出一個(gè)類似于真實(shí)電梯的模擬系統(tǒng)。這個(gè)系統(tǒng)包含了四個(gè)功能模塊。
a) 電梯操控模塊
首先紅綠燈顯示電梯的運(yùn)行狀態(tài),綠燈表示電梯上下正常的運(yùn)行,當(dāng)電梯停在某一層的時(shí)候黃燈閃爍,而當(dāng)電梯里面的載重超過最大限制人數(shù)(質(zhì)量)的時(shí)候,紅燈就會亮起作為提示警告。而且電梯也盡量智能化,假如同時(shí)選中某幾層時(shí),電梯會自動按照所選擇樓層的上下順序依次停止。
b) 光強(qiáng)控制模塊
假定電梯內(nèi)有一個(gè)電燈,電梯可以隨時(shí)檢測實(shí)際光強(qiáng)信息并顯示出來。為了滿足不同人的需求,可以設(shè)定想要達(dá)到的光強(qiáng)大小,系統(tǒng)就會自動調(diào)節(jié)燈泡電壓以使達(dá)到目標(biāo)光強(qiáng)值。
c) 溫度測量與控制模塊
這是一個(gè)類似于溫控風(fēng)扇的控制程序。我們假定有人使用紅外裝置給設(shè)定了一個(gè)目標(biāo)溫度,然后程序會自動與實(shí)際測量的溫度比較。假如目標(biāo)溫度低于實(shí)際溫度,那么就會自動打開風(fēng)扇,以達(dá)到降溫的目的,而且風(fēng)扇的轉(zhuǎn)速與實(shí)際溫度和設(shè)定溫度之間的差值成正比;如果設(shè)定的目標(biāo)溫度高于實(shí)際溫度,那么就不采取任何動作。所以該模塊只有降溫的功能。
d) 質(zhì)量測量模塊
該模塊用來校準(zhǔn)并檢測物體或者人的質(zhì)量。首先放置一個(gè)標(biāo)準(zhǔn)質(zhì)量的物體,然后校正得到參量,再通過參量的計(jì)算得到實(shí)際質(zhì)量。該質(zhì)量與設(shè)定的電梯質(zhì)量上限比較,如果前者小的話,電梯繼續(xù)正常運(yùn)行,否則電梯就會停止工作并且顯示紅燈,提示電梯已經(jīng)超重。
3、 遇到的問題及修正
a) 在編好這幾部分模塊的程序后,我們到實(shí)驗(yàn)室進(jìn)行測試。發(fā)現(xiàn)不管是哪個(gè)程序,都沒有達(dá)到我們預(yù)期的結(jié)果。然后換過幾個(gè)控制集成箱以及A/D采集卡,結(jié)果都是如此。我們使用LabVIEW里面的“高亮”功能檢查數(shù)據(jù)流的變化時(shí),發(fā)現(xiàn)不管怎么樣的條件輸入,從儀器讀出來的數(shù)據(jù)都是零,也就是說貌似儀器不能起作用。一開始我們認(rèn)為是A/D采集卡驅(qū)動的問題,但是當(dāng)我們打開LabVIEW的演示實(shí)驗(yàn)并測試后,卻發(fā)現(xiàn)能正常運(yùn)行。所以,現(xiàn)在只能對比我們自己的程序和演示實(shí)驗(yàn)的程序,找出問題在哪里。最后,發(fā)現(xiàn)這可能是程序中“CreatID”這個(gè)子VI程序初始化的問題。
CreatID是每個(gè)模塊運(yùn)行前都要有的子程序,相當(dāng)于給程序創(chuàng)建一個(gè)內(nèi)存。其中DeviceID是設(shè)備編號,默認(rèn)值為0,即入股有一個(gè)U18AD模板時(shí),編號為0,如果有第二個(gè)U18模板時(shí),編號順次計(jì)數(shù)為1。而我們程序中把DeviceID當(dāng)作了不同模塊的編號了,實(shí)際上我們應(yīng)該改變的是AD采集通道編號,而DeviceID應(yīng)該都初始化為0。當(dāng)我們給AD卡初始化的時(shí)候給不同的模塊編號,用到的子VI程序?yàn)锳DINT。如下圖所示:
其中pADpara就是決定了AD采集通道,不同的模塊要有不同的編號。而這個(gè)編號值則按照演示程序中寫的設(shè)定。
b) 在光強(qiáng)控制程序中,由于要是電燈的亮度和設(shè)定的光強(qiáng)值相等,就要從一個(gè)設(shè)定的光強(qiáng),反解出達(dá)到這個(gè)光強(qiáng)的電壓值。因?yàn)槲覀冎垒斎胼敵鲂盘柖紩D(zhuǎn)變成電壓信號。但是我們已經(jīng)知道光強(qiáng)和電壓應(yīng)該成正相關(guān),即電燈兩端電壓越高其發(fā)光光強(qiáng)越大,但這種關(guān)系未必是線性的。所以我們設(shè)計(jì)了這樣的算法,電壓從0與5開始取中點(diǎn),把這個(gè)中點(diǎn)給電燈,如果發(fā)出來的光強(qiáng)比設(shè)定光強(qiáng)高,那我們就要降低電壓,即下一次循環(huán)我們就取0和2.5的中點(diǎn),否則就取2.5與5的中點(diǎn)。一直循環(huán)直到和設(shè)定的光強(qiáng)相差不到0.5。
但是我們發(fā)現(xiàn)如果按照我們給定的算法,并不能夠很快地得到結(jié)果。但是通過“高亮”的運(yùn)行方式,發(fā)現(xiàn)其實(shí)并不是我們的算法有問題,而是經(jīng)常通過取兩端電壓中點(diǎn)之后,還沒有找到滿足條件的電壓值就達(dá)到邊界而跳出循環(huán),結(jié)果顯示出來的光強(qiáng)大小與設(shè)定值相差很大。而且,重要的是從光敏電阻兩端讀出的電壓與給電燈附加電壓并沒有成為嚴(yán)格的“及時(shí)的”正向?qū)?yīng)關(guān)系,也就是說光強(qiáng)與光敏電阻兩端電壓不是很嚴(yán)格的單向?qū)?yīng),而是有一定的微小浮動。但是這個(gè)很嚴(yán)重的影響到去兩端電壓中點(diǎn)的方法。所以,最后采取了連續(xù)讀50次取平均值的做法來定讀出來的光敏電阻兩端電壓的大小。最后結(jié)果顯示,雖然程序運(yùn)行比較慢,但是能夠很好的實(shí)現(xiàn)設(shè)定的光強(qiáng)值。
c) 關(guān)于溫度控制模塊,基本上這個(gè)部分的風(fēng)扇轉(zhuǎn)動部分和演示實(shí)驗(yàn)中的程序是類似的,只是多了一個(gè)轉(zhuǎn)速與實(shí)際溫度和設(shè)定溫度的差值成正比這個(gè)功能。我們遇到的問題是如何得到轉(zhuǎn)速。一直糾結(jié)于“Getcount”這個(gè)子VI程序讀出來的是什么,然后就會明白為何程序中會用“前一秒”減去“后一秒”得到轉(zhuǎn)速。經(jīng)過查找資料,我們了解到風(fēng)扇下面有一個(gè)類似于激光計(jì)數(shù)的裝置,扇葉每轉(zhuǎn)過一個(gè)就計(jì)數(shù)為1,所以Getcount讀出來的應(yīng)該是這種計(jì)數(shù)。但是這個(gè)計(jì)數(shù)隨著風(fēng)扇轉(zhuǎn)動是不斷減小的,不是累積增加的。所以只能用前一秒的計(jì)數(shù)減去后一秒的計(jì)數(shù)并除以9得到轉(zhuǎn)速(9是風(fēng)扇的扇葉數(shù)量)。
另外風(fēng)扇貌似有個(gè)額定電壓3V,超過這個(gè)值才能驅(qū)動轉(zhuǎn)起來。而且發(fā)現(xiàn)假如上一次風(fēng)扇已經(jīng)轉(zhuǎn)起來,下一次給風(fēng)扇輸入的電壓0V時(shí),風(fēng)扇卻還能繼續(xù)轉(zhuǎn)動。說明0V以及過低的電壓都不能驅(qū)動風(fēng)扇,所以最后我們給設(shè)定了2.5V的電壓使得在溫度不滿足條件時(shí)風(fēng)扇停止。
4、 結(jié)論
我們從最初的演示實(shí)驗(yàn)得到啟發(fā),再討論構(gòu)想并開始編程,然后不斷地對程序進(jìn)行修改和測試,最終得到了這個(gè)還算比較完整的大作品,一套模擬真實(shí)的電梯控制系統(tǒng)。我們基本上達(dá)到了最初預(yù)期的結(jié)果。但是對于這個(gè)系統(tǒng),有些地方需要仍然做一點(diǎn)改進(jìn),比如光強(qiáng)控制模塊的算法可能不夠嚴(yán)謹(jǐn),導(dǎo)致嚴(yán)重地拖慢程序運(yùn)行速度并造成結(jié)果偏差很遠(yuǎn),假如使用線性求解的方式或許可能更快一些,即假定電燈兩端電壓線性對應(yīng)光強(qiáng)大小,而且0V對應(yīng)于0光強(qiáng),最大電壓5V對應(yīng)于最大光強(qiáng)值15。
關(guān)于LabVIEW我覺得從最初的一點(diǎn)不懂到現(xiàn)在能嘗試寫一些小程序,我學(xué)到了不少東西,除了關(guān)于LabVIEW程序編寫的特點(diǎn),還學(xué)到了如何進(jìn)行計(jì)算機(jī)實(shí)測與控制的方法。我想對以后的科研工作肯定會有很大的幫助。