RS-232C RS-232Cの基礎 | |
|
RS-232Cピン配置
標準のRS-232C 9ピンコネクタのピン配置を示します。
RS-232Cのケーブルには25ピンの物も有りますが、最近はPCの小型かに伴い 25ピンはかなり少なくなって来ましたので、 25ピンの説明は省きます。 INと書かれているのは信号を受ける側で、OUTと書かれているのは信号を出す側です。 このうちRxDとTxDはパルスでその他はレベルになります。(ただしCDCとRIは除いてあります。) 信号名の説明はこの下のクロスケーブルを例に説明した方がわかり易いので、下をご覧下さい。
クロスケーブルのピン配置
RS-232Cの9ピンのケーブルは大きく分けて2種類あります。 一つはストレートケーブル(ノーマル)を呼ばれるもので、両側のコネクタが信号線(電線)により 両端の同じピンに接続されています。 これはPCとモデムなどを接続するもので、RS-232Cでコマンドをやり取りする機器なども 殆どの場合このケーブルを使用します。 もう一つはクロスケーブル(リバース)と呼ばれる物で両側のコネクタに接続される線が一部、 クロスしています。 このケーブルは通常はPCとPCを繋ぐものです。 下にクロスケーブルのピン配置を示します。
各ピンの説明
未接続のピン 1番、9番
1番と9番ピンですが通常は繋がれていません。
データ送受信の為のピン 2番、3番
次に2番ピンと3番ピンがクロス接続されています、2番ピンで受信データー、3番ピンは送信データです。
受信データのPC側はRS-232Cのハードウェアを通して受信バッファに繋がっています。 送信データのPC側はRs-232Cのハードウェアを通して送信バッファに繋がっています。 この線がクロス接続されることにより2台のPCの送受信(双方向)が可能になります。 実はこの線とアース線が3本あれば簡単なRS-232Cの通信は可能になります。 簡単とはデータのフロー制御や相手の電源が入っている否かのチェックを行なわないということです。 更に通信が一方向であれば、RxDとTxDを結ぶ線とグランド線の2本有れば通信が可能です。 例えば1秒毎に温度のデータをRS-232Cで送ってくる温度計が有ったとします、この場合はデータは 一方通行ですし、送られるデータ量も少ないので、2本の線で十分でしょう。 相手の状態を知るピン DTR、DSR 4番、6番
それではそのほかの線は何の為に有るのでしょうか?
PC間のデータ通信をする際に受信側のコンピュータの電源がOFFになっていたらどうなるでしょうか? 2本線の通信では送信側で受信側の状態を知ることは出来ません。 3本線の通信では双方が送受信出来ますから、当然来るべきデータが来ない場合、相手のコンピュータ に異常が有ると言う判断は可能になります。 ただしこの場合は、何もしないでも相手がデータを送ってくるか、又はこちらから返事を返してください と言うコマンドを相手に送信する必要が有ります。 この問題を解決するのが、DTR、DSRですDTRはPCが通信可能で有れば電圧レベルがHighになり 通信不可の状態ならばLowになります。 DTR、DSRはクロス接続されていますから、データを送ろうとするPCはDSRの状態を見て、相手のコンピューター に異常が有った時は、ワーニングを出すなどの処理が可能となります。 ここまでの説明で、PCの双方向通信では相手のPCの状態を見ながら通信するために、 5本の線が必要になることは理解されたでしょうか。 データバッファの状態を伝える RTS、CTS 7番、8番
ただしこれだけでは完全ではありません、もし送信データ量が大きいかあるいは、通信速度が速い為に、
データ受信側のコンピューターの受信バッファからのデータ取得処理が、間に合わ無かったらどうなるのでしょうか? このは状態を俗にデータをこぼすと表現します、送ったデータの一部が欠損してしまうことになります。 これを避けるために、受信側の処理が間に合わない場合は、データ送信を一時止めて、 処理が終わりデータ受信が可能になった時に再びデータを送信す方法が取られます。 このように通信するお互いが相手の状態を確認しながら通信する方法をハンドシェイクと呼びます。 又受信バッファなどのメモリーがオーバーフローしない様に制御する方法をフロー制御と言います。 これに使用されるのが、RTS、CTSですRTSは自分のPCの受信バッファに余裕が有る場合にHightになり、 バッファが溢れそうになるとLowになります。 RTSとCTSはクロス接続されていますので、送信側の機器はCTSの状態を見て受信側の 受信側のバッファが受信不能の場合は受信可能になるまで待機して、 可能な時にだけ送信するいわゆるハードウェア・フロー制御を行なうことが可能になります。 VB.NET又はC#でserialPortクラス又はコントロールを使用する場合は、「RequestToSend」プロパティを true(True)にします。 この処理は通常はドライバーが行ないます。 当然データは次から次に送られて来ますので、受信バッファが一杯になってから通信を止めたのでは 間に合いません、どのくらいで止めるかはドライバーによりますが、受信バッファの残りが1/3〜1/2に なると止める場合が多いようです。 ハードウエアを使用しないフロー制御
フロー制御にはRTSとCTSを使わずに、相手にコマンドを送信してバッファがオーバーフローしない様に
コントロールする方法も有ります。 この方法はXon/Xoffと呼ばれ、ソフトウェアーフロー制御とも呼ばれます。 Xon/Xoffは相手にコマンドを送ることによりフロー制御を行ないますので、バイナリデータの送受信には 使用できません。 Xoffは通常^S(Control S )をXonは^Q(Conrol Q)を送ります。 すなわち受信が追いつかないと思ったら^Sを受信が追いついたら^Qを相手に送ります。 Xon/Xoffの処理も通常はドライバが行ないます。 Xon/Xoffフロー制御は何らかの原因で、RTSとCTS線が配線出来ない等の場合に使用しますが、 現実的には殆ど使われておりません。
serialPortのプロパティの設定
VB.NET又はC#でserialPort(SerialPort)コントロールを貼り付けて、プロパティを見ると、以下の様に表示されます。
ただしここでは、serialPortポートコントロールの独自のプロパティだけ表示している。 ここではPCとPCをセリアルポートで接続する例を説明します。 もしこのPCが他の機械のセリアルポートに接続される場合は、設定はそちらの機械に合わせる必要があります。
ボーレート(BaudRate)は機種依存
殆どの設定はデフォルトのままでOKですが、一部変更した方が良い場合が有りますので説明します。
BaudRate はPC間の通信の場合は9600ボーより上げる事が可能ですが機種依存となります。 私の1.7GHzのPCでは115200ボーまで通信速度を上げることが出来ました。 なおRS-232Cのケーブル長は15mまでとなっています、ケーブルが長くなる場合はボーレートを下げます。 DTR、DSRを活用しよう
プログラムの中で相手のPCの状態を知りたい場合はDtrEnableはTrueにしておきましょう。
ただしDtrEnableをTrueにしたからと言って何か起こるわけでは有りません。 一方のDtrEnableをTrueにすると、相手側のPCのDSRHoldingがTrueとなりますので、 これを使って相手の状態を確認してデータを送信することが可能となります。 相手機器がDTR、DSRに対応している場合はソフトウェアでこれを積極的に使用する事を推奨します。 データ量が多い場合はフロー制御を行なおう
送受信のデータ量が多い場合はHandshakeをRequestToSendに設定します。
これによりハードウェアのフロー制御が行なわれ、受信バッファが一杯になりデータが 損失される事を防ぎます。 HandshakeをRequestToSendに設定すると、受信バッファに余裕が有る場合はRtsEnableがTrueとなり、 クロス接続されている、相手側のPCのCTSHoldingがTrueとなります。 これを利用して、フロー制御が自動的に行なわれます。 ポート番号の確認
PortNameですがパソコンに専用RS-232CのPortが有って、接続されてPortが一つの場合は殆どの場合Com1です。 ただしUSB-ComPortを使用している場合は、PortNameがCom1とは限りませんので、PCの 「設定」-「コントロール パネル」-「管理ツール」-「コンピューターの管理」-「デバイス マネージャー」-「ポート」-「通信ポート」 で必ず確認してください。 下はPC組み込み済みのRS-232Cのポート(COM1)とUSB to Serril Bridge(COM5)をコントロールパネル(XP)で表示しています。 USB to Serial BridgeがCOM5となっている事に注意して下さい。 |