Коллеги,
имеется система мониторинга оборудования. Среди этого оборудования есть устройство (бункерные весы), которое через интерфейс RS-485 циклически (с периодом 100 мс) выдает по своему протоколу обмена данные (например, остаток корма в бункере). Я же подключаюсь через последовательный порт к шине и считываю эти данные. Подключение к порту постоянное, т.е. открыл один раз порт и больше не закрываю, слушаю. Протокол обмена двоичный, данные организованы в виде кадров, т.е. есть начало, конец и CRC. 
Считывание данных из порта - асинхронное, по readyRead, примерно так:
C++ (Qt)
    m_serialPort = new QSerialPort(this);
    QObject::connect(m_serialPort, &QSerialPort::readyRead, this, [this]() {
        responseBuffer += m_serialPort->read(m_serialPort->bytesAvailable());
 
        int begin = responseBuffer.indexOf(beginFrame);
        int end   = responseBuffer.indexOf(endFrame, begin);
 
        if ((begin < 0) || (end < 0)) {
            return;
        }
 
        QByteArray response = responseBuffer.mid(begin, end-begin+endFrame.size());
        responseBuffer.remove(0, end+endFrame.size());
	...
        m_serialPort->clear(QSerialPort::AllDirections);
	...
 
Теперь вопрос. Через некоторое время работы системы стал замечать, что показания весов, которые я считываю из порта, отстают от действительных значений, и это отставание приличное (от 5 до 10 минут). Это отставание я фиксирую по другим каналам (весы общаются с другой автоматикой, с которой я тоже получаю данные). Например, это можно видеть на 1-й картинке.
Но если последовательный порт, через который я читаю данные, переоткрыть (я просто перезапускаю сервис получения данных), то данные синхронизируются. Это видно на 2-й картинке.
Такое ощущение, что в буфере порта накапливаются данные и я их не все считываю. Но ведь буфер порта очищается после получения каждого кадра данных.
В чем может быть проблема такого отставания данных, получаемых по шине от устройства?