Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > TChart график в релаьном времени (как в SCADA)


Автор: becks 10.1.2011, 04:23
Добрый день. Такая проблема. В программе необходимо выводить график по, приходящим с приборам значениям температуры, т.е. как в SCADA-системах сдвигать ось X каждый раз влево при добавлении новой точки. Нашел в демках пример, абсолютно то что мне нужно, сделал тоже у себя, не сдвигает ось. Полагаю, что необходимо выставить, какое то свойство у TCharta. Подскажите как мне решить проблему. 

Второй вопрос, приходящие данные прыгают около значения 1000, как сделать так чтобы, если вновь пришедшее значение <1000, то отрезок от предыдущего до этого значения рисовался зеленым, а если >1000, то оранжевым. Правильно ли понимаю, что надо использовать 2 серии или можно обойтись одной?


Большое спасибо.

Автор: Alexeis 10.1.2011, 10:37
Цитата(becks @  10.1.2011,  05:23 Найти цитируемый пост)
Полагаю, что необходимо выставить, какое то свойство у TCharta

  Начало и конец оси Х. Правда есть подозрение что при большом числе точек оно начнет тормозить на добавлении очередной точки.

Автор: DimaDD 29.11.2011, 04:50
Цитата(becks @ 10.1.2011,  04:23)
Второй вопрос, приходящие данные прыгают около значения 1000, как сделать так чтобы, если вновь пришедшее значение <1000, то отрезок от предыдущего до этого значения рисовался зеленым, а если >1000, то оранжевым. Правильно ли понимаю, что надо использовать 2 серии или можно обойтись одной?

Можно обойтись одной серией, например при добавлении значений с помощью вот такой процедуры AddNewValue:

Код

procedure AddNewValue(x,y:double);

 const
  LineColors:array[0..1] of TColor=($0080FF,clGreen);

 begin
  TLineSeries(Chart1.Series[0]).AddXY(x,y,'',LineColors[byte(y<1000)]);
 end;


Предполагается, что серия тут только одна и что она типа TLineSeries, для TFastLineSeries разные цвета у одной серии не определить.

А тормозов при ОЧЕНЬ большом количестве значений можно, в принципе, избежать, ежели по мере сдвига окна (min/max по X) удалять первую точку серии, находящуюся уже на достаточно большом расстоянии от Xmin (и сохранять её в массив, а лучше дописывать в файл, на всякий пожарный). В общем, надо организовать работу с записью-чтением значений при смещениях окна по всему диапазону (в т.ч. при его скроллинге вручную)...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)