PCのCOMポートをRS485に接続するには、レベル変換のほかに半二重通信のための制御が必要になります。具体的にはRS485変換ICのDE/~REピンに制御信号を入力しないといけません。これにはいくつかの方法があります。
(1) FTDIのICのTXDENを接続する
- メリット: 専用ハードウェアで確実に制御される。
- デメリット: FTDIのICに限定される。
産業用PCを除けば、最近ではPCに物理COMポート(RS232Cポート)が搭載されることはほぼなくなりました。PCでCOMポートを使う場合はUSBシリアル変換ICを用いた仮想COMポートが一般的です。FTDIはそのUSBシリアル変換ICの代表的なメーカーです。
FTDIのUSBシリアル変換ICは、RS485の半二重通信を制御するためにTXDEN(データ送信イネーブル)というピン機能を備えています。例えばFT232RLの場合、CBUS2ピンにデフォルトでTXDENの機能が割り当てられています。
採用例として、下図はDSD TECH社製のSH-U11というUSB/RS485変換器の回路の概略図です。
(実物を分解して調べました。)
(2) TxDのNOTを接続する
- メリット: 安価なUSBシリアル変換ICが使える。
- デメリット: ノイズに弱い。ボーレートを高くできない。
あまり筋の良い方法とは言えませんが、TxDを論理反転させてDE/~REに接続するという方法が一部の安価なUSB/RS485変換器で用いられています。
この方法では出力はプッシュプルではなく、TxDがHighのときはプルアップ/プルダウン抵抗まかせになります。そのためノイズに弱くなり、ボーレートもあまり高くできなくなります。これではRS485の利点を失います。
採用例として、下図はDSD TECH社製のSH-U10というUSB/RS485変換器の回路の概略図です。
(実物を分解して調べました。)
(3) RTSのNOTを接続する
- メリット: 物理COMポートでは確実に制御される。
- デメリット: FTDIのICではうまくいかない。ソフトウェア作成の難易度が高い。
RTSとは本来はRequest To Send (送信要求) の信号です。これを (負論理なので反転させて) DE/~REに接続すれば良いはずです。しかし実際にはRTSを「送信要求」信号として使うことはまれで、ハードウェアフロー制御のための「送信許可」信号として使うほうが一般的です。
WindowsのWin32APIは両方のモードをサポートしていますが、 .NETのSerialPortクラスは「送信要求」モードをサポートしていません。そのため、ソフトウェア作成の難易度が少し高くなります。
- [参考記事] RTSをめぐる混乱 - 滴了庵日録
- [参考記事] CONTEC Discussion Forum - SerialPortクラスで半二重通信を行う方法
- [参考記事] SerialPort class and RTS_CONTROL_TOGGLE
また、FTDIのUSBシリアル変換ICでは送信要求のRTSを正確なタイミングで出すことができないようです。
- [参考記事] FTDIのUSBシリアルの不具合? - 滴了庵日録
まとめ
以上から、FTDIのICを使うのが簡単でかつ手堅いと思います。