###User Defined Function###
_viExecCommand

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

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


###Parameters###
@@ParamTable@@
$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 <a href="_viOpen.htm">_viOpen()</a>.
	It is recommended that instead you use <a href="_viOpen.htm">_viOpen()</a> 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 <a href="_viClose.htm">_viClose()</a>.
$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
	[optional] 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 <a href="_viSetTimeout.htm">_viSetTimeout()</a> 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.
@@End@@

###ReturnValue###
Returns a value which depends on whether the command is a QUERY or not and in whether the operation was successful or not.

* Command, NON QUERY:
@@ReturnTable@@
Success:	0.
Failure:	-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)
@@End@@
* QUERY:
@@ReturnTable@@
Success:	the answer of the instrument to the QUERY
Failure:	-1 if the VISA DLL could not be open
	-3 if the VISA DLL returned an unexpected number of results
	or a NON ZERO value representing the VISA error code (see the VISA programmer's guide)
@@End@@
This function always sets the @error flag to non-zero in case of error.


###Remarks###
* 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 (&lt;&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.


###Related###
_viFindGpib, _viOpen, _viClose, _viSetTimeout, _viGTL, _viGpibBusReset, _viSetAttribute


###Example###
@@IncludeExample@@
