基于OSGi的跨平台测井软件设计及应用

2014-12-13 05:27陈江浩余卫东雷晓阳彭慧琴方璐张培军
测井技术 2014年5期
关键词:跨平台插件视图

陈江浩,余卫东,雷晓阳,彭慧琴,方璐,张培军

(中国石油集团测井有限公司,陕西 西安710077)

0 引 言

EILog[1]测井成套装备已经在国内外30多个地区和油田投入生产应用,井下测井仪器也开发出适用于常规裸眼井测井、套管井测井、非常规测井、过钻具测井等多个系列;地面系统也逐步向网络化、智能化发展。这些都对ACME[2]测井采集软件提出更高的要求。①可扩展性。软件用户的多样化,仪器系列的增加,地面系统新技术应用对测井采集软件的可扩展性提出更高要求,主要集中在仪器组件库的扩展、主控模块的扩展、处理方法的扩展、绘图对象的扩展。②可维护性。软件日益复杂,要求从软件设计角度进一步降低软件的维护成本,提高维护效率和质量,方便软件推广应用。

本文在深入分析 OSGi[3](Open Service Gateway Initiative)框架的基础上,提出了一种基于C++的跨平台Q-OSGi框架实现,重点解决服务层、生命周期层、事件服务、扩展点等关键技术。将该框架应用在测井采集实时监控软件中,特别是对集成界面、可视化系统、数据层进行了详细设计。

1 OSGi服务平台

1.1 OSGi介绍

OSGi服务平台规范是OSGi联盟提出的一个松耦合、面向服务的应用程序开发框架[4]。它提供了系统动态扩充、修改系统功能和改变系统行为的支持,也提供了规范化的模块组件以及统一的开发方式。

1.2 OSGi的优势和不足

OSGi框架的优势主要集中3个方面:可扩展性、软件复杂度和可维护性。利用OSGi框架本身提供的动态扩展支持,通过对整个系统进行模块化拆分,降低了模块实施的复杂度。通过良好的模块化组织和版本管理,通过局部更新来减少对整个软件系统的影响,进一步降低了维护成本。

OSGi框架是基于Java语言特性而定制的。由于Java语言采用虚拟机形式运行,对于测井实时采集软件其运行效率不能满足要求,而且测井采集软件已有代码都是基于C++开发的,必须充分继承这部分资源,降低开发成本。

2 跨平台测井软件架构设计与实现

2.1 基于C++的跨平台OSGi框架实现(Q-OSGi)

Qt是一个跨平台C++图形用户界面应用框架。Qt完全面对对象,容易扩展,并且允许真正地组件编程。它具有优良的跨平台特性,Qt支持的操作系统有 Windows 95/98、Windows NT、Linux、Solaris、SunOS、HP-UX等。

鉴于Qt的跨平台性和其本质是C++语言的特点,跨平台测井软件的核心框架Q-OSGi利用Qt库,依据OSGi规范标准裁剪了与java相关的内容,实现了一个同时满足测井软件的需求又实现了OSGi平台规范的轻量级插件框架。

基于这个框架,通过对集成界面、可视化界面和数据层的实现,最终充分利用OSGi平台的优势框架理念,并能够减少OSGi的不足和继承原有代码,降低开发成本。该框架系统结构见图1。

2.1.1 Q-OSGi框架的服务层(Service Layer)

图1 Q-OSGi框架系统结构图

插件(Plugin)对应于OSGi中的Bundle,构成了Q-OSGi的基础单元。它建立在系统的相互协作的可用服务之上,这些服务共享一个服务注册中心。服务对象是属于插件的,而且必须在插件之内运行。插件必须将服务对象注册到框架服务注册中心,这样其他插件才可以查询到该插件提供的服务。提供服务的插件和使用服务的插件之间的依赖关系由框架管理。当停止一个插件后,该插件在框架中注册的服务必须要自动取消注册。

2.1.2 Q-OSGi框架的生命周期层(Life Cycle Layer)

一个插件的生命周期分为6个状态,分别是UNINSTALLED(未安装)、INSTALLED(安装)、RESOLVED(解决的)、STARTING(启动)、STOPPING(停止)、ACTIVE(激活)。插件的状态变化见图2。由图2可知,插件安装后,首先对插件信息进行解析,检测类依赖是否正确,成功后状态变为RESOLVED。框架启动插件,插件在启动期间,根据相关协议检测,如果启动成功,插件状态变成ACTIVE(激活),这时插件可以对外提供服务。

图2 Q-OSGi框架插件状态图

2.1.3 Q-OSGi事件服务规范

