GpListen

image\BLTLRGSQ.gif使用可能ボード image\SETUP.gif image\SANBTN.gif

 

 

■機能       データを受信します。VBでBinary受信を行う場合はGpListenBinaryを使用してください。

 

■書式       

(VB.NET用)

Dim Srlen, Ret As Integer

Dim Cmd(xxxx) As Integer    ' (xxxxはコマンド配列数のMax値を指定)

Dim Srbuf As New String("", xxxx)    ' (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関数の実行の必要はありません。

内部で同様の処理を行っており、この関数だけで受信が完了します。