朱建剛
(中電科儀器儀表有限公司,山東 青島 266555)
在測試領域,虛擬儀器技術是最新的自動測試技術之一。IVI儀器驅動程序在虛擬儀器驅動程序層面上定義了全新的規范和架構,使同一類儀器實現了一定的互換性,降低了開發測試系統過程的成本。本文將介紹應用Nimbus Driver Studio開發IVI-COM驅動程序的過程,并在上位機編寫控制程序調用儀器驅動,實現對儀器的遠程控制。
IVI儀器驅動程序定義了儀器的編程接口,使儀器的硬件接口與測試系統的應用程序實現了分離,不僅將測試系統的開發變得更加高效,還使儀器具備了一定的可互換特性[1]。IVI規范主要定義了IVI類驅動器和IVI專用驅動器。IVI類驅動程序介于應用程序和IVI專用驅動程序之間,實現應用程序對專用驅動程序的調用。IVI專用驅動程序是實現儀器控制的主要驅動程序,包括類兼容專用驅動程序和定制專用驅動程序[2]。

圖1 IVI驅動結構圖Fig.1 IVI Drive structure diagram
COM是一種以組件為發布單元的對象模型,它定義了不同組件之間的交互規范。1個組件的形式是1個動態鏈接庫(dll)或1個可執行文件(exe)。COM組件在提供組件接口標準的同時,還引入了面向對象的思想,每個COM組件對應1個或多個COM對象,每個對象包含多個接口,每個接口又由多個用來實現用戶應用程序功能的函數組成[3]。
IVI-COM儀器驅動程序是應用了COM API的IVI驅動程序,而僅是IVI-COM驅動程序中的API并不能實現儀器的互換性,IVI基金會為此定義了IVI-COM會話工廠(IVICOM Session Factory)組件。應用程序通過邏輯名訪問IVICOM會話工廠,會話工廠通過該邏輯名與IVI配置文件中的邏輯名匹配,得到實際的IVI-COM驅動器指針,從而實現動態加載IVI-COM驅動器的動態庫[4]。驅動程序包含儀器通用功能對應的操作函數,通過操作函數實現對儀器的控制[5],IVI驅動結構如圖1所示。
Nimbus Driver Studio軟件集成在Microsoft Visual Studio開發環境下,可以完成IVI-COM以及IVI-C儀器驅動程序的開發工作。接下來,以IviRFSigGen射頻信號發生器類規范的儀器驅動程序“Ceyear1435RfSigGen”為例,設計某款信號發生器的IVI-COM儀器驅動程序。
本次開發基于Microsoft Windows 7操作系統,首先安裝Microsoft Visual Studio 2010軟件包;之后安裝Nimbus開發組件。其中,Nimbus組件集成在Visual Studio 2010開發環境下。
啟動Visual Studio 2010,在新建項目對話框中選擇IVI-COM Projects下的IVI-COM Driver模板。根據生成向導,依次添加項目的名稱、儀器類(IviRFSigGen類)、LXI類型以及屬性等,生成IVI-COM驅動解決方案,并建立驅動框架。解決方案中各工程之間的關系如圖2所示。

