
A Rem o te Re a l -ti m e D a ta C o lle c tion M onito r a nd C ontro l S ys tem
B a s e d on G PRS
王孝良 宋国振 安 毅
(大连理工大学电子与信息工程学院 辽宁大连 116024)
[摘 要] 文章提出将GPR S 技术和JAVA 技术应用于远程数据采集监控系统。主要介绍系统的
总体设计方案,阐述系统的组成结构及软件的设计方法,实现远程客户机浏览器中数据的动态更新。
[关键词] GPR S JAVA JSP 动态网站
[中图分类号] T P 309;T P 316 [文献标识码] A 目前,无线通信技术日益成熟,并且得到广泛应用,尤其是基于GPR S 方式的无线数据传输已经进入实用阶段。然而,在人机远离控制中心的情况下通过In ternet 实现控制远程数据的采集和传输,一直是广大研究人员致力解决的问题。
系统采用Java 作为数据中转服务器,进行数据接收以及对现场采集模块的控制,以工业网站的形式共享现场数据,控制现场数据采集模块的数据采集和传输,使用户在能进入In ternet 的条件下就可动态的获取现场数据并且对现场参数进行远程设置。而且系统采用GPR S 网络进行数据传输,可以提供高速的、高于固定因特网速率的无线数据接入方式,由于GPR S 具有保持永远在线的功能,使系统能够实现实时动态监测。系统适用于工业厂矿水、电、气表抄表,城市供水、供气管网压力、流量监测等。
1 系统结构
系统的硬件结构如图1所示[1]
。
图1 远程数据采集系统结构示意图
系统主要分为四大部分:(1)现场数据采集模块。此模块具有R S -232和R S -485串行通信的能力;可以采集8路模拟量和8路开关量,可以直接处理由变送器送来的4~20mA 的电流信号。具有键盘和显示功能,既可以通过In ternet 进行远程设置参数,又可以现场进行设置并检查采集数据。(2)无线传输部分。采用GPR S m odem 作为无线传输模块,使用A T 指令集来控制无线传输模块的收发。(3)Java 数据中转服务器。运行在服务器端,服务器开机即运行,完成数据接收,指令发送,并且能够把接收到的数据以文件形式保存或者导入数据库,供网站使用;能对现场采集模块进行远程设置。(4)工业网站。采用J sp 和Servlet 技术设计。后台采用SQL Server 数据库支持,能够按用户级别授权访问
各工作站采集来的现场数据和控制现场模块的采集参数。
111 采集集中器和无线传输M OD E M
采集集中器的作用:一是为了实现数据中转功能,因为现有的采集模块一般不具有远距离通信的能力,所以就要利用采集集中器来完成数据的远距离传输;二是把比较接近的数据采集点(采集模块)的数据汇聚到一点(采集集中器)然后统一发送给主站。
采集集中器为了实现数据中转就必须具有两部分通信功能:(1)采集模块与采集集中器之间的短距离串行通信;(2)采集集中器与上位计算机之间的远距离无线通信。在本系统当中,采集集中器用A T C 51单片机作为核心芯片,并用R S -485串
行通讯接口来实现采集模块与采集集中器之间的短
—
32— 基于GPR S 的远程实时数据采集监控系统 王孝良,等
距离串行通信。
采集集中器与上位计算机之间的无线数据传输主要靠GPR S 网络来实现。GPR S 是一种基于GS M 的新型移动分组数据交换承载业务。GPR S 骨干网与In ternet 互联网是两个的网络,但是GPR S 支持与基于IP 协议的网络互联。在建立数据链路时,需在采集集中器端连接GPR S m odem ,此m od 2em 带有TCP IP 协议模块,因此可实现GPR S 网络无线接入In ternet ;而且该m odem 具有标准的R S -232接口,可以直接与计算机相连;与单片机通信,需要在单片机的串行输出口接一个M A X 232进行电平转换。这种m odem 和手机一样,在使用之前需要购买S I M 卡并且需要In ternet ISP 服务商提供In ternet 接入服务,开通S I M 卡上的GPR S 服务,这时GPR S m odem 就具有GPR S 网络的通信功能了。在服务器端必须要有一台计算机接入In ternet 网络,而且服务器必须是静态IP ,是In ternet 上的合法主机。
GPR S m odem 与计算机以及单片机之间的通信协议是A T 指令集。通过A T 指令集可以操作m odem ,下面给出通过A T 指令来操作m odem 建立
无线数据链路的具体方法:首先用注册连接指令”
A T +CGA T T =1”
设置GPR S m odem 附着于中国移动的GPR S 网络,操作成功GPR S m odem 将返回O K +CGR EG :2+CGR EG :1;然后用”A T #GPR 2S M OD E =1”
指令选择激活GPR S 数据模式,再用A T #A PN SERV =”C M N ET ”指令发起分组数据协议的激活过程。这样GPR S m odem 与外部数据网之间的数据通路就建立起来了,GPR S m odem 可以与该数据网进行通信。但是,要与网络中的一台主机进行通信,还需要设定这台主机的IP 地址以及访问的端口号。用A T #TCPSERV =”服务器IP ”来设
定主机的IP 地址,用A T #TCPPO R T =”端口地
址”来设定访问的端口号。最后用”A T #O TCP ”指令来打开远程主机的TCP 连接。至此GPR Sm odem 与网络中主机的数据通路就建立起来了。112 JAVA 数据中转服务器
由于GPR S m odem 是通过服务器的IP 地址和端口号来建立数据链路,因此服务器的设计采用了
JAVA 的客户
服务器思想。客户与服务器之间的通讯一般采用的是基于TCP IP 的Socket 机制来实现。Socket 是客户与服务器的程序间进行双向传输的网络通讯端点,在服务器程序中通过IP 地址在网络中标识自己,通过一个客户端程序已知的端口号来提供服务;客户端在网络中通过服务器的IP 地址找到服务器,通过端口号来获得服务器的服务。
考虑到有很多个现场监测站点,该服务器设计成多线程服务器,给每一个监测站点分配一个端口号,为每一个连接请求建立一个线程;本系统具有远程监控功能,在服务器的设计中体现在可以对现场模块进行远程设置,如设置现场采集模块的模拟量量程上下限、模拟量报警上下限、采样间隔等;对于接收到的现场数据能以文件的形式保存,或以导入数据库来支持工业网站。
下面具体阐述一下此多线程服务器的实现过程:M ainF ram e 类是服务器的主类,它负责生成这个服务器的界面如菜单条、工具条等,以及每个按钮的响应方法;R eceiveServer 类扩展线程类,为实现监听多个客户端的连接请求;R eceiveT h read 类扩展线程类,用来接收客户端发送来的数据;SendT h 2
read 类扩展线程类用来向客户端发送数据[2]
。
在M ainF ram e 类中首先提示用户输入欲打开的端口号,当用户确认后便生成R eceivServer 类的实例,代码如下:
if (comm and .equals (“
通讯端口”)){ R eceiveServer serverth read =new R eceiveServer (po rt ,receivefram e ,sendfram e ,p aram fram e );
serverth read .start (); }
在R eceivServer 类中run ()方法的定义如下:p ub lic vo id run (){
try {
ServerSocket rserver =new ServerSocket (po rt ); w h ile (true ) {—
42— 《仪器仪表与分析监测》2005年第1期
rsocket =rserver .accep t (); 不断的监听端口
receiveth read =new R eceiveT h read (rsocket ,receivefram e ); 在同一端口,同一框架里生成 sendth read =new SendT h read (rsocket ,sendfram e ,p aram fram e ); 接收和发送两个线程 sendth read .start (); receiveth read .start (); } }
catch (I O Excep ti on e ){ System .err .p rin t (e ); }}
客户端每次连接时,ServerSocket 都将创建新的Socket (套接字)及新的线程,而且根据得到的Socket 分别建立接收线程R eceiveT h read 和发送线程SendT h read 的实例。
接收线程把接收到的数据贴到内容窗中供用户使用,R eceiveT h read 类中定义的run ()方法如下:
p ub lic vo id run (){
w h ile (true ){ try {
data =in .readL ine ();
Si m p leA ttribu teSet attrset =new Si m p leA ttribu teSet (); Docum en t doc =tex tp ane .getDocum en t ();
doc .in sertString (doc .getL ength (),data ,attrset ); }catch (I O Excep ti on e ){ System .err .p rin t (e );
}catch (B adL ocati onExcep ti on b le ){ b le .p rin tStackT race (); } }}
发送线程应该根据用户的动作完成现场参数的远程设置指令的发送和数据发送,SendT h read 中定义的run ()方法如下:
p ub lic vo id run (){
p aram fram e .bp aram ok .addA cti onL istener (new java .aw t .even t .A cti onL istener () {
StringB uffer send =new StringB uffer ();
p ub lic vo id acti onPerfo rm ed (A cti onEven t ae ) {
String s 1=p aram fram e .tfranggup .getT ex t (); 模拟量量程上限L S
String s 2=p aram fram e .tfranggedow n .getT ex t (); 模拟量量程下限L X String s 3=p aram fram e .tfalarm up .getT ex t ();
模拟量报警上限B S String
s 4=p aram fram e .tfalarm dow n .getT ex t ();
模拟量报警下限BX
Strings 5=p aram fram e .tfin terval .getT ex t ();
采样间隔CJ
send .app end ("L S ").app end (s 1).app end ("&L X ").app end (s 2).app end ("&B S ").app end (s 3). app end ("&BX ").app end (s 4).app end ("&CJ ").app end (s 5);
—
52— 基于GPR S 的远程实时数据采集监控系统 王孝良,等
try {
ou t .p rin tln (send ); ou t .flu sh ();
}catch (Excep ti on ea ){ System .err .p rin t (ea );
} }});
sendfram e .b send .addA cti onL istener (new java .aw t .even t .A cti onL istener () {
p ub lic vo id acti onPerfo rm ed (A cti onEven t e )
{
try {
String sendstring =sendfram e .getT ex tPane ().getT ex t (); ou t .p rin tln (sendstring ); ou t .flu sh ();
sendfram e .getT ex tPane ().setT ex t (""); }catch (Excep ti on ea ){ System .err .p rin t (ea ); } }});}
本服务器可以对接收到的数据另存为文件,并且可以打开文件,把文件中的内容导入数据库,在这里限于篇幅不在赘述。113 工业网站
传统的数据监测,工作人员必须坐在监测室通过监控服务器来监控现场设备。采用工业网站的形式把现场监测数据共享到In ternet 上,使得用户只要能接入In ternet 就可监测现场数据[3]。
采用基于JSP 的动态网站,以SQL Server 作为
数据库支持。下面以油田工业网站为例阐述具体的实现方法:首先,建立一个4级的数据库。因为现场数据的属性包括站点、参数、采集时间及数据值,相对应的就要建立4个表分别为site (站点表)、p ara 2m eter (参数表)、date (日期表)和data (数据值表)。
作为工业参数监测网站应该具有显示数据表、数据曲线及图形功能。图形功能是每一个监测站点,都应显示出该站点的平面图,在平面图中可根据用户选定的时间来动态的显示此站点的各种数据。实现过程如下:由I m ageA pp let 类继承A pp let 画出站
点图,站点图中的数据来源于JSP 页面中的PA RAM
(参数);在JSP 页面中,根据用户选择的具体日期查存
数据库,得到数据后以参数的形式传递给A pp let ,重画页面。I m ageA pp let 类应该实现I m ageO b server 接口。 p ub lic class i m ageapp let ex tends A pp let i m p lem en ts I m ageO b server {……
.}
通过p ain t ()方法来实现图形显示:p ub lic vo id p ain t (Grap h ics g )
{ I m age i m g =get I m age (getDocum en tB ase (), "-i m g p i p e .j p g ");
g .draw I m age (i m g ,100,100,th is ); o il =getParam eter ("o il ");
stream =getParam eter ("stream "); stress =getParam eter ("stress ");
g .draw String ("压力:"+stress ,305,205); g .draw String ("流量:"+stream ,420,230); g .draw String ("油量:"+o il ,100,170);}JSP 页面中,当用户选择日期点击确定后,应该
把表单提交给本页,图形数据更新在本页完成,因此定义一个subm itFo rSelf ()函数来实(下转第35页)
—
62— 《仪器仪表与分析监测》2005年第1期
211 建立健全日常维护管理工作的规章制度建立相应的规章制度,可以约束工作人员按要求做好系统的维护工作,保证系统的正常运行。我们站相继制定了《中心控制室人员职责》、《系统巡检人员职责》等规章制度。由于环境空气自动监测系统对大多数城市来说是新技术,因此在制定规章制度时应尽可能地细化。比如在规定巡检人员的职责时明确巡检时应做的工作。
212 制定适合本地实际情况的日常维护计划环境空前自动监测仪器设备在出厂时,厂方都给出了响应的仪器设备的维护周期表,例如活性碳、高锰酸钾等的更换周期。这些不一定就适合本地的实际情况。因此各站在制定计划前,应做好实验,以便制定适宜的维护计划。如,南方气候湿润,硅胶的更换周期就相应的长些;而北方气候干燥,灰尘较多,样气滤膜的更换及PM10采样头及采样管等的清洗就应该勤些。
213 在对仪器进行检漏时,用真空法判断系统是否漏气
此时不能给管壁涂抹皂液,以免皂液污染管路和反应室。
214 除尘
对仪器内部电子元件进行除尘时,避免用湿布擦拭,以防电路短路,损坏仪器;可用吸耳球吹洗。215 安装
更换样气过滤膜时,注意滤膜的安装,防止滤膜堵塞气路。
216 清洗
清洗PM10监测仪采样管及采样头时,应把重点放在采样管的连接处,该处最易吸附颗粒物,如长期不清洗,会造成监测值突然变高。
以上是我们在日常工作中遇到的问题,希望各地同行加强交流,促进环境空气自动监测工作的发展。
(上接第26页)
现表单提交给本页,在本页中完成用户输入数据的读取:
functi on subm itFo rSelf(){
w ith(docum en t.fo rm1){
m ethod="po st";
target="-self";
acti on=w indow.locati on.p athnam e;
subm it();
}
}
把I m ageA pp let嵌入到页面中,并设定好传送的参数值:
> > > < app let> 网站还具有注册用户、设定用户权限等功能。2 结束语 由于本系统设计的数据中转服务器是利用Socket(套接字)实现的,即客户端与服务器之间开放的动态的套接字连接,所以通信可能会被某些防火墙阻挡,这是在应用本系统时应注意的。 本系统成功的结合了数据采集技术、GPR S无线通讯技术、java和JSP技术,可适用于移动、分散、无人职守、数据传输量较大、动态监测等领域,如工业厂矿水电气表抄表、城市供水、供气管网压力、流量监测等。基于工业网站的实时信息查询功能,适合行业领导及技术人员对现场数据的实时掌控,在工程技术中必将有着广阔的应用前景。 参考文献 1 李晔,于大鹏,牛忠霞1基于短消息业务的新型远程智能抄表系统[J]1信息工程大学学报, 2003(3):19~22 2 宋波,马黎,孙连科1用JAVA实现一个多线程H T T P服务器[J]1沈阳电力高等专科学校学报,2001(1) 3 张逵,刘公强1基于JAVA RM I的远程实时数据采集[J]1计算机应用研究,2002(11) — 5 3 — 环境空气自动监测系统常见故障及排除 韦淑坤,等
