Чтение из COM-порта, странная ошибка - C#

Узнай цену своей работы

Формулировка задачи:

Работаю с СОМ-портом, алгоритм обмена следующий : послали команду - подождали 100 мс - посмотрели, что пришло в ответ. В целом все работает, устройство отвечает на команды, но в ответе на одну из команд вылез косяк : устройство отправляет в ответ 22 байта, а в отладчике Visual Studio в буфере лежит 21 байт, причем судя по содержимому, не хватает 1-го байта! Т.е. есть нулевой и все, начиная со 2-го, а вот 1-го байта нет. Почему такое может быть? Код прилагаю :
Листинг программы
  1. serialPort1.Write(test_buf, 0, 6);
  2. System.Threading.Thread.Sleep(100);
  3. if (serialPort1.BytesToRead > 0)
  4. {
  5. byte[] answer = new byte[(int)serialPort1.BytesToRead];
  6. serialPort1.Read(answer, 0, serialPort1.BytesToRead);
  7. }

Решение задачи: «Чтение из COM-порта, странная ошибка»

textual
Листинг программы
  1. /// <summary>
  2.         /// Чтение блока данных из устройства
  3.         /// </summary>
  4.         /// <param name="request">Запрос на чтение</param>
  5.         /// <param name="responseLength">Размер блока чтения</param>
  6.         /// <returns>Блок данных</returns>
  7.         protected byte[] GetResponse(byte[] request, int responseLength) {
  8.             byte[] response = null;
  9.             for (int i = 0; i < 5; i++) {
  10.                 Port.DiscardInBuffer();
  11.                 Port.Write(request, 0, request.Length);
  12.                 for (int j = 0; j < 10; j++) {
  13.                     Thread.Sleep(50);
  14.                     if (Port.BytesToRead != responseLength) {
  15.                         continue;
  16.                     }
  17.                     else {
  18.                         response = new byte[responseLength];
  19.                         Port.Read(response, 0, responseLength);
  20.                         return response;
  21.                     }
  22.                 }
  23.             }
  24.             return null;
  25.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут