こんにちは、
今回も、USB接続のシリアルコンバーターREX-USB60Fです。
実際に当社のサポートセンターへの問い合わせがあったことを例にとって説明いたします。
お客様サポート内容パート2
― 疑問? ―
(1) シリアルインターフェイスをREX-USB60Fに変えたら全体的に処理が遅くなった。使用しているボーレートは同じなのになぜ?
(2) シリアルインターフェイスをREX-USB60Fに変えたらソフトウェアでタイムアウトエラーが発生するようになってしまったのはなぜ?
前回のブログにある「USB接続のシリアルコンバーターの動き」でも説明しましたが、受信したシリアルデータは、ドライバーのバッファへ送られるタイミングがあります。
常に受信バッファがいっぱいになる様な、連続的なデータがある場合は、時間のロスはありませんが、データが断片的に受信される様な場合は、FIFO内に一時的に溜められたままとなり、一定時間(デフォルト16ms)でドライバーのバッファへ送られることになります。
(1)の場合、データが断片的でFIFO内にデータが残ることが多く、通信が遅くなっていました。
(2)の場合、接続機器との通信プロトコルの応答(ENQ,ACK,STX+データ+ETX,ACK,EOT 等)で遅延が生じてしまい、タイムアウトのエラーとなっていました。
上記の状態が発生した場合、COMポートのプロパティで「ポートの設定」→「詳細設定」にあるBMオプションの待ち時間を小さくするとデータ転送時間を短縮するだけでなく、通信エラーも回避できる場合があります。
(ただし、待ち時間を短くするとUSBバスへ小さなデータが多く転送され、割り込み頻度が多くなり、システムへ負荷がかかります。)
いかがでしたか。同じシリアルインターフェイスでも、プログラムの作り方や環境の違いで落とし穴にはまる場合がありますので、お気をつけください。
関連記事
USBシリアルインターフェイスと他のシリアルインターフェイスの違い(その1)
この記事で紹介した製品