Чтение 4-байтового массива, отправленного как отдельные байты

Я пишу это с 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' 'Идентификатор устройства' 'msg' 'Контрольная сумма'.

1 ответ

Решение

Я просто собираюсь игнорировать основную проблему.

У меня нет контроля над оборудованием, так как этот аспект был передан на аутсорсинг.

Он включает команду, с помощью которой я могу проверить статус, чтобы я мог, когда получаю хитрые массивы, просто опрашивать все устройства на предмет их статуса. Но когда все устройства начнут посылать мне свой статус, у меня больше шансов получить запутанную информацию.

Я просто отбрасываю сомнительные данные и надеюсь на лучшее.

Однако в свободное время я начал создавать простые устройства, чтобы я мог охватить и аппаратные части проектов.

Я думаю, что лучше всего будет использовать какой-нибудь HUB со всеми подключенными к нему устройствами?

Любые советы или заметки приветствуются.

Другие вопросы по тегам