すみません。PCショップじゃありません。<(_ _)>




  電子工作など趣味紹介サイトです。(^-^*)/

GPIBコントローラー


◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

INDEX

◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

外観

回路図

動作要件


必要なもの

Tera Termの設定

使い方

できないこと

ハンドシェイク文字

コンフィグ書換

TTMacro例文と結果

外観



USB-BコネクタがPC接続用、26P MILコネクタがGPIB接続用、USB-Aコネクタ2個は
PIコントローラーやPOコントローラーなどのディジーチェーン接続用です。

  

MILコネクタに接続するGPIB変換ケーブルを製作する必要があります。それ以外はUSBケーブルでOKです。


回路図



部品を可能な限り省略したため、GPIBインターフェースがオープンコレクタになっ ていません。
そのため測定器と通信していないときは、すべてのピンが入力になるようプログラムしています。

PCと接続していないか、またはPCが電源OFF(USB5Vが出力さ れていない)の状態で
測定器の電源がONされるとGPIBバスからの漏れ電流がGPIBコン トローラーに流れます。
従って電源投入順序としてはPC⇒測定器群が望ましいのですが、さほど気にせず5年間ほど
断続的に使用しました。その間動作不良もなく破壊に至ることもありませんでした。

なお、オンボードにあるリセットボタンを押せばGPIBコントローラーは初期状態に復帰します。

ディジーチェーン接続のためのインターフェースはRS-485もどきの少々特殊なものとなっています。
興味があればこちらを確認してください。


動作要件

 Tera Term 4.80以降がインストールされているWindows PC

 .TTLファイルがTTMACROに関連付けされていること

 1つ以上のUSBポート

※ Tera Termはどのバージョンでも動作しますが、TTMACROを使用するのであれば
バージョン4.80以降がおすすめです。


必要なもの

以下のリンクを右クリックしてPC上の任意の場所に保存してください。

◇ マイコン用 プログラム(旧) ◇
 ◇ マイコン用 プログラム(新) ◇ 

マイコン用プログラムをマイコンに書き込んでGPIBコントローラーは完成です。


Tera Termの設定

GPIBコントローラーをUSBポートに接続します。
ドライバを要求されたらFTDI社のホームページよりダウンロードしてインストールしてください。

PCとGPIBコントローラーはシリアル通信による接続となります。(19200 8N1)

Tera Termを起動し、設定⇒シリアルポートを開いて以下の通り設定してください。



ポート(COMポート番号)はデバイスマネージャで確認してください。その他は上記の通りとします。

次に設定⇒端末を開きます。



上記の通り設定します。


使い方

以 下のGP-IBコマンドをサポートしています。

ユニラインコマンド

IFCコマンド Interface Clear
GPIBインターフェースを初期化する


ユニバーサルコマンド
gpuc DCLコマンド DeviceClear
接続されているすべての測定器を初期化する
gpul LLOコマンド Local Lock Out
接続されているすべての測定器の手動での操作を禁止する

