APP下载

基于VB.NET 语言的双纵轴多曲线平面曲线控件

2014-12-06郑国勋张晓贤王若金

关键词:坐标轴控件刻度

郑国勋,张 华,张晓贤,赵 亮,王若金

(1.长春工程学院计算机技术与工程学院;2.吉林省招生委员会办公室;3.吉林省交通职业技术学院,长春130012)

0 引言

实时动态数据曲线的绘制与显示,是各种测控系统的重要功能。实时动态数据曲线能够实时、直观地反应数据的变化趋势。但是,很多开发语言都没有提供数据曲线工具,而提供数据曲线绘制功能的软件(如:Matlab)又难于实现软件集成化。因此,开发具有实时动态曲线功能的软件,通常会使用第三方控件。在第三方绘制曲线控件中比较常用的是微软的Graph OLE组件,它的功能完善,易于操作使用,但使用它需要付费购买Microsoft Office办公软件,且在处理大数据时性能不佳。相关实验表明,当数据量达到50 000条时,Graph OLE组件加载、刷新一次曲线大约需要1min,这样的刷新速率对实时性要求较高的测控软件是不适用的。

本文在Microsoft Visual Studio平台上,使用VB.NET语言,采用面向对象方法设计一个动态曲线控件,把动态曲线的绘制封装在一个用户自定义控件类中,通过可视化界面配置相关属性,简化了图形坐标系统的绘制和标识,同时提高了代码的可重用性,便于在各种系统中使用。

1 曲线控件的整体设计思路

实时动态曲线绘制与静态图形绘制不同点主要在于绘制动态曲线的数据是逐步得到的,在绘制过程中必须保证实时性,即获取数据与绘制曲线必须是同步的。因此,在软件的设计过程中,必须注意绘制图形的效率,满足实时监测的需要。

实时动态曲线的绘制一般要考虑到实时数据值的范围和数据的采样频率。实时动态曲线一般的形式是Y方向轴表示监测数据的大小,X方向轴表示时间。随着时间的变化,动态曲线不断更新变化。常用的实现曲线显示方法有2种:一种是把已绘制的图形擦除,重新从左向右绘制;另一种方式称为平推式,把已有图形向左方或右方平移。在平推式中,最需要解决的问题是图形刷新的问题,以免在采样频率较高的情况下图形闪烁严重。

本文采用的方法是:利用VB.NET的Bitmap对象在内存中进行坐标轴及曲线的绘制,Picture-Box控件作为曲线的显示载体,将Bitmap对象赋值给PictureBox控件。通过这种方法,可以避免曲线直接绘制在PictureBox控件上而将产生的闪烁问题以及窗体被置于下层时曲线被擦除的问题。

2 编制曲线控件的方法

2.1 坐标系的建立

Microsoft Visual Studio平台中默认坐标系统是容器的左上角坐标为(0,0),Y 方向轴向右,X方向轴向下,容器右下角坐标为(Width,Height)(注:Width为容器宽度,Height为容器高度)。因此,在绘制曲线前必须自定义绝对坐标系,自定义绝对坐标系规则如下:

1)Y方向轴的最大值和最小值由曲线数据确定,分别记作u、l;

2)Y方向轴刻度由曲线数据的最大值、最小值及它们之间的差值确定,分别记作Dmax、Dmin、t=Dmax-Dmin。当t=0时曲线是一条平行于X方向轴的线段;

3)Y方向轴单位长度记作s,刻度数记作m;

4)定义函数f(x)为小于x的最大整数,c(x)为大于x的最小整数。

通过计算可以得到:

为了提高复用性,文中把实动态时曲线的绘制封装成一个自定义控件类,用类的方法分别实现坐标绘制、动态曲线绘制等操作。自定义控件类的属性见表1。

表1 自定义控件类的属性

2.2 曲线的绘制

按上述规则建立了自定义坐标系后,就可以进行数据曲线的绘制了。坐标系是否显示右侧Y轴由控件的EnableRightYAxis属性决定。多条数据曲线由传入数据的二维数据决定。曲线控件绘制曲线的具体步骤如下:

1)通过LastLeftDataArray属性获取曲线数据;

2)利用传入的数据和公式(1)~(3)计算求得坐标轴刻度的单位长度、最小刻度值、最大刻度值及刻度数;

3)绘制坐标轴、刻度线、更新坐标系文本;

4)利用坐标轴相关参数将曲线数据真实值换算为Microsoft Visual Studio平台中默认坐标系统的坐标值;

5)在Bitmap对象中绘制曲线,并将Bitmap对象赋值给PictureBox控件。

3 运行界面

该自定义曲线控件通常要与开发工具的时间控件配合使用,以实现实时曲线功能。在Microsoft Visual Studio平台上可以通过使用BeginInvoke方法实现多线程对曲线控件的调用。使用多线程技术调用曲线控件,可以有效地避免程序在运行过程中窗体出现假死情况,程序运行后如图1所示。

图1 曲线控件运行后画面

4 结语

本文介绍了确定坐标系、坐标轴刻度和绘制平面曲线的方法,使用VB.NET语言编写了平面双纵轴曲线控件。该控件计算坐标轴刻度的方法计算效率高,绘制的刻度线、刻度分布更为合理。实现了双纵轴显示曲线,并且可以显示不同颜色的多条数据曲线,具有很好的通用性。

[1]许强.工业实时曲线实现的方法及其比较[J].中国科技信息,2010(17):103-104.

[2]王林,刘子英,蒋仕林.基于Ajax技术的远动系统实时曲线研究[J].华东交通大学学报,2008(1):77-79.

[3]翟世磊,李明波,李福,等.实时曲线的绘制方法探索[J].科技信息,2009(36):521-522.

猜你喜欢

坐标轴控件刻度
用坐标轴平移妙解斜率和(或积)为定值问题
基于.net的用户定义验证控件的应用分析
欧姆表的刻度真的不均匀吗?
——一个解释欧姆表刻度不均匀的好方法
关于.net控件数组的探讨
被吃掉刻度的尺子
谁大谁小
巧用仿射变换妙解高考解析几何题
测量三字歌
基于嵌入式MINIGUI控件子类化技术的深入研究与应用
数学问答