函数参考


_viExecCommand

Send a Command/Query to an Instrument/Device through the VISA interface (GPIB / TCP)

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

参数

$h_session A VISA descriptor (STRING) OR a VISA session handle (INTEGER)
This it can be a string or an integer (a handle):
* STRING -&gr; A VISA DESCRIPTOR is a string which specifies the resource with
which to establish a communication session.
An example descriptor is "GPIB::20::0".
This function supports all valid VISA descriptors, including GPIB, TCP, VXI
and Serial Interface instruments (ASRL).
A detailed explanation of VISA descriptors is shown in the Remarks section
of this function.
As a SHORTCUT you can also use a STRING containing the address number
(e.g. "20") of a GPIB instrument instead of typing the full descriptor
(in that case, "GPIB::20::0")
* INTEGER -&gr; A VISA session handle is an integer value returned by _viOpen.
It is recommended that instead you use _viOpen and VISA session handles
instead of descriptors if you plan to communicate repeteadly with an
Instrument or Device, as otherwise each time that you contact the instrument
you would incur the overhead of opening and closing the communication link.
Once you are done using the instrument you must remember to close the link
with _viClose.
$s_command Command/Query to execute (e.g. "*IDN?" or "SOURCE:POWER -20 dBM")
A query MUST contain a QUESTION MARK (?)
When the command is a QUERY the function will automatically wait for the
instrument's answer (or until the operation times out)
$i_timeout_ms [可选参数] The operation timeout in MILISECONDS.
This is mostly important for QUERIES only.
If it is not specified the last set timeout will be used. If it was never set
before the default timeout (which depends on the VISA implementation) will be used.
Timeouts can also be set separatelly with the _viSetTimeout function.
Depending on the bus type (GPIB, TCP, etc) the timeout might not be set to the
exact value that you request. Instead the closest valid timeout bigger than
the one that you requested will be used.

返回值

The return value depends on whether the command is a QUERY
or not and in whether the operation was successful or not.
* Command, NON QUERY:
Success: Returns ZERO
Failure: Returns -1 if the VISA DLL could not be open
or a NON ZERO value representing the VISA
error code (see the VISA programmer's guide)
* QUERY:
Success: Returns the answer of the instrument to the QUERY
Failure: Returns -1 if the VISA DLL could not be open
Returns -3 if the VISA DLL returned an unexpected number of results
or returns a NON ZERO value representing the VISA
error code (see the VISA programmer's guide)
This function always sets @error to 1 in case of error.

注意/说明

* 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 (<&gr;).

Interface Syntax
------------------------------------------------------------
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]

The GPIB keyword is used for GPIB instruments.
The TCPIP keyword is used for TCP/IP communication.
The ASRL keyword is used for serial instruments.
The PXI keyword is used for PXI instruments.
The VXI keyword is used for VXI instruments via either embedded
or MXIbus controllers.
The GPIB-VXI keyword is used for VXI instruments via a GPIB-VXI
controller.

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, _viSetAttribute

示例/演示


;- 这里假设您安装了仪器到 GPIB 地址 3
; 如果您的仪器安装到了不同的地址, 则改变 "GPIB::3::0" 为
; 相应描述符. 进行对 _viOpen 的相同调用
; 此例子演示如何使用 _viExecCommand 函数, 在单独模式和与
; _viOpen 和 _viClose 的组合.
; 此例子也展示了 _viGTL 函数

#include <Visa.au3>

Local $h_session = 0

; 查询在 GPIB 地址 3 的仪器 ID
MsgBox(4096, "Step 1", "Simple GPIB query using a VISA Descriptor")
Local $s_answer = _viExecCommand("GPIB::3::0", "*IDN?", 10000) ; 超时为 10 秒
MsgBox(4096, "GPIB QUERY result", $s_answer) ; 显示应答

MsgBox(4096, "Step 2", "Go to LOCAL using VISA Descriptor")
_viGTL("GPIB::1::0") ; 到本地 (退出远程控制模式)

MsgBox(4096, "Step 3", "Simple GPIB query using a VISA address shortcut")
$s_answer = _viExecCommand("1", "*IDN?") ; 此地址必须是字符串
MsgBox(4096, "GPIB QUERY result", $s_answer) ; 显示应答
MsgBox(4096, "Info", "Now let's use _viOpen and _viClose")

MsgBox(4096, "Step 4", "Open the instrument connection with _viOpen")
Local $h_instr = _viOpen(3)
MsgBox(4096, "Instrument Handle obtained", "$h_instr = " & $h_instr) ; 显示会话句柄
; 查询仪器

MsgBox(4096, "Step 5", "Query the instrument using the VISA instrument handle")
$s_answer = _viExecCommand($h_instr, "*IDN?") ; $h_instr 现在不是字符串!
MsgBox(4096, "GPIB QUERY result", $s_answer) ; 显示应答
; 再次查询. 不需要再次打开连接

MsgBox(4096, "Step 6", "Query again. There is no need to OPEN the link again")
$s_answer = _viExecCommand($h_instr, "*IDN?")
MsgBox(4096, "GPIB QUERY result", $s_answer) ; 显示应答

MsgBox(4096, "Step 7", "Go to LOCAL using VISA instrument handle")
_viGTL($h_instr); 到本地 (这是可选的)

MsgBox(4096, "Step 8", "Close the Instrument connection using _viClose")
_viClose($h_instr) ; 关闭仪器连接