現在SDD330コントローラはUSBにてパソコンにつないでいます。
SD330を遠隔で操作しようとするとSD330をコントロールしているPCにリモートアクセスして。そのPCのデスクトップより制御するようになります。
コントロールPCをリモートデスクトップから操作します。
これでも良いのですがコントロールPCを単なるシリアル通信のトンネルにして遠隔のPCから直接操作できるような仕組みを考えました。
コントロールPCにUSBインターフェースでSD330コントローラは繋がっています。
そこでコントロールPCでTCP/IPに変換し送信、遠隔のPCでTCP/IPからシリアル通信に変換しあたかもSD330コントローラが直接つながっているようにします。
コントロールPCのUSBインターフェースはUSB仮想COMポートとしていますが、遠隔のPCではLAN仮想COMポートになります。いわゆる
しかしこの方法には欠点があります。遅延の問題です。SD330コントローラからのデータは一旦コントロールPCのバッファに入ります。次にデータは送られて遠隔PCのバッファに入ります。SD330コントローラからは921.6kbpsで送出されます。PC間はLANですのでそれなりに早いです。遠隔PCの仮想COMポートはSD330コントローラに合わせ921.6kbpsです。
Windows の.NETのプログラムの作り方にも拠りますがどれくらいのレスポンスになるのでしょうか。
この遅延を嫌うならSD330コントローラの出口をUSBでなくシリアル出力にしてそこにメディアサーバー(Serial-TCP/IP)を付けます。そのままLANになります。
921.6kbpsをサポートしている製品で手ごろな価格なのがLantronix製デバイスサーバです。同社のXport-XEは3.3Vのシリアル通信ですので300〜920Kbpsをサポートしています。多くのRS232Cタイプはラインドライバーの関係でほとんどが最高115k bpsです。これらの機器はMCUで処理しますのでWindows より格段に速くなります。また1:多が可能なので1台のPCから複数のシリアル機器を制御できます。
とりあえずVB.NETで簡単に作ってみます。
今回のソフトは、コントロールPCはサーバーとして先に起動し遠隔PC(クライアント)からの接続要求を待ちます。接続が確立したらTCP/IPの受信ループに入ります。TCP/IPが受信するとそのままシリアルにデータを送信します。
シリアルの方は受信イベントが発生の都度SD330コントローラから受信しそのままTCP/IPに送信します。
遠隔PCの方はクライアントなのでプログラム起動と同時に接続要求を出します。接続が確立したらTCP/IPの受信ループに入ります。TCP/IPが受信するとそのままシリアルにデータを送信します。
シリアルの方は受信イベントが発生の都度SD330コントローラから受信しそのままTCP/IPに送信します。