GPIB システム の概要

GPIB は、当初 Hewlett-Packerd 社で HP-IB (Hewlette-Packerd Interface Bus) と いう計測システムの標準インタフェースとして開発され、後に IEEE488 規格になった、 汎用のインタフェースです。8 ビットの並列伝送を完全なハンドシェイクで行うため、 比較的高速で、いろいろな速度のデバイスを同時に収容することができ、コンピュー タの1つのポート(コネクタ)にたくさんのデバイスをつなぐことができるのが利点 で、当初の意図である、計測システムを越えて、多くのシステムで利用されるように なりました。GPIB (General Purpose Interface Bus) は正式な名称ではありませんが、 Hewlette-Packerd 社の開発当時の名前だったようで、後に広く使われるようになりま した。

1. 概念

GPIB システムは GPIB ケ―ブルで接続された 15 台以下のデバイスの集合です。接続に使 うケーブルの長さは、デバイス1台あたり2m、最大20mが目安ですが、ノイズマ ージンの低下を覚悟すれば、もっと長くすることも可能で、50m程度で何年も稼働 しているケースもあります。GPIB ケ―ブル はこのバス接続専用に設計されたもので、 その両端に雄雌が裏表になった「piggy back」と呼ばれるコネクタが付いていて、 数珠つなぎに必要なデバイスをつないでゆくだけで、システムをまとめることができ ます。このケーブルでまとめられたデバイスの中の1台がシステムをリセットして、 制御を開始する権限を持ち、これが「システムコントローラ」(system controller) と呼ばれます。そのコントローラが、各デバイスをクリアしたり、トリガをかけたり、 「リスナ」(listner - 聞き手) に指定してデータを受信させたり、「トーカ」(talker - 話し手) に指定してデータを出力させたりします。すべての権限は、議長である 「コントローラ」にありますが、他のデバイスは、SRQ (service request) を出して、 コントローラの注意をひくことができます。また、コントローラは、他のデバイスに コントローラの権限を譲ることができます。そうして、新しくコントローラになった デバイスは、「アクティブコントローラ」(active controller) と呼ばれます。制御 権を譲った旧コントローラは、普通のデバイスとして振る舞います。

GPIB に接続するデバイスは、それぞれ固有のアドレス(識別用の名前)を持ち、これ は普通、ケース背面の DIP スイッチでセットしますが、不揮発性メモリに記憶させた り、プログラムで設定するものもあります。これらのアドレスは、 0 から 30 までの 間で、重複しないように割当なければなりません。ただし、同種のデバイスのいくつ かにまったく同じ動作をさせるときは、同じにしてかまいません。

GPIB ケ―ブルには、次のような信号線と7本の GND (Ground - 信号帰線)があります。

 IFC (interface cear) - インタフェースをクリアするための信号
 ATN (attention) - コントローラがコマンドを送るための信号
 REN (remote enable) - デバイスをリモート/ローカル切り替え制御のための信号
 SRQ (service request) - 制御されるデバイスがコントローラに注意を促すための信号
 DIO (data I/O) - データを受け渡しするための8本の信号
 EOI (end or identify) - データの終わりないし、SRQ チェックのための信号
 NRFD (not ready for data) - データの受け手が受信準備の終了を知らせるための信号
 NDAC (not data accepted) - データの受け手が受信完了を知らせるための信号
 DAV (data vald) - データの送り手がデータの準備完了を知らせるための信号
