现需要用SPCOM控件写一个串口通讯方面的程序,检测路数可达到100多路,如何用Tchart控件实时动态曲线形式显示各路的数值随时间的变化值?
不知道哪位朋友写过相关方面的程序可供参考?或请指点相应的程序思路?这里不胜感激!
msn:[email protected]
email:[email protected]

解决方案 »

  1.   

    spcomm用过,tchart正准备了解,也要用,up一下
      

  2.   

    你应当有一个通讯协议吧。协议中自己区分各个特征值,然后在CHART中绘出来就行了。
    可以用ADDPOINT()等方法。
      

  3.   

    TChart可是非常浪费资源呀!不过楼主既然要用就给你个可操作的例子。
    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.
      

  4.   

    采集数据 - > 处理数据 - > 保存数据(Record File 速度一流) - > 绘制曲线
    去找个TeeChart Pro..
    只要你的保存的数据和采集数据的时间间隔一致..只要按顺序绘点就可以了...
      

  5.   

    另外..100Chn的采集...不知道你的硬件是怎么搭的..