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