2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Построение графика в реальном времени
Сообщение25.03.2015, 20:32 


10/05/09
78
Есть непрерывно обновляющийся буферный файл с массивами данных, которые при определенном его заполнении сбрасываются в другой файл, тем самым опустошая этот буферный файл, и дальше всё повторяется. Нужно отрисовывать определенное количество последних данных в реальном времени.

Пока что действовала такая схема, просто отрисовывалось содержимое буферного файла в gnuplot'е:
plot "bufferfile" w l
replot
pause 1
reread

При этом масштаб по абсциссам асболютно невыдержан, непрерывно меняется вследствие увеличения числа точек, а когда накапливается сто тысяч точек файл опустошается.

Как подойти к вопросу?

 Профиль  
                  
 
 Re: Построение графика в реальном времени
Сообщение26.03.2015, 03:31 
Заслуженный участник


27/04/09
28128
Если советов получше не будет, можно написать программу, которая читает этот файл и пишет в другой файл, в котором одно и то же число записей. Она будет помнить уже исчезнувшие из файла точки. Разумно сделать в ней круговой буфер — так проще будет добавлять новые точки, заодно затирая именно те старые, которые больше не нужны. При этом даже не обязательно парсить числа — можно хранить их как строки; так и быстрее будет, если памяти хватает.

 Профиль  
                  
 
 Re: Построение графика в реальном времени
Сообщение26.03.2015, 08:53 


01/12/11

1047
Adventor в сообщении #995612 писал(а):
Есть непрерывно обновляющийся буферный файл с массивами данных, которые при определенном его заполнении сбрасываются в другой файл, тем самым опустошая этот буферный файл, и дальше всё повторяется. Нужно отрисовывать определенное количество последних данных в реальном времени.

Пока что действовала такая схема, просто отрисовывалось содержимое буферного файла в gnuplot'е:
plot "bufferfile" w l
replot
pause 1
reread

При этом масштаб по абсциссам асболютно невыдержан, непрерывно меняется вследствие увеличения числа точек, а когда накапливается файл опустошается.

Как подойти к вопросу?

Переменная l в операторе plot "bufferfile" w l - это, как я понял, длина записи в файле. Задайте её константой, равной сто тысяч (точек).

 Профиль  
                  
 
 Re: Построение графика в реальном времени
Сообщение26.03.2015, 10:51 
Заслуженный участник


09/05/12
25179
Adventor в сообщении #995612 писал(а):
При этом масштаб по абсциссам асболютно невыдержан, непрерывно меняется вследствие увеличения числа точек,

Воспользуйтесь командой вроде plot [0:10] "bufferfile" w l. В квадратных скобках - диапазон значений абсцисс, тогда проблем с меняющимся масштабом не будет. Если добавить вторую пару чисел в отдельных квадратных скобках, будет фиксированный масштаб еще и по ординате.

Adventor в сообщении #995612 писал(а):
а когда накапливается сто тысяч точек файл опустошается.
Тут, пожалуй, лучший вариант - то, что предложил arseniiv.

Skeptic в сообщении #995797 писал(а):
Переменная l в операторе plot "bufferfile" w l - это, как я понял, длина записи в файле.
Нет, это не переменная, а указание, что точки графика нужно соединять линией.

 Профиль  
                  
 
 Re: Построение графика в реальном времени
Сообщение26.03.2015, 11:43 


10/05/09
78
arseniiv в сообщении #995758 писал(а):
Если советов получше не будет, можно написать программу, которая читает этот файл и пишет в другой файл, в котором одно и то же число записей. Она будет помнить уже исчезнувшие из файла точки. Разумно сделать в ней круговой буфер — так проще будет добавлять новые точки, заодно затирая именно те старые, которые больше не нужны. При этом даже не обязательно парсить числа — можно хранить их как строки; так и быстрее будет, если памяти хватает.

Вот о таком я уже и задумался, чтобы сделать отдельный файл постоянной длины с обновляемыми точками, который уже отрисовывать в gnuplot. Но как реализовать, придется подумать. Кольцевой буффер это наверно идея.

-- Чт мар 26, 2015 12:48:14 --

Pphantom в сообщении #995834 писал(а):
Adventor в сообщении #995612 писал(а):
При этом масштаб по абсциссам асболютно невыдержан, непрерывно меняется вследствие увеличения числа точек,

