外部入出力


業務用ソフトウェアを作るときによくあるのが接点入出力のご要望です。
マウスやキーボードからの操作ではなく外部スイッチや機器からの信号でソフトウェアを動作させたい場合ですね。
それの方法について。

まず一番簡単で安価なのはプリンタポートを制御する方法です。
Win9x系では特に簡単でinp/outpでプリンタポートのIOアドレスを直接制御します。
NT系ではIOアドレスを直接制御は難しいのですが、それ用のDLLなどもあるので、それを使っちゃいます。
出力は8ビット、入力は5ビット使えます。ピン2〜9が出力で10〜13と15が入力。25がGND。機械や設定によって変わることもあります。
出力電流は大きくとれませんがLEDを光らせるくらいはできます。
入力が足りなければダイオードで分岐させればいくらでも増やせます。ボタン同時押しはできなくなりますけど。
同様の理屈でシリアルポートも制御できますが、ピン数が少ないですし、シリアルポートがあるPCには大抵プリンタポートもついているので実用的ではないです。
簡単にできるのですが、本来データ転送に使うポートをデジタルIOに使うというのも、無理やりIOアドレスをたたくというのも、 邪道というか間に合わせっぽくて私はあまり使用しません。

ちゃんとした手段で一番簡単なのは市販のIOインターフェイスを利用することでしょう。
CONTEC社製品などが有名です。PCIボードのタイプやUSB接続のものもあります。 リレーが乗ってるやつなんかもありますし、用途によってはスマートに使えます。
ただドライバやランタイムなどのインストールが必須ですし、使用機種限定でソフトウェアを作ることになるので、使うのは特注システムのときだけですね。

むし工房ではシリアル通信ができるIOボードを標準的に利用していました。市販のものもあるかもしれませんが簡単なので自前で設計します。
ワンチップマイコンPICとMAX232などのシリアルドライバが載ったやつです。 この基板をスイッチボックスやシャーシなどに入れればリモコンボックスになります。 これならシリアルコマンドさえ合えば機種を選ばず動作しますし、ドライバも不要です。
欠点としては基板動作のための電源がいることです。小さいリモコンから通信用電源用とケーブルが2本出てるのはどうも。 なのでUSBから電源だけを拝借してシリアルケーブルの未使用ピンに結線してボックス側に送るという方法で対処することが多かったのですが。

電源のためだけにUSBポートを使うのはこれも間に合わせっぽくてイヤですし、ノートPCなどでシリアルポート装備のものがなくなってきましたし、やはりUSBデバイスを。 USBもドライバが必要なデバイスが多かったのですが、近年ではHIDというOS標準添付のドライバで動くデバイスが増えてきたように思います。 wavior proで使用しているContour Shuttle Pro2やcartで使用しているxkeysというリモコンもHIDデバイスなので、 添付のユーティリティソフトをインストールせずに勝手にコマンド受信できるようにしています。
PICにもHID動作できるUSB機能がついたものが増えてきました。これを利用すればシリアル通信よりも簡単な回路設計でIOボードを製作できます。
現在むし工房システムで外部入出力するときはこのHID版IOボードが標準になります。