IBRDA
ボードレベル/デバイスレベル
目的
デバイスからユーザバッファにデータを非同期的に読み取ります。
形式
C
| unsigned long ibrda (int ud, void *rdbuf, size_t count) |
Visual Basic
| CALL ibrda (ud%, rdbuf$) |
または
| status% = ilrda (ud%, rdbuf$, count&) |
対話式制御(使用に関する注意)
ibrda count
入力
| ud | ボードまたはデバイスのユニットデスクリプタ |
| count | GPIBから読み取るバイト数 |
出力
| rdbuf | データが読み取られるバッファのアドレス |
| 関数からの戻り値 | Ibstaの値 |
説明
デバイスレベル
udがデバイスデスクリプタの場合、ibrdaはGPIBのアドレスを指定し、countバイトまでのデータをGPIBデバイスから非同期に読み取り、rdbufで指定されたバッファにデータを入れます。countバイトのデータを受信するかENDを受信すると、操作は正常終了します。転送された実際のバイト数はIbcntグローバル関数に返されます。
ボードレベル
udがボードデスクリプタの場合、ibrdaはcountバイトまでのデータをGPIBデバイスから読み取りrdbufによって指定されたバッファにそのデータを配置します。ボードレベルのibrdaは、GPIBがすでに正しくアドレス指定されているものと仮定します。countバイトのデータを受信するかENDを受信すると、操作は正常終了します。ボードがCICでなく、CICがGPIB上でDCL(Device Clear: デバイスクリア)を送信すると、操作はエラーで終了します。転送された実際のバイト数はIbcntグローバル関数に返されます。
ボードレベル/デバイスレベル
非同期のI/Oコール(ibcmda、ibrda、ibwrta)は、I/O処理中にアプリケーションがGPIB以外の処理を実行できるように設計されています。非同期のI/Oが開始されると、後続のNI-488.2コールは厳しく制限されます。実行中のI/O処理を干渉するようなコールはすべて拒否されます。 この場合、ドライバがEOIPを返します。
I/Oが完了したら、アプリケーションはNI-488.2ドライバと再同期化する必要があります。再同期化を行うには、以下のいずれかのコールを使用してください。
| ibwait | 返されたIbstaにCMPLが含まれている場合、ドライバとアプリケーションは再同期化されています。 |
| ibnotify | ibnotify Callbackに渡されたIbstaの値にCMPLが含まれている場合、ドライバとアプリケーションは再同期化されています。 |
| ibstop | I/Oが取り消され、ドライバとアプリケーションが再同期化されます。 |
| ibonl | I/Oが取り消されインタフェースはリセットされて、ドライバとアプリケーションが再同期化されます。 |
発生する可能性のあるエラー
| EABO | ボードレベル: CICからDCL(Device Clear: デバイスクリア)のメッセージを受信しました。 |
| EADR | ボードレベル: GPIBが正しくアドレス指定されませんでした。ibcmdを使ってGPIBをアドレス指定してください。 |
| デバイスレベル: デバイスのGPIBアドレスとアクセスボードのGPIBアドレス間に競合が存在します。代わりにibconfig(IbcPADとIbcSAD)を使用してください。 | |
| EARG | バッファまたはcountが無効です。 |
| EBUS | デバイスレベル: デバイスがGPIBに接続されていません。 |
| ECIC | デバイスレベル: アクセスボードがCICでありません。デバイスレベルのコールとバスの管理を参照してください。 |
| EDVR | NI-488.2ドライバの構成またはインストールが正しくありません。 |
| EHDL | udが無効または範囲外です。 |
| ELCK | 他の処理によりロックされているため、要求された動作が行われませんでした。 |
| ENEB | インタフェースが取り付けられていないか、正しく構成されていません。 |
| EOIP | 非同期I/Oの処理中です。 |