付霖 劉俊陽 龍
【 摘 要 】 由于不同型號硬件平臺和軟件平臺的多樣性,跨型號大規(guī)模融合應(yīng)用系統(tǒng)通常要求在擁有多種軟硬件平臺(異構(gòu)平臺)的分布式環(huán)境下運行。借助中間件(Middleware)技術(shù)改進軟件重用形式,提高軟件重用程度,以實現(xiàn)支持分布式應(yīng)用有效開發(fā)、部署、運行和管理的目的。本文在對現(xiàn)有火箭測發(fā)控系統(tǒng)軟件的子系統(tǒng)功能聚類和程序架構(gòu)分析基礎(chǔ)上,開發(fā)基于中間件模型的通用火箭測發(fā)控系統(tǒng)軟件。
【 關(guān)鍵詞 】 火箭;測發(fā)控軟件;中間件技術(shù)
1 引言
運載火箭的地面測發(fā)控系統(tǒng)軟件由多個應(yīng)用軟件組成,如主控軟件、虛擬顯示軟件以及數(shù)據(jù)處理軟件等。它的主要功能是實現(xiàn)流程控制與數(shù)據(jù)判讀自動化,控制后端PLC、地面測試計算機等完成測試發(fā)控流程及數(shù)據(jù)采集和判讀,并將測試數(shù)據(jù)及判讀結(jié)果送到數(shù)據(jù)處理計算機進行數(shù)據(jù)顯示,轉(zhuǎn)發(fā)總體網(wǎng)、遙測、動力等系統(tǒng)的控制命令與回令。
利用中間件技術(shù)主要在兩個方面改進現(xiàn)有測發(fā)控系統(tǒng)軟件的開發(fā)模式。
一是實現(xiàn)跨平臺代碼的移植和框架級的重用。利用處于中間層次的軟件屏蔽軟硬件平臺底層的差異性,利用中間件技術(shù)開發(fā)的控制器可以實現(xiàn)不同硬件平臺不同操作系統(tǒng)之上進程或者線程級別遠程對象或過程(過程:不存在操作系統(tǒng)情況下,實現(xiàn)某一功能的代碼)的統(tǒng)一管理和調(diào)度。
二是異構(gòu)網(wǎng)絡(luò)的數(shù)據(jù)傳輸。當(dāng)前運載火箭地面測發(fā)控軟件的通訊協(xié)議眾多,有基于以太網(wǎng)、CAN總線、1553B總線、422總線、485總線等,且隨著通信技術(shù)的發(fā)展,型號軟件間接口有進一步增加的趨勢。當(dāng)前,測發(fā)控軟件中地面及彈上軟件接口實現(xiàn)方式均采用硬編碼,通訊雙方協(xié)調(diào)通訊協(xié)議,定義傳輸?shù)臄?shù)據(jù)格式,形成接口文件作為雙方設(shè)計的輸入文件。在型號研制初樣和試樣階段大量的研制資源投入在接口的調(diào)試,并且由于接口協(xié)議理解不一致易造成進度延期。利用中間件技術(shù)對型號中常用的通信協(xié)議進行封裝可以解決硬編碼的效率問題和質(zhì)量問題。
本文在中間件技術(shù)的研究基礎(chǔ)上,成功地將其應(yīng)用于某運載型號測發(fā)控軟件再工程改造過程中,通過改造原有軟件系統(tǒng),減少了程序模型間的耦合度,提高了軟件構(gòu)件化程度,為大規(guī)模信息融合應(yīng)用系統(tǒng)的開發(fā)奠定了基礎(chǔ)。
2 測發(fā)控軟件的中間件模型
軟件架構(gòu)描述的對象是直接構(gòu)成系統(tǒng)的抽象組件,各個組件之間的連接和組件之間的通訊關(guān)系。參考型號歸檔的任務(wù)書、需求以及詳細設(shè)計等文檔,得出軟件需實現(xiàn)對象的抽象功能劃分,及各個軟件運行剖面的信息流流向。
以圖1為例,即PLC通信協(xié)議解析部分的系統(tǒng)架構(gòu)恢復(fù)流程,其旨在確定MODBUS協(xié)議解析部分的結(jié)構(gòu)部件、模塊和對象以及他們之間的關(guān)聯(lián)。在實際工作中采用軟件聚類(Software Clustering)和程序分片(Program Slicing)的方法,其他功能類的模型抽象過程與之類似。
在將PLC子系統(tǒng)劃分為模塊的聚類過程中,利用數(shù)據(jù)流在流經(jīng)程序模塊后其值的改變情況,將類似的模塊或者部件歸類。具體可劃分為ModBus數(shù)據(jù)容錯處理模塊、ModBus數(shù)據(jù)預(yù)處理模塊、ModBus協(xié)議解析模塊等。
由于PLC子系統(tǒng)中的ModBus協(xié)議解析模塊較為重要,將原軟件中已聚類出的協(xié)議解析模塊針對ModBus消息功能碼的不同再次進行聚類,拆分出讀點組件、寫點組件、讀寄存器組件、寫寄存器組件等。
為了獲取到系統(tǒng)的整體視圖,需確定組件之間的依賴關(guān)系。采用軟件分片的方法,以系統(tǒng)的調(diào)用圖(Call Graph)作為面向過程代碼的高層抽象,將程序切割為關(guān)注點集中于系統(tǒng)局部的分片,每個分片是功能上或結(jié)構(gòu)上的獨立模塊,以程序語句層為主,給出變量相關(guān)的程序部分,以調(diào)用圖通過模塊和模塊之間的調(diào)用關(guān)系來表達整個系統(tǒng)。
通過對當(dāng)前火箭測發(fā)控軟件的文檔和程序代碼恢復(fù)出的軟件架構(gòu)進行歸類,將得出的組件按照中間件C/S三層架構(gòu)模式進行劃分。具體將測發(fā)控軟件的測試流程劃分為三層C/S架構(gòu),主要由主流程部分、中間件層部分、重用控制器部分三部分。
主流程部分主要實現(xiàn)流程性的功能,響應(yīng)用戶及系統(tǒng)消息完成相應(yīng)測試任務(wù),為Client。當(dāng)Client運行到某一流程步,則向Server重用控制器部分提出請求。Server部分的每個控制器對象負責(zé)一類設(shè)備的全部功能操作,如實現(xiàn)執(zhí)行與該設(shè)備相關(guān)的測試步序,顯示、存儲、判讀測試數(shù)據(jù),設(shè)備切換等功能。
中間件層可以分為兩個部分:一部分是網(wǎng)絡(luò)路由服務(wù),通過該網(wǎng)絡(luò)路由服務(wù)可以組織成復(fù)雜的通信網(wǎng)絡(luò)架構(gòu);另一部分是應(yīng)用服務(wù),應(yīng)用服務(wù)主要實現(xiàn)業(yè)務(wù)層的相關(guān)操作,即相關(guān)業(yè)務(wù)邏輯流程可以在應(yīng)用層進行組合,完成不同要求的業(yè)務(wù)流。
主流程處于最頂層,通過響應(yīng)用戶及系統(tǒng)消息完成相應(yīng)功能。主要功能包括:測試流程的加載與執(zhí)行,管理測試設(shè)備連接,數(shù)據(jù)接收、顯示等。
確定測試流程分為測試類、測試項、測試分組、測試步序四個級別,測試步序為測試流程的基本單元。測試分組由多個測試步序組成,如分組“加電”是測試中可以從測試項目樹中勾選的最小單元,在測試出現(xiàn)問題需重新測試時,可根據(jù)當(dāng)前狀態(tài)跳過某些分組;測試項可以由多個測試分組組成,也可以直接由測試步序組成,包含業(yè)務(wù)上完整測試項目的全部操作;測試類是對測試項劃分,如“總檢查”、“分系統(tǒng)測試”等。
優(yōu)化之后的主流程部分測試流程為程序啟動后首先進行初始化操作,順序進行相應(yīng)的界面初始化、連接初始化、控制器初始化等。流程框架部分測試流程如圖2所示,測試開始時,用戶需在測試項目樹中選擇測試項或分組,程序從本地數(shù)據(jù)庫中獲取全部被選測試步序的參數(shù)信息,然后按順序存入執(zhí)行序列列表,并根據(jù)測試步序的類型調(diào)用控制器服務(wù)器端的函數(shù)完成與相關(guān)測試設(shè)備建立連接并對被測設(shè)備進行初始化的工作,其中間件ModBus客戶端初始化功能實現(xiàn)如下:
1)調(diào)用對象請求代理ORB初始化函數(shù),獲取ORBroot引用;endprint
2)調(diào)用resolve_Naming函數(shù)獲取已在服務(wù)端運行的命名服務(wù)的引用;
3)利用命名服務(wù)引用,查找命名服務(wù)中的初始化對象指針,實現(xiàn)初始化的遠程對象的本地調(diào)用。
控制器模塊主要實現(xiàn)運載火箭地面測發(fā)控系統(tǒng)軟件中主控計算機控制的各個設(shè)備所需完成的測發(fā)控功能。利用系統(tǒng)架構(gòu)恢復(fù)方法恢復(fù)出VXI數(shù)據(jù)采集、PLC通信協(xié)議解析、NPORT、三軸轉(zhuǎn)臺、速率轉(zhuǎn)臺等軟件功能模塊,將其描述為控制器。
3 中間件層提供的服務(wù)
分布計算中間件模塊為火箭測發(fā)控系統(tǒng)軟件的研制提供了一個開發(fā)和運行的軟件平臺。結(jié)合型號任務(wù)的需要,來滿足協(xié)議的封裝和安全可靠性的要求,提供了底層通信及分布式應(yīng)用開發(fā)的支持服務(wù)。
為盡量不改變原有程序架構(gòu),軟件針對新需求的改造過程,如圖3所示,采用代理的各種方式實現(xiàn)。利用編譯器編譯完成的客戶端stub和服務(wù)端skeleton,提供客戶端和服務(wù)器端方法的請求和響應(yīng)。某遠程對象的平臺無關(guān)代碼經(jīng)過編譯器編譯為具體平臺的客戶端stub和服務(wù)端的skeleton??蛻魋tub是遠程對象的本地替身,接受調(diào)用請求,對程序員透明,可以讓遠程對象若本地對象一樣調(diào)用。服務(wù)方的skeleton主要功能是在服務(wù)端定位遠程對象之上的方法。在工程開發(fā)中采用的VS2010編譯器,將客戶端的stub和客戶端的服務(wù)請求流程性代碼進行聯(lián)合編譯成客戶端的應(yīng)用。而在服務(wù)器端不僅需要skeleton和啟動服務(wù)使能服務(wù)流程性代碼,還需要將服務(wù)器端的服務(wù)實現(xiàn)代碼加入,進行聯(lián)合編譯成服務(wù)器端應(yīng)用。通過此種方式開發(fā)的客戶端和服務(wù)器端應(yīng)用可實現(xiàn)遠程對象的本地調(diào)用過程。
為實現(xiàn)遠程對象本地調(diào)用的目的,需要對底層通信進行抽象封裝以解決分布式和異構(gòu)性的問題。利用此服務(wù),型號軟件開發(fā)人員不需要再采用重復(fù)的易出錯的socket編程,只需要調(diào)用簡單易用的軟件接口,將源端地址和目的端地址作為參數(shù)傳遞即可實現(xiàn)設(shè)備之間的數(shù)據(jù)傳輸。
具體工作原理,如圖5所示,ModBus控制器的對象引用是分布環(huán)境下ModBus控制器對象的抽象,用來唯一標識ModBus控制器對象。對象引用包含定位對象所在機器的信息(IP地址),在該機器上定位對象所在進程信息(端口號),在該進程中定位目標對象的信息(Object Key)。對象引用內(nèi)部結(jié)構(gòu)對開發(fā)人員透明,開發(fā)人員拿到一個對象引用后調(diào)用ptr_to_object方法,即可實例化出遠程對象的本地客戶端stub。
本地調(diào)用是由編譯器透明地將控制流(即調(diào)用對象方法的指令)直接翻譯為機器代碼。遠程調(diào)用由于需要通過網(wǎng)絡(luò),而網(wǎng)絡(luò)只能傳遞數(shù)據(jù)流(即消息),因此,調(diào)用過程是一個“控制流→數(shù)據(jù)流→控制流”的過程?!翱刂屏鳌鷶?shù)據(jù)流”過程,將對象方法調(diào)用的指令編碼成網(wǎng)絡(luò)消息并發(fā)送出去?!皵?shù)據(jù)流→控制流”,接收網(wǎng)絡(luò)消息并解碼還原成對象方法調(diào)用的指令。GIOP(Gerneral Inter-ORB Protocol)對當(dāng)前運載火箭地面測發(fā)控軟件的通訊協(xié)議進行了封裝,定義了對象請求發(fā)送和接收的各種消息的格式及其含義。
對象實現(xiàn)是程序設(shè)計語言級別的實體,用來為一個或多個遠程對象的請求提供實現(xiàn)。存在于服務(wù)方進程空間中,客戶方發(fā)出的對一個Object的遠程調(diào)用將由對象請求傳遞到服務(wù)進程中。服務(wù)方經(jīng)過對象適配機制,查找維護的“對象ID-對象實現(xiàn)指針”映射關(guān)系表,找到對象實現(xiàn)的指針。通過對象實現(xiàn)的指針,利用skeleton找到對象之上的方法。
4 結(jié)束語
基于中間件的火箭測發(fā)控系統(tǒng)軟件再工程技術(shù)采用了異構(gòu)網(wǎng)絡(luò)分布環(huán)境下的軟件系統(tǒng)重構(gòu)技術(shù)分析和設(shè)計方法。在軟件產(chǎn)品化成果重用框架的基礎(chǔ)之上進行跨平臺層面的再加工,最終實現(xiàn)運載火箭地面測發(fā)控系統(tǒng)網(wǎng)絡(luò)再開發(fā)的軟件復(fù)用。在方便調(diào)試的同時,也提高了程序的可靠性?;谥虚g件的火箭測發(fā)控系統(tǒng)軟件是軟件產(chǎn)品化的進一步延伸,并最大程度上考慮到運載火箭測試工程的特點,運行過程可靠,結(jié)果處理正常,為下階段型號軟件研制和維護工作打下了基礎(chǔ)。
參考文獻
[1] Weiser,M.1984."Program Slicing" IEEE Transaction on Software Engineer 10,4(July):352-357.
[2] Object Management Group, CORBA Component Model Joint Revised Submission, 1999..
[3] 吳泉源.網(wǎng)絡(luò)計算中間件[J].軟件學(xué)報,2013年1期.
[4] 王厚軍.關(guān)于軍用測試系統(tǒng)標準化和技術(shù)體系問題的研究與探討[C].2007年國防科技工業(yè)試驗與測試技術(shù)高層論壇,2007:50-57.
[5] 張娟,黃開臣.綜合自動測試系統(tǒng)研究[J].測控技術(shù),2011.30(10):30-35.
作者簡介:
付霖(1988-),男,山東人,碩士研究生,主要從事分布式計算及軟件復(fù)用方面研究。
劉俊陽(1970-),男,研究員,主要從事軟件設(shè)計與測試技術(shù)研究。
肖龍(1983-),男,工程師,主要從事支撐環(huán)境和軟件測試。endprint