福福電子トップ ラインモニタ RS-232Cとは? ダウンロード お問い合わせ Webショップ

HOME» RS-232Cとは

RS-232Cとは

RS-232C ラインモニタ
 Analyze232C \4,000-より
★デモ機貸し出し★

目次

ページ先頭へ

■はじめに

RS-232Cとは、中低速のシリアル通信で最も普及している通信の規格です。
正確には、EIA-232と言うそうなのですが、誰もそんな呼び方はしていません。(少なくとも私の接している業界では…)
RS-232Cの最後の“C”も元々はバージョンだったらしく、CのほかにBやDが有ったような記憶があります。
でもでも、みんな単純に“RS-232C”と呼んでいます。
このページでも、RS-232Cの正確な規格ではなく、実践的・一般的な説明を行いますので、細かいことにこだわらず、単にRS-232Cと呼びます。
また、RS-232C通信と言っても更に様々な方式が存在します。このページでは、その中でも最も簡単で広く使用されている調歩同期方式(ASYNC)について説明しています。

誤解しないで下さい!
ここで記述している説明や用語は、厳密に考えるとほとんど間違っています!
間違っているものを平気で書いているとは…?いえいえ間違いですが、それも正しいのです。RS-232C調歩同期通信は、簡単に実現できる通信方式なので様々な機器に実装されています。また、規格の許容範囲も広くいい加減に作っても簡単に別の機器と通信できてしまいます。このため、初めてお付き合いする業者の方とも簡単な打ち合わせだけであっさりと通信できてしまうので、いつの間にかあまり深く考えなくなってしまいました。私だけ…? いやいや業界の皆さんそうでしょ!最近では、信号が正論理か負論理だったかも忘れてしまう始末。電圧なんてとっくの昔に忘れてしまいました。このページでは、厳密な意味はひとまず保留し、実践で必要な知識、業界での一般的な知識を記述しています。


さて、RS-232Cとは、中低速のシリアル通信と説明しましたが、シリアル通信って何でしょう?
シリアル通信の他にはパラレル通信があります。それぞれ一長一短です。
シリアル通信とパラレル通信の特徴を簡単に説明すると、信号線が1本か複数本かと言った違いです。
これだけで伝送速度の違いが予測できます。信号線が1本より複数本あったほうがより多くの情報を伝えることができます。
# ・・・と書いたものの最近の技術では、シリアル通信の方がパラレル通信より速くなって来ています。??

どちらの通信でも0と1を表す電気信号を何かのタイミングに合わせて送信するのが、通信の基本となっています。例えば、0を0V、1を5V等で電気信号に変換します。
基本と言うからには応用もある訳で、一度のタイミングで0,1,2,3の何れかを送れる方法やもっと多くの情報を送る手段も編み出されています。
基本的なシリアル通信では、決められたタイミングで信号を変化させてデータを送信します。

RS-232Cでは、大きく分けて2種類のタイミングが存在します。
一つ目は非同期方式、もう一つは同期方式です。
同期方式は、データ伝送の無駄が少なく非同期方式に比べて一定時間により多くの情報を送信することができますが、それなりのハードウェアが必要でプロトコルも難しくなるのでマイコン等のシリアル通信ではあまり使用されません。パソコンに標準で装備されているCOMポートもRS-232Cですが、初めから同期通信機能は省略されています。つまり標準のパソコンでは同期通信は行えません。
非同期方式は、調歩同期方式ともASYNCとも呼ばれているRS-232Cの最も簡単な通信方式です。パソコン(IBM PC/AT互換機)のCOMポートでは、この非同期方式の通信が可能です。

ページ先頭へ

■調歩同期方式(非同期・ASYNC)

さていよいよ本題です。
調歩同期方式のRS-232Cは、二つの装置間で同じ通信速度と同じ書式を使用することを取り決め通信を行います。

ページ先頭へ

■通信書式

