基于IOCP的远程配电网监测系统服务器端框架设计
2014-04-13曲豫宾,杨帆,李芳
曲 豫 宾 ,杨 帆 ,李 芳
(南通纺织职业技术学院,南通 226007)
国家电网发展极为迅速,而电力供应的稳定及时直接影响着国民经济的发展,如何及时获取某个区域的电网状态,并对电网运行情况进行分析统计成为各个电网子公司都要解决的问题。特别是在偏远的山区,如何能够保证电网的畅通,及时响应网络状态,是一个亟待解决的现实问题。配电自动化指的是利用计算机技术、通信技术、传感器技术,结合配电设备等,对配电网进行在线监测或者离线数据分析,使得配电网可以一直处于正常、高效、经济的运行状态。目前,配电网系统中数据采集部分应用的通信媒体主要有以下几种方式:短距离长线、市话网、Internet网络、自组网络(CDPD网)、数传电台和GSM无线通信网络[1]。不同的通信媒介有其自身的优点,应该因地制宜选择不同的传输介质。GPRS是通用分组无线业务(General Packet Radio Service)的英文简称,它支持TCP/IP协议,可以与Internet进行数据互联。GPRS具有实时性强、数据容量大、覆盖面较广、信号较强等优势,适合作为配电自动化系统的传输介质[2]。近年来,已经有学者提出并设计了完整的基于GPRS的配电网监测系统[3-6],文献中对于服务器端如何与配电自动化设备进行接口,服务器端该如何设计以满足用户需求描述并不多。电网业务复杂,需求灵活,特别是县市一级的用户往往要面对个性化的业务需求,多变个性化的业务需求要求配变电管理系统服务器设计能够快速开发及部署,针对多变的业务需求要能够实现快速迭代,在保证开发效率的基础上如何兼顾服务器系统运行的健壮性,也是配变电管理系统开发设计时候要重点解决的问题之一。在软件架构方面进行合理的设计,采用高内聚、低耦合的系统设计原则,使用成熟稳定的2G网络,或者目前正在逐步完善的3G网络,通过传感器收集配电网信息,在服务器端及时分析处理,可以作为对远程配电网监测的一个完整的解决方案。
1 配电网监测系统功能模块设计
配电网监测系统是一个整体的系统,需要多个终端硬件、数据传输网络、服务器处理系统等多个系统的配合完成。配电网远程监测系统要完成监测和数据分析任务,需要实现如下的几个功能模块:
1)电网传感器的功能设计。传感器处于整个系统的基础部分,它负责整个系统的数据采集及上传,起着下位机的角色。该传感器在整个系统中又被称为综测仪。综测仪要完成电网数据的采集、数据的数字化,以及将数据按照约定协议在应用层打包上传等功能。该部分属于系统的硬件实现部分,在本文中不再具体阐述。与整个系统框架相关的是电网传感器与服务器通信时候的协议设计。综测仪要向服务器传输诸如停电数据、实时数据、运行参数、整点数据等电网数据信息。
2)远程服务器的功能设计。远程服务器在整个系统中起着数据汇聚的作用,远程服务器采用C#来实现,负责停电数据、实时数据、运行参数以及整点数据的接收、分析、处理、存储,用户管理,电网线路管理,下位机综测仪管理,系统日志管理等。
3)数据展示模块的功能设计。数据展示模块是用户直接查看,分析数据的模块,设计的原则重在给用户提供快捷方便的数据展示页面,提高用户的体验。系统设计采用Web页面及基于Android的手机客户端展示两种方式。Web页面具有易于部署、用户无须升级等优点,而Android手机客户端具有方便,可随时随地访问数据、管理数据等优点,而且在手机客户端上也可以实现较为复杂的业务逻辑,满足用户的个性化数据管理需求。
2 配电网监测系统软件架构
配电网监测系统的核心在于综测仪硬件的实现,系统的软件架构实现,高性能多并发服务器设计,以及具有良好用户体验客户端的设计。其中硬件功能的实现不属于本文论述的内容。本文的重点在于软件架构实现及服务器设计上。目前配电网监测系统主要面向地市级电网子公司,因此可扩展,易于部署和维护的服务器设计才能更好地满足用户需求。
2.1 层次化的架构设计
高内聚低耦合的软件架构设计有利于软件系统功能的扩展和传输介质的升级,系统架构设计见图1。通用的协议设计,使得整个系统具有良好的扩展性。具体到各层分别实现不同的业务逻辑:①数据采集层,负责数据采集及传输。数据采集层与传输层之间采用自定义协议,使用socket通信,此种方案的优点在于避免中间层,服务器可以设计高并发的架构以承载多个综测仪终端,提高传输效率。②数
据采集层与传输层使用TCP协议进行双向通信,传输层采用成熟的2G网络或者3G网络,传输层负责把数据采集层获取的数据完整传输到业务处理层中去。③业务处理层作为数据的交汇层,负责解析数据,对数据进行分析、处理、存储。该层的关键问题是数据接收和数据持久化。为了提高系统开发效率以及提高系统稳定性,数据持久化采用ORM进行处理。采用ORM设计的优点是解除业务处理逻辑与数据存储的耦合,便于数据库的更新和调整。目前系统采用SQL Server数据库进行数据存储,未来节约成本可以采用MySQL数据库进行数据存储。数据接口层采用Microsoft ADO.NET Entity Framwok进行实现。在数据接口层,采用面向对象的编程思想以及数据库视图可以有效解决业务重构问题。④数据展示层负责电网数据的展示。为了提高用户体验,Web页面采用Jquery技术进行异步刷新,展示电网实时数据,采用图表控件可视化展示电网运行参数等数据。
2.2 高并发服务器设计
Windows操作系统提供了选择、异步选择、事件选择、重叠I/O和完成端口(Completion Port)共5种I/O模型。每一种模型均适用于一种特定的应用场景[7]。选择模型通过轮询网络读和写队列方式socket提供服务;异步选择模型基于Windows窗口消息机制进行事件处理;事件选择模型为每个socket连接建立事件对象,通过事件等待模型提供服务;重叠I/O模型基于I/O端口,在该端口上提交重叠结构数据结构,端口完成时使用异步事件对象模型或者完成例程进行操作。为了提高系统并发性,系统设计采用基于IOCP的模型。IOCP模型是Windows上非常复杂的网络编程模型,该模型引入完成端口的概念,通过多个工作行程在完成端口上进行业务操作。每个socket都绑定在一个完成端口上,通过重叠I/O异步发送数据收发。基于IOCP的网络模型工作流程如图2所示。
图1 配电网监测系统分层架构设计
3 配电网监测系统关键代码实现
3.1 高并发服务器设计核心代码
在.NET平台上,完成基于IOCP的网络通信过程,提供了更加方便友好的使用方法。该模型是Windows系统中最复杂的网络编程模型,提供了良好的扩展性。系统中配电网远程监测系统的服务器设计共涉及核心类5个,以类库的方式为整个解决方案提供应用类。服务器类库结构图见图3。
SocketListener类是服务器包的核心类,负责服务器启动及监听,数据读写操作等。该类以单件模式运行。整个系统中运行一个SocketListener类的实例对象,在端口7020进行监听。BufferManager类用于对Socket-AsyncEventArgs所使用的缓冲区集中进行管理,便于缓冲区的分配释放与回收。MySocketAsyncEventArgs是自定义的SocketAsyncEventArgs类,用于定义配变电管理系统数据收发中所要用到的信息,Socket-AsyncEventArgsPool是用于保存SocketAsyncEventArgs对象的池,该池以栈的形式进行对象分配回收,该工具类同时也作为发送数据请求指令的统一入口。Token类中定义了用于同步界面与业务逻辑的处理方法,通过事件机制,异步刷新客户端状态展示。MessageHandler类负责处理各种类型的报文信息,比如整点数据、统计数据、停电数据、运行参数等,该类以静态方法向外提供服务。该类将服务器中接收到的数据校验以后,传入先进先出消息队列,通知其他类持久化到数据库中。
SocketListener类作为系统用于提供监听服务的类,通过在主线程中定义并初始化静态对象为其他类提供引用。
public static SocketAsyncServer.SocketListener mySocketListener;
SocketListener类中通过同步信号量EventWaitHandle向数据库服务器中写数据的线程发出有信号的事件。
private EventWaitHandle _messagesCanWriteToDBSignal;
SocketListener类中通过事件机制来实现对完成端口数据的读写,其关键代码如下:
图2 IOCP网络编程模型
图3 服务器类库结构图
MessageHandler类的作用是报文处理,实现报文处理的关键代码如下:
3.2 数据展示层核心代码
数据展示采用两种方式与服务器进行通信,分别实现不同类型数据的展示。日常统计数据采用Ado.NET连接SQL服务器,从数据库服务器获取数据并展示。Web页面具有访问方便、易部署的特点。不要求实时的数据都可以采用直接从数据库中取数据的方式进行访问,这样可以降低服务器设计难度并提高软件的健壮性。第二种方式是实时数据的读取,采用socket进行数据通信。
实时数据请求要求服务器能及时进行响应,服务器端采用支持多并发的服务器,将数据请求指令转发给下位机,获取下位机上传数据以后,以socket回发给客户端。
实时数据的获取展示问题是服务器端框架设计中的一个亮点和关键点。实时数据获取及展示存在两个问题:一是普通客户配置的服务器性能较差,不能满足海量客户机及Web浏览器数据请求及数据转发任务;二是由于实地网络环境的差异性,普遍来讲城市网络信号较好,而郊区网络信号较差,这是制约该系统能否进行实时数据展示的非常重要的一个问题。如果刷新速度较慢,那么用户体验较差。有鉴于此,提出了socket+数据库缓冲的解决方案。该方案设计模型见图4。
Web浏览器通过socket与服务器端监听进程在7019端口进行通信,服务器端采用IOCP模型进行设计可以实现5000左右客户端的并发连接。服务器伺服进程接收到实时数据请求以后,进入数据请求队列,发送给下位机,即指定编号的下位机。这里用到了之前提到的IOCP模型。下位机在接受到指令后,检索并上传数据到服务器端。服务器端将该实时数据存储到数据库中。这是系统的亮点。如果网络状况较差,则存在多条数据叠加的情况,那么数据库中的数据会被最新数据覆盖。这样可以解决服务器端由于性能较低无法及时响应及网络较差延时较大的问题。在Web浏览器端设置定时的异步刷新,从数据库中取出最新数据,并展现给用户,实践证明,该方案可以有效解决服务器性能瓶颈及网络延迟较大的问题,有效提高用户体验。
图4 实时数据访问模型
4 结语
基于IOCP的远程配电网监测系统服务器端框架设计能够满足监测电网并管理电网数据的需求。软件架构设计具有良好的扩展性,服务器设计合理能够满足多综测仪客户端并发的需求。但是该系统也存在一些需要完善和优化之处。目前服务器运行成本较高,服务器框架仍需要优化。为了管理的方便,可以采用Windows系统,要降低用户成本可以采用Linux操作系统,并使用开源网络框架,比如Mina或者Libevent等高性能框架,进一步提高系统性能及稳定性。可以考虑在Linux服务器端使用C语言或者JAVA语言进行服务器设计,提高服务器处理效率,也可以添加分布式数据库缓存,提高MySQL数据库访问速度。
[1] 张海龙.基于GPRS的配电网远程数据采集系统的研制[D].沈阳:沈阳工业大学,2009.
[2] 钟章队,蒋文怡,李红君.GPRS通用分组无线业务[M].北京:人民邮电出版社,2001.
[3] 赵燕云.电网设备远程监控系统的设计[J].西安科技大学学报,2012,32(4):505-506.
[4] 赵启成,靳国辉,杜良.基于GSM_GPRS供配电远程监测系统的开发与应用[J].油气田地面工程,2010(9):69.
[5] 张宇,赵春,林森.配电网运行状态在线监测系统[J].电工技术,2012(9):9.
[6] 何四海,易建波,王均,李永彬.基于智能手机的配电网现场作业管理系统[J].中国电力,2010,45(7):78-83.
[7] 罗莉琴,詹祖桥.Windows网络编程[M].北京:人民邮电出版社,2011.