下图示出对具有VISA的仪器进行控制的流程。当用可视Basic语言(Visual Basic languagee)开发VISA程序时,必须回顾一个特殊的编程注意事项(在下面列出的自述文本文件中)。
有关VISA程序库的利用以及利用带有E5071A宏程序(E5071A VBA)的VISA的编程注意事项的详情,请参考包含在IO程序库光盘(CD-ROM)上的下列文件。
visa.hlp (VISA程序库的在线帮助)。
vbreadme.txt (对利用具有VB的VISA程序库的注释)。
使用VISA控制仪器的流程
样本程序ctrl_ext.vba. 中的90行处理VISA系统起动对话。VISA的viOpenDefaultRM功能对VISA系统进行初始化和起动。viOpenDefaultRM 功能必须在调用其它VISA功能之前执行,而这个功能的参数是起动信息(ctrl_ext.vba中的Defrm)。
viOpenDefaultRM(param)
参数 |
(param) |
说明 |
起动信息(输出) |
数据类型 |
长整型 |
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) |
说明 |
连接信息(输出) |
数据类型 |
长整型 |
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) |
说明 |
输出变量(输出) |
数据类型 |
字符串型 |
280行处理断开对话。VISA的 viClose 功能将通信中断并使VISA系统终结,这个功能的参数是起动信息(ctrl_ext.vba中的Defrm)。
viClose(param)
参数 |
(param) |
说明 |
起动信息(输入) |
数据类型 |
长整型 |
ctrl_ext.vba 是利用E5071C作为系统控制器时,控制通过USB/GPIB接口电缆连接的仪器的样本程序。这个VBA程序由下列程序模块组成。
对象名 |
模块类型 |
内容 |
mdlVisa |
标准模块 |
读出外部仪器的产品信息。 |
模块1 |
标准模块 |
利用VISA程序库的两个定义文件 |
当您由E5071C VBA来控制外围设备时,利用对仪器提供的GPIB命令经VISA进行通信。相反,当您由E5071C VBA来控制仪器本身时,则利用对仪器提供的COM对象进行通信。
对VISA系统进行初始化和起动,并将起动信息输出到Defrm变量。在这个过程期间,若发生差错,程序便转到错误处理程序(320行到360行)。
建立与经GPIB连接的外部仪器(GPIB地址:17)的连接,并将连接信息输出到Equip变量。在这个过程期间,若发生差错,程序便转到错误处理程序(320行到360行)。
查询利用VISA经USB/GPIB接口电缆连接的外部仪器的产品信息,在这个过程期间,若发生差错,程序便转到错误处理程序(320行到360行)。
通过VISA对产品信息进行检索,并将产品信息输出到Prod变量。在消息框中显示读出结果。在这个过程期间,若发生差错,程序便转到错误处理程序(320行到360行)。
中断通信并使VISA系统终结。
若VISA功能发生差错,将显示错误的细节并使程序终结。
读出产品信息(ctrl_ext.vba)
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
转自:http://ena.tm.agilent.com/e5071c/manuals/webhelp/chn/Programming/VBA_Programming/Controlling_Peripherals/Programming_with_VISA.ht