Чтение из 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д