上図は、通信書式です。
左から順番に通信ラインに出力していきます。最初はスタートビット次にデータビット・パリティビット・ストップビットと続きます。
これで1バイトが送信できます。上図では、一枡を1ビットで表現しています。つまり、0または1がそれぞれの枡に入ります。
スタートビット
スタートビットは常に0です。スタートビットは、通信データがこれから開始されると言った意味を持っています。
ハードウェアはアイドル状態の通信ラインを監視しています。0を確認すると、その時点でタイミングをリセットして、一定の間隔でデータ取り込み処理が開始されます。
データビット
データビットは任意にビット数を設定できます。通信を行う機器間で予め規定しておきます。
ほとんどの場合、7ビットまたは8ビットです。
パリティビット
通信の信頼性を確保するためパリティビットを設定することができます。
パリティビットは、奇数・偶数または無し等を使用することができます。ハードウェアで自動的に計算されますので、計算方法等は気にする必要はありません。
ハードウェアがパリティの誤りに気付くと、パリティエラーを発生させます。
ストップビット
ストップビットは常に1です。ストップビットは1バイトの通信が終了すると言った意味を持っています。また、ビット数は、1ビット、1.5ビット、2ビット等があります。
ハードウェアは、1バイト通信が終了するとストップビットを確認します。ストップビットが出力されない場合、通信が上手く行えなかったとして、フレーミングエラーを発生させます。

ページ先頭へ

■通信速度

通信速度は、ビットレートとも呼ばれているシリアル通信にとって、重要なパラメータです。
単位はbpsで、ビットパーセックの略です。

よくボーレートと表現する場合がありますが、これは大きな間違いです。
ボーレートは、モデム等のキャリアの通信速度を表しています。昔のモデムは、ボーレート=ビットレートだったため、今でもボーレート=ビットレートと表現されることがあります。最近のモデムは良くできており、ボーレートとビットレートが等しくありません。モデムで矩形波を正弦波に変調する場合、最近のモデムは、周波数変調と振幅変調を組み合わせて、ビットレートを上げています。このため、ボーレート2400でもビットレートで9600bpsでたりします。

つまり1秒当たり1ビットを送信するのであれば、1bpsとなり、8ビットパリティ無しストップビット1ビットとした場合、1バイトのデータを送るには、10秒かかることになります。

計算できましたか? スタートビットは1ビットなので、1bpsなら送信に1秒かかります。 データビット8なら、同様に8秒。ストップビット1なら同じく1秒。合わせて10秒です。

ハードウェアは、アイドル状態でスタートビットを監視しています。
スタートビットを発見すると、そこでタイミングカウンタをリセットし、カウントを始めます。
そして、今の例では1秒間隔で10回通信ラインを監視するわけです。10回監視したデータをそれぞれのビットデータレジスタに保存して、1バイト揃えば通信終了となります。

ページ先頭へ

■ここまでのまとめ

このように調歩同期通信では、1バイトのデータをビット単位で送信しています。そして1バイト送信すると通信は一旦終了です。

二つの機器では同じパラメータで通信を行う必要があります。同じパラメータで通信を行わなければ、ビットが抜けたり、データが化けたりします。 同じに合わせるパラメータは次のパラメータです。

データビット数
パリティの仕様(偶数・奇数・無し等)
ストップビット長(1ビット・1.5ビット・2ビット)
ビットレート(通信速度、1秒当たりに送信するビット数)bps

これだけで通信が可能になります。

ページ先頭へ

■テスターを持っていない技術者を信頼できますか?

もし、あなたがRS-232Cのお仕事をする予定なら、ラインモニタが欠かせません。
専用機なら十数万〜百数十万円程度もしますが、通信プロトコル解析に限定した安価な製品があります。しかもPCで動作するから、非常に便利です。こちらをチェックしてください。
RS-232C ラインモニタ からダウンロードできます。

ページ先頭へ

■ストレートケーブル と クロスケーブル

RS-232Cの通信は、通常なら全二重通信です。 全二重通信とは送信と受信の伝送ラインを独立して持っているため、送受信が同時に行える通信方法です。

ここで、重要なのが出力と入力の関係です。

通信には、『口』と『耳』が必要です。口から出たデータを耳で受ける。これが通信です。ですから、双方向通信を行う場合、ひとつの装置には『口』と『耳』が1ペア必要になります。
この『口』が出力で、『耳』が入力なのです。

