Чтение из COM-порта, странная ошибка - C#
Формулировка задачи:
Работаю с СОМ-портом, алгоритм обмена следующий : послали команду - подождали 100 мс - посмотрели, что пришло в ответ.
В целом все работает, устройство отвечает на команды, но в ответе на одну из команд вылез косяк : устройство отправляет в ответ 22 байта, а в отладчике Visual Studio в буфере лежит 21 байт, причем судя по содержимому, не хватает 1-го байта! Т.е. есть нулевой и все, начиная со 2-го, а вот 1-го байта нет. Почему такое может быть?
Код прилагаю :
serialPort1.Write(test_buf, 0, 6);
System.Threading.Thread.Sleep(100);
if (serialPort1.BytesToRead > 0)
{
byte[] answer = new byte[(int)serialPort1.BytesToRead];
serialPort1.Read(answer, 0, serialPort1.BytesToRead);
}Решение задачи: «Чтение из COM-порта, странная ошибка»
textual
Листинг программы
/// <summary>
/// Чтение блока данных из устройства
/// </summary>
/// <param name="request">Запрос на чтение</param>
/// <param name="responseLength">Размер блока чтения</param>
/// <returns>Блок данных</returns>
protected byte[] GetResponse(byte[] request, int responseLength) {
byte[] response = null;
for (int i = 0; i < 5; i++) {
Port.DiscardInBuffer();
Port.Write(request, 0, request.Length);
for (int j = 0; j < 10; j++) {
Thread.Sleep(50);
if (Port.BytesToRead != responseLength) {
continue;
}
else {
response = new byte[responseLength];
Port.Read(response, 0, responseLength);
return response;
}
}
}
return null;
}