ziGPIB2550 分室

zigopcqf()


■ *OPC? 実行 + 測定器ステータス・バイト・レジスタ の監視 を実行します。(エラーフラグ有り)
zigopcf (ADRS, DET, TOUT, ERRFLG, CRLF)
概要
以下の機能を実行します。
・ クエリ *OPC? の送信
・ 測定器のステータス・バイト・レジスタ の受信
・ ステータス バイトの 監視 (監視ビットがTrueの時、本プロシージャは終了)
・ 測定器から送信する "1" を受信 (これは コマンド *OPC? の仕様)

定義 戻り値 無し
ADRS
(Byte)
測定器の GPIB アドレス (0〜30)
DET
(Byte)
ループを抜ける値。 (0〜255)
0 を代入した場合、DETの値ではループは抜けられません。
TOUT(タイムアウト)の時間でループを抜ける事になります。
TOUT
(Byte)
ループのタイムアウト (sec) (1〜30)
ERRFLG
(Integer)
本プロシジャを実行後、0以外の値の場合は、本器でエラーが発生して中断した事を意味します。
ERRFLG は参照渡しです。

CRLF
(Byte)
終端コード 下位 3ビットで制御します。(ビット2=EOI, ビット1=CRLF, ビット0=LF)
・ビット2=1: EOI ピンでデータの終端とします。
・ビット1=1: CR と LF の連続コードを終端とします。
・ビット0=1: LF のコードを終端とします。
この引数は、*OPC? の送信 と "1" の受信に利用します。
Dim ERR As Integer
Dim ADRS As Byte
ADRS = 18

Call zigout(ADRS, "*rst") '測定器リセット
Call zigopcqf(ADRS, 16, 10, ERR)

測定器に *RST を送信し、zigopcqf()を実行する事で、測定器のリセット完了後に本プロシージャが終了し、
プログラムは次のステップに進む事ができます。

DET=16 : 測定器のステータス・バイト・レジスタ と 16 のバイナリand を取り、1以上の時に本プロシージャは終了します。
TOUT=10 : ステータス・バイト・レジスタ と 16 の バイナリand 結果が 0 でも、10秒で本プロシージャは終了します。

本プロシージャ実行後、変数ERR が 0以外の時、本器でエラーして中断した事を意味します。
zigspef() で *OPC? を実行するより、本プロシージャの方が VBA側の記述が少なく楽です。
補足 ● 本プロシージャの流れ。
(1) *OPC? を測定器に送信。
(2) シリアルポール コマンド を測定器に送信。
(3) シリアルポールに対する測定器の戻り値(1バイト)を受信。
(4) 第3引数 TOUT 以下の時間経過であれば、(2) にジャンプ。
(5) 戻り値 と 第2引数 DET のバイナリand を演算し、0であれば(2)にジャンプ。(対象ビットがFalseの為)
   0以外の時、(6)に進む。
(6) 測定器よりテキスト"1" を受信。
(7) 本プロシージャを終了。

● *OPC? の仕様
*OPC? の直前のコマンドが終了すると、測定器はテキスト"1"を返します。
コントローラ側は "1" を受信する事で、*OPC? の直前のコマンドに対する動作が終了した事が分かります。