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