各NI-488.2コール後のグローバルステータス変数をチェックする

NI-488.2

各NI-488.2コール後のグローバルステータス変数をチェックする

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

古いGPIB32 API(Visual Basic 6.0アプリケーションインタフェースを含む)にアクセスするアプリケーションでは、同等のグローバル変数を使用します。具体的には、ステータスワード(ibsta)、エラー変数(iberr)、カウント変数ibcntibcntlです。ibcntはタイプintとなり、ibcntlはタイプlong intのサイズとなるよう定義されています。すべてのケースにおいて、ibcntibcntlのサイズが同じなら、ibcntibcntlは等しいことになります。異なるプラットフォーム間の互換性を保つには、すべてのアプリケーションでibcntlを使います。

新しいNI4882 APIにアクセスするアプリケーションでは、グローバル関数コールを使用します。新しいNI4882 APIでは、グローバル変数の代わりにグローバル関数が使用されます。

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

ステータスワード(Ibsta)

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

インストールされている言語ヘッダファイルに、各Ibstaステータスビットが定義されています。ビット毎のAND演算子(C/C++では&)を使って、Ibstaステータスビットの設定値をテストできます。たとえば、Ibsta ERRビットは、Ibstaのビット15です。GPIBエラーをチェックするには、各GPIB呼び出し後に以下のステートメントを実行します。

if (Ibsta() & ERR)

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

エラー関数(Ibsta)

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

カウント関数(Ibcnt)

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

カウント変数は、各読み取り、書き込み、コマンド関数の後で更新されます。またIbcntは、特定の488.2関数で特定のエラーが発生したときに更新されます。

読み取りデータに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にエラーが発生!

}