Archived: GPIBを介したコンピュータ間通信について

This document has been archived and is no longer updated by National Instruments



使用ソフトウェア: Driver Software>>NI-488.2
使用ソフトウェア・バージョン: N/A
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: N/A

問題: GPIBを用いてコンピュータ間で通信を行うには、どのように設定を行えばよいですか?

解決策:


以下の手順は、GPIBを用いてコンピュータ間通信を行うガイドラインです。基本的な操作ステップを下記に示します。

1. 両方のコンピュータにあるGPIBはデフォルト設定にします(必要な設定はプログラム上で行っていきます)。

2. 片方のコンピュータを”コントローラ”、もう片方を”非コントローラ”とします(何も設定を変える必要はありません)。

3. このステップではコマンドをテストする為に、対話式制御ユーティリティ(IBIC)を使用します。後にプログラム内に、これらのコマンドを使用することも可能です。

”非コントローラ”側のコンピュータでの操作:
a. ”ibfind gpib0”を用いてGPIBボードへのセッションを開始をします。
b. ”ibrsc”を用いてシステムコントローラを解除します(この操作で”非コントローラ”に設定します)。
c. ”ibpad 1”にて非コントローラのGPIB一次アドレスを0から1に変更します。
d. ATNがアサートされていないか確認して下さい。コンピュータはリスナーとしてアドレスされます(LACSはステータスワード内で正になります)。--これを定期的に確認するループも作成可能です。
e. ”ibrd #”を使用して(#は受領されるバイト数)、コントローラからの送信されたコマンドを読み込みます。

非コントローラがリスナーになるまで(コントローラがデータを送信)、ループ内でこのステップを実行できます。その後、メッセージを読み込むステップを実行できます。同じように書き込みにもこの手順を使用できますが、リスナーへ通信したか確認する為に待ち状態でいるよりも、トーカーへ通信したかを待ち状態で確認した方がよいでしょう(TACSはステータスワードで正になります)。

以下は、これらの操作を行うC言語で作成されたサンプルソースコードです。

static int noncontroller;
static char buffer[100];
static int panelHandle;
int main () {
noncontroller = ibfind ("gpib0"); // Open a session to the GPIB board
ibrsc (noncontroller, 0); // Release system control
ibpad (noncontroller, 1); // Change primary address from 0 to 1

while (1) {
ibwait (noncontroller, 0); // Update Status variable
if ((ibsta&LACS)&&(!(ibsta&ATN))) // Wait until non-controller is listener and ATN line is dropped.
{
ibrd (noncontroller, buffer, 100); // Read data bytes
buffer[ibcnt] = '\n'; // Add linefeed and 0 to string.
buffer[ibcnt + 1] = 0;
printf ("%s",buffer); //print buffer
return 0;
}// if

if ((ibsta&TACS)&&(!(ibsta&ATN))) // If addressed to talk, send the response "I am a talker"
{
ibwrt (noncontroller, "I am a talker", strlen("I am a talker")); // Send data across the bus.
return 0;
} // if

} // while

return 0;
} // main

コントローラ側のコンピュータで、プライマリ(一次)アドレス1の計測器と通信を行うための設定を行います(上記の ibpad コマンドで、非コントローラのアドレスが1と設定されています)。例えば、対話式制御(IBIC)上で、下記のようにコマンドを入力していきます。
1. ”ibfind gpib0”を用いてGPIBボードへのセッションを開始をします。
2. ”ibsic” を用いてバスへインターフェースクリアメッセージを送信します。
3. ”ibsre 1”を用いて接続されている計測器をリモートモードにする。
4. ”ibdev 0 1 0 13 1 0”を用いて非コントローラへセッションを開始します。
5. ”ibwrt "HELLO"”を用いて文字列データ(この場合、HELLOという言葉)を非コントローラへ送信します。

より詳しいGPIB関数やステータスワードについての情報は、下記の関連リンク先をご参照下さい。



関連リンク: NI-488.2 User Manual for Windows
NI-488.2 Function Reference Manual for Windows

添付:





報告日時: 06/09/2000
最終更新日: 09/02/2006
ドキュメントID: 1Y88LTEE