GpListenAsync

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

 

 

■機能       非同期受信を行います。

 

■書式       

(VB.NET用)

Dim Srlen, Ret As Integer

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

Dim Srbuf(xxxx) As Byte    ' (xxxxはデータ数のMax値を指定)

Ret = GpListenAsync(Cmd, Srlen, Srbuf)

 

(C言語用)

DWORD Srlen, Ret;

DWORD *Cmd;

BYTE *Srbuf;

Ret = GpListenAsync(Cmd, &Srlen, Srbuf);

 

(C#用)

uint Srlen, Ret;

uint[] Cmd = new uint[xxxx];   /* (xxxxはコマンド配列数のMax値を指定) */

StringBuilder Srbuf = new StringBuilder(xxxx);   /* (xxxxはデータ数のMax値を指定) */

Ret = gpib.ListenAsync(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.GpListenAsync(Cmd, ctypes.byref(Srlen), Srbuf)

 

■モード     マスタモード/スレーブモード

 

■引数

Cmd    :    コマンド配列

[0] トーカ+リスナ数(=リスナ数+1)

(スレーブモード=0)

[1] トーカアドレス

[2] リスナアドレス

[3] リスナアドレス

 

Srlen        :    (入力) 最大受信可能バイト長(1Mbyte Max)

(出力)実際に受信したバイト長

 

Srbuf        :    受信データバッファ

 

SrbufB      :    受信データバッファ(Binaryデータ用)

 

pRecMem :    受信データバッファへのポインタ

 

Ret           :    終了情報(戻り値)

0       :   正常終了(非同期関数の実行開始)

80     :   初期化未実行

140   :   非同期関数の実行中

190   :   Eventオブジェクトの生成に失敗

200   :   Threadの生成に失敗

 

GpCheckAsync()のErrCode

0     :   正常終了(デリミタ受信)

1     :   正常終了(デリミタ受信およびEOI受信)

2     :   正常終了(EOI受信)

128   :   受信データ域オーバー

141   :   GpStopAsync()により中断

240   :   ESCキーが押された

242   :   アドレス指定ミス

243   :   バッファ指定エラー

252   :   GPIBエラー

253   :   受信データなし(デリミタのみ受信)

254   :   タイムアウト

255   :   パラメータエラー

(詳細は「戻り値一覧」参照)

 

■補足

①受信完了の確認はGpCheckAsync()で行います。

正常に終了した場合、GpCheckAsync()の戻り値が0、第2引数ErrCodeの値が2以下または128になります。

 

②1、2、128、141、240、242、252、253、254、255の戻り値はこの関数からは直接返されません。

GpCheckAsync()の第2引数ErrCodeに返されます。

 

③受信バッファおよび受信バイト長について

Srlenの入力値は、Srbufで指定した配列数を入力します。

また、Srlenの出力値はSrlenの入力側の値を越えることはありません。

このため、それ以上のデータが送られてきた場合、Srlen(入力値)=Srlen(出力値)となり、SrbufにはSrlen(出力値)バイトまでのデータが入力されることになります。

よって、Srbufの配列数を超えたSrlenを入力すると、プログラムの正常動作は期待できません。

また、受信バッファはデリミタコードも含めて確保してください。

 

④コマンド配列についてCmd[0]には送出するコマンド数を与えますので、スレーブモード時はCmd[0]=0としてください。

 

⑤マスタモードでGpCheckAsync()での非同期関数の戻り値が128(データ受信域オーバー)の場合、次のようにすることで残りのデータを受信することができます。

1. GpListenAsyncを実行

2. GpCheckAsync()での非同期関数の戻り値が128

3. Cmd(0) = 0 にして再度GpListenAsyncを実行

4. GpCheckAsync()での非同期関数の戻り値が2以下(下位バイト)になるまで3.から繰り返す