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プログラミングガイドを参照) | |
を表す非ゼロの値を返します |
注意
* VISAクエリに対してはデバイスの応答の1行目のみが返されます。
関連
_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) ; 計測器コネクションを閉じる