技术频道

基于GSM短信息的离散油井监控系统

利用GSM移动通讯网络短信息服务快捷的性能和想对低廉的收费,研制开发了一种用于分布式井群生产的监控系统,可直接应用于油井地比较分散的采油生产企业,满足了油田生产监控网络所要求的高可靠性、高实时性和维护方便性。

1、 系统组成及其功能

该系统采用由单台监控服务器和多监控终端并行运行方案,每口油井作为一个终端单元,实时采集下接的(仪表负荷传感器、电流互感器、电压互感器、功率因数变换器)信息,自主运行。监控终端可以选用有线或无线两种通信方式与监控服务器交换数据,在油井现场用笔记本电脑RS232C直接电缆连接进行参数修改和数据传载,此时笔记本电脑充当监控服务器,使系统方便的运行;对于中心控制室,监控终端可以通过GSMmodem和监控服务器进行数据交换,但是通信费用比较高而不可取,当然也可以通过无线数传电台进行数据交换,通过实际应用的数据交换量的比较,有效的油井数据量一般不超过一条段信息的容量,经过试验检测我们知道作为最大的数据交换——示功图也不过160个字符(测量周期100ms,冲程周期6——7s),因此选GSM短信息方式进行必要的数据交换完全满足。监控终端根据设定的需要把油井抽油机工作状况以短信息的方式发送到监控服务器,监控服务器对数据进行分类保存、统计供管理人员查询、分析。工作人员可以在监控服务器根据需要以短信息的方式向终端发送控制命令,控制抽油机的运行和获取抽油机的工作状况。

整个系统由单井数控单元、中心控制室和GSM网络组成。系统框图如1所示。


                 


按此在新窗口浏览图片
其中单口油井监控单元包括:RTU、信号处理模块和G100A短信模块。

1.1 RTU设计

RTU作为监控单元功能实现终端,选用ZWORLD公司生产的RCM2300核心模块,RCM2300模块包括:工作在22.1MHz上的微处理器Rabbit200;128K SPAM和256K Flash;29个1/O线,17个可设置的l/O、8个固定输入、4个固定输出;3个通用串口;5个8位定时器和1个带2个匹配寄存的10位定时器(5个定时器成对级联)。根据需要我们扩展输入输出通道为:4路继电器输出,4路数字量输出,8路块数字输入,4路12位分辨率4~20mA电流模拟量输入,4路12位分辩率0~5V模拟量输入,2路12位的分辨率0~4V模拟量输出,1个RS485端口,2个3线的RS232或者一个5线的RS232端口。相应的在开发平台Dynamic C上用单根接口电缆把PC串行口和基于Rabbit2000的目标系统连接起来就可实现软件的开发,系统集编辑、编译、链接、调试、下载于一体,可快速的进行目标系统软件的开发。

监控终端的功能是根据检测的抽油机工作状态,判断抽油机的工效,适时的对抽油机进行起停操作,保障油机的机械及其电气设备的安全的同时,提高单口油井的产效。

1.2 信号处理模块

对于不同的油井可能需要配备不同的一次仪表。还有企业原来遗留的一些不同信号的仪表,特别是油机必备的负荷传感器,其输出信号一般是0~10mV,但是随着使用时间的递增负荷零点会有变化,将直接影响到控制功能的实现,所以我们专门针对负荷传感器设计了调理模块, 除完成将0~10mV电压信号转换成4~20mA电流信号外,还要负责处理好随温度和时间变化的影响。

1.3 G100A短信模块

北京捷麦公司的G100A短信模块集成了使用西门子TC35的GSM信道单元、信令转换单元、串口电平转换单元。其信令格式及应用开发极其简便。在应用中监控终端和监控服务器通过RS232接口连接TC35T来发送和接收GSM短和、消息,完成数据交换功能。

 


按此在新窗口浏览图片
终端控制软件设计

监控终端RTU系统软件不仅要实时采集抽油机数据,实时控制抽油机的运行,还 要对各种信息进行处理,抽油机本身负荷功图、电流图、功率因数图等都是大数据量的处理,所以系统软件的设计必须是一个多任务系统。ZWORLD公司软件开发平台Dynamic C是一个开放C语言开发环境,提供有丰富的库函数,可以开发出多任务系统。

