胡鐵喬,韓煜昕
(中國民航大學 天津市智能信號與圖像處理重點實驗室,天津 300300)
儀器控制指的是通過計算機上的軟件來控制儀器工作[1],其實質是軟件通過相應的連接總線給受控儀器發送指令,使受控儀器完成相應的操作。它需要受控儀器與計算機之間協同工作,同時可以利用計算機強大的數據處理、分析、顯示和存儲能力,擴展儀器的功能。
信號發生器是信號處理領域中常用而重要的儀器。本實驗室主要研究方向為自適應信號處理、衛星導航及甚高頻電臺抗干擾。為驗證算法的抗干擾能力,經常同時使用多個信號發生器發射干擾信號和有用信號。實驗室的信號發生器都是很久以前采購的,其功能和現代信號發生器相比已經明顯落后,操作復雜,顯示界面單一。在實際應用中多臺儀器綜合應用會導致操作混亂、記錄繁瑣和效率低下等問題。但由于價格昂貴,完全將這些仍能滿足科研要求的儀器淘汰非常可惜。為此,本文以HP8118A、HP83732A、HP8780A、HP8657B、R&S SMH 5臺不同型號的傳統信號發生器為受控儀器,基于LabVIEW開發了它們各自的控制程序,并在主控制程序中實現靈活的調用。程序操作簡便快捷,在科研應用中運行穩定,大大提高了測試的效率和準確性,有很強的應用價值。
LabVIEW(laboratory virtual instrument engineering workbench)是NI公司推出的一種用圖標代替文本行創建應用程序的圖形化編程語言。Lab-VIEW提供了很多外觀與傳統儀器(如示波器、信號發生器)類似的控件,可用來方便地創建用戶界面[2],內部集成了對不同總線(如GPIB、USB、PXI等)的支持。因此,相較于VB、VC和C等文本編程語言,LabVIEW使儀器控制程序的開發周期大大縮短。
LabVIEW編寫的程序稱為虛擬儀器VI(virtual instrument)。一個VI既可作為上層獨立程序,也可作為其他程序(或子程序)的子程序[3]。正是基于VI這一特性,LabVIEW最佳地實現了模塊化編程思想。因此,在設計控制程序時,將其分解為一系列簡單的子任務模塊,將某些模塊封裝成獨立的VI,然后將這些模塊組合在一起完成最終的控制程序。
一個完整的儀器控制系統包括計算機、受控儀器、儀器與計算機之間的通路(包括總線和硬件驅動程序)和上層儀器控制應用程序[4]。
GPIB總線協議是20世紀70年代末出現的并行接口協議,其數據傳輸速率達到1 Mb/s,能實現儀器之間和儀器與計算機之間的雙向高速通信[5]。5臺信號發生器都配有GPIB接口,所以采用GPIB總線進行儀器間互聯。GPIB總線通過Contec公司的GPIB接口卡GP-IB(USB)FL與計算機連接。
儀器通過GPIB總線連接方式可以分為星型連接方式和線型連接方式2種。星型連接方式是以一臺設備為中心,輻射連接至其他設備;線型連接方式是以一臺設備串聯著一臺設備的方式,連接成一個測試回路。線型連接受傳輸距離的限制,并且根據儀器實際擺放位置,本文采用星型連接方式,以計算機為中心,通過GPIB接口卡和GPIB總線與5臺儀器連接。系統中每個設備(包括接口卡),須有一個0~30之間的GPIB地址,不能重復。GPIB接口卡的出廠地址設置為0,HP8118A、HP83732A、HP8780A、HP8657B、R&S SMH 5臺儀器的地址分別設置為 17,19,10,7,28。 本文設計的儀器控制系統硬件組成如圖1所示。

圖1 儀器控制系統硬件組成Fig.1 Hardware structure of instrument control system
控制程序實現計算機、GPIB接口卡與儀器的邏輯連接,完成控制命令的發送、測試結果的接收和儀器及總線狀態的反饋[6]。
基于LabVIEW的GPIB控制程序包括GPIB接口卡驅動程序和主控程序。GPIB接口卡在Lab-VIEW環境下的驅動程序由Contec公司提供,包括GPIB接口卡的計算機驅動程序和在LabVIEW環境下的驅動程序。上層主控程序通過LabVIEW的GPIB函數庫與GPIB接口卡驅動程序即可完成與儀器設備的信息交互,實現對儀器的控制,所以GPIB接口卡與GPIB協議對設計者來說是透明的,只需要考慮主控程序的設計。主控程序是與用戶進行交互的控制程序,由它來搜集、分析用戶的操作,確定系統應該調用的功能VI,組織指令并發送給受控儀器,同時顯示儀器反饋的信息給用戶。控制程序的架構和數據流向如圖2所示。