NRFD, NDAC, DAV の3つは、DIO1 から DIO8 の8本のデータ線を使って、すべての デバイスに漏れなく信号を送るためのもので、通常ハードウェアが直接操作しますか ら、プログラマが気にする必要はありません。しかし、GPIB の本質は、この3線式 ハンドシェイクにあり、これが Hewlette-Packerd 社の特許でした。初期状態では、 DAV (data valid - データ有効) は false、NRFD (not ready for data - データ受信 不可) と NDAC (not data accepted - データ受信不完了) は true です。「トーカ」 (talker)と呼ばれるデータの送り手は、NRFD が false になると、1バイトのデータ を DIO1 - DIO8 にのせて DAV を true にし、NDAC が false になると、DAV を false にして、そのデータをクリアし、次のデータ出力の用意をします。「リスナ」 (listner) と呼ばれるデータの受け手は、受信の用意ができると NRFD を false にし、 DAV が true になったところで DIO1 から DIO8 のデータバイトを読みとり、読み終 わったら NDAC を false にして、その後 DAV が false になったところで NDAC を true にします。NRFD と NDAC のハードウェアは、トランジスタたの Wired-OR 回路 を使って、すべてのリスナが false にするまで true のままになっているように設計 されているため、データの転送は最も遅いデバイスに合わせて進むことになり、この伝 送方式が GPIB の特徴です。NRFD と NDAC のふたつは、リスナが存在する限り、同時 に false にならないことに注意してください。電気的には、true は 0V、false は 3.4V 程度の電位です。

GPIB システムに接続されたデバイスのうちの一つが、「(システム)コントローラ」 (controller)と呼ばれ、すべての制御権を持ち、次の4種の仕事を行います。

 1) IFC (Interface Clear) を出力して、バスをクリア(リセット)する。
 2) 自分を含む、デバイスを「リスナ (Listener)」に指定して、データを受信させる。
 3) 自分を含む、デバイスを「トーカ (Talker)」に指定して、データを送信させる。
 4) REN (Remore Enable) 線その他を使って、他のいくつかの制御を行う。
コントローラ以外のデバイスは、次のいずれかしかできません。
 1) コントローラからリスナに指定されたら、データを受信する。
 2) コントローラからトーカに指定されたら、データを送信する。
 3) コントローラの注意を引くため、SRQ (Service Request) 線を制御する。
 4) コントローラからの、その他いくつかのコマンド(命令)に従う。
「その他いくつかのコマンド」については、後述しますが、デバイスのすべてがそれ らのコマンドに応答するとは限りません。一部の機能しか持たないものも、たくさん あります。

2. GPIB のメッセージ

GPIB で転送される情報(メッセージ)には、つぎのような種類があります。

2.1. 単線メッセージ

ATN, EOI, SRQ, REN の4つの信号線は単線メッセージ (uniline message) と呼ばれ、 コントローラが、次の目的に使います。

2.2. 複線メッセージ

コントローラは、ATN を True にした状態で DIO 線を使って各種のコマンドを送りま すが、これが複線メッセージ (Multi line message) です。複線メッセージには、その 時点におけるリスナにしか有効でない「アドレストコマンド」(addressed command) と、すべてのデバイスに有効な「ユニバーサルコマンド」(universal command)、その 補助として使われる「2次コマンド」、デバイスを指名する「アドレス」、その補助 としてつかわれる「2次アドレス」、デバイスの状況を報告する「ステイタス」、 転送される「データ」等の種類があり、その内容は次のとおりです。

3. GPIB の動作

以下、プログラマに必要な GPIB の動作を解説します。

3.1. バスの初期化

(システム)コントローラは、最初に IFC を出力して、バスを初期化しなければなり ません。これは、IFC 線を 1uS 以上 true にするという動作です。これで、バス上の すべてのデバイスは、コントローラの制御に従うようになります。ただし、SRQ を出 しているデバイスに、それをクリアさせることはできません。

3.2. リモート/ローカル切り替え

GPIB 上のデバイスには、それぞれのパネルからの手動操作にしたがう「ローカル」 状態と、コントローラからの制御に従う「リモート」状態のふたつがあります。コン トローラが REN を true にして、LAD_n (リスナアドレス n) コマンドを送ると、リスナに 指定されたデバイスは、リモート状態に移行します。ほとんどのデバイスでは、最初に なんらかのデバイス固有コマンドを送る必要がありますから、わざわざリモート状態 にするための操作を必要としませんが、トーカとして機能するだけのデバイスでは、 最初に UNL, LAD_n のシーケンスでリモート状態にする制御を必要とすることがあり ます。

リモート状態のデバイスをローカル状態にもどす方法は、次の3つです。

 1) GTL コマンドを送る
 2) REN を false にする
 3) デバイスのパネルにある「ローカル釦」を押す
