Funktionreferenz


_viExecCommand

Beschreibung anzeigen in

Sendet ein(e) Kommando/Suchanfrage über eine VISA-Verbindung (GPIB/TCP) an ein Instrument/Gerät

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

Parameter

$hSession Ein VISA-Deskriptor (STRING) oder ein VISA-Session-Handle (INTEGER).
Ein VISA-DESKRIPTOR ist ein String, die die Ressource spezifiziert, zu der eine Verbindung aufgebaut werden soll.
* STRING -&gr; Ein VISA DESCRIPTOR ist ein String, der die Ressource angibt, mit der eine Kommunikationssitzung aufgebaut werden soll..
Beispiel für einen Deskriptor: "GPIB::20::0".
Diese Funktion unterstützt alle gültigen VISA-Deskriptoren, einschließlich GPIB, TCP, VXI und ASRL.
Eine detaillierte Beschreibung der VISA-Deskriptoren findest du bei den Bemerkungen zu dieser Funktion.
Als Kürzel kann auch ein STRING verwendet werden, der die Adressnummer (z.Bsp. "20") eines GPIB-Geräts statt des vollständigen Deskriptors (in diesem Fall: "GPIB::20::0") enthält.
* INTEGER -&gr; Ein VISA-Session-Handle ist ein Integerwert, der von _viOpen() zurückgegeben wird.
Es wird empfohlen, das von _viOpen() gelieferte VISA-Session-Handle anstatt des Deskriptors zu benutzen, wenn wiederholt auf ein Gerät zugegriffen werden soll, da sonst bei jedem Zugriff auf das Gerät unnötig Rechenzeit für das Öffnen und Schließen der Verbindung verschwendet wird.
Nach dem letzten Zugriff auf ein Gerät darf das Schließen der Verbindung nicht vergessen werden (mit _viClose()).
$sCommand Auszuführende(s) Kommando/Suchanfrage (z.Bsp.: "*IDN?" oder "SOURCE:POWER -20 dBM")
Eine Suchanfrage muss ein Fragezeichen enthalten (?).
Wenn eine Suchanfrage gestellt wurde, wird automatisch auf die Antwort des Geräts (oder auf Zeitüberschreitung [Timeout]) gewartet.
$iTimeoutMS [optional] Gibt die Wartezeit (Timeout) in Millisekunden an. Nur für Suchanfragen bedeutsam.
Wenn nicht angegeben, wird der zuletzt benutzte Timeout verwendet oder der Standard-VISA-Timeout.
Timeouts können auch separat per _viSetTimeout gesetzt werden.
Abhängig vom Verbindungstyp (GPIB, TCP, etc) kann die Timeout-Zeit nicht immer auf den von dir gewählten Wert gesetzt werden.
In diesem Fall wird der nächstgrößere Wert gewählt.
$sMode [optional] Kontrolliert den Modus, in dem das VISA viPrintf aufgerufen wird, wenn $sCommand keine Abfrage ist.
Standard ist @LF, was bedeutet, "@LF-Modus anhängen"..
Einige Instrumente und insbesondere viele GPIB-Karten ehren nicht das Terminator-Charakter-Attribut in diesen Fällen muss ein @LF-Terminator hinzugefügt werden..
Da dies der häufigste Fall ist, wird standardmäßig der Modus auf @LF gesetzt, der @LF an den SCPI-Befehl anhängt. Man kann diesen Modus auch auf @CR und @CRLF setzen, wenn die Karte diese Terminatoren verwendet.
Wenn man keinen Terminator verwenden möchten, setzt man diesen Parameter auf einen leeren String ("").
Auch einige Karten unterstützen die Ausführung eines "sprintf" auf der SCPI-Zeichenfolge vor dem Senden über die VISA-Schnittstelle..
Für diejenigen, die es tun, ist es möglich, indem Sie diesen Parameter auf "str" setzen, um die VISA-Schnittstelle zu schützen, um versehentlich eine Escape-Sequenz anzuwenden, wenn ein "/" innerhalb der VISA-Befehlszeichenfolge gefunden wird.
Dies ist normalerweise nicht notwendig und sollte nur eingestellt werden, wenn die GPIB-Karte oder das Gerät es verlangt.

