涂天佳,王 見,秦樹人
(重慶大學測試中心,重慶 400044)
隨著計算機軟硬件技術、電子技術、總線技術等的快速發展,虛擬儀器系統以傳統儀器無法比擬的速度迅猛發展,在電子、石化、冶金、機械、航天航空、能源、科研和教學等領域得到了廣泛應用,并得到廣大測試工作者的青睞。然而,作為測試分析工具,虛擬儀器也存在著不足之處。例如,目前大多虛擬儀器系統采用在PC或工業控制計算機中插入基于PC總線的數據采集板卡構成硬件系統,并通過編寫Windows系統平臺的驅動程序和軟面板構軟件系統的方式形成測試系統。然而,在嵌入式系統平臺則更為有利,此時,先前在面臨野外或惡劣的測試環境下,采用集成的Windows平臺下開發的優秀的測試系統不能很好地發揮作用,或根本不能使用,則需重新進行開發,增加了大量的開發費用,浪費了資源,加大了項目工程或產品的成本,這對儀器使用者和開發者來說都是極為不利的。因此,提出一種可在多個平臺上運行使用的虛擬測試儀器是很有必要的,有較大的科研價值和商業使用價值。
虛擬儀器是由高效的軟件和模塊化的硬件有機結合的一種應用于測試的系統工具。由于這種儀器的專業化功能和面板控件都是由軟件形成,因此它把儀器的核心部件由傳統的硬件轉移到軟件,使得軟件成為這類儀器的核心,因此虛擬儀器也被稱為“軟件即儀器”[1]。
虛擬儀器的軟件主體大致有3部分組成,分別是數據采集模塊、信號處理運算模塊和人機交互界面。數據采集模塊主要完成對硬件采集卡的控制和采集;信號處理運算模塊是對獲取的信號做合理的分析運算,得到信號的特征分析結果,最后通過人機交互界面清晰地顯示出來。如圖1所示。
跨平臺(Cross-Platform)(或獨立于平臺)是指編程語言、應用軟件或硬件設備,可以在多種系統平臺(比如 Unix、Linux、Windows以及 Mac OS) 上工作。目前跨平臺開發主要分為兩個層次,即目標代碼級跨平臺和源代碼級跨平臺。
圖1 虛擬儀器示意圖
目標代碼級上實現跨平臺,其特點是可以做到“一次開發,處處運行”。其實現原理是使用特殊編譯器把源程序編譯成特定字節碼文件,使用虛擬機代理運行在多個平臺上。也就是說程序的源代碼并不能被操作系統直接執行,需增加虛擬機解釋這層功能。編寫的程序在不同平臺上運行時,都需要運用虛擬機解釋后才能運行,運行速度較慢,特別在要運行需大量運算和圖形顯示交互頻繁的虛擬儀器軟件時,運行效率是個問題。
另一種源代碼級上實現跨平臺,就是利用大多數平臺所共同支持的一種計算機語言,用同一個源程序在不同平臺上編譯鏈接,生成目標代碼文件,并取得相同的運行效果的方式,被稱為“一次編寫,隨處編譯”。此種方法跨平臺,可以解決運行效率問題,并且可以較好地發揮各個平臺的優勢,充分利用每個平臺自身的特點。因此,針對虛擬儀器軟件的特點,采用源代碼級跨平臺方案更加合適。
各個系統平臺間存在著較大差異,而虛擬儀器主體軟件屬于應用程序,需要所在的系統平臺的支撐。因此,要實現跨平臺虛擬儀器的開發,就需要對開發語言選擇、操作系統間的差異性和開發工具包等結合虛擬儀器的特點進行分析和論證,并找到一個有效可行的開發方案。
目前開發語言種類很多,有C、C++、JAVA、VB等,其中JAVA被稱為跨平臺開發語言,但其跨平臺開發特性實質為目標跨平臺開發方案,不適合用于虛擬儀器應用程序的開發。方案選擇C/C++作為開發語言,理由有以下兩點:
(1)C/C++是高級編程語言,適合開發大型程序,且提供了低級訪問,符合虛擬儀器軟件同底層硬件緊密結合的特點。
(2)C與C++已經形成了廣泛標準,幾乎每個系統都能進行編譯,并可生成本機代碼,不需要虛擬機代理,避免了虛擬儀器運行效率問題。
虛擬儀器的開發運行都離不開系統平臺的支撐,系統平臺間的差異也就嚴重影響著虛擬儀器的跨平臺特性。例如,各系統擁有不同的文件系統,對文件數據有不同的識別方式,因此,儀器在存儲數據和提取數據時就應采取各系統共同認可識別的數據格式進行存儲和提取。其次,同樣使用C++編寫出的程序,因各系統的編譯器不同,從而導致對程序文件無法識別和編譯等。各系統間存在的差異細節較多,此處略過。
當前,針對系統差異性問題,跨平臺軟件開發技術一般采取以下兩種應對策略:
(1)采用條件編譯的形式,在編譯器識別差異處進行條件判斷后編譯。
(2)利用面向對象開發的虛函數機制,引入中間抽象層。如圖2所示。
圖2 策略使用前后的模型
在項目開發過程中,采用第一種方案可以有效保留各平臺自己的優勢特點,但程序運行效率會受到較大的影響。而采取第二種策略可以提高程序運行效率,但會使程序千篇一律。鑒于以上特點,方案將采取兩者結合的方式,將在程序效率、效果和開發周期等中做一個權衡,合理運用以上兩個策略。
由挪威奇趣科技公司提供的Qt是一個完善的C++應用程序開發框架,可以實現“一次編寫,隨處編譯”的跨平臺解決方案,使開發出的應用程序能完美運行于Windows各版本,Mac OS X,Linux以及基于X11的諸多UNIX平臺之上。
Qt是一個“模擬的”多平臺工具包,是建立在所支持平臺的底層API上,這使得Qt靈活而高效。所有窗口部件都由Qt繪制,程序員可以通過重新實現其虛函數來擴展或自定義。Qt的體系結構如圖3所示。
圖3 Qt的體系結構
選擇當前較流行的Windows操作平臺、Linux平臺和嵌入式WinCE平臺作為目標平臺,實例完成一臺虛擬式頻譜分析儀,并對其儀器跨平臺性進行驗證。
頻譜分析是信號分析處理中常用的分析方法,主要是在頻域上對信號進行處理、分析以及顯示。目前,頻譜分析在生產實踐與科學研究中獲得了日益廣泛的應用。例如,在聲納系統中,為了尋找海洋水面艦艇或潛艇,需要對信號進行頻譜法分析,以提取有用信息,來判斷艦艇運動速度、方向、位置、大小等信息;又如,對飛機、輪船、汽車、汽輪機、電機、機床、齒輪箱等主體或部件進行實際運行的頻譜分析,從而可以提供其設計數據和用以檢驗設計效果,或者尋找振源和診斷故障,以便及時排除潛在的故障因素,保證安全運行等。
早期傳統的頻譜分析儀是將一組濾波器連在一起,每個濾波器都是一個調諧到不同中心頻率上的帶通濾波器,其輸出與檢波器相連,將交流信號變為儀表顯示的直流電平。由于帶通濾波器由電感、電容等多種無源、有源元件構成,頻譜分析儀顯得很笨重,而且頻率分辨率不高。隨著電子電路技術的發展,出現了以傅里葉變換為基礎的現代頻譜分析儀,這類頻譜分析儀以電子電路來實現傅里葉變換,從而實現頻譜分析。但是,這類頻譜分析儀仍然是以硬件電路來實現的傳統意義上的頻譜分析儀,它們有著自身無法克服復雜性、封閉性和昂貴性的缺點等。
隨著計算機技術的發展和普及,虛擬儀器技術應用到頻譜分析儀中,克服了傳統硬件化頻譜分析儀自身無法克服的缺點,形成了當前使用應用較多的虛擬式頻譜分析儀。該虛擬式頻譜分析儀的工作原理是通過設置儀器相關參數采集獲取到現實中的實際信號并實時顯示,而后通過濾波加窗等處理后進行頻域分析,得到幅值譜、相位譜、自相關函數、互相關函數、相干函數等的過程。該系統流程圖如圖4所示。
圖4 頻譜分析儀系統流程圖
該頻譜分析儀的信號處理過程大致分為記錄、分析和后處理3個部分。記錄部分主要完成對輸入信號的抗頻混濾波、幅值調節和采樣等操作,為FFT做準備;分析部分是將數據緩沖器內分段讀出數據并進行加窗處理,而后作FFT變換得到頻譜圖、自譜圖和互譜圖等;后處理部分是根據以上獲得的3組函數做相互運算,并獲得系統頻率響應函數和其他有關函數等。該儀器的系統框圖如圖5所示。
該儀器有6種顯示類型,分別是實時幅值譜、實時相位譜、自相關函數圖、互相關函數圖、相干函數圖、脈沖響應函數圖。并擁有雙通道采集AB通道,在線采集和離線分析功能選擇。軟件編寫可在任意平臺上完成,而后將編輯好的頭文件、源文件、ui文件以及資源rc文件等復制傳輸到各自平臺上編譯,從而獲得能運行在各平臺上的Makefile文件和可執行文件。
該儀器是在Windows系統平臺下編寫并調試,獲得較好效果后,再將上述文件傳輸到Fedora 9 Linux系統平臺下,重新編譯生成可執行文件。生成基于WinCE系統下的儀器程序是采用交差編譯的方式,其Qt Enbeded工具包編譯器安裝在Windows系統下,運用該編譯器直接對編輯好的程序文件進行編譯,即可得到基于WinCE系統的可執行程序,再通過串口同步傳輸,將儀器程序傳輸到基于ARM9處理器的開發板上運行。
圖5 頻譜分析儀系統框圖
圖6 各平臺的效果示意圖
圖6是該頻譜分析儀在Windows下、Fedora 9 Linux下以及WinCE5.0系統的運行效果圖。
由以上跨平臺的頻譜分析儀實例表明該文提出的方案可行、可靠、正確。該方案可以很好地解決虛擬儀器因其操作系統平臺差異而不可使用的缺點,有效屏蔽了各平臺間的差異,并且運行效果良好。該方案拓寬了虛擬儀器的應用范圍,增強了其開發靈活性,實現了平臺間較好的移植,減短了異平臺開發時間,提高了生產效率。
[1] 秦樹人.虛擬儀器[M].北京:中國計量出版社,2003.
[2]秦樹人,湯寶平,鐘佑明,等.智能控件化虛擬儀器系統——原理與實現[M].北京:科學出版社,2004.
[3] 李艷明.基于Qt跨平臺的人機交互界面的研究和應用[D].重慶:重慶大學,2007.
[4]Brian Hook.跨平臺軟件開發-C&C++[M].胡光華,賀春雨,譯.北京:清華大學出版社,2006.
[5]尚海忠,朱培彥,等.操作系統抽象層——一種支持跨平臺的新技術[J].計算機工程,2002,28(2):109-111.