つまり、装置Aと装置Bを双方向通信させるためには、装置Aの出力を装置Bの入力へ接続し、装置Bの出力は装置Aの入力へ接続しなくては、正常な通信ができません。

簡単ですね?
いよいよ本番になってきますよ。

RS-232Cの通信装置には、『端末仕様』と『モデム仕様』が存在します。
端末仕様のTXDは出力、RXDは入力になっています。
一方、モデム仕様のTXDは入力、RXDは出力になっており、端末仕様の装置と入出力が全く逆になっているのです。

この2つの装置を接続するには、TXDとTXDを接続し、RXDとRXDを接続すればOKです。
上図で確認してください。端末仕様のTXDはモデム仕様のTXDへ接続されています。
この接続ケーブルを『ストレートケーブル』と呼んでいます。

もし、端末仕様の装置2台を接続する場合、注意が必要です。端末仕様の装置では、TXDが出力なのでTXD同士を接続しても通信できないからです。端末仕様のTXDは、端末仕様のRXDに接続しなくてはなりません。モデム仕様の場合も、入出力が逆になりますが、全く同じ考えができます。
端末仕様同士の接続を上図で確認してください。
その接続ケーブルが、『クロスケーブル』です。

具体例で説明すると、パソコンとモデムを接続するには、ストレートケーブル。パソコン同士を接続するには、クロスケーブルを選択します。

上図の見方・・・
上図の矢印は、データの伝達方向を表しています。そして三角形は、入出力装置を意味しており、三角形のとがった方を出力。平らな方を入力としています。
端末仕様とモデム仕様では、同じ信号名であっても入出力が異なる事に注意してご覧ください。

ページ先頭へ

■ストップビットはなぜ必要か?

通信が行われていないアイドル状態では、通信ラインは1固定となっています。つまりストップビットが連続して送信されています。 このストップビットが途切れた時、つまりスタートビットが送信された時から通信が開始されます。

つまりスタートビットが要でストップビットが不要な気もします。
それでは、ストップビットはなぜ必要なのでしょう?。それは、色々な問題を解決するためです。

これまでに説明したとおり、シリアル通信では、送信側と受信側で同じタイミングで動作しなければなりません。物理的に考えると、同じタイミングで動作することは不可能です。正確なクリスタルクロックを実装しているマイコンであっても、必ず誤差があります。物理的な実世界において同じタイミングとはありえないのです。

このため、とても大きなデータを連続して送信すると、少しずつタイミングがずれてきます。そのうちに、2つの装置間で1ビットの誤差が生じてしまうでしょう。シリアル通信の1ビットずれは致命的です。そこからのデータが全て1ビット狂ってしまいますので、全てのデータが無効なものになってしまいます。

これを防ぐため、1バイト単位に必ずストップビット→スタートビットのデータを挿入し、タイミングのリセットを行っているのです。

また、ストップビットが1ビットでは、データビットやパリティビットと瞬間的に区別できません。これを防ぐために、ストップビットは1.5ビットや2ビット長が選択できるわけです。

ページ先頭へ

■RS-232Cの規格って覚えなくていい?

現在RS-232Cのインタフェースを用意する場合、たった一つのICで実装できてしまいます。
一昔前は、マイコンハードウェアに±12V電源を引き込んでRS-232Cインタフェースを実装していました。マイコン等は5V電源で動作するのが主流だったので、±12V電源は、RS-232Cのためだけに実装することも少なくありませんでした。
現在では、チャージポンプ方式の5V単一電源のIC一つでできてしまいます。いわゆるRS-232CドライバICです。
このICは、5V電源を使ってコンデンサを充電します。充電されたコンデンサ同士を直列に接続し、RS-232C規格まで昇圧させるのです。ICがインタフェースするRS-232C側は、そのままD-SUBコネクタへ接続できます。
つまりRS-232C規格は、全てドライバICが満たしてくれるのです。この様なドライバICのおかげで、いまや特殊な場合でもない限り、RS-232C規格を覚えたり調べたりする必要は無くなっています。

ページ先頭へ

■通信プロトコル

