シリアルポール処理


GPIBのシリアルポール機能を利用して相手機器のステータスバイトを取得します。

イクウィップメントIDを使用していて指定相手機器からのステータスバイトを取得しする場合はGpibSPoll関数を使用してください。
複数の相手機器のステータスバイトを取得する場合はデバイスIDを使用しGpibSPollAll関数で取得してください。

使用例:

イクウィップメントIDを使用時

・単数(指定したEqpIDスレーブ機器にシリアルポールを実行します。)

short Stb, Srq;

        Ret = GpibSPolll ( EqpId, &Stb, &Srq );                // 指定したイクウィップメントIDの機器のステータスバイトを取得

        if ( Ret == 0 ) {                                               // 正常終了か確認

            Printf ( "%ld\n", Stb );                          // ステータスバイトを出力

            Printf ( "%ld\n", Srq );                           // SRQの状態を出力

        }

デバイスIDを使用時

・複数(アドレス1のスレーブ機器アドレス2のスレーブ機器にシリアルポールを実行し、正常終了の場合にSRQを発見したアドレスとステータスバイトを出力します。)

short AddrArray[15], StbArray[15], SrqArray[15], i, k;

 

        AddrArray[0] = 1;                                                       // アドレス1を設定

        AddrArray[1] = 2;                                                       // アドレス2を設定

        AddrArray[2] = -1;                                                     // 終端「-1」を指定(配列の最後には必ず入力してください

        Ret = GpibSPollAll ( DevId, AddrArray, StbArray, SrqArray );  // 指定したアドレスの機器のステータスバイトを取得

        if ( Ret == 0 ) {                                                          // 正常終了か確認

            i = 0;                                                                    // 配列番号指定変数を初期化

            k = 0;                                                                   // SRQ送信機器数用変数を初期化

            while ( AddrArray[i] != -1 ) {                                    // アドレス指定が終端になるまで繰り返し

                if ( SrqArray [i] != 0 ) {                                        // SRQを出力している機器か確認

                    Printf ( "%ld\n", AddrArray[i] );                       // 相手機器アドレスを出力

                    Printf ( "%ld\n", StbArray[i] );                         // ステータスバイトを出力

                    k++;                                                             // SRQ出力機器数をカウントアップ

                }

                i++;                                                                // 配列番号をカウントアップ

            }

            if ( k == 0) Printf ( "No SRQ\n" );                          // SRQ出力機器がない場合メッセージを表示

            }

        }

 

応用例:

SRQの受信を確認してからシリアルポールを実行します。

イクウィップメントIDを使用時

・単数(指定したEqpIDスレーブ機器にシリアルポールを実行します。)

short Stb, Srq;

long SRQflag;

        SRQflag = 0;                                                      // 念のためSRQ確認用フラグを初期化

        do {

            Ret = GpibGetStatus ( Id, 0x12, &SRQflag);        // SRQ指定を確認

            if ( Ret != 0 ) break;                                         // 戻り値チェック

       } while ( SRQflag == 0 );                                       // SRQ指定されるまでループ

        if ( SRQflag == 1 ) {                                             // SRQ指定されたか確認

            Ret = GpibSPoll ( EqpId, &Stb, &Srq );                // 指定したイクウィップメントIDの機器のステータスバイトを取得

            if ( Ret == 0 ) {                                               // 正常終了か確認

                Printf ( "%ld\n", Stb );                          // ステータスバイトを出力

                Printf ( "%ld\n", Srq );                           // SRQの状態を出力

            }

        }