基于C/S 架构的分布式电源监控系统的设计与实现*
2018-05-09孔祥玥吴志锋宋香荣
孔祥玥,吴志锋,舒 杰†,宋香荣
(1. 中国科学院广州能源研究所,广州 510640;2. 暨南大学韶关研究院,广东 韶关 512000)
0 引 言
近年来以光伏发电为代表的分布式发电技术由于其经济可靠、环境友好的特点,得到欧美多个发达国家的重视,政府纷纷出台相关利好政策去扶持该技术,分布式发电技术及其实施得到良好的发展与普及[1-3]。我国地域面积辽阔,太阳能资源丰富,为光伏的利用提供了有利的条件,据国家能源局统计,2017年我国分布式光伏发电装机达到2 966万kW,其中,新增装机1 944万kW,同比增长 3.7倍。可见分布式发电技术的应用在我国发展迅猛、前景可观;随着光伏发电设备成本以及安装成本的进一步下降,诸如屋顶光伏之类的分布式光伏电站将会在工业园区、商业建筑、大学园区乃至居民住宅中进一步普及。
光伏发电存在随机性以及间歇性的特点,在实际应用中,系统大部分时间处于无人值守运行状态,为充分有效地协调发电、储能以及负荷的功率平衡关系,对系统的运行参数进行实时监控及数据分析显得极为重要。国内外学者对光伏电站远程监控技术与应用进行了研究。ALUISIO等[4]提出一种基于1日预测调度功能的热电联供微电网监控架构;MANUR等[5]提出一种基于多个独立用户和多个分布式电源的微电网并网监控、通信、计算的通用平台;姚珏菂等[6]针对恶劣的气候环境提出了详细的解决方案,设计了一套完整的光伏电站监控系统;王辉等[7]针对家庭式分布式电源(distributed energy resource, DER)设计了一套基于浏览器/服务器(browser/server, B/S)架构的分布式电源并网监控系统;CHIEN等[8]深入探讨了微电网监控人机交互系统中的用户需求以及接口模型。相关文献及研究成果指出,已有的监控系统大多基于上位机监控软件技术,或者基于网页(Web)浏览器,甚少采用手机APP形式。只要存在无线数据网络,手机客户端就能随时随处接入系统,便于用户及时了解现场设备的运转情况。结合已有的实施案例及经验,本文提出一种基于客户机/服务器(client/server, C/S)架构的分布式电源远程监控系统,用户可通过安卓(Android)移动终端对系统进行实时监控,并实时接收系统关注事件的消息推送。文中介绍了该监控系统的总体架构,并着重对 Android客户端及其后台服务器软件的功能和关键技术进行详细介绍。
1 系统总体架构
分布式电源具有设备多、数据量大、分布区域广、地理位置偏远等特点,分布式发电单元之间的信息共享和交互要求较高。本文提出的分布式电源监控系统采用分散采集、区域汇聚、集中处理的体系结构,由现场服务器对站点的发电单元数据进行汇集,由云端服务器对数据进行集中处理;数据传输层面采用C/S结构,由云端服务器提供高性能的超文本传输协议(hyper text transfer protocol, HTTP)服务以及消息推送服务,以安卓应用程序(Android application, Android APP)作为人机交互接口供电站用户使用,确保系统的可靠性、安全性、实用性以及扩展性。
图1 系统架构图Fig.1 Architecture of the system
系统结构从功能上划分为4层,如图1所示,由下至上分别为设备及数据采集层、现场数据管理层、用户层以及服务层。
1.1 设备及数据采集层
设备及数据采集层由分布式发电设备及相应的测量设备、控制设备组成。其中,分布式发电设备如光伏组件、逆变器、汇流以及蓄电池等,实现太阳能等可再生能源的发电及电流电压的转换、平衡;测量设备包括模拟量测量及开关量检测,对各种电流、电压、频率等电气属性以及开关的通断进行测量、汇报;控制设备根据上层下达的指令对各种保护开关进行开合控制并对蓄电池进行充放电控制等。
1.2 现场数据管理层
本地数据管理层通常由一台性能稍好的计算机来实现,负责两个基本功能:一是对下层收集上来的数据进行解析、整理,并按照一定的协议、格式将此数据上传至云端数据库服务器,实现云端数据与本地数据的同步;二是提取由云端应用服务器下发的控制指令,并转发至下层实现对现场设备的控制。对于具备预测调度功能的分布式发电系统,该层根据气象监测数据以及预测算法运行计算,进而执行相应的调度操作。
1.3 用户层
用户层主要为终端用户提供客户端应用,通过该客户端应用,用户可以方便地浏览设备状态信息,对设备进行远程控制,并接收系统的实时推送消息。客户端应用可以是WEB客户端,也可以是APP客户端。WEB客户端以B/S的方式进行运作,用户主要通过计算机的浏览器对服务器进行访问;APP客户端以C/S的方式进行运作,用户通过手机APP对服务器进行访问。相对于WEB应用,手机APP在接收服务器的推送消息方面显得更胜一筹,对设备的突发事件掌握得更为及时,有利于对分布式电源系统的整体监控。
1.4 服务层
服务层包括应用服务以及数据库服务,该层在系统中负责四大功能:一是接收本地数据库上传的运行数据,与本地服务器维持数据同步;二是响应客户端的请求,包括数据查询修改以及对控制命令的转发;三是与本地服务器及移动客户端维持长连接,对消息进行及时推送;四是对海量的发电数据进行管理及备份。
2 服务器的设计
云端服务器的框架采取 Apache+PHP+MySQL的形式,其中,Apache是一个开源的、模块化的Web服务器;MySQL是一种关系型数据库管理软件,具有轻巧、高效以及部分开源等特性;PHP是一种通用的脚本语言,主要适用于 Web开发,对MySQL具有良好的支持。如此,Apache、PHP和MySQL成为一个开源、跨平台的服务器组合,可以轻松构建于Windows或Unix操作系统之上。服务器的主要功能模块及工作流程如图2所示。
图2 服务器工作流程Fig. 2 Flowchart of the server
如图2所示,Android客户端与服务器之间的数据交互有两种形式。一种是请求-响应的形式,由Android客户端向服务器提交HTTP请求,服务器对此请求进行解析从而获取请求参数,通过PHP库函数中的mysqli接口对MySQL数据库进行相应操作,最后将操作结果经过JS对象标记(JavaScript object notation, JSON)封装后形成一个HTTP响应返回给Android客户端;一种是服务器的主动推送形式,服务器与Android客户端通过WebSocket协议维持一个长连接,当有新消息过来的时候,服务端查出该消息对应的目标地址,并找到相应的WebSocket通道进行消息下发。
3 Android客户端的程序设计
3.1 功能模块说明
根据分布式电源监控的具体需求,把 Android客户端(以下简称APP)的用户功能梳理成5部分,具体如图3所示。
图3 Android客户端结构图Fig. 3 Structure of the App
软件的主要功能如下:
村干部来源于乡村,对本地风土人情文化、各家各户的情况了如指掌,了解村民思想、顾虑、诉求、目的,熟悉村民思想工作的方法,因此,更容易将国家的政策精神传达到户,便于分散的农户统一思想、统一认识、统一进行旅游开发。
①登录/注册模块。系统内用户划分为多个类别,包括超级管理员、管理员、操作员、游客等,对应不同的操作权限。用户登录后,App从服务器获取其权限类别,用户仅能进行权限规定范围之内的操作。
②站点管理模块、设备管理模块。管理员级别以上的用户可以对此项进行管理,包括新增、删除、信息修改等。其中,设备管理模块还具有对设备的控制功能,主要体现在对设备通、断的控制。
③数据查看模块。数据查看模块包括遥测、遥信实时数据的查看、告警事件的查看以及遥测历史数据的查看。遥测历史数据可选择以1 min、5 min、1 h或1 d为步进量来进行查看,具有曲线图以及数据表格的展现形式。
④设置模块。设置模块包括用户设置以及系统设置,用户设置用于用户的个人信息设置、密码修改;系统设置用于公司信息设置、数据字典管理以及用户权限管理,系统设置权限仅对超级管理员开发。
3.2 开发平台及语言
APP的开发平台采用安卓工作室(Android Studio),开发语言采用Java及HTML、JSP等。Android Studio是基于IntelliJ IDEA的官方Android应用开发集成开发环境(integrated development environment,IDE),除了IntelliJ本身所具有的强大的代码编辑器和开发者工具,Android Studio还提供了多个可提高Android应用构建效率的功能,如开发中协助调试的Android设备模拟器等。
3.3 软件设计流程
Android客户端软件的开发遵循模型-视图-控制器(model-view-controller, MVC)模式,这是一种软件设计典范,在当前的网页、Android以及iOS的应用开发中广泛流行,该技术采用业务逻辑、数据、界面显示分离的方法来组织代码,有助于管理复杂的应用程序,简化了分组开发,同时也让应用程序的测试更加容易。在该模式下,系统框架的分类有3种:模型(model)、视图(view)、控制器(controller),控制器对象负责获取用户的按键和屏幕触摸等事件,协调模型及视图对象。
图4 推送事件软件流程图Fig. 4 Flowchart of Notification
该软件的主要控制逻辑包含两部分,一是对服务器的主动推送事件的处理,二是App对用户按键屏幕触摸等事件的响应处理。推送事件软件流程如图4所示,用户登录成功后,APP创建到服务器的WebSocket连接,并通过心跳机制与其保持连接,同时对指定端口进行阻塞侦听,一旦收到推送消息,则向服务器发送确认消息,同时根据消息内容对相应数据进行同步,并在用户界面(user interface, UI)作相应的页面更新。
APP点击事件软件流程如图5所示,APP对用户按键、屏幕触摸等事件进行监听,对于涉及显示具体数据的操作,APP从服务器请求数据,如果网络请求成功,则在UI显示中作相应的更新,同时把该数据同步到本地数据库中;如果网络请求失败,则从本地数据库中调取数据到UI中作相应的更新,同时在UI中提示网络请求失败。
图5 点击事件软件流程图Fig. 5 Flowchart of Click Event
3.4 关键函数应用
3.4.1 网络数据请求
APP的网络数据请求通过HTTP异步请求代理实现,具体采用GitHub上的开源库Asynchttpclient[9],该代理构建于Apache的HttpClient库,所有的网络请求都在APP的UI主线程以外执行,采用线程池来处理并发请求,回调函数则在原线程中执行。
Asynchttpclient的应用说明如图 6所示,APP在主线程中通过 ProcessRequest.get()函数向服务器提交网络请求,具体的网络通信在后台执行,执行结果以回调函数的形式在主线程中进行。
图6 Asynchttpclient应用说明图Fig. 6 Usage of Asynchttpclient
3.4.2 服务器推送消息的接收
服务器消息推送采用WebSocket协议,APP端采用 GitHub开源软件包 WebSocketClient[10],这是完全用Java编写的WebSocket客户端软件包,该软件中WebSocket协议的实现基于RFC6455[11],能够很好地工作于Android4.0及更高版本中。
图7 WebSocket应用说明图Fig. 7 Usage of WebSocket
WebSocketClient的应用说明如图7所示,自定义一个类继承自 WebSocketClient,重写 onOpen()函数用以打开连接,重写onMessage()函数用以处理接收到的新消息,重写 onFragment()函数以处理收到的数据帧。当连接被关闭或发生错误时,则分别调用onClose()、onError()函数进行相应处理。
3.4.3 本地数据库
APP在本地的数据采用SQLite数据库进行存储与管理。SQLite是一款轻量级、零配置、跨平台的开源数据库,支持标准的SQL语句操作,广泛应用于iOS以及Android的APP中。SQLite的基本应用包括数据库的建立(采用openOrCreateDatabase()函数)以及数据表格的建表、增删改查等操作(采用execSQL()函数)。
4 运行结果
为查看系统的运行效果,做了以下准备工作:把后台PHP代码以及Java代码部署到服务器上,做好相关配置,并启动Apache以及MySQL服务;在Android Studio3.0.1上完成APP代码的编译,并运行于自带的Android模拟器上。App顺利运行,其部分截屏如图8所示。
图8 App部分截屏Fig. 8 Screenshot of the App
经过多次反复试验,结果表明,本系统确实能够准确及时地展现分布式发电单元的实时运行数据,能够实时接收系统推送,并能够对控制单元下达设备通、断等控制指令,实现遥测、遥信以及遥控等功能,达到了设计要求。
5 结 语
随着以光伏发电为代表的可再生能源发电技术的发展以及国家政策的相关扶持,分布式发电的普及化和规模化是未来的发展趋势。本文提出的基于Android应用以及云端管控的分布式电源监控系统,对系统中各功能模块进行合理抽象的划分,普遍适用于各种规模的分布式发电微电站,能够准确、实时的实现对分布式发电单元的遥测、遥信、遥控以及历史数据的查询;随着云服务器租赁成本的日渐下降以及 Android手机的良好普及,进一步体现出该系统的经济性、实用性。
参考文献:
[1]ALI A, LI W H, HUSSAIN R, et al. Overview of current microgrid policies, incentives and barriers in the European Union, United States and China[J]. Sustainability, 2017,9(7): 1146. DOI: 10.3390/su9071146.
[2]BAYINDIR R, BEKIROGLU E, HOSSAIN E, et al.Microgrid facility at European Union[C]//Proceedings of 2014 International Conference on Renewable Energy Research and Application. Milwaukee, WI, USA: IEEE,2014: 865-872. DOI: 10.1109/ICRERA.2014.7016509.
[3]谢晓惟,梁秀红,梁勃.德国光伏发电综述[J]. 太阳能, 2015(2): 6-10, 14. DOI: 10.3969/j.issn.1003-0417.2015.02.002.
[4]ALUISIO B, CAGNANO A, DE TUGLIE E, et al. An architecture for the monitoring of microgrid operation[C]//Proceedings of 2016 IEEE Workshop on Environmental, Energy, and Structural Monitoring Systems (EESMS). Bari, Italy: IEEE, 2016: 1-6. DOI:10.1109/EESMS.2016.7504809.
[5]MANUR A, VENKATARAMANAN G, SEHLOFF D.Simple electric utility platform: a hardware/software solution for operating emergent microgrids[J]. Applied energy, 2018, 210: 748-763. DOI: 10.1016/j.apenergy.2017.07.073.
[6]姚珏菂,王延民,孙东旭. 20MW光伏电站监控系统设计与优化[J]. 电子设计工程, 2015, 23(5): 50-54. DOI:10.3969/j.issn.1674-6236.2015.05.016.
[7]王辉,王敬华,徐丙垠,等.基于B/S架构的分布式电源并网监控系统设计[J]. 电力系统保护与控制, 2016,44(14): 160-165. DOI: 10.7667/PSPC151070.
[8]CHIEN S C, FUJIYAMA M, ISHIDA T, et al. User interface model for microgrid systems monitoring: from user needs to design requirements[C]//Proceedings of the 5th IET International Conference on Renewable Power Generation (RPG). London, UK: IEEE, 2016. DOI:10.1049/cp.2016.0530.
[9]Android Asynchronous Http Client[Z/OL]. (2015-09-19)[2017-12-18]. https://loopj.com/android-async-http/.
[10]Java-WebSocket[Z/OL]. (2012-02-04)[2017-12-18]. http://tootallnate.github.io/Java-WebSocket/.
[11]The WebSocket Protocol: RFC6455[Z/OL].(December 2011)[2017-12-18]. https://datatracker.ietf.org/doc/rfc6455/.