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