imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 12.01.2005, 12:09     # 1
Felan
Junior Member
 
Аватар для Felan
 
Регистрация: 19.05.2003
Адрес: Самара
Сообщения: 52

Felan Путь к славе только начался
TeeChart Pro v7 Оптимизация работы

Пишу программу для работы с внешним устройством. Надо строить графики принимаемых сигналов.
Использую TLineSeries, плюс несколько курсоров (TCursorTool), для того, чтобы отмечать граници и получать данные по точкам. Сдалал скользящее окно и два скроллбара (вертикальный и горизонтальный). Сроллбары свои, т.к. родные как-то не так работали, вобщем, мне не понравилось, я сделал посвоему, хотя за основу взят код из примере. так что он отличается только пересчетом позиции бегунка.
Проблема в том, что читаются только первые 10-15 тысяч точек. Потом Программа начиает резко тормазить и виснет совсем. Точнее не виснет, а отказывается реагировать на действия пользователя.

Пробовал отключать на время сбора данных курсоры, таже ерунда. Если заполнять серию вручную, то строится до 25 тысяч точек, но очень долго тормазит. БОльшего чилса точек дождаться не удалось.

Что еще можно покрутить? Может кто что посоветует? Отказаться от TeeChart предлогать только в том случае, если есть что-то действительно замечательное, ибо слишком много одобных вещей в ней.
__________________
Когда у оппонента кончаются аргументы, он начинает уточнять национальность.
Felan вне форума  
Старый 12.01.2005, 16:09     # 2
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
кто ж 250000 точек рисует? и нафига
точки пихаеш в массив
потом интерполируеш их на заданом промежутке и их выводиш ( при разрешении 1024*768 по X-оси придется показать максимум 1024 точки )
dyr_farot вне форума  
Старый 13.01.2005, 09:34     # 3
Felan
Junior Member
 
Аватар для Felan
 
Регистрация: 19.05.2003
Адрес: Самара
Сообщения: 52

Felan Путь к славе только начался
Цитата:
кто ж 250000 точек рисует? и нафига точки пихаеш в массив потом интерполируеш их на заданом промежутке и их выводиш ( при разрешении 1024*768 по X-оси придется показать максимум 1024 точки )
Это понятно. Дело в том, что никакой интерполяции нет. Вообще нет никакой обработки в реальном времени! Только скроллинг окна + небольшшие сервесные процедуры... Да, забыл, серия у меня подправленная немного, там в методе доабавления точки еще одна операция сложения есть. Но это все фигня, я думаю.

Точки я пихаю не в массив, а прямо в серию... есть там такой метод специальный...

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

А! Я кажется понял! Если в окне больше, чем 1024 точки, то получается, что в любом случае они обрабатываются, для того, чтобы убрать лишнее...
__________________
Когда у оппонента кончаются аргументы, он начинает уточнять национальность.

Последний раз редактировалось Felan; 13.01.2005 в 09:39.
Felan вне форума  
Старый 13.01.2005, 14:17     # 4
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
[quoteДело в том, что никакой интерполяции нет.[/quote]
в этом то и дело.

Цитата:
А! Я кажется понял! Если в окне больше, чем 1024 точки, то получается, что в любом случае они обрабатываются, для того, чтобы убрать лишнее...
и делается это ( вполне возможно ) не самыми эффективными методами

а делать можно двумя способами ( в зависимости от задач ):
1-й ( если нужно показать все точки ) -- точки просто интерполируются ( считай рисунок 250000*"хз сколько" _ужимается_ в 1024*768 ) ( это если все точки получаются в один момент ) если точки идут последовательно -- немного по-другому считать
2-й ( нужно показать точки _текущего момента_ ) в этом случае по твоим точкам двигается кадр 1024*768 и отображаются только точки, попавшие в кадр.

т.е. для дальнейшего разговора нужно уточнение задачи
dyr_farot вне форума  
Старый 13.01.2005, 17:22     # 5
Felan
Junior Member
 
Аватар для Felan
 
Регистрация: 19.05.2003
Адрес: Самара
Сообщения: 52

Felan Путь к славе только начался
Вобщем-то идея и так вполне понятна!

Есть окно 5000*300 (от-150 до 150). По вертикали все точки укладываются по определению. По горизонтале, когда новая поступившая точка выходит за пределы окна, оно сдвигается на 100 точек.

Смущает мне тут только одно. Я сам точки не ресую. Когда с порта приходит отсчет, он просто дабавляется к серии ser.AddY(nn), а вся перересовка вывполняется самим компонентом TeeChart. На событии серии ser.onAfterAdd стоит проверка, выходит ли новая точка за экран, и если да, то окно сдвигается... Собственно сейчас код вылвожу!

Код:
procedure TfrmDFS.MSCommComm(Sender: TObject);
//Событие при получении чего-нибудь в буфер порта
var
  v:array of Byte;
  f,nn:Integer;
begin
  If Self.MSComm.InBufferCount>0 then
    begin
      SetLength(v,Self.MSComm.InputLen);
      v:=Self.MSComm.Input;
      For F:=0 to length(v)-1 do
        Begin
          If v[F]>127 then nn:=v[F]-256
            else nn:=v[F];
          Self.serCurrentSeries.AddY(nn); // Вот тут добавляем точки
        End;
    end;
end;
Код:
procedure TDefSeriesMng.OnSerTestAfterAdd(Sender: TChartSeries;
  ValueIndex: Integer);
//Смещение окна, если график выходит за правую границу
begin
  If Sender.GetHorizAxis.Maximum<Sender.XValues.MaxValue then
    With Sender.GetHorizAxis do
      Begin
        maximum:=maximum+100;
        minimum:=minimum+100;
      end;
end;
Вот собственно и весь код, который относится к добавлению и проресовке... Все остальное делается автоматически...
__________________
Когда у оппонента кончаются аргументы, он начинает уточнять национальность.
Felan вне форума  
Старый 13.01.2005, 17:27     # 6
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
можеш сделать так:
( простейший вариант )
при получении новой точки добавлять ее не в Chart, а в массив ( предварительно удалив первую и потом ( очистив chart ) дать ему все эти точки
dyr_farot вне форума  
Старый 27.01.2005, 10:06     # 7
Felan
Junior Member
 
Аватар для Felan
 
Регистрация: 19.05.2003
Адрес: Самара
Сообщения: 52

Felan Путь к славе только начался
Все оказалось несколько проще. Выловил пару глюков в функции чтения из порта, и немного изменил настройки MSСomm32. В итоге, работае хоть до полумиллиона точек... правда график не так плавно движется, но это терпимо.
__________________
Когда у оппонента кончаются аргументы, он начинает уточнять национальность.
Felan вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 22:32.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.