Воспользуйтесь командой вроде plot [0:10] "bufferfile" w l. В квадратных скобках - диапазон значений абсцисс, тогда проблем с меняющимся масштабом не будет. Если добавить вторую пару чисел в отдельных квадратных скобках, будет фиксированный масштаб еще и по ординате.

Это не работает, поскольку точки только добавляются в буферный файл и не исчезают(с его начала). Таким образом, будет отрисовываться только выбранная интервалом часть файла, а когда точки выйдут за пределы интервала, на графике нового ничего не будет.

 Профиль  
                  
 
 Re: Построение графика в реальном времени
Сообщение26.03.2015, 12:28 
Заслуженный участник


09/05/12
25179
Adventor в сообщении #995866 писал(а):
Это не работает, поскольку точки только добавляются в буферный файл и не исчезают(с его начала). Таким образом, будет отрисовываться только выбранная интервалом часть файла, а когда точки выйдут за пределы интервала, на графике нового ничего не будет.
Тогда можно написать дополнительный скрипт (или добавить такую функциональность в то, что будет работать с буферным файлом), который будет генерировать команду для gnuplot, корректируя диапазон абсцисс.

 Профиль  
                  
 
 Re: Построение графика в реальном времени
Сообщение26.03.2015, 14:25 


01/12/11

1047
Adventor в сообщении #995866 писал(а):

Pphantom в сообщении #995834 писал(а):
Adventor в сообщении #995612 писал(а):
При этом масштаб по абсциссам асболютно невыдержан, непрерывно меняется вследствие увеличения числа точек,

Воспользуйтесь командой вроде plot [0:10] "bufferfile" w l. В квадратных скобках - диапазон значений абсцисс, тогда проблем с меняющимся масштабом не будет. Если добавить вторую пару чисел в отдельных квадратных скобках, будет фиксированный масштаб еще и по ординате.

Это не работает, поскольку точки только добавляются в буферный файл и не исчезают(с его начала). Таким образом, будет отрисовываться только выбранная интервалом часть файла, а когда точки выйдут за пределы интервала, на графике нового ничего не будет.

Сделайте plot [0:10000] "bufferfile" w l.

 Профиль  
                  
 
 Re: Построение графика в реальном времени
Сообщение27.03.2015, 14:21 


10/05/09
78
Skeptic в сообщении #995920 писал(а):
Сделайте plot [0:10000] "bufferfile" w l.

Ну говорю же что это не работает. Точки от начала файла не меняются. Только добавлются новые, пока при достижении определенного количества содержимое файла не опустошится.

 Профиль  
                  
 
 Re: Построение графика в реальном времени
Сообщение27.03.2015, 15:05 


01/12/11

1047
Adventor, у вас был вопрос был по масштабу по осям абсцисс. Масштаб сохраняется?

 Профиль  
                  
 
 Re: Построение графика в реальном времени
Сообщение27.03.2015, 22:54 
Аватара пользователя


31/10/08
1244
Для того что-бы ответить на вопрос, его надо задать. А автор этого не сделал.

 Профиль  
                  
 
 Re: Построение графика в реальном времени
Сообщение28.03.2015, 03:09 
Заслуженный участник


27/04/09
28128
Это вы зря — вполне задал.

 Профиль  
                  
 
 Re: Построение графика в реальном времени
Сообщение28.03.2015, 08:21 
Аватара пользователя


31/10/08
1244
Для arseniiv и Adventor,
Читаем как надо задавать вопросы
http://rsdn.ru/info/howtoask.xml

1) Название темы не осмысленно. Если судить по названию проблема со временем. Она что тормозит или слишком быстро выводится или не правильно синхронизируется?
2) Проблема не описана, дано только описание кода. И ответы большинства мне напоминают лечения по фотографии.
3) Описывайте симптомы проблемы, а не свои предположения.
Проблемы с масштабом? Так фиксируйте масштаб и будет вам счастье. Либо плавно меняйте.

 Профиль  
                  
 
 Posted automatically
Сообщение28.03.2015, 17:23 
Админ форума
Аватара пользователя


19/03/10
8952
 i  Тема перемещена из форума «Computer Science» в форум «Околонаучный софт»

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group