基于Web的电动汽车充电站监控系统设计与实现
2018-02-28侯祖峰李曼康文倩孙圆星憔凯
侯祖峰 李曼 康文倩 孙圆星 憔凯
摘要
此文设计实现了一个基于Web的电动汽车充电站监控系统在给出系统结构、功能和软件逻辑架构的基础上,分析了SVG,Ajax的技术特点,使用SVG进行图形界面的展示,通过jQuery/Ajax实现数据的实时刷新,给出了一种TCP/UDP相结合的实时数据快速传输方法。此Web系统已在tomcat服务器中部署并在多浏览器环境中运行运行结果表明,该Web系统为电动汽车充电站远程监控与信息共享提供了一种有效的解决方案。
【关键词】Web系统 电动汽车充电站SVGjQuery Ajax
充电站作为新能源汽车发展基础设施建设,国家推出一系列支持政策。在政策支持下,我国充电基础设施建设全面铺开,充电市场日趋活跃。这就对充电站管控提出更高要求。SCADA系统作为数据采集和监视控制系统,被广泛运用于各类管控系统包括充电站监控管理。伴随充电站规模日益扩大,对SCADA综合性能提出了更严格要求。而目前SCADA系统基本上采用C/S架构,表现出众多局限性,包括安装困难及后期维护成本高等。基于B/S的SCADA系统逐渐成为一种趋势。目前基于Web的充电站监控系统已有诸多研究,文献[5]所设计有序充电Web监控系统研究出一种较好的充电控制策略,但系统跨平台性与浏览器兼容性上还存在不足。文献[6]及文献[7]实现的监控系统解决了系统跨平台问题,但实时数据从数据库提取削弱了系统实时性。
本文设计充电站Web监控系统在B/S基础上,通过tcp长连接向实时库获取实时数据,B/S端完成逻辑处理并用SVG实现画面展示。浏览器向Web服务器发送Ajax数据请求,Web服务解析请求类型后通过tcp长连接获取实时数据或读取数据库获取历史数据并返回。
1 系统结构及功能
1.1 系统结构
充电站Web监控系统提供SCADA系统数据浏览功能,Web服务器与SCADA网之间通过正向隔离装置隔离。如图1为系统结构图。
充电站Web监控系统使用SVG实现图形界面,通过Ajax实现数据局部刷新。内网具有实时数据与历史数据发送端,外网具有实时数据及历史数据接收端。SCADA服务器将实时与历史数据通过正向隔离装置传输给外网实时库与历史库。历史数据由Web服务器从历史库中读取返回给客户端。针对多客户端并发操作情况,实时数据由Web服务器在sevice层通过本地UDP转发方式将请求先发给TCP长连接程序,再由TCP与实时库之间通信,获取实时数据后逐层返回。
1.2 系统功能模块
系统功能模块包括系统结构、接线图、充电桩监控、计量计费、曲线报表、日报表及充电记录查询等模块。
2 系统逻辑架构
系统逻辑架构如图2,主要包括:客户端、Web服务层、实时数据获取层。
画面显示及数据刷新在客户端实现,对SVG进行解析,获取指定属性作为Ajax请求参数从Web服务获取数据,利用客户端本地存储,将不需更新但需使用多次的数据在本地缓存,返回数据采用 JSON格式。Web服务层由Web、DAO、service层及udp本地转发组成。Web层为Web服务与客户端通信接口,接收解析客户端请求,判断请求类型通过UDP与TCP长连接通信获取实时数据或通过DAO层数据访问接口获取历史数据,最后将结果返回客户端。TCP长连接负责实时数据获取。
3 关键技术及实现
3.1 SVG
3.1.1 技术特点
SVG表示可伸缩矢量图形,其优点体现在:图形缩放不影响打印质量、文件小、动态性、文字与图形独立、交互性强、且完全支持移动端运用等。
3.1.2 具体实现
如图3以充电电压表盘为例,其中使用引入表盘背景,描绘指针,显示电压实时值及表盘刻度文本。
3.2 Ajax数据交互
3.2.1 技术特点
Ajax是Asynchronous JavaScript and XML的缩写。浏览器通过Ajax向后端发送异步请求取回数据对页面进行局部刷新。
3.2.2 具体实现
使用Ajax在客户端与Web服务间实现数据交互,Web服务端针对不同请求有不同处理接口,客户端使用特定URL向后端发起请求,当请求中包含需加密字段或数据量较大时发起POST请求。请求数据量较小时发起GET请求,请求与返回数据均为JSON格式。为保证浏览器兼容性,使用jQuery封装的Ajax实现代码统一。
3.3 获取实时数据
3.3.1 技術特点
Web服务通过TCP长连接与实时库交互将实时数据返回客户端保证实时性。TCP短连接完成一次读写自动关闭,而TCP长连接一经建立将一直保持。频繁刷新数据情况下,长连接长期保持比短连接每次消耗连接时间更适用。
3.3.2 具体实现
实时数据由TCP长连接与实时库交互,其组成如下:
(1)接收Web转发请求。在本地端口监测由Web服务器service层发来的udp数据请求包并验证,验证后的请求进入发送队列。
(2)向实时库发送数据请求。每隔500ms向实时库发送心跳包,当发送队列中有请求时,取出队首请求并发送,发送成功移除队首请求。抛出异常时,标识发送异常标识量。
(3)接收实时库返回数据。接收到心跳包时覆盖接收心跳时间点,接收到返回数据时初步验证并将数据放入接收队列。超过1.7s未接收到心跳包或接收异常时,标识接收异常标识量。
(4)向Web服务器返回数据。检测到接收队列中有数据时提取队首数据并验证,判断无误后将数据返回给Web服务器。
(5)断线重连。当发送数据异常量与接收数据异常量都被标记时,断开连接并尝试重新建立连接。