失敗したNI-488コールのエラー情報を得る方法

NI-488.2

失敗したNI-488.2コールのエラー情報を得る方法

各NI-488.2コールは、使用しているデバイスまたはボードのステータスを反映するため、3つのグローバル関数を更新します。これらのグローバルステータス関数は、ステータスワード(Ibsta)、エラー関数(Iberr)、カウント関数(Ibcnt)です。これらの変数には、任意のプロセスで最後に実行されたNI-488.2コールに関する情報が含まれています。アプリケーションでは、各NI-488.2コール後にこれらの変数を確認する必要があります。各ステータス変数の詳細については、下記のセクションを参照してください。

マルチスレッドアプリケーションを作成している場合は、各スレッド用のステータス関数のコピーを使用してください。各スレッド用のステータス変数のコピーにアクセスするには、ThreadIbstaThreadIberrThreadIbcntを使用します。

ステータスワード(Ibsta)

IbstaはGPIBステータスワードです。ibstaには、GPIBとGPIBハードウェアの状態に関する情報が含まれています。Ibstaに保存されている値は、ibfindibdevを除き、すべて従来のNI-488.2コールからの戻り値です。Ibstaで各ステータスビットを調べて、その情報に基づき、アプリケーションで次に何を行うかを判断することができます。Ibstaのステータスビットについての詳細は、Ibstaステータスビット値の表を参照してください。

各NI-488.2コール後にエラーをチェックするには、以下のようにIbstaERRビットを使います。

if (Ibsta() & ERR)

printf("GPIBエラーが発生しました");

エラー関数(Ibsta)

IberrはGPIBエラー変数です。呼び出しでエラーが発生した場合は、IbstaERRビットが設定されます。Iberr値によって、発生したGPIBエラーの内容が示されます。Iberrの値についての詳細は、エラーコードと解決策の表を参照してください。

カウント関数(Ibcnt)

Ibcntはカウント関数です。カウント関数には、最新のI/O処理においてGPIB経由で転送されたバイト数に関する情報が含まれます。

カウント関数は、ibrdibwrtSendListSendCmdsなどのすべてのI/O操作が行われた後に更新されます。データを読み取っている場合、カウント関数は読み取られたバイト数を示します。データやコマンドを送信する場合、カウント変数は送信されたデータやコマンドバイト数を反映します。

読み取りデータにASCII文字が含まれている場合は、Ibcntを使用して文字列をNULLで終了し、他のASCII文字列と同様に取り扱うことができます。たとえば、次に示すように、printfを使って結果を画面に表示することができます。

char rdbuf[21];

ibrd (ud, rdbuf, 20);

if (!(Ibsta() & ERR)){

rdbuf[Ibcnt()] = '\0';

printf ("Read in string: %s\n", rdbuf);

}

else {

// GPIBにエラーが発生!

}

また、Ibcntは、EDVR のエラーコードなど、非I/O関数からの情報を返します。


「よくある質問(FAQ)」に戻る