ReadFile теряет данные

119
02 июня 2021, 02:30

Есть программно-аппаратный комплекс, состоит из внешнего устройства и ПК с управляющей программой. Связь между устройством и ПК осуществляется по RS232 (точнее USB-RS232). Устройство пишет данные в ПК пачкой 10кБайт, программа получает пачку не полностью, число пропадающих байт варьируется между пусками. Чтение делаю с помощью ReadFile побайтно. При получении данных считаю количество и отправляю снова читать. Фактически получается что буфер вычитан полностью, но данные не все.

В линии RS232 только Rx, Tx, SGND.

Если пачка 15кбайт то программа получает данных больше 10кбайт стабильно, но все равно не все.

HTerm вроде все вычитывает.

Порт настроен с помощью SetCommState 115200, 8 бит, 1 стоп-бит, четности нет, контроля линий нет.

Работа с COM-портом в C++ видел.

Вопрос собственно в следующем. Полагая что устройство все таки отдает все что положено, где могут теряться данные?

В моем случае видимо какой-то глюк с буфером приема. Увеличение размера принимающего буфера с помощью SetupComm решило проблему.

SetupComm

Функция SetupComm устанавливает размеры (в байтах) очередей приема и передачи.

Serial небольшая библиотека для работы с последовательным портом в Windows, созданная в результате решения вопроса.

Answer 1

Кроме настройки порта, стоит установить большую длину очереди с помощью функции SetupComm.

Размер по умолчанию порядка 1024, Вам нужно увеличить, видимо, до размера пакета.

READ ALSO
Как убрать анимацию?

Как убрать анимацию?

Здравствуйте, как избавиться от анимации?

91
Iframe emded не загружается на маленьком разрешении

Iframe emded не загружается на маленьком разрешении

На сайте используется следующий код:

77
Растянуть несколько div в div 100% css

Растянуть несколько div в div 100% css

Подскажите пожалуйста, как растянуть дочерние div в родительском div который имеет width: 100%;Таблица не подходит

106
Конвертация int to uint

Конвертация int to uint

если прибавлять или вычитать при том что полученное число будет положительным, то никаких проблем, но если при вычитании на выходе число...

119