Название: Прослушивание последовательного порта [Решено] Отправлено: sergek от Сентябрь 10, 2019, 10:54 Коллеги,
имеется система мониторинга оборудования. Среди этого оборудования есть устройство (бункерные весы), которое через интерфейс RS-485 циклически (с периодом 100 мс) выдает по своему протоколу обмена данные (например, остаток корма в бункере). Я же подключаюсь через последовательный порт к шине и считываю эти данные. Подключение к порту постоянное, т.е. открыл один раз порт и больше не закрываю, слушаю. Протокол обмена двоичный, данные организованы в виде кадров, т.е. есть начало, конец и CRC. Считывание данных из порта - асинхронное, по readyRead, примерно так: Код Теперь вопрос. Через некоторое время работы системы стал замечать, что показания весов, которые я считываю из порта, отстают от действительных значений, и это отставание приличное (от 5 до 10 минут). Это отставание я фиксирую по другим каналам (весы общаются с другой автоматикой, с которой я тоже получаю данные). Например, это можно видеть на 1-й картинке. Но если последовательный порт, через который я читаю данные, переоткрыть (я просто перезапускаю сервис получения данных), то данные синхронизируются. Это видно на 2-й картинке. Такое ощущение, что в буфере порта накапливаются данные и я их не все считываю. Но ведь буфер порта очищается после получения каждого кадра данных. В чем может быть проблема такого отставания данных, получаемых по шине от устройства? Название: Re: Прослушивание последовательного порта Отправлено: Old от Сентябрь 10, 2019, 11:06 Потому, что вы вычитываете данные по несколько пакетов измерения, а обрабатываете только первый. Потом вы вычитываете еще несколько, а обрабатываете всего один - первый очередной.
Проверьте это выводя в лог размер буфера responseBuffer, он будет постоянно расти. Организуйте цикл и разбирайте все принятые полные пакеты. Название: Re: Прослушивание последовательного порта Отправлено: sergek от Сентябрь 10, 2019, 11:07 Супер. Спасибо!
|