■機能 データを受信します。VBでBinary受信を行う場合はGpListenBinaryを使用してください。
■書式
(VB.NET用)
Dim Srlen, Ret As Integer
Dim Cmd(xxxx) As Integer ' (xxxxはコマンド配列数のMax値を指定)
Dim Srbuf(xxxx) As Byte ' (xxxxはデータ数のMax値を指定)
Ret = GpListen(Cmd, Srlen, Srbuf)
(C言語用)
DWORD Srlen, Ret;
DWORD *Cmd;
char *Srbuf;
Ret = GpListen(Cmd, &Srlen, Srbuf);
(C#用)
uint Srlen, Ret;
uint[] Cmd = new uint[xxxx]; /* (xxxxはコマンド配列数のMax値を指定) */
StringBuilder Srbuf = new StringBuilder(xxxx); /* (xxxxはデータ数のMax値を指定) */
Ret = gpib.Listen(Cmd, out Srlen, Srbuf);
(Python用)
Srlen, Ret = ctypes.c_ulong(), ctypes.c_ulong()
Cmd = (ctypes.c_ulong * xxxx)() # (xxxxはコマンド配列数のMax値を指定)
Srbuf = (ctypes.c_ubyte * xxxx)() # (xxxxはデータ数のMax値を指定)
Ret.value = GpibPy.GpListen(Cmd, ctypes.byref(Srlen), Srbuf)
■モード マスタモード/スレーブモード
■引数
Cmd : コマンド配列
[0] トーカ+リスナ数(=リスナ数+1)
(スレーブモード=0)
[1] トーカアドレス
[2] リスナアドレス
・
・
Srlen : (入力値)最大受信可能バイト長(1Mbyte Max)
(戻り値)受信バイト長
Srbuf : 受信バッファ
SrbufB : 受信バッファ(Binaryデータ用)
Ret : 終了情報(戻り値)
0 : デリミタ受信終了
1 : デリミタおよびEOI受信終了
2 : EOI受信終了
80 : 初期化未実行
128 : 受信データ域オーバー
140 : 非同期関数の実行中
240 : ESCキーが押された
242 : アドレス指定ミス
243 : バッファ指定エラー
252 : GPIBエラー
253 : 受信データがありません
254 : タイムアウト
255 : パラメータエラー
(詳細は「戻り値一覧」参照)
■補足
①受信バッファおよび受信バイト長について
Srlenの入力値は、Srbufで指定した配列数を入力します。
また、Srlenの出力値はSrlenの入力側の値を越えることはありません。
このため、それ以上のデータが送られてきた場合、Srlen(入力値)=Srlen(出力値)となり、SrbufにはSrlen(出力値)バイトまでのデータが代入されることになります。
よって、Srbufの配列数を超えたSrlenを入力すると、プログラムの正常動作は期待できません。また、受信バッファはデリミタコードも含めて確保してください。
②マスタモードでの戻り値が128(データ受信域オーバー)の場合、次のようにすることで残りのデータを受信することができます。
1.Cmd(0) = 0 にして再度GpListenを実行
2.戻り値が2以下(下位バイト)になるまで1.から繰り返す
③コマンド配列についてCmd[0]には送出するコマンド数を与えますので、スレーブモード時はCmd[0]=0としてください。
④スレーブモードでは、EOI付き1バイトデータの受信はできません。
⑤受信データ数が0か1Mbyteかを判断するには終了情報(253)を確認することにより行えます。
Srlen=0, Ret=0 →受信データ数=1Mbyte
Srlen=0, Ret=253 →受信データ数=0byte(デリミタコードのみ受信)
⑥DOS版をご利用頂いたことがある方へDOSからの変更点として、FIFO、DMAの使用時にもDmainuse関数の実行の必要はありません。
内部で同様の処理を行っており、この関数だけで受信が完了します。