Internet 在近年来的迅速普及及其在各个领域的广泛应用越来越表明它正在 带来一场全新的技术革命,而WWW 方式的服务正是其发展最为迅速的部分。 它利用跨平台的标准接口(浏览器技术)和标准协议(HTTP)来浏览各种媒体信 息、实现数据库访问等。基于Web 与数据库相结合这种全新的技术模式,已经 在越来越多计算机领域加以应用。
在实时监控系统中,应用Web 技术实现实时数据的显示已是不可缺少的组 成部分,它通过工业现场数据的远程监测,对实现生产现场的远程调度具有特 别的意义。针对这一需求,讨论Web 技术下的实时信息系统的开发也就及其自 然。将监控现场的各种数据信息集中到Web 数据库,通过Web 服务器,将相应 数据传递给客户端的Web 浏览器,是基于目前流行的B/S 结构模式上的一种开 发方式。
5.1 Web 信息发布技术
Web 页面有两种:静态HTML 和动态HTML[21]。一个Web 数据库站点往往 同时使用这两种方法,用静态HTML 来产生输入表格而用动态HTML 来显示 查询结果。Web 技术的发展有以下几方面。
5.1.1 脚本语言
脚本语言是一种简单的描述性语言,语法结构与高级语言相似。目前较为 流行的是JavaScript 和VBScript。
5.1.2 ASP(动态服务器页面)
ASP 是一个服务器端的脚本执行环境[22],属于ActiveX 的一种。它是一套 微软开发的服务器端脚本环境,内含于IIS ( PWS )之中,系统提供两种脚本语 言:VBScript 和Jscript,而VBScript 则被作为系统默认的脚本语言。ASP 程序是 以扩展名为.asp 的纯文本形式存在于Web 服务器上,可以用任何文本编辑器打 开它,ASP 程序中可以包含纯文本、HTML 标记以及脚本命令。通过ASP,用户可以将HTML 网页、ASP 指令和ActiveX 组件结合在一起,建立动态的、交 互的、高效的Web 服务器应用程序。使用ASP 技术,所有嵌在HTML 中的脚 本程序将在服务器端执行,服务器仅将执行的结果返回给客户浏览器。它包括 了对数据库操作的服务器端的脚本程序,用户可用它产生和执行动态的、交互 的Web 服务器应用程序,完成与数据库的交互。当用户的Web 浏览器向.ASP 发出请求时,Web 服务器将完成产生浏览器的HTML 页的所有工作。由于ASP 在服务器上运行,所以ASP 的源程序代码不会传到用户的浏览器。ASP 也是面 向对象的,可通过制作ActiveX 服务器组件来扩充功能,并能创建和操纵 ActiveX 组件对象ADO(ActiveX Data Object)。
ASP 技术在静态页面HTML 中加入了可执行的Script 语句形成ASP 页面 文件。当编写的脚本在服务器端执行时,WEB 服务器完成了所有的工作,包括 解释执行脚本,生成HTML 页面并发送到客户端的浏览器中。当客户端向服务 器提出HTTP 请求IIS(Internet Information Server)响应请求并将其交给ASP 解释 器,ASP 调用相应的.ASP 文件解释执行脚本所要访问的数据库,请求调用COM 组件,存取后台SQL SERVER 动态生成的HTML 页面传给客户端浏览器。其 结构如图5-1 所示。从图结构可看到ASP 脚本集成于HTML 中,容易生成,页 面的开发与HTML 完全一致,用普通的编辑器即可。无须编译和连接即可直接 解释执行。而且它独立于浏览器,用户端只要使用可解释常规HTML 代码的浏 览器,即可浏览ASP 所设计的主页内容。
5.1.3 WEB 数据库技术[25]
数据库技术及其应用系统诞生于 60 年代。随后,经历了从层次数据库、网 状数据库到关系数据库以及面向对象数据库的发展,数据库及其管理系统已成 为计算机信息系统的重要基础和支柱。90 年代以来,互联网的飞速发展使人类 社会的信息量以指数膨胀,而对信息管理和信息交换的需求更是空前强烈和迫 切。因而网络数据库技术自然而然成为互联网的核心技术。 企业实时信息系统从某种意义上讲,是在数据库基础上,融合信息技术和 网络技术的知识应用体系。为更好的建立远程知识应用体系,采用网络数据库 来构筑系统的基石,系统所需的参数、依据和结果都是以数据的形式存于数据 库中。
5.1.4 数据库系统的结构
基于Web 的网络数据库系统由一个Web 浏览器作为用户界面、一个数据库 服务器用作信息存储和一个连接两者的Web 服务器组成。Web 和数据库这两种 技术,各自有其优点。Web 具有用户界面的定义非常简单,关于定义数据的说 明型语言非常完美,允许巨大传输量的传输协议非常健壮等优点。而数据库的 优点是它具有清晰定义的数据模型,存储和获取数据的健壮的方法,发展用户 界面和应用程序逻辑的软件工具,强大的授权和安全机制,以及控制事务和维 持数据完整性的有效途径等。基于Web 的数据库系统结构如图5-2。 用户只需要通过安装在客户端的浏览器发送信息到 WWW 服务器,服务器 接收传递的参数后调用数据库服务器中的相应数据库,获得的信息以文本、图像、表、图形或者多媒体对象的形式在Web 页上显示。同样,用户也可以对网 络数据库进行添加、修改和删除操作。
5.1.5 数据库与Web 的连接[25]
WWW 系统和数据库构成的浏览器/服务器模式己成为网络化信息服务的 基础。如果把文档数据库同WWW 服务器连接起来,Internet 用户通过Web 浏 览器访问现有的共享数据。访问站点数据库是指用户能从浏览器画面中,通过 Internet/Intranet 查询站点数据库的信息,甚至输入、更新和删除站点的数据库 信息。有许多技术可以实现动态内容,如通过网关接口CGI, IDC 与IIS, ADC 和ISAPI 等。其中CGI 是传统方式和最好的解决方法,但不易开发、更改成本 高、功能有限,ISAPI 开发步骤繁琐,还有线程同步问题。而ASP 技术不仅能 实现CGI 的所有的功能,还有许多显著的优点。将ADO 与ASP 结合起来的方 法是比较理想的Web 数据库访问方法。
ADO(ActiveX Data Object,活动组件对象)是Microsoft 公司在IIS3.0 以上 版本中提供的一组优化的访问数据库专用对象集,为ASP 提供完整的站点数据 库访问解决方案。ADO 是在OLE DB 下开发出来的,OLE DB 基本上就是OLE 技术在数据库中的应用。ADO 通过一系列的COM 接口来实现自己,不但对 ASP 编程很重要,而且还是绝对必须的。它与ASP 结合,作用在服务器端,通 过OLEDB 提供者存取、操纵各种关系型及非关系型数据库,通过执行SQL 命 令,让用户在浏览器画面中输入、更新和删除站点服务器的数据库信息。ADO 的优点在于:它的语法简单,易于理解,其中只包含几个不多的对象,而且这些 对象功能强大,易于使用。ADO 中有3 个主要对象:Connection 对象、Recordset 对象、Command 对象。Connection 对象一般用来与数据库,如SQL Server 或 Access 通信。Recordset 对象表示从数据资源返回的数据行。例如,查询数据库 时,从数据库返回的数据行在一个由Recordset 对象表示的记录集中返回。ADO 使用Recordset 对象作为数据的主要接口,并可使用VBScript, JavaScript 语言来 控制对数据库的访问与查询结果的输出显示画面。Command 对象表示一个与数 据资源有关的可执行命令,一般可用来执行一个SQL 保存过程。ADO 可连接 多种支持ODBC 的数据库,如SQLSERVER, ORACLE 等。
5.1.6 基于Java Applet 的Web 实现模型[30]
在基于 Web 的Java 模型中,客户端一般把Java Applet 小程序嵌入网页中, 在Java 兼容浏览器中浏览具有Applet 功能的Web 页时,Java 兼容浏览器将根 据HTML 文件中的<Applet>标志给出的Applet 字节代码文件名和相应的查找路 径下载Applet 程序,然后在Java 兼容浏览器的控制下执行这个Applet 程序。 当用户通过Java 兼容浏览器来浏览嵌入到Web 页中的Applet 程序的执行时, 首先要进入Applet 所在的Web 页,这时对应的Applet 字节代码将通过网络装 入浏览器,然后对Applet 程序进行初始化并启动Applet 程序执行,当用户离开 Applet 所在的页时,为了让出CPU 资源,浏览器停止执行Applet,当用户再次 进入Applet 所在页时,Applet 又需要继续执行;当用户退出浏览器时,Applet 需要释放它的资源。
当用户与浏览器的交互过程中发生下载 Applet 程序、离开或返回Applet 所 在的页,退出浏览器等与 Applet 相关的事件时,Applet 程序需要完成自己相 应的行为, 这些行为由Java 兼容浏览器调用Applet 类中的 init(),start(),stop(),destroy()和paint()这五个主要的方法来完成[26]。图 5-3 简单描 述了一个 Applet 程序从创建到执行的各个步骤以及所调用的各个方法。
Java Applet 程序可以使用 TCP 协议或 UDP 协议与服务器方的程序通 信,从理论上说,只要让运行在浏览器环境下的 Java Applet 程序与服务器方 的通信服务交互,并访问服务器数据库,进行数据查询,即可获得所需的数据, 从而完成系统要求的功能。
5.1.7 浏览器/服务器模式(Browser/Server)
三层的 B/S 体系结构具有许多传统C/S 体系结构不具备的优点[23],而且有 精密的结合了Internet/Intranet 技术,是技术发展的大势所趋。B/S 的通信方式:
(1)用户打开计算机中的浏览器;
(2)输入一个URL,浏览器将生成一个HTTP 请求并把它发送到指定的WEB 服务器;
(3)服务器将主页发回。浏览器将其显示在屏幕上;
(4)用户阅读相关信息,可继续查找有关信息,向浏览器发出请求;
(5)浏览器发送一个请求给相应的服务器,将把由URL 标识的文档/文件返 回屏幕;
(6)服务器收到请求后,查看本站点是否有该文档,若有,把该文档放入响 应信息中返回浏览器;
(7)浏览器收到响应,查看头文件格式,判断是否能直接显示。如能就显示 出来,否则调用对应的帮助应用程序或外挂程序处理;
(8)浏览器等待用户的下一条指令,而服务器准备接受来自浏览器的下一条 请求。
5.2 WEB 中的实时数据实时发布的实现
HTTP 协议是是在TCP 协议的基础上建立的,默认端口号是80。本质原理 是,浏览器建立一个TCP socket,向WEB 服务器发送连接请求,WEB 服务器 接受请求,在客户端的浏览器就和WEB 服务器建立了TCP 连接,浏览器根据 HTTP 协议的规则发送请求。WEB 服务器根据请求的内容执行一些操作,如访 问数据库等。将执行的结果以HTML 标记语言的方式传送给浏览器。浏览器解 析HTML 标记,显示出结果。连接断开。连接一旦断开在界面上显示出来的内 容WEB 服务器就无法控制。如果数据库中的数据更改了,浏览器并不知道, 只有再次建立连接发送请求。这就使得数据的实时显示出现了问题[31][32]。
这个问题是由于 WEB 服务器和HTTP 协议原本是为静态页面而设计的[24]。
而且WEB 服务器需要响应很多客户的请求,长时间保持一个连接性能会严重下降。然而,在监控系统中实时数据的发布显示是必须的和严格的,下面主要 探讨解决这个问题的几种方法。
5.2.1 定时刷新法
如果想自动更新显示的内容,在网页设计中可以用META实现自动更换显示内 容,更换的时间和文件都可以自行设定,通过这种技术可以达到对数据实时监控 的目的。MATA语句应放置在需要定时刷新的ASP文件的头部,具体地说,应放在 <head>和</head>之间。为了让网页每隔几秒刷新一次,可以将程序的<html>加 META语句来实现:
<META HTTP-EQUIV=”refresh”//通知浏览器自动刷新
CONTENT=”10” //自动刷新的时间间隔为10秒
CHARSET=gb2312 / / 通知浏览器该文件使用的是简体中文主页
URL=”resltime.asp”//通知浏览器加载的页面,一般设为自己
>
这样设置后浏览器就会没隔10秒刷新该页面。在一次刷新中整个文件重新执 行一次到数据库的连接(查询和显示),只要数据库中相对应的数据发生了变动就 能将数据的变动反映给用户。这种方法最为简单适合以只读的方式向用户提供数 据,但是其刷新的频率不宜太高,否则当提取的数据比较多时有可能出现一次的 数据未显示稳定又开始一次刷新过程,不利于对数据的监视。在数据变化比较缓 慢的条件下可以采用该方法来实现数据的实时显示。该方法实现简单,但是有明 显的缺陷:刷新时用户感到明显的抖动。
一些改进方法:
(1)可以将要定时刷新的页显示在<iframe>中,或<frame>中,可以改善刷 新显示的效果。
(2)显示的页不进行定时刷新,单独在建立一个定时刷新的页面来获取事 实数据,将这个页面放在一个长宽都为0的<iframe>中,也就是将其隐藏起来。 利用客户端脚本的帧间通信技术将定时刷新页得到的数据写入显示页中。这样用 户就看不到页面的刷新,也实时更新了数据。
5.2.2 使用远程脚本
远程脚本是微软提供的一种客户端脚本访问服务器端脚本的一种方法。客 户端脚本是在浏览器上执行控制工程网版权所有,只能做一些界面的控制。服务器端脚本在WEB 服务器上执行,可以进行数据库访问等操作。实现方法如下:
(1)建立服务器端asp 文件
<!--#INCLUDE FILE="_ScriptLibrary/rs.asp"-->
<% RSDispatch %>
<SCRIPT RUNAT="SERVER" Language="javascript">
function Description()
{
this.getData = DatabaseAccess;//定义接口函数
}
public_description = new Description();//建立对象
function DatabaseAccess()//接口函数实现
{
//连接数据库
//查询数据生成数据集
//按一定格式打包数据
return //数据包
}
</SCRIPT>
(2)建立客户端页面
在页面中导入库文件:
<script
language="JavaScript">RSEnableRemoteScripting("/_ScriptLibrary");</script>
编写访问远程服务器端脚本的客户端脚本函数:
<script language="javascript">
function showRSData()
{
var objAsp;
//建立远程ASP 文件对象,“remoteAsp.asp“是要访问的远程脚本文件名
objAsp = RSGetASPObject("remoteAsp.asp");
//执行远程脚本中的函数
co = objAsp.getData();
//获得远程脚本函数返回的数据
codata = co.return_value.split(" ");
//按照数据打包格式进行解包
//显示数据
//按一定的时间间隔重复执行次函数,间隔为1000 毫秒
timeid = setTimeout("showRSData()",1000);
}</script>
从以上的代码中可以看出,实时数据的获取已经达到毫秒级控制工程网版权所有,比方法1 实 时性要好的多,在页面中用户也看不到刷新的过程。但是setTimeout 中的间隔 设定也不能过小,经过实验设为10 毫秒以下客户端CUP 占用率过高,运行40 分钟后控制工程网版权所有,浏览器无响应。
5.2.3 基于java applet 的方法
上述两种方法都是由浏览器不断发起请求,更新数据。数据更新的间隔固 定,如果数据没有变化也向WEB 服务器请求。实时性和效率都不好,浪费了 CPU 资源。最佳的方法应该是如果有实时数据的变化主动向浏览器发送,避免 浏览器的盲目请求。这就是数据推送技术。推技术中,浏览器与WEB 服务器 建立了TCP 连接后保持此连接,如有新数据了,WEB 服务器主动将数据由此 连接发送到浏览器。要实现着种模式必须自己开发出WEB 服务程序来替代IIS, 工作量庞大,实现很复杂。
基于 java applet 的方法利用浏览器中可嵌入java applet 程序[27][28],java applet 可以和下载它的服务器建立socket 进行通信,利用这两个特性可以来实现数据 的推送。流程如下:
(1) 浏览器请求一个包含java applet 的页面。
(2) WEB 服务器把页面内容发送给浏览器。
(3) 浏览器解析HTML 语言,根据<applet>标签的信息下载java applet 程序(.class 文件或打包好的.jar 文件)。
(4) 浏览器内包含java 虚拟机,运行java applet 程序。
(5) java applet 程序采用socket 技术与web 服务器上的数据服务程序建立 连接,并接收数据。
5.2.4 实时数据显示java applet 的实现
实时数据显示 applet 主要包括两个类:一个界面显示类,该类继承Applet 类,主要能是显示图形和数据。另一个是读数据线程类,该类继承Thread 类[29], 主要功能是读区数据服务程序发送的实时数据。以下是核心代码的说明:
实时数据显示 java applet
public class RTDisplay extends Applet {
Socket socket;
String hostname;
int port;
reader ReadThread;
public void init() {
//添加界面上的组件
URL url="this".getCodeBase();
String temp = url.getHost();
//得到源主机名,java applet 只能和源主机建立通信
Hostname = temp;
String s = getParameter("port");
//获取<applet>中的参数port,指定通信的端口号
if (s==null){
port = 8888;}
else {
port = Integer.parseInt(s);
}
socket = new Socket(hostname, port);
//根据主机名和端口号建立TCP 连接
reader = new ReadThread(this,socket);
//建立读数据线程
reader.start();//启动线程
}
public void paint(Graphics g) {
}
}
线程类的实现主要代码
public class ReadThread extends Thread{
Socket sock;
DataInputStream inStream;
RTDisplay applet = null;
Public ReadThread(RTDisplay applet, Socket socket){
/*构造函数*/
this.sock = socket;
/*接收由界面类传递来的TCP Socketwww.cechina.cn,,该线程就在此Socket 上读取数据。*/
this.applet = applet;
/*接收由界面类传递来的界面类对象的引用,有了此引用,该线程
类就可以控制界面上的组件和对象。*/
inStream = new DataInputStream(socket.getInputStream());
/*建立Sock 上的数据输入流对象*/
}
public void run(){
/*线程运行函数*/
while(true){
/*死循环,不断读取数据*/
String str = inStream.readUTF();
/*将读到的数据解析。根据要求写入applet 的界面上
采用 applet.label 的方法显示数据
*/
}
}
}
将源文件编译后将得到一个class 文件,为了加快applet 程序的下载,用“jar cvf RTDisplay.jar *.class”命令将所有class 文件打包在RTDisplay.jar 文件中。接 下来在网页中加入以下代码:
<applet codebase = "."
code = "RTDisplay.class"
archive ="RTDisplay.jar"
name = "实时数据"
width = "800"
height = "600"
hspace = "0"
vspace = "0"
align = "middle"
>
<param name="port" value="8888">
</applet>
实时数据显示applet 就嵌入到网页中了。
数据服务程序采用实现 TCP 通信服务器的完成端口I/O 模型,以得到最好 的性能和扩展性。
5.3 基于java applet 的历史趋势图
5.3.1 基本设计概念和处理流程
在网页中嵌入java applet 小程序,用户在打开浏览器浏览时java applet 被下 载到客户端执行,该程序根据applet 中的配置,请求指定的ASP 文件,由该 ASP 文件访问SQL SERVER 数据库中的数据,再将数据打包由HTTP 协议发送 给客户端的java applet,java applet 将数据绘制成历史曲线显示在浏览器中。
趋势图控件为 java applet 程序,最多可同时显示八个数据的历史趋势。
5.3.2 功能说明
显示区域横坐标为日期时间值,纵坐标为数据点的值。
可由鼠标控制进行拖动,实现曲线的移动。
拖动垂直滚动条可实现曲线在纵坐标上的放大与缩小。
拖动水平滚动条可实现曲线在横坐标上的放大与缩小。
显示区域中的垂直白色线条为探针。
显示区域下方的浏览区显示探针所在位置的日期时间和各个笔的属性,笔 的属性包括笔号,画笔颜色,探针所在位置的数据值,数据名称,是否隐藏该 笔曲线。
拖动白色探针当前时间和各笔数据值也相应改变。
点击是否隐藏复选框可隐藏/显示单个笔的曲线。
5.3.3 Applet 参数说明
Highlimit——显示区域的纵坐标上限。既在用户没有进行移动/放大/缩小操作时,显示区上沿相应的值。 Lowlimit——显示区域的纵坐标下限。既在用户没有进行移动/放大/缩小操 作时,显示区下沿相应的值。
这个两个值决定着各曲线在纵坐标上的初始放大比例。
Peni_data——i 为0 到7。i 号笔的数据来源文件的url 地址。为个asp 文件 的访问地址。
Peni_conf——i 为0 到7。i 号笔的颜色和数据名称描述。颜色和数据名称用 “||”分割,如:blue||方坯中包温度。颜色可以是red, blue, yellow, green, pink, orange, white, cyan, magenta, gray。
5.3.4 程序设计与实现
该趋势图 applet 主要由三个类组成,trend,screen,pen。
(1)Trend 类继承了applet 类,是程序的框架。
重载 applet 的init()函数,主要功能是读取applet 参数,构建screen 类的 实例,构建八个pen 类的实例,以及构建滚动条,标签,文本框,复选框等常 用部件。利用布局管理器构成想要的界面。
(2)Screen 类继承了panel 类,主要用于显示曲线。
Screen 类设计为trend 类中的内类。
在其构造函数 screen()中添加鼠标监听器控制工程网版权所有,鼠标动作监听器,用于捕捉鼠 标事件。实现曲线的移动和探针的移动。
重载 panel 的update()函数,为了避免操作时的画面抖动,在内存中用 createImage()建立一个image 对象,所有画图工作完成后再将整个图片用 drawImage()画在界面上。
重载 panel 的paint()函数,画出网格,画出探针,将八只笔的曲线画出。
计算出画图区的左边界时间和右边界时间,纵坐标的上限值和下限值。
(3)Pen 类是独立的类。
成员变量:
Date datetimes[]——日期数组,存放日期变量,为横坐标的原始值。
Float values[]——浮点数组,存放数据值,为纵坐标的原始值。
Color color——画笔颜色。
String info——数据名称描述。
static public int xRate——静态公有整型变量,一分钟的象素
static public int yRate——静态公有整型变量,值的放大比例
static public int xMove——静态公有整型变量,右移象素数
static public int yMove——静态公有整型变量,下移象素数
成员函数:
setDataSourse()——设置数据来源,参数为asp 文件的地址。
hiding()——隐藏该笔曲线。
showing()——显示该笔曲线。
setColor()——设置笔颜色。
getColor()——读取笔颜色。
Getdata()——读取数据
第6 章结束语
本文主要介绍了 GPRS 无线网络用在SCADA 系统中的原理、构成、实现 方法。GPRS 数据通信服务程序的实现。B/S 的监控系统的原理和设计,并对 GPRS 网络、TCP/IP 协议等做了简要介绍。提出了一种基于Internet 的多级监控 管理模型。
在网络技术迅猛发展的今天,随着 GPRS 网的不断完善,GPRS 的通信功 能在很多行业中迅速得到了应用。利用GPRS 的数据功能,可以实现数据传输, 在次基础上就可以实现工业遥信、遥测、遥控的功能。GPRS 通信方式具有更 高的实时性和可靠性。在目前大多数SCADA 系统中,利用有线方式进行监控, 布线、改线工程量大、投资多,而且线路容易损坏、老化。采用光缆则成本高, 维护安装费大。而采用GPRS 方式,布线工作量小,数据采集、传递迅速,且 运行费用随着网络技术的发展将不断降低。
近年来,移动通信技术和Internet 网络发展迅速。中国移动的GPRS 无线网 络已经基本覆盖全国范围。基于GPRS 移动数据传输的SCADA 系统有很大的 应用范围,几乎所有中低速率的数据传输业务都可以应用,如城市配电网络自 动化、排污监控、环境监测、煤气管道自动化、泵站与污水处理厂监控、商业 POS 机、移动车辆监控调度等。