1バイトの通信なら簡単ですが、それなりの通信を行うためには通信プロトコルが必要になってきます。
これまで説明した通信は、ほとんどハードウェアが自動的に行ってくれます。通信プロトコルは、ソフトウェアの担当です。
通信プロトコルも様々で、広く使用されているプロトコルからローカルな特殊プロトコルまであります。
RS-232C通信のプロトコルは、独自のプロトコルが主流です。マイコン等で通信を行う場合は、特殊な機器との通信がほとんどなので、皆さん勝手気ままにプロトコルを定めています。

プロトコルとは、ソフトウェアで行う通信手順です。
例えば、通信の開始には必ずSTXを送りましょう。とか、最後にBCCをつけましょうとか…。RS-232Cハードウェアでの書式では、1バイトの送信方法しか規定していませんが、通信プロトコルでは複数バイトのバイトデータの並び等を規定します。

ページ先頭へ

■通信ライン(半二重と全二重)

冒頭でシリアル通信とパラレル通信の違いは通信線の数で、シリアル通信は1本と説明しましたが、これは1バイトデータを送る場合の通信ラインの数です。通常、通信には上りと下りが有ります。
2つの機器が通信を行う場合、一方通行の通信なら1本の通信ラインで大丈夫ですが、双方向通信を行うのであれば、1本または2本必要となります。

双方向通信で、1本の通信ラインだけで通信する方式を半二重通信と呼びます。2本の通信ラインを使用して上りと下りの通信に別々の回線を使用するのであれば、全二重通信です。
RS-232Cは、ほぼ間違いなく全二重通信です。TX(送信)とRX(受信)の信号線が独立しています。このため、上りと下りのデータを同時に送受信することがハードウェア的には可能です。

全二重送信
半二重送信
半二重通信は、同時に複数の装置が送信すると、通信データが破壊されてしまうため、注意が必要です。通信プロトコルで衝突が起こらないようにポーリング方式を採用したり、送信が終了すると通信ラインを開放する仕組みをハードウェアで用意する等、考慮する点が増えてきます。
 
↓三角のプレイボタンをクリックすると動画が始まります。(無音)
↑三角のプレイボタンをクリックすると動画が始まります。(無音)
こちらの動画は、全二重通信をラインモニタと呼ばれる測定器でモニタしたものです。

通信トラフィックの少ない時は、上りと下りのデータは、交互に送信されていますが、通信トラフィックが多くなると上りと下りのデータが重なってきます。

半二重通信では、1本の通信線を上りと下りで共有しますので、上りと下りのデータが重なる事はありません。

この動画で使用したラインモニタの詳細は、こちらです。

RS-232C ラインモニタ からダウンロードできます。

ページ先頭へ

■RS-422とRS-485

RS-232Cと同じ通信書式(1バイトデータ)で、電気信号の異なる通信規格にRS-422とRS-485が有ります。
これらの通信規格では、2本の電線を使用して1ビットのデータを送信します。

RS-232Cでは、シグナルグランド(SG)を0Vと定めて、TX線またはRX線の電圧を変化させ信号を伝達させます。これをシングルスイングと呼びます。
シングルスイングでは、複数の信号線が共通のグランド線を共有します。このため、始めに2本のワイヤーが必要になり、信号線が増える毎にワイヤーが1本づつ増えて行きます。信号数+グランド1本。
RS-422とRS-485では、+の信号線と-の信号線を使って信号を伝達します。+側と-側の信号は必ず逆の電気特性を出力します。例えば0-5Vの電圧を使用するのであれば、+側が5V出力している時は、-側は0Vが出力されえいます。+側が0V出力している時は、-側は5Vです。このように、2本の信号線を使い、片方を正論理、もう片方を負論理として伝送する方式をデュアルスイングと呼びます。
デュアルスイングでは、信号単位に2本のワイヤーを使用します。このため、信号数×2本のワイヤーが必要になります。

電気的には、シングルスイングよりデュアルスイングで信号を送信したほうが、より遠くへ信号を伝えることができます。

