APP下载

基于物联网技术的环境监测系统研究

2016-07-04贾苏陈永康王春明袁鸿燕

电脑知识与技术 2016年15期
关键词:物联网

贾苏+陈永康+王春明+袁鸿燕

摘要:为了处理实时显示和处理物联网中收集来的大量有用数据,利用.NET平台下的ZedGraph控件以直观的形式展现实时观测的事物状态,实现管理,监控的科学化、自动化。ZedGraph是一种较为常用的表达数据的控件,简单易用,面对大量数据也有不错的性能。

关键词:物联网;ZedGraph;实时分析

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2016)15-0278-03

Abstract: In order to process enormous valuable data from the Internet of things,using the .NET platforms open-source library ZedGraph to make real-time data report,present the situation of things what we watch in various form,realize the science, automation of management and monitoring.ZedGraph is a more commonly used expression data control, and easy to use, in the face of a large number of data also has a good performance.

Key words: the Internet of things; ZedGraph; real time analysis

近年来,我国经济飞速发展,人们对于环境污染的日益严重颇为担心,对环境监测的重视程度越来越高。传统的以人工为主的方式效率较低,且无法实现远程监控,不适合现代发展的需求。随着科技的发展,物联网技术将逐步取代人工监控,大大提高了环境监测的效率,为更科学优化的监测环境参数拓宽了思路与方式。

物联网技术是信息化技术的一个极其重要的产物,是环境监测的重要手段。物联网强调的是“物—物”以无线的方式相互连接,达到“物—物”通信的目的。物联网产生的大量数据是研究管理人员评估审查的重要指标,这些数据对环境的监管、污染源的发现以及环境问题的反馈与处理方面发挥了极大的作用,那么,在环境监测系统中,如何科学的呈现这些数据就成了研究的主要课题。

图表是对数据进行分析评估的有效工具,也是最直观表示数据的方式。本文就是在已通过传感器获得物联网数据的基础上,利用ZedGraph图表制作工具来实时显示数据,使数据更富有生命,科学而直观的动态实时展示。

1 ZedGraph的介绍

ZedGraph控件使用 C# 语言实现的,是 .NET 平台上一个开源和非交互式图表的制作类库。ZedGraph支持多种2D图表类型的图表,可以利用任意的数据集合创建2D的线性图表和柱形图表,ZedGraph支持Windows Form和ASP.NET Web Form开发,还能够实现各种二维表,如Line、Bar、Pie、Area等,因此是一种理想的显示数据的控件。

ZedGraph控件是面向对象的,即在使用中具有很高的灵活性。图表的每个层面都可以被用户修改,所有的图表属性都提供了缺省值,ZedGraph类库中源代码可被进行修改,重新生成,包括图表显示特性的若干默认值,如数值单位、数值范围、步长、尺寸等。ZedGraph控件继承了Framework中的UserControl接口,允许用户在VS 的IDE 环境中进行拖放操作,对其他语言同时提供了相应的接口。

当上位机通过选择指定节点和需要显示的数据后,依从业务逻辑的需求,从某种数据接口中获取相关数据,在上位机端经过数据整理后,构造图表所需的数据集,再由ZedGraph控件加载此数据集,最终,在上位机端生成图表,通过定时器的时钟控制,定期更新图表信息的显示。

ZedGraph可在运行时期创建实例对象,此处使用的是版本5.0.10的类库,对应于VS2012开发平台,一般开发步骤如下:

(1)打开Visual Studio 2012中文版。

(2)在菜单中选择“文件”—>“新建”—>“项目…”。

(3)选择“Windows应用程序”,取名为“ZedGraphDEMO”。

(4)在解决方案浏览窗口,右键点击“引用”,选择“添加引用…”。

(5)选择“浏览”,导航到ZedGraph.dll,单击“确定”,在项目引用中会增加ZedGraph。

(6)在菜单项“视图”中选择“工具箱”,查看“常规”选项卡的内容。

(7)如“ZedGraphControl”选项不存在,右键点击“常规”选项卡,并选“选择项…”。

(8)在“.NetFramework组件”标签下,点击“浏览(B)…”。

(9)导航到ZedGraph.dll文件,点击“打开”,之后点击“确定”。

(10)工具箱中点击“ZedGraphControl”控件,拖放控件到窗体。实际上工具箱中的控件拖放到窗体时,类库的引用自动添加,所以在具体应用时,之前的添加引用过程可省略。

(11)窗体中点选“ZedGraphControl”控件,视图菜单中选择“属性窗口”。

(12)把ZedGraphControl的名称“(Name)”项填写成“zg1”,默认通常是“zedGraphControl1”。

(13)双击窗体,切换到代码窗口,窗口模板中带有Form1_Load()方法。

(14)在文件上部加上“usingZedGraph;”。

2 ZedGraph应用开发实例

