このドキュメントでは、GPIBエラーコードの解決策を説明します。
以下のテキストの大部分は、『NI-488.2ユーザマニュアル - Windows用』(下記の「その他のリソース」を参照)から引用されています。
エラー状態:ドライバエラーです。
説明:EDVRは、GPIBハードウェアが正しく構成されていない場合、または「ibfind」関数に渡されたインタフェース名またはデバイス名が正しくない場合に返されます。
考えられる原因:EDVRエラーは、ボードのインタフェース名または計測器のデバイス名を誤って入力した場合によく発生します。たとえば、NIボードのデフォルトのインタフェース名はGPIB0ですが、ゼロの代わりに英文字のohを入力してGPIBOと入力するとエラーが発生します。このエラーは、誤ったボード指標をibdev関数に渡した場合にも発生します。ボード指標は、GPIBボードのインタフェース名の数字の部分ですが、プライマリアドレスと勘違いされることがよくあります。たとえば、PCI-GPIBボードをコンピュータにインストールし、プライマリアドレスを2に設定したとします。ボードのデフォルトのインタフェース名はGPIB0であるため、ボード指標は2ではなく0です。
解決策:
エラー状態:この機能を使用するには、GPIBボードがコントローラーインチャージ (CIC) である必要があります。
説明:特定の関数では、GPIBボードをCICにする必要があります。これらの関数は、『NI-488.2 Function Reference Manual』(下記の関連リンクを参照)に記載されています。GPIBボードはデフォルトでシステムコントローラとなります。これは、コントローラインチャージとは異なります。システムコントローラは、いつでもCICになることができます(特定の汎用インタフェースバスには1つのシステムコントローラを使用できます)。
考えられる原因:ECICエラーは、GPIBボードがCICであることを確認するためにプログラムの開始時にインタフェースクリアを送信しない場合によく発生します。
解決策:
エラー状態:関数がリスナを検出しませんでした。
説明:GPIB通信には、1つのトーカ(データメッセージを書き込む)と1つ以上のリスナ(データメッセージを読み取る)が必要です。ENOLは、リスナのアドレスが指定されていないか、指定されたアドレスにリスナが存在しない状態で書き込み処理を実行しようとした場合によく発生します。デバイス書き込みの場合、ENOLは通信しようとしているGPIBアドレスがバスに接続されているデバイスのGPIBアドレスと一致していないことを示します。
考えられる原因:通信しようとしている計測器が予期されたプライマリアドレスにないか、計測器の電源がオンになっていないか、計測器へのケーブルが切断されているか、破損しています。
解決策:
エラー状態:GPIBボード(GPIB0またはGPIB1)のアドレスが正しくありません。
説明:EADRは、GPIBボードがコントローラインチャージ(CIC)で、読み取り/書き込み関数の前に正しくアドレス指定されていない場合に発生します。また、EADRは、シャドウハンドシェイク機能が要求されたときにGPIB ATNラインがすでにアサート解除されている場合にも、ibgts関数から返されます。この場合、このエラーは、シャドウハンドシェイクが不可能であることを伝えるためのものです。
考えられる原因:GPIBボードと、通信しようとしている計測器が同じプライマリアドレスに構成されています。
解決策:
エラー状態:関数呼び出しに無効な引数です。
説明:EARGは、次の例のように、関数呼び出しに無効な引数が渡されたときに返されます。
考えられる原因:0~17の範囲以外の値(タイムアウト値は0~17の値、デフォルトは13、つまり10秒間のタイムアウト)でibtmoを呼び出した場合、第2パラメータの上位バイトに無意味なビットが設定されている状態でibeosを呼び出した場合、無効なアドレスでibpad(またはibsad)を呼び出した場合などが挙げられます。
解決策:
エラー状態:必要なGPIBボードがシステムコントローラではありません。
説明:ESACは、GPIBボードにシステムコントローラ機能がない場合にibsic、ibsre、SendIFC、またはEnableRemoteが呼び出されると発生します。
考えられる原因:GPIBボードがシステムコントローラとして構成されていません。
解決策:
エラー状態:I/O操作が中断されました。
説明:EABOは、I/O操作が何らかの理由でキャンセルされたことを示します。
考えられる原因:EABOエラーは、通常、読み取りまたは書き込み操作中にタイムアウトが発生した場合に発生しますが、I/O操作の実行中にibstop関数、ibclr関数、または同様の関数を呼び出した場合にも発生します。PCIバスマスタ(コンピュータのBIOSでのオプション)が有効になっていないと、PCI-GPIBボードでの書き込み操作中にタイムアウトが起きることがあります。読み取り用のデータが存在している計測器が前のコマンドを認識しなかった場合、その計測器には返すデータがないため、読み取り操作中にタイムアウトが起きることがあります。計測器が応答しない原因はいくつか考えられます。
解決策:
エラー状態:GPIBボードは存在しません。
説明:ENEBは、構成ユーティリティで指定されたI/OアドレスにGPIBボードが存在しないときに発生します。この問題は、ボードがシステムに物理的に接続されていない場合、構成時に指定されたI/Oアドレスが実際のボード設定と一致しない場合、ベースI/Oアドレスでシステムの競合が発生している場合、またはボードのインタフェース名とデバイスに関連付けられているボードのインタフェース名が異なる場合に発生します。
解決策:
エラー状態:データ転送にDMAを使用中にエラーが発生しました。
説明:EDMAは、NI-488.2ドライバがDMAを使ってGPIB経由でデータを転送しようとしたときに、システムDMAエラーが発生した場合に発生します。
解決策:
エラー状態:非同期I/Oの実行中は、関数は使用できません。
説明:EOIPは、非同期I/O処理が終了する前に別のGPIB呼び出しが実行された場合に発生します。ibstop、ibnotify、ibwait、またはibonl関数は、非同期I/O操作中にのみ使用できます。その他のGPIB呼び出しを実行しようとすると、EOIPが返されます。
考えられる原因:非同期I/O中にサポートされていないGPIB関数を呼び出す。
ソリューション:
エラー状態:操作する機能がありません。
説明:ECAPは、GPIBボードで操作を実行できない場合や、呼び出しに必要な機能がソフトウェアで無効にされている場合に発生します。
ソリューション:
エラー状態:ファイルシステムエラーです。
説明:EFSOは、ibrdfまたはibwrtf呼び出しでファイル処理の実行中に問題が発生した場合に設定されます。具体的には、このエラーは関数がアクセス対象ファイルに対して開く、作成、検索、書き込み、または閉じる操作のいずれかができないことを示します。この状態の特定のオペレーティングシステムエラーコードはibcntlに含まれています。
解決策:
エラー状態:コマンドバイト転送エラーです。
説明:EBUSは、デバイス機能中に特定のGPIBバスエラーが発生した場合に設定されます。すべてのデバイス関数は、アドレス指定やその他のバス管理作業を行うためにコマンドバイトを送信します。デバイスは、これらのコマンドバイトをデフォルト構成、またはibtmo関数で指定された制限時間内に受け入れなければなりません。これらのコマンドバイトを送信中にタイムアウトが発生した場合に、EBUSが設定されます。
考えられる原因:GPIBコントローラにGPIBデバイスが接続されていません。これは、すべての計測器の電源がオフになっている、計測器の1つがエラーでハンドシェイクラインをアサートしている、GPIBケーブルがボードから切断されている、またはGPIBケーブルが壊れているなどの原因が考えられます。
解決策:
エラー状態:シリアルポールのステータスバイトが失われました。
説明:ESTBはibrsp関数によってのみ報告されます。ESTBは、自動シリアルポールから受信した1つ以上のシリアルポールステータスバイトが、ストレージスペースの不足により破棄されたことを示します。いくつかの古いステータスバイトを使用できますが、最も古いステータスバイトはibrsp呼び出しによって返されています。
考えられる原因:計測器がSRQラインを繰り返しアサートしています。
解決策:
エラー状態:SRQがONの状態から動きません。
説明:ESRQは、ステータスワード(ibsta)のRSQビットがアサートされた後に返すようにibwait関数を構成したデバイスレベルのibwait呼び出しによってのみ返されます。ESRQは、GPIB SRQラインが固定状態で使用できず、RQSを待機できないことを示します。
考えられる原因:この状況は、ケーブルの問題によりSRQラインがアサートされたままになっている、ソフトウェアが認識していないデバイスがSRQラインをアサートしている - ソフトウェアがこのデバイスを認識していないため、デバイスをシリアルポールしてSRQラインのアサートを解除できない、GPIBバステスタ(または同様の装置)がSRQラインをアサートさせている、などのイベントによって発生する可能性があります。
解決策:
エラー状態:表に問題があります。
説明:ETABは、FindLstnとFindRQS呼び出しの間にのみ発生します。ETABはこれらの関数が使用する表に関して、以下のような問題があることを示します。
考えられる原因:FindLstnの場合は、ETABは、検出されたリスナの全アドレスを保持するための容量がないことを示します。FindRQSの場合は、ETABは、使用されている配列の中のデバイスにサーバを要求しているものがないことを示します。
解決策:
エラー状態:GPIBインタフェースはロックされているためアクセスできません。
考えられる原因:このエラーは、通常、同じインタフェースにアクセスする複数のプロセスがあり、1つのプロセスがすでにインタフェースをロックしている場合に発生します。このエラーは、インタフェースに既存のロックがあるために操作を実行できない場合に返されます。また、そのようなロックがないときにプロセスがインタフェースのロックを解除しようとした場合にも返されます。
ソリューション:
エラー状態: ibnotifyコールバックのリアームに失敗しました。
考えられる原因:このエラーは、NI-488.2アプリケーションで非同期通知(ibnotify)を使用すると発生します。この関数は、1つまたは複数のGPIBイベントの発生を非同期でアプリケーションに通知したい場合に使用します。このイベント通知は、コールバック関数によって行われます。コールバック関数は、ibnotify呼び出しが行われたときにNI-488.2ドライバに登録されます。このエラーは、このコールバック通知が不正な値を返すことによって自身をリアームできなかったか、致命的なドライバエラー (EDVR) が発生したことを示します。
解決策:
エラー状態:入力ハンドルが無効です。
考えられる原因:一部のGPIBコマンドは、ボードまたはデバイスの入力ハンドルを入力パラメータとして取り込み、このエラーの原因となります。このエラーは、いくつかの状況で発生する可能性があります。いくつかのシナリオを次に示します。
解決策:
エラー状態:指定された入力ハンドルは待機中です。
考えられる原因:このエラーは、同じプロセスに複数のスレッドがあり、2つ以上のスレッドが同じインタフェースにアクセスしている場合に発生します。EWIPは、指定されたユニットデスクリプタでibwait呼び出しがすでに進行中であり、スレッドが同じデスクリプタを使用してibwaitをすでに実行しており、別のスレッドが同じデスクリプタでibwaitの呼び出しを試みたときに発生することを示します。
ソリューション:
エラー状態:インタフェースのリセットが原因でイベント通知がキャンセルされました。
考えられる原因:ERSTエラーは、インタフェースのリセットによりイベント通知がキャンセルされたときに返されます。ドライバで待機中のibwait呼び出しは、以下の状況でERSTエラーを返します。
以下の場合には、ibnotifyのコールバック関数がERSTで呼び出される可能性があります。
解決策:
エラー状態:インタフェースの電源が失われました。
考えられる原因:インタフェースへの電力が失われた場合、EPWRとなります。システムがスタンバイ状態になった後、スタンバイ状態から復帰した場合には、しばしばこのような結果となります。
解決策: