胡鐵喬,韓煜昕
(中國民航大學(xué) 天津市智能信號與圖像處理重點(diǎn)實(shí)驗(yàn)室,天津 300300)
儀器控制指的是通過計(jì)算機(jī)上的軟件來控制儀器工作[1],其實(shí)質(zhì)是軟件通過相應(yīng)的連接總線給受控儀器發(fā)送指令,使受控儀器完成相應(yīng)的操作。它需要受控儀器與計(jì)算機(jī)之間協(xié)同工作,同時(shí)可以利用計(jì)算機(jī)強(qiáng)大的數(shù)據(jù)處理、分析、顯示和存儲能力,擴(kuò)展儀器的功能。
信號發(fā)生器是信號處理領(lǐng)域中常用而重要的儀器。本實(shí)驗(yàn)室主要研究方向?yàn)樽赃m應(yīng)信號處理、衛(wèi)星導(dǎo)航及甚高頻電臺抗干擾。為驗(yàn)證算法的抗干擾能力,經(jīng)常同時(shí)使用多個(gè)信號發(fā)生器發(fā)射干擾信號和有用信號。實(shí)驗(yàn)室的信號發(fā)生器都是很久以前采購的,其功能和現(xiàn)代信號發(fā)生器相比已經(jīng)明顯落后,操作復(fù)雜,顯示界面單一。在實(shí)際應(yīng)用中多臺儀器綜合應(yīng)用會(huì)導(dǎo)致操作混亂、記錄繁瑣和效率低下等問題。但由于價(jià)格昂貴,完全將這些仍能滿足科研要求的儀器淘汰非常可惜。為此,本文以HP8118A、HP83732A、HP8780A、HP8657B、R&S SMH 5臺不同型號的傳統(tǒng)信號發(fā)生器為受控儀器,基于LabVIEW開發(fā)了它們各自的控制程序,并在主控制程序中實(shí)現(xiàn)靈活的調(diào)用。程序操作簡便快捷,在科研應(yīng)用中運(yùn)行穩(wěn)定,大大提高了測試的效率和準(zhǔn)確性,有很強(qiáng)的應(yīng)用價(jià)值。
LabVIEW(laboratory virtual instrument engineering workbench)是NI公司推出的一種用圖標(biāo)代替文本行創(chuàng)建應(yīng)用程序的圖形化編程語言。Lab-VIEW提供了很多外觀與傳統(tǒng)儀器(如示波器、信號發(fā)生器)類似的控件,可用來方便地創(chuàng)建用戶界面[2],內(nèi)部集成了對不同總線(如GPIB、USB、PXI等)的支持。因此,相較于VB、VC和C等文本編程語言,LabVIEW使儀器控制程序的開發(fā)周期大大縮短。
LabVIEW編寫的程序稱為虛擬儀器VI(virtual instrument)。一個(gè)VI既可作為上層獨(dú)立程序,也可作為其他程序(或子程序)的子程序[3]。正是基于VI這一特性,LabVIEW最佳地實(shí)現(xiàn)了模塊化編程思想。因此,在設(shè)計(jì)控制程序時(shí),將其分解為一系列簡單的子任務(wù)模塊,將某些模塊封裝成獨(dú)立的VI,然后將這些模塊組合在一起完成最終的控制程序。
一個(gè)完整的儀器控制系統(tǒng)包括計(jì)算機(jī)、受控儀器、儀器與計(jì)算機(jī)之間的通路(包括總線和硬件驅(qū)動(dòng)程序)和上層儀器控制應(yīng)用程序[4]。
GPIB總線協(xié)議是20世紀(jì)70年代末出現(xiàn)的并行接口協(xié)議,其數(shù)據(jù)傳輸速率達(dá)到1 Mb/s,能實(shí)現(xiàn)儀器之間和儀器與計(jì)算機(jī)之間的雙向高速通信[5]。5臺信號發(fā)生器都配有GPIB接口,所以采用GPIB總線進(jìn)行儀器間互聯(lián)。GPIB總線通過Contec公司的GPIB接口卡GP-IB(USB)FL與計(jì)算機(jī)連接。
儀器通過GPIB總線連接方式可以分為星型連接方式和線型連接方式2種。星型連接方式是以一臺設(shè)備為中心,輻射連接至其他設(shè)備;線型連接方式是以一臺設(shè)備串聯(lián)著一臺設(shè)備的方式,連接成一個(gè)測試回路。線型連接受傳輸距離的限制,并且根據(jù)儀器實(shí)際擺放位置,本文采用星型連接方式,以計(jì)算機(jī)為中心,通過GPIB接口卡和GPIB總線與5臺儀器連接。系統(tǒng)中每個(gè)設(shè)備(包括接口卡),須有一個(gè)0~30之間的GPIB地址,不能重復(fù)。GPIB接口卡的出廠地址設(shè)置為0,HP8118A、HP83732A、HP8780A、HP8657B、R&S SMH 5臺儀器的地址分別設(shè)置為 17,19,10,7,28。 本文設(shè)計(jì)的儀器控制系統(tǒng)硬件組成如圖1所示。
圖1 儀器控制系統(tǒng)硬件組成Fig.1 Hardware structure of instrument control system
控制程序?qū)崿F(xiàn)計(jì)算機(jī)、GPIB接口卡與儀器的邏輯連接,完成控制命令的發(fā)送、測試結(jié)果的接收和儀器及總線狀態(tài)的反饋[6]。
基于LabVIEW的GPIB控制程序包括GPIB接口卡驅(qū)動(dòng)程序和主控程序。GPIB接口卡在Lab-VIEW環(huán)境下的驅(qū)動(dòng)程序由Contec公司提供,包括GPIB接口卡的計(jì)算機(jī)驅(qū)動(dòng)程序和在LabVIEW環(huán)境下的驅(qū)動(dòng)程序。上層主控程序通過LabVIEW的GPIB函數(shù)庫與GPIB接口卡驅(qū)動(dòng)程序即可完成與儀器設(shè)備的信息交互,實(shí)現(xiàn)對儀器的控制,所以GPIB接口卡與GPIB協(xié)議對設(shè)計(jì)者來說是透明的,只需要考慮主控程序的設(shè)計(jì)。主控程序是與用戶進(jìn)行交互的控制程序,由它來搜集、分析用戶的操作,確定系統(tǒng)應(yīng)該調(diào)用的功能VI,組織指令并發(fā)送給受控儀器,同時(shí)顯示儀器反饋的信息給用戶??刂瞥绦虻募軜?gòu)和數(shù)據(jù)流向如圖2所示。
圖2 控制程序的架構(gòu)和數(shù)據(jù)流向Fig.2 Architecture and data direction of control program
LabVIEW的GPIB函數(shù)庫中使用最頻繁的是GPIB Write和GPIB Read 2個(gè)函數(shù),通過這2個(gè)函數(shù)就能實(shí)現(xiàn)儀器的參數(shù)設(shè)置、數(shù)據(jù)的讀寫以及儀器的自動(dòng)控制。因?yàn)樵缙谛盘柊l(fā)生器的指令集各不相同,所以需要查閱儀器各自的編程手冊,通過GPIB Write給儀器發(fā)送指令實(shí)現(xiàn)相應(yīng)的功能。GPIB函數(shù)庫中FindLstn函數(shù)用于檢測開啟的信號發(fā)生器的型號,以完成對不同儀器控制程序的調(diào)用。
基于LabVIEW的主控程序設(shè)計(jì)采用模塊化的編程思想,將控制程序劃分為不同的功能模塊,有的功能模塊封裝成VI,由主控模塊在高層管理并調(diào)度各個(gè)子模塊協(xié)調(diào)工作。采用模塊化編程,不僅容易調(diào)試程序,也方便程序維護(hù)和功能擴(kuò)展及優(yōu)化。控制程序結(jié)構(gòu)如圖3所示。
圖3 控制程序結(jié)構(gòu)Fig.3 Structure of control program
(1)主控模塊
主控模塊的作用是識別開啟的儀器,并動(dòng)態(tài)調(diào)用儀器的VI。為便于管理窗口,控制程序窗口采用多重窗體(MDI)結(jié)構(gòu),即主控模塊的前面板是主窗體,5臺儀器控制程序前面板為子窗體,子窗體位于主窗體中。MDI結(jié)構(gòu)通過調(diào)用庫函數(shù)節(jié)點(diǎn)(CLN),在LabVIEW中調(diào)用Windows應(yīng)用程序編程接口API(application programming interface)的 SetParent函數(shù)和FindWindowA函數(shù)實(shí)現(xiàn)。5臺儀器的前面板各自獨(dú)立,是由主窗體管理的獨(dú)立子窗體。
儀器識別模塊通過FindLstn函數(shù)偵測開啟儀器的地址并返回到主控模塊,配合Set Menu Item Info函數(shù)節(jié)點(diǎn),將主窗體菜單欄上未開啟的設(shè)備選項(xiàng)設(shè)置為禁用狀態(tài),開啟的設(shè)備選項(xiàng)設(shè)置為啟用狀態(tài),供用戶進(jìn)行后續(xù)的操作。如圖4所示,為控制程序前面板,開啟了4臺儀器,打開了其中3臺儀器的控制面板。
圖4 控制程序前面板Fig.4 Front panel of control program
在LabVIEW開發(fā)環(huán)境下,子VI的調(diào)用分為靜態(tài)調(diào)用和動(dòng)態(tài)調(diào)用。動(dòng)態(tài)調(diào)用VI的優(yōu)點(diǎn)是節(jié)省內(nèi)存空間,只有在打開VI引用時(shí)VI的調(diào)用程序才會(huì)將其加載,能實(shí)現(xiàn)靈活的數(shù)據(jù)交換[2]。實(shí)際應(yīng)用中,有時(shí)不會(huì)將所有的儀器都打開。若采用靜態(tài)調(diào)用子VI方式,在打開程序時(shí)就將所有的儀器VI都加載入內(nèi)存,會(huì)導(dǎo)致控制程序搜索不到儀器而造成程序運(yùn)行錯(cuò)誤,所以設(shè)計(jì)動(dòng)態(tài)調(diào)用模塊打開不同儀器控制程序。
(2)儀器模塊
將5臺信號發(fā)生器的控制程序封裝成獨(dú)立的VI供主控模塊動(dòng)態(tài)調(diào)用,可以方便程序維護(hù),隨時(shí)擴(kuò)展各儀器的功能;儀器的控制界面獨(dú)立,可避免對儀器的誤操作;各儀器VI之間沒有數(shù)據(jù)交換,使控制程序運(yùn)行更加穩(wěn)定。各儀器VI底層模塊基本相同,由儀器初始化、參數(shù)控制、數(shù)據(jù)讀取、錯(cuò)誤處理和終止程序運(yùn)行等模塊組成。
儀器初始化模塊通過給儀器發(fā)送命令<*IDN?>,對儀器返回的信息進(jìn)行比對完成設(shè)備標(biāo)識檢查,確定程序保存儀器地址與儀器實(shí)際地址對應(yīng)。參數(shù)控制模塊主要完成對儀器輸出信號參數(shù)的控制。數(shù)據(jù)讀取模塊作用是讀回儀器當(dāng)前輸出信號的參數(shù)和狀態(tài)并在前面板上進(jìn)行顯示,確保儀器工作正常。當(dāng)任何模塊或儀器本身運(yùn)行錯(cuò)誤時(shí),錯(cuò)誤處理模塊會(huì)立即終止運(yùn)行其他模塊,切斷程序與儀器之間的通信,然后終止控制程序運(yùn)行,避免對計(jì)算機(jī)和儀器造成不可預(yù)料的后果。
此外,控制程序的用戶界面編程采用循環(huán)事件結(jié)構(gòu)。通過事件結(jié)構(gòu)可有效減少計(jì)算機(jī)CPU的占用率,只有觸發(fā)事件后,計(jì)算機(jī)才與儀器進(jìn)行通信完成信息交互,避免了對儀器頻繁寫入指令。
本控制程序開發(fā)完成后,按照圖1將儀器與計(jì)算機(jī)進(jìn)行連接。計(jì)算機(jī)能夠同時(shí)控制不同型號信號發(fā)生器通過天線準(zhǔn)確發(fā)射有用信號與干擾。程序在長期的科研應(yīng)用中運(yùn)行穩(wěn)定良好,有很強(qiáng)的實(shí)用性。
本文基于LabVIEW開發(fā)平臺,根據(jù)實(shí)驗(yàn)室實(shí)際應(yīng)用需求,開發(fā)了支持GPIB接口的控制程序,可以同時(shí)控制多臺儀器。程序界面采用MDI結(jié)構(gòu),使控制界面更簡潔,操作更靈活。通過計(jì)算機(jī)控制儀器的工作,替代傳統(tǒng)的人工操作方式,提高了測試效率與準(zhǔn)確性。使昂貴的傳統(tǒng)儀器又重新應(yīng)用到科研領(lǐng)域中,減少了科研經(jīng)費(fèi)的投入,對儀器互聯(lián)控制與日后集成測試平臺的開發(fā)有一定的借鑒意義。
[1]戴鵬飛,王勝開,王格芳,等.測試工程與LabVIEW應(yīng)用[M].北京:電子工業(yè)出版社,2006.
[2]陳樹學(xué),劉萱.LabVIEW寶典[M].北京:電子工業(yè)出版社,2011.
[3]陳錫輝,張銀鴻.LabVIEW 8.20程序設(shè)計(jì)從入門到精通[M].北京:清華大學(xué)出版社,2007.
[4]吳亮,高峰,李俊杰,等.基于LabVIEW的通用儀器控制軟件設(shè)計(jì)[J].艦船科學(xué)技術(shù),2009,31(10):73-75.
[5]張金,王伯雄,張力新.基于LabVIEW的GPIB總線獨(dú)立儀器集成測試平臺[J].儀表技術(shù)與傳感器,2010(9):13-15.
[6]王學(xué)偉,張未未,趙勇.USB-GPIB控制器及VISA函數(shù)庫的設(shè)計(jì)[J].電子測量與儀器學(xué)報(bào),2008,22(3):87-93.
[7]楊樂平,李海濤,楊磊.LabVIEW程序設(shè)計(jì)與應(yīng)用[M].2版.北京:電子工業(yè)出版社,2005.