本例的分析数据来自物联网中的中心节点,中心节点收集分散于通过无线的形式收集各处的信息采集点发送来的数据,通过上位机对中心节点的读取就实现对远程节点的控制,中心节点起着一定程度上的网关的作用,对中心节点的读取可以使用.NET提供的System.IO.Ports命名空间下的控件。

(1)在WinForm容器中绘制图表的代码

下列函数是在要表达实时数据的窗体中的私有函数,zedGraphControl1在函数之外经过实列化之后,只要设置其x轴为自动增长,PointPairList中保存有要在界面上显示的数据,执行zedGraphControl1.Refresh();就实现了图表的刷新。随着数据的积累,应该放弃一些时间点,以保证图表中数据的个数一样,DropPrePoint()函数就是实现了这样的功能,代码如下:

private void DrawGraph()

{

//设置为x轴的标尺Scale可以随着值自动增长

zedGraphControl1.GraphPane.XAxis.Scale.MaxAuto = true;

double x = (double)new XDate(DateTime.Now);//横坐标

//纵坐标,y1表示温度,y2表示湿度,y3表示土壤湿度

double y1 = 0, y2 = 0, y3 = 0;

for (int i = 1; i < dt.Rows.Count; i++) {

//dt中存放的是从中心节点中读取的缓存数据

y1 = double.Parse(dt.Rows[i]["wd"].ToString());

y1 = y1 * 0.01;

y2 = double.Parse(dt.Rows[i]["sd"].ToString());

y2 = y2 * 0.01;

y3 = double.Parse(dt.Rows[i]["yw"].ToString());

y3 = y3 * 0.01;

}

//分结点添加数据

for (int k = 0; k < nodesum; k++) {

if (dt.Rows[i][0].ToString() == (k + 1).ToString()) {

wlist[k].Add(x, y1);

slist[k].Add(x, y2);

ylist[k].Add(x, y3);

}

}

}

//控制折线图中的点保持在100个,超过100个就报先前的去掉

DropPrePoint();

this.zedGraphControl1.AxisChange();

this.zedGraphControl1.Refresh();//刷新数据

}

(2)使用定时器定期对容器中图表进行刷新

使用定时器便可以在指定的时间间隔刷新图表,定时器是timer1,其时间间隔到时便会自动调用约定的函数timer1_Tick(),在这个函数中需要保证上位机中留存的数据个数,从串口中读取收集来的数据LoadSerialData(),重新绘制图表DrawGraph(),代码如下:

private void timer1_Tick(object sender, EventArgs e) {

if (isStart) {//判断是否已经开始记录

if (_serialPort.IsOpen){ //判断端口是否打开

if (dt.Rows.Count > 1){ //dt里面是否有上位机以外的记录

//移除掉线结点

for (int j = 1; j < dt.Rows.Count; j++){

comboBox2.Items.RemoveAt(j - 1);

dt.Rows.RemoveAt(j);

}

if (dt.Rows.Count > 0){

Node = new string[dt.Rows.Count, 5];//5表示有5列

//将dt里面的数据移入Node,以便绘制TOPO图

for (int i = 0; i < dt.Rows.Count; i++){

Node[i, 0] = dt.Rows[i][0].ToString(); //ID码

Node[i, 1] = dt.Rows[i]["wd"].ToString(); //温度

Node[i, 2] = dt.Rows[i]["sd"].ToString(); //湿度

Node[i, 3] = dt.Rows[i]["yw"].ToString(); //土壤湿度

Node[i, 4] = dt.Rows[i]["ontime"].ToString(); //时刻

}

bind();//拓扑图绑定

}

}

}

LoadSerialData();// 从串口读取数据

DrawGraph();//画折线图

}

}

(3)使用定时器定期捕获数据,如图1和图2所示。

3 结束语

ZedGraph控件为开发者提供了丰富的属性用来简化软件开发过程,控件开源的特性使得开发者可以根据具体情况修改源代码以满足特定需求。在生态养殖的环境监测系统中应用ZedGraph控件,有助于监测的数据图形化和分析结果的可视化。

参考文献:

[1] 孙吉赟,方明,顾燕伟.多维数据图形显示中ZedGraph控件的应用[J].电脑开发与应用,2008(3).

[2] 亦钢. 应用Zedgraph高效开发数据图表[J]. 电脑编程技巧与维护,2009(6).

[3] 沈宫新 基于ZedGraph控件的制冷系统实时曲线的绘制[J].三门峡职业技术学院学报,2013(12).

[4] 朱振茂 无线网络实时监测系统上位机软件的设计与实现[J].大连海事大学学报,2008(2).

猜你喜欢

物联网
基于无线组网的智慧公交站点信息系统研究与实践
基于LABVIEW的温室管理系统的研究与设计
论智能油田的发展趋势及必要性
中国或成“物联网”领军者