高青君,周欽山,曹利建
(中電科思儀科技股份有限公司 山東 青島 266555)
LabVIEW 是一種圖形化界面的編程語(yǔ)言,是應(yīng)用廣泛的虛擬化儀器軟件開發(fā)環(huán)境,引領(lǐng)測(cè)量?jī)x器與自動(dòng)測(cè)試領(lǐng)域的發(fā)展方向。隨著測(cè)量?jī)x器領(lǐng)域的高速發(fā)展,測(cè)量應(yīng)用行業(yè)對(duì)通用儀器的參數(shù)控制及數(shù)據(jù)采集需求越來(lái)越多,該領(lǐng)域?qū)I(yè)技術(shù)性要求比較高。本文基于LabVIEW 軟件,采用兩種驅(qū)動(dòng)設(shè)計(jì)方法搭建自動(dòng)測(cè)試流程,實(shí)現(xiàn)對(duì)通用儀器的遠(yuǎn)程控制、參數(shù)設(shè)置及數(shù)據(jù)采集,滿足使用者更好更高效的自動(dòng)化程控測(cè)試的需求。
SCPI(Standard Commands For Programmable Instruments)指令是基于IEEE 488.2 標(biāo)準(zhǔn)的可用于程控儀器的標(biāo)準(zhǔn)指令,被廣泛應(yīng)用于各種通用測(cè)量?jī)x器的開發(fā)和測(cè)試。SCPI 指令是遠(yuǎn)程編程儀器操作的直接控制指令,對(duì)編程者的儀器精通專業(yè)程序要求比較高。
相對(duì)來(lái)說(shuō),VISA(Virtual Instrument Software Architecture)是在不同的總線上作了一個(gè)統(tǒng)一的編程接口,使用VISA 接口編寫的程序可以對(duì)使用不同總線的儀器進(jìn)行控制[1]。IVI 儀器驅(qū)動(dòng)比VISA 規(guī)范更高一層,是在同類儀器不同的產(chǎn)品間做了一個(gè)統(tǒng)一的編程接口,通過(guò)調(diào)用下層的VISA I/O 來(lái)實(shí)現(xiàn)儀器的實(shí)際通信和交互[2]。對(duì)儀器驅(qū)動(dòng)器和應(yīng)用程序而言,VISA 庫(kù)函數(shù)是一套可方便調(diào)用的函數(shù),其核心函數(shù)能夠控制各種類型器件,無(wú)需考慮器件的接口類型和軟件的兼容性,使用IVI 儀器驅(qū)動(dòng)器可以對(duì)支持IVI 規(guī)范的同類儀器進(jìn)行控制[3]。
IVI 基金會(huì)在VPP 兼容框架的基礎(chǔ)上定義了一系列標(biāo)準(zhǔn)儀器編程模型,并根據(jù)測(cè)試系統(tǒng)中儀器的重要性和通用性劃分儀器類。目前,已經(jīng)定義的最新儀器類有:示波器類(IviScope)、數(shù)字萬(wàn)用表類(IviDmm)、函數(shù)發(fā)生器類(IviFGen)、功率表類(IviPower)、頻譜分析儀類(IIviSpecAn)、射頻信號(hào)發(fā)生器類(IIviRFSigGen)等,IVI 規(guī)范定義的儀器驅(qū)動(dòng)器有IVI 類驅(qū)動(dòng)器和IVI專用驅(qū)動(dòng)器兩大類,通過(guò)VISA 與儀器儀表建立通信并通過(guò)驅(qū)動(dòng)器函數(shù)控制儀器,IVI 驅(qū)動(dòng)器體系結(jié)構(gòu)圖見圖1。
LabVIEW 是一種圖形化界面的編程語(yǔ)言,是應(yīng)用廣泛的虛擬化儀器軟件開發(fā)環(huán)境,對(duì)智能化、網(wǎng)絡(luò)化測(cè)量?jī)x器、測(cè)量系統(tǒng)有著不可替代的作用,引領(lǐng)測(cè)量?jī)x器與自動(dòng)測(cè)試領(lǐng)域的發(fā)展方向[4]。其將所需要的函數(shù)封裝成一個(gè)個(gè)子VI 控件,逐個(gè)進(jìn)行拖動(dòng)連接,展示效果好。
LabVIEW 編程環(huán)境下,調(diào)用IVI-COM 驅(qū)動(dòng)器,將IVI DLL 庫(kù)封裝成一個(gè)個(gè)獨(dú)立的子VI 函數(shù),通過(guò)子VI 建立程控通信連接,并利用IVI 句柄實(shí)現(xiàn)對(duì)儀表的遠(yuǎn)程控制[5]。
驅(qū)動(dòng)設(shè)計(jì)方法說(shuō)明:(1)符合IVI 規(guī)范的同類儀器驅(qū)動(dòng)安裝包安裝后提取DLL 文件;(2)打開LabVIEW 軟件,選擇菜單工具-導(dǎo)入-共享庫(kù),指定創(chuàng)建或者更新模式,并選擇為共享庫(kù)創(chuàng)建VI,選擇共享庫(kù)(.dll)文件和頭文件(.h),再選擇待轉(zhuǎn)換函數(shù),將需要轉(zhuǎn)換的DLL 函數(shù)打鉤;(3)添加Include 的頭文件和預(yù)處理定義,配置DLL函數(shù)生成VI 后的屬性規(guī)范及參數(shù)類型,生成Lvlib 文件;(4)在LabVIEW 中調(diào)用生成的一系列子VI 函數(shù),進(jìn)行對(duì)應(yīng)儀表的程控通信連接及測(cè)量參數(shù)控制流程設(shè)計(jì)。下面以頻譜分析儀類儀表為例,進(jìn)行第1 種IVI 驅(qū)動(dòng)設(shè)計(jì),采用IVI-COM 驅(qū)動(dòng)函數(shù)子VI 的方式,實(shí)現(xiàn)LabVIEW 環(huán)境下對(duì)頻譜儀程序控制的流程搭建及測(cè)量結(jié)果展示。下載并安裝頻譜分析儀IVI-COM 驅(qū)動(dòng),在LabVIEW 中導(dǎo)入共享庫(kù)文件及對(duì)應(yīng)頭文件,見圖2、圖3。
將需要的IVI 函數(shù)進(jìn)行轉(zhuǎn)換,對(duì)轉(zhuǎn)換后的VI 控件進(jìn)行配置設(shè)置。
等待生成進(jìn)度,生成Lvlib 文件。Lvlib 文件包含IVI 函數(shù)轉(zhuǎn)換的各種子VI 控件,在LabVIEW 軟件程序框圖中進(jìn)行加載,見圖4。
采用IVI 函數(shù)轉(zhuǎn)換的VI 控件程序框圖見圖5,無(wú)需知道VI 內(nèi)部具體封裝的SCPI 指令,對(duì)儀器端指令熟悉度要求較低,直接調(diào)用封裝VI 進(jìn)行控制,方便使用操作。
此時(shí)IVI 驅(qū)動(dòng)函數(shù)已經(jīng)部署好,下面進(jìn)行頻譜儀IVI驅(qū)動(dòng)程序控制的簡(jiǎn)單流程搭建,需要用到的子VI 有Init With Option.vi、Configure Center Span.vi、Configure Sweep Coupling.vi、Marker Search.vi、Read Y Trace.vi、Close.vi。其中Init With Option.vi,負(fù)責(zé)儀表的初始化設(shè)置及建立通信;Configure Center Span.vi,負(fù)責(zé)設(shè)置儀表的中心頻率和頻寬參數(shù);Configure Sweep Coupling.vi,負(fù)責(zé)設(shè)置儀表的掃描時(shí)間、RBW 等參數(shù);Marker Search.vi,負(fù)責(zé)對(duì)儀表進(jìn)行峰值搜索功能;Read Y Trace.vi,負(fù)責(zé)同步測(cè)量,查詢軌跡數(shù)據(jù)等操作[6]。
用上述的子VI 搭建測(cè)試流程對(duì)頻譜儀進(jìn)行遠(yuǎn)程控制及自動(dòng)測(cè)試,見圖6,實(shí)現(xiàn)了遠(yuǎn)程控制頻譜儀進(jìn)行初始化,設(shè)置頻率頻寬、RBW、掃描時(shí)間,并進(jìn)行峰值搜索,取頻譜結(jié)果等測(cè)試。
LabVIEW 編程環(huán)境下,直接對(duì)組合SCPI 指令進(jìn)行函數(shù)封裝VI,封裝成一個(gè)個(gè)不同功能的子VI,實(shí)現(xiàn)對(duì)儀器的遠(yuǎn)程控制。根據(jù)儀表SCPI 指令通用分類,將這種方式封裝的函數(shù)分為Configure 類、Data 類、Utility 類、Action-Status 等類別。其中Configure 類為配置類子VI,主要配置儀表的各種測(cè)量參數(shù)設(shè)置,峰值標(biāo)記等設(shè)置;Data 類為數(shù)據(jù)類子VI,主要用來(lái)讀取各種測(cè)量結(jié)果及軌跡數(shù)據(jù);Utility 類為公用類子VI,主要負(fù)責(zé)公用錯(cuò)誤查詢、復(fù)位、自測(cè)試等功能;Action-Status 類為動(dòng)作狀態(tài)類子VI,主要負(fù)責(zé)儀表狀態(tài)查詢,軌跡、標(biāo)記關(guān)閉等操作。組合SCPI 指令封裝VI 法見圖7。
采用直接封裝SCPI 指令產(chǎn)生的VI 控件程序框圖見圖8,能夠很清晰地看到VI 內(nèi)部具體封裝的SCPI 指令,并可以任意調(diào)整此VI 控件內(nèi)容,直到滿足需求。采用這種方式,對(duì)使用者來(lái)說(shuō)更加好理解,可操作性更強(qiáng)。
與IVI-COM 驅(qū)動(dòng)方法不同的是,組合SCPI 封裝函數(shù)是利用VISA 句柄實(shí)現(xiàn)對(duì)儀表的遠(yuǎn)程控制,使用VISA 句柄能清晰看到子VI 函數(shù)中多條SCPI 指令及對(duì)應(yīng)指令含義,并可以任意修改函數(shù)內(nèi)容及組合。其中主要用到了LabVIEW 環(huán)境自帶的VISA 寫入函數(shù)ViWrite 控件,VISA讀取函數(shù)ViRead 控件實(shí)現(xiàn)對(duì)儀表的測(cè)量控制及結(jié)果讀取等操作。
該方法需要閱讀儀器廠家的程控手冊(cè),并對(duì)儀器端指令有一定了解,這種方法優(yōu)勢(shì)也很明顯、靈活、可操作性強(qiáng)、方便調(diào)試。用戶可以自定義編輯修改子VI 封裝的SCPI 指令,并可以按照自己的需求定制封裝子VI。
同樣,下面以頻譜分析儀類儀表為例,采用組合SCPI指令封裝函數(shù)子VI 的方式,實(shí)現(xiàn)LabVIEW 環(huán)境下對(duì)頻譜儀程序控制的流程搭建及測(cè)量結(jié)果展示,見圖9。
這是第1 種IVI 驅(qū)動(dòng)轉(zhuǎn)換VI 的方法,通過(guò)上面的測(cè)量控制流程測(cè)試出的儀器端結(jié)果展示,見圖10。
這是第2 種直接封裝組合SCPI 指令的VI 方法,仿真結(jié)果展示見圖11。
從最終效果來(lái)看,兩種儀表驅(qū)動(dòng)設(shè)計(jì)方法均能實(shí)現(xiàn)儀器儀表的遠(yuǎn)程控制,并達(dá)到測(cè)量參數(shù)的設(shè)置、測(cè)量結(jié)果的讀取查詢等操作。雖然設(shè)計(jì)方法不同,但最后實(shí)現(xiàn)結(jié)果是相同的。
本文采用了兩種程控驅(qū)動(dòng)設(shè)計(jì)方法,在LabVIEW 下進(jìn)行儀表的測(cè)量流程搭建及結(jié)果獲取,實(shí)現(xiàn)自動(dòng)控制和自動(dòng)化測(cè)試。兩種設(shè)計(jì)方法,一種方法為如何將IVI 驅(qū)動(dòng)轉(zhuǎn)成LabVIEW 子VI 模塊,并建立與儀表的網(wǎng)絡(luò)通信,實(shí)現(xiàn)測(cè)量控制自動(dòng)測(cè)試。本方法對(duì)使用者SCPI 指令熟悉度要求不高,操作相對(duì)簡(jiǎn)單,實(shí)現(xiàn)效率高,只需要操作各種子VI,不需要了解具體的SCPI 指令的用法,使用者的體驗(yàn)性更好一些,但I(xiàn)VI 句柄封裝SCPI 指令無(wú)法編輯修改,使用者也無(wú)法看到子VI 封裝的具體SCPI 指令,可用性和復(fù)用性較差;第2 種方法為將組合SCPI 指令按照一定規(guī)則進(jìn)行封裝使用,也能達(dá)到與方法1 相同的效果,由于VISA 句柄的可操作性,任意編輯性,指令可見性強(qiáng),使用者很容易理解各種子VI 的功能并根據(jù)需求增加各種類型的VI,但本方法對(duì)使用者SCPI 指令熟悉度要求較高,需要了解常見SCPI 的規(guī)則及指令含義。