0

私は VB.NET SerialPort クラスを使用しており、ハードウェア デバイスの構成を表すオブジェクトのコレクションを作成して、構成を変更し、USB 仮想シリアル ポートを介してデバイスを更新できるようにしました。これらのオブジェクトはポリモーフィックな性質を持ち、各デバイスは最終的に COM IO を処理する CmdSender と呼ばれるクラスから継承します。最終的にすべての既知のバグを削除し、アプリケーションを別の PC (.NET ランタイムがインストールされているが Visual Studio はインストールされていない) に公開すると、コードから SerialPort.Write(string) を呼び出すと、キャッチできない例外がスローされることがあります。

これはエラー メッセージであり、スタック トレースの一番上の部分です。

System.IO.IOException: システムに接続されているデバイスが機能していません。

System.IO.Ports.InternalResources.WinIOError(Int32 errorCode、文字列 str) で System.IO.Ports.SerialStream.EndWrite(IAsyncResult asyncResult) で System.IO.Ports.SerialStream.Write(Byte[] 配列、Int32 オフセット、 Int32 カウント、Int32 タイムアウト) System.IO.Ports.SerialPort.Write(String text) at TDDevice.CmdSender.SendPure(String Cmd, Boolean AddCheckSum)

この問題の解決策がオンラインで見つかりません。また、この例外がスローされた場合、アプリケーションを単純に再起動することはできませんが (それでもまだ理想的ではありません)、USB COM デバイスを取り外してマシンに再挿入する必要があることにも注意してください。これを行わないと、私のアプリケーションは COM ポートがないことを警告します見つけることができます(私が組み込んだチェック)、これは.NETがこの後COMポートと対話できないことを示しています.これが発生した後も他のAPIがポートを使用できるかどうかを確認するためにまだテストしていません.問題が .NET だけに影響するのか、それともポート自体に影響するのか (ただし、デバイス マネージャーにはまだポートが表示されます)。

私の質問は、なぜこれが起こっているのか、どうすれば防ぐことができるのでしょうか? (うまくいけば翻訳できるので、C#での回答は問題ありませんが、VBをいただければ幸いです)

4

1 に答える 1

0

PICマイクロコントローラと通信するシリアルポートで少し作業しましたが、このようなエラーが発生しました。当時の私の解決策は、データを送信した後にポートを閉じ、再度送信する必要があるときに再度開くことでした。USBコンバーターなので、デバイスがスリープモードなどに入る可能性があると思います。

 sendData(){
     open port
     send data
     wait for response if needed
     close port
    }

コードを投稿していなくて申し訳ありませんが、アイデアはわかります

于 2015-04-23T15:57:39.430 に答える