Function Reference

_viExecCommand

VISAインターフェイス(GPIB / TCP)を通じて計測器/デバイスへコマンド/クエリを送信します。

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

 

パラメータ

$h_session VISA記述子(文字列)またはVISAセッションハンドル(整数)
文字列または整数(ハンドル)を使用できます。
* 文字列 -> VISA記述子とは通信セッションを確立する
リソースを指定する文字列です。
例えば記述子は"GPIB::20::0"のようになります。
この関数はGPIB、TCP、VXI、シリアルインターデイス計測器(ASRL)
を含む全ての有効なVISA記述子をサポートしています。
VISA記述子の詳しい説明はこの関数の"注意"項にあります。
ショートカットとしてGPOB計測器のアドレス番号を含む文字列(e.g. "20")を
完全な記述子(この場合"GPIB::20::0")の代わりに使用することもできます。
* 整数 -> VISAセッションハンドルとは_viOpenによって返される性数値です。
計測器/デバイスと繰り返し通信をおこなう場合は記述子の代わりに
_viOpenとVISAセッションハンドルを使用することを推奨します。
記述子を使用すると計測器と通信をおこなうたびに
通信リンクの開け閉めによるオーバーヘッドが起きます。
計測器を1度でも使用した場合、_viCloseを使用してリンクを閉じることを忘れないでください。
$s_command 実行するコマンド/クエリ(e.g. "*IDN?"、"SOURCE:POWER -20 dBM")
クエリはクエスチョンマークを(?)を含んでいる必要があります。
コマンドがクエリの場合、この関数は計測器の応答を(タイムアウト時まで)自動で待機します。
$i_timeout_ms [オプション]ミリ秒単位での操作のタイムアウト時間。
クエリ使う場合のみ重要です。
指定しない場合、最後に設定されたタイムアウト時間が使用されます。
タイムアウト時間が設定されたことがない場合はデフォルトのタイムアウト時間(VISAの実装に依存)が使用されます。
タイムアウト時間は_viSetTimeoutで別個に設定できます。
バスの種類(GPIB、TCP、etc)によってはタイムアウトは要求された正確な値に設定されません。
代わりに要求された時間より長い時間のうち、有効でもっとも近い値が使用されます。

 

返し値

返し値はコマンドがクエリかどうかと操作が成功したかどうかに依存します。
* コマンドがクエリでない:
成功: ゼロを返します
失敗: VISA DLLが開けない場合-1を返します
それ以外の場合VISAエラーコード(VISAプログラミングガイドを参照)
を表す非ゼロの値を返します
* クエリ:
成功: クエリに対する計測器の応答を返します
失敗: DLLが開けない場合-1を返します
VISA DLLが予期しない結果数を返す場合-3を返します
それ以外の場合VISAエラーコード(VISAプログラミングガイドを参照)
を表す非ゼロの値を返します
エラー時にはこの関数は常に@errorを1に設定します.

 

注意

* VISAクエリに対してはデバイスの応答の1行目のみが返されます。
これはほとんどの場合、問題になりません。
多くのデバイスは常に1行で応答するからです。

* 以下は一般的なVISA記述子の説明です。
ここに述べる以外の種類もあります。
より詳しい情報についてはVISAプログラミングガイド(www.ni.comで利用可)を参照してください。
オプションのセグメントは角カッコ([])で示してあります。
必ず埋めなければならない必須セグメントについては山カッコ(<>)で表示されています。

インターフェイス構文
------------------------------------------------------------
GPIB INSTR GPIB[ボード]::1次アドレス
                [::2次アドレス] [::INSTR]
GPIB INTFC GPIB[ボード]::INTFC
TCPIP SOCKET TCPIP[ボード]::ホストアドレス::ポート::SOCKET
Serial INSTR ASRL[ボード][::INSTR]
PXI INSTR PXI[ボード]::デバイス[::ファンクション][::INSTR]
VXI INSTR VXI[ボード]::VXI論理アドレス[::INSTR]
GPIB-VXI INSTR GPIB-VXI[ボード]::VXI論理アドレス[::INSTR]
TCPIP INSTR TCPIP[ボード]::ホストアドレス[::LANデバイス名]
                [::INSTR]

GPIBキーワードはGPIB計測器で使用されます。
TCPIPキーワードはTCP/IP通信で使用されます。
ASRLキーワードはシリアル計測器で使用されます。
PXIキーワードはPXI計測器で使用されます。
VXIキーワードは組み込みまたはMXIbusコントローラ経由のVXI計測器で使用されます。
GPIB-VXIキーワードはGPIB-VXIコントローラ経由のVXI計測器で使用されます。

オプションパラメータのデフォルト値は以下の通りです。

オプションセグメント デフォルト値
---------------------------------------
ボード 0
2次アドレス none
LANデバイス名 inst0

リソース設定例:
--------------------------------------------------------------
GPIB::1::0::INSTR
GPIBインターフェイス0、1次アドレス1、2次アドレス0のGPIBデバイス

GPIB2::INTFC
GPIBインターフェイス2のインターフェイスまたはRAWリソース

TCPIP0::1.2.3.4::999::SOCKET
指定したIPアドレスのポート999へのTCP/IPでのRAWアクセス

ASRL1::INSTR
インターフェイスASRL1に取り付けられたシリアルデバイス。

VXI::MEMACC
VXIインターフェイスにアクセスするボード上のレジスタ

PXI::15::INSTR
バス0、番号15のPXIデバイス

VXI0::1::INSTR
VXIインターフェイスVXI0の論理アドレス1のVXIデバイス

GPIB-VXI::9::INSTR
GPIB-VXI制御システムの論理アドレス9のVXIデバイス

 

関連

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

 


;- GPIBアドレス3に設定された計測器を扱うとする
; 扱う計測器が異なるアドレスの場合は"GPIB::3::0"を対応する記述子に変更
; _viOpenの呼び出しも同様にする
; どのように_viExecCommand関数をスタンドアローンモードで_viOpen、_viCloseと組み合わせて使用するかを示す
; また_viGTL関数も示す

#include <Visa.au3>

Dim $h_session = 0

; GPIBアドレス3で計測器のIDを要求
MsgBox(0,"Step 1","Simple GPIB query using a VISA Descriptor")
Dim $s_answer = _viExecCommand("GPIB::3::0","*IDN?",10000) ; 10秒でタイムアウト
MsgBox(0,"GPIB QUERY result",$s_answer) ; 回答を表示

MsgBox(0,"Step 2","Go to LOCAL using VISA Descriptor")
_viGTL("GPIB::1::0") ; ローカルへ移行(リモートコントロールモード終了)

MsgBox(0,"Step 3","Simple GPIB query using a VISA address shortcut")
$s_answer = _viExecCommand("1","*IDN?") ; アドレスは文字列でなければならない
MsgBox(0,"GPIB QUERY result",$s_answer) ; 回答を表示
MsgBox(0,"Info","Now let's use _viOpen and _viClose")

MsgBox(0,"Step 4","Open the instrument connection with _viOpen")
Dim $h_instr = _viOpen(3)
MsgBox(0,"Instrument Handle obtained", "$h_instr = " & $h_instr) ; セッションハンドルを表示
; 計測器の要求

MsgBox(0,"Step 5","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 6","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 7","Go to LOCAL using VISA instrument handle")
_viGTL($h_instr); ローカルへ移行 (オプション)

MsgBox(0,"Step 8","Close the Instrument connection using _viClose")
_viClose($h_instr) ; 計測器コネクションを閉じる