none
シリアル通信について(USBコンバータ使用時) RRS feed

  • 質問

  • 初心者です。こんな内容で恐縮ですが質問させていただきます。

    Visual Basicでシリアル通信のプログラムを作成しました。

    COMMポートに直接RS232Cケーブルを接続した場合は問題ないのですが。USBポートにシリアルコンバータを接続して通信した場合、実際に送信データが相手機器に届くまでに遅延が生じます。

    シリアルコンバータのレベル変換などの処理時間の影響では?と勝手に解釈しております。

    プログラムで、送信時にウェイトを入れてやると問題なくなりましたが、シリアルコンバータを使う場合はこんなものなのでしょうか?

    また、シリアルコンバータから全てのデータが掃き出されたことを確認する方法はないでしょうか?

    2011年4月14日 12:43

回答

  • USBシリアルコンバーターの処理時間は微々たる物で、USBのプロトコルが要因だと思います。

    USBシリアルの様な低速デバイスの場合、変換チップとホスト(PC)との通信は1msに1回以下です。
    まずホストからチップへ1msに1回だけ数十バイト等にまとめて転送が行われます。
    その後にチップからシリアル機器に設定してある通信速度で送信されます。
    応答がある場合はシリアル機器からチップに設定してある通信速度で受信されます。
    チップからPCのときも1msに1回ぐらいしか転送が行われません。
    (ピンの状態変化も同様に1msに1回しか転送されません。)

    よって、送受信を行うごとに都度2~3msの遅延が発生します。
    ゆえに、一文字ずつのハンドシェイクなんかしていると最悪のパターンで遅延が発生します。

    一応SerialPort.BytesToWriteプロパティで送信バッファにあるバイト数が見れます。
    ですが、USBドライバがチップのバッファを返す仕様でなければ単にドライバ内のバッファを返すだけで、チップのバッファ内のバイト数とは一致しないでしょう。

    2011年4月16日 6:05