UDF > Visa >


_viExecCommand

Envoie une commande ou une requête à un Instrument ou un périphérique via l'interface VISA (GPIB/TCP)

#include <Visa.au3>
_viExecCommand ( $hSession, $sCommand [, $iTimeoutMS = -1 [, $sMode = @LF]] )

Paramètres

$hSession Un descripteur de VISA (STRING) OU un handle de session VISA (INTEGER)
Ce paramètre doit être une chaîne ou un nombre entier (un handle):
* STRING -> A VISA DESCRIPTOR est une chaîne qui spécifie la ressource avec laquelle établir une session de communication.
Un exemple de descripteur est "GPIB::20::0".
Cette fonction prend en charge tous les descripteurs valides de visa, y compris GPIB, TCP, VXI et les instruments d'interface série (ASRL).
Une explication détaillée de descripteurs VISA est montrée dans la section Remarques de cette fonction.
Comme avec un raccourci, vous pouvez également utiliser une chaîne de caractères contenant le numéro d'adresse (par exemple "20") d'un instrument GPIB au lieu de taper le descripteur complet (dans ce cas,"GPIB::20::0 »)
* INTEGER -> un handle de session VISA est une valeur entière retournée par _viOpen().
Il est recommandé que d'utilisez à la place de _viOpen() et les handles de session VISA gère à la place des descripteurs, si vous prévoyez de communiquer répétitivement avec un instrument ou un appareil, sinon à chaque fois que vous contacterez l'instrument vous devrez ouvrir et fermer la liaison de communication.
Une fois que vous aurez fini d'utiliser l'instrument, vous devez vous rappeler de fermer le lien avec la fonction _viClose().
$sCommand Commande/requête à exécuter (par exemple "*IDN?" ou "SOURCE:POWER -20 dBM")
Une requête DOIT contenir un point d'interrogation (?)
Lorsque la commande est une requête, la fonction attendra automatiquement la réponse de l'instrument (ou jusqu'à ce que l'opération dépasse le délai TimeOut).​
$iTimeoutMS [optionnel] La durée hors délai de l'opération, en millisecondes.
C'est surtout important pour les requêtes.
Si ce paramètre n'est pas spécifié, le dernier délai défini sera utilisé. Si il n'a jamais été défini avant, le timeout par défaut (qui dépend de l'implémentation VISA ) sera utilisé.
Un délai d'attente peut également être défini séparemment avec la fonction _viSetTimeout().
Selon le type de bus (GPIB, TCP, etc...) le délai ne peut pas être défini avec la valeur exacte que vous souhaitez. En revanche, le délai d'attente valide le plus proche, plus grand que celui que vous avez demandé, sera utilisé.
$sMode [optionnel] Contrôle le mode dans lequel la VISA viPrintf est appelé lorsque $sCommand n'est pas une requête.
La valeur par défaut est @LF, ce qui signifie "attacher le mode @LF".
Certains instruments et en particulier de nombreuses cartes GPIB ne respectent pas l'attribut de caractère de terminaison dans les cas où un terminateur @LF doit être ajouté.
Comme c'est le cas le plus courant, par défaut, le mode est défini sur @LF, qui ajoute @LF à la commande SCPI. Vous pouvez également définir ce mode sur @CR et @CRLF si votre carte utilise ces terminateurs. Si vous ne souhaitez pas utiliser de terminateur, définissez ce paramètre sur une chaîne vide ("").
De plus, certaines cartes prennent en charge l'exécution d'un "sprintf" sur la chaîne SCPI avant de l'envoyer via l'interface VISA. Pour ceux qui le font, il est possible, en mettant ce paramètre à "str" de "protéger" l'interface VISA d'appliquer accidentellement une séquence d'échappement quand un «/» est trouvé dans la chaîne de commande VISA.
Cela n'est normalement PAS nécessaire et ne doit être défini que si votre carte GPIB ou l'instrument le nécessitent.

Valeur de retour

Retourne une valeur selon que la commande est une requête ou non, et selon que l'opération a réussi ou non.

* Command, NON QUERY:
Succès: Retourne 0.
Échec: Retourne -1 si la dll VISA ne peut pas être ouverte
ou une valeur non nulle représentant le code d'erreur VISA (voir le guide du programmeur de VISA )

* QUERY :
Succès: Retourne la réponse de l'instrument à la requête
Échec: -1 Si la dll VISA ne peut pas être ouverte
-3 Si le VISA DLL retourne un nombre inattendu de résultats
ou une valeur non nulle représentant le code d'erreur VISA (voir le guide du programmeur de VISA)

Remarques

* Les requêtes VISA ne retournent que la 1ère ligne de la réponse du périphérique.
Ce n'est pas un problème dans la plupart des cas, car la plupart des périphériques répondront toujours avec une seule ligne.

* Ce qui suit est une description des descripteurs de visa le plus COMMUNS
Notez qu'il y a un peu plus de types. Pour plus d'informations veuillez vous référer au guide du programmeur VISA (disponible sur www.ni.com ).
Les segments optionnels sont indiqués entre crochets ([]).
Les segments obligatoires qui doivent être remplis sont désignés par des crochets angulaires (<>).

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]

Le mot-clé GPIB est utilisé pour les instruments GPIB.
Le mot-clé TCPIP est utilisé pour les communication TCP/IP.
Le mot-clé ASRL est utilisé pour les instruments série.
Le mot-clé PXI est utilisé pour les instruments PXI.
Le mot-clé VXI est utilisé pour les instruments VXI via un controleur MXIbus.
Le mot-clé GPIB-VXI est utilisé pour les instruments VXI via un contrôleur GPIB-VXI.

Les valeurs par défaut pour les paramètres optionnels sont indiqués ci-dessous.

Segment Optionnel Valeur par défaut
---------------------------------------
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.

En relation

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

Exemple

; - Cet exemple suppose que vous avez installé l'instrument à l'adresse GPIB 3
; Si vous avez un instrument à une adresse différente, changez "GPIB::3::0" en un descripteur correspondant. Faites de même pour l'appel à _viOpen.
; Il montre comment utiliser la fonction _viExecCommand en mode autonome et combiné avec _viOpen et _viClose.
; Il montre également la fonction _viGTL

#include <MsgBoxConstants.au3>
#include <Visa.au3>

Local $h_Session = 0

; Interroge l'ID de l'instrument à l'address GPIB 3
MsgBox($MB_SYSTEMMODAL, "Étape 1", "Simple requête GPIB à l'aide d'un descripteur VISA")
Local $s_Answer = _viExecCommand("GPIB::3::0", "*IDN?", 10000) ; 10 secs timeout
MsgBox($MB_SYSTEMMODAL, "Résultat de la requête GPIB", $s_Answer) ; Affiche la réponse

MsgBox($MB_SYSTEMMODAL, "Étape 2", "Va sur l'ordinateur LOCAL à l'aide d'un descripteur VISA")
_viGTL("GPIB::1::0") ; Va sur un local (quitte le mode contrôle distant)

MsgBox($MB_SYSTEMMODAL, "Étape 3", "Simple requête GPIB à l'aide d'un raccourci d'adresse VISA")
$s_Answer = _viExecCommand("1", "*IDN?") ; L'adresse doit être une chaîne
MsgBox($MB_SYSTEMMODAL, "Résultat de la requête GPIB", $s_Answer) ; Affiche la réponse
MsgBox($MB_SYSTEMMODAL, "Info", "Maintenant, utilise _viOpen et _viClose")

MsgBox($MB_SYSTEMMODAL, "Étape 4", "Ouvre la connexion de l'instrument avec _viOpen")
Local $h_Instr = _viOpen(3)
MsgBox($MB_SYSTEMMODAL, "Handle de l'Instrument obtenu", "$h_Instr = " & $h_Instr) ; Affiche le handle de la session
; Interroge l'instrument

MsgBox($MB_SYSTEMMODAL, "Étape 5", "Interroge l'instrument à l'aide du handle de l'instrument VISA ")
$s_Answer = _viExecCommand($h_Instr, "*IDN?") ; $h_Instr n'est pas une chaîne!
MsgBox($MB_SYSTEMMODAL, "Résultats de la requête GPIB", $s_Answer) ; Affiche la réponse
; Query again. There is no need to OPEN the link again

MsgBox($MB_SYSTEMMODAL, "Étape 6", "Interroge de nouveau. Inutile d'ouvrir le lien de nouveau")
$s_Answer = _viExecCommand($h_Instr, "*IDN?")
MsgBox($MB_SYSTEMMODAL, "Résultats de la requête GPIB", $s_Answer) ; Affiche la réponse

MsgBox($MB_SYSTEMMODAL, "Étape 7", "Va sur l'ordinateur LOCAL à l'aide du handle de l'instrument VISA")
_viGTL($h_Instr) ; Va sur le local (ceci est optionnel)

MsgBox($MB_SYSTEMMODAL, "Étape 8", "Ferme la connexion de l'instrument à l'aide de _viClose")
_viClose($h_Instr) ; Ferme la connexion de l'instrument