Чтение из 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;
        }

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


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

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

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