GpibNotify

NI-488.2

GpibNotify

ボードレベル/デバイスレベル


目的

ユーザのコールバックを呼び出して、1つまたは複数のGPIBイベントをユーザに通知します。GpibNotifyはOLEコントロールです。

GpibNotify OLEコントロールの形式

Visual Basic

status& = GpibNotify<x>.SetupNotify ud%, mask%

ここで、<x>GpibNotify OLEコントロールのインスタンスです。

対話式制御

サポートされていません。

GpibNotify OLEコントロールの入力

ud ボードまたはデバイスデスクリプタ
mask 通知するGPIBイベントのビットマスク

maskパラメータはオプションです。マスク値を設定するには、SetSetupMask方式を使用したり、GpibNotifyコントロールプロパティのSetupMaskページの値を変更する方法もあります。

GpibNotify OLEコントロールの出力

関数からの戻り値 Ibstaの値

GpibNotify OLEコントロールの説明

maskが0以外の値の場合、GpibNotifymaskが指定したイベントを監視し、1つまたは複数のイベントがTRUEであれば、指定のCallbackを呼び出します。ボードレベルのGpibNotifyコールでは、ERRとRQS以外のすべてのマスクビットが有効です。デバイスレベルのGpibNotifyコールでは、有効なマスクビットはCMPL、TIMO、END、およびRQSのみです。

メモ 1つ以上のmaskビットの状態がTRUEの場合に、通知が実行されます。 CMPLがTRUEの時に通知をするように要求すると、現在CMPLがTRUEである場合、直ちにCallbackが呼び出されます。

デバイスレベルの使用では、自動シリアルポーリングが無効に設定されている場合、RQSの通知が正しく機能しない場合があります。デフォルトで、自動シリアルポーリングは有効になっています。

所定のudに対して有効なGpibNotifyコールは、一度につき1つだけです。現行のGpibNotifyudに対して有効な場合、これは後続のGpibNotifyコールで置き替えられます。udに対して有効なGpibNotifyコールは、maskが0に指定されたudに対する後続のGpibNotifyコールによって取り消されます。

GpibNotifyコールが有効で、1つまたは複数の待機しているGPIBイベントの状態がTRUEになると、Callbackが呼び出されます。

メモ SetupNotifyをコールした後、NI-488.2グローバルステータス関数IbstaIberrIbcnt)が未定義になります。代わりに、スレッド特定のNI-488.2ステータス変数コール(ThreadIbsta()ThreadIberr()Threadibcnt())を使用して、SetupNotifyコールによって返されたNI-488.2ステータス変数を調べてください。この制限は、SetupNotifyコールにのみ適用されます。 その他のNI-488.2コールでは、引き続きIbstaIberrIbcntを参照することができます。

Callbackが実行される前にGpibNotifyコントロールを破棄すると、Visual Basicは予期しない動作をします。このため、コントロールが破棄される前に0のマスクでSetupNotifyをコールして、未実行のCallbacksを取り消してください。さらに、Sleep 0コールを実行してコントロールを破棄する前に、アプリケーションはブロックされているCallbackスレッドに実行する機会を与えるようにします。

GpibNotify OLEコントロールのコールバックプロトタイプ

Private Sub GpibNotify<x>_Notify(ByVal LocalUd As Long,
ByVal LocalIbsta As Long, ByVal LocalIberr As Long,
ByVal LocalIbcnt As Long, RearmMask As Long)

<x>は、Notifyコールバックルーチンのインスタンスです。各GpibNotifyコールには独自のCallbackルーチンを持ちます。

コールバックパラメータ

LocalUd ボードまたはデバイスデスクリプタ
LocalIbsta Ibstaの値
LocalIberr Iberrの値
LocalIbcnt Ibcntの値
RearmMask 次に通知するGPIBイベントのビットマスク

Callback関数は、GpibNotify以外のNI-488.2コールのすべてを実行できます。Callbackが呼び出されると、NI-488.2グローバル関数IbstaIberrIbcnt)の値が未定義になります。Callbackが呼び出された理由を判断するには、NI-488.2グローバル関数ではなく、Callbackに渡されたステータス変数を調べます。1つ以上の要求されたmaskビットの設定が原因なのではなく、エラー状況によりCallbackが呼び出された可能性があることに注意してください。

RearmMaskは、非同期イベント通知メカニズムを自動的に再登録するためにNI-488.2ソフトウェアが使用するマスク値として解釈されます。RearmMaskが0に設定されている場合、Callbackは再登録されません。RearmMaskが0以外の値に設定されている場合、CallbackRearmMaskの値で再登録されます。エラーのためCallbackの再登録に失敗した場合には、Callbackは、ERRが設定されたLocalIbstaEARMが設定されたLocalIberrとともに呼び出されます。

ibwaitibstop、およびibonlと同様、非同期I/O処理が完了した後、GpibNotify Callbackを呼び出してハンドラを再同期化することができます。この場合、I/O処理が完了した後でCallbackに渡されるグローバル変数には、I/O処理のステータスが含まれます。

NI-488.2アプリケーションでの非同期イベント通知の概要については、非同期イベント通知の項を参照してください。使用法についての詳細は、GpibNotifyの使用方法の項を参照してください。

GpibNotify OLEコントロールで発生する可能性のあるエラー

EARG maskに設定されたビットが無効です。
ECAP GpibNotifyGpibNotify Callback関数内から呼び出されたか、ハンドラが1つ以上指定されたmaskビットについて通知を実行できません。
EDVR NI-488.2ドライバの構成またはインストールが正しくありません。Ibcntには、システム依存エラーコードが含まれます。
ENEB インタフェースが取り付けられていないか、正しく構成されていません。

GpibNotify OLEコントロールのコールバックで発生する可能性のあるエラー

EARM GpibNotify OLEコントロールがCallbackを再登録できませんでした。

関連項目:

ibnotify

ibnotifyの使用

ibnotifyの使用例