论文部分内容阅读
摘要:该文介绍了在Delphi中通过网络传输下位机采集的数据,使用IXYPlot控件将数据实时以直观的工控波形界面进行显示的方法,并结合应用实例给出了数据显示的应用程序。
关键词:Delphi;实时数据;波形;显示
中图分类号:TP312文献标识码:A文章编号:1009-3044(2008)33-1386-02
The Method of Realizing Remote Data Wave Display by Delphi Programming
GONG Juan, WANG Huan-yan, YAN Hai-yan, XUE Zhi-liang
(Hunan Railway Profess Ional Technology College, Zhuzhou 412001, China)
Abstract: This paper presents the method that the internet transmits the data collected by the controller system in Delphi, and the IXPlot Controls display the real-time data by intuitionistic monitor and control interface. This paper exemplifies the data displaying application program.
Key words:Delphi; real-time data; wave; display
1 引言
在自动化控制应用中,经常要对系统中各类设备进行控制和诊断,因此我们要组成微机为上位机而单片机等为下位机的控制网络。在通常的控制应用中,我们通过下位机采集并传送控制设备的状态信息如电流、电压、压力等等并以数字的形式实时显示。但是,随着自动化控制应用的发展和深入,很多应用需要将采集检测到的离散的数据绘制成波形,用来对数据进行追踪记录和比较。如何通过简单高效的方法方便快捷的将采集到的离散数据传输到上位机并绘制成波形呢?本文给出了利用IXYPlot控件将通过网络传输采集的离散数据绘制成波形的方法,并给出了在Delphi环境下利用该控件将离散数据以波形形式实时显示的应用实例。
2 实时数据的采集传输和显示方法
在应用系统中,为了减少布线充分利用网络系统优势,通常采用下位机传感器、IO通道等对模拟数据、数字量数据进行实时采集。采集到的数据由下位机根据协议的要求进行编码处理后通过网络发送给上位机,上位机接收到下位机传来的数据后同样根据通讯协议对接收到的数据进行解码,并将解码后的数据送给显示系统,根据相应设置进行数据的显示。
在数据显示中我们设定纵坐标和横坐标分别代表两个不同的量,显示出的波形则记录了数据在随横坐标变化过程中的变化情况,从而由各离散数据绘制出相应的波形。根据应用的需要我们可以在一个界面上同时记录多路数据,各路数据的波形以不同颜色进行区分,各路数据的位置可以随意设定,数据显示效果如图1所示:
图2 界面设计图
2) 程序如下:
var
Main_FM: TMain_FM;
Drawgraph,DrawGraphID:Thandle;
implementation
{$R *.dfm}
//波形显示线程;
Function F_DrawGraph:Longint;
Var
TempB1,temp2,temp3:Byte;
Begin
IF (Main_Fm.GET_SwitchLed.Active)Then //显示按钮激活
Begin
If main_fm.xvalue>main_fm.X_span then //满一屏后,横坐标右移
main_fm.iXYPlot.XAxis[0].Min :=main_fm.iXYPlot.XAxis[0].Min Main_fm.X_add;
main_fm.iXYPlot.Channel[0].AddXY(main_fm.xvalue,Sin(0 )*Main_fm.SP1_para0 Trunc(Main_fm.
SP1_para1)); //绘制第一通道的波形(直线)
main_fm.iXYPlot.Channel[1].AddXY(main_fm.xvalue,Sin(main_fm.Xvalue )*Main_fm.SP2_para0 Trunc(Main_fm.SP2_para1));//绘制第2通道的波形(正弦波)
main_fm.iXYPlot.Channel[2].AddXY(main_fm.xvalue,cos(main_fm.Xvalue)*Main_fm.SP3_para0 Trunc(Main_fm.SP3_para1)) ;//绘制第3通道的波形(余弦波)
main_fm.iXYPlot.Channel[3].AddXY(main_fm.xvalue,Cos(0)*Main_fm.Curr_para0 Trunc(Main_fm.Curr_para1));//绘制第4通道的波形(直线)
main_fm.iXYPlot.Channel[4].AddXY(main_fm.xvalue,0*Main_fm.Acc_para0 Trunc(Main_fm.Acc_
para1)); //绘制第5通道的波形(直线)
main_fm.iXYPlot.Channel[5].AddXY(main_fm.xvalue,Sin(main_fm.Xvalue )*Main_fm.Daf_para0 T
runc(Main_fm.Daf_para1)); //绘制第6通道的波形(正弦波)
main_fm.xvalue:=main_fm.xvalue Main_fm.X_add;//设置横坐标移动的变化
End;
End;
procedure TMain_FM.GET_SwitchLedClick(Sender: TObject);
begin
IF Not GET_SWITCHLED.Active Then //判断显示按钮没有被激活
Begin
GET_SWITCHLED.CaptionFont.Color:=clLime;//改变显示字体颜色
Main_fm.iXYPlot.ClearAllData ; //清除原有的显示数据,为新数据显示做好准备
Main_Fm.Xvalue :=0;//设置横坐标初时值
Main_Fm.Time50MS.Enabled:=True; //激活定时器
End
Else
Begin
GET_SWITCHLED.CaptionFont.Color:=clRed; //更改显示按钮字体
Main_Fm.Time50MS.Enabled:=False;//关闭定时器;
End;
end;
procedure TMain_FM.Time50MSTimer(Sender: TObject);
begin
F_DrawGraph; //定时调用显示刷新程序
end;
procedure TMain_FM.FormShow(Sender: TObject);
begin
Main_fm.X_span :=10;//设定显示区域一屏能够显示的横坐标的最大值
Main_fm.X_add:=0.01;//设定横坐标没刷新周期变化的增量
Main_fm.SP1_para0 :=12;//设定通道的数据放大比例
Main_fm.SP1_para1 :=110; //设定通道数据显示纵坐标的基准位置
Main_fm.SP2_para0 :=20;//设定通道的数据放大比例
Main_fm.SP2_para1 :=90;//设定通道数据显示纵坐标的基准位置
Main_fm.SP3_para0 :=20;//设定通道的数据放大比例
Main_fm.SP3_para1 :=70;//设定通道数据显示纵坐标的基准位置
Main_fm.Curr_para0 :=0;//设定通道的数据放大比例
Main_fm.Curr_para1 :=90; //设定通道数据显示纵坐标的基准位置
Main_fm.Acc_para0 :=3;//设定通道的数据放大比例
Main_fm.Acc_para1 :=70; //设定通道数据显示纵坐标的基准位置
Main_fm.Daf_para0 :=35;//设定通道的数据放大比例
Main_fm.Daf_para1 :=35; //设定通道数据显示纵坐标的基准位置
end;
4 结束语
以上方法笔者在多个开发项目中都曾采用,微机与分散的各下位机之间通过这种下位机采集数据、网络传输的方式将多种离散的工控数据以波形的方式显示出来,该方法在项目中使用效果良好,运行稳定可靠。
参考文献:
[1] 温锦山,唐柱鹏.Delphi串口及语音传真高级编程[M].北京:北京航空航天大学出版社,2004.
[2] 黄军.熊勇.Delphi 串口通信编程[M].北京:人民邮电出版社,2002.
[3] 段兴.Delphi实用程序100例[M].北京:人民邮电出版社,2002.
关键词:Delphi;实时数据;波形;显示
中图分类号:TP312文献标识码:A文章编号:1009-3044(2008)33-1386-02
The Method of Realizing Remote Data Wave Display by Delphi Programming
GONG Juan, WANG Huan-yan, YAN Hai-yan, XUE Zhi-liang
(Hunan Railway Profess Ional Technology College, Zhuzhou 412001, China)
Abstract: This paper presents the method that the internet transmits the data collected by the controller system in Delphi, and the IXPlot Controls display the real-time data by intuitionistic monitor and control interface. This paper exemplifies the data displaying application program.
Key words:Delphi; real-time data; wave; display
1 引言
在自动化控制应用中,经常要对系统中各类设备进行控制和诊断,因此我们要组成微机为上位机而单片机等为下位机的控制网络。在通常的控制应用中,我们通过下位机采集并传送控制设备的状态信息如电流、电压、压力等等并以数字的形式实时显示。但是,随着自动化控制应用的发展和深入,很多应用需要将采集检测到的离散的数据绘制成波形,用来对数据进行追踪记录和比较。如何通过简单高效的方法方便快捷的将采集到的离散数据传输到上位机并绘制成波形呢?本文给出了利用IXYPlot控件将通过网络传输采集的离散数据绘制成波形的方法,并给出了在Delphi环境下利用该控件将离散数据以波形形式实时显示的应用实例。
2 实时数据的采集传输和显示方法
在应用系统中,为了减少布线充分利用网络系统优势,通常采用下位机传感器、IO通道等对模拟数据、数字量数据进行实时采集。采集到的数据由下位机根据协议的要求进行编码处理后通过网络发送给上位机,上位机接收到下位机传来的数据后同样根据通讯协议对接收到的数据进行解码,并将解码后的数据送给显示系统,根据相应设置进行数据的显示。
在数据显示中我们设定纵坐标和横坐标分别代表两个不同的量,显示出的波形则记录了数据在随横坐标变化过程中的变化情况,从而由各离散数据绘制出相应的波形。根据应用的需要我们可以在一个界面上同时记录多路数据,各路数据的波形以不同颜色进行区分,各路数据的位置可以随意设定,数据显示效果如图1所示:
图2 界面设计图
2) 程序如下:
var
Main_FM: TMain_FM;
Drawgraph,DrawGraphID:Thandle;
implementation
{$R *.dfm}
//波形显示线程;
Function F_DrawGraph:Longint;
Var
TempB1,temp2,temp3:Byte;
Begin
IF (Main_Fm.GET_SwitchLed.Active)Then //显示按钮激活
Begin
If main_fm.xvalue>main_fm.X_span then //满一屏后,横坐标右移
main_fm.iXYPlot.XAxis[0].Min :=main_fm.iXYPlot.XAxis[0].Min Main_fm.X_add;
main_fm.iXYPlot.Channel[0].AddXY(main_fm.xvalue,Sin(0 )*Main_fm.SP1_para0 Trunc(Main_fm.
SP1_para1)); //绘制第一通道的波形(直线)
main_fm.iXYPlot.Channel[1].AddXY(main_fm.xvalue,Sin(main_fm.Xvalue )*Main_fm.SP2_para0 Trunc(Main_fm.SP2_para1));//绘制第2通道的波形(正弦波)
main_fm.iXYPlot.Channel[2].AddXY(main_fm.xvalue,cos(main_fm.Xvalue)*Main_fm.SP3_para0 Trunc(Main_fm.SP3_para1)) ;//绘制第3通道的波形(余弦波)
main_fm.iXYPlot.Channel[3].AddXY(main_fm.xvalue,Cos(0)*Main_fm.Curr_para0 Trunc(Main_fm.Curr_para1));//绘制第4通道的波形(直线)
main_fm.iXYPlot.Channel[4].AddXY(main_fm.xvalue,0*Main_fm.Acc_para0 Trunc(Main_fm.Acc_
para1)); //绘制第5通道的波形(直线)
main_fm.iXYPlot.Channel[5].AddXY(main_fm.xvalue,Sin(main_fm.Xvalue )*Main_fm.Daf_para0 T
runc(Main_fm.Daf_para1)); //绘制第6通道的波形(正弦波)
main_fm.xvalue:=main_fm.xvalue Main_fm.X_add;//设置横坐标移动的变化
End;
End;
procedure TMain_FM.GET_SwitchLedClick(Sender: TObject);
begin
IF Not GET_SWITCHLED.Active Then //判断显示按钮没有被激活
Begin
GET_SWITCHLED.CaptionFont.Color:=clLime;//改变显示字体颜色
Main_fm.iXYPlot.ClearAllData ; //清除原有的显示数据,为新数据显示做好准备
Main_Fm.Xvalue :=0;//设置横坐标初时值
Main_Fm.Time50MS.Enabled:=True; //激活定时器
End
Else
Begin
GET_SWITCHLED.CaptionFont.Color:=clRed; //更改显示按钮字体
Main_Fm.Time50MS.Enabled:=False;//关闭定时器;
End;
end;
procedure TMain_FM.Time50MSTimer(Sender: TObject);
begin
F_DrawGraph; //定时调用显示刷新程序
end;
procedure TMain_FM.FormShow(Sender: TObject);
begin
Main_fm.X_span :=10;//设定显示区域一屏能够显示的横坐标的最大值
Main_fm.X_add:=0.01;//设定横坐标没刷新周期变化的增量
Main_fm.SP1_para0 :=12;//设定通道的数据放大比例
Main_fm.SP1_para1 :=110; //设定通道数据显示纵坐标的基准位置
Main_fm.SP2_para0 :=20;//设定通道的数据放大比例
Main_fm.SP2_para1 :=90;//设定通道数据显示纵坐标的基准位置
Main_fm.SP3_para0 :=20;//设定通道的数据放大比例
Main_fm.SP3_para1 :=70;//设定通道数据显示纵坐标的基准位置
Main_fm.Curr_para0 :=0;//设定通道的数据放大比例
Main_fm.Curr_para1 :=90; //设定通道数据显示纵坐标的基准位置
Main_fm.Acc_para0 :=3;//设定通道的数据放大比例
Main_fm.Acc_para1 :=70; //设定通道数据显示纵坐标的基准位置
Main_fm.Daf_para0 :=35;//设定通道的数据放大比例
Main_fm.Daf_para1 :=35; //设定通道数据显示纵坐标的基准位置
end;
4 结束语
以上方法笔者在多个开发项目中都曾采用,微机与分散的各下位机之间通过这种下位机采集数据、网络传输的方式将多种离散的工控数据以波形的方式显示出来,该方法在项目中使用效果良好,运行稳定可靠。
参考文献:
[1] 温锦山,唐柱鹏.Delphi串口及语音传真高级编程[M].北京:北京航空航天大学出版社,2004.
[2] 黄军.熊勇.Delphi 串口通信编程[M].北京:人民邮电出版社,2002.
[3] 段兴.Delphi实用程序100例[M].北京:人民邮电出版社,2002.