摘 要 本文对基于labview的核磁共振测井仪测试系统的软硬件进行了介绍,其中具体介绍了基于labview事件队列状态机的软件实现,并对测试软件的功能进行了介绍,最后对测试系统的功用进行了总结,对下一步工作进行了展望。
【关键词】核磁共振 labview 事件队列状态机 测试系统
1 系统概述
基于labview的核磁共振测井仪测试系统是为国产核磁共振测井仪emrt科研相配套的测试系统。其设计和应用,伴随着核磁共振测井仪器研发的全程,对核磁共振测井仪的测试、连调、数据分析等各方面都起到了很好的应用作用。它是基于usb总线和复杂事件队列状态机的系统架构,以用来应付核磁测井工业样机复杂的测井模式、通讯协议和数据处理。
2 测试系统整体框图
测试系统软硬件结构简单清晰,便于测试工作的开展,省去了中间很多与核磁测井仪器本身问题不相关的环节,比如数据遥传短节、辅助短节等。
下面图1是整个测试系统的框图:
3 测试系统硬件简述
整个测试系统想要运行起来,下面几个部分是必不可少的:(1)刻度装置;(2)仪器的三个短节;(3)数据转换盒;(4)测试系统软件。刻度装置是一个卧式圆柱环体的容器,它与放置探头的轴是同心的,刻度装置一般是用玻璃纤维做成的,而且由薄金属层相连接,具有法拉第圆筒的作用,可以起到屏蔽作用;刻度筒内注满了掺加硫酸铜的水,硫酸铜明显的降低了水的t1弛豫时间。采用这种结构,探测区就包含100%的硫酸铜溶液,而且由于水的弛豫时间相对较快,就可以缩短刻度时间。数据转换盒的作用是1553b总线转usb总线,usb总线可以方便的与笔记本进行连接。
4 基于labview事件队列状态机的软件实现
4.1 labview高级编程
4.1.1 labview数据流
labview是一个图形化软件开发环境,它所使用的编程语言是g语言,也称为图形化编程语言。传统文本编程语言根据指令的先后顺序决定应用程序执行顺序,也称为:“控制流”;而labview则按照“数据流”的模式运行vi。所谓数据流也就是说:当所有的输入端都具备了必要的输入数据时,程序框图节点将运行。节点在运行时产生输出数据并将该数据传送给数据流路径中的下一个节点。数据流经节点的动作决定了程序框图上vi和函数的执行顺序。
4.1.2 通知器
通知器是labview同步数据传输编程的方法之一,通知器操作用于挂起一个程序框图的执行,直到从程序框图的另一部分或同一应用程序中运行的vi收到数据后才继续执行,通知器经常使用在向多个位置或消费者广播时发布消息的场合。通知器操作函数不缓冲已发送的消息,如消息被发送后没有任何节点在等待,则当另一消息被发送后数据将丢失,这一点与测井数据采集机制是类似的,如果丢了一包数据,或者一次通讯错误,是不会挂起程序的,程序只会记录错误,继续下一个新周期的执行。
在本测试系统中,通知器主要用于工作模式的触发,几乎所有测井模式都用到了这项功能。
4.1.3事件队列状态机
状态机包含三要素:状态(state)、事件(event)和动作(action)。labview 中的状态机由一个while主循环和一个case结构组成,并利用位移寄存器来实现状态的跳转。while循环保证状态机的连续运行;case结构的分支与系统的状态(state)一一对应,即case结构的分支名称对应着状态名称,分支里执行代码的功能对应着状态的行为(action);而case结构的条件变量与系统的事件(event)相对应,引发状态的变迁以及决定状态迁移的方向。
队列型状态机是把将要执行的状态排队,然后把它们的状态名存在队列里,队列里的状态名与状态机的各个状态一一对应,用来控制状态的转换顺序。执行了的状态,其名称会从队列中删除,同时根据运行时状态的动作和碰到的事件,新的状态名又会被添加到队列中。
本测试系统将核磁共振测井仪器的每一个测井模式都作为一个事件队列状态机来实现,包括通讯测试、仪器刻度等,总计设计了20个事件,对仪器各个方面的状态信息都进行采集监测。图2所示,20个事件状态的g语言编程框架:
4.2 仪器的各种模式实现
每个测井模式都是由事件状态机来控制实现的,测试软件实现了仪器的所有测井模式和通讯协议,包括:扫频、接收刻度、发射刻度、单频模式、fbw模式、油模式、重油模式
、气模式等总计15个仪器操作模块。
基本上所有的仪器测井模式都必不可少以事件和状态来驱动,事件状态机的实现粗略描述如下:在用户界面选择模式-设置好参数-由用户事件触发开始-对应模式参数初始化-通知器发送通知-通过dll库函数下发命令和参数给仪器-下发采集命令、送数命令-仪器响应上传数据-对数据进行取舍-进行数据处理-等待极化周期-开始下一个周期……
图中ne=500,即采集了500个回波,并且进行了相频检波算法,将200个算法结果形成的核磁共振衰减曲线绘制成二维图,由图可见获得了很好的信噪比效果,在地面试验室使用模拟探头和硫酸铜溶液的情况下,信噪比27.79。
4.3基于dll的硬件通讯模块
labview在函数选板的库与可执行程序中提供了调用库函数节点的控件,通过调用windows标准共享库函数和其他的库函数,可以提高程序的开发效率,增加软件的功能。本测试系统与硬件通讯的功能实现,使用动态连接链接库调用的方式实现usb接口通讯。
usb通信接口使用ftdi公司的专用芯片ft245bm实现,该公司提供了dll动态链接库ftd2xx.dll,可以用于labview程序与硬件之间的设置操作和读写操作,用到两个最主要的函数是,ft_write和ft_read。
4.4 后台数据处理模块和算法
为了进行数据分析,用到了一些算法,扫频部分主要使用了样条插值算法,主刻度部分主要使用了指数拟合算法和样条插值算法,各测井模式使用了基本的paps处理技术和基本回波生成算法。另外,还利用labview的嵌入式程序功能,嵌入了matlab的回波t2谱反演算法。同时,为了可以实时跟踪井下仪器参数和数据的全面情况,进行进一步的后处理分析,本测试系统特别在后台一些关键节点都实现了数据存储功能。
5 结论
核磁共振测井仪测试系统从设计开始到现在,不断更新升级,有效的支持了国产核磁共振测井仪emrt的全程研制。测试系统软硬件结构简单清晰,便于测试工作的开展。基于labview事件队列状态机的高级g语言编程技术,使得测试程序能够应付核磁仪器复杂的测井模式、通讯协议和数据预处理、界面演示等。使用dll动态链接库调用实现与硬件间的通讯,测试系统的开发过程变得高效。数据处理算法和数据存储机制为分析仪器的状况、分析数据的有效性提供了必要的手段。
参考文献
[1]george coates,肖立志,manfred prammer等.核磁共振测井原理与应用[m].北京:石油工业出版社,2007:74-88.
[2]肖立志.核磁共振成像测井与岩石核磁共振及其应用[m].北京:科学出版社,1997:39-48.
[3]林静.labview虚拟仪器程序设计从入门到精通[m].北京:人民邮电出版社,2010:151-171.
[4]王磊.精通labview8.0[m].电子工业出版社,2007:232-259.
作者单位
中海油田服务股份有限公司油田技术事业部 北京市 101149