在Q-OSGi框架中,为满足插件之间的通讯要求,采用发布者/订阅者模式实现事件服务机制。按照事件发送者的不同,事件定义分为2类。①框架发送的标准事件,主要包括普通框架事件、生命周期中的插件状态改变。②任何插件都可以根据自身需要,发送基于主题(Topic)的事件。

图3描述的时间服务处理流程主要面对2个对象:事件发布者和事件订阅者。事件发布者使用postEvent和sendEvent发送事件到事件服务,事件服务再通过handleEvent接口将事件发送给事件订阅者。事件发布者使用事件服务发送基于主题(Topic)的事件,任何对某一主题感兴趣的事件订阅者都会收到该事件,并且做出相应的反应。

图3 Q-OSGi事件服务处理流程

2.1.4 Q-OSGi扩展点设计

为了增强系统的灵活性和扩展性,系统扩展了OSGi的规范设计,实现了扩展点机制。扩展插件的结构见图4。插件本身可以同时具有扩展点和扩展实现,各个插件可以定义自身的扩展点供其他插件实现,同时也可以实现其他插件的扩展点。插件本身需要实现系统中已有的扩展点才能插入到系统和已有的插件集成。插件本身可以是新的扩展点,在此基础上可以让其它插件扩展出新的功能。在单个插件的基础上,插件之间不断进行扩展,形成插件网络,最终组合成整个系统。

图4 扩展点结构图

2.2 测井软件系统设计

为了充分利用Q-OSGi框架的灵活性和可扩展性,增强系统的稳定性,减少维护成本,测井软件的设计使用微内核架构。微内核架构将系统服务的实现和系统基本操作规则分离开来,系统核心只包含必须的部分。通过这种设计大大简化了移植和升级维护的困难,同时由于内核的代码不多,也容易进行除错,增加系统的稳定性。一个服务组件的失效并不会导致整个系统的崩溃,内核需要做的仅仅是重新启动这个组件,而不必影响其他部分。

微内核负责搜索、加载、启动/关闭插件。微内核启动后,会首先搜索和加载用户许可校验插件,用以确定用户许可使用的插件。加载和启动集成界面插件,最终启动整个系统的各个模块。由于插件系统的特性,插件还可以动态启动,实现懒加载模式。

整个测井软件按照测井业务功能层次划分,主要由集成界面、可视化系统、数据层组成(见图5)。

图5 系统总体结构图

2.2.1 集成界面

集成界面设计系统的集成界面由界面显示插件和其他可视化系统插件集成而组成的。集成界面主插件负责收集、管理接口数据,向Q-OSGi框架中注册服务,并在交互界面上显示。插件可以根据需要向系统界面中加入子菜单或操作项,也可以根据需要在菜单栏中添加新的菜单项。由于采用灵活的插件机制,测井软件实现了2套集成界面插件,一套是基于触摸屏的平板版用户交互界面,另一套是基于桌面系统的交互界面。通过插件配置,可以方便地实现一个运行程序、两种用户体验。

2.2.2 可视化系统

可视化系统主要有测井视图、组合视图、图表视图等3个视图子系统。组合视图和图表视图的结构比较简单,通过继承QGraphicsView[4]类实现视图的绘制。测井视图子系统需要考虑多种情况和多种类型的对象的扩展和管理,结构较为复杂。测井视图的类图见图6。

测井视图中视图(View)接口为VLoggingView,场景(Scence)接口为 VLoggingScence,元素(Item)实现为TrackItem类。TrackItem包括了Track-BodyItem和 TrackHeadItem。TrackContentItem是道内包含元素的实现,它继承自IDrawExt,由ITrackDrawExt组成。在测井系统的设计中,设计了2个接口类IDrawExt,TrackDrawExt,分别是曲线对象和道对象的扩展接口。由图6可知,继承IDrawExt,实现了普通曲线对象Curve,波列曲线WAVE,变密度曲线VDL。继承ITrackDrawExt,实现了索引道,线性道,对数道。在系统扩展时,仅需要实现这2个接口,就可以扩展不同类型的道对象和曲线对象,方便了用户的扩展。

图6 测井视图类图

2.2.3 数据层

实时测井数据文件物理结构采用的是被广泛应用在地球物理系统中的HDF5[6]数据格式,其采用类似文件系统的方式对数据进行结构化存储,这种设计极大地提升数据读写效率,简化了数据处理逻辑。HDF5[7]不仅能够满足测井采集软件实时处理数据的要求,更支持跨平台的数据存储。

数据层主要分为3层:数据底层读写服务层、数据缓存层和上层数据接口层(见图7)。

