朱建剛
(中電科儀器儀表有限公司,山東 青島 266555)
在測試領(lǐng)域,虛擬儀器技術(shù)是最新的自動測試技術(shù)之一。IVI儀器驅(qū)動程序在虛擬儀器驅(qū)動程序?qū)用嫔隙x了全新的規(guī)范和架構(gòu),使同一類儀器實現(xiàn)了一定的互換性,降低了開發(fā)測試系統(tǒng)過程的成本。本文將介紹應(yīng)用Nimbus Driver Studio開發(fā)IVI-COM驅(qū)動程序的過程,并在上位機(jī)編寫控制程序調(diào)用儀器驅(qū)動,實現(xiàn)對儀器的遠(yuǎn)程控制。
IVI儀器驅(qū)動程序定義了儀器的編程接口,使儀器的硬件接口與測試系統(tǒng)的應(yīng)用程序?qū)崿F(xiàn)了分離,不僅將測試系統(tǒng)的開發(fā)變得更加高效,還使儀器具備了一定的可互換特性[1]。IVI規(guī)范主要定義了IVI類驅(qū)動器和IVI專用驅(qū)動器。IVI類驅(qū)動程序介于應(yīng)用程序和IVI專用驅(qū)動程序之間,實現(xiàn)應(yīng)用程序?qū)S抿?qū)動程序的調(diào)用。IVI專用驅(qū)動程序是實現(xiàn)儀器控制的主要驅(qū)動程序,包括類兼容專用驅(qū)動程序和定制專用驅(qū)動程序[2]。
圖1 IVI驅(qū)動結(jié)構(gòu)圖Fig.1 IVI Drive structure diagram
COM是一種以組件為發(fā)布單元的對象模型,它定義了不同組件之間的交互規(guī)范。1個組件的形式是1個動態(tài)鏈接庫(dll)或1個可執(zhí)行文件(exe)。COM組件在提供組件接口標(biāo)準(zhǔn)的同時,還引入了面向?qū)ο蟮乃枷?,每個COM組件對應(yīng)1個或多個COM對象,每個對象包含多個接口,每個接口又由多個用來實現(xiàn)用戶應(yīng)用程序功能的函數(shù)組成[3]。
IVI-COM儀器驅(qū)動程序是應(yīng)用了COM API的IVI驅(qū)動程序,而僅是IVI-COM驅(qū)動程序中的API并不能實現(xiàn)儀器的互換性,IVI基金會為此定義了IVI-COM會話工廠(IVICOM Session Factory)組件。應(yīng)用程序通過邏輯名訪問IVICOM會話工廠,會話工廠通過該邏輯名與IVI配置文件中的邏輯名匹配,得到實際的IVI-COM驅(qū)動器指針,從而實現(xiàn)動態(tài)加載IVI-COM驅(qū)動器的動態(tài)庫[4]。驅(qū)動程序包含儀器通用功能對應(yīng)的操作函數(shù),通過操作函數(shù)實現(xiàn)對儀器的控制[5],IVI驅(qū)動結(jié)構(gòu)如圖1所示。
Nimbus Driver Studio軟件集成在Microsoft Visual Studio開發(fā)環(huán)境下,可以完成IVI-COM以及IVI-C儀器驅(qū)動程序的開發(fā)工作。接下來,以IviRFSigGen射頻信號發(fā)生器類規(guī)范的儀器驅(qū)動程序“Ceyear1435RfSigGen”為例,設(shè)計某款信號發(fā)生器的IVI-COM儀器驅(qū)動程序。
本次開發(fā)基于Microsoft Windows 7操作系統(tǒng),首先安裝Microsoft Visual Studio 2010軟件包;之后安裝Nimbus開發(fā)組件。其中,Nimbus組件集成在Visual Studio 2010開發(fā)環(huán)境下。
啟動Visual Studio 2010,在新建項目對話框中選擇IVI-COM Projects下的IVI-COM Driver模板。根據(jù)生成向?qū)В来翁砑禹椖康拿Q、儀器類(IviRFSigGen類)、LXI類型以及屬性等,生成IVI-COM驅(qū)動解決方案,并建立驅(qū)動框架。解決方案中各工程之間的關(guān)系如圖2所示。
圖2 驅(qū)動解決方案包含工程之間關(guān)系Fig.2 Relationship between projects in driving solutions
IVI-COM儀器驅(qū)動程序包含3個根接口,分別是IIviDriver、IIviRFSigGen及ICeyear1435RfSigGen。 其中,IIviDriver是儀器固有功能根接口,該接口下包含IiviComponentIdentity、IIviDriver、IiviDriverIdentity、IiviDriverOperation及IiviDriverUtility共5個子接口,該接口具有可互換性;IIviRFSigGen是儀器類兼容根接口,該接口是射頻信號發(fā)生器類儀器基本功能的實現(xiàn)接口,包含的功能子接口有ALC、AnalogModulation(包含AM、FM及PM)、DigitalModulation( 包 含Arb及Base)、IQ、LFGenerator、PulseGenerator、PulseModulation、ReferenceOscillator、RF、Sweep等[6],該接口具有可互換性;ICeyear1435RfSigGen是儀器專用功能根接口,該接口是開發(fā)者基于儀器的功能而添加的專用接口,包含的具體接口由儀器本身功能決定,儀器的全部功能都能在該接口下實現(xiàn),該接口不具備可互換性。
在IVI-COM驅(qū)動程序中,每個功能都被設(shè)計成1個包含屬性或者方法的接口,各個接口之間可以相互調(diào)用。其中,屬性一般只包含1個參數(shù),1個屬性的讀取以及設(shè)置分別由1個前綴為“get_”和“put_”的函數(shù)實現(xiàn)。方法包含的參數(shù)不受限制,設(shè)置方式靈活多變,能實現(xiàn)更為復(fù)雜的儀器功能。屬性和方法的實現(xiàn)方式類似,如果實現(xiàn)方式簡單,直接在Instrument command選項中設(shè)置程控命令即可,但要是單獨的程控命令不能很好地實現(xiàn)所要添加的功能,則需要在CoCeyear435RfSigGen中詳細(xì)設(shè)計實現(xiàn)的源代碼。
IIviDriver根接口與IIviRFSigGen根接口下的功能是信號發(fā)生器類儀器的通用接口,這類接口下的功能是確定的。IIviDriver根接口下的功能接口控制函數(shù)源代碼在驅(qū)動框架建立時已自動生成。IIviRFSigGen根接口支持IVI規(guī)范“IVI-4.10_RfSigGen”中對射頻信號發(fā)生器類儀器所定義的屬性和方法,該根接口下的大部分功能在專用接口中已經(jīng)實現(xiàn),可直接調(diào)用專用接口下相應(yīng)的功能接口函數(shù)即可。ICeyear1435RfSigGen根接口包含儀器全部功能,在該根接口下按儀器功能分類添加子功能接口,各子功能接口就可以通過添加屬性或方法來實現(xiàn)儀器的具體功能。屬性的添加過程如圖3所示,方法的添加過程與屬性類似。
圖3 屬性添加流程圖Fig.3 Add property flowchart
依照上述步驟將信號發(fā)生器的全部功能,以屬性或方法的形式添加到對應(yīng)的子功能接口下,并設(shè)計好實現(xiàn)的程序代碼。
在解決方案“Ceyear1435RfSigGen”屬性頁中配置屬性,選擇需要生成的項目配置后編譯驅(qū)動程序。在驅(qū)動程序各項編譯成功后,儀器的幫助文檔在解決方案***Helpin下生成,儀器驅(qū)動的安裝包在***Setupin下生成。
在上位機(jī)上安裝IVI-COM儀器驅(qū)動之前,需要確保IVI Shared Components組件已成功安裝。驅(qū)動安裝目錄為C:Program FilesIVI FoundationIVI。驅(qū)動安裝成功后,需要設(shè)置IVI配置倉,這里應(yīng)用NI-MAX軟件完成該設(shè)置。MAX會自動識別已安裝的驅(qū)動,通過設(shè)置邏輯名關(guān)聯(lián)到驅(qū)動并對驅(qū)動進(jìn)行管理。在MAX軟件里添加邏輯名“Ceyear1435”,將之關(guān)聯(lián)驅(qū)動“Ceyear1435RfSigGen”,配置好資源描述、資源地址等信息,最后通過“Save IVI Configuration”保存設(shè)置。MAX軟件配置界面如圖4所示。
通過邏輯名調(diào)用IVI-COM驅(qū)動的控制程序主要代碼為:
#import “GlobMgr.dll” no_namespace
#import “IviDriverTypeLib.dll” no_namespace
圖4 儀器驅(qū)動程序配置界面Fig.4 Instrument driver configuration interface
#import “IviRFSigGenTypeLib.dll” no_namespace
IIviDriverPtr spDriver(_uuidof(Ceyear1435RfSigGen));
spDriver->Initialize((“Ceyear1435”), VARIANT_FALSE,VARIANT_FALSE, _T(“”));
IIviRFSigGenPtr spSS(spDriver);
spSS->RF->Frequency = XXX; //設(shè)置頻率
spSS->RF->Level = XXX; //設(shè)置功率
……
spDriver->Close();
通過網(wǎng)線連接儀器與上位機(jī)后,在上位機(jī)上運(yùn)行測試程序,此時信號發(fā)生器前面板顯示“遠(yuǎn)控”狀態(tài),且儀器的頻率及功率等均按要求進(jìn)行了設(shè)置,證明了本文設(shè)計的IVI-COM儀器驅(qū)動的有效性。將連接的信號發(fā)生器替換為另外某款信號發(fā)生器,只需在MAX軟件中對儀器驅(qū)動進(jìn)行重新配置,并修改測試程序中的邏輯名與之相對應(yīng)即可,其他部分無需改動。經(jīng)過實際測試,測試程序可通過切換邏輯名測試不同的儀器,證明了IVI-COM儀器驅(qū)動具有良好的可互換性。
本文設(shè)計并實現(xiàn)了某款信號發(fā)生器的IVI-COM儀器驅(qū)動程序,經(jīng)驗證該驅(qū)動能有效的對儀器進(jìn)行控制;同時通過試驗證明IVI-COM儀器驅(qū)動程序具有一定的可互換性,降低了開發(fā)人員的測試時間,具有顯著的實用價值,已成功應(yīng)用于數(shù)款信號發(fā)生器。