大型压裂曲线实时监控系统
2013-09-03白宇
白宇
【摘 要】随着油田勘探开发的深入,油水井压裂的工作量越来越多,针对部分区块的普通压裂施工成本高,施工难度大,施工效益低的问题,大型压裂将会越来越多被使用。然而大型压裂往往需要多套压裂仪表车组配合施工,每套压裂车组的仪表车只能监测本车组的串口数据,不能远程传输回现场指挥部和后线科研单位,更不能和其他车组的压裂数据整合。针对这一问题,基于VC++的编程,本文提出一整套的技术解决方案,实现多车组压裂数据整合并通过3G网络远程实时监控。
【关键词】大型压裂,串口,VC++, 压裂数据整合,3G网络,远程实时监控
【中图分类号】 TE325【文献标识码】 A【文章编号】1672-5158(2013)07-0014-02
1.绪论
随着油田勘探开发的深入,油水井压裂工作量越来越多,其对增储上产作用越来越巨大,但是部分区块的普通压裂施工成本和施工复杂程度越来越高,压裂效益却不理想,大型压裂因其高效益性将成为新的施工重点。然而大型压裂往往需要多套压裂车组配合施工,每套压裂车组有自己独立的仪表车监测各自的压裂数据,每套仪表车的数据只能在仪表车内监测,不能远程传输更不能和其他仪表车数据整合。
在本论文中,基于VC++环境下我提出了一整套的技术解决方案来实现多车组压裂数据的整合并远程实时监控。首先,通过各套压裂仪表车的串口读取实时压裂数据;其次,通过小型局域网把读取到的各套压裂数据汇总;其次,通过本文的算法把各套压裂数据进行整合,并通过3G网络远程发送到后台服务器;再其次,服务器把数据备份到数据库的同时,通过vspm软件把计算机端口虚拟成串口以实时转发数据给内网的监测终端机;最后,监测终端机使用专业的压裂分析软件FracProPT接收整合后的数据,并实时显示压裂曲线。方案设计图见图1-1。
2.系统模块的实现
本系统主要分为串口通信,网络收发,数据同步处理,虚拟串口共四个模块,下面分别介绍各模块的实现。
2.1 串口通信
目前,串口通信是工业控制机与底层硬件芯片的主要通信方式,串口一共有RS232和RS485两种物理接口标准,压裂大队的仪表车串口是RS232标准的。在VC++环境下,有两种编程方式实现串口通信:一是调用Windows的API函数,这种方法虽然具有很强的灵活性,但是使用方法及其复杂;二是使用Microsoft提供的ActiveX控件——MSComm,通过MSComm控件的属性,方法和事件实现串口操作,可以简化串口程序的开发[1]。在本系统中,我选择了MSComm控件。
使用MSComm控件操作串口需要四步:(1)把MSComm控件导入到开发的工程中;(2)打开并配置串口的函数编程;(3)响应MSComm控件的OnComm事件的函数编程,以便截获串口数据;(4)对串口数据分析函数的编程。
其中,在第(3)步编程中,需要注意调用第(4)步的分析函数。这样,当串口有数据时,MSComm控件会自动响应OnComm事件的函数完成对数据的截获,然后程序转入分析函数,在分析函数里针对压裂数据做专门的解析,并在内存中开辟空间做好备份副本的工作,等待网络模块的转发。
2.2 网络收发
网络通信连接主要有3个参数:通信的目的IP;使用的传输层协议(TCP或UDP)和使用的端口号。传输层使用TCP或UDP同时为多个应用程序进程提供并发服务时需要区分不同应用程序进程间的连接。套接字Socket就是通过绑定网络通信连接的3个参数,以实现多个程序进程的数据传输的并发服务[2]。
套接字Socket可以看成在两个程序进行通讯连接中的一个端点,是连接应用程序和网络驱动程序的桥梁,Socket在应用程序中创建,通过绑定与网络驱动建立关系。此后,应用程序送给Socket的数据,由Socket交网络驱动程序向网络上发送出去。计算机从网络上收到与该Socket绑定的IP地址和端口号相关的数据后,由网络驱动程序交给Socket,应用程序便可从该Socket中提取接收到的数据。
套接字Socket是网络通信的基本构件,无论是3G网络通信还是局域网通信,都要使用Socket技术。为了简化利用套接字进行网络应用程序开发,微软的MFC对底层的套接字函数进行了封装,提供了CAsyncSocket类和CSocket类[2]。其中CAsyncSocket类只是对套接字进行简单的封装,使用起来比较繁琐。本系统选择使用更高级封装的CSocket类编程。
使用CSocket类开发网络程序需要四步:(1)在发送端配置好目标机的IP和端口,并编写建立套接字的代码;(2)在发送端编写要发送数据的代码,并使用CSocket类的Send函数发送[3];(3)在接收端配置计算机端口,并编写建立套接字的代码;(4)在接收端利用CSocket类的Accept函数接收数据,并编写数据处理代码[3]。
其中,在第(2)步中要把2.1中实时截获的串口数据引入进来,并实时使用CSocket类的Send函数发送给目标机。在第(4)步中,要实时处理好接收到的串口数据,并在内存中开辟空间做好存储工作,等待下一模块的调用。
2.3 数据同步处理
数据同步处理模块是本系统的核心模块。因为在实际试验中发现,各压裂仪表车每次发出的串口数据个数是不一致的,而且每台仪表车发出的串口数据个数也是无规律性的,随机性很强。数据同步处理模块就是要把从多台仪表车采集的串口数据在秒级时间上统一同步为一个数据组。这样再使用网络模块传输回后方后,经后方机的拆分就可还原出同步的两个数据源,可以进一步的数据整合处理。
因油田的大型压裂一般使用两套压裂车组,本模块的核心设计就是使用两个循环队列[4][5]作为两个数据容器。把每台仪表车获得的数据分别存入各自的循环队列,然后再把两个队列中同步的数据使用网络模块发送出去,留下非同步数据等待下次的同步处理。详细设计如下:(1)开辟两个线程专门监听两个压裂仪表车的数据源;(2)对两个数据源实时传来的数据分别做分析处理;(3)把(2)中分析的完整数据存入各自的循环队列;(4)开辟一个新线程检查两个队列的同步情况,把已经同步的数据编组发送出去。
其中需要注意三个子线程和主线程的耦合关系,各线程的开关变量设计。对第(2)步中的数据处理,需要分析数据是否完整,把完整的数据要保存好的同时,残片的数据也要保存好等待下次残片数据传来时的拼接处理。此外还要维护好两个循环队列的指针移动,特别是进,出队列时需要判断队列的空与满,并做相应的处理。
2.4 虚拟串口
通过网络发送回后方的数据是进入计算机端口的,而专业的压裂软件FracproPT只能接收串口的数据。使用vspm虚拟串口软件可以通过计算机端口成功完成服务器和客户端的虚拟串口连接及数据通信。原理图如图2-1所示:
通过vspm把服务器的端口A虚拟成串口C,把客户端的端口B虚拟成串口D,虚拟串口C,D通过服务器和客户端的计算机端口实现了双向通信。其中虚拟串口C和D需要接2-1的串口通信代码。
3. 系统测试
为了测试本系统的功能,我通过读取并解析两个含有原始压裂数据的二进制dbs文件,把其中的二进制压裂数据重新转换成十进制流式的串口数据,以模拟两个压裂仪表车的串口数据源。
其中,图3-1是实时获取的两个数据源的组合数据,图3-2是两个数据源的压裂曲线组合。经过与原始两个独立数据源的严格分析和对比,1小时09分55秒的模拟采集共4195条数据记录无差错,测试取得成功。
4.总结
针对大型压裂多套压裂仪表车的数据不能无线传回后方,更不能数据整合的问题,本文提出了一整套技术解决方案,使得大型压裂现场的压裂数据得到整合和实时远程监控。而且针对部分老式压裂仪表车没有串口源的问题,通过本文的技术方案,可以用“软件”方式接出一个串口数据源实时的转发出去,同时还不影响前线的生产。特别是解决了技术专家必须亲临仪表车观察压裂数据,不能同时监控异地其他压裂施工过程的问题,为油田压裂施工的信息化做出了新的贡献。
参考文献
[1] 叶克江. 基于串口通信的实时压力控制系统设计与实现.微计算机信息[J].2009年第25卷 3-3期,p.127-128
[2] 宋坤,刘锐宁,李伟明. MFC程序开发参考大全[M].人民邮电出版社.2007
[3] 刑建春.基于GSM通信技术的无限测控系统设计[J].计算机测量与控制.2004年第4期,p.345-348
[4] 严蔚敏,吴伟民.数据结构C语言版. 清华大学出版社[M].2004
[5] 黄国瑜,叶乃菁.数据结构C语言版. 清华大学出版社[M].2003