许美玲 河北金融学院
油田井下设备通信路由控制的优化
许美玲 河北金融学院
Struts框架下的油田井下路由通信系统中提出一种虚拟总线技术,它类似于物理总线,将不同功能和操作方式的井下设备进行分类,并将各类接口按照各自特点封装。它使井下设备与路由通信程序相匹配,并提供路由通信程序去访问硬件的机制;同时使框架路由通信系统上层的软件也能够通过路由通信程序操作井下设备完成特定的功能。具体优化过程中需要对配置文件进行分析,实现路由控制管理,对各种配置信息进行优化,按照初始化函数的要求,提升数据通信的基本功能。按照三层体系结构进行路由信息控制,达到了路由通信优化的目的。
Struts;井下设备;路由通信;优化
井下路由控制系统总体设计分为3层。
(1)F层。业务逻辑层,被P层调用,使用P层传递来的ActionForm进行相应的处理。根据页面传递过来的值进行判断分析,并发出对数据库操作层的命令,接收从数据库操作返回来的数据,然后将数据进行处理、编辑,传递给P层。
(2)P层。主要用来处理Httprequest,根据浏览器提交的数据,生成ActionForm,处理业务逻辑层返回来的数据最终显示给用户。
(3)D层。数据库操作层,主要负责对数据库的基本操作,如查询、添加、修改、删除等操作。
另外,三层结构均采用JAVA代码,前端的页面文件使用Sturts,同时配合Struts的标签库,可以方便地形成页面的各种样式,同时实现复杂的数据结构。
Struts框架下的油田井下路由通信系统中提出一种虚拟总线技术,它类似于物理总线,将不同功能和操作方式的井下设备进行分类,并将各类接口按照各自特点封装。它使井下设备与路由通信程序相匹配,并提供路由通信程序去访问硬件设备的机制;同时使框架路由通信系统上层的软件也能够通过路由通信程序操作井下设备完成特定的功能。
2.1 路由通信类型优化
由于不同的井下设备所执行的任务是不同的,Struts将井下设备路由通信程序分为如下几类:
(1)串行井下设备路由通信。用于控制串口井下设备,这些设备可以被配置作为Struts框架下路由通信系统的控制台,软件可以通过Open()、Read()、Write()、Ioctl()等函数访问此类设备。
(2)存储井下设备路由通信。用于控制磁盘、硬盘、Flash等井下设备。
(3)网络井下设备路由通信。用于井下设备路由通信网络。
(4)非易失性RAM路由通信。主要用于NVRAM的路由通信。
(5)定时器路由通信。主要用于定时和计数。
(6)DMA控制器路由通信。
(7)总线控制器路由通信。对不同总线的井下设备提供统一的接口,在Struts上下文中,CPU总线被称为PLB(Processor Local Bus)。很多井下设备都是直接连接到这个总线上的,当连接到其他总线类型的井下设备连接到PLB上时,就需要总线控制器路由通信的支持。
(8)USB路由通信。路由通信USB井下设备。
(9)中断控制器路由通信。
(10)多重功能路由通信。某些外围芯片包括多种逻辑,如多个时钟、多个DMA、一个或多个网口、一个USB、一个PCI总线等,此时需要用这种路由通信来最大化代码的重用率,同时降低系统内存的占用。
(11)远程处理器路由通信。用于控制子CPU系统。
(12)控制台路由通信。通过控制或检查键盘、鼠标和显示器等井下设备以图形化的方式显示系统信息。
(13)资源路由通信。当外设有可使用的资源时,这些资源可以分享给系统,供其他需要此资源的外设使用。此时,其他外设将通过资源路由通信程序查询到可使用资源。
(14)其他路由通信。不包括在上述几类路由通信程序中的路由通信,如A/D,D/A等井下设备的路由通信程序。
2.2 路由通信生命周期优化
从系统上电启动开始,基于Struts的井下设备路由通信程序初始化流程如下:
(1)前期系统启动加载阶段。此时系统的工作基于处理器的特定架构,CPU会跳转到上电后的第一条地址开始执行指令。此时的指令只是初始化内存控制器和CPU,然后开始执行Struts的初始化。
(2)SysHwInit()、PLB和发现硬件阶段。此时将执行SysHwInit()函数,这个函数由BSP提供,它将完成早期的CPU初始化工作,然后调用Hard WareInter FaceInit()函数。第一个被激活的路由通信是PLB(处理器本地总线)。它是一种路由通信控制总线,通过BSP提供的表来探测直接连接在其总线上面的井下设备。
(3)路由通信注册阶段。在调用Hard WareInter Face BusInit()函数期间,每个路由通信都会调用VxbDevRegister()函数来告知系统自己可用,并提供给系统相关的信息。
(4)基于Struts井下设备路由通信初始化第一阶段。在路由通信和井下设备关联成立之后,Struts立刻检测注册结构体,这个结构体在路由通信调用VxbDevRegister()时产生,它包含许多井下设备路由通信的初始化的入口地址。这些入口地址第一个便是指向DevInstanceInit()函数。此函数在路由通信初始化第一阶段被调用,此时虽然路由通信系统的许多服务还不可用,对初始化的井下设备还有种种的限制,但是井下设备将被第一次初始化,使井下设备达到一个稳定的状态(此时必须关闭中断)。
(5)内核启动阶段。完成了所有井下设备在Sturts系统注册之后,Hard WareInter Face BusInit()函数和Hard Ware Inter Face Init()函数返回,SysH-wInit()也将对非Struts井下设备路由通信初始化。当SysHwInit()函数完成时,Struts内核初始化也完成了。下一阶段对基于Struts井下设备路由通信的初始化将发生在SysHwInit2()函数里。
(6)基于Struts井下设备路由通信初始化第二阶段。在SysHwInit2()函数里,VxbDevInit()和DevInstanceInit2()函数将被调用。此时内核多种服务已经被初始化并且可以被路由通信所用,但是中间件(例如网络的MUX)的服务还不可用。
(7)基于Struts井下设备路由通信初始化第三阶段。在SysHwInit2()函数执行的最后,会产生一个任务,这个任务将完成基于Struts井下油田设备路由通信初始化的最后一个阶段。
2.3 路由通信注册顺序
如果某一井下设备路由通信程序是独立的不依赖于其他设备,设该路由通信注册的顺序无关紧要。但是在Struts里,路由通信程序的注册要遵循一定的顺序。
首先是对中断的管理。在基于Struts井下设备路由通信初始化第二阶段,某些设备路由通信程序在调用DevInstanceInit2()函数时,VxbIntConnect()函数将被调用。中断控制器必须能够在基于Struts路由通信初始化第一阶段的DevInstanceInit()函数里提供服务。
有时井下设备被探测到的顺序会影响总线控制器上设备的行为。在设备被探测和井下设备路由通信匹配阶段,总线控制器用来发现位于总线上面的设备。这表明,直到总线控制器路由通信与井下设备关联之后,总线上的设备才被发现。因此,在devInstanceInit()阶段,PLB上面的井下设备将会关联到设备路由通信,而其他总线上面的设备在系统启动的早期是不可用的。
2.4 井下设备的可视化配置
开发完成基于Struts架构的井下设备路由通信之后,并不能立刻让该路由通信井下设备在Wind River Worke Space 3.0的Struts 6.6开发的环境中可视化配置,此时还需要增加或修改相关的配置文件,才能让基于Struts架构的路由通信真正实现可视化配置。
通过对Strurts架构的设计与分析,以及对井下设备通信的启动服务过程分析,建立油田服务通信模型,对油田通信的各个组件进行路由选择,对各个执行的函数进行优化控制,提高了路由通信的功能,对选择最优通信模式具有重要的作用。具体优化过程中需要对配置文件进行分析,实现路由控制管理,对各种配置信息进行优化,按照初始化函数的要求,提升数据通信的基本功能。按照三层体系结构进行路由信息控制,达到了路由通信优化的目的。
(栏目主持关梅君)
10.3969/j.issn.1006-6896.2014.2.048