概述
下圖示出對具有VISA的儀器進行控制的流程。當用可視Basic語言(Visual Basic languagee)開發VISA程序時,必須回顧一個特殊的編程注意事項(在下面列出的自述文本文件中)。
有關VISA程序庫的利用以及利用帶有E5071A宏程序(E5071A VBA)的VISA的編程注意事項的詳情,請參考包含在IO程序庫光盤(CD-ROM)上的下列文件。
-
visa.hlp (VISA程序庫的在線幫助)。
-
vbreadme.txt (對利用具有VB的VISA程序庫的註釋)。
使用VISA控制儀器的流程
第1步:起動VISA
樣本程序ctrl_ext.vba. 中的90行處理VISA系統起動對話。VISA的viOpenDefaultRM功能對VISA系統進行初始化和起動。viOpenDefaultRM 功能必須在調用其它VISA功能之前執行,而這個功能的參數是起動信息(ctrl_ext.vba中的Defrm)。
語法
viOpenDefaultRM(param)
參數
參數 |
(param) |
說明 |
起動信息(輸出) |
數據類型 |
長整型 |
第2步:連接
130行處理連接對話。VISA的viOpen功能進行與規定儀器的連接。viOpen功能返回某個值,使得VISA功能可以將其應用於規定儀器,這個功能的參數是起動信息(Defrm)、規定儀器的地址信息(ctrl_ext.vba中的“GPIB::17::INSTR”)、接入方式(ctrl_ext.vba中的0)、超時(ctrl_ext.vba中的0)和連接信息(ctrl_ext.vba中的Equip)。
語法
viOpen(param1, param2, param3, param4, param5)
參數
參數 |
(param1) |
說明 |
起動信息(輸入) |
數據類型 |
長整型 |
參數 |
(param2) |
說明 |
規定儀器的地址信息(輸入) |
數據類型 |
字符串型 |
語法 |
"GPIB0::gpib address::INSTR" "USB0::manufacturer ID::model code::serial number::0::INSTR" "TCPIP0::IP address::inst0::INSTR" |
參數 |
(param3) |
說明 |
接入方式(輸入0) |
參數 |
(param4) |
說明 |
超時(輸入0) |
參數 |
(param5) |
說明 |
連接信息(輸出) |
數據類型 |
長整型 |
第3步. 通信
170行進行通信對話。VISA的viVPrintf功能將程序消息(GPIB命令)發送到規定儀器。這個功能的參數是連接信息(Equip)、程序消息(*EDN?)和待格式化變量(ctrl_ext.vba中的0)。
-
爲了輸入/輸出GPIB命令,主要是利用viVPrintf 功能和viVScanf功能信息,但也可以利用其它VISA功能。欲知詳情,請參考visa.hlp (VISA程序庫的在線幫助)。
語法
viVPrintf(param1, param2, param3)
參數
參數 |
(param1) |
說明 |
連接信息(輸出) |
數據類型 |
長整型 |
參數 |
(param2) |
說明 |
發送GPIB命令的程序消息時的程序消息,消息結束處要求一個消息終結符(ctrl_ext.vba中的Chr$(10)) |
數據類型 |
字符串型 |
參數 |
(param3) |
說明 |
變量待格式化,若不可應用,則輸入0。 |
數據類型 |
規定的數據類型 |
210行控制接收對話。VISA的viVScanf 功能接收來自規定儀器的結果,並將其存儲在輸出變量中。這個功能的參數是連接信息(ctrl_ext.vba中的Equip)、輸出變量的格式參數(ctrl_ext.vba中的%t)和輸出變量(ctrl_ext.vba中的Prod)。
語法
viVScanf(param1, param2, param3)
參數
參數 |
(param1) |
說明 |
連接信息(輸入) |
數據類型 |
長整型 |
參數 |
(param2) |
說明 |
輸出變量的格式參數 |
數據類型 |
字符串型 |
參數 |
(param3) |
說明 |
輸出變量(輸出) |
數據類型 |
字符串型 |
第4步: 斷開
280行處理斷開對話。VISA的 viClose 功能將通信中斷並使VISA系統終結,這個功能的參數是起動信息(ctrl_ext.vba中的Defrm)。
語法
viClose(param)
Parameter
參數 |
(param) |
說明 |
起動信息(輸入) |
數據類型 |
長整型 |
樣本程序 用來讀出外圍設備(儀器)產品信息
ctrl_ext.vba 是利用E5071C作爲系統控制器時,控制通過USB/GPIB接口電纜連接的儀器的樣本程序。這個VBA程序由下列程序模塊組成。
對象名 |
模塊類型 |
內容 |
mdlVisa |
標準模塊 |
讀出外部儀器的產品信息。 |
模塊1 |
標準模塊 |
利用VISA程序庫的兩個定義文件 |
-
當您由E5071C VBA來控制外圍設備時,利用對儀器提供的GPIB命令經VISA進行通信。相反,當您由E5071C VBA來控制儀器本身時,則利用對儀器提供的COM對象進行通信。
90行到100行
對VISA系統進行初始化和起動,並將起動信息輸出到Defrm變量。在這個過程期間,若發生差錯,程序便轉到錯誤處理程序(320行到360行)。
130行到140行
建立與經GPIB連接的外部儀器(GPIB地址:17)的連接,並將連接信息輸出到Equip變量。在這個過程期間,若發生差錯,程序便轉到錯誤處理程序(320行到360行)。
170行到180行
查詢利用VISA經USB/GPIB接口電纜連接的外部儀器的產品信息,在這個過程期間,若發生差錯,程序便轉到錯誤處理程序(320行到360行)。
210行到250行
通過VISA對產品信息進行檢索,並將產品信息輸出到Prod變量。在消息框中顯示讀出結果。在這個過程期間,若發生差錯,程序便轉到錯誤處理程序(320行到360行)。
280行
中斷通信並使VISA系統終結。
320行到360行
若VISA功能發生差錯,將顯示錯誤的細節並使程序終結。
10| Sub Main()
20|
30| Dim status As Long 'VISA function status return code
40| Dim Defrm As Long 'Session to Default Resource Manager
50| Dim Equip As Long 'Session to instrument
60| Dim Prod As String * 100 'String to receive the result
70|
80| ' Initializes the VISA system.
90| status = viOpenDefaultRM(Defrm)
100| If (status <> VI_SUCCESS) Then GoTo VisaErrorHandler
110|
120| ' Opens the session to the specified instrument.
130| status = viOpen(Defrm, "GPIB0::17::INSTR", 0, 0, Equip)
140| If (status <> VI_SUCCESS) Then GoTo VisaErrorHandler
150|
160| ' Asks for the instrument's product information.
170| status = viVPrintf(Equip, "*IDN?" & Chr$(10), 0)
180| If (status <> VI_SUCCESS) Then GoTo VisaErrorHandler
190|
200| ' Reads the result.
210| status = viVScanf(Equip, "%t", Prod)
220| If (status <> VI_SUCCESS) Then GoTo VisaErrorHandler
230|
240| ' Displays the result.
250| MsgBox Prod
260|
270| ' Closes the resource manager session (which closes everything)
280| Call viClose(Defrm)
290|
300| GoTo Prog_end
310|
320| VisaErrorHandler:
330| Dim VisaErr As String * 200
340| Call viStatusDesc(Defrm, status, VisaErr)
350| MsgBox "Error : " & VisaErr, vbExclamation
360| Exit Sub
370|
380| Prog_end:
390|
400| End Sub