RS-232Cは、元々モデムとターミナルを接続する仕様なので、ケーブルの長さは比較的短めで規格化されています。それよりも遠くへモデムを使用せずに通信させるためには、RS-422またはRS-485を利用します。

RS-422とRS-485は、ほとんど同じ規格ですが、RS-422は1対1通信。RS-485は、n対n通信に使用されます。 また、多くの場合半二重通信を採用します。

RS-422とRS-485は、デュアルスイングで通信を行うので、1つのデータ線に2本のワイヤーを使用します。このため、半二重通信の場合は2W(ツーワイヤー)、全二重通信の場合は4W(フォーワイヤー、ヨンワイヤーとも言う)で機器間を接続します。

ページ先頭へ

■ポーリング

RS-485を使用した1対n、通信では、よくポーリングプロトコルが採用されます。
ポーリングプロトコルは、マスターとスレーブ、つまり主装置と複数の端末装置を結合する場合に使用されます。
多くの場合、半二重通信を採用するので、誰かが送信している場合は、その他の装置は送信することができません。そこでマスターは、全てのスレーブへ点呼をかけます。点呼がかけられたスレーブのみが送信可能になります。送信が終了すると、回線をマスターに返還し、マスターは次のスレーブを呼び出すのです。
このように、ポーリングでは、マスターが接続されているスレーブ装置1台1台に呼びかけ、各スレーブの送信タイミングを作り出します。
点呼や応答等は、全て通信電文により行われるので、2W方式や4W方式で通信が可能になります。通信ラインを排他するための特殊なハードウェアは不要です。

ページ先頭へ

■トークンリング

トークンリング方式もポーリング方式に良く似ています。
トークンリングの場合は、ポーリングと違いマスターが存在しなくても構いません。ポーリング方式では、マスターが各スレーブへ点呼を行っていましたが、トークンリングの場合は、各端末がバトンタッチを行いながら送信タイミングを作り出します。
ここで言うバトンとは、送信タイミングのことです。始めに1台だけ送信可能状態になります。送信が終了すると、次の装置へ送信タイミングを渡します。これを順番に繰り返し、全ての装置で送信タイミングをくるくる回して行く訳です。
トークンリングも同様に、全て通信電文により行われるので、2W方式や4W方式で通信が可能になります。通信ラインを排他するための特殊なハードウェアは不要です。

ページ先頭へ

■BCC

BCCとは、ブロックチェッキングコードの略です。
通信を行う場合は、ブロック単位で電文を管理します。パケットやテキスト等とも呼ばれます。
RS-232C調歩同期(ASYNC)では、1バイトのデータ送受信が最低単位ですが、通信プロトコルでは1バイト以上の文字列をブロック・パケット・テキスト等として取り扱います。

通信には、エラーがつき物です。BCCは、このエラーを回避するための仕組みです。
BCCの種類としては、サムチェックや水平パリティ、巡回符号(CRC)等があります。
送信側は送信ブロックデータを作成する場合、BCCを計算してブロックに添付します。受信側では受信したブロックデータを送信側と同じ方法でBCC計算し、添付されている実際のBCCと比較します。
受け取ったBCCと受信側で計算したBCCが異なっていれば、通信エラーが発生していることになり、再送手続き等が行われ、データを補完することができます。

サムチェックは、ブロックデータ内の決められた範囲のデータを全て加算します。その加算値の下8bitまたは16bitをBCCとして採用します。
水平パリティは、加算するのではなく排他的論理和で計算します。このため、通常はデータビット長と同じサイズです。
巡回符号は、受信データをビットローテイトしながら、排他的論理和を行います。上記二種類の方法では、2バイト以上のデータでエラーが発生した場合、間違ったブロックデータなのに正しいBCCを計算する確率が高いのですが、巡回符号ではその確立が極めて低くなり、非常に高信頼です。ただし、計算に時間がかかる欠点があります。

その他にBCCではありませんが、重畳符号等も存在します。重畳符号は、ディスクドライブのRAID5の様な符号化形式で、エラーが少ない場合は、壊れたデータから元のデータを復元できる符号化方式です。
これは、計算も複雑になるため滅多に使用されませんが、エラー頻度が高い通信において有効です。

