Страницы: 1
RSS
Построение графика-осцилограммы с плавным обновлением
 
Здравствуйте, подскажите пожалуйста, возможно ли реализовать следующее. Допустим, имеется ячейка на листе, на которую выводятся значения из сторонней программы (в примере для простоты генерируются случайрные числа).
Я хочу построить график этих значений от времени, за определенный промежуток. Это очень напоминает осцилограф, показывающий данные vs время. Для обновления и перестроения использую функцию Application.OnTime, но обновление экрана происходит дискретно, а хотелось бы сделать это более плавно. При занижении значения задержки - виснет Excel. Заранее спасибо за помощь, для удобства прилагаю файл-пример, и текущий вариант под спойлером.
Скрытый текст

Так же, буду благодарен любым советам по оптимизации. Спасибо.
Изменено: VSerg - 20.04.2017 23:43:05
 
Посмотрите вот эти ссылки.... Может это поможет.
https://msdn.microsoft.com/ru-ru/library/office/gg264416.aspx
http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=1&TID=46336
 
AAF, спасибо особенно за вторую ссылку. С ходу не взлетело, так же виснет Excel, попробую разобраться с функциями.
 
Осциллограф  :D
Код
Sub Calc()
Dim a, Rng As Range, refresh
Static flag As Boolean
If Sheets("Sheet1").Cells(1, 5) Then Application.OnTime Now + TimeSerial(0, 0, 1), "Calc"
If flag Then
  flag = False
  Exit Sub
End If
With Sheets("Sheet1")
  Set Rng = .Range("A2:A" & .Cells(1, 7) + 1)
  .ChartObjects("Chart 8").Chart.SetSourceData Source:=Rng
  Do
    DoEvents
    If Timer > refresh Then
      flag = True
      Application.EnableEvents = False
      .Cells(1, 3) = Rnd(1) 'при внешнем источнике нужно удалить
      a = Rng.Offset(-1, 0).Value
      Rng = a
      Application.EnableEvents = True
      If .Cells(1, 5) Then refresh = Timer + .Cells(1, 5).Value Else Exit Sub  'sec
    End If
Loop
End With
End Sub
 
AAF, спасибо за ваш вариант. Однако проблема с дискретностью и обновлением раз в секунду остается.
 
1. Какая частота вам нужна?
2. Каким образом предполагается использование данного файла. Я подразумеваю способ обновление ячейки с параметром.
Изменено: AAF - 21.04.2017 19:36:45
 
Полагаю, что для плавного отображения изменения графика, обновление должно происходить несколько раз в секунду. Скажем 10, для примера. Если будет найдено решение как это сделать, думаю, что смогу снизить или увеличить это значение при необходимости.
По поводу использования, в ячейку предполагается выгрузка значений из сторонней программы. С помощью Excel планиную накапливать эти значения, с попутным отображением графика изменения.
 
Т. е. сторонняя программа сама прописывает значение параметра в ячейку... Так?
Вы пробовали менять значение в E1 (так выкидной списочек в секундах)?
Изменено: AAF - 21.04.2017 19:46:55
 
Да, верно. И практически с любой частотой.
Изменено: VSerg - 21.04.2017 19:47:08
 
тогда обновление надо повесить на Sheets_Change, а если не обновилось, то по значению в E1
 
Да, и обновление в Excel с частотой меньше 0.1 сек. весьма условное понятие (типа, он для этого не предназначен)
 
А если обновление происходит очень часто ? Я хочу попробовать сделать вывод данных с нужной детализацией и возможностью изменения параметров детализации. Т.е. брать данные каждые одну десятую, пол, секунды, секунду или более. Проблема с обновлением чаще чем раз в секунду.
 
И лучше передачу переменной вести не в ячейку, а в переменную, тогда все проще можно реализовать. Я просто не знаю какими методами Вы собираетесь пользоваться для этого...
 
В детализации нет проблем и она устанавливается в G1.
Обновление данных в Е1.
Вопрос куда их складировать, чтоб брать оттуда, когда надо...?
И куда и как в Excel их складывать Вам удобно...?
 
А если забыть о моих методах, возможно ли сделать так, что ячейка А1 будет обновляться 50 раз в секунду, пусть даже заполняясь случайными значениями, а для графика значения из нее будут браться 10 раз в секунду ? И при этом избежать зависания Excel.
Изменено: VSerg - 21.04.2017 20:02:12
 
Да
А зачем обновлять чаще? Вы складываете данные в базу?
 
Я планирую складывать в базу результаты экспериментов, попутно добавляя возможность из просмотра в режиме OnLine. Поэтому хочу иметь возможность выбора частоты обновления.
 
Т. е. данный файл просто осциллограф, и в складировании данных участия не будет принимать?
 
Можно рассматривать так, да. Складирование я сам попробую добавать.
 
Нет, Вы меня не поняли, наверно... Тот поток данных..., как он обрабатывается, чтоб упасть в базу?
 
Возможно да, не понял. Возможно, это важная деталь, но сейчас мне кажется не существенной. Мой текущий вопрос:
Цитата
VSerg написал:
возможно ли сделать так, что ячейка А1 будет обновляться 50 раз в секунду, пусть даже заполняясь случайными значениями, а для графика значения из нее будут браться 10 раз в секунду ? И при этом избежать зависания Excel.
 
Обновление данных и обновление экрана не связаны, а так же диаграмма не связана диапазоном на листе
 
AAF, большое спасибо за помощь, ваше решение, это именно то, что я искал !
Страницы: 1
Читают тему
Наверх