0

我正在用 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' 'Device id' 'msg' 'Check-sum'。

4

1 回答 1

0

我将忽略根本问题。

我无法控制硬件,因为这方面是外包的。

他包含一个命令,我可以在其中检查状态,所以当我收到不可靠的数组时,我现在可以轮询所有设备的状态。但是当所有设备都开始向我发送他们的状态时,我更有可能得到混乱的信息。

我只是丢弃不可靠的数据并希望最好。

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

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

欢迎任何建议或注释。

于 2012-09-07T12:24:52.603 回答