Отображение данных в реальном времени с Qt, QWT и переполнением стека

Я совершенно новичок в Qt, QWT и обладаю базовыми знаниями в C ++.

В соответствии с проектом, который я получил, мне нужно получить некоторые данные, данные датчиками на караване, такие как напряжение и ток солнечной панели, температура, влажность и так далее. Все эти данные собираются некоторыми датчиками и собираются устройством DAI NI 6229.

До сих пор я просто дал боковые фонари. Теперь я подхожу к реальной проблеме.

Я хочу получить данные, полученные с устройства DAQ, и показать, построить, записать и войти в программу.

Я решил использовать C ++, Qt и QWT. И, конечно же, API NIDAQMX для получения данных с устройства DAQ.

Я уже частично разработал графический интерфейс, но момент, когда я застрял, — это настоящая рабочая часть моего кода.

Я не знаю, как реализовать все эти вещи с учетом критериев производительности, и мне действительно нужно руководство.

Как мне обращаться со сбором данных?

Как я должен построить данные, которые я получаю?

Должны ли они быть разделены разными потоками или какой-то другой структурой?

Собирает ли почти 10 или 12 каналов данных и отображает их в режиме реального времени, вызывает разумные проблемы с производительностью? Если так, как я могу справиться с этим?

Заранее спасибо.

1

Решение

Если вы пишете простую программу для работы с NI 6229, вам необходимо установить приоритет операций: построение графика или запись данных.
В большинстве случаев хранение данных является наиболее важной операцией.
В своей практике я использовал следующий алгоритм:

  • 1 поток GUI (общий UI + построение графиков), 1 поток для сбора данных для каждого устройства, 1 поток для записи данных.
  • Поток для сбора данных запускается каждый раз в dT (мы спрашиваем устройство: — сколько данных готово? — 10000 образцов — хорошо, дай мне это). Поскольку частота дискретизации NI 6659 меньше 1 мс / с, я думаю, что значение dT будет примерно 50-200 мс (зависит от интерфейса).
  • После считывания данных с устройства я отправляю данные в поток для записи, используя для этого очередь.
  • То же самое с прорисовкой. Я использую qwt с децимацией данных (но вы должны сохранять пики). У Qwt есть неплохой пример для этого. Также вы можете найти решения для повышения производительности печати. Мой совет — разбивать диаграммы на группы, например, одна группа может содержать 4 диаграммы.

Это решение только для простых программ, а не для ОС реального времени.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]