图7 测井数据层结构图

数据底层读写服务层为上层提供数据读写的基本接口服务。包括了对仪器的管理,曲线对象的管理和读写,井场信息的读写。

数据缓存层主要是在软件读写数据时的缓存服务,减少读写数据文件的次数,从而提升程序执行效率。当数据访问者修改数据后,并不会立刻写入数据文件,因此需要把数据保存在内存中,并通知其他的数据访问者更新,重新读取数据。其他插件通过数据访问管理读取数据时,数据访问管理会先去查找有无数据缓存,如果有数据缓存则读取相应的数据并返回。如果没有数据缓存则直接读取底层数据并返回。外部调用保存接口时,数据访问管理会查找出相应的数据缓存,并通过底层数据接口写入文件。

上层读写接口使用了观察者模式实现数据的更新机制。使用数据接口层访问所关注的数据后,数据服务会把此访问者加入订阅列表,当访问者所关注的数据发生变化时,数据服务会直接推送数据到数据访问者。每个需要数据并且需要数据更新获得主动通知的地方,都需要通过数据访问中间层创建一个数据访问者。创建访问者的同时,会自动注册到数据访问中间层,当数据访问者访问的数据发生变化时,数据访问中间层会主动推送更新的数据给访问者。

3 应用效果

3.1 系统主要功能展示

系统主界面如图8所示,系统通过创建新的曲线对象扩展插件,可以实现新的曲线类型。

3.2 系统的跨平台应用

在Q-OSGi的基础上,设计并实现的测井采集实时监控软件可以轻易的移植到不同的平台中经过编译部署。目前已经移植到 Window系列、Linux系列和Mac OSX系列操作系统。

3.3 插件的动态管理功能验证

Q-OSGi实现了OSGi平台要求框架对插件的动态管理,使用start启动某个插件,stop停止某个插件的运行。Update功能可以从服务器端动态更新某个插件。

3.4 性能测试

从框架的启动时间对Q-OSGi进行了性能测试,测试所使用的计算机配置为Intel coreTM i3 CPU、主频2.20GHZ、2G内存。将 Q-OSGi与其他实现了OSGi规范的插件框架启动时间进行测试,其中Felix和Equniox都是基于java实现的。图9为Q-OSGi与Felix和Equniox主框架的启动时间对比测试图。

图8 软件主界面

图9 框架启动时间对比测试图

3.5 效果总结

在可扩展性方面,Q-OSGi框架提供的扩展点机制为系统提供了灵活的可扩展机制,扩展对象与系统能够使用简单机制进行整合与管理。在跨平台方面,除了数据底层之外,只需要一套代码编译不同平台的版本,便可轻松实现多个平台版本。在动态管理方面,Q-OSGi实现了对插件的动态管理,可以动态地进行更新和管理所有系统运行时加载的插件。在性能方面,对比其他基于java实现的框架而言启动速度较快。

4 结束语

(1)在详细分析OSGi规范的基础上,设计并实现了一个基于C++的跨平台OSGi框架实现方案Q-OSGi。在该框架的基础上,设计并实现测井采集实时监控软件。

(2)应用效果表明,采用OSGi技术能大幅提高软件的可扩展性和可维护性,对软件的开发效率和性能都有极大的提升。

[1]汤天知.EILog测井系统技术现状与发展思路[J].测井技术,2007,31(2):99-102.

[2]陈江浩,陈文辉,余卫东,等.ACME测井采集控制管理平台开发与应用[J].石油仪器,2010,24(5):77-79.

[3]OSGi Service Platform[R].4.3th ed.OSGi Alliance,2012.

[4]Wu Bo.Analysis and Applied Research of OSGi Framework[D].Chengdu:Chengdu University of Technology,2009.

[5]倪继利.Qt及Linux操作系统窗口设计[M].北京.电子工业出版社,2006.

[6]刘玉洁,杨忠东.MODIS遥感信息处理原理与算法[M].北京:科学出版社,2001.

[7]HDF5File Format Specification[EB/OL].http:∥hd.fncsa.uiuc.edu/HDF5/doc/H5.format.html.2013-8.

[8]张云涛,龚玲.Eclipse精要与高级开发技术[M].北京:电子工业出版社,2005.

猜你喜欢
跨平台插件视图
跨层级网络、跨架构、跨平台的数据共享交换关键技术研究与系统建设
一款游戏怎么挣到全平台的钱?
自编插件完善App Inventor与乐高机器人通信
跨平台APEX接口组件的设计与实现
5.3 视图与投影
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
基于jQUerY的自定义插件开发
基于Revit MEP的插件制作探讨