GPIBのシリアルポール機能を利用して相手機器のステータスバイトを取得します。
イクウィップメントIDを使用していて指定相手機器からのステータスバイトを取得しする場合はGpibSPoll関数を使用してください。
複数の相手機器のステータスバイトを取得する場合はデバイスIDを使用しGpibSPollAll関数で取得してください。
使用例:
○イクウィップメントIDを使用時 |
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出力機器がない場合メッセージを表示 } } |
応用例:
○イクウィップメントIDを使用時 |
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の状態を出力 } } |