圖2 驅動解決方案包含工程之間關系Fig.2 Relationship between projects in driving solutions
IVI-COM儀器驅動程序包含3個根接口,分別是IIviDriver、IIviRFSigGen及ICeyear1435RfSigGen。 其中,IIviDriver是儀器固有功能根接口,該接口下包含IiviComponentIdentity、IIviDriver、IiviDriverIdentity、IiviDriverOperation及IiviDriverUtility共5個子接口,該接口具有可互換性;IIviRFSigGen是儀器類兼容根接口,該接口是射頻信號發生器類儀器基本功能的實現接口,包含的功能子接口有ALC、AnalogModulation(包含AM、FM及PM)、DigitalModulation( 包 含Arb及Base)、IQ、LFGenerator、PulseGenerator、PulseModulation、ReferenceOscillator、RF、Sweep等[6],該接口具有可互換性;ICeyear1435RfSigGen是儀器專用功能根接口,該接口是開發者基于儀器的功能而添加的專用接口,包含的具體接口由儀器本身功能決定,儀器的全部功能都能在該接口下實現,該接口不具備可互換性。
在IVI-COM驅動程序中,每個功能都被設計成1個包含屬性或者方法的接口,各個接口之間可以相互調用。其中,屬性一般只包含1個參數,1個屬性的讀取以及設置分別由1個前綴為“get_”和“put_”的函數實現。方法包含的參數不受限制,設置方式靈活多變,能實現更為復雜的儀器功能。屬性和方法的實現方式類似,如果實現方式簡單,直接在Instrument command選項中設置程控命令即可,但要是單獨的程控命令不能很好地實現所要添加的功能,則需要在CoCeyear435RfSigGen中詳細設計實現的源代碼。
IIviDriver根接口與IIviRFSigGen根接口下的功能是信號發生器類儀器的通用接口,這類接口下的功能是確定的。IIviDriver根接口下的功能接口控制函數源代碼在驅動框架建立時已自動生成。IIviRFSigGen根接口支持IVI規范“IVI-4.10_RfSigGen”中對射頻信號發生器類儀器所定義的屬性和方法,該根接口下的大部分功能在專用接口中已經實現,可直接調用專用接口下相應的功能接口函數即可。ICeyear1435RfSigGen根接口包含儀器全部功能,在該根接口下按儀器功能分類添加子功能接口,各子功能接口就可以通過添加屬性或方法來實現儀器的具體功能。屬性的添加過程如圖3所示,方法的添加過程與屬性類似。

圖3 屬性添加流程圖Fig.3 Add property flowchart
依照上述步驟將信號發生器的全部功能,以屬性或方法的形式添加到對應的子功能接口下,并設計好實現的程序代碼。
在解決方案“Ceyear1435RfSigGen”屬性頁中配置屬性,選擇需要生成的項目配置后編譯驅動程序。在驅動程序各項編譯成功后,儀器的幫助文檔在解決方案***Helpin下生成,儀器驅動的安裝包在***Setupin下生成。
在上位機上安裝IVI-COM儀器驅動之前,需要確保IVI Shared Components組件已成功安裝。驅動安裝目錄為C:Program FilesIVI FoundationIVI。驅動安裝成功后,需要設置IVI配置倉,這里應用NI-MAX軟件完成該設置。MAX會自動識別已安裝的驅動,通過設置邏輯名關聯到驅動并對驅動進行管理。在MAX軟件里添加邏輯名“Ceyear1435”,將之關聯驅動“Ceyear1435RfSigGen”,配置好資源描述、資源地址等信息,最后通過“Save IVI Configuration”保存設置。MAX軟件配置界面如圖4所示。
通過邏輯名調用IVI-COM驅動的控制程序主要代碼為:
#import “GlobMgr.dll” no_namespace
#import “IviDriverTypeLib.dll” no_namespace

圖4 儀器驅動程序配置界面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; //設置頻率
spSS->RF->Level = XXX; //設置功率
……
spDriver->Close();
通過網線連接儀器與上位機后,在上位機上運行測試程序,此時信號發生器前面板顯示“遠控”狀態,且儀器的頻率及功率等均按要求進行了設置,證明了本文設計的IVI-COM儀器驅動的有效性。將連接的信號發生器替換為另外某款信號發生器,只需在MAX軟件中對儀器驅動進行重新配置,并修改測試程序中的邏輯名與之相對應即可,其他部分無需改動。經過實際測試,測試程序可通過切換邏輯名測試不同的儀器,證明了IVI-COM儀器驅動具有良好的可互換性。
本文設計并實現了某款信號發生器的IVI-COM儀器驅動程序,經驗證該驅動能有效的對儀器進行控制;同時通過試驗證明IVI-COM儀器驅動程序具有一定的可互換性,降低了開發人員的測試時間,具有顯著的實用價值,已成功應用于數款信號發生器。