RS232Cを使って信号のやり取りをする装置を作ったりすると、信号がちゃんと送られているのかどうかを確かめる必要が出てくる。
この時に、一般的にはシリアルモニターという測定器を使うのだが、この手の作業をするのはだいたい出張先の現場で、何かのトラブルが起こっていて確認のためにシリアルのデータをモニターしようという状況である場合が多く、そういうときにはちゃんとしたシリアルモニターなどは持っていっていないというのがよくある話である。
さらに、会社でほとんど使われることなく転がっているシリアルモニターはコネクタが25ピンだったりして、最近主流の9ピンだとわざわざ変換コネクタを用意しないといけないというおまけまでつく。そうでなくとも、使うかどうかわからないシリアルモニターを持っていくのは邪魔くさいうえに、使い慣れていないものは使いにくい。
個人で232Cを使ったプログラムを作った際の動作確認を行うのに、わざわざシリアルモニターを買うのもどうかと思う。
そこで、いんちきケーブルを作ってそのままPCでシリアルデータをモニターしようというのが今回の作戦である。最初に断っておくが、これはあくまで簡易的なもので、本来のRS232Cの規格から外れる使い方をしているため、場合によっては正しく通信できないことがあるので、このケーブルを使って通信がうまくモニターできなくとも文句を言わないようにしてもらいたい。
そもそも規格外の使い方なので、うまく行ったらラッキーというものである。
ま、ほとんどの場合は問題なく使えるはずだが。
9ピンのDSUBコネクタのメス3個、オス1個。
コネクタカバーもつけたほうがいいだろう。
というか、どんなに汚く作っても、カバーがあればそれっぽく見えるのである。4芯から8芯くらいの適当なケーブル。
なければただの電線でもいい。20kΩくらいの抵抗。
シリアルポートの付いているPC。(USB-シリアル変換ケーブルでも使えるらしい)
汎用通信ソフト。
お奨めは技術表論社から出ているDOS版のCCT/V(NEC9801系ならCCT98)。
これは、いちいち回線を切断することなくボーレート等の各種設定の変更ができるのと、リアルタイムでのバイナリダンプ表示ができるのがいい。
けど、まだ売っているのだろうか?。Windows環境では私はEmTermを使っている。
シェアウェアであるが、バイナリファイルでも制御コードを取り除くことなくそのままファイルに落とすことができるので、あとからゆっくりバイナリエディターでデータを検討することができる。
残念なことに、リアルタイムでのダンプ表示はできない。
最近は汎用通信ソフトなんか使っている人は少なくなってきているようで、この手のソフトは絶滅の危機に瀕している。
そんな中でもかなり使えると判断している。両ソフトともマクロ機能があるので、モニター用としてでなく、ターゲットと同じようなデータを出力するマクロを書いておけば、ターゲットがなくてもこちらの装置のデバッグができるし、その状態で装置が動いているならば「うちのは仕様通りの動作をしている。そっちの装置がおかしいんじゃないの?」とお客に対して強気に出ることができる(笑)。
ま、下手に出ておいたほうが、万が一こっちに原因があった場合3倍返しを食らわなくてすむというのは世の常識である。
見るからにいんちきくさい回路である。
説明というほどのものは必要ないと思うが、作戦行動にはブリーフィングが必要と思えるので簡単に説明を行う。J1とP1で、ただの延長ケーブルを構成している。この長さは20cmもあればよいだろう。
ここで、TXD(送信)とRXD(受信)を分岐して、J1のTXDをJ2のRXDに、J1のRXDをJ3のRXDに接続する。
また、GNDはそれぞれのコネクタに接続する。
これが基本構成である。
ちなみに、RS232Cでは規格上は信号の分岐はしない事になっていたと思う。各コネクタでDSRとDTR、RTSとCTSをショートしているが、これはハードウェアフロー制御を無視して常にPC側で送受信可能にするためのおまじないである。
フロー制御なしの場合はこの処理は必要ないはず。
ま、4-6、7-8はショートする必要がある場合があるということは覚えておいて損はないだろう。相手が真っ当な装置であれば、J1はこれらをショートせず、P1との間はすべての線をストレートに結線すればよい。
しかし、世の中のほとんどの装置はフロー制御を行わない、いわゆるたれ流しであると思っておいたほうがよい。
なので、今回はP1につながる装置がどんなものでもいいように、こちらからの制御信号(4番と7番)をそのまま自分自身(6番と8番)に折り返している。
また、この制御線を電源に使っている装置もあるので、折り返すだけではなく、相手に対してはちゃんと接続しておく。
ちなみに、こちらから見て出力になっているのはTXDとDTR、RTSである。基本はストレート結線なので、相手側のP1にはこの手の小細工はしない。
J1とJ2の関係はJ1の送信がJ2の受信に繋がっているため、クロス結線に近い。
そこで、J1の受信とJ2の送信も接続してクロスにしてしまう。
ただし、J2の送信とP1の送信(J1が受信であるということは、P1からデータが送信されているということ)がそのままつながると、出力端子のショートということでJ2側かP1側の装置orPCのICが壊れる可能性がある。
そこで、20kΩの抵抗R1を入れることで、出力がショートした場合でもICが破損するほどの電流が流れないようにしている。
RS232Cの場合、信号の振幅が±10V程度なので、+10Vと-10Vがショートした場合を考えると、20kΩの抵抗を入れることで電流は1mA程度となり、とりあえずICを保護できることとなる。
ここの抵抗は、ICの保護を考えると大きいに越したことはないが、大きくしすぎると通信速度を上げたときに正しく送受信できなくなる可能性がある。
多分50kΩ〜100kΩくらいでも問題はないと思うので、破損が心配な人は試してみるといい。
まじめな人はドライバICの入力容量や入力抵抗、それとこの保護抵抗の値からf特を計算して、使いたい通信速度で問題がない程度に大きい抵抗を選んでほしい。このJ1とJ2のケーブルがクロスケーブルとして機能するのはP1側に他の装置が接続されていないときに限る。
J3にももちろん他の装置を接続しないのが無難だろう。
もし、P1に他の装置が接続されていると、抵抗が入っているためにP1側の信号が優先されてJ2からの信号はJ1に届かないこととなる。
ま、せっかく作るのだから「おーい、クロスケーブル持ってないか?」と言う場合にもとりあえず使えるようにしておいたのである。
意外とこの手の作業をしていると、クロスケーブルが必要になることは多いのである。
相手がいやなやつだった場合には「へへへ、俺は持っているぜ。でも貸してやんないよ」と優越感に浸れるのである(笑)。ちなみに、J3の3番ピンにも抵抗を入れてJ2の2番ピン(J1の3番)に接続しており、こちらはストレートケーブルとしても使用できる(はず)。
この場合にも、J3のTXDに20kΩの抵抗を入れておく。J1からJ2の長さは送信用PCとモニター用PCのコネクタを接続するのに充分な長さとする。
1m〜2mくらいか。
J2とJ3の間は、シリアルを2ポート持っているPCをモニターに使用するのなら20cmもあれば充分だが、最近はそういうPCも絶滅の危機に瀕しているのでノートPC2台なら50cmくらい、デスクトップなら最低でも1mくらいは必要と思える。
使い方とかいっても、コネクタを接続してモニター用のPCで通信ソフトを立ち上げるだけである。
ボーレート等の設定をちゃんとあわせてやれば、画面にデータが表示されるはずである。
16進ダンプ表示のできない通信ソフトでは、バイナリデータは表示できなかったりするので、ログファイルとして保存しておき、あとでバイナリエディター等を使って見る必要がある。もし、シリアルが2ポート(COM1とCOM2とかいうやつ)あるPCで、EmTremのように複数のCOMポートを同時に扱える通信ソフトであれば、1台で送受信を同時にモニターすることができる。
PC1台でも、送信と受信を同時に見ないのであればコネクタをその都度つなぎ替えることでモニターが可能である。
出張先にノートPCを持っていくのであれば、それに汎用通信ソフトを入れておいて、あとは今回製作したケーブルをカバンのすみに入れておくだけなので、荷物もそれほど増えなくてすむ。
くれぐれも注意してほしいのは、最近のノートPCではシリアルポートが付いていないものが多いため、その手のPCのユーザーはこのケーブルを持っていっても意味をなさないので、客先で汎用通信ソフトの入っているPCを借りる羽目になる。
そんな訳で、私は未だにMMX/166のあみちゃんを捨てられないのである。USB-シリアル変換ケーブルというのも売られているが、こいつはUSBポートが2つあればシリアルポートも2つにできるらしいので、もし、こいつが使えるとすればノートパソコン一台で送受信を同時にモニターすることも可能かもしれない。
各自このケーブルを持って戦地におもむき、客先の無茶な要求に負けず戦い抜き、無事帰還されることを祈る。