摘要:基于B/S体系结构开发Internet应用程序是当前的流行趋势。介绍了基于Internet的电厂实时监控图形显示技术的实现方法。采用目前工业监控环境中的图形动态交互技术,针对图形刷新闪烁现象这一关键问题提出了不同的解决方法。最后介绍了基于ActiveX控件技术的动态图形显示技术的应用实例。
关键词:Internet;B/S;实时监控;图形动态显示;ActiveX控件
0 前言
随着Internet技术的迅速发展和Web技术的日趋成熟,许多企业都建立了基于网络平台的工业过程监控系统,实现企业信息资源的共享。特别在电力系统,随着电厂厂级实时监控系统的日趋完善,建立基于Internet的远程实时监控系统将成为电厂综合自动化技术发展的必然趋势,通过把电厂的生产数据信息以Web形式网上发布,实现对分散在各地的电厂实时远程监控、管理和数据信息共享,优化生产,提高经济效益等。
但目前基于Internet的图形显示技术存在着许多问题,主要在三个方面:①图形动态显示的实时性。在监控系统中,最关键的是现场设备、服务器和用户之间的图形数据交互,而实时数据的传输延迟要控制在几秒内,否则将出现画面滞后;②图形显示过程出现刷新闪烁现象,这是动态显示中需要解决的关键问题;③由于电厂安全性要求很高,因此如何保障图形数据传输的安全,也是基于网络图形显示技术的难点。
为克服这些问题,在对目前的图形交互技术进行详细分析的基础上,本文提出了一种基于ActiveX/DCOM技术的B/S体系结构,实现电厂远程监控图形动态显示。并针对图形显示的关键问题——刷新闪烁现象,提出解决方法;然后通过实例介绍基于ActiveX控件的监控图形显示技术。
1 图形动态显示技术
目前实现交互式动态网页显示的技术有很多,从最初的CGI到现在的PHP、Java Applet、ASP和JSP等,它们作用各有利弊。
1.1 Java Applet技术
Java Applet技术,是用Java语言编写的应用程序,通过将嵌入在网页中的Java小程序下载到客户端直接操作。这种处理方式分散系统尤其是Web服务器的处理负担,提高了系统效率,增强了交互的实时性。但由于Applet要在浏览器端运行,增加了本地开销,不符合Web开发中“瘦客户”的要求。
1.2 ASP(Active Server Pages)技术
ASP技术是Web服务器和数据库服务器的集成技术,是微软公司推出的服务器脚本编写环境,结合HTML网页、Script语言和ActiveX控件,与数据库绑定,创建动态、交互的服务器应用程序[1]。ASP最大的优点是所有的程序都在服务器端执行,包括所有嵌在HTML网页中的脚本程序,服务器仅将执行的结果返回给客户,这样就减轻了客户端浏览器的负担,大大提高了交互的速度。但ASP的不足是它只能在Windows系列的环境下运行。图1为ASP的动态显示模型。
图1 基于ASP的动态显示模型
1.3 JSP(Java Server Pages)技术
JSP技术是基于Java Servlet以及整个Java体系的Web开发技术[2]。可以用XML标识来设计和格式化最终页面,生成内容的逻辑被封装在标识tag和Java Beans组件中,与脚本程序绑定,然后将JSP编译成Java Servlet在服务器端运行来实现动态显示。JSP的优点是所有脚本均在服务器端执行,实现内容的生成和显示分离;可重用且跨平台的组件JavaBeans或EJB;而且JSP的脚本在首次执行时被编译成为Servlet,并有Java虚拟机执行,以后执行都不需编译,执行效率高。但JSP只能通过JDBC或JDBC-ODBC桥接访问数据库,效率低。
通过以上图形显示技术的对比,可以得出这几种图形显示技术的比较结果,如表1所示。
表1 几种图形显示技术比较
2 基于Internet的图形显示系统结构
通过以上图形显示技术的分析比较,采用ASP技术,利用其ActiveX/DCOM组件技术支持,可以很好的实现电厂远程实时监控图形动态显示的要求。在B/S体系结构的基础上[3],我们设计了一种新型B/S模式的基于Internet的远程监控图形动态显系统,如图2所示。
客户通过浏览器登录到Web服务器,Web服务器对用户身份验证后,根据客户权限把客户可以浏览的网页显示在客户端,并把网页中嵌入的ActiveX控件下载并注册到客户端;嵌套的组件根据网页参数设置通过代理机向应用服务器提出数据请求,应用服务器接受用户请求,通过SQL等方式向数据库服务器提出数据处理请求;数据库接受应用服务器的请求,实现对数据库的操作,并把实时数据或图形结果提交客户端。
这种体系结构的优点在于:①充分发挥B/S 模式的优势,保持瘦客户端的优点;②将服务器划分为Web服务器和应用服务器两部分。应用服务器采用Active/DCOM组件技术实现B/S结构中的应用逻辑部分,解决了动态显示的实时性问题,同时达到封装源代码、保护知识产权的目的;③通过代理机实现图形数据的中转传输,保障应用服务器的安全性。代理机位于防火墙与应用服务器之间,当用户请求数据时,代理机接受请求,并休眠与外网连接线程,然后把请求传给内网应用服务器;当数据结果返回时,关闭与内网连接,启动传输线程,把数据结果传给用户。在传输过程中,电厂内外网不直接通信,保障了电厂网络系统的安全。
3 图形显示自动刷新技术
在连续动态显示过程中, 当屏幕由一个场景变化为另一个场景时, 须首先将原先的背景擦除, 然后将新的图形绘制到屏幕上, 但显示背景不断擦除以及绘制图形所用时间较长, 导致屏幕出现不连续[4],即刷新闪烁现象。为此我们在此提出几种解决途径。
3.1 Web网页自动刷新技术
在Web网页中自动更新显示,可在Web网页设计中使用META语句来实现。META语句放置在HTML或ASP代码的头部,如网页每隔5秒刷新一次,可以通过以下META语句来实现:
<HEAD><META HTTP-EQUIV=“REFRESH” CONTENT=“5” URL=http://202.206.210.146/Trendshow1.ocx> </HEAD>
刷新一次,整个文件重新执行一次到数据库的连接,把数据库中相应的图形数据的变动反映给客户端。这种方法简单,适用于以只读方式向客户端提供数据,其刷新频率不宜过快,否则当相应的数据变化较快或比较多时可能出现屏幕显示不连续,即闪烁现象,不利于数据的监测。因此,本方法适用于数据实时性不强或变化比较缓慢的条件下实现数据的实时显示。
3.2 基于Java程序的更新数据
监控电厂生产过程的相关数据,要将实时数据和实时趋势曲线显示在监控画面上。可以采用Java Applet小程序直接与Web服务器相连获取实时数据库中实时数据,然后利用Java程序自身的多线程和绘图优势来实现图形数据的自动刷新。为了将背景画面和与实时数据相关的图形、数字区分开,通常采用双缓存技术把背景画面载入,在Java小程序的Paint()函数中编写与实时数据相关的图形、数据的显示代码。在Java小程序的线程Run()函数中利用DAO等实现对数据库的查询,Java小程序线程的休眠时间由Sleep()函数决定。每次线程运行时,对数据库重新查询得到新的数据,并使得小程序重画,这样就把动态的图形数据反映给客户。Java小程序执行速度快,刷新频率较快,适合实时图形数据的读取和显示。
3.3 图形画面刷新无闪烁
利用ActiveX组件技术实现远程监控的图形动态显示,可以彻底解决动态显示时自动刷新出现的闪烁现象。一般来说,解决刷新闪烁现象的方法有两个方面:一是避免反复设置背景监控画面和清屏;二是避免直接在屏幕上重画。
为此,采用双缓冲技术来解决刷新闪烁,即利用ActiveX控件在客户端建立内存缓冲区,把原来直接在屏幕上的绘图操作全部改在缓冲区里绘制,最后再将缓存区中绘制好的图形一次性画到屏幕上。对于一般实时性不强的画面,刷新周期设置低点,可以解决刷新闪烁现象;对于实时性较强的图形数据,通过这种方法也基本能消除刷新闪烁。
首先利用组态软件把监控背景画面和各种图元绘制好,存放在应用服务器中;其次,通过ActiveX控件中的CDataPathProperty类异步下载图形元件,缓存到客户端中,供控件调用。ActiveX控件中实现绘图的部分代码如下:
{……
//将位图句柄调入缓冲区
CBitmap*pOldBitmap=m_pdcMemory->SelectObject(m_pBitmap);
m_pdcMemory-> SelectClipRgn(NULL);
m_pdcMemory->IntersectClipRect(&rectUpdate);
……
//用位图填充指定的图形区域
m_pdcMemory->PatBlt(rectUpdate.left,rectUpdate.top, rectUpdate.Width(), rectUpdate. Height(),PATCOPY);
//将指向缓冲区的指针传递给绘图函数
OnDraw (m_pdcMemory);
//将缓冲区中的绘好的图形复制到屏幕上
dc.BitBlt(rectUpdate.left,rectUpdate.top,rectUpdate.Width(),rectUpdate.Height(),m_pdcMemory,rectUpdate.left,rectUpdate.top,SRCCOPY); ……}
4 应用实例
对于电厂远程监控系统,不仅要访问实时数据信息,而且还要将实时数据直观地显示在客户端屏幕上。为此,我们采用Visio 2000来进行画面组态,把组态的画面供ActiveX控件调用,其中用Visual C++来设计ActiveX控件[5]。
下面是系统中的机组运行分析曲线控件"Trendlineshow1.ocx",其属性如下所示:Host:运行服务代理的主机名或IP地址;Graphics:图形文件的URL;AutoRefresh:是否自动刷新;RefreshTime:刷新周期,缺省为5s;AutoSize:决定是否根据图形大小自动改变控件大小,缺省为真。
控件的工作过程如下:(1)利用CDataPathProperty类异步下载图形文件,自动缓存在本地机器中,需要时则直接从缓冲区中读取,加快了执行速度;(2)利用CSocket类与服务代理建立TCP连接;(3)根据刷新周期启动定时器;(4)处理定时器消息(WM-TIMER),根据图形文件中实时元件的定义向服务代理请求数据,并刷新图形数据显示。
其ASP网页部分代码如下:
<H2 align=center>#4机组运行分析趋势曲线</H2>
<OBJECT id=trendlineshow1 style="Z-INDEX:100;LEFT:-2px;POSITION:absolute;TOP:45px" codeBase=http://10.1.32.222/ocx/show1.ocx classid="clsid:1A2D46F5-434C-42A1-1A9E7B9A2B8B">
<PARAM NAME="_ExtentX" VALUE="2312"> <PARAM NAME="_ExtentY" VALUE="1132">
<PARAM NAME="SQLServerName" VALUE="websvr"> <PARAM NAME="UID"VALUE="RMDSUser">
<PARAM NAME="PWD" VALUE=""> <PARAMNAME="DataBaseName" VALUE="rmdsdb"></OBJECT>
这里,网页代码中提供了OCX的ClassID和文件的URL。客户端浏览时,会在本地注册表中查询该OCX的ClassID,如果本地没有该的控件,或其版本不是最新时,浏览器会自动按照CodeBase指定的路径从服务器下载控件并安装注册到本地机器上。客户端用IE浏览时,其安全级别设置为拥有合法代码签名的ActiveX控件下载。
5 结论
基于Internet的电厂远程实时监控系统,采用B/S体系结构,利用ASP技术的ActiveX/DCOM组件支持,很好地实现了系统远程监控和图形数据的动态显示和自动刷新。而且ActiveX技术对于实现业务逻辑封装、提高软件的可重用性和可维护性、开发高效和安全的图形显示系统具有积极的意义,是现代电厂远程监控技术的发展方向。
参考文献:
[1] 陈冠宇,熊伟.基于ASP的图形动态显示技术[J].微机发展,2004.07,49-51.
[2] 孙文波,卢建军.基于Web的远程监控技术及比较[J].西安科技大学学报.2002.02.
[3] 李玉奇,刘旺开.基于B/S结构下分布式控制系统的实时监控[J].微计算机信息,2004,20(2),53-55.
[4] 周震,虞鹤松.工业监控环境下Web页面实时数据的自动更新[J].计算机应用.2001.11.
[5] 宇鹏,王晓峰等.Visual C++实践与提高-ActiveX篇[M].北京: 中国铁道出版社.2001.