シリアルポール処理


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;                           // 戻り値チェック

    sleep(10);

} 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の状態を出力

    }

}