1 前言
Internet在人们生活与工作中的应用越来越广泛,其上承载的业务除了目前的多媒体、电信、公用信息服务外,将来还会包括越来越多的电子商务、企业Intranet信息服务等业务。研究开发本系统的目的就是适应这种趋势,突破目前电网自动化管理系统的封闭局面,在Internet各处均可用浏览器监控电网运行动态情况。以便于将电网监控与数据采集系统、负荷控制系统以及电网生产管理系统等组合为一体,在自动化水平、电网运营管理和经济与人力投入等方面获得较高的性能价格比。
同时Internet上各种新技术的出现与应用也使这种设想成为可能,其中基于组件对象模型(COM-Component Object Model)和Windows 32位应用编程接口(Win32API)的ActiveX技术尤其引人注目。本系统的实现主要是基于这种技术。
1.1 ActiveX技术简介
ActiveX是Microsoft提供给广大开发人员把计算机桌面环境与Internet及其大量资源集成起来的技术。它使用COM使得软件组件在网络环境中可以进行交互。它与具体的编程语言无关。作为针对Internet应用开发的技术,ActiveX被广泛应用于Web服务器以及客户端的各个方面。
ActiveX既包含服务器端技术,也包含客户端技术。其主要内容是:
●ActiveX控件(ActiveX Control):用于向Web页面、Microsoft Word等支持ActiveX的容器中插入COM对象。
●ActiveX文档(ActiveX Document):用于在Web Browser或者其它支持ActiveX的容器中浏览复合文档(非HTML文档),例如Microsoft Word文档,Microsoft Excel文档或者用户自定义的文档等。
●ActiveX服务器框架(ActiveX Server Framework):提供了一系列针对Web服务器应用程序设计各个方面的函数及其封装类,诸如服务器过滤器、HTML数据流控制等。
1.2 ActiveX控件和Internet
ActiveX控件可作为Internet控制嵌入到Web页面中。
用户访问嵌有ActiveX控件的Web页面时将下载该控件并自动在本地注册,在Windows的System目录下就保存有很多Windows提供的ActiveX控件。ActiveX的自动下载功能是指,①若客户机中不存在该控件,则该控件能下载到客户机并完成注册;②若客户机已存在该控件,则判断其版本是否为最新,若不是,则下载并注册更新。
利用脚本描述语言(如VBScript或JavaScript)可以在ActiveX控件之间以及客户端与服务器之间通过设置属性(Property)、调用方法(Method)和激活事件(Event)进行通信。
与Java Applet相比,ActiveX不需要在虚拟机上解释执行,故执行速度较快。虚拟机使Java Applet在客户端的操作受到很大的限制,如不能对客户端的端口、文件进行读写等。但经过“代码签名”(Code Signing)安全信任的ActiveX控件则不受此限制,并且“代码签名”技术也提供了ActiveX在Web上发布的安全性保证。
Internet Explorer 3.0以上版本支持ActiveX。同时,Microsoft提供了Netscape Navigator的插件(Plug-In),从而使Navigator也可以浏览一部分包含有ActiveX控件的Web站点。
2 系统总体功能与结构
本监控系统可以使用户在通过管理系统网关的身份验证后,在Internet各处用浏览器监控整个电网运行动态情况。具体来说完成:
●对整个电网及各个变电站(所)动态运行情况进行监控(从安全的角度出发,目前版本没有操作票的置放功能);
●直观显示整个电网及各个变电站(所)接线图,包括开关,刀闸、线路名称、状态等,以及数据的动态刷新;
●随意在各个变电站(所)画面间切换;
●事故自动显示、报警等功能;
●画面打印、事故打印等功能。
用户只需在客户端安装IE4.0以上版本,几乎不需要任何其他浏览器配置。
系统的总体结构如图1所示。