GTL (go to local) コマンドは、その時点でリスナに指定されているデバイスを、ロ ーカル状態にもどします。通常、UNL, LAD_n, GTL のシーケンスで使います。選択的 にローカルに戻すのに使います。REN を false にする方法では、すべてのデバイス がローカルになります。長期間連続した測定や制御では、うっかり「ローカル釦」に さわったりすると困りますから、ローカル操作を禁止するコマンドがあって、それが LLO コマンドです。LLO (local lock out) コマンドは、すべてのデバイスのローカル 操作を禁止します。これを解除する方法は、REN を false にすることしかありません。

3.3. データ転送

コントローラは、ATN を true にして、UNL, LAD_n, TAD_n の順にコマンドを送りま す。LAD_n (リスナアドレス n) は複数指定してもかまいません。最初の UNL ですべてのリ スナを解除し、その後必要なデバイスをリスナに指定して、最後にトーカを一つ指定 します。バス上にトーカがふたつ以上存在すると、データが衝突しますから、既にト ーカに指定されているデバイスは、他のデバイスがトーカに指定されると、自分はト ーカから外れる規則になっています。そのため、UNT コマンドは滅多に必要になりま せん。これらのコマンドを送り出した後、コントローラは ATN を false にします。 トーカに指定されたデバイスは、ATN が fasle になるとデータ出力を開始します。 データの最後は、次のいずれかによって指示します。

 1) デリミタ (delimiter) (区切り)文字を使用する方法
 
 	通常、ASCII 文字の CR+LF, CR, LF のいずれかが使われます。 
 
 2) END メッセージを使用する方法
 
 	最後のデータバイトを DIO 線にのせるとき、一緒に EOI も true にします。
 
 2) バイトカウント方式
 
 	送り手と受け手で前もって決められたバイト数だけのデータを出力します。
END メッセージを使用する方法が一番確実ですが、HP-IB 時代にはなく、IEE488 で 追加された方法のため、Hewlette-Packerd 社のコントローラや昔のデバイスでは使わ れていません。この類のデバイスでは、END を使用すると、ハングアップするものも ありますので、変な現象にぶつかったら、END のデリミタをやめてみてください。

以上の制御に使われるコマンドのビット構成は、次のとおりです。

 X 0 1 1 1 1 1 1	UNL
 X 1 0 1 1 1 1 1	UNT
 X 0 1 A A A A A	リスナアドレス n
 X 1 0 A A A A A	トーカアドレス n
X は「don't care bit」と呼ばれて、0 でも 1 でもかまいません。受け取る方は無視 します。「A A A A A」には、そのアドレスの2進値を入れます。例えば、リスナアド レス 23 なら、次のようになります。
 X 0 1 1 0 1 1 1
UNL がリスナアドレス 31、UNT がトーカアドレス 31 になっていることに注意して ください。デバイスのアドレスに 0 から 30 までしか使えないのは、このためです。

3.4. シリアルポール

制御権を有するのはコントローラだけですから、その他のデバイスは、コントローラ に何かしてほしいときは、SRQ を true にして、サービスを要求します。SRQ は複数 のデバイスが出している可能性がありますから、コントローラはその出所を突き止め なければなりません。シリアルポール (serial poll) と呼ばれる技法がその手段です。 1台づつ順にポーリング(点呼)してゆくのが、名前の起源です。SRQ を出すタイミ ングは、測定完了時とか、エラー発生時とか、次の制御を要求する時等、デバイスに よっていろいろです。SRQ を使わないデバイスもあります。

コントローラは、ATN true で、SPE, TAD_n を送ります。SPE (serial poll enable) コマンドは、すべてのデバイスにシリアルポールの開始を伝えるコマンドで、これを 受け取ったデバイスは、トーカに指定されたとき、通常のデータでなく、STB (status byte -ステイタスバイト) と呼ばれる、1バイトの特別な情報を送ります。その内容 は、次のとおりです。

 S X S S S S S S
   |
   +-------------- SRQ を出してると 1、出していなければ 0
