5

会社を辞めた別のプログラマーから継承したコードに奇妙な問題があり、それを解決する方法についてもガイダンスが必要です。

問題はこれです。半定期的に、重複した USB 仮想通信ポートが作成されていることがわかっています。たとえば、私の PC では、デバイス マネージャーでポートを表示し、[非表示のデバイスの表示] を選択すると、同じデバイスに対して 2 つのエントリが表示されます。1 つは COM6 に、もう 1 つは COM8 にあります。

残念ながら、問題を確実に再現することはできません。ソフトウェアの実行中に誰かが USB ケーブルを素早く取り外して再接続した場合に発生する可能性があると思われますが、確認する必要があります。

私が知る限り、コードは誰もケーブルを抜かないことを想定して書かれています。SW が開始された後にこの状態を検出するロジックはまったくありません。また、ケーブルを再接続すると失敗します。ケーブルを再接続した後でも、読み取りエラーと書き込みエラーが静かに生成されます。再度機能させるには、プログラムを再起動する必要があります。

私はシリアルと USB の経験がほとんどなく、これを修正する方法についても少し途方に暮れています。

なぜこれが起こっているのか誰にも示唆できますか?


その他 関連する可能性がある場合の詳細:

USB シリアル コードは C++ DLL 内にあります

VS2008

FTDIBUS USB/シリアルドライバー

Windows XP および Win7

重複するレジストリ エントリのスクリーン ショット (選択したキーの値に注意してください!)

レジストリ エントリのスクリーン ショット

4

1 に答える 1

2

レイモンド・チェンのブログ、オールド・ニュー・シング、こちら、および上記のコメントで説明されているように:

要約する:

  • プラグを抜いて再度差し込んだデバイスは追跡されるため、毎回新しいデバイスとして扱われることはありません。
  • 通常、これはデバイスのシリアル番号を使用して、デバイスが同じものであるかどうかを検出します。
  • ただし、すべてのデバイスにシリアル番号があるわけではありません。これらのデバイスは、ベンダー ID と製品 ID が同じで、同じポートに接続されている場合にのみ、同じデバイスとして扱われます。それらが別のポートに接続されている場合、それらは別のデバイスとして扱われます。
  • 一部の製造元は、「シリアル番号」の「シリアル」という言葉を理解せず、すべてのデバイスにシリアル番号を付けるのではなく、すべてのデバイスに同じ番号を付けています...これに対処するために、これらのデバイスを強制的にシリアル番号がないように扱われます。

したがって、シリアル番号のないデバイス、または Windows レジストリでシリアル番号が重複しているとフラグが付けられているデバイスが、以前に接続されたことのないシリアル ポートに接続された場合、再接続ではなく、新しいデバイスとして扱われます。古いデバイス。これにより、説明したように「ゴースト」デバイスが作成されます。

一部の FTDI デバイスは、製造元がこの問題を抱えていると明確に指摘しています。

于 2012-06-18T16:35:21.137 に答える