許美玲 河北金融學院
油田井下設備通信路由控制的優化
許美玲 河北金融學院
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