Не считываются полные данные последовательного порта в C #

Я использую. Net framework 4 и создайте приложение с графическим интерфейсом для последовательного порта на C #. В некоторых случаях объект SerialPort (порт) не получает все данные (я сравниваю его с осциллографом смешанных сигналов)

Например, если подключенное устройство отправляет:

0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09

Я могу получить:

0x00 0x01 0x02 0x03 0x04 0x08 0x09

Я пробовал разные коды с той же проблемой:

  • Используйте событие получения данных для заполнения буфера:

      private void dataReceived (объект-отправитель, SerialDataReceivedEventArgs e) {
     while (port.BytesToRead> 0) {
     byte [] newBytes = новый байт [port.BytesToRead];
     int LengthRead = port.Read (newBytes, 0, newBytes.Length);
     Array.Resize (ref newBytes, LengthRead);
     System.Buffer.BlockCopy (newBytes, 0, buffer, positionInBuffer, newBytes.Length);
     positionInBuffer + = newBytes.Length;
     }
     }
    
  • Цикл для ожидаемого количества байтов, в данном случае вызывающий исключение TimeoutException:

      while (port.BytesToRead  TimeOut) // ждем таймаута 1 с
     throw new TimeoutException ();
     }
    
     newBytes = новый байт [ожидаемый размер];
     LengthRead = port.Read (newBytes, 0, newBytes.Length);
     если (LengthRead! = newBytes.Length)
    throw new TimeoutException (); // или любое исключение, не имеет значения ...
    

Я попытался изменить размер ReadBufferSize, информацию о тайм-ауте ... но ничего не работает. Есть идеи?

5
задан Brian Tompsett - 汤莱恩 19 December 2015 в 20:03
поделиться