仇 傲 刘西恩 陈洪海 王文梁
(中海油田服务股份有限公司油田技术研究院 北京 101149)
声波测井是以岩石弹性力学和井孔声学为理论基础的测井方法[1]。在随钻声波测井中,施工过程中测井仪为间歇工作方式[2],每次测量循环中,处理结果通常有几十个字节,原始波形的数据量则以千字节计;并且需要测量的参数也要比其他方式测井需要测量的参数多。受传输速率限制,除了少量处理结果被实时传送到地面外,大量处理结果和原始声波波形数据存储于随钻声波测井仪的井下存储电路中,要待仪器起钻后,上位机才能读取存储在井下仪器电路中的数据[3]。同时井下仪器结构复杂,拆卸困难,直接读取数据和对井下仪器电路程序更新耗时费力。所以需要一个装置作为接口电路,解决在不拆卸仪器的现场应用环境下,不影响正常测井工作的前提下读取井下仪器存储的声波数据,从而提高测井效率。为此,提出了随钻声波数据读取装置以及大量测井数据远距离传输的设计,另外增加了井下仪器程序远程更新功能,增强了井下仪器的可维护性。
随钻声波数据读取装置(以下简称读取装置)除了在起钻后完成井下仪器存储数据读取外还要完成工房中仪器测试和修正工作,包括实现控制命令下发、仪器检测和对井下仪器电路程序更新的功能。
读取装置采用嵌入式Linux 做软件平台。由于Linux属于自由软件,用户不用支付任何费用就可以获得它和它的源代码,并且可以根据自己的需要对它进行必要的修改,无偿对它使用[4];它具有Unix 的全部功能,遵从POSIX规范,提供了源代码级别的C 语言应用编程接口给操作系统的服务程序,可移植性强;并且具有强大的网络功能,内嵌了TCP/IP 协议。所以,嵌入式Linux 系统非常适用于本设计的开发,同时也有利于本系统以后做功能扩展。根据读取装置的需求,设计主要从以下方面考虑:完成相关功能的硬件平台搭建,在嵌入式Linux 系统下完成系统移植及应用程序的设计,测试装置与井下仪器之间的串口传输速率要达到1Mbps,使用TCP 协议实现可靠的网络通信。
读取装置与上位机和井下仪器的连接示意图如图1 所示。读取装置通过串口与井下仪器通信,读取存储在井下仪器的测井数据和下载更新井下电路的程序。
通过网线与上位机通信,接收来自上位机的命令和程序数据,并将测井数据传给上位机。
图1 测试装置连接示意图
读取装置电路部分是以S3C2440(ARM9)为核心的典型嵌入式电路,周围搭建了包括flash 芯片、外扩ram、串口芯片、网络接口芯片以及保证电路正常工作的晶振以及电源模块。电路内部的ARM9 和网卡芯片之间通过数据线和地址线复用实现交互;与地面系统的通信通过网络接口实现;通过1Mbps 异步串口实现对井下仪器的命令发送和数据交互;外扩的RAM 实现对数据的缓存和程序运行;外扩的Flash 实现对与操作系统相关数据的存储。系统的总体设计框图如图2 所示。
随钻声波数据读取装置要求数据的传输距离达到200 m,传输的速度要达到1Mbps,如果采用一般的,不带预加重功能的RS485 芯片,在短距离传输的时候,信号质量没有问题,信号不会发送衰减。图3 所示的为采用短线进行的自发自收的波形图。如果传输的距离加到200 m 之后,再使用常规的RS485 芯片则波形的质量就会变得非常差,图4 是在实验室条件下,采用不带预加重功能的RS485 芯片,经过200 m 传输线之后的数据波形,从图中我们可以看出,信号质量已经达不到我们在传输过程中的要求,同时在传输中的数据也可能因此发生错误。所以,在硬件设计的部分,必须找到一种可以在长距离传输的条件下,可以显著增强信号质量的办法。
在应用程序设计方面,常规的传输方式是从串口处读取井下仪器上传的数据同时将收到的数据通过网络接口发送给上位机,由上位机接收并保存成文件。这样的传输方式在数据量较小,比如只有1~2Mbytes 的时候是不会产生问题的,但是,井下仪器存储板的容量大小达到1Gbits 也就是128Mbytes,这样的传输方式不仅速度难以接受,而且会由于串口和网络接口速度不匹配的原因导致数据丢失,文件接收不完全导致整个数据传输过程无法正确进行。所以在软件设计方面也必须采用新的方式,经过思考以及反复试验提出了一种文件分块的传输方式。
图4 普通RS485 芯片200 m 传输后波形
在RS485 通信中,数据传输距离由于传输线阻抗和码间干扰引起的信号衰减与即便而受到限制。一般情况下,传输线阻抗与终端阻抗相比可忽略不计,但在远距离传输中,传输线阻抗对信号传输有着不可忽略的影响,具体影响取决于所用电缆的阻抗与终端所接匹配阻抗的分压。码间干扰是由传输线寄生参数引起的与码型有关的延迟抖动,这种抖动会妨碍通用异步收发器(UART)与数据流的同步,使误码率提高降低数据通信的可靠性,从而限制了通信距离[5]。当传输速率较低时,传输距离主要与传输线阻抗引起的信号衰减有关;当传输速率较高时,传输线产生的损耗、特别是码间干扰大大降低了通信距离。延长通信距离的一个关键问题是抑制码间干扰,Maxim 公司的MAX3292高速全双工收发器中,通过加入预加重电路,有效的抑制了码间干扰,使可靠通信的距离和速率大大提高[6]。
预加重电路的工作原理:码间干扰是由于电缆的寄生RC 时间常数作用于不同码型时造成不同的延迟时间,产生延迟抖动引起的。例如,当RS485 驱动器输入端的数据为“11111110”时,在一串“1”码的作用下,驱动器输出上升到较高的电压幅度,因而,由“1”过渡到“0”码时所需要的时间较长;当驱动器输入信号为“00000010”时,对应于“1”码,驱动器差分输出电压幅度较低,因此,由“1”到“0”的过渡时间较短,由此可以看出:传输延迟时间与码型有关,不同码型,传输线寄生参数产生的影响不同。为解决这一问题,MAX3292 内部的预加重驱动器设置了四级电平(增强高电平、高电平、增强低电平、低电平),当驱动器输入由“0”码变为“1”码时,预加重驱动器输出为“增强高电平”,经过预加重电路设定的时间间隔后,回到高电平,如果驱动器输入在预加重电路设定的时间间隔前变为“0”码,驱动器输出将直接由“增强高电平”将至“增强低电平”;当驱动器输入由“1”码变为“0”码时,预加重驱动器作类似处理。从以上分析可以看出:预加重电路在输入信号电平翻转时,强制将差分输出拉至高电平或低电平,信号幅度是原来的1.9 倍,减小了差分输出的上升或下降斜率,通过抑制信号的衰减改善码间干扰。
读取装置中使用max3292 进行预加重电路设计,将ARM 芯片的UART1 即TXD1 和RXD1 分别和max3292 的发送端和接收端相连,实现信号传输预加重功能。
图5 所示的是在实验室环境下,使用带有预加重功能的max3292 在波特率为1Mbps 的条件下传输200 m 后的数据的波形,图中上面的是数据的波形,下面是差分信号,从图中我们可以看出,带有预加重功能的芯片对信号的质量有明显的提升,经过200 m 传输线传输之后信号没有明显衰减,完全满足传输过程中对信号质量的要求。
图5 预加重芯片传输200 m 波形
随钻声波测井仪采集声波数据时,每次采集的点数为300 个点,数据的大小为2534bytes,井下仪器的存储板容量总大小为1Gbits 也就是128Mbytes 的数据。如果采用原始的从串口处读取井下仪器的数据同时把数据通过网络传输给上位机的方式,会由于上下传输速度不匹配而导致传输的过程中丢失字节的问题。所以为了解决这样一个问题,采用了一种分块传输的思想。将128Mbytes 的数据分块来传输,每一块的大小为50Mbytes 左右。这样128Mbytes 的数据最多只需要3 次就可以传输完毕。程序流程如图6 所示,下面分步骤说明整个数据传输的过程。
1)通过串口发送命令给井下仪器:
shorttowrite=0xxxxx
write(serial_fd,&towrite,sizeof(short))
其中XXXX 为仪器地址,通过write 函数就可以把命令码通过串口发送给井下仪器。
2)井下仪器返回一个ack 握手信号后,测试装置通过串口接收本次传输数据的总长度:
read(serial_fd,read_times,sizeof(unsigned long int))
3)将收到的数据长度通过网络发送给上位机,告知上位机这次传输要接收文件的总长度。
4)测试装置创建一个文件,将井下仪器从串口发送的声波数据保存到这个文件中,相关代码如下:
byte=readn_serial(serial_fd,buff,4096)
fwrite(buff,sizeof(char),byte,fp)
首先把收到的数据存到一个数组里面,再把数组中的数据写到新建的文件里,循环执行这个过程指导文件接收完成,这时上位机等待文件接收完毕。
图6 数据传输程序流程
5)文件接收完成之后,测试装置发送一个ack 握手信号给上位机,通知上位机文件已经接收完毕。上位机准备通过网络接收声波数据。
6)测试装置打开刚刚接收完毕的声波数据文件,通过网络发送给上位机,由上位机接收之后保存成文件:
fp=fopen("mass_data_file","rb")
fread(send_buf,sizeof(char),4096,fp)
send(clifd,send_buf,4096,0)
循环执行这个过程直到整个文件中的数据全部发送至上位机。
7)发送完毕,关闭和上位机相连的网络套接字,命令完成。
这样就完成了一次数据传输,根据实际情况,128Mbytes 的数据只需要重复三次就可以完成整个声波数据的传输过程。经过反复的试验,波特率可以稳定在1Mbps 进行传输,传输线的距离也达到了200 米,传输的过程没有出现数据错误,完全满足随钻声波测试装置的设计需求。同时因为网络传输部分采用了TCP 方式的socket 网络编程,安全可靠,保证数据正确的同时也可以达到很高的速度[7-8],可以在一个小时左右完成存储板上所有数据的远距离传输过程。
图7 给出的数据为在实验室条件下由井下仪器实际采集到的波形数据,使用预加重芯片传输两百米后由上位机接收到的数据部分截图,经过和实际采集到的数据进行对比之后,发现数据完全正确,图8 给出了从上位机中显示的数据对应的波形,经过和实际的波形进行对比之后,发现波形上面也没有出现错误,从而说明了本文所给出的长距离串行传输的方式解决了项目中遇到的远距离数据传输问题,满足了实际需求要求。
随钻声波测井仪在井下采集的声波数据,数据量大,数据结构复杂,通过预加重电路和网线进行数据传输将大大提高传输速度以及数据的准确性,确保井下数据的不失真回显。本文提出的数据远距离传输方案可以满足随钻声波测井200 m 传输距离和1Mbps 传输速率的要求,同时可以在一个相对短的时间内(存储版数据全部存满预计150 h)完成整个数据的传输过程,极大地提高了测井仪维护人员的工作效率。
[1]张海澜,王秀明,张碧星.井孔的声场和波[M].北京:科学出版社,2004:1-261.
[2]肖红兵,鞠晓东,杨锦舟.随钻声波测井仪高效电源设计[J].声学技术,2009(10).
[3]肖红兵,鞠晓东,杨锦舟.随钻声波测井数据存储技术研究[J].科学技术工程,2009,6(9):3065-3068.
[4]罗苑棠,杨宗德.嵌入式Linux 应用系统开发实例精讲[M].北京:电子工业出版社,2007.
[5]魏智.预加重电路在RS485 中的应用[J].电子产品世界,1996(6).
[6]刘亮.外置预加重均衡器在高速背板互联中的应用[J].电子技术应用,2010(8).
[7]华清远见嵌入式培训中心.嵌入式Linux 应用程序开发标准教程[M].北京:人民邮电出版社,2009.
[8]Donahoo M.J.,Calvert K.L.TCP/IP Sockets 编程:C语言实现[M].陈宗斌 译.2 版.北京:清华大学出版社,2009.