■機能 非同期受信を行います。
■書式
(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.から繰り返す