图1 系统结构图
3 系统实现
在系统实现过程中,主要有以下几个问题需要解决,下面分别介绍。
3.1 电网运行画面的组织
电网运行画面的特点是图元种类多、图形复杂,图元需要根据数据来改变状态,如开关的闭合。且系统有经常更改、扩充设备的可能性,故不可能将画面做成固定的图形。所以考虑用文件结构来表达电网运行画面的组织,而由嵌入浏览器中的ActiveX控件来解释执行画面组织文件。图形文件的合理组织对减小画面文件大小以提高网络传输效率非常重要。
画面文件由图元组成。根据对电力系统常用标识的选择和电网运行画面操作的需要,将图元分为如下两种类型:背景对象和前景对象。其中背景对象指不需要动态刷新的图元,包括直线、折线、矩形、椭圆、圆弧、圆饼、圆弦、文字等;前景对象类指需要根据传输的数据改变状态的图形图元,包括遥测、曲线、发电机、电容、电抗、接地符、开关、刀闸、潮流、工况、画面标志、仪表图、曲线量、命令标志、电力线路等图元。图元则由更基本的图形要素如直线、折线、矩形、椭圆等组成。每个图元对应一个图元文件,其中记录着图元的组织方法。
画面文件中的画面设置包括画面背景颜色、画面尺寸等要素;图元类型用来区别图元的种类;图元设置包括图元在画面中的位置、图元颜色、图元线条粗细、图元的放大倍数、图元对应的场号、序号、图元所对应的图元文件名称等要素。
画面文件采用这样的矢量描述方法,可以使画面在放大的情况下不失真变形;同时也可大大减小画面文件的尺寸大小,一幅800x600,包含1000余个图元的画面文件只需十几K字节就可描述。系统提供了图元编辑器和电网图形编辑系统,在电网结构的修正、更新时,只需在服务器端用电网图形编辑系统重编画面文件,再传输给客户端即可。
3.2 客户端与服务器之间的数据传输
客户端与服务器间传输的数据不仅包括动态数据,还包括画面文件及各种图元文件。客户端Web中嵌入的ActiveX控件通过自定义端口,使用Winsock API函数来完成与服务器之间的数据传输。
当客户端用浏览器察看电网运行情况时,如客户端没有对应的画面文件或图元文件,则向服务器请求对应的文件,由服务器传输过来。
传送的动态数据文件分别包含遥测、遥信、开关以及刀闸量等信号的数值,大小约为十几K~几十K字节。由于画面数据动态刷新数据量大,鉴于Internet上的传输速度,目前只要求10秒左右画面数据全部刷新一次。画面上需要动态刷新的图元分别在内存中保存一个链表,由ActiveX从端口读写由服务器传输来的数据,并根据数据值分别刷新对应的图元状态。
客户端与服务器之间数据传输流程如图2所示,

图2 客户端与服务器之间的数据传输过程
3.3 客户端图形画面间的切换与画面的动态刷新显示
在客户端的ActiveX控件电网图形显示中,由于屏幕上每一时刻只能显示一幅图形,因此电网图形间常常需进行切换。在本系统中,这部分的功能是通过两种方法来实现的。
●通过控件中的弹出式菜单实现随机定位
由于ActiveX控件中可以嵌入基于窗口的控件,故可以嵌入弹出式菜单实现随机定位,在画面上右击鼠标可显示出所有供选择的画面,即可跳至任意一个要浏览的画面(如图3所示)。

图3 通过控件中的弹出式菜单实现随机定位
●通过嵌入画面中的画面标志图元实现画面定位
画面标志作为一种图元嵌入画面中,每个画面标志对应一个画面文件,通过点击画面标志可切换至相应的画面(如图4所示),如点击“台东变” 画面标志,就可切换至“台东变”对应的画面。

图4 通过嵌入画面中的画面樗图元实现画面定位
画面的动态刷新显示包括数据的动态显示和图元状态的动态显示。
需要在图形上动态显示的数据如有功、无功功率,节点电压的大小与幅值等,并且显示的数据较多。处理的方法是:用背景色画一小矩形来擦除原数据,然后再重画一个字符串。
处理动态图元(如潮流、工况等),应注意刷新时只刷新图元所在的区域,否则会造成整个画面的闪烁。这里利用Windows API函数InvalidateRect实现画面的无闪烁刷新。
另外,考虑到当前Internet传输速率相对较低,设计ActiveX控件时,应使控件尽可能小,所以要尽可能地少用Delphi的控件(特别是基于窗口的控件),尽量使用Windows API函数。
3.4 客户端ActiveX控件在Web上的使用
在Web页面中使用ActiveX控件,还要对之进行包装,将有关的动态连接库及信息文件压缩到一个扩展名为CAB的文件中。在HTML文件中,使用OBJECT标签插入ActiveX控件,并利用VBScript或者JavaScript访问该ActiveX控件。客户端用Internet Explorer浏览此页 面时,可以自动解包该文件。客户端的Internet Explorer安全性应设置为允许拥有合法代 码签名的ActiveX 控件下载的安全级别。
下面这个简单例子中,使用了本系统的ActiveX控件 "SEActiveX .OCX",
CODEBASE="http://10.0.0.9/ActiveX/SEActiveX.ocx#version=1,0,0,0"
WIDTH="798" HEIGHT="658" ALIGN ="left" >
这里,必须提供该OCX的ClassID和文件路径或URL。客户端浏览此页面时,会先在本地的注 册表中查找该ClassID,如果存在且无版本更新,则不必下载。否则会按照CODEBASE指定的 路径搜索该控件并下载。标签Object中的ID是该OCX的对象名称,用来访问和设置对象属性 ,调用对象方法等。
本系统客户端的ActiveX控件采用Delphi 4.0编制,服务器方程序采用Delphi 4.0和Vis ual C++编制。服务器Web页面采用Frontpage 98和InterDev98编制。经过某电力企业一段时 间的试运行,运行情况良好。
4 结论
本文提出了一种基于ActiveX的电网动态监控系统的实现方法,体现了ActiveX在Web上 应用的强大的威力,对Web上的电子商务、证券业务、工业监控系统等具有一定的参考价值。