终端控制软件功能设计采用模块化设计,主要包括三个方面:数据采集与处理功能模块、逻辑处理功能模块、I/O驱动模块、通信模块。设计流程如下图2



按此在新窗口浏览图片
图2 终端控制软件流程图

1) 据采集与处理功能模块:需要采集的模拟数据有光杆负荷、电机电流、电机电压,电机功率因数和其它的油井管道压力等数据,数字量信息包括电机状态(运行和停止)、系统运行方式(手动/自动),位置开关状态等。对模拟数据进行量化处理为相应的可视化图形并按一定的时间规律间隙存储,对数字量信息需要进行抗干扰处理,防止假错信息进入。

2)逻辑处理功能模块:控制系统的目的是要控制的一系列动作,根据采集的信息识别当前抽油机的工作状态,按照抽油机的工作原理和油井的变化规律,控制和预测抽油机的动作。抽油机的控制功能主要包括:空抽控制、时间定点控制、连喷带抽控制,根据用户的实际应用设定需要的控制功能的同时,记录出现的所有运行故障。

3)I/O驱动模块:这一部分主要是针对输入、输出耗损时间较多的缘故,把所有输入输出放在一个任务里面集中处理,有利于提高系统的实时性。控制实现声音和灯光闪烁的报警功能。

4)通信模块:通信功能我们实现了两种方式,在工作现场通过RS232接口通信的Modbus协议和基于GSM短信息的无线传递方式。Modbus协议实现已经有很多文章介绍过,这里我主要说说GSM短信息的无线传递的实现。

a、 连接与数据格式


按此在新窗口浏览图片
G100A型GSM数传模块采用的是三线制串口,即TX,RX,GND三条线,没有其他任何握手和数据流控制线。其传输数据格式为:1个起始位、8个数据位、1个停止位。无校验(即51系列单片机串型通讯的方式1)。串口速率为固定的9600Bps.

b、电话号码的表示

GSM短信模块是用GSM模块的短信息功能来传输数据的,所以在使用它传输数据的时候就要用到电话号码。为了规范和方便,下面介绍数据包中电话号码的表示方法。数据包中用6个8位二进制字节表示电话号码,每个字节中高4位和低4位均用BCD码表示1位十进制的电话号码,这样每个字节可表示两位电话号码,6个字节共可表示12位电话号码,因现行的电话号码均为11位,而6字节能表示12位十进制的BCD数,所以在传输数据表示电话号码时要将电话号码的前面补0以凑足12位。假设电话号码是13501237654,转换成6字节BCD码后变为01H,35H,01H,23H,76H,54H。

将电话号码转换成数据包中BCD码的格式的步骤就是:1. 在电话号码的左边补一个“0” 2. 从左向右每两位分成一组 3. 分别将各组转换成BCD码。如果要将数据包中的数据还原成电话号码,步骤正好相反。

c、术语

信息:信息是指GSM模块与上位机通信的内容。

数据:上位机通过串口,发送给模块GSM模块,通过GSM模块的无线发送及GSM网络传输传送给另一GSM模块的信息叫数据。由上位机通过串口发送给GSM模块的数据叫发送数据。由GSM模块收到短信后传送给上位机的数据叫接收数据。数据的起始点是上位机,目的点是另一上位机。

命令:上位机通过串口,发送给GSM模块让模块执行一定的动做或GSM模块传送给上位机报送模块内的一些参数或状态的信息叫命令。若命令的起始点是上位机,目的点则是GSM模块。

d、数据包格式

无论是数据还是命令都用下面的格式来表示

D7H│控制字节│信息

不管是命令还是数据,都有一个包头D7H,接着就是一个控制字节。本模块规定:当控制字节大于147时,数据包为命令,否则就为数据。比如命令D7H, FFH, 参数, D7H为包头,FFH为控制字节,因FFH>147,故参数为命令字节。模块就是靠数据包的第二个字节来识别您发给它的信息是命令信息还是数据信息的。

e、发送接收数据的格式

1. 发送用户数据

语法:D7│控制字节=UDL│STA│UD

UDL:要发送的除包头D7H以外总的数据长度。包括STA,UD和它本身的字节长度,因STA 和 UDL的字节长度一般是固定的,即固定为1+6=7个字节,所以其长度可由如下公式计算UDL数值=1+6+UD长度

STA:接受方的电话号码,即目的地址。号码需要进行格式转换。

