Я собираюсь записать программу, которая отображает данные на графике из датчика, подключенного к компьютеру. Значение датчика будет нанесенным на график как функция времени (значение датчика на оси y, время на оси X). Я хочу смочь добавить новые значения к графику в режиме реального времени. Что было бы лучшим, чтобы сделать это с в C++?
Править: И между прочим, программа будет работать на машине Linux
Напишите функцию, которая может построить std :: deque
так, как вам нравится, затем .push_back ()
значений от датчика в очередь по мере их поступления, и значения .pop_front ()
из очереди, если она становится слишком длинной для хорошего построения.
Конкретный характер вашей функции построения графиков зависит от вашей платформы, потребностей, эстетического восприятия и т. Д.
Можно использовать кольцевые буферы . В таком буфере вы считываете позицию и записываете позицию. Таким образом, один поток может записывать в буфер, а другой читать и строить график. Для большей эффективности вы обычно заканчиваете писать свой собственный фреймворк.
Размер такого буфера можно оценить, используя, например: скорость передачи данных от датчика (40 кГц?), размер одного датчика и интервал времени, который вы хотели бы оставить для построения графика.
Это также зависит от того, хотите ли Вы хранить такие данные в несжатом виде, хранить отображенный график - все это для дальнейшего автономного анализа. В среде без RTOS ваш "реальный" режим зависит от скорости обработки: как быстро вы можете получить/хранить/обработать и построить график. Обычно это близкая к реальному времени эффективность.
Я сделал то же самое для устройства, к которому был подключен датчик проницаемости через RS232.
Кстати, библиотек очень много, просто ищите их:
Я предполагаю, что вы развернете это приложение в ОСРВ. Но какова будет скорость передачи данных и каковы требования в реальном времени! Поэтому, как написано выше, простого решения может быть более чем достаточно. Но если у вас есть жесткие ограничения по времени, все кардинально меняется. Многопоточная конструкция с каналами передачи данных может решить ваши проблемы в реальном времени.
Вас особенно беспокоит аспект C ++? Я сделал данные с частотой 10 Гц или около того, не беспокоясь, поместив gnuplot в цикл чтения / построения / обновления или с помощью LiveGraph без проблем.
Вы можете проверить RRDtool , чтобы узнать, соответствует ли он вашим требованиям.
RRDtool - это высокопроизводительная система регистрации и построения графиков данных временных рядов.