■機能 データを受信します。VBでBinary受信を行う場合はGpListenExBinaryを使用してください。
■書式
(VB.NET用)
Dim Srlen, Ret As Integer
Dim Cmd(xxxx) As Integer ' (xxxxはコマンド配列数のMax値を指定)
Dim Srbuf As New String("", xxxx) ' (xxxxはデータ数のMax値を指定)
Ret = GpListenEx(Cmd, Srlen, Srbuf)
(C言語用)
DWORD Srlen, Ret;
DWORD *Cmd;
BYTE *Srbuf;
Ret = GpListenEx(Cmd, &Srlen, Srbuf);
(C#用)
uint Srlen, Ret;
uint[] Cmd = new uint[xxxx]; /* (xxxxはコマンド配列数のMax値を指定) */
StringBuilder Srbuf = new StringBuilder(xxxx); /* (xxxxはデータ数のMax値を指定) */
Ret = gpib.ListenEx(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.GpListenEx(Cmd, ctypes.byref(Srlen), Srbuf)
■モード マスタモード/スレーブモード
■引数
Cmd : コマンド配列
[0] トーカ+リスナ数(=リスナ数+1)
(スレーブモード=0)
[1] トーカアドレス
[2] リスナアドレス
[3] リスナアドレス
・
・
Srlen : (入力)最大受信可能バイト長(1Mbyte Max)
(出力)実際に受信したバイト長
Srbuf : 受信バッファ
SrbufB : 受信バッファ(Binaryデータ用)
Ret : 終了情報(戻り値)
0 : 正常終了(デリミタ受信)
1 : 正常終了(デリミタおよびEOI受信)
2 : 正常終了(EOI受信)
8 : 初期化未実行
128 : 受信データ域オーバー
140 : 他の非同期関数の実行中
240 : ESCキーが押された
242 : アドレス指定ミス
243 : バッファ指定エラー
252 : GPIBエラー
253 : 受信データがありません(デリミタのみ受信)
254 : タイムアウト
255 : パラメータエラー
(詳細は「戻り値一覧」参照)
■補足
①GpListen()と比較して次のような違いがあります。
・GpBoardstsEx()の設定(32H)により、受信したデリミタをバイト数に含めることができます(デフォルトではカウントしません)。
・デリミタおよびEOIによる戻り値をより正確に返します。
②受信バッファおよび受信バイト長についてSrlenの入力値は、Srbufで指定した配列数を入力します。
また、Srlenの出力値はSrlenの入力側の値を越えることはありません。
このため、それ以上のデータが送られてきた場合、Srlen(入力値)=Srlen(出力値)となり、SrbufにはSrlen(出力値)バイトまでのデータが入力されることになります。
よって、Srbufの配列数を超えたSrlenを入力すると、プログラムの正常動作は期待できません。
また、受信バッファはデリミタコードも含めて確保してください。
③コマンド配列についてCmd[0]には送出するコマンド数を与えますので、スレーブモード時はCmd[0]=0としてください。
④マスタモードでの戻り値が128(データ受信域オーバー)の場合、次のようにすることで残りのデータを受信することができます。
1.Cmd(0) = 0 にして再度GpListenExを実行
2.戻り値が2以下(下位バイト)になるまで1.から繰り返す