圖2 控制程序的架構和數據流向Fig.2 Architecture and data direction of control program
LabVIEW的GPIB函數庫中使用最頻繁的是GPIB Write和GPIB Read 2個函數,通過這2個函數就能實現儀器的參數設置、數據的讀寫以及儀器的自動控制。因為早期信號發生器的指令集各不相同,所以需要查閱儀器各自的編程手冊,通過GPIB Write給儀器發送指令實現相應的功能。GPIB函數庫中FindLstn函數用于檢測開啟的信號發生器的型號,以完成對不同儀器控制程序的調用。
基于LabVIEW的主控程序設計采用模塊化的編程思想,將控制程序劃分為不同的功能模塊,有的功能模塊封裝成VI,由主控模塊在高層管理并調度各個子模塊協調工作。采用模塊化編程,不僅容易調試程序,也方便程序維護和功能擴展及優化。控制程序結構如圖3所示。

圖3 控制程序結構Fig.3 Structure of control program
(1)主控模塊
主控模塊的作用是識別開啟的儀器,并動態調用儀器的VI。為便于管理窗口,控制程序窗口采用多重窗體(MDI)結構,即主控模塊的前面板是主窗體,5臺儀器控制程序前面板為子窗體,子窗體位于主窗體中。MDI結構通過調用庫函數節點(CLN),在LabVIEW中調用Windows應用程序編程接口API(application programming interface)的 SetParent函數和FindWindowA函數實現。5臺儀器的前面板各自獨立,是由主窗體管理的獨立子窗體。
儀器識別模塊通過FindLstn函數偵測開啟儀器的地址并返回到主控模塊,配合Set Menu Item Info函數節點,將主窗體菜單欄上未開啟的設備選項設置為禁用狀態,開啟的設備選項設置為啟用狀態,供用戶進行后續的操作。如圖4所示,為控制程序前面板,開啟了4臺儀器,打開了其中3臺儀器的控制面板。

圖4 控制程序前面板Fig.4 Front panel of control program
在LabVIEW開發環境下,子VI的調用分為靜態調用和動態調用。動態調用VI的優點是節省內存空間,只有在打開VI引用時VI的調用程序才會將其加載,能實現靈活的數據交換[2]。實際應用中,有時不會將所有的儀器都打開。若采用靜態調用子VI方式,在打開程序時就將所有的儀器VI都加載入內存,會導致控制程序搜索不到儀器而造成程序運行錯誤,所以設計動態調用模塊打開不同儀器控制程序。
(2)儀器模塊
將5臺信號發生器的控制程序封裝成獨立的VI供主控模塊動態調用,可以方便程序維護,隨時擴展各儀器的功能;儀器的控制界面獨立,可避免對儀器的誤操作;各儀器VI之間沒有數據交換,使控制程序運行更加穩定。各儀器VI底層模塊基本相同,由儀器初始化、參數控制、數據讀取、錯誤處理和終止程序運行等模塊組成。
儀器初始化模塊通過給儀器發送命令<*IDN?>,對儀器返回的信息進行比對完成設備標識檢查,確定程序保存儀器地址與儀器實際地址對應。參數控制模塊主要完成對儀器輸出信號參數的控制。數據讀取模塊作用是讀回儀器當前輸出信號的參數和狀態并在前面板上進行顯示,確保儀器工作正常。當任何模塊或儀器本身運行錯誤時,錯誤處理模塊會立即終止運行其他模塊,切斷程序與儀器之間的通信,然后終止控制程序運行,避免對計算機和儀器造成不可預料的后果。
此外,控制程序的用戶界面編程采用循環事件結構。通過事件結構可有效減少計算機CPU的占用率,只有觸發事件后,計算機才與儀器進行通信完成信息交互,避免了對儀器頻繁寫入指令。
本控制程序開發完成后,按照圖1將儀器與計算機進行連接。計算機能夠同時控制不同型號信號發生器通過天線準確發射有用信號與干擾。程序在長期的科研應用中運行穩定良好,有很強的實用性。
本文基于LabVIEW開發平臺,根據實驗室實際應用需求,開發了支持GPIB接口的控制程序,可以同時控制多臺儀器。程序界面采用MDI結構,使控制界面更簡潔,操作更靈活。通過計算機控制儀器的工作,替代傳統的人工操作方式,提高了測試效率與準確性。使昂貴的傳統儀器又重新應用到科研領域中,減少了科研經費的投入,對儀器互聯控制與日后集成測試平臺的開發有一定的借鑒意義。
[1]戴鵬飛,王勝開,王格芳,等.測試工程與LabVIEW應用[M].北京:電子工業出版社,2006.
[2]陳樹學,劉萱.LabVIEW寶典[M].北京:電子工業出版社,2011.
[3]陳錫輝,張銀鴻.LabVIEW 8.20程序設計從入門到精通[M].北京:清華大學出版社,2007.
[4]吳亮,高峰,李俊杰,等.基于LabVIEW的通用儀器控制軟件設計[J].艦船科學技術,2009,31(10):73-75.
[5]張金,王伯雄,張力新.基于LabVIEW的GPIB總線獨立儀器集成測試平臺[J].儀表技術與傳感器,2010(9):13-15.
[6]王學偉,張未未,趙勇.USB-GPIB控制器及VISA函數庫的設計[J].電子測量與儀器學報,2008,22(3):87-93.
[7]楊樂平,李海濤,楊磊.LabVIEW程序設計與應用[M].2版.北京:電子工業出版社,2005.