Refreshdata - every 5 seconds

TeeChart VCL for Borland/CodeGear/Embarcadero RAD Studio, Delphi and C++ Builder.
Post Reply
Stevez
Newbie
Newbie
Posts: 5
Joined: Thu May 29, 2008 12:00 am

Refreshdata - every 5 seconds

Post by Stevez » Wed Jun 04, 2008 11:16 am

Using TDBCHart v8.02 I have a dataset connected to 4 TCHarts and collect approx 20,000 datpoints a day (every 5 seconds), which are displayed as 3D Lines.

I add to the dataset as I collect data and call Refreshdata after each datapoint. As you can guess at the begining the graph updates quickly, but as the data grows it takes more and more time to graph the data.

Instead of updating every datatpoint I am using a timer to call RefreshData every 10 seconds and only refresh the graph that is currently showing.

Is there a better way?
Thank you for your time.

Narcís
Site Admin
Site Admin
Posts: 14730
Joined: Mon Jun 09, 2003 4:00 am
Location: Banyoles, Catalonia
Contact:

Post by Narcís » Wed Jun 04, 2008 1:21 pm

Hi Stevez,

Yes, I recommend you to have a look at the Real-time Charting article here and the speed examples at the new features demo, available at TeeChart's program group.

Hope this helps!
Best Regards,
Narcís Calvet / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

Stevez
Newbie
Newbie
Posts: 5
Joined: Thu May 29, 2008 12:00 am

Post by Stevez » Wed Jun 04, 2008 1:40 pm

Thanks Narcis. We are looking to maintain the 3D characteristics and the article you directed me towards deals with TFastLineSeries, TPointSeries.

Is there a fast version of the 3D line?
We collect data daily and the amount of data linearly increases the time it takes toi draw a graph. I thought of using a timer and refreshing the graph every 30 seconds. My problem is that near the end of the day it takes 700msec to draw the graph...

The article recommends streamlining features, which do you recommend for the 3D line.
Thanks again.

Narcís
Site Admin
Site Admin
Posts: 14730
Joined: Mon Jun 09, 2003 4:00 am
Location: Banyoles, Catalonia
Contact:

Post by Narcís » Wed Jun 04, 2008 1:45 pm

Hi Stevez,

In that case I recommend you to use series style you wish and try to use as many hints in the article as possible. All of them are for improving performane.
Best Regards,
Narcís Calvet / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

Stevez
Newbie
Newbie
Posts: 5
Joined: Thu May 29, 2008 12:00 am

Speeding Up a 3D graph when you know your data

Post by Stevez » Mon Jun 09, 2008 3:57 pm

Hi,

A followup on my last question and trying to squeeze out some performance. I need some feedback and validation

What I know:

My data sampled sequentially and time stamped, so there is no need for the controller to order the data :
Series1.XValues.Order := loNone;
Series1.XValues.Order := loNone;

I know min max values some graphs [0%..100%] oters [-100%..100%]
So in Controller at design time I set
Chart.Axis.LeftAxis.Automatic = False & Min=0, Max =100
I have bottom Axis.Auto = True

Measured data is sampled on a 200msec timer and stored to a CSV file.
When someone selectes a device to monitor, if it is not the current device
I load the chart a Memdataset with the stored data and call RefreshData.
If device is active then I add data directly to the memdataset.
(here I could as the article decribes write directly to the Array)

I also did:

Series1.XValues.Order := loNone;
Series1.XValues.Order := loNone;
Canvas.ReferenceCanvas.Pen.OwnerCriticalSection := nil;
Series1.LinePen.OwnerCriticalSection := nil;
Axes.FastCalc := True;


As data is added, I believe that I am waisting time calling RefreshData, is there an alternative that would guarantee that the new data is shown? A day can have up to 50,000 data points. As the day goes by the size of the graph increases significantly...

Looking at Windows Task Manager I think that I could specify that a "Real-time" graph show the most recent 10,000 data points.

Currently I monitor how long it takes to draw the graph and if it is less than 50ticks I graph update graph at every data point (via RefreshData) if it axceeds 50msec I ahow a refresh pushbutton that calls RefreshData.

Thanks in advance for your time and help.

I love your controller!!!

Narcís
Site Admin
Site Admin
Posts: 14730
Joined: Mon Jun 09, 2003 4:00 am
Location: Banyoles, Catalonia
Contact:

Post by Narcís » Tue Jun 10, 2008 8:28 am

Hi Stevez,
As data is added, I believe that I am waisting time calling RefreshData, is there an alternative that would guarantee that the new data is shown? A day can have up to 50,000 data points. As the day goes by the size of the graph increases significantly...
What about using Series's CheckDataSource method?
Best Regards,
Narcís Calvet / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

Post Reply