1 引言
虛擬儀器(簡稱為VI)的開發環境有很多,但NI公司的LabVIEW最為著名。LabVIEW不同于基于文本的編程語言(如Fortran和C),是一種圖形編程語言——通常稱為G編程語言,其編程過程是通過圖形符號描述程序的行為。LabVIEW使用的是科學家和工程師們所熟悉的術語,還使用了很易于識別的構造G語言的圖形符號,即使具有很少編程經驗的人也能學會使用LabVIEW。而VB作為可視化編程工具,不僅簡單容易上手,而且功能強大,可以開發友好的用戶使用界面,同時通過ActiveX控件、DLL(動態鏈接庫)等多種方法實現與其他軟件的聯合開發。
Microsoft把所有以COM為基礎的技術統稱為ActiveX技術。自動化是大多數ActiveX技術的基礎,它可使解釋性的宏語言(如VB)能夠在不了解應用程序實現細節的情況下控制自動化對象。Labview實現了ActiveX自動化服務支持,在VB下通過ActiveX自動化接口可將 Labview作為Visual Basic語言的一個ActiveX部件調用。
本文以Agilent公司的E5262A儀器為例,通過Labview和VB混合編程,實現了多種數據采集和自動化控制系統。
2 程序設計
程序設計以VB作為編程界面,同時調用Labview的圖形顯示控件,而動態鏈接庫則要使用Win的Kernel32.dll,以及Labview的 Gpib32.dll、Visa32.dll、儀器驅動安裝時生成的E5260_32.dll等。程序流程圖如下圖所示。
首先安裝儀器自動的驅動庫,接口一般采用通用的GPIB標準,不僅數據、命令傳輸速度快,而且一張GPIB卡能夠同時控制最多16臺儀器。儀器驅動安裝后,會生成一個以儀器為名的DLL文件。可以利用Labview的MAX進行接口掃描,發現新增加的儀器。安裝Labview后,在系統目錄下有 gpib32.dll文件。
其次當電腦中安裝了Labview后,在VB的工程引用中選取所需要的庫文件,其中包括了Agilent的VISA庫文件;在控件引用中,選中 National Instrument公司的CW(波形顯示)等控件;Microsoft的通用對話控件。這樣就可以直接使用NI公司Labview的控件了。在VB工程中,添加儀器的動態鏈接庫(DLL)聲明,包括將要使用的常量字符、GPIB、VISA接口庫函數、儀器(E5262A)庫函數、以及系統的Kernel32庫函數等等。如:Declare Function viOpenDefaultRM Lib "VISA32.DLL" Alias "#141" (sesn As Long) As Long 等等。
程序設計中首先出現用戶選擇界面,選擇所需要的測量方式,進入下一界面,填寫測量參數,程序進行儀器初始化,根據送入參數進行測試,測試結果由Labview控件顯示,用戶指定文件保存信息將數據保存到文件中。
VB自帶了時鐘控件Timer,但時間量級是毫秒,快速測量或者反復切換測量狀態時不方便,程序中采用了Win的API函數,通過調用 Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)函數,更加方便的對程序進行控制。
E5262數據采集和自動測量要求:測量一般為三極管的電壓電流變化曲線和漏電流,因此要加入輸入電壓值一、電壓二作為兩者間的電壓值,如使用共發射極時,可以測量不同Vce電壓值時,Vbe的電流曲線。即先固定Vce的電壓值,改變Vbe值,得到伏安曲線。
圖1、PNP三極管示意圖
根據實驗要求設計數據采集模式為以下幾種:
模式1:固定通道一,二的電壓,即固定Vce、Vbe值,測量電流Ibe。
模式1:固定通道二的輸出電壓,即固定Vce,以三角波形方式改變通道一(即Vbe)的輸出電壓,測量電流Ibe。
模式2:固定通道一的輸出電壓,即固定Vbe,以三角波形改變通道二(即Vce)的輸出。測量電流Ibe。
圖2 程序流程圖
數據保存格式規范為數據序列號、實驗日期、采集時間、通道一電壓值、通道二電壓值、采集電流值。
主要程序代碼說明:
ReDim OnePeroI((CInt((vdmax - vdmin) / vdstep)) * CInt(tspotcount.Text)) //根據測量數據要求動態分配空間
For vg = vgmin To vgmax Step vgstep //進行三角波電壓輸出循環
For vd = vdmin To vdmax Step vdstep//進行三角波電壓輸出循環
If Option1.value = True Then //判斷使用通道測量類型
If Combo1.ListIndex = 0 Then//判斷輸入類型,電流還是電壓
ret = age5260_force(vi, pins(0), age5260_VF_MODE, 2, vd, idcomp, 0)
End If
End If
If RunorStop = True Then //是否被用戶強行終止測量
test_stopmeas //儀器設置清零
Exit Sub //退出
Else
spot_meas //進行測量
OnePeroI(CurrentIndex) = meas //保存數據到數組
Sleep Sleeptime //延遲,控制采用速率
End If
CWGraph1.PlotY OnePeroI //Labview控件顯示圖形
Next vd//通道循環
CWGraph1.ClearData //圖形更新
Next vg//通道循環
3 測試實例、結果和討論

圖3 基于Labview和VB儀器采集自動化控制界面
程序在Labview7.1和VB6.0軟件下,系統為Windows XP運行測試通過。儀器使用的是Agilent公司的E5262A,實驗測量的是三極管在不同偏壓下的電流值曲線,程序中可以由自定義的函數設置任意形狀的輸出電壓值。結果表明程序不能快速的自動化測量采集數據,將采集的不同對比圖形實時顯示,還能夠進行初步的數據處理,極大的方便了實驗的進行。
4 結束語
本文的創新點:
(1)進行基于VB和Labview的聯合混合編程,,利用Labview的強大儀器驅動和實驗儀器圖形顯示、VB的可視化編程完成友好的用戶界面進行混合編程,實現了應用系統的無縫集成,豐富了軟件的測量功能,縮短了程序的開發周期。
(2)充分的利用了AcitiveX控件和DLL(動態鏈接庫)等多種方法,不僅能夠滿足實驗測量要求,還增強了儀器的測量功能,充分的發揮了虛擬儀器編程的強大能力。
(3)程序中可以通過自己開發的函數進行數據處理,在測量顯示存儲數據的同時,將初步結果也計算顯示出來,這樣不僅直觀的監控測量系統,還能隨時根據結果進行參數的調整。
參考文獻
[1]畢虎,律方成,李燕青,李和明.Labview中訪問數據庫的幾種不同方法.微計算機信息,2006,1-1:131-134。
[2]吳苗,許江寧,繆繡華,紀兵.基于Labview的設備驅動程序開發技術研究.微計算機信息,2006,2-1:153-155。
[3]毛建東.基于Labview的單片機數據采集系統的設計.微計算機信息,2006,3-2:41-42。
[4]周偉林,李清峰,楊華勇.基于Labview的AC1077數據采集卡的驅動.微計算機信息,2006,1-1:121-123。