周文亞,李 川,劉立祥
(中科院軟件所綜合信息系統(tǒng)技術(shù)國(guó)家級(jí)重點(diǎn)實(shí)驗(yàn)室,北京100190)
組合導(dǎo)航解算軟件是綜合利用現(xiàn)有的GPS、GLONASS、COMPASS等幾大導(dǎo)航系統(tǒng)的優(yōu)勢(shì),進(jìn)行導(dǎo)航解算,實(shí)現(xiàn)高性能導(dǎo)航定位功能的軟件。對(duì)于組合導(dǎo)航解算軟件而言,一方面會(huì)涉及到諸如衛(wèi)星位置計(jì)算、用戶(hù)位置計(jì)算等包含大量矩陣運(yùn)算的導(dǎo)航解算算法;另一方面則需對(duì)導(dǎo)航數(shù)據(jù)進(jìn)行實(shí)時(shí)、高速的采集與處理,且要求人機(jī)界面友好、易于操作。這兩者中,前者適合用MATLAB程序?qū)崿F(xiàn),而后者則適合采用VC++、VB等高級(jí)語(yǔ)言來(lái)實(shí)現(xiàn)。因而,如果在組合導(dǎo)航解算軟件實(shí)現(xiàn)中,綜合采用MATLAB和高級(jí)語(yǔ)言,則可以充分發(fā)揮各種語(yǔ)言的優(yōu)勢(shì),大大提高軟件的性能及可用性。
MATLAB具有極高的編程效率,但它以解釋方式運(yùn)行,程序執(zhí)行效率低,界面開(kāi)發(fā)能力較差。隨著MAT LAB的廣泛使用,人們希望能把VC++、VB等高級(jí)語(yǔ)言和MAT LAB結(jié)合在一起進(jìn)行軟件開(kāi)發(fā),采用VC、VB等高級(jí)語(yǔ)言來(lái)執(zhí)行循環(huán)、判斷、硬件操作、與用戶(hù)交互等事務(wù),即完成應(yīng)用程序框架,而讓MAT LAB執(zhí)行計(jì)算、繪圖等操作,即完成程序的功能模塊[1]。
實(shí)現(xiàn)MAT LAB與其它高級(jí)語(yǔ)言集成有多種方案,其中基于MATLAB中間件技術(shù)具有許多獨(dú)特的優(yōu)點(diǎn),主要體現(xiàn)在:
1)適應(yīng)性廣,可用于 VC++、VB、Delphi等各種支持組件技術(shù)的高級(jí)語(yǔ)言;
2)方便靈活,既可以與MATLAB協(xié)同工作,也可以生成不依賴(lài)MATLAB環(huán)境的獨(dú)立程序;
3)不需進(jìn)行代碼轉(zhuǎn)換,使得編程風(fēng)格一致,可讀性好。
由于上述優(yōu)點(diǎn),該種方案得到了廣泛的應(yīng)用,組合導(dǎo)航解算軟件的實(shí)現(xiàn)也采用此種方案。
在軟件開(kāi)發(fā)方法的實(shí)踐過(guò)程中,面向?qū)ο蟪绦蛟O(shè)計(jì)方法成為軟件開(kāi)發(fā)的主流,但是面向?qū)ο缶幊痰能浖赜弥幌抻诔绦蛟创a級(jí)別,而且它一般要求對(duì)象程序和使用對(duì)象的客戶(hù)程序使用同樣的編程語(yǔ)言,這樣的代碼重用僅僅是一種較低層次的復(fù)用。為了克服這種局限性、更好地開(kāi)發(fā)和應(yīng)用能夠運(yùn)行在這種異構(gòu)平臺(tái)上的軟件,迫切需要一種基于標(biāo)準(zhǔn)的、獨(dú)立于計(jì)算機(jī)硬件以及操作系統(tǒng)的開(kāi)發(fā)和運(yùn)行環(huán)境,中間件技術(shù)就此應(yīng)運(yùn)而生。
目前,對(duì)于中間件,學(xué)術(shù)界并沒(méi)有給出很?chē)?yán)格的定義,但普遍接受IDC的定義,即:中間件是一種獨(dú)立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源[2]。事實(shí)上,中間件是介于應(yīng)用系統(tǒng)和系統(tǒng)軟件之間的一類(lèi)軟件,它使用系統(tǒng)軟件所提供的基礎(chǔ)服務(wù),銜接網(wǎng)絡(luò)上應(yīng)用系統(tǒng)的各個(gè)部分或不同的應(yīng)用,能夠達(dá)到資源共享、功能共享的目的。
在中間件市場(chǎng)化領(lǐng)域方面,很多公司或組織機(jī)構(gòu)已推出相關(guān)的產(chǎn)品或解決方案。目前,廣泛使用的中間件技術(shù)有:OMG組織的CORBA、Microsoft公司COM/DCOM、SUN公司的EJB等。
從軟件工程的角度看,基于中間件的分布式系統(tǒng)的開(kāi)發(fā)過(guò)程隸屬于基于組件的軟件工程(CBSD,Component Base Software Development)范疇。CBSD是指用集成可重用組件的方法來(lái)構(gòu)造應(yīng)用程序。它是標(biāo)準(zhǔn)定義的、分布式、模塊化結(jié)構(gòu),使應(yīng)用系統(tǒng)可分成幾個(gè)獨(dú)立部分開(kāi)發(fā),可用增量方式開(kāi)發(fā)。
與傳統(tǒng)的軟件設(shè)計(jì)相比,使用組件程序設(shè)計(jì)方法開(kāi)發(fā)軟件產(chǎn)品具有許多優(yōu)點(diǎn):
1)組件易替換
在龐大復(fù)雜的企業(yè)級(jí)系統(tǒng)應(yīng)用程序中,如果使用組件技術(shù)將程序分成一個(gè)個(gè)組件模塊,在進(jìn)行組件修改后版本升級(jí)時(shí),就可以只修改或替換相關(guān)的組件,而不影響其他眾多的程序組件。
2)適應(yīng)業(yè)務(wù)需求更改
軟件的業(yè)務(wù)需求通常不確定,在組件軟件中,可以將業(yè)務(wù)規(guī)則放在少數(shù)幾個(gè)組件中,當(dāng)業(yè)務(wù)規(guī)則發(fā)生變化時(shí),只需修改原組件或重建并發(fā)布新組件。更新是局部的,程序中出錯(cuò)的機(jī)會(huì)也就限制在這個(gè)局部,使程序的調(diào)試和測(cè)試更為方便。
3)可實(shí)現(xiàn)二進(jìn)制代碼重用
組件之間可以在二進(jìn)制級(jí)別上進(jìn)行繼承和重用,這樣一來(lái)只需一次編寫(xiě)代碼而多處應(yīng)用。
4)有助于并行開(kāi)發(fā)
一個(gè)大應(yīng)用系統(tǒng)由許多組件組成,這些組件的實(shí)現(xiàn)可以并列進(jìn)行,只要接口設(shè)計(jì)正確,則建立這些組件后它們將能順利配合。
MATLAB對(duì)中間件技術(shù)的支持采用了基于COM組件技術(shù)實(shí)現(xiàn)的方式。MATLAB 6.5提供了可以將m函數(shù)編譯為COM組件的工具COM Builder,使用這個(gè)工具可以方便地制作出COM組件,以供其他支持 COM 的編程語(yǔ)言調(diào)用,實(shí)現(xiàn)MATLAB和其他編程語(yǔ)言的整合。
組件對(duì)象模型(Component Object Model,COM)是Microsoft公司創(chuàng)建的一種二進(jìn)制的網(wǎng)絡(luò)標(biāo)準(zhǔn),遵循這一標(biāo)準(zhǔn)開(kāi)發(fā)的組件之間可以跨進(jìn)程、跨機(jī)器、跨語(yǔ)言甚至跨平臺(tái)進(jìn)行通信。因此,只要組件接口標(biāo)準(zhǔn)化,開(kāi)發(fā)人員可以從某個(gè)組件庫(kù)中取出所需的組件并將其快速地組裝到一起以構(gòu)成所需的應(yīng)用。組件模型能夠解決網(wǎng)絡(luò)分布計(jì)算環(huán)境中多種異構(gòu)數(shù)據(jù)資源的互聯(lián)共享問(wèn)題,實(shí)現(xiàn)多種應(yīng)用軟件的協(xié)同工作。此外,利用組件的重構(gòu)性還可大幅地提高應(yīng)用軟件系統(tǒng)的開(kāi)發(fā)效率,增強(qiáng)系統(tǒng)的穩(wěn)定性,使系統(tǒng)的維護(hù)管理工作更為簡(jiǎn)易[3]。
使用MATLAB COM Builder創(chuàng)建COM組件操作程序?yàn)?
1)啟動(dòng)COM Builder,創(chuàng)建一個(gè)工程,設(shè)置相關(guān)屬性;
2)增加所需的功能,添加相應(yīng)的M文件和MEX文件;
3)編譯創(chuàng)建組件;
4)包裝注冊(cè)發(fā)布組件。
全球衛(wèi)星導(dǎo)航定位系統(tǒng)能為海、陸、空用戶(hù)提供實(shí)時(shí)、連續(xù)、全天候的精確三維位置、速度及時(shí)間等導(dǎo)航定位信息。目前,世界上存在兩大全球衛(wèi)星導(dǎo)航定位系統(tǒng),美國(guó)GPS系統(tǒng)和GLONASS系統(tǒng)。正在設(shè)計(jì)建設(shè)階段的有歐洲的Galileo系統(tǒng)和中國(guó)的COMPASS系統(tǒng)。由于全球衛(wèi)星導(dǎo)航系統(tǒng)具有全球性、全天候、連續(xù)性和實(shí)時(shí)性,提供導(dǎo)航、定位和定時(shí)服務(wù)等特點(diǎn),因此,在信息、交通、環(huán)境監(jiān)測(cè)等建設(shè)方面具有其他手段無(wú)法替代的重要作用。如果做到多種全球衛(wèi)星定位系統(tǒng)互相共用,既可以提高定位的準(zhǔn)確度,又可以提高覆蓋的可靠性,另外最重要的一點(diǎn)由于可見(jiàn)衛(wèi)星數(shù)量大幅度增加,可以大大提高整個(gè)衛(wèi)星定位系統(tǒng)的完善性監(jiān)測(cè)性能,保證導(dǎo)航定位結(jié)果的可靠性,提高衛(wèi)星導(dǎo)航定位應(yīng)用的安全性。
組合導(dǎo)航解算軟件即是利用GPS、GLONASS、COMPASS三大導(dǎo)航系統(tǒng)之間的相同點(diǎn),將三大系統(tǒng)兼容利用,充分利用多個(gè)系統(tǒng)共用的優(yōu)勢(shì),提供高性能的導(dǎo)航定位服務(wù)。軟件功能需求采用UM L,如圖1所示:
圖1 組合導(dǎo)航解算軟件用例圖
圖1中,用戶(hù)直接參與用例有四個(gè):用戶(hù)位置解算、用戶(hù)速度解算、導(dǎo)航數(shù)據(jù)分析和導(dǎo)航模式設(shè)置。其中導(dǎo)航模式設(shè)置是對(duì)組合導(dǎo)航的工作方式進(jìn)行設(shè)置,如單系統(tǒng)導(dǎo)航方式、多系統(tǒng)組合導(dǎo)航方式等。導(dǎo)航數(shù)據(jù)分析是對(duì)導(dǎo)航數(shù)據(jù)進(jìn)行分析處理,生成曲線或統(tǒng)計(jì)結(jié)果。用戶(hù)位置解算和用戶(hù)速度解算用例分別輸出用戶(hù)實(shí)時(shí)的位置及速度信息,用戶(hù)位置解算用例的實(shí)現(xiàn)需要使用用例衛(wèi)星位置計(jì)算和定位解算衛(wèi)星選擇,前者包含了GPS衛(wèi)星位置計(jì)算、GLONASS衛(wèi)星位置計(jì)算和 COMPASS衛(wèi)星位置計(jì)算三個(gè)用例,后者則是根據(jù)衛(wèi)星位置解算結(jié)果選擇合適的定位解算衛(wèi)星。衛(wèi)星位置解算用例還涉及到了自主完善性監(jiān)測(cè)、導(dǎo)航解算參數(shù)提取、接收機(jī)導(dǎo)航電文接收等用例,圖中給出了上述用例間關(guān)系。
組合導(dǎo)航解算軟件主要包括用戶(hù)界面模塊、數(shù)據(jù)采集及處理模塊、導(dǎo)航解算中間件、數(shù)據(jù)分析模塊等。軟件的工作流程采用UML序列圖表示如圖2所示。
圖2顯示了組合導(dǎo)航解算軟件各模塊的交互,其中數(shù)據(jù)采集處理模塊從接收機(jī)獲取原始導(dǎo)航電文數(shù)據(jù),解析后得到衛(wèi)星星歷、偽距等導(dǎo)航解算所必需的各種參數(shù),將這些參數(shù)傳給導(dǎo)航解算中間件,導(dǎo)航解算中間件基于MAT LAB程序?qū)崿F(xiàn),完成衛(wèi)星位置計(jì)算、定位導(dǎo)航衛(wèi)星選擇、自主完善性監(jiān)測(cè)、用戶(hù)位置計(jì)算、用戶(hù)速度計(jì)算等導(dǎo)航核心解算算法,并將算法的輸出傳回到數(shù)據(jù)采集處理模塊,并顯示在界面。用戶(hù)還可以通過(guò)用戶(hù)界面調(diào)用數(shù)據(jù)分析模塊將解算后的導(dǎo)航數(shù)據(jù)進(jìn)行分析,得到分析曲線及統(tǒng)計(jì)結(jié)果。
其中,導(dǎo)航解算算法的實(shí)現(xiàn)采用了基于MATLAB中間件技術(shù),通過(guò)中間件NAVCOMP將核心算法進(jìn)行封裝,并提供接口供軟件其它模塊調(diào)用。中間件NAVCOMP主要接口采用UML表示,如圖3所示。
圖3顯示了導(dǎo)航解算中間件NAVCOMP五個(gè)主要接口,其中ISatPosCalc接口用于提供衛(wèi)星位置計(jì)算服務(wù),INavSatSel接口提供最優(yōu)化導(dǎo)航衛(wèi)星選定服務(wù),IRAIM接口提供自主完善性監(jiān)測(cè)服務(wù),IUserPosCalc接口和 IUserVelCalc接口分別提供用戶(hù)位置服務(wù)和用戶(hù)速度計(jì)算服務(wù)。
由于在導(dǎo)航解算算法的實(shí)現(xiàn)上采用了基于MAT LAB中間件技術(shù),充分發(fā)揮了MAT LAB數(shù)值計(jì)算的優(yōu)勢(shì),極大地提高了軟件開(kāi)發(fā)的效率,并使軟件具有可重用性。軟件運(yùn)行界面截圖如圖4所示:
圖4 組合導(dǎo)航解算軟件運(yùn)行界面
在組合導(dǎo)航解算軟件設(shè)計(jì)中采用基于MATLAB中間件技術(shù),可以充分利用MAT LAB強(qiáng)大的科學(xué)計(jì)算功能,結(jié)合高級(jí)語(yǔ)言在界面設(shè)計(jì)及控制邏輯方面的優(yōu)勢(shì),能夠降低軟件開(kāi)發(fā)的難度,縮短了研發(fā)周期,且能提高軟件的可重用性。
[1]葉青松.應(yīng)用組件技術(shù)實(shí)現(xiàn)MAT LAB與其它高級(jí)語(yǔ)言的混合編程[J].常州信息職業(yè)技術(shù)學(xué)院學(xué)報(bào),2004,3(1):30-33.
[2]周園春,李 淼,張 健,等.中間件技術(shù)綜述[J].計(jì)算機(jī)工程與應(yīng)用,2002(15):80-82.
[3]Dale Rogerson著,楊秀章譯.COM 技術(shù)內(nèi)幕[M].清華大學(xué)出版社,1999.
[4]Ashish S,Aamod S,Roy H.Campbell Quarterware for Middleware[C]∥Proceedings of the 18th IEEE International Conference on Distributed Computing System,Amsterdam,1998:192-201.
[5]盧 青,岳春生.基于中間件技術(shù)的嵌入式導(dǎo)航終端軟件設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2008,273(10):109-111.