摘 要: 分析標(biāo)準(zhǔn)狀態(tài)機(jī)的不足,提出一種改進(jìn)事件狀態(tài)機(jī)的LabVIEW程序主框架。驅(qū)動USB 2.0采集卡進(jìn)行數(shù)據(jù)實(shí)時采集,聯(lián)合MATLAB混合編程進(jìn)行數(shù)據(jù)分析,期間,用戶可對數(shù)據(jù)按時間進(jìn)行自動保存或手動保存。此外,該系統(tǒng)具有界面友好、操作方便及功能易擴(kuò)充等優(yōu)點(diǎn)。
關(guān)鍵詞: LabVIEW;改進(jìn)狀態(tài)機(jī);混合編程;數(shù)據(jù)采集
1 采集卡硬件簡介
采集卡利用USB 2.0接口進(jìn)行數(shù)據(jù)傳輸,數(shù)據(jù)傳輸率可達(dá)480 Mb/s。相對于其他接口USB 2.0具有突出的優(yōu)點(diǎn):它是一種便攜接口,可以對外提供2.5 W的電源,不需要外部供電。一般的筆記本電腦沒有PCI、ISA等常規(guī)接口,而USB接口是筆記本電腦的標(biāo)準(zhǔn)配置。
采集卡ADC精度為12位、采樣速率達(dá)6 MHz。并且在采集卡上集成了一個100 MHz的高速數(shù)字信號處理器(DSP)作為控制器。同時提供了一組C語言開發(fā)的API,用于復(fù)雜功能的開發(fā)。
2 軟件設(shè)計
2.1 LabVIEW程序設(shè)計框架
LabVIEW是一種以G語言(圖形化)編程的軟件開發(fā)平臺[1-2],界面直觀并提供了大量的組件和庫函數(shù),特別適合數(shù)據(jù)采集分析軟件系統(tǒng)的開發(fā)。
G語言比較容易掌握,但是LabVIEW程序框架設(shè)計卻很少有文獻(xiàn)提到。一個合理而高效的程序框架是開發(fā)高質(zhì)量軟件的基石,因此想要開發(fā)一款性能優(yōu)良的軟件程序框架設(shè)計是第一步。
在LabVIEW中提出了單循環(huán)應(yīng)用程序、對話框和標(biāo)準(zhǔn)狀態(tài)機(jī)等框架。
圖1所示框架可以滿足一些軟件開發(fā)的需求,但對于數(shù)據(jù)采集軟件系統(tǒng)還不夠,因?yàn)樵摽蚣苋狈κ录奶幚恚绱蜷_設(shè)備、單次采集和文件保存等。
在圖2中加入事件輪詢和事件處理程序,每一個事件處理完后又開始不斷查詢事件。利用該框架可以完成數(shù)據(jù)采集、文件保存和文件讀取等功能。但是其中不足之處在于處理事件時不能執(zhí)行事件之外的程序,如更新狀態(tài)和數(shù)據(jù)顯示等。尤其在連續(xù)采集中,按照這種框架那么就必須為連續(xù)采集單獨(dú)提供一個示波器,如果還有數(shù)據(jù)處理則又需要單獨(dú)提供一個示波器,因此示波器不能復(fù)用,導(dǎo)致用戶界面模塊增加。
針對上述不足,改進(jìn)一種事件狀態(tài)機(jī)的框架如圖3所示,其中超時事件即當(dāng)一個事件完成后經(jīng)過設(shè)定的時間后會自動執(zhí)行超時事件。利用超時事件可以提供事件外程序執(zhí)行的機(jī)會,而每個事件只需要提供事件名稱的枚舉,然后進(jìn)入超時事件,在超時事件里根據(jù)事件名稱執(zhí)行相應(yīng)功能。采用移位寄存器作為數(shù)據(jù)傳遞媒介,這樣狀態(tài)及波形圖可以實(shí)時更新。這種程序框架清晰而且易于擴(kuò)展,擴(kuò)展一個新的功能只需要3步。
?。?)為新功能提供事件處理。
?。?)在事件處理中把自身的事件名稱更新到事件枚舉中去。
(3)在超時事件中新增事件狀態(tài),并完成相應(yīng)功能。
在這個框架中,可以簡化前面板的設(shè)計,程序框圖的設(shè)計也模式化,使用極為方便。
2.2 MATLAB混合編程
在信號處理上MATLAB功能強(qiáng)大,在LabVIEW中可以通過MATLAB Script與MATLAB服務(wù)器通信,從而完成信號處理和數(shù)據(jù)的傳遞。
需要注意的是計算機(jī)中必須安裝有MATLAB 5.0及以上版本,而且只能用于Windows平臺,還有就是二者在數(shù)據(jù)通信時數(shù)據(jù)類型需要匹配[3]。此外,MATLAB會占用過多的內(nèi)存,因此這種混合編程最好用于復(fù)雜的信號處理上。
3 設(shè)計實(shí)例
3.1 前面板
美觀而友好的界面是軟件開發(fā)重要的一個環(huán)節(jié),本套系統(tǒng)最終設(shè)計界面如圖4所示。從功能上主要分為采集卡控制、波形顯示、文件處理和信號處理4個模塊,其他輔助設(shè)計如狀態(tài)欄、進(jìn)度條、指示燈和系統(tǒng)時間等。
3.2 采集卡控制
根據(jù)改進(jìn)的事件狀態(tài)機(jī)程序框架,為采集卡控制提供開啟設(shè)備、關(guān)閉設(shè)備、單次采集和連續(xù)采集4個事件。每個事件調(diào)用采集卡相應(yīng)的API,這里需要用到LabVIEW中的調(diào)用庫函數(shù)[4]。具體做法是把提供的dll文件拷貝到工程中,然后在庫函數(shù)中配置路徑和輸入輸出參數(shù)。輸入?yún)?shù)由前面板提供。圖4中ReadAdc為讀取數(shù)據(jù)采集卡的庫函數(shù)調(diào)用,由返回參數(shù)的正確性判斷是否繼續(xù)執(zhí)行,這樣能增加程序的魯棒性。
圖5為單次采集事件在超時事件中的響應(yīng)。首先將事件枚舉更新為等待用戶操作,再利用API讀取ADC緩沖,如果讀取成功,則利用的MATLAB腳本對數(shù)據(jù)進(jìn)行處理,也可以用LabVIEW提供的數(shù)組函數(shù)進(jìn)行處理。然后將處理后的數(shù)據(jù)傳遞到事件外,事件處理完畢后會進(jìn)行大循環(huán)執(zhí)行狀態(tài)欄和示波器的更新,然后執(zhí)行超時事件的等待用戶操作。其他事件的處理也類似。
3.3 波形顯示
利用LabVIEW的波形圖可以完成大部分顯示功能,但是對于頻域顯示,則需要用到XY波形圖。波形顯示放到大循環(huán)中,每調(diào)用一個事件時,執(zhí)行超時事件之后,會執(zhí)行波形更新,這就使用較少的示波器顯示所需的數(shù)據(jù)。
對于LabVIEW的波形圖,在運(yùn)行時不能很好地交互,如伸縮X、Y軸,利用屬性節(jié)點(diǎn)編程,可以解決該問題。
3.4 文件處理
對于不管是單次采集、連續(xù)采集還是調(diào)用算法處理后的數(shù)據(jù),當(dāng)用戶希望保存時都要對用戶請求進(jìn)行響應(yīng)。單次采集比較容易,可以利用文件對話框選擇路徑和文件名,然后保存數(shù)據(jù)。但是在連續(xù)采集中,打開文件對話框會中斷連續(xù)采集事件的處理,因此需要設(shè)計出一種自動保存文件的程序如圖6所示。
在程序啟動時,生成一個默認(rèn)的文件路徑??紤]到數(shù)據(jù)文件比較多,在文件路徑中加入日期,文件名由用戶確定,同時在文件名中加入采集的時間;若考慮連續(xù)采集,還需要由用戶確定保存的文件數(shù)。本系統(tǒng)采用的單次采集文件名格式如:data_12_00_00。
需要注意的是,時間每隔1 s更新一次,所以在連續(xù)采樣中當(dāng)采樣間隔小于1 s時,數(shù)據(jù)文件在1 s內(nèi)數(shù)據(jù)會被覆蓋,如果需要更短的時間,那么應(yīng)該用毫秒級的時間作為文件名。另外,在文件名中不能出現(xiàn)‘:’,因此需要將‘:’替換為其他字符,在本系統(tǒng)中用下劃線做的替換。此外還加入了進(jìn)度條和狀態(tài)欄,顯示文件保存的情況。
3.5 信號處理
對采集到的信號進(jìn)行分析和處理是本系統(tǒng)的后期任務(wù),前期完成的有FFT變換、小波去噪和加噪等,如圖7所示,將處理后的信號輸出到示波器中便可。對于復(fù)雜信號的處理借助MATLAB混合編程可以輕松實(shí)現(xiàn)。
本文分析了LabVIEW程序設(shè)計的框架問題,根據(jù)其中的不足提出了一種改進(jìn)的事件狀態(tài)機(jī)程序框架,并在該框架下開發(fā)了一套功能完善的實(shí)時數(shù)據(jù)采集分析系統(tǒng)。該系統(tǒng)性能良好且已投入使用,友好美觀的界面和文件自動保存設(shè)計是本系統(tǒng)的一大特色。利用該程序設(shè)計模式可以快速高效地開發(fā)相應(yīng)的軟件系統(tǒng),并且后期算法處理也極為簡單,只要MATLAB算法即可,因此可以使算法設(shè)計獨(dú)立開來。
參考文獻(xiàn)
[1] 戴敬.LabVIEW基礎(chǔ)教程[M].北京:科學(xué)出版社,2004.
[2] 楊樂平,李海濤.LabVIEW程序設(shè)計與應(yīng)用(第2版)[M].北京:電子工業(yè)出版社,2004.
[3] 柴敬安,廖克儉.LabVIEW和MATLAB混合編程方法的研究與實(shí)現(xiàn)[J].計算機(jī)測量與控制,2008,16(5):737-739.
[4] 戴新.?dāng)?shù)據(jù)采集卡在LabVIEW中的驅(qū)動方法[J].計算機(jī)應(yīng)用與軟件,2008,25(3):156-158.