STB の 2 ^ 6 ビットを見ると、SRQ を出しているかどうかがわかります。S ビットは デバイス固有の情報です。コントローラは STB を読んだら、UNT, SPD を出力して、 シリアルポールを終了し、シリアルポールに応答したデバイスは、STB を出力したら SRQ を false にします。つまり、シリアルポールは、SRQ の出所を突き止めると共に、 SRQ をクリアさせる設計になっています。

3.5. デバイスのリセット

コントローラが、GPIB システム に収容されたデバイスをリセットする方法は、ふたつあ ります。ひとつは、DCL (device clear) コマンドをだす方法で、これはすべてのデバ イスを同時にクリアします。もうひとつは、SDC (selected device clear) を使う方法 で、こちらは、その時リスナに指定されたデバイスだけを選択的にクリアします。後者 を使うときは、UNL, LAD_n, SDC というシーケンスを使うのが普通です。これらのコ マンドを受信したときのデバイスの動作はいろいろですが、通常そのデバイスの「リ セット釦」を押したときと同じです。

3.6. デバイスのトリガ

測定器に測定開始を指示したり、デバイスに何かの動作を開始させるためのコマンド が、GET (group executed trigger) です。GET は、その時リスナに指定されている デバイスをトリガします。通常、UNL, LAD_n, GET というシーケンスで使います。

3.7. パラレルポール

シリアルポールは、SRQ を出しているデバイスを1台づつ順番に探してゆくものです が、何台か同時にチェックするのが、「パラレルポール」(parallel poll) です。た だし、SRQ そのものをクリアさせる機能はありませんから、シリアルポールとの併用 が必要で、現実としては、ほとんど使われていません。面倒な方は気にしなくて結構 です。パラレルポールを使わずにプログラムを作ることもできますし、パラレルポー ルに応答するデバイスも、多くはありません。

コントローラは、ATN と EOI を 1uS 以上、同時に true にします。その間、パラレ ルポールに応答するデバイスは、自分に割り当てられた DIO1 から DIO8 のいずれか 一つのデータ線を、1 (true) か 0 (false) のいずれか指定されたレベルにします。 このデバイスの応答を PPR (parallel poll responce) と呼んでいますが、どの線を 使って、0, 1 いずれのレベルで応答するかは、もともとそのデバイスのハードウェア で決まっている場合と、コントローラの指示で決まる場合のふたつがあります。

コントローラが、パラレルポール応答を指示する場合は、UNL, LAD_n, PPC, PPE の シーケンスを使います。PPC (parallel poll configure) は、次のバイト (PPE) が そのデバイスのパラレルポール応答の指示であることを予告します。PPE (parallel poll enabe) は、次のようなビット構成で、どの線でいずれの論理で応答すべきかを 指示します。

 0 1 1 0 S P P P
         | +-+-+
         |   +---- 応答する DIO 線の番号
         +-------- 応答する論理
例えば、「P P P」には、DIOn の (n+1) の値を2進値でいれます。S は SRQ を出して いるかどうかを、指定された DIO 線で知らせるときの論理です。S が 1 なら、SRQ を だしているとき 1、0 なら 0 にします。つまり、S が 0 なら、SRQ を出していないと きに、DIO 線が 1 になります。例えば、「01101011」なら、自分が SRQ を出している とき、DIO4 を 1 にするように応答します。

PPC, PPE で指示したパラレルポール応答の解除は、PPU で行います。これは、PPC, PPE に応答する、すべてのデバイスに有効です。パラレルポール応答がローカルに決 まっているデバイスまで含めて、パラレルポールの応答を禁止する場合は、UNL, MTA, LAD_n, PPC, PPD のシーケンスをつかいます。PPD (parallel poll disable) は、リ スナに指定されたデバイスのパラレルポール応答を禁止するために、PPU と組で使わ れる2次コマンドです。

3.8. コントローラの委譲

IFC と REN の制御権を有する「システムコントローラ」は、一つのシステムに1台し か存在できない規則で、システムコントローラは、IFC を true にすれば、いつでも システムリセットが可能です。しかし、コントローラが他のコントローラに制御権を 譲ることは可能で、その場合は、TAD_n, TCT のシーケンスを使います。TCT (take control) は、トーカに指定されているデバイスをコントローラに指定するためのコ マンドで、TCT を出したコントローラは TCT の送信が完了した時点で、ATN を false にして、制御される方の側にまわります。TCT で指名されたコントローラは、ATN を 制御する権利を持って、ほとんどの GPIB 制御ができますが、IFC でシステムそのも のをリセットしないようにします。システムコントローラが制御権を取り戻す方法は、 「アクティブコントローラ」(active controller) と呼ばれる、その時点のコントロ ーラから TCT で譲ってもらう方法以外に、IFC を出してシステムをリセットする方法 があります。

