胡永建,孙成芹,韩昊辰,孙 琦,王天娇
在石油钻井领域,录井及随钻测井均需要实时获取当前钻井深度。绝大多数井深测量系统采用“钻杆校深+大钩高度测量”的方法,即累加已下钻钻具的长度数据得到绝对井深,通过测量大钩高度得到当前单根的相对井深,两者的和就是实际井深。
悬挂大钩的大绳通过游车和天车的滑轮组缠绕在绞车滚筒上,滚筒转动带动大钩上下运动。使用安装在绞车滚筒轴上的绞车传感器(脉冲编码器)测量转数,进而计算出大钩高度。由于大绳在滚筒上缠绕层数等因素,该测量方法需要完成复杂的标定[1],另外现场的电磁干扰等因素也对绞车传感器的测量精度有影响[2]。
本文设计的新型井深测量系统使用激光测距仪测量大钩高度,与绞车传感器通过二次测量间接得到大钩高度的方法不同,使用激光测距仪可直接获得高度数据,测量结果不受大绳张力大小、磨损状况等因素的影响,具有更高的精度和更简单的标定方法。本新型井深测量系统使用开源硬件完成传感器的系统集成,结合物联网发展新技术,以较低成本快速完成了系统设计。
以转盘钻为例,图1是井深测量系统示意图。激光测距仪安装在游车上,向安装在天车底部的反光板发射并接收返回的激光束,测量游车与天车的距离。
首次使用前需要校准,安装完钻井所需的方钻杆与上下旋塞阀后提升大钩,使下旋塞阀的下接头台肩与方补心平齐,记录此时的激光测距仪读数。在正常钻进时,激光测距仪度数越大表示相对井深越大。在钻头到底的情况下,井深D计算如下:
其中,di是已接入的n根钻杆中第i根钻杆的长度;dBHA是井下钻具组合的长度,累加已下钻钻具的长度数据得到绝对井深;d为当前的激光测距仪读数;dZERO是校准时的激光测距仪读数,两者的差是相对井深。在钻头未到底的情况下,该式计算的是钻头深度。
图1 井深测量系统示意图
仅当钻头触及井底,测量得到的数据才是井深。在起钻、坐卡等状态下,钻头脱离井底,此时数据为无效井深数据。为了判断钻井状态,在钻机悬重表油路中接入了钩载传感器测量油压,经过校准可以得到大钩悬重。根据大钩悬重和大钩运动方向可以判断钻井状态。
激光测距仪的信号及供电线沿大钩自然垂下,顺着水龙头的水龙带接入井深测量系统主机;钩载传感器与主机通过电缆相连。
井深测量系统需要完成标定、在表格中输入钻具长度及维护记录数据库等任务,同时测量的井深数据需要发送到WITSML(井场信息传输标准标记语言)服务器,对主机控制器的计算、存储、人机界面及联网能力有较高要求,不适合使用传统的PLC组态控制方式。
研扬科技出品的开源硬件UP创客板使用英特尔凌动处理器,配备不同容量的DDR3L内存和eMMC程序存储器。该单板机有较多接口:包括1个千兆以太网端口、1个HDMI接口及多个USB接口[3]。可以运行微软Windows10完整版,方便使用Visual Studio编程。
本井深测量系统设计使用HDMI接口的7寸1 024×600分辨率液晶屏作为显示器,使用专用按键(不使用标准键盘及鼠标)完成人机交互。
由于钻井现场干扰的存在,触摸屏大多无法使用,只能使用键盘输入数据,这里使用4×4薄膜键盘作为输入设备。
虽然UP创客板配备了一个40针的GP总线接口,支持可作为按键检测功能的GPIO、UART及SPI等多种接口,但到目前为止厂家尚未提供Windows下适合.NET编程的托管API驱动,因此使用另一类常见开源硬件Arduino完成USB接口的HID专用键盘设计,为此设计了Arduino UNO板的扩展板(HAT)[4],其电路如图2所示。
P1、P2是UNO板引脚对应的插座,P3是矩阵薄膜开关的插针,P4是USB接口,其VBUS引脚同时为UNO板供电。D1为防静电用的瞬态抑制二极管(TVS)阵列,D2是齐纳二极管阵列,用来将UNO板IO口输出电压钳位到3.6 V,以防损坏主机控制器的USB接口。R1、R2为限流电阻,R3用于USB接口识别。
图2 Arduino专用键盘
井深测量系统用到了激光测距仪及钩载传感器两个传感器。与主机控制器集成时不仅要考虑接口种类,也要考虑防爆设计。为了充分利用以太网的联网优势,最终确定的集成方式如表1所示。
表1 传感器集成方式
传感器及电缆位于危险区内,必须增加适当的防爆措施,图3是主机结构示意图。
在Windows操作系统下,UP创客板目前只支持一路串口,这里使用串口服务器来连接多个传感器。作为物联网技术的一种,串口服务器为串口和以太网之间提供了联通的桥梁。本型号串口服务器支持两路串口同时工作,串口通过拨码开关可以配置为RS232、RS485及RS422接口,这里均配置为RS485。串口服务器的10/100 Mbit/s网口与UP创客板的千兆以太网口相连。为保证数据可靠通讯,串口服务器配置为TCP服务器,串口通讯速率及格式与各自的传感器或隔离栅一致。
本井深测量系统软件模块划分如图4所示。
TCP Client的两个实例有不同的端口,分别对应于串口服务器连接钩载传感器的隔离栅串口和连接激光测距仪的隔离栅串口。钩载传感器隔离栅使用ModBus通讯协议[6],由相应的编码解码模块处理;激光测距仪配置为使用SerialLink通讯协议[7],其典型查询指令如下:
发送:<STX>0122<ETX>
接收:<STX>8122+0152700<ETX>
其中<STX>是指令头 (0x02),<ETX>是指令尾(0x03),用ASCII码表示操作数。上述指令发送读取距离指令,接收到的距离测量数据是15.27 m。
钻机状态判断模块利用大钩悬重及大钩高度判断钻机工作状态,并根据当前距离测量数据得到相对井深。从事先输入数据库的钻具长度表中提取数据计算绝对井深。计算相对井深和绝对井深的和就是当前井深,当前井深显示在本机界面上并保存到数据库记录中,同时通过以太网,由WITSML客户端发往WITSML服务器供第三方使用。
使用VB.NET完成了主机控制器软件编程,其中TCP Client类需要长期在后台运行。为了实现多线程编程,即可使用System.Threading.Tasks命名空间下的类创建异步任务,也可通过System.ComponentModel.BackgroundWorker类实现。本设计使用Async、Await关键字简化了该项工作。
System.Net.Sockets.TcpClient类为TCP网络服务提供客户端连接,该类除了同步的Connect方法外,还实现了异步连接的ConnectAsync方法[8],下列代码创建了该类的实例,该实例连接IP地址为“192.168.127.10”的串口服务器的端口4001,同时获取用于发送及接收数据的Network⁃Stream∶
Dim mC As TcpClient=New TcpClient()
Await mC.ConnectAsync(IPAddress.Parse("192.168.127.10"),4001)
Dim mS As NetworkStream=mClient.GetStream()
发送数据需要调用NetworkStream的Write方法,接收数据可使用ReadAsync异步方法。
图5是井深测量系统面板。
图5 井深测量系统面板
通过分列在液晶屏两侧的薄膜开关“软”按键,可以完成各种设置、选择显示辅助数据、更改数据单位、输入数据等操作。
本文设计的井深测量系统使用激光测距仪测量大钩高度,简化了井深测量标定过程,提高了测量精度。配合使用钩载传感器可以完成钻机工作状态的自动判断。通过开源硬件UP创客板、Arduino板与传感器的集成缩短了研发时间,达到了设计目标。
参考文献:
[1]郑应钊,林孟,陈辉.大钩高度标定方法探讨[J].录井工程,2010,21(1):65-67.
[2]王立波.绞车传感器测量误差原因分析与对策[J].录井工程,2009,20(1):54-57.
[3]AAEON.UPDatasheetV8 2-CN [Z].2013.
[4] Arduino.Guide.ArduinoUno [EB/OL].https://www.arduino.cc/en/Guide/ArduinoUno,2017-01-12.
[5]Arduino.Guide.Libraries[EB/OL].https://www.ardu⁃ino.cc/en/Guide/Libraries,2017-02-07.
[6]福建顺昌虹润精密仪器有限公司.NHR系列三、四端子模块、安全栅通信协议[Z].2015.
[7] SICK.Operating instructions Distance measuring device DL100 Pro-RS-422[Z].2015.
[8] Microsoft.Library.Tcpclient[EB/OL].https://msdn.microsoft.com/zh-cn/library/system.net.sockets.tcpclient⁃VS.80).aspx.