关键词:地理信息系统 监控系统 Web 实时数据
1、前言
地理信息系统(GIS)在电力系统的应用近年来取得了长足进展,深受广大电力企业的欢迎。随着企业各类信息系统的不断扩大,传统的GIS由于固有的封闭性使得其难以和电力企业其他计算机系统集成应用,耗资巨大的GIS系统不过是企业计算机信息孤岛中的又一个应用系统而已。电力企业希望GIS系统是一个开放的、整合的、能够成为与企业主流信息技术完全集成的空间资源管理(GRM)系统,以便满足企业的信息化管理高层次要求。本文探讨的就是GIS系统和SCADA系统的整合应用以及如何实现WEB方式下的GIS中进行电网运行的实时监控,从而将电力GIS提升为一个在线的系统,赋于GIS系统新的生命力。该系统的设计实现使得用户在任何地方、任何时间能够随意浏览GIS信息以及相应的电网运行状态参数,同时也为电力网的高级计算以及其他深入分析提供了准确、完整的信息。
2、技术前提
目前市面上流行的GIS开发平台有MAPINFO、ARCINFO、G/TECHNOLOGY等,其中G/Technology 是美国INTERGRAPH公司积累其30 多年在公用事业、通讯领域实施AM/FM/GIS 系统的经验,结合最新的开放图形和数据库技术开发的新一代的管网企业地理空间资源管理解决方案平台。该平台套件中的G/Electric为电力企业提供了全球最开放、速度最快、功能最强大的全实时AM/FM/GIS解决方案。G/Electric 将地理设施管理、运维支持、和服务传递应用等无缝地集成在一起,用于管理一个电力事业的规划、设计、建设、运行、维护、以及紧急事件的响应等。它完全结合了企业地理设施数据的配置。G/Electric 的关键组件是一个预置的电力设施网络模型和数据库,保证了工程的快速、正确的执行。G/Electric强大的电力系统技术支持使其成为开发大型电力GIS的首选开发平台。该平台的标准模块之一的G/NetViewer 是GIS在面向Internet /Intranet应用的实现工具,在WEB方式时采用流行的三层结构,可通过浏览器,将所有的用户界面逻辑移至Web 服务器,将业务处理和地理空间设施网络模型充分结合起来,解决分布数据访问,而且支持最新的Microsoft .Net 技术。本文所论述的正是基于GIS平台G/Electric及其重要组成模块G/NetViewer来实现电网GIS中监控实时运行的Web解决方案。
3、系统组成原理以及关键技术
由于G/Electric是一个功能强大的AM/FM/GIS平台,平台并不直接提供表示电网运行的动态数据集成方案,也不能直接进行Web发布,必须对平台进行二次开发来实现Web方式下在电网GIS中监控实时运行。而且在实际调研过程我们发现,在WebGIS中监控电力系统运行状态时,用户总是希望能够在web页面实现对全网或者任意感兴趣的线路、变电站的结构信息以及运行状态进行浏览监测,进而希望能够进行某种在线的电网计算分析。因此基于浏览器GIS应用系统中实现电网运行监控的关键技术首先是如何实现地图以及实时运行状态数据的web发布,然后是实时运行数据显示的web页面能够按照用户指定的时间间隔进行刷新,从而使得企业用户能够在任何时间、任何地点能够根据自己意愿查询、浏览电力网GIS中的相关地图以及相应的实时运行数据。
于是有如图1的系统结构:
因为在G/ELECTRIC平台下构建的GIS中显示的任何对象都是作为一种“设备对象”存在的。G/ELECTRIC提供预定义的电力网相关“设备对象”有:变电站(包括母线、变压器、互感器……)、杆塔、线路、绝缘子、刀闸、开关等等。由G/ELECTRIC提供的电网模型“设备” 并且严格按照电力系统的规则,就完全可以建立起一个标准的电力网GIS系统。为了在GIS系统中显示电网的运行数据,我们设计实时数据显示设备作为G/ELECTRIC的一种用户自定义“设备对象”。在定义完毕描述电网的基本设备之后,定义新的设备“实时数据”,用来显示电网运行状态参数。运行过程中,实时通信模块对SCADA发送的数据进行解码,根据当前数据包的数据代码确定实时数据填充的GIS数据显示对象的实时数据字段,作为改设备显示的内容。“实时数据”设备定义的主要结构参数如表1:
由于实时数据源自电网调度部门的SCADA系统,,经协商约定SCADA系统以UDP/IP协议组包定时向GIS应用服务器发送实时数据,GIS应用服务器对数据包进行解码,并将解码得到的实时数据按照数据代码分别存贮在对应的实时数据显示设备对象相应的字段中。SCADA系统按照表2格式组包发送实时数据:
其中DM(数据代码)描述的是对应SCADA数据的物理意义,实时数据“设备”中的SCADA_DM与其唯一对应,以便实现对实时数据库中实时数据的检索。
这样一来,基于G/ELECTRIC的电力网GIS在WEB方式下进行实时运行状态监控就可以分为数据通信(基于UDP/IP协议实现GIS 中SCADA的数据获取)、数据显示(G/NETVIEWER数据显示)、WEB页面的定时刷新。因此系统由四个逻辑层组成:网络层、数据层、业务对象层和用户界面层。网络层是采用UDP/IP协议实现GIS和SCADA系统通信,对SCADA数据进行解码,存贮在本地数据服务器。数据层是 Oracle数据库系统,管理GIS系统各类数据。业务对象层处理如何访问数据以及如何将数据分发到客户端。在这一层使用G/ELECTRIC提供的web解决方案G/NETVIEWER模块,实现web方式下G/ELECTRIC地图信息的连接、查询、浏览以及数据刷新。用户界面层由基于 Web 的应用程序组成。这一部分完成用户交互界面设计,并且完成如何使得页面按照用户指定时间间隔进行刷新。在页面刷新的同时,调用G/NETVIEWER提供的地图刷新API函数,从而达到web浏览器端地图以及实时数据的刷新显示。程序中使用文档模型对象中window的方法window.setInterval以及window.clearInterval实现页面的定时事件的触发。
3、实现方法
GIS 接受SCADA中以报文方式发送来的电网各测量点的实时信息,包括:电压、电流、有功、无功、电度的实时(各测量点)测量数据。GIS系统接受到信息后,按照定义的通讯格式,进行相应的解包处理,解包处理时,判断当前数据包的scada代码,根据此代码,决定当前接受到的数据写入哪一个实时数据图形对象的数据字段。这样一来,即可实现调度SCADA系统数据信息的在GIS系统中实时刷新。
获取实时数据后剩下的就是如何在web方式下实现页面的实时更新,从而实现web页面中进行电网地理信息系统以及实时运行状态的监视。由于电力系统时典型的缓变系统,理论和实践证明,15min的scada数据已经可以代表电网的运行方式,而实际上实时数据的接收已经达到4s的更新速率,所以本系统中监视页面的刷新应该由用户按照需要实现5s~15min可任意指定的刷新速率,满足电网运行情况的web监视的需要。具体实现时关键技术就是如何实现监视页面按照指定时间间隔进行刷新,实现原理以及具体方法如下所述。
首先实现GIS地图基础信息的web显示,这里利用G/ELECTRIC的G/NETVIEWER应用工具来实现GIS的web显示,在web页面上放置该工具提供的地图显示空间
NetViewerMap Control,然后编写相关数据库连接的前台脚本代码,实现该控件的GIS数据库访问,获取显示图例,实现GIS图例的web显示。关键代码如下:
sub window_onload() ‘页面载入时调用
Dim sConnectInfo, sServerName ‘定义数据库连接相关属性信息
sServerName = "HTTP://DLGIS"
sConnectInfo = "ConfigurationName=" PROD_ ";UserName=" PROD ";Password="PROD_
NetViewerMap1.Connect sServerName, sConnectInfo‘连接数据库
Dim oMetadata, oLegendRS, oOption, sLgndName
Set oMetaData = NetViewerMap1.Metadata
Set oLegendRS = oMetaData.GetLegends()
‘获取GIS图例信息
With NetViewerMap1‘GIS图例显示
.ViewLegend mainform.legends.value
.Map.Fit
.Map.Refresh
End With
end sub
然后是如何实现页面的指定时间间隔定时刷新,这部分使用javascript实现,由于web页面的无状态性,也就是说,当页面第一次按照指定时间刷新后,重新进入该页面时,原来指定的刷新页面的时间间隔参数并不能得到保留,幸运的是cookie为Web应用程序保存用户相关信息提供了一种有用的方法。Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。用户每次访问站点时,Web 应用程序都可以读取 Cookie 包含的信息。其最根本的用途是一种保持 Web 应用程序连续性(即执行“状态管理”)的方法。这里可以利用 Cookie 保存时间参数,这样,当再次进入页面时,应用程序就可以检索相应的cookie从而以前保存的时间间隔参数,并按照该参数进行页面刷新,进而调用NetViewerMap Control的刷新函数,从而实现地图以及SCADA数据的实时显示。
关键代码如下:
function monitor_onclick()
{//开始实施监控
var value = document.Form1.TextBox1.value;
//输入监视时间间隔(秒)
var Then = new Date() ;
var mytime;
Then.setTime(Then.getTime() + 1000 * 60 * 60 * 24 );//设置cookie有效期
documents.cookie = "alerting="+value+";expires="+ Then.toGMTString() ;//保存cookie
value=value*1000
window.clearInterval(timeId) ;//清楚当前定时事件
timeID = window.setInterval("refresh", value);//按照输入时间间隔触发refresh函数
}
function window_onload() {//载入页面时调用该函数
var timeid;
var mytime=getcookie("alerting");
//读取上次保存的时间参数
if(!mytime)
mytime=0//停止实时监控
else{
var Then = new Date() ;
Then.setTime(Then.getTime() + 1000 * 60 * 60 * 24 ); //设置cookie有效期
mytime = mytime * 1000;
window.clearInterval(timeId) ;
documents.cookie = "alerting="+mytime+";expires="+ Then.toGMTString() ; //保存cookie
timeID = window.setInterval("refresh", mytime);
//按cookie中读取的时间间隔参数触发refresh函数
}
function getcookie(name)
//cookie读取函数,参数name为保存参数的名称,本文中为alerting
{ var prefix = name + "="
var cookieStartIndex=documents.cookie.indexOf(prefix)
//取得参数数值的起点位置
if (cookieStartIndex == -1)//没有找到该参数
return null
var cookieEndIndex = documents.cookie.indexOf(";", cookieStartIndex + prefix.length)
//取参数数值终点位置
if (cookieEndIndex == -1)
cookieEndIndex = documents.cookie.length
return unescape(documents.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex))
//返回参数名称name所对应的参数数值}
上述javascript代码实现事件refresh的定时触发,刷新时间间隔可以根据用户需要任意指定,只需要按照G/ELECTRIC的web解决方案中提供的vbscript方法编写地图以及相关数据的刷新相应函数refresh如下,即可实现GIS地图信息以及SCADA数据的web显示。
刷新函数refresh代码如下:
sub refresh()
Public oGNV ‘定义显示图形对象
set objshell = CreateObject("Shell.Application")
objshell.shellexecute "net", " use \\dlgis\mapfiles guest /user:guest",0,0,0‘读gis数据库,连接地图
oGNV = document.all("GNV")‘获取显示图例
oGNV.BroadcastDatabaseChanges=True
oGNV.Map.Refresh=True
’地图显示控件的刷新属性使之为true,
‘refresh()执行时侧地图自动刷新。
end sub
实际显示效果如图2所示:
4、结论
基于WebGIS的电网运行实时监控系统的实现,使得用户不但可以上网查询、浏览电网结构以及电力设备的有关属性信息,还可以随时随地根据需要对电网运行参数进行监视,可以方便、直观地监控全局运行情况,实现总体控制。GIS以及SCADA数据的web显示技术的突破,为电力系统计算机管理自动、准确、及时地提供更为详尽、丰富的数据,对于提高供电质量、用电可靠性和提高电力企业自身水平必将产生较大影响,同时也为基于电力网GIS和SCADA系统的电网在线分析计算提供了一种新的思路,奠定了一定的基础。文中有关技术同样可以用于其它基于web的工业现场数据监控。