BCCを全ての人がブロックチェッキングコードと思っているわけではありません。
ある業界ではBCC=サムチェックですし、別の業界ではBCC=CRCとなっていたりします。既に説明していますが、RS-232Cの通信プロトコルは、業界や企業により勝手気ままに定められることが多いので、その業界によってスタンダードなBCCが異なっているのです。
初めてお付き合いする別の業者さんとは、BCCに何を使っているかを打ち合わせたほうが良いでしょう。仕様書には漠然とBCCと記述されていることが良くあります。特に新人さん等は、それが世界標準と誤解している場合も…(^^;
ま〜それはそれで、アリなのですが…。

ページ先頭へ

■モデム

モデムは、RS-232Cの電気信号を音声信号に変換する装置です。
RS-232Cの通信ライン上には、矩形波(方形波)が流れています。単純に12Vや-12Vの電圧です。これを電話回線を利用して、より遠くへ伝達させるためには、モデムが必要になります。
電話回線には、矩形波を出力することができません。電話回線には音声信号しか流せないことになっています。モデムは、RS-232Cの矩形波を音声信号に変換し、逆に音声信号をRS-232Cの矩形波に戻します。

RS-232Cには、同期方式と非同期方式があると説明したとおり、モデムも製品ごとに対応できる方式が決まっています。

モデムは簡単な装置に見えますが、なかなか奥の深い装置です。
RS-232C同士の機器を接続する場合、同じ通信速度で同じ通信書式を使用する必要がありますが、間にモデムを挿入すると、異なった通信速度や通信書式でも通信できたりします。???

モデムがダイアルアップを行い、相手モデムがその着信を取ると、モデム間でネゴシエーションが行われます。最初に古い通信規格で通信を行い、可能であれば上位の通信規格を試して…、その時点で最も適した通信規格をお互いに確認しあって通信が開始されます。

昔のモデムは、キャリア信号1周期に1ビットの情報を載せる単純な装置でした。このため、ボーレート=ビットレートでした。最近のモデムでは、1周期に複数ビットの情報を載せることができます。シリアル通信とパラレル通信の中間の様な、とても奥の深いものなのです。

モデムは、RS-232Cの矩形波を音声信号に載せるため、キャリア信号を使用します。
何も信号が載っていないキャリア信号は、正弦波です。正弦波は、音声信号なので、電話回線に出力することができます。周波数はボーレートで表現されます。
信号を載せるためには、このキャリア信号に変調をかけます。変調には、周波数変調と振幅変調があります。単純なモデムでは、周波数変調を使ってキャリア信号1波形に1bitの情報を載せることができます。
高性能(最近の)なモデムでは、周波数変調と振幅変調を組み合わせて複数のbitをキャリア信号1波形に載せています。
モデム間の距離が長くなると、信号が減衰して振幅変調でエラーが発生してしまいます。このエラーをキャンセルするために、通信の開始時に基本波形をモデムは出力します。受け側のモデムは基本波形を解析して、どの程度信号が減衰しているかを計算します。計算結果により、その後に受信した波形を補正することが可能になり、正常な通信ができるわけです。

ページ先頭へ

■デバッグ

このようにシリアル通信では、1ビット単位にデータを送信するため、デバッグに苦労します。
ちゃんと送信したはずなのに、相手機器が応答してくれない???という訳でデバッグが始まります。
アナログ信号ではシンクロスコープ。BUS等のデジタル信号ではロジックアナライザ。シリアル通信にもそれなりの機器を使用します。それがラインモニタです。
極まれにラインモニタ嫌いの方がいらっしゃいますが、手に入るものなら迷わずラインモニタを利用しましょう。
ラインモニタは、通信回線上に流れている矩形波を実際のデータに変換して表示する測定器です。
少し前までは専用機しか存在せず価格も数十万円程度しましたが、必要最低限の機能を利用するだけなら数千円程度のものまで存在します。

RS-232C ラインモニタ からダウンロードできます。


会社概要 - 免責事項 - 個人情報 - お問い合わせ - サイトマップ

Copyright(C)2000-2008 Fukufuku denshikoubou. All Rights Reserved.