2012-04-12 6 views
0

Мне нужно сделать в реальном времени отображение значений сканирования датчика. Я использую gnuplot для этой цели. До сих пор я могу общаться с gnuplot из моей программы на C++. Я пробовал некоторые образцы с использованием файла .DAT, и он работает. Теперь мое требование состоит в том, чтобы отображать последние 5 значений значений сканирования сенсора в одном графике для сравнения (это означает, что мне нужно сохранить 10 данных данных. 1 сканирование имеет два массива X и Y).gnuplot 2-D построение графика из массивов - в реальном времени

То, что я пытаюсь сделать, это сохранить последние 5 значений сканирования в формате столбца в файле .DAT, таком как это, где x, y - это мои два массива для каждого сканирования. Затем с использованием команды gnuplot "plot 'filename.dat' 1: 2 "" plot 'filename.dat' 2: 3 "и т. д.. Затем я должен переписать файл после каждых 5 сканирований.

X1 Y1 X2 Y2 X3 Y3 X4 Y4 X5 Y5 
2.3 3.4 6.6 3.6 5.5 6.5 8.5 5.5 4.5 6.6 
4.3 4.5 6.2 7.7 4.3 9.2 1.4 6.9 2.4 7.8 

Я хочу только подтвердить, прежде чем продолжить, это эффективно для обработки в реальном времени. Также есть ли какая-либо команда в gnuplot для прямого построения из двух массивов без использования .dat-файлов. Я не нашел его в своем поиске.

Любые предложения были бы полезными.

+0

Я не совсем уверен, что понимаю, почему вы сомневаетесь в двухмерных массивах. Кажется, у вас есть 2 1D массива ... – mgilson

ответ

2

Предположительно, вы общаетесь с gnuplot по трубам. Поскольку gnuplot является отдельным процессом, он не имеет доступа к вашему программному пространству и поэтому не может создавать ваши данные, не отправляя их каким-либо образом. Наиболее прямым способом является то, как вы упомянули (создайте временный файл, отправьте команду gnuplot для чтения/построения временного файла). Другой прямым способ заключается в использовании встроенных данных GNUPLOT ... Это работает так:

plot '-' using ... with ... 
    x1 y1 
    x2 y2 
    x3 y3 
    ... 
    e 

В этом случае файл данные записываются непосредственно в GNUPLOT трубу без необходимости временного файла. (для получения дополнительных сведений о псевдофайле '-' см. help datafile special-filenames в документации gnuplot).

Поскольку этот подход полезен в реальном времени - до тех пор, пока скорость рендеринга gnuplot будет быстрой по сравнению с временем между повторным рендерингом, он должен работать нормально. (Я думаю, что есть некоторые проблемы с памятью, если ваши массивы HUGE, но я сомневаюсь, что это ограничило бы любое реальное приложение только с 10 1-D массивами - и если массивы такие большие, вы, вероятно, не должны отправлять все дело в GNUPLOT так или иначе)

+0

Большое спасибо. Я использовал встроенную функцию для построения данных в реальном времени, и это работает. Но графики меняются слишком быстро, чтобы наблюдать. Теперь я собираюсь сделать вторую часть отображения последних 5 значений. – ShivShambo

1

Посмотрите на это: https://github.com/dkogan/feedgnuplot

это инструмент общего назначения для построения стандартного ввода. Он может, среди прочего, делать графики в реальном времени, как это происходит. Если у вас есть данные в формате, который не поддерживается напрямую, предварительно обработайте поток с помощью чего-то вроде awk или perl.

Смежные вопросы