3.9. GPIB 制御文字

GPIB の複線コマンドは DIO1 から DIO8 を使って ASCII 文字で送りますが、プログ ラムの際、次の表が手元にあると、便利です。

 ------------------------------------------------------------------
 DCL UC  20 (devide clear)
 GET AC   8 (group executed trigger)
 GTL AC   1 (go to local)
 LLO UC  17 (local lock out)
 LAD AD  32+アドレス(0 から 30) (listen address)
 TAD AD  64+アドレス(0 から 30) (talk address)
 SAD SE  96+アドレス(0 から 30) (secondary address)
 PPC AC   5 (parallel poll configure)
 PPE SE  96+センスビット(0 か 8)+応答ビット(0 から 7) (parallel poll enable)
 PPD SE 112 (parallel poll disable)
 PPU UC  21 (parallel poll unconfigure)
 SDC AC   4 (selected device clear)
 SPD UC  25 (serial poll disable)
 SPE UC  24 (serial poll enable)
 UNL AD  63 (unlisten)
 UNT AD  95 (untalk)
 ------------------------------------------------------------------
最初の欄がコマンドのニモニック(略称)、次が「クラス」(class) と呼ばれるコマ ンドの性質で分類した種類で、次のようになっています。
 AC (addressed command) リスナに対してのみ有効
 UC (universal command) すべてのデバイスに有効
 AD (address) アドレス
 SE (secondary) 2次アドレス、2次コマンド
次の欄は、そのコマンドに対応する ASCII 文字の 10 進値と、コマンドの正式な名称 です。

4. GPIB のトラブル

いくつかの典型的な障害をまとめておきます。

4.1. デリミタの不一致

GPIB がうまく動かないときの、最大の原因です。例えば、送り手は CR+LF でおしま いのつもり、受け手は END のつもりという時は、永久的な待ちぼうけになりますし、 送り手は CR+LF、受け手は CR というつもりだと、LF が一つ宙に浮いてしまいます。

4.2. タイミング

コントローラとデバイスのタイミングが合わないケースです。IFC を受信した後、一 定時間しないと、次のコマンドに応答できないとか、たて続けにシリアルポールする と、相手のデバイスにステイタスレジスタを更新する余裕がなくなるとか、いろいろ あります。うまく動かないとき、制御の途中に待ち時間を入れてみると、原因がわか るこちがあります。

4.3. マニュアルの不備

マニュアルに肝心なことが書かれていなくて、必要な情報が欠落しているというのは、 非常に多いトラブルです。営業やサポート部隊から教えてもらう以外に、自分でかな りの時間を使って試行錯誤の実験を繰り返さざるを得ないことも、よくあります。

4.4. データ型と入力方法の矛盾

コントローラ側のプロムグラムで使用する「入力文」は特定なデータパターンを当て にしていますが、それが実際のデータに合っていないと、おかしなことになります。 例えば、BASIC 言語で ASCII 文字列による数値表現のデータなら、数値変数にも文字 列変数にも代入できますが、数値として理解できないような文字パターンを数値変数 に代入しようとすると、エラーになります。また、途中にコンマを含む文字列データ を BASIC の INPUT 文で入力するときは、フィールド数分の変数が必要とか、そう いった注意が必要です。

C 言語の場合は、バイナリデータを扱うとき、cast を使うととてもスムースにゆく ことがあります。

4.5. プロトコルの不一致

トーカに指定されたとき、自分のトークアドレスを受信する度に、出力データのポイ ンタをリセットして、最初から送り直すデバイス、前回出力したデータの次から送る デバイス、デリミタを送信した後、再び自分のトークアドレスを受信するまでデータ を出力しないデバイス、デリミタを出力しても、ATN が false になり次第すぐ次の データを出力しようとするデバイス等、いくつかのパターンがあって、難しい問題を 引き起こすことがあります。高速転送を行おうとすると、すべてのケースに対応する のが困難になります。

