读取作为单个字节发送的4字节数组

时间:2012-08-30 13:08:23

标签: c# serial-port bytearray byte binarystream

我用C#和.net 2.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;  
      }
    }
  }
}

问题是多个设备可以同时向我发送信息,这会导致某些数据以错误的数组结束。

发送给我的字节数组总是以十六进制' 2f'并以结账金额结束。

对于我能做些什么来处理这个问题的任何建议都将不胜感激。

[编辑]

抱歉,我知道我错过了重要信息。所有设备都连接到同一端口。字节数组按以下顺序排列: - ' 2f' '设备ID' ' MSG' '校验和'

1 个答案:

答案 0 :(得分:0)

我只是忽略了潜在的问题。

由于该方面外包,我无法控制硬件。

他包含一个我可以检查状态的命令,所以当我收到狡猾的数组时,我现在只需轮询所有设备的状态。但是当所有设备开始向我发送状态时,我更容易得到混淆信息。

我只是丢弃狡猾的数据并希望最好。

然而,我在业余时间开始构建简单的设备,所以我也可以覆盖项目的硬件部分。

我认为最好的选择是使用某种类型的HUB连接所有设备吗?

欢迎任何建议或说明。