Rückgabewert

Gibt einen Wert zurück, der davon abhängt, ob eine Suchanfrage gestellt wurde oder nicht und ob die Operation erfolgreich war oder nicht:

* Kommando, Keine Suche:
Erfolg: 0
Fehler: -1, wenn die VISA-DLL nicht geöffnet werden konnte,
oder gibt einen Wert ungleich 0 zurück, der dem VISA-Fehlercode (siehe VISA-Programmierhandbuch) entspricht.

Erfolg: die Antwort des Geräts auf die Anfrage zurück.
Fehler: -1 wenn die VISA-DLL nicht geöffnet werden konnte,
    -3 wenn die VISA-DLL eine unerwartete Anzahl an Ergebnissen liefert,
    oder gibt einen Wert ungleich 0 zurück, der dem VISA-Fehlercode (siehe VISA-Programmierhandbuch) entspricht.

Bemerkungen

* VISA liefert nur die erste Zeile der Geräteantwort.
Das ist in den meisten Fällen kein Problem, da fast alle Geräte mit einer einzeiligen Meldung antworten.

* Es folgt eine Beschreibung der gebräuchlichsten VISA-DESKRIPTOREN.
Es gibt jedoch einige weitere Typen, schlage dazu bitte im VISA-Programmierhandbuch nach (www.ni.com).
Optionale Angaben sind in eckige Klammern eingeschlossen ([]).
Board würde ich mit Baugruppe übersetzen.

Interface    Syntax
------------------------------------------------------------
GPIB INSTR    GPIB[board]::Primäradresse[::Sekundäradresse] [::INSTR]
GPIB INTFC    GPIB[board]::INTFC
TCPIP SOCKET    TCPIP[board]::Hostadresse::Port::SOCKET
Serial INSTR    ASRL[board][::INSTR]
PXI INSTR    PXI[board]::Gerät[::FunKtion][::INSTR]
VXI INSTR    VXI[board]::VXI logische Adresse[::INSTR]
GPIB-VXI INSTR    GPIB-VXI[board]::VXI logische Adresse[::INSTR]
TCPIP INSTR    TCPIP[board]::Hostadresse[::LAN Gerätename]
    [::INSTR]

Das Schlüsselwort GPIB wird für GPIB-Geräte verwendet.
Das Schlüsselwort TCPIP wird für TCP/IP-Kommunikation verwendet.
Das Schlüsselwort ASRL wird für serielle Geräte verwendet.
Das Schlüsselwort GPIB wird für GPIB-Geräte verwendet.
Das Schlüsselwort VXI wird für VXI-Geräte (auch für MXI-Bus-Controls) verwendet.
Das Schlüsselwort GPIB-VXI wird für VXI-Geräte verwendet, die über GPIB-VXI-Controls kommunizieren.

Die Standardwerte für die optionalen Argumente sind:

Optionale Angabe    Standardwert
---------------------------------------
board
Sekundäradresse    Nichts
LAN Gerätename    inst0


Beispiele für VISA-Deskriptoren (Ressource Strings):
--------------------------------------------------------------
GPIB::1::0::INSTR    Ein GPIB-Gerät an Primäradresse 1 und
    Sekundäradresse 0 in GPIB-Interface 0.

GPIB2::INTFC    Interface oder raw resource der GPIB
    Schnittstelle 2 (<- Rohdaten?).

TCPIP0::1.2.3.4::999::SOCKET    Raw TCP/IP Zugriff auf Port 999
    der angegebenen IP-Adresse.

ASRL1::INSTR    Ein serielles Gerät, das an die Schnittstelle ASRL1 angeschlossen ist.
    ASRL1.    VXI::MEMACC Board-level register
    Zugriff auf das VXI-Interface.

PXI::15::INSTR    PXI-Gerät Nr. 15 an Bus 0.

