2017-08-31 6 views
0

デバイスのソフトウェアをシリアル接続でアップデートするファームウェアアップグレードプログラムがあります。これは、アップグレードを実行するクライアントに送信されます。テストでは、シリアルケーブルを接続しなくてもCOM1を選択して開くことができます。 接続が開いているかどうかをチェックし、例外をキャッチするコードがありますが、COM1が開いているので、デバイスに接続していなくてもプログラムは続行されます。アップグレードソフトウェアで間違ったシリアルポートを選択する処理

間違ったCOMポートを選択してクライアントを処理するにはどうすればよいですか?

説明がありますが、この問題がアプリで処理されていると、より安全に感じられます。

はここに私のシリアルポートのオープンコードです:半ば2000年代に

// Create a new SerialPort object. 
     SerialPort _serialPort; 
     _serialPort = new SerialPort(comPort, 115200, Parity.Even, 8, StopBits.One); 

     // for state machine 
     bool _continue = true; 

     do 
     { 
      try 
      { 
       _serialPort.Open(); 

       if (_serialPort.IsOpen) 
       { 
        Console.WriteLine(""); 
        Console.WriteLine("Serial Port is Open"); 
        Console.WriteLine(""); 
       } 
       else 
       { 
        MessageBox.Show("Serial Port is not open. Choose another port."); 
       } 
      } 
      catch (UnauthorizedAccessException ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
      catch (ArgumentOutOfRangeException ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
      catch (ArgumentException ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
      catch (IOException ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
      catch (InvalidOperationException ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 

     } while (!_serialPort.IsOpen); 
+2

ループを実行しても問題はありません。ポートを開こうとすると、例外がスローされた場合にユーザーに通知し、別のポートを選択させてください。 – Gusman

+1

また、何らかの形のハンドシェイクで何らかのプロトコルを使用しているとします。そのため、デバイスがX時間で応答しないとタイムアウトをプログラムできます。ポートを閉じてユーザーに通知します。 – Gusman

+0

IsOpenテストは決して失敗しません。その前にOpenを呼び出しました。あなたはこれをテストしていない、それは単に動作しません。シリアルポートは信頼性の高い「接続された」テストを行うにはあまりにも粗すぎます。 DsrHoldingプロパティは役立ちますが、保証はありません。ユーザーが正しいポート番号を選択できるようにするOptionメニューがあることを確認してください。 –

答えて

0

、私は、GPSデバイスをプログラムする会社で働いていました。一度に大量のデバイスをプログラムしなければならないので、USB経由でシリアル通信にプログラミングしました。デバイス自体にはリクエスト/応答タイプのメッセージを送信する方法があり、デバイスに接続されているポートを確認することができました。私はあなたがプログラミングしているデバイスを見て、それがそのコンセプトを持っているかどうかを見ます。その場合は、マシン上の任意のシリアルポートを反復することができます。

USBデバイスを使用してシリアルデバイスを使用することができる場合、USBデバイスは起動するたびに同じ順序でデバイスを検出しないため、シリアルデバイスを少し複雑にします。私たちのソリューションは、USBをシリアルデバイスに接続するUSB​​ポートに接続されたデバイスを調べることでした。それはあなたがそれがUSBからシリアルであると判断してシリアルポートを反復することを決定するためにデバイス情報を調べるので、少し原油であった。私たちは、USBに接続された複数の8ポートデバイスと16ポートデバイスを使用していました。

これが役に立ちます。

関連する問題