返回介绍

Function _viExecCommand

发布于 2020-03-05 18:21:36 字数 6688 浏览 1199 评论 0 收藏 0

_viExecCommand

通过 VISA 的接口(GPIB / TCP)向某器材/设备发送命令/请求。

#include <Visa.au3>
_viExecCommand($h_session, $s_command, $i_timeout_ms = -1)

参数

$h_sessionVISA 描述符(字符串)或者 VISA session 句柄(整数)。
这个参数既可以是字符串也可以是个整数(句柄):
* 字符串 -> VISA 描述符就是一个字符串,用以指定要建立通讯段的资源。
例如: "GPIB::20::0"。
本函数支持所有合法的 VISA 描述符,包括 GPIB, TCP, VXI
和串口设备(ASRL)。
关于 VISA 描述符,在下面的注意部分有详细的解释。
作为更快捷的方式,您可以使用一个包含 GPIB 设备的地址数字的字符串(比如"20")
来代替完整描述符(比如"GPIB::20::0")。
* 整数 -> VISA session 句柄,由 _viOpen 函数返回。
如果您打算经常性地和某个设备或装置通信,我们推荐您使用 _viOpen 和 VISA session 句柄
来代替描述符,否则每次要和设备联系都必须打开然后关闭通讯连接。
在完成了所有操作后切记要使用 _viClose 来关闭连接。
$s_command要执行的命令/请求(例如,"*IDN?" 或 "SOURCE:POWER -20 dBM")
请求必须含有问号(?)
如果是请求则本函数将自动等待设备响应结果(或者等到操作超时为止)。
$i_timeout_ms

可选:以毫秒为单位的 VISA 操作超时时间。
这个设置仅对请求比较重要。
这是个可选参数。
若没有指定则使用上一次使用的设置。若此前从未设置过则使用默认的超时时间(取决于具体的 VISA 操作)。
_viSetTimeout 函数也可以设置超时时间。
由于总线类型(GPIB、TCP,等等)的不同,因此实际的超时时间可能并非和您设置的时间一致,一般会比您设置的超时时间要大一点。

返回值

具体的返回值取决于命令是否请求以及操作是否成功。
* 一般命令,非请求:
成功: - 返回值为零
失败: - 返回值为 -1,说明无法打开 VISA DLL
否则为一个非零的数值,用以表示 VISA 错误码(请查看 VISA 编程人员指引)。
* 请求:
成功: - 返回值为请求设备的回应结果
失败: - 返回值为 -1,说明无法打开 VISA DLL
返回值为 -3,说明 VISA DLL 返回了一个未预料的结果
或返回number of results
否则为一个非零的数值,用以表示 VISA 错误码(请查看 VISA 编程人员指引)。
一旦出现错误则本函数将总是把 @error 设为 1

注意

* The VISA queries only return the 1st line of the device answer
This is not a problem in most cases, as most devices will always
answer with a single line.

* The following is a description of the MOST COMMON VISA DESCRIPTORS
Note that there are some more types. For more info please
refer to a VISA programmer's guide (available at www.ni.com)
Optional segments are shown in square brackets ([]).
Required segments that must be filled in are denoted by angle
brackets ().

接口语法
------------------------------------------------------------
GPIB INSTR GPIB[board]::primary address
[::secondary address] [::INSTR]
GPIB INTFC GPIB[board]::INTFC
TCPIP SOCKET TCPIP[board]::host address::port::SOCKET
Serial INSTR ASRL[board][::INSTR]
PXI INSTR PXI[board]::device[::function][::INSTR]
VXI INSTR VXI[board]::VXI logical address[::INSTR]
GPIB-VXI INSTR GPIB-VXI[board]::VXI logical address[::INSTR]
TCPIP INSTR TCPIP[board]::host address[::LAN device name]
[::INSTR]

关键字 GPIB 用于 GPIB 设备。
关键字 TCPIP 用于 TCP/IP 通信。
关键字 ASRL 用于串口设备。
关键字 PXI 用于 PXI 设备。
关键字 VXI 用于 VXI 设备(嵌入式或 MXIbus 控制器)
关键字 GPIB-VXI 用于 VXI 设备(GPIB-VXI 控制器)

The default values for optional parameters are shown below.

Optional Segment Default Value
---------------------------------------
board 0
secondary address none
LAN device name inst0

Example Resource Strings:
--------------------------------------------------------------
GPIB::1::0::INSTR A GPIB device at primary address 1 and
secondary address 0 in GPIB interface 0.

GPIB2::INTFC Interface or raw resource for GPIB
interface 2.

TCPIP0::1.2.3.4::999::SOCKET Raw TCP/IP access to port 999
at the specified IP address.

ASRL1::INSTR A serial device attached to interface
ASRL1. VXI::MEMACC Board-level register
access to the VXI interface.

PXI::15::INSTR PXI device number 15 on bus 0.

VXI0::1::INSTR A VXI device at logical address 1 in VXI
interface VXI0.

GPIB-VXI::9::INSTR A VXI device at logical address 9 in a
GPIB-VXI controlled system.

相关

_viFindGpib, _viOpen, _viClose, _viSetTimeout, _viGTL, _viGpibBusReset

示例


;- 这个脚本假定您已经把 GPIB 的地址设为 1
; 本脚本演示了如何单独使用 _viExecCommand 函数以及结合
; _viOpen 和 _viClose 函数使用的方法。
; 另外还演示了 _viGTL 函数
#include <Visa.au3>
Dim $h_session = 0

; 请求设备的 GPIB 地址3 的 ID
MsgBox(0,"Step 1","Open the instrument connection with _viOpen")
Dim $h_instr = _viOpen("GPIB::3::0")
MsgBox(0,"Instrument Handle obtained", "$h_instr = " & $h_instr) ; 显示 Session 句柄
; 请求设备响应

MsgBox(0,"Step 2","Query the instrument using the VISA instrument handle")
$s_answer = _viExecCommand($h_instr,"*IDN?") ; 注意,$h_instr 现在已不再是字符串了!
MsgBox(0,"GPIB QUERY result",$s_answer) ; 显示结果
; 再次请求。这时不需要再次打开连接了

MsgBox(0,"Step 3","Query again. There is no need to OPEN the link again")
$s_answer = _viExecCommand($h_instr,"*IDN?")
MsgBox(0,"GPIB QUERY result",$s_answer) ; 显示结果

MsgBox(0,"Step 4","Close the instrument connection using _viClose")
_viClose($h_instr) ; 关闭设备连接

MsgBox(0,"Step 5","Open the Instrument connection using only the address number")
Dim $h_instr = _viOpen(3)
MsgBox(0,"Instrument Handle obtained", "$h_instr = " & $h_instr) ; 显示 Session 句柄
; 请求设备响应

MsgBox(0,"Step 6","Query the instrument using the VISA instrument handle")
$s_answer = _viExecCommand($h_instr,"*IDN?") ; 注意,$h_instr 现在已不再是字符串了!
MsgBox(0,"GPIB QUERY result",$s_answer) ; 显示结果
; 再次请求。这时不需要再次打开连接了

MsgBox(0,"Step 7","Query again. There is no need to OPEN the link again")
$s_answer = _viExecCommand($h_instr,"*IDN?")
MsgBox(0,"GPIB QUERY result",$s_answer) ; 显示结果

MsgBox(0,"Step 8","Close the instrument connection using _viClose")
_viClose($h_instr) ; 关闭设备连接


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文