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