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以外の値の場合、GpibNotifyはmaskが指定したイベントを監視し、1つまたは複数のイベントがTRUEであれば、指定のCallbackを呼び出します。ボードレベルのGpibNotifyコールでは、ERRとRQS以外のすべてのマスクビットが有効です。デバイスレベルのGpibNotifyコールでは、有効なマスクビットはCMPL、TIMO、END、およびRQSのみです。
![]() |
メモ 1つ以上のmaskビットの状態がTRUEの場合に、通知が実行されます。 CMPLがTRUEの時に通知をするように要求すると、現在CMPLがTRUEである場合、直ちにCallbackが呼び出されます。 |
デバイスレベルの使用では、自動シリアルポーリングが無効に設定されている場合、RQSの通知が正しく機能しない場合があります。デフォルトで、自動シリアルポーリングは有効になっています。
所定のudに対して有効なGpibNotifyコールは、一度につき1つだけです。現行のGpibNotifyがudに対して有効な場合、これは後続のGpibNotifyコールで置き替えられます。udに対して有効なGpibNotifyコールは、maskが0に指定されたudに対する後続のGpibNotifyコールによって取り消されます。
GpibNotifyコールが有効で、1つまたは複数の待機しているGPIBイベントの状態がTRUEになると、Callbackが呼び出されます。
![]() |
メモ SetupNotifyをコールした後、NI-488.2グローバルステータス関数(Ibsta、Iberr、Ibcnt)が未定義になります。代わりに、スレッド特定のNI-488.2ステータス変数コール(ThreadIbsta()、ThreadIberr()、Threadibcnt())を使用して、SetupNotifyコールによって返されたNI-488.2ステータス変数を調べてください。この制限は、SetupNotifyコールにのみ適用されます。 その他のNI-488.2コールでは、引き続きIbsta、Iberr、Ibcntを参照することができます。 |
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グローバル関数(Ibsta、Iberr、Ibcnt)の値が未定義になります。Callbackが呼び出された理由を判断するには、NI-488.2グローバル関数ではなく、Callbackに渡されたステータス変数を調べます。1つ以上の要求されたmaskビットの設定が原因なのではなく、エラー状況によりCallbackが呼び出された可能性があることに注意してください。
RearmMaskは、非同期イベント通知メカニズムを自動的に再登録するためにNI-488.2ソフトウェアが使用するマスク値として解釈されます。RearmMaskが0に設定されている場合、Callbackは再登録されません。RearmMaskが0以外の値に設定されている場合、CallbackはRearmMaskの値で再登録されます。エラーのためCallbackの再登録に失敗した場合には、Callbackは、ERRが設定されたLocalIbstaやEARMが設定されたLocalIberrとともに呼び出されます。
ibwait、ibstop、およびibonlと同様、非同期I/O処理が完了した後、GpibNotify Callbackを呼び出してハンドラを再同期化することができます。この場合、I/O処理が完了した後でCallbackに渡されるグローバル変数には、I/O処理のステータスが含まれます。
NI-488.2アプリケーションでの非同期イベント通知の概要については、非同期イベント通知の項を参照してください。使用法についての詳細は、GpibNotifyの使用方法の項を参照してください。
GpibNotify OLEコントロールで発生する可能性のあるエラー
EARG | maskに設定されたビットが無効です。 |
ECAP | GpibNotifyがGpibNotify Callback関数内から呼び出されたか、ハンドラが1つ以上指定されたmaskビットについて通知を実行できません。 |
EDVR | NI-488.2ドライバの構成またはインストールが正しくありません。Ibcntには、システム依存エラーコードが含まれます。 |
ENEB | インタフェースが取り付けられていないか、正しく構成されていません。 |
GpibNotify OLEコントロールのコールバックで発生する可能性のあるエラー
EARM | GpibNotify OLEコントロールがCallbackを再登録できませんでした。 |
関連項目: