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