GPIBでのスレーブモードでの送受信ではアドレス指定をしないでデータの受信を行います。
使用例:
・送信(リスナに送信し、正常終了の場合に送信数を出力します。) |
long SendLen; char SendBuf[256]; strcpy ( SendBuf, "*IDN?" ); // 送信データ「*IDN?」を設定 SendLen = strlen ( SendBuf ); // 送信データから送信文字数を取得 Ret = GpibSendData ( DevId, &SendLen, SendBuf ); // マスタにデータを送信 if ( Ret == 0 ) Printf ( "%ld\n", SendLen ); // 正常終了した場合は送信文字数を出力
|
・受信(トーカから受信し、正常終了の場合に受信数と受信データを出力します。) |
long RecLen; char RecBuf[256]; RecLen = 256; // 最大受信文字数を256に設定 Ret = GpibRecData ( DevId, &RecLen, RecBuf ); // トーカからデータを取得 if ( Ret == 0 ) { // 正常終了か確認 Printf ( "%ld\n", RecLen ); // 受信文字数を出力 Printf ( "%s\n", RecBuf ); // 受信データを出力 } |
応用例:
マスタからのトーカ・リスナ指定を確認してから送受信動作に入ります。
・送信(リスナに送信し、正常終了の場合に送信数を出力します。) |
long SendLen; char SendBuf[256]; long TAflag; TAflag = 0; // 念のためトーカ指定確認用フラグを初期化 do { Ret = GpibGetStatus ( Id, 0x13, &TAflag); // トーカ指定を確認 if ( Ret != 0 ) break; // 戻り値チェック } while ( TAflag == 0 ); // トーカ指定されるまでループ if (TAflag == 1 ) { // トーカ指定された場合送信を実行 strcpy ( SendBuf, "*IDN?" ); // 送信データ「*IDN?」を設定 SendLen = strlen ( SendBuf ); // 送信データから送信文字数を取得 Ret = GpibSendData ( DevId, &SendLen, SendBuf ); // マスタにデータを送信 if ( Ret == 0 ) Printf ( "%ld\n", SendLen ); // 正常終了した場合は送信文字数を出力 } |
・受信(トーカから受信し、正常終了の場合に受信数と受信データを出力します。) |
long RecLen; char RecBuf[256]; long LAflag; LAflag = 0; // 念のためリスナ指定確認用フラグを初期化 do { Ret = GpibGetStatus ( Id, 0x14, &LAflag); // リスナ指定を確認 if ( Ret != 0 ) break; // 戻り値チェック } while ( LAflag == 0 ); // リスナ指定されるまでループ if (LAflag == 1 ) { // リスナ指定された場合送信を実行 RecLen = 256; // 最大受信文字数を256に設定 Ret = GpibRecData ( DevId, &RecLen, RecBuf ); // トーカからデータを取得 if ( Ret == 0 ) { // 正常終了か確認 Printf ( "%ld\n", RecLen ); // 受信文字数を出力 Printf ( "%s\n", RecBuf ); // 受信データを出力 } |
備考:
通常初期状態でアドレス設定なしになっているため以下のコードは必要ないですが、もしアドレス設定を行った場合は送受信関数を実行する前に以下のコードを必ず入力しアドレス情報を設定なしにしてください。
short Talker, ListenerArray[15]; Talker = -1; ListenerArray[0] = -1; Ret = GpibSetAddrInfo ( DevId, Talker, ListenerArray ); |