1

com3 のシリアル ポートとして接続されている USB デバイスがあります。これを使用してポートを開きます:

string[] ports = SerialPort.GetPortNames();
foreach (string portName in ports)
{
     try
     {
          var port = new SerialPort(portName, 256000);
          port.Open();
     }
     catch(Exception ex)
     {
          Console.WriteLine(ex.Message);
     }
}

ここで「ポートcom3が存在しません」というio例外が発生します。私はVS2012 + Win7x64Proを使用しています。Windowsを再起動しようとしましたが、すべて正常に機能しましたが、1回だけです。数日前、VS2012 + Win8 でこのプロジェクトを実行しましたが、すべてが素晴らしかったです。それはうまく機能し、例外は見つかりませんでした。同様の質問がたくさん見つかりましたが、この問題の解決策はありません。詳細情報: USB デバイスとして、ドライバー バージョン「ble-1.1.1-71」で BlueGiga BLED112 を使用します。どこで何が間違っているのか説明してください。

4

1 に答える 1

1

Bluetooth は、実際には開くことができない幻の仮想シリアル ポートを作成することがよくあります。さらに悪いシナリオでは、ペアリングされていて、ドライバーが存在しない Bluetooth アクセサリを探すのに 1 分を費やした後、開けません。

他のシリアル デバイスは、理由もなく開かれるとうまく応答しない場合があります (開くと、いくつかのシリアル ピンの電圧が変化します)。

解決策: によって返されたすべてのシリアル ポートGetPortNamesをループで開かないようにします。代わりに、デバイスが接続されているものだけを開きます。(これは、デバイス記述子の文字列を確認するか、最悪の場合、リストされているポートのどれが正しいかをユーザーに尋ねることで知ることができます)

おそらく、Bluetooth 無線を使用しようとしているだけですか? その場合、間違ったアプローチを使用しています。Bluetooth に関連付けられたシリアル ポートは、SPP (シリアル ポート プロファイル) として自身を識別するデバイスとペアリングするときに使用します。ラジオを操作するためではありません。そのためには、ソケット API を使用します。Windows ソケットを使用した Bluetooth プログラミング を参照してください。C# から、このようなものをラップするサードパーティ ライブラリの 1 つを使用する必要があります。

于 2013-05-08T20:19:05.097 に答える