USB, LAN のいずれの製品にも対応できるライブラリで、 Agilent E5810 用ライ ブラリとか、当社の過去の GPIB ボード用ライブラリとほぼ互換になるように書か れています。機能については、サンプルプログラムと見比べると、理解が早いでしょう。
host で指定した GPIB コントローラを使うように初期化します。指定されたデバイス 名が "/dev/cuaU0" 等「/dev/」で始まるときは GPIB-USB CONTROLLER、 "202.23.252.106" とか "gpib" のように IP アドレスかホスト名と解釈できる場合は GPIB-ETHERNET CONTROLLER を使うものと仮定します。 失敗すると -1、成功すると 0 が戻ります。 プログラムの開始時に1度だけ実行します。 (Mac OSX の場合、USB デバイスは "/dev/cu.usbserial-PXEN2PP6" といった名前にな ります。)
GPIB コントローラの動作モードを設定します。mode の内容は、次のとおりです。
1 NCNT(ノンコントローラ) モードになります。 3 SCNT(システムコントローラ) モードになります。SCNT モードは最も一般的なもので、 GPIB デバイスの制御はこのモードで行われます。 SCNT を指定して gbmod() を実行すると、 IFC を出力して、REN を true にした後、IFC メッセージを出力して、GPIB をリセット し、バスに接続されたデバイスをリモートコントロール可能にします。
NCNT モード(デバイスモード)は、他のコントローラから制御される場合に使用します。 リスナとしてデータを入力したり、トーカとしてデータを出力したり、 デバイスクリアやデバイストリガを受信したり、 SRQ を出力してシリアルポールに応答することができます。
GPIB コントローラとの接続を切断します。 失敗すると -1、成功すると 0 が戻ります。 プログラムの終了時に1度だけ実行します。
I/O timeout の時間を秒単位で指定します。ただし、PROLOGIX のコントローラはデータ の入力を最大 3 秒しか待ちませんので、これ以上の時間を指定しても、デバイスレベル のタイムアウト値を伸ばすことができません。必要な場合は、応用プログラム側で遅延 を入れてください。初期値は 5 秒です。(VXI-11 用ライブラリでは ms 単位になってい ますので注意してください。)
ad で指定する GPIB デバイスに、データを出力します。 パラメータの意味は、次のとおりです。
ad - GPIB アドレスを指定します。 buf - 出力データのアドレスです。 cnt - 出力データのバイト数を指定します。 del - デリミタを指定します。
アドレスとして2次アドレスを必要とする場合は、
1次アドレス * 100 + 2次アドレスとします。 例えば、 702 なら、1次アドレス 7 、2次アドレス 2 になります。
NCNT モードでは、指定されたアドレスを自己アドレスにします。アドレスを -1 に指定 した場合は、自己アドレスを変更しません。自己アドレスの初期値は 1 です。
cnt が 0 以下の場合は、buf にセットした文字列の長さになります。 cnt が 1 より大きい場合は、指定されたバイト数だけのデータを出力し、デリミタ があれば、その後に追加します。
NCNT モードの場合は他のコントローラから自分がトーカに指定されたとき、指定された データを出力します。
del (デリミタ)の指定法は、次のとおりです。
0 - なし 1 - END (最後の出力データに END を付加します。) 2 - CR/LF (データの終りに CR と LF を追加します。) 3 - CR+END (データの終りに END 付きの CR を付加します。)1 は IEEE488、2 は HP 社、3 は TEKTRONIX 社の標準的なデリミタです。 HP 社の古いデバイスの中には、 END をデリミタにするとうまく動かないものがありますので、注意してください。 IEEE488 の前身である HP-IB 時代には EOI はパラレルポールにしか使われなかった ため、 END メッセージの意味はなく、 HP 社のコントローラには、END メッセージを使わないものがあります。
失敗したら -1、成功したら実際に出力したバイト数を返します。
ad で指定する GPIB デバイスから、データを入力します。 パラメータの意味は、次のとおりです。
ad - GPIBアドレスを指定します。 buf - 入力データを格納するアドレスです。 cnt - 入力データのバイト数を指定します。 del - デリミタを指定します。
アドレスとして2次アドレスを必要とする場合は、
1次アドレス * 100 + 2次アドレスとします。例えば、 1512 なら、1次アドレス 15 、2次アドレス 12 になります。
del(デリミタ)の指定法は、次のとおりです。
0 - なし(デリミタなしの固定長入力) 1 - END 2 - CR/LF (データの終りの CR と LF は削除します。) 3 - CR+END (データの終りの CR は削除します。)0 はバイトカウント方式の固定長入力で、AD変換器などに良く見られる方式ですが、 PROLOGIX の製品では原理的に途中で打ち切られる可能性があります。 1 は IEEE488、2 は HP 社、3 は TEKTRONIX 社の標準的なデリミタです。
入力データが END や EOS で終ったかどうかは、 gbwait(-1) 関数で調べることができます。
gbred() は、実際にバッファに格納したバイト数を返します。 CR/LF か CR のデリミタを指定した場合は、デリミタを削除します。
NCNT モードの場合は他のコントローラからリスナに指定され、データを入力するまで 待たされます。
mask が -1 なら、直前の read() や GPIB の状態を示すステイタスワードを持ち帰ります。 これは read() の終了が EOI 受信で終ったかどうかを調べたり、 制御権の移動を確認したりするのに使います。 情報ビットの内容は次のとおりです。
ビット 意味 --------------------------------------------------------------------- 0 - REQCNT: 直前の read() は cnt で指定した最大長で終了 1 - CHR : 直前の read() は del で指定されたデリミタ文字 (EOS) で終了 2 - END : 直前の read() は END で終了 6 - SRQ : SRQ を受信
mask が 0 なら上記のうち SRQ ビットだけをセットします。 これは、ポーリングで SRQ の存在を確認したりするのに使います。 mask の値が 1 以上の場合は、SRQ が出るのを待ちます。
ad で指定された GPIB アドレスの機器に対してシリアルポールを実行し、 入手したステイタスバイトを持ち帰ります。
ad で指定された GPIB アドレスの機器をローカル状態にして、 正面パネルからのマニュアル操作を受け付けるようにします。
無視します。他の GPIB ライブラリとの互換性を持たせるために入れてあります。
ad で指定された GPIB アドレスの機器をクリアします。
ad で指定された GPIB アドレスの機器をトリガします。
IFC を出力して GPIB(バス)を初期化します。
NCNT モードでシリアルポールに応答するステータスバイトを指定します。 0x40 ビットがセットされている場合は、SRQ メッセイージを出力し、シリアルポール 応答が完了するのを待ちます。コントローラが SRQ を検出してシリアルポールを実行 するまでタイムアウトしないように、gblost() を設定してください。シリアルポール に応答すると stb はクリアされて 0 なりますので、必要なら再設定してください。
ad で指定された GPIB アドレスの機器をロックして、 他のプロセスから使えないようにします。
無視します。他の GPIB ライブラリとの互換性を持たせるために入れてあります。
何もしません。E5810 用ライブラリとの互換性を持たせるために入れてあります。
無視します。他の GPIB ライブラリとの互換性を持たせるために入れてあります。
無視します。他の GPIB ライブラリとの互換性を持たせるために入れてあります。
/* operation mode and flags */ #define GB_IDLE 0 /* idle */ #define GB_NCNT 1 /* non-controller */ #define GB_CNTR 2 /* non-system controller */ #define GB_SCNT 3 /* system controller */ #define GB_LONY 4 /* lsten only */ #define GB_TOLY 5 /* talk only */ /* wait() function status bits */ #define GBR_REQCNT 0x01 /* device_read reason REQCNT bit */ #define GBR_CHR 0x02 /* device_read reason CHR bit */ #define GBR_END 0x04 /* device_read reason END bit */ #define GBI_SRQ 0x40 /* this library dependent */ /* library funcyion prototypes */ int gbabort(int ad); int gblock(int ad); int gbunlock(int ad); int gbwrt(int ad, char *buf, int cnt, int del); int gbred(int ad, char *buf, int cnt, int del); int gbspol(int ad); int gbtrg(int ad); int gbclr(int ad); int gbrmt(int ad); int gblcl(int ad); int gblost(int time); int gblost2(int time1, int time2); int gbwait(int mask); int gbopn(char *host); int gbcls(void); int gberr(void); void gbint(void *); /* INTEX 207X GPIB library compatible functions */ int gbcmod(int mode); int gbifc(void); int gbren(int f); int gblst(int time); int issrq(void); /* INTEX 207X GPIB library compatible dummy functions */ int gbadr(int ad); int gbmsg(char *msg); int gbppol(int ad); int gbppc(int ad, int data); int gbppu(int ad); int gbsrq(int data);