Я использую. 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, информацию о тайм-ауте ... но ничего не работает. Есть идеи?