アドレスコマンド
gpac** SDCコマンド Selected Device Clear
アドレス**の測定器を初期化する
gpal** GTLコマンド Go To Local
アドレス**の測 定器の手動での操作を許可する
gpat** GETコマンド Group Execute Trigger
アドレス**の測定器にトリガをかける( 計測の開始など

コントロールコマンド
gpcw**@@・・・@ キャラクタ送信コマンド アドレス**の測定器にデータ@@・・・@を送信する
gpcr** キャラクタ受信コマンド アドレス**の測定器からデータを受信する

 ・[gp]はGPIBコントローラーへのデータであることを示すヘッダ。変更可能(後述)
 ・[**]はGPIBアドレス 2桁固定 1番なら01、16番なら16
 ・[@@・・・@]は測定器へのデータ(文字列)

 ・測定器への送信文字数は70文字以下、受信文字数は制限なし。

 ・測定器に送信するデリミタは[LF]。変更可能(後述)
 ・測定器から受信するデリミタは[LF]または[CR+LF]

 ・ハンドシェイク用に[ > ]を使用する。変更可能(後述)
 ・PCとのインターフェースでは文字列の最後に[CR+LF]を追加すること。
  これはTera Term 設定⇒端末にて設定済み。

 ・ホスト(Tera Term)はGPIBコントローラーから[ > ]が送信されるまで作業を停止する必要がある。

 ・リセットボタンを押すとIFC信号が出力され、ホスト(Tera Term)にWelcome Messageが送信される。

 ・上記以外のコマンドはサポートしていない。


できないこと

 ・EOI信号とSRQ信号はプルアップされているだけです。そのためバイナリデータの送受信と
  ポーリングには対応していません。

 ・複数のリスナを指定することはできません。たとえば複数台の電源を同じ電圧に設定する場合
  1台ずつ同じ電圧設定値を送信してください。

  複数のリスナを指定できるようになりました。
   アドレスコマンド及びキャラクタ送信コマンドが対象です。
   これにより測定器間での同期が必要な場合にも対応できるようになるはずです。

   例文 gpal0102<CR><LF>           アドレス1と2の機器をローカルにする。
               gpcw031215run<CR><LF>  アドレス3、12、15の機器にメッセージ[run]を送信する。

   なかなか複数台の計測器を同時に制御する機会はあまりありませんので、バグなどがあっても
  修正が難しいので、必要の無い方は従来のプログラムを使用してください。必要な方はこちらから。

 ・GPIBコントローラーはコントローラ+トーカまたはコントローラ+リスナとしてのみ機能します。
  つまり、トーカである測定器のデータをリスナであるプロッタに転送する指示をコントローラである
  GPIBコントローラーが指示する、ということはできません。


ハンドシェイク文字

ハンドシェイク用文字[ > ]をGPIBデータとして送信するとTera Termマクロが機能しなくなります。
それは、マクロでは[ > ]を待ってから次の動作に移りますので送信文字列の途中に[ > ]があると
それ以降の
データがGPIBコントローラーの処理を待たずに送信されてしまうからです。

滅多にないことなのですが、私は1度だけ経験しました。

GPIBデータとして[ > ]を送信するには[ > ]の代わりに[ セ ]を送信します。この2つの文字は
[ > ]が$3E(%00111110)、[ セ ]が$BE(%10111110)であり、GPIBコントローラー内で同一の文字として
処理されます。(最上位ビットが無視されます)たとえば

gpcw01>[CR][LF] と言うコマンドならば


gpcw01セ[CR][LF] とタイプすればアドレス1番の測定器に[ > ]が送信されます。

マクロの側から対策する場合は [ LF ] を待ってから [ > ] を待つ、と言う方法もあります。たとえば

sendln 'gpcw01>' gpcw01> と言うコマンドを送信した後は

wait #10
wait '>'
まずは [LF] を待ってから
ハンドシェイク文字を待つ、とすれば

それ以降のデータがGPIBコントローラーの処理を待たずに送信されてしまうことはありません。


コンフィグ書換

ハンドシェイク文字、ヘッダ文字及びデリミタ種別を変更できます。

Tera Term起動後、[ イロ ] とタイプして RETURN すると [ < ] が VT ウィンドウに表示されます。



初期設定の状態に戻すには [ >gp0 ] とタイプします。



タイプ後 [ >] が表示されるとコンフィグ書換は終了です。

   1文字目
ハンドシェイク文字
たとえばこれを [ 「 ] $A2 (%10100010) に変更すると
送信文字列の途中にハンドシェイク文字があるとそれ以降の
データがGPIBコントローラーの処理を待たずに送信されてしまう
現象を避けることができます。( [ 「 ] はASCIIコードではないため)

   2-3文字目
ヘッダ文字
自由に設定できます。但し2文字のみです。できれば英子文字が
良いかと思います。測定器からは英大文字が送信されることが
ほとんどですのでより安全です。

   4文字目
デリミタ種別
0 : [ LF ]
1 : [ CR+LF ]
0または1以外は設定しないでください。


TTMacro例文と結果

例としてTDS3034のハードコピー機能のクエリーを読み出して表示させてみます。

    マクロ例文
結果
    sendln 'gpcw01hardcopy?'
    wait '>'
    sendln 'gpcr01'
    wait #10
    recvln
    wait '>'
    statusbox inputstr 'HARDCOPY'
    messagebox 'OK?' 'message'


recvln (1行分の文字を受信する) コマンドの前は wait #10 ([ LF ] を待つ) とするのがポイントです。

以上です。何かの役に立てば良いのですが・・・