基于.NET技术的远程监控系统设计与实现
作者:陈春娥
来源:《现代电子技术》2010年第13期
摘 要:为克服传统监控系统中存在的系统数据实时性不强、有效资源不能共享等缺陷,提出一种基于.NET技术的远程监控系统,该系统采用B/S模式实现与局域网的无缝连接;利用多线程技术实现数据的采集和处理;利用Socket通信技术保证现场数据和操作指令的可靠传输;利用先进的GDI+技术实现动态图形的生成和传送。着重从服务器端的数据采集处理、数据通信及客户端的动态图形显示三个方面对监控系统的实现进行论述。该系统不但弥补了传统监控系统的不足,而且提高了系统的实时性和快速性。 关键词:远程监控; 多线程; Socket; 动态图形 中图分类号:TP311 文献标识码:A 文章编号:1004-373X(2010)13-0137-03
Design and Realization of Remote Monitoring System Based on .NET Technology CHEN Chun-e
(College of Physics and Information Technology, Sh nxi Normal University, Xi’an 710062, China)
Abstract: A remote monitoring system based on .NET technology is proposed for overcoming defects in traditional monitoring system such as weak real-time data and unshared efficient resource. This system adopts B/S mode to connect WAN and LAN seamlessly, uses multithreading technique to realize data acquisition and processing, deploys the Socket technology to ensure a reliable data transmission, uses GDI+ technology to achieve dynamic graphics generation and transmission. The monitoring system is realized by the data acquisition, processing and transmission of server-side and dynamic graphic display of client-side. The system makes up the deficiency of the traditional monitoring system, and improves the speedy and real-time performance. Keywords: remote monitoring; multithreading; Socket; dynamic figure
远程监控系统指通过局域网、广域网等计算机网络,使用TCP/IP技术,远程实现对工业生产过程的监视及控制,让管理层或调度人员看到过去只有操作人员才能看到的生产现场的实时信息,并且能够实现对生产现场的远程调度、指挥决策以及远程对生产设备的在线配置和故障诊断等功能[1]。传统的监控系统因前台的人机界面层和后台的数据采集层复杂程度不同常采用不同的开发环境,两层都是能独立运行的应用程序,在实际使用时系统维护困难、配置复杂且远
龙源期刊网 http://www.qikan.com.cn
程调度的灵活性也很差,网络技术和.NET技术的发展很好地解决了上述问题,为更好地实现远程监控提供了开发平台。本文提出了一种在.NET技术基础上构建的基于B/S结构的远程监控系统,克服了传统监控系统的弊端,并使得系统的实时性和快速性得到了提高。 1 远程监控系统设计 1.1 系统的总体结构
远程监控系统一般由现场数据采集与控制子系统、数据存储与转发子系统、客户端接收与命令发送子系统三部分组成,监控系统的网络架构如图1所示。在图1中,现场测控单元负责采集各个现场控制节点的运行情况数据,然后与应用服务器交换数据以实现数据的通信与显示;数据库服务器用于存储系统实时与历史运行数据以及系统设备参数等,采集到的实时参数保存于实时数据库以便响应客户端的实时数据请求,实时数据更新后送历史数据库保存便于统计分析;Web服务器和应用服务器提供实时监控功能以及用户的查询分析。 图1 系统网络架构 1.2 监控系统的软件模型
该远程监控系统采用基于Internet的TCP/IP协议,通过B/S[2]方式实现对远程设备的实时监测和控制,其工作模式如图2所示。采用B/S结构,客户端获取数据的渠道不止一条,对于非实时数据可以直接向Web服务器发出数据查询请求,对实时数据可通过页面内嵌的ActiveX控件,直接与应用服务器通信。同时B/S模式可实现不同平台的跨接问题,实现Web网与局域网的无缝连接,使得不管是监控中心内部管理员还是上级调度人员以及普通用户只需要安装通用的浏览器就可以访问远程设备相应的运行信息。 图2 监控系统的工作模式 1.3 系统功能模块
用户管理模块:包括新增、修改、删除用户和对系统的权限进行设置,确保不同的权限只能执行相应的操作。
实时数据显示模块:以图形、表格的形式显示出监控点的最新数据。 实时控制模块:对远程设备的运行参数进行修改,从而控制其运行状态。
数据查询模块:正常监控数据查询或者根据自定义条件对历史数据进行分析查询。 统计报表模块:生成监控数据报表、综合运行数据报表,并能够生成日报、月报、半年报和年报等各种报表,报表格式可按照用户的要求定制,可直接进行预览、打印。
龙源期刊网 http://www.qikan.com.cn
2 远程监控系统实现的关键技术 2.1 基于多线程的数据采集和处理[3-5]
远程监控系统既要进行实时数据采集处理,又要进行数据显示刷新,还要不断扫描是否有故障发生,同时还要接受远程的控制命令,为了使系统能够稳定、快速的运行在此采用多线程技术。.NET是一个多线程的环境,.NET基础类库的System.Threading命名空间提供了大量的类和接口支持多线程,它能够创建并控制线程,设置其优先级并获取其状态。
分析服务器端程序任务,主要有侦听、接收客户端连接请求,数据采集,数据处理、传输和存储、控制命令的接收与下发等,因此在程序中使用了四个线程处理上述任务。分别为: (1) 主线程:主要进行一系列相关的系统初始化、辅助线程的创建与管理、数据刷新显示、数据交互及报表管理打印等。
(2) 数据采集、处理线程:主要轮询各现场测控单元,接收现场设备运行数据,创建数据处理线程。
(3) 数据处理线程:主要对采集来的现场原始数据进行格式识别,打包发往客户端;按一定的时间间隔将识别后的数据存入历史数据库,同时在这个过程中对故障报警做出立即响应。 (4) 控制命令线程:主要从用户的操作中获取控制命令,然后根据被控对象组织相应的报文,并调用通讯模块下发调控命令。 下面的代码说明线程的创建过程: //在代码段的顶部导入名称空间 Imports System
Imports System.Threading //主线程创建和管理辅助线程 Protected Sub main()
Dim object1 as new class1() //创建数据采集类Class1的对象 Dim object2 as new class2() //创建数据处理类Class2的对象 Dim t1 as Thread=new Thread(Addressof object1.method1)
龙源期刊网 http://www.qikan.com.cn
//创建数据采集线程的对象,并通过Addressof操作符找到t1线程要运行方法的地址 Dim t2 as Thread=new Thread(Addressof object2.method2)
//创建数据采集线程的对象,并通过Addressof操作符找到t2线程要运行方法的地址 T1.start()//启动数据采集线程 T2.start()//启动数据处理线程 …… //异常处理 End sub
在系统的实现过程中,将数据的各种处理方法封装在类中,为了达到数据采集和数据处理的同步,使用SyncLock声明来保证执行的多线程不会同时访问共享数据。 2.2 基于Socket技术实现系统的实时监控[6-7]
监控系统中客户端和前置机均支持TCP/IP协议,同时为了保证采集到的现场设备运行数据通过网络传输时的可靠性、准确性和控制命令传输的及时性,网络通信采用基于TCP/IP基础上的Socket技术来实现,它通过内置的流量控制解决数据的拥塞,将数据当作字节流,应用程序可以发送任意长的数据,这正符合系统对数据的要求,同时客户端发出的调控命令根据设备协议编辑结果组装成数据包,通过现场测控单元发送给设备,实现对设备的调控。
在实现的过程中,通过在应用服务器内封装Socket的服务器端,而在ActiveX控件内封装Socket的客户端应用,并将ActiveX控件嵌入Web页面实现监控界面的显示。当用户第一次访问服务器的网页时,IE浏览器会自动把ActiveX控件下载到本地计算机中,并自动注册。通过使用ActiveX控件和Socket,客户端可以直接读取应用服务器上数据采集程序采集的数据并实时更新,并不需要通过数据库进行中转,这样用户就可以对现场设备进行实时监控。查询历史数据时,用户通过浏览器向Web服务器提出请求,Web服务器接受请求后通过ADO.NET访问数据库,并将查询结果以HTML页面的形式返回到浏览器。.NET框架下在System.Net.Socket命名空间内可以实现Socket接口的托管。以下的示例显示如何使用Socket向服务器发送数据和接收响应。
//发送数据
Dim s As New Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp)//创建Socket对象并通过TCP发送数据
s.Connect(Ephost) //通过特定端口连接服务器
龙源期刊网 http://www.qikan.com.cn
s.Send(ByteGet,ByteGet.Length,0) //向服务器发送采集到的数据 //接受响应
Dim bytes As Int32=s.Receive(RecvBytes, RecvBytes.Length, 0) strRetPage=″Default HTML page on″& server &″:″& ControlChars.CrLf strRetPage = strRetPage+ASCII.GetString(RecvBytes, 0, bytes) 2.3 基于GDI+技术的动态图形的生成和传送[8]
对于远程监控系统不仅要求其能够提供各种数据报表,同时还要求提供各种趋势曲线的分析画面,给人以形象直观的印象中。各种设备对象的运行情况根据实时数据改变状态,动态图形相当复杂,为了将动态图形在浏览器中显示,方便监控中心的工作人员进行监控,在该监控系统中采用了.NET提供的GDI+绘图类库在服务器端生成复杂的动态图形,然后根据浏览器的请求将动态图形实时发送到客户机的方法。.NET生成图形功能在System.Drawing名称空间中封装建立一个普通图形所要求的逻辑后,构造一个图形对象通过它的Save方法将其保存到磁盘或者将其发送到.NET输出流中,在
中通过
属性解释
输
出流,这样就可以直接将图形的内容发送到客户端浏览器。具体实现如下: dim newCharEngine as New ChartEngine
//定义绘图对象,其中ChartEngine使用.NET提供的GDI+编写的画图类模块 dim pl as BitMap=newCharEngine.DrawChart(600,400,myChartData) //使用ChartEngine类,图形生成后以流的形式发送到客户端浏览器 pl.Save(Response.OutputStream,ImageFormat.JPEG) 3 结 语
.NET 是一个开发和运行软件的新环境,便于开发基于 Web 的服务,拥有丰富的运行库服务以支持用多种编程语言编写的组件,具有跨语言和跨平台的互操作能力。基于.NET的远程监控系统实现了对各种监测对象的实时监控,并具有实时故障诊断,历史记录可查询、打印,易于升级和扩展等诸多优点,目前已经在实际中得到了应用。 参考文献
[1]刘建荣,武桦,赵杨.基于.NET的水电厂远程监控系统的研究[ J] .西北水力发电,2006(1):4-7.
龙源期刊网 http://www.qikan.com.cn
[2]郝晓弘,苏渊.基于Web的变电站远程监控系统[ J] .电网技术,2003(7):32-35. [3]张焰林.基于VB.NET的多线程技术应用[ J] .计算机系统应用,2009(2):136-138. [4]冯美霞.多线程应用程序的同步技术[ J] .计算机应用,2001(6):24-26. [5]孙开放,张红.再谈多线程技术在变电站监控系统中的应用[ J] .微计算机信息,2006,22(7):60-61.
[6]鄢锋,桂卫华,胡志坤,等.基于Socket的整流装置远程监控系统[ J] .计算机工程,2008(5):243-245.
[7]李宗宝,陈虹,董航飞,等.基于ASP.NET技术的远程监控系统实现方法[ J] .电力系统通信,2007,34(2):40-42.
[8]牟罕勇,张礼贵.GDI+和.NET技术在机舱自动化监控系统中的应用[ J] .江苏船舶,2009(4):32-34.
[9]胡士毅,魏丰,曹宇.一种基于.NET技术的Web远程监控方案[ J] .工业控制计算机,2003(2):39-40.
[10]王超,张鹏.ASP.NET/XML深入编程技术[M].北京:希望电子出版社,2002.
因篇幅问题不能全部显示,请点此查看更多更全内容