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