4.6. HP-IB と END

IEEE488 の前身である Hewlette-Packerd Interface Bus には、END メッセージがあ りませんでしたから、HP 社のコンピュータのほとんどは、デリミタとして END を 使わずに、CR+LF かバイトカウント方式を使っています。そのため、最近のデバイス でも、END を予期していないものがあり、例えば、END 終端のデータを送るとハング アップするオシロスコープ等もあります。

4.7. ハードウェアやファームウェアの虫

NRFD と NDAC が false のエラー状態だと、どんどんデータを送ってしまうもの、ATN をエッジでしか見ていないため、ATN true で IFC がでると、その後の制御がおかしく なるもの等、いろいろなケースがあります。最近は、専用の LSI が普及して、だいぶ 良くなりました。

4.8. 相手のデバイスのソフトウェアの虫

YHP 社のインピーダンス計の一部で、デバイスクリアの後、最初のデータだけ、フォ ーマットのおかしなデータが出てくるとか、いろいろあって、虫のない測定器は少な いものです。虫までゆかずに、「癖」といったものも、たくさんあります。

5. デバイス固有の GPIB 機能

GPIB の場合は、すべてのデバイスが GPIB の全機能を持つということではなく、 いろいろな組み合わせのサブセットを認めています。多くの場合、ユーザが容易に判断 できるように、背面パネル等に表示がしてあります。以下、種なものを説明しますが、 この他にも、拡張トーカの TE0 - TE8、拡張リスナの LE0 - LE4、コントローラの C0 - C28 があります。 記号の説明です。

 SH0 ソースハンドシェイクの機能なし(コマンドもデータを送れない)
 SH1 ソースハンドシェイクの機能あり(コマンドもデータを送れる)
 
 AH0 アクセプタハンドシェイクの機能なし(コマンドもデータを受けられない)
 AH1 アクセプタハンドシェイクの機能あり(コマンドもデータを受けられる)
 
 T0  トーカ機能なし
 T1  トーカ機能あり、シリアルポール応答可能、トークオンリー可能
 T2  トーカ機能あり、シリアルポール応答可能
 T3  トーカ機能あり、トークオンリー可能
 T0  トーカ機能あり、MLA でトーカを解除
 T1  トーカ機能あり、シリアルポール応答可能、トークオンリー可能、MLA でトーカを解除
 T2  トーカ機能あり、シリアルポール応答可能、MLA でトーカを解除
 T3  トーカ機能あり、トークオンリー可能、MLA でトーカを解除
 
 L0  リスナ機能なし
 L1  リスナ機能あり、リスンオンリー可能
 L2  リスナ機能あり
 L3  リスナ機能あり、MTA でリスナを解除
 
 SR0 SRQ 発信機能なし
 SR1 SRQ 発信機能あり
 
 RL0 リモート/ローカル機能なし
 RL1 リモート/ローカル機能あり、ローカルロックアウト可能
 RL2 リモート/ローカル機能あり、ローカルロックアウト不能
 
 PP0 パラレルポール機能なし
 PP1 パラレルポール機能あり
 PP2 パラレルポール機能あり、ただし、コンピュータから configure できない
 
 DC0 デバイスクリア機能なし
 DC1 デバイスクリア機能あり
 DC2 デバイスクリア機能あり、ただし、SDC には応答しない。
 
 DT0 GET によるトリガ機能なし
 DT1 GET によるトリガ機能なし
 
 E0  バスドライバは、オープンコレクタ
 E1  バスドライバは、スリーステート

6. 参考文献

 The Institute of Electrical and Electronics Engineers, Inc.-
 	IEEE Standard Digital Interface for Programmable Instrumentation
 		(IEEE Std 488.1 - 1987)
が正式な規格書で、日本の
 日本工業規格,- 計測用インタフェースシステム (JIS C1901-1987)
がこれを取り入れたものです。
 					(C) 1990 K.Hirabayashi

平林 浩一