シリアル(RS-232C)通信をする方法

 機器制御をする際によくシリアル通信をする場合があります。機器にコンピュータから文字列を送受信して制御します。シリアル通信をWindows APIを用いて行う方法について解説する前に、シリアル通信とは何かについてここでは解説します。

シリアル通信とは

 シリアル通信とは電線を1本使って送受信をする通信形式です。1本なのでシリアルというのですね。といっても実際には線は複数あります。主に受信用、送信用、アース用の線があります。受信用はメッセージを受信するときにつかい、送信用は送信の際に使用します。アースにより基準となる電圧をしることができます。シリアル通信の方式にはいくつかありますがよくRS-232Cとうい規格が使用されます。ここでもRS-232Cを前提として話を進めます。

シリアル通信

信号配置をコネクタ

 シリアル通信で使用するコネクタはD-SUB9ピンと呼ばれ、以下の様なものです。

ピンが9個あるのがわかると思います。パソコンとつなげる場合はUSB-RS232Cの変換ケーブルを使うといいでしょう。

 さて、これらの9ピンの意味ですが、以下のようになっています。

Dsub9pin

ピン番号 名称 意味
1 (DCD) Data Carrier Detect キャリア検出
2 (RXD) Receive Data 受信データ
3 (TXD) Transmit Data 送信データ
4 (DTR) Data Terminal Ready データ端末レディ
5 (SG) Signal Ground アース
6 (DSR) Data Set Ready データセットレディ
7 (RTS) Request to Send 送信要求
8 (CTS) Clear to Send 送信可能
9 (RI) Ring Indicator 被呼表示

シリアル通信の仕方

では実際にシリアル通信がどのように行われるかをみていきましょう。以下のようにして通信が行われます。

  1. パソコンAがDTR(通信したいのサイン)をONにした後、BがDSR(準備OKのサイン)をONにする
  2. パソコンAがRTS(データを送りたい)をONにし、パソコンBがCTS(了解)をONにする
  3. パソコンAはSDから0と1により信号をパソコンBへ送る

次に、どのように情報を送るかをみていきましょう。通信方式には同期式と非同期式があります。同期式では、どちらかがクロックを発生させて、そのリズムにしたがってデータ通信をします。非同期式では、あらかじめクロック数のリズムを決めて同期します。よく非同期式を用いるので、非同期式について解説します。

 まず、何も通信していない状態では、電圧は高い状態(1)です。なぜ電圧を高くするかというと、電圧が高い方がノイズに強いからです。通信を開始する際に、電圧を低くして(0)知らせます。それをスタートビットといいます。

 スタートビットの後はデータを送ります。送るデータは2進数で、データ数のことをデータビット長といい単位はビットです。データを送った後、正しく送れたかをチェックするパリティビットというものがあります。最後にストップビットを送って通信が終了します。ストップビットの長さをストップビット長と呼びます。通信の際の速度である通信速度も設定することができます。早ければ素早く通信できますが、データ送信を誤るというデメリットも生じます。

rs232cの通信方法

以上でシリアル通信の概要は終わりです。あとはさらに細かい用語をいくつか説明します。

フロー制御

 情報を送る場合、送る側はいいのですが、受信する側の準備ができていないと大変です。せっかく送ったはずのデータが受信側に送られていない可能性があるからです。そこで、データを送る前に、一度データを送るということを確認するのがフロー制御です。

XON/XOFFフロー制御

 送信側がどんどんデータを送ってきても、受信側の処理が追いつかないと意味があります。XON/XOFFフロー制御では、受信側の処理が厳しくなった段階で、送信側に一時中止するように指令を出します。XONコードやXOFFコードを送信してやりとりします。

ハードウェアハンドシェイク

 XON/XOFFフロー制御で用いられるXONコードやXOFFコードの代わりにRTSやDTRを自動的にON/OFFにするのがハードウェアハンドシェイクという方法です。

 今回はシリアル通信の仕組みについて紹介しました。次回からは、WindowsAPIを用いてシリアル通信を行う方法について解説していきます。

著者:安井 真人(やすい まさと)