UD: 您需要发送的有效数据。其总长度小等于140个字节。因为短信息的数据长度不能超过140个字节。

例1:

假设您要发送00H,11H,22H,33H,44H,55H,共6个字节数据,接收方的电话号码(目的地址)是13655436789,UDL=0DH(13个字节), STA=01H,36H,55H,43H,67H,89H,UD=00H,11H,22H,33H,44H,55H, 发送格式如下

D7H│0DH│01H│36H│55H│43H│67H│89H│00H│11H│22H│33H│44H│55H

2.收用户数据

语法: D7H │ UDL │ SOA │ UD

SOA:发送方的电话号码,即源地址。

例2:

假设您收到上面发送来的00H,11H,22H,33H,44H,55H,共6个字节数据,发送方的电话号码(源地址)是13920855795,UDL=0DH(13个字节), SOA=01H,39H,20H,85H,57H,95H,UD=00H,11H,22H,33H,44H,55H, 接收到的数据格式如下

D7H│0DH│01H│39H│20H│85H│57H│95H│00H│11H│22H│33H│44H│55H

 

3 上位机监控软件设计

上位机我们选用Delphi6.0作为开发工具。虽然Delphi没有自带串口通讯的控件,但是可以一方便的编写出通信应用程序。用Delphi实现串口通讯,常用的几种方法为:使用控件如MSCOMM和SPCOMM,使用API函数或者在Delphi中调用其它串口通讯程序。下面介绍使用SPCOMM控件来实现Modbus协议,实现PC机和RTU通信。

使用SPCOMM控件进行串口通信需要处理好两个事件;

onReceoveData : procedure (Sender: Tobject;Buff:pointer;BufferLength:Word)of object

当输入缓存有数据时将触发该事件,在这里可以对串口收到的数据进行处理。Buffer中是收到的数据,bufferlength是收到的数据长度。

OnReceiveError: procedure(Sender: Tobject;EventMask: DWORD)

当接受数据时出现错误将触发该事件

Modbus RTU协议是一种主从式通信协议,每次由主站发起并期望从从站得到回应,从站接收到一消息,它将建立一定回应格式并返回给发起斩主站,从站返回消息在OnReceiveData事件里处理,根据主站发起的命令字分类比较如下代码

ProcedureTform1.Comm1ReceiveData(Sender:Tobject;Buffer:pointer;BufferLength:Word);

Var

Temp_receive:array of byte;

I,rec_len:byte;

Calculate_crc,rec_crc,reg,reg-value:word;

Begin

Rec_len:=bufferlength;

Setlength9temp_receive,bufferlength);

Move(buffer^,pchar(temp_receive)^,bufferlength);

Rec_crc:=temp_receive[rec_len-2 shl 8+temp_receive[rec-len-1];

Calculate_crc:=fcrc16(@temp_receive[0],rec_len-2);

If rec_crc<> calculate_crc then //返回数据CRC16校验错误决定重发

Begin

If error_order<>order_index then

Over_num:=over_num=1;

If over_num<3 then

Begin

Make_order(order_index);

End

Else

Begin

Showmessage(′传输数据有误,请检查通信线路′);

Error_order:=order_index;

Exit;

End

End

Elsd

Over_num:=0;

Case ovder_index of//order_index Modbus function code1:

Begin

//存储数字输出状态

end;

2:

begin

//存储数字输入状态

end;

16:

begin

//存储预置的保持寄存器值

end;

end;

end;

服务哭端数据存储我们采用后台Access数据库,根据不同的油井编号对应不同的从站通信地址,把个离散油井数据分类在不同表格存储,便于地质和勘井人员查询分析。其他有关监控软件页面数据刷新处理等问题限于篇幅不再说明。

结束语

我们开发研究的这套系统首先是在调查研究了国内油田所有应用系统的基础上,针对新疆油田特殊的地理环境,从实际需要出发,利用Dynamic C强大的处理能力,在保证了系统性能的条件下,降低了系统造价,节省了传统的方法采用中控室使用组态软件开发所需要的昂贵的通信设备费用。该系统经过在克拉玛依新疆油田采油一厂、二厂、五厂投入试运行后,为采油管理人员及时地提供了准确完整的运行数据,单口油井能效比得到提高。

文章版权归西部工控xbgk所有,未经许可不得转载。