April 14, 2008

データストリームの終端をシリアルポートに

USBの工作は大好きですが、機器の制御といえば未だにシリアルポート(RS232等)やパラレルポート(IEEE1284)といったレガシーインターフェイスが活躍しています。そのため機器に添付されているPC側の制御ソフトは、そういったレガシーなインターフェイスのみが想定されており、最近のインターフェイスやLAN越しの制御がサポートされることはありません。もし機器のプロトコルを解析して自作のソフトウェアを作るとなると、いったい時間がどれだけかかるのでしょう? そこで何とかしてデータストリームの終端をシリアルポートにし、元からあるソフトウェア資産を活用しようという手段にうって出ることにしました。

まず考えたことはドライバの自作です。仮想的なシリアルポートが一方にできればよいわけで、それならばマイコンメーカー各社(例えばFTDIやSilicon Laboratories、Microchipなど)がそういったドライバを提供していることを思い出しました。ところがターゲットのマイコン側のファームウェアのソースは公開されている一方、ホスト側のソースはことごとく未公開という状況でした。ソースがあれば改造してなんとかできると思ったのですが、残念。

それならば、LAN越しにCOMポートを中継するソフトはどうだ、ということになりました。この類のソフトに対する需要はかなりあるようで、いたるところでシェアウェアを発見しました。しかしフリーでソースが公開されているものが、すぐには発見できませんでした(後で発見しました、後述)。これもまた残念。

結局行き着いたのが、ヌルモデムエミュレータを使う方法でした。ヌルモデムとはその名の通り何もしないモデムのことで、一端のポートに入れたデータが他方のポートから出て行く、逆もまた然りなデバイスのことです。これのエミュレータということは同一PC上にCOMポートが2個でき、双方のポート間でデータを中継してくれます。つまりは一方のポートを機器の制御ソフトから従前どおり指定し、もう一方のポートへは自作プログラムでデータを入出力してあげれば色々カスタマイズできるというわけです。
特にシリアルポートのデータの入出力はドライバを作るのと違ってとても簡単です。例えばM$ WindowsならCreateFileをしてRead/WriteFileをするだけなので、ファイルと同じ感覚で扱えます。

M$用ヌルモデムエミュレータも無償なものが発見できました。sourceforgeにあったcom0comというNull-modem Emulatorを利用しています。GUIを利用してポートの名前も任意に設定することができるので、例えば制御ソフト側のポート番号が決めうちだとしても対応可能です。勿論ソースも公開されているので安心です。
さらに同サイトではCOMポートをネットで中継するcom2tcpというソフトも作っていました。しかしながら今回の目的を達成するには、ドライバを作るよりかははるかにヌルモデムエミュレータを使ったほうが簡単できるということに気が付きましたので、こちらを見つけるのが後になって結果的には良かったのだと思います。

00:20 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/632
コメント
コメントする









名前、アドレスを登録しますか?
(次回以降コメント入力が楽になります)
  • 匿名でのコメントは受け付けておりません。
  • 名前(ハンドル名可)とメールアドレスは必ず入力してください。
  • メールアドレスを表示されたくないときはURLも必ず記入してください。
  • コメント欄でHTMLタグは使用できません。
  • コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
  • コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。