由于油井地理位置分散,采集、监测功能要求稳定,安全性要求较高。过去采取人工抄表、电话报数、现场手动操作的原始监测方法。GPRS(GeneraI Packet Radio Service)是通用分组无线业务的简称,主要用于实时性高数据量较大的远程数据传输过程,如工业监测、环保监测、水文检测、GPS车辆定位系统等领域,具有可靠性高和成本低等优势。
1 系统总体结构
1.1系统概述
油田监测系统主要监控和管理分散在各个油井的测点的工作状况,并能够及时采集重要的功况图等信息,为整个油田的效率优化调度提供科学依据。系统结构如图1所示。
系统结构图
1.2 系统实现
现场设备:现场安装在油井上的各种传感器,如角位移传感器、载荷传感器、电流传感器、电压传感器、压力传感器等。
采集分站:ADAM5510机座,以及相应I/O模块(例如:ADAM5017— — 8通道模拟量输入,ADAM5051— — 16通道数字量输入),5510M(4槽)和5510E(8槽)。ADAM一5510系列是基于PC 的可独立完成数据采集与控制的可编程控制器。采用工业级塑封外壳可确保系统在恶劣的工业环境中可靠运行。
GPRS传输终端:WirelessPlug MA8—9通讯模块,MA8-9整合GPRS模块与标准接口,内建TCP/IP协议,提供安全、透明的传输信道,可经由GPRS网络与远程设备双向传输。
注册转发服务子系统:VB开发,通过Winscock组件与MA8建立连接,注册转发服务子系统于Winsock—Connection—Request事件以Winsock.Accept requestlD 收到request ID后,再以Winsock.SendData “Welcome!!!'回“Welcome!!!'给MA8。表示已建立连线,MA8就会送一个MA8 ID号上来给注册转发服务子系统,这时注册转发服务子系统就可以对远端的MA8做双向的动作,形成一个点对点的数据传输方式。
数据库子系统:Oracle9i,根据数据处理的需要,建立相应的存储空间、用户、数据表、视图、触发器、存储过程。
管理子系统、Web服务器、Web页:管理程序和Web发布程序统一实现,采用WebLogic 8.1作为Web服务器和应用服务器,页面表示由JSP实现,业务逻辑由EJB实现。
2 系统涉及到的若干问题及解决方案
2.1动态IP访问
GPRS传输终端采用动态IP,每次连接服务器使用不同的IP和端13以及Winscock组件的实例号(Winscock组件与多个GPRS传输终端通信时,产生多个实例,一个实例与一个GPRS传输终端通信,每个实例产生一个唯一实例号)。为了解决GPRS传输终端的定位与识别,在数据库中建立GPRS传输终端的动态IP表,以GPRS传输终端的唯一ID号作为标识(此ID号预先在GPRS传输终端中写入),每次GPRS传输终端重新连接服务器,都刷新动态IP表,取得并存入新的IP和端13以Winscock组件的实例号。服务器向GPRS传输终端发送数据时,在动态IP表中根据ID号查找对应的实例号,向对应的实例号发送数据即可,服务器接收GPRS传输终端发送的数据时,在动态IP表中根据接收数据所调用的实例号查找对应的ID号就可以确定是哪个终端发来的。
取得IP和端口的方法为:
tcpServer(0).RemoteHostlP
tcpServer(0).RemotePort
取得可用的Winscock组件的实例号的方法为:
Private Function Chk_Winsockl—State()As Integer
Dim i As Integer
For i= 1 TO num
If tcpServer(i).State=sckCIosed Then
Chk_Winsockl_State= i
Exit Function
End If Next i
Chk_Winsockl_State =0
End Function
2.2 异种采集分站及I/O模块共存
5510M (4槽)和5510E (8槽)两种采集分站共同使用,5510M可接4个5017,每个5017可连接8个通道的模拟量,共8 4=32个通道的模拟量,5510E可接8个5017, 每个5017可连接8个通道的模拟量,共8 8=64个通道的模拟量。可在程序中循环利用5510 的库函数unsigned char Get_BoardlD(int Board)取得各槽上I/O模块的型号和槽数,根据I/O 模块的型号进行相应的处理,采用同一程序动态处理各种情况。
取得各槽上I/O 模块的型号和槽数的程序为:
{
for(i=0;i<8:i++)
{type【i】=Get_BoardlD(i);
SlotNum++;
}
2.3 多个采集分站共用一个GPRS终端
服务器与GPRS终端通信基于连接,每个Winscock组件的实例对应一个GPRS终端,一对一连接,服务器向某个GPRS终端发送指令,其它GPRS终端不会收到,而这条指令对于这个GPRS终端的多个采集分站是广播式发送的, 连接在这个GPRS终端上的多个采集分站都会收到这条指令。为了能让某个采集分站单独响应指令,可以在指令中指定采集分站的ID号(5510上8位拨码开关的ID,两位十六进制数),在5510中用函数unsigned char Get_NodelD(void)取得自己的ID跟指令中指定的ID号比较,相同说明这条指令是发给自己的,执行,不相同说明这条指令不是发给自己的,不执行。
2.4 与本地监控的协调问题
在油井现场,设有监控室进行现场监控,本地监控采用组态王6.5开发,组态王也与5510内的程序进行交互。为了在远程监控的同时让程序也能为本地监控提供数据,以5510M 接4个5017为例,以下面的程序将4 8路数据存人数组Share_Mem[],组态王取数组Share_Mem[]中的数据得到监控值。
for(slot_no=0;slot_no< 4;slot_no++)
for(ch=0; ch<8;ch++)
Get5017H(slot_no,ch,&Share_Mem【ch+slot—no 8】);
2.5 GPRS信道流量优化问题
由于油田测点较多,降低GPRS信道流量和收发频率,有利于系统的稳定和GPRS信道的通畅。
(1)打包发送
有些应用需要高速密集地采集一段时间内的数据,而对实时性要求不高,比如要采集采油机一个周期约15s的功况图(位移一载荷图),每50ms一个点,如果每采一点就发送一次数据,服务器要频繁接收和处理数据,加重服务器负担不利于服务器的稳定运行。这种情况下可以采取实时采集集中发送的方式,将实时采集到的数据暂时存储在5510里,一段时间集中发送一次数据,比如采完一个周期后将一个周期的数据一起发给服务器,由服务器一起处理。
(2)优化指令交互方式
为了灵活采集,必须采用交互采集方式, 由服务器发出指令,采集分站根据收到的指令的要求采集和发送数据。采用自定义指令格式,指令分为即时响应指令、持续响应指令和设置指令三种,即时响应指令为5510接收到后立即执行的指令,指令执行完就不再起作用,比如:发指令取某个5510上某几路的即时数据;持续响应指令为5510接收到后持续执行的指令,在后续的同类指令修改它以前,5510将一直执行这条指令,比如:发指令让某个5510每60s发一次某几路的数据;设置指令为设置5510内一些参数的指令,比如:重设5510内的时间,重设采集精度,等等。