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