基于Z e d G r a p h控件的制冷系统实时曲线的绘制
2013-09-17沈宫新张国东
沈宫新 张国东
(南京化工职业技术学院,南京210048)
引言
在制冷系统的热力过程中,会涉及系统多个热力参数的变化,原有的系统中的历史曲线系统采用的是直接在程序中写程序来实现,费时费力,不能实现多参数同时实时显示,为了更好的显示仿真程序启动和事故仿真中的多个实时参数,采用第三方控件ZedGraph来显示,实现了多参数同时实时显示功能。
1 仿真培训系统简介
作为仿真培训系统,本系统包括开机检查,启停仿真,调节运行,故障模拟操作。其中启停仿真和故障仿真是系统核心功能。启停仿真能够提供一个能够基本反映中央空调系统热力特性的仿真系统,故障模拟在此基础上人为设定故障来培训从业人员的操作水平和能力。原有系统采用C/S架构,一方面,在教师端和学员端都可以自主启动启停仿真,另一方面,可以在教师端设定故障,在学员端进行故障处理。在启停仿真时,系统读取数据库中的初始数据和系统界面的给定初始值,进行迭代运算,来更新界面的数据实现仿真,在故障处理仿真时,在教师端设定数据库特定字段,学员端读取字段来判断是否是故障仿真状态,是故障仿真状态就直接将系统所有参数置为正常运行参数,然后根据故障名称找到对应的受影响的参数,对受到影响的参数按照参数的变化趋势做一一变化。学员根据参数的变化判断故障,执行故障对应的回复操作,排除故障。整个中央空调系统包括压缩、冷凝、节流、蒸发四个热力过程,涉及的参数超过50个,原有的系统采用C++语言开发,实时绘图功能不是很完善,包括显示参数不完整,不能同时绘制多个参数。
2 ZedGraph控件说明
2.1 ZedGraph控件简介
ZedGraph是一个开源的.NET图表类库,并且全部代码都是用C#开发的。它可以利用任意的数据集合创建2D的线性和柱形图表。作为开源二维图表绘制控件,它支持 asp,asp.net,vc,C# 开发语言,是一款类似 PieChart,StackBar,LineChart的 C# 开源图表控件。与其他的一些统计图控件相比,ZedGraph由于是直接在画布上作画,而不是生成图片显示,所以性能比较好,在诸如股市的实时走势图,显示CPU使用率等实时性较强的应用中有很好的表现。
2.2 ZedGraph控件使用
要使用ZedGraph控件,第一步是要下载ZedGraph控件,从官网下载的压缩文件包括三个文件夹,分别存放示例文件夹ZedGraph_Demo、文档文件夹 ZedGraph_Doc和源代码文件夹ZedGraph_Source。第二步在项目中引用这个控件,在解决方案里添加对文件夹ZedGraph_Demo下的ZedGraph.dll引用,然后在工具箱中选择项,会在工具箱的最下方发现这个控件了,就可以在一个WinForm程序中直接加入这个控件,统计数据我们是在其添加X,Y坐标时候处理的。
2.3 ZedGraph控件常用属性和方法
(1)Location属性,获取或设置控件的左上角和相应的容器的左上角之间的坐标。
(2)Size属性,获取或设置控件的高度和宽度。
(3)GraphPane属性,用于设置画布中除图表区域外的其他外观,主要Title、XAxis、YAxis等属性。Title获取标签实例,实例中包括文本和标题属性,XAxis图像的x轴对象,可以设定x轴对象的最大值和最小值,YAxis图像的Y轴对象,可以设定Y轴对象的最大值和最小值。
(4)AddCurve方法,是一个多重重载函数,将曲线对象添加到图像中。常用的重载函数是:
public LineItem AddCurve(string label,PointPairList points,Color color,SymbolType symbolType)
其中,第一参数为对应曲线的图例说明,第二个参数为点的集合,第三个参数为绘图线条的颜色,第四个参数为绘图点的样式。
(5)AxisChange方法,实现x轴的坐标改变。
(6)Refresh方法,实现ZedGraph控件图形的更新。
ZedGraph库最大的好处是把数据和曲线绑定起来了,这是通过PointPairList这个集合来实现的,要画所有的点,只需要把所需画的点Add至PointPairList中,然后在AddCurve方法中把该PointPairList作为参数传入即可。另外,说到多Y轴的实现,通过Y2Axis就可以很容易的达到目的。
3 ZedGraph控件实现多参数实时显示
在中央空调仿真培训系统中,要显示的数据较多,应该给操作者自己选择的要查看的参数,同时多参数显示时,超过四个参数图形就会显得混乱,所以设计系统中最多让用户同时观察四个参数的变化。在仿真计算时,计算的数据是实时迭代计算出来,同时插入系统中的对应实时参数表,在实时参数表中有时间字段,实时参数名称字段。同时系统总还有参数说明表,包括参数说明,参数的最大值和最小值字段。下面说明本项目中ZedGraph控件的使用。
(1)首先创建WinForm的项目,在项目中引用ZedGraph.dll,在工具箱中选择项ZedGraphControl。如图1,在工具箱可以看ZedGraph控件图标,拖动该控件到WinForm的窗体上,调整好大小和位置。
图1 选择项中选中ZedGraphControl组件
(2)程序初始化,生成 PointPairList的实例数组PointPairList[]list,数组的大小为生成曲线最大值4。用来存放要显示的最多4条曲线的x值和y值。
(3)设定ZedGraph控件的标题,X轴字体、标题,最大值为WinForm设定值,最小值为0。
根据WinForm上选中的参数个数,来显示参数对应的y轴坐标的单位,最大值和最小值。其中单位根据选中的参数名称,查询参数说明表得到参数的单位,最大值和最小值。因为要用到多个y轴坐标,定义一个YAxis的数组YAxis[]yAxis,数组的大小为生成曲线的最大值4。同时调用ZedGraph控件的GraphPane.YAxisList.Add方法来添加y轴坐标到绘图面板上。再调用ZedGraph控件的GraphPane.AddCurve方法来显示选中的参数。至此,静态的图片已经完成。
(4)在系统中添加定时器,定时时间为1秒,定时事件中完成图形的更新。在定时事件中,完成X轴的更新和实例数组list的值的更新。设定一个整型的类字段timestamp,初始值为0,每次定时事件中加1,然后判断timestamp是否大于界面中时间设定值,小于X轴下标不变,大于的话就让X轴最小值和最大值同时加1,实现X轴向左滚动的效果。数组list的值x轴坐标都是类字段timestamp,y轴的值根据选中参数的字段名查询实时数据表得到数组。当list中数值个数超过采样时间时长时,使用list的RemoveAt(0)方法去除旧的数据。系统四个参数同时显示的效果如图2。
图2 制冷系统多参数实时变化
4 总结
仿真系统中针对参数的图形显示是一个必备的功能,本文通过对制冷仿真培训系统数据库的分析,采用第三方的ZedGraph控件来实现多参数的实时显示,详细说明了使用的过程,学员在仿真操作过程中,可以更加直观的观察系统特性,在实际的教学和培训中起得很好的效果。同时也对类型应用提供有益的参考。
[1]李晓东.制冷原理与设备[M].北京:机械工业出版社,2006.
[2]张春路.制冷空调系统仿真原理与技术[M].北京:化学工业出版社,2013.
[3]于国卿.ZedGraph控件在水闸监测系统开发中的应用研究[J].南水北调与水利科技,2008(6).
[4]隋艳微.基于ZedGraph控件的曲线在WebGIS煤矿安全网络信息管理系统中的应用[J].煤矿安全,2010(9).