FreeBSD, Linux 用 EIA-485(RS-485) デバイスドライバ

低速のデータ伝送で間に合う自動化では EIA-232(RS-232) が使われることが多い のですが、これは1対1の接続ですから、制御対象のデバイスが増えてくると物理 的な接続が無理になって、1つのポートにたくさんのデバイスが接続できる EIA-485(RS-485) を使うのが普通で、これを PC-Unix で実現するには、 次のような方法があります。

  1. EIA-232 ポートに「RS-422/RS-485 変換器」を接続して EIA-485 に変換する
  2. EIA-485 インタフェースの専用ボードや PC カードを利用する

前者は手軽さが利点ですが、次のような欠点があります。

  1. 専用のハードウェアよりコストアップになることが多い
  2. プログラムが複雑で、CPU 資源が無駄になる
  3. 送受信反転時間が長くなって、デバイスの動作に追従できない場合がある
  4. 変換器の設計によっては Unix のデバイスドライバで制御できない
  5. シリアルポートが占有されると困ることがある

一方、EIA-485 ボード/カードによっては、標準のシリアルポート (COM1/2/3/4) とハードウェア的に互換の製品もありますが、これを標準のシリアルドライバで 使おうとしても、次のような問題があります。

  1. Unix のデバイスドライバでは送受反転が不可能で使えないことが多い
  2. プログラムが複雑で、CPU 資源が無駄になる
  3. 送受信反転時間が長くなって、デバイスの動作に追従できない場合がある

原則として全2重通信を行う EIA-232 に対して、EIA-485 は半二重通信でしか使え ませんから、そのデータ構造もデリミタで終端されたパケットや固定長になるのが 普通で、これを全2重のデータストリーム用に設計された汎用シリアルドライバで 扱おうとすると、ポーリングを避けられないことが多いのと、もともと全2重通信 を前提にした EIA-232 のデバイスドライバには送受反転の機能がないため、上記の 問題がでます。

このドライバは以上の問題を解決するために設計されたもので、使用するハードウェア によって、以下の3種類が用意されています。

  1. 2590 - PCMCIA カード (1 port)
  2. 2591 - PCI bus のボード (EIA-485 1/2/4 port, EIA-422/EIA-485 各 1 port)
  3. 2592 - ISA bus のボード (EIA-485 1/2 port, EIA-422/EIA-485 各 1 port)

なお、EIA-422(RS-422) の場合は全2重通信ですから、ほとんどのボード/カードで 標準の Unix デバイスドライバが使えます。