VXI0::1::INSTR    Ein VXI-Gerät an der logischen Adresse 1 im VXI-Interface VXI0.
    Interface VXI0.

GPIB-VXI::9::INSTR    Ein VXI-Gerät an der logischen Adresse 9 in einem
    GPIB-VXI-gesteuerten System.

Verwandte Funktionen

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

Beispiel

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

; Hier nehmen wir an, dass das Gerät an die GPIB-Adresse 3 gesetzt ist.
; Wenn das Gerät an eine andere Adresse gesetzt wurde, muss "GPIB::3::0" entsprechend angepasst werden.
; Es zeigt, wie die Funktion _viExecCommand allein und in Kombination mit _viOpen und _viClose zu benutzen ist.
; Es zeigt außerdem die Funktion _viGTL

Local $h_Session = 0

; Die ID des Geräts an GPIB-Adresse 3 abfragen
MsgBox($MB_SYSTEMMODAL, "Schritt 1", "Einfache GPIB-Abfrage mit einem VISA-Descriptor")
Local $s_Answer = _viExecCommand("GPIB::3::0", "*IDN?", 10000) ; 10 Sekunden Timeout
MsgBox($MB_SYSTEMMODAL, "Ergebnis der GPIB-Abfrage", $s_Answer) ; Antwort anzeigen

; Zum lokalen Computer wechseln (beendet den Fernsteuerungsmodus)
MsgBox($MB_SYSTEMMODAL, "Schritt 2", "Wechsle nach LOCAL unter Verwendung des VISA-Descriptors")
_viGTL("GPIB::1::0")

; Einfache GPIB-Anfrage unter Verwendung einer VISA-Kurzadresse
MsgBox($MB_SYSTEMMODAL, "Schritt 3", "Einfache GPIB-Anfrage unter Verwendung einer VISA-Kurzadresse")
$s_Answer = _viExecCommand("1", "*IDN?") ; Die Adresse muss ein STRING sein
MsgBox($MB_SYSTEMMODAL, "Ergebnis der GPIB-Abfrage", $s_Answer) ; Zeigt die Antwort
MsgBox($MB_SYSTEMMODAL, "Info", "Lass uns jetzt _viOpen und _viClose probieren!")

; Öffnen der Geräteverbindung nur durch Verwenden der Adress-Nummer
MsgBox($MB_SYSTEMMODAL, "Schritt 4", "Öffnen der Geräteverbindung nur durch Verwenden der Adress-Nummer")
Local $h_Instr = _viOpen(3)
MsgBox($MB_SYSTEMMODAL, "Geräte-Handle bekommen", "$h_Instr = " & $h_Instr) ; Zeigt das Session Handle

; Das Gerät abfragen
MsgBox($MB_SYSTEMMODAL, "Schritt 5", "Das Gerät unter Nutzung des VISA-Gerätehandles abfragen")
$s_Answer = _viExecCommand($h_Instr, "*IDN?") ; $h_Instr ist zu diesem Zeitpunkt KEIN STRING!
MsgBox($MB_SYSTEMMODAL, "Ergebnis der GPIB-Abfrage", $s_Answer) ; Antwort anzeigen

; Noch einmal abfragen. Es ist nicht nötig, den Link erneut zu ÖFFNEN
MsgBox($MB_SYSTEMMODAL, "Schritt 6", "Noch einmal abfragen. Es ist nicht nötig, den Link erneut zu ÖFFNEN")
$s_Answer = _viExecCommand($h_Instr, "*IDN?")
MsgBox($MB_SYSTEMMODAL, "Ergebnis der GPIB-Abfrage", $s_Answer) ; Antwort anzeigen

; Wechselt zum lokalen Computer (optional)
MsgBox($MB_SYSTEMMODAL, "Schritt 7", "Wechsle nach LOCAL unter Verwendung des VISA-Gerätehandles")
_viGTL($h_Instr)

; Geräteverbindung schließen
MsgBox($MB_SYSTEMMODAL, "Schritt 8", "Schließen der Geräteverbindung mit _viClose")
_viClose($h_Instr)