0

私はこれをC#と.net2.0で書いています

デバイスから4バイトの配列が個別のバイトとして送信されています。

私は現在これを次のように読んでいます

while(m_ReadThreadisRunning)
{       
  if(canRead)
  {
    lock (m_Serialport)
    {
      try
      {
        //Check if data read needs reset
        if(DataRead[3] != 0)
        {
          m_ReadBuffer.Add(DataRead);                       
          DataRead = new byte[4];   
          ReadCounter = 0;
        }

        int ByteRead = m_Serialport.ReadByte();     
        Debug.Log("Byte : " + ByteRead);

        try
        {
          DataRead[ReadCounter] = ConvertIntToByte(ByteRead);
        }
        catch(Exception e)
        {
          Debug.Log("Error when setting element in DataRead");
        }
        finally
        {
          if(ByteRead != 0)
            ReadCounter ++; 
        }
      }
      catch(TimeoutException e)
      {
      }
      catch(Exception e)
      {
          ReadCounter = 0;  
      }
    }
  }
}

問題は、複数のデバイスが同時に情報を送信する可能性があり、これにより一部のデータが間違った配列になってしまうことです。

私に送信されるバイト配列は、常に16進数の「2f」で始まり、チェックサムで終わります。

これを処理するために私ができることについてのアドバイスをいただければ幸いです。

[編集]

申し訳ありませんが、重要な情報を見逃してしまうことはわかっていました。すべてのデバイスが同じポートに接続されています。バイト配列は次の順序です:-'2f''デバイスID''msg''チェックサム'。

4

1 に答える 1

0

根本的な問題を無視します。

その側面は外部委託されていたので、私はハードウェアを制御できません。

彼にはステータスを確認できるコマンドが含まれているので、危険なアレイを受け取ったときに、すべてのデバイスのステータスをポーリングするだけで済みます。しかし、すべてのデバイスがステータスを送信し始めると、混乱した情報を受け取る可能性が高くなります。

危険なデータを破棄して、最高のものを期待しています。

ただし、プロジェクトのハードウェア部分もカバーできるように、暇なときに簡単なデバイスの作成を開始しました。

最善の策は、すべてのデバイスが接続されたある種のHUBを使用することだと思いますか?

アドバイスやメモは大歓迎です。

于 2012-09-07T12:24:52.603 に答える