现需要用SPCOM控件写一个串口通讯方面的程序,检测路数可达到100多路,如何用Tchart控件实时动态曲线形式显示各路的数值随时间的变化值?
不知道哪位朋友写过相关方面的程序可供参考?或请指点相应的程序思路?这里不胜感激!
msn:[email protected]
email:[email protected]
不知道哪位朋友写过相关方面的程序可供参考?或请指点相应的程序思路?这里不胜感激!
msn:[email protected]
email:[email protected]
可以用ADDPOINT()等方法。
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart, Series, MMTimer;type
TForm1 = class(TForm)
Chart1: TChart;
Timer1: TTimer;
Series1: TFastLineSeries;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ReceiveData;
end;var
Form1: TForm1;implementation{$R *.dfm}const
SWITCHS=100;//检测路数
BUFFERSIZE=200;//每次接收到数据的长度
var
DataBuffer:array[1..SWITCHS,1..BUFFERSIZE] of Short;
q:Double=0;
procedure TForm1.FormCreate(Sender: TObject);
var
i:Integer;
FLS:TFastLineSeries;
begin
with Chart1 do
begin
RemoveAllSeries;
View3D:=False;
for i:=1 to SWITCHS do
begin
FLS:=TFastLineSeries.Create(Chart1);
FLS.SeriesColor:=Round(i*255/SWITCHS)shl 16+$FFFF;
AddSeries(FLS);
end;
end;
end;procedure TForm1.ReceiveData;//模拟接收数据
var
i,j:Integer;
sq:Double;
begin
for i:=1 to SWITCHS do
begin
sq:=q;
for j:=1 to BUFFERSIZE do
begin
DataBuffer[i,j]:=Round(Sin(sq)*i*3);
sq:=sq+0.314;
end;
end;
q:=q+0.628;
if q>628 then q:=0;
end;procedure TForm1.Timer1Timer(Sender: TObject);
var
i,j:Integer;
begin
ReceiveData;
for i:=1 to SWITCHS do
begin
Chart1.Series[i-1].Clear;//清除
for j:=1 to BUFFERSIZE do//重绘
Chart1.Series[i-1].Add(DataBuffer[i,j]);
end;
end;end.
去找个TeeChart Pro..
只要你的保存的数据和采集数据的时间间隔一致..只要按顺序绘点就可以了...