失敗したNI-488.2コールのエラー情報を得る方法
各NI-488.2コールは、使用しているデバイスまたはボードのステータスを反映するため、3つのグローバル関数を更新します。これらのグローバルステータス関数は、ステータスワード(Ibsta)、エラー関数(Iberr)、カウント関数(Ibcnt)です。これらの変数には、任意のプロセスで最後に実行されたNI-488.2コールに関する情報が含まれています。アプリケーションでは、各NI-488.2コール後にこれらの変数を確認する必要があります。各ステータス変数の詳細については、下記のセクションを参照してください。
マルチスレッドアプリケーションを作成している場合は、各スレッド用のステータス関数のコピーを使用してください。各スレッド用のステータス変数のコピーにアクセスするには、ThreadIbsta、ThreadIberr、ThreadIbcntを使用します。
ステータスワード(Ibsta)
IbstaはGPIBステータスワードです。ibstaには、GPIBとGPIBハードウェアの状態に関する情報が含まれています。Ibstaに保存されている値は、ibfindとibdevを除き、すべて従来のNI-488.2コールからの戻り値です。Ibstaで各ステータスビットを調べて、その情報に基づき、アプリケーションで次に何を行うかを判断することができます。Ibstaのステータスビットについての詳細は、Ibstaステータスビット値の表を参照してください。
各NI-488.2コール後にエラーをチェックするには、以下のようにIbstaのERRビットを使います。
if (Ibsta() & ERR)
printf("GPIBエラーが発生しました");
エラー関数(Ibsta)
IberrはGPIBエラー変数です。呼び出しでエラーが発生した場合は、IbstaにERRビットが設定されます。Iberr値によって、発生したGPIBエラーの内容が示されます。Iberrの値についての詳細は、エラーコードと解決策の表を参照してください。
カウント関数(Ibcnt)
Ibcntはカウント関数です。カウント関数には、最新のI/O処理においてGPIB経由で転送されたバイト数に関する情報が含まれます。
カウント関数は、ibrd、ibwrt、SendList、SendCmdsなどのすべての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)」に戻る |