李宇宏,李 超
(1.中國電子科技集團(tuán)公司第五十四研究所,石家莊 050081;2.衛(wèi)星導(dǎo)航系統(tǒng)與裝備技術(shù)國家重點實驗室,石家莊 050081;3.北京衛(wèi)星導(dǎo)航中心,北京 100094)
衛(wèi)星導(dǎo)航信號模擬器是一種高精度的標(biāo)準(zhǔn)信號源,可以為導(dǎo)航接收機(jī)的研制開發(fā)、測試提供仿真環(huán)境。其中一個重要仿真項是導(dǎo)航接收機(jī)的天線方向圖仿真。所謂天線方向圖,是指在離天線一定距離處,輻射場的相對場強(qiáng)(歸一化模值)隨方向變化的圖形,天線方向圖是衡量天線性能的重要圖形,可以從天線方向圖中觀察到天線的各項參數(shù)。設(shè)計并實現(xiàn)接收機(jī)天線方向圖軟件可以提供對天線方向圖的簡單建模,從而模擬真實的接收機(jī)天線,提高衛(wèi)星導(dǎo)航信號模擬器的真實環(huán)境仿真能力。本文結(jié)合業(yè)務(wù)需求,運(yùn)用面向?qū)ο笏枷胪瓿闪塑浖_發(fā),并在軟件設(shè)計中引入設(shè)計模式,通過測試驗證軟件可行。
天線方向圖軟件采用所見即所得的設(shè)計理念,分為命令區(qū)域、編輯區(qū)域、二維可視化區(qū)域、三維可視化區(qū)域。在命令區(qū)域,可通過下拉菜單、工具欄也可以進(jìn)行上鏡像、下鏡像、左鏡像、右鏡像操作;在編輯區(qū)域,用戶可以對視窗內(nèi)的數(shù)據(jù)進(jìn)行編輯,可以進(jìn)行單點改變、行改變、列該變、矩形改變;二維可視化區(qū)域用于顯示天線方向圖的平面效果;三維可視化區(qū)域顯示天線在三維世界中的狀態(tài)。如圖1所示:
圖 軟件界面
天線方向圖軟件涉及設(shè)計模式、OpenGL、Qt 等技術(shù),本文主要討論該軟件和設(shè)計模式相關(guān)的兩個部分:多界面的顯示同步和用戶操作。
我們在對天線方向圖的任何編輯操作,如點操作、行操作、鏡像操作,同時要求在二維可視化區(qū)域、三維可視化區(qū)域、編輯區(qū)域同時得到顯示。這正是觀察者模式能夠解決的問題,這一模式中的關(guān)鍵對象是目標(biāo)和觀察者。一個目標(biāo)可以有任意數(shù)目的依賴它的觀察者。一旦目標(biāo)的狀態(tài)發(fā)生改變,所有的觀察者都得到通知。作為對這個通知的響應(yīng),每個觀察者都將查詢目標(biāo)以使其狀態(tài)與目標(biāo)的狀態(tài)同步。
天線方向圖的UML 靜態(tài)結(jié)構(gòu)圖,如圖2 所示。
圖2 觀察者模式在軟件中應(yīng)用
和觀察者模式有些差異的是,觀察者接口有兩個接口可以獲取到當(dāng)前狀態(tài)更新,一個是數(shù)據(jù)本身發(fā)生改變,另一個是觀察區(qū)域發(fā)生改變。
由于天線方向圖的編輯比較復(fù)雜,在軟件使用過程中,進(jìn)行了錯誤的操作也是不可避免的,這就要求軟件支持命令的撤銷、重做。這是典型的命令模式需求:將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進(jìn)行參數(shù)化;對請求排隊或記錄請求日志,以及支持可撤消的操作。在交互應(yīng)用中撤銷和重做能力是很重要的。為了撤銷和重做一個命令,我們在AbstractCommand 接口中增加 unexecute 操作。unexecute 操作是execute 的逆操作,它使用上一次execute 操作所保存的取消信息來消除execute 操作的影響。如圖3所示:
圖3 命令模式在軟件中應(yīng)用
軟件結(jié)合使用備忘錄模式來保存信息,在execute 中保存,在unexecute 中恢復(fù)。由于天線方向圖數(shù)據(jù)量不大,生成備忘錄時拷貝并存儲小量的信息,用戶不會非常頻繁地創(chuàng)建備忘錄和恢復(fù)原發(fā)器狀態(tài),所以使用備忘錄模式是合理的。這里的AbstractCommand 本身是備忘錄模式的Caretaker,負(fù)責(zé)保存好備忘錄,不能對備忘錄的內(nèi)容進(jìn)行操作或檢查。而AntennaData 則是Originator,用于創(chuàng)建一個備忘錄,記錄當(dāng)前時刻它的內(nèi)部狀態(tài)。AntennaMemento 是備忘錄本身。如圖4所示:
圖4 備忘錄模式在軟件中應(yīng)用
到此,每一個AbstractCommand 的unexecute 直接調(diào)用設(shè)置備忘錄即可。
由于每一個AbstractCommand 在execute 操作中必須先創(chuàng)建備忘錄,再開始執(zhí)行,這里可以使用模板模式。模板模式定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。如下所示,每一個AbstractCommand 本身的execute 操作分為兩步分,第一步創(chuàng)建備忘錄,第二部真正執(zhí)行操作,這一步由子類實現(xiàn)。而每一個AbstractCommand 的unexcute 則直接執(zhí)行恢復(fù)備忘錄。
本文運(yùn)用面向?qū)ο笏枷朐O(shè)計了一款天線方向圖軟件,在實現(xiàn)基本功能的基礎(chǔ)上,運(yùn)用設(shè)計模式實現(xiàn)了低耦合、高內(nèi)聚的軟件設(shè)計。研究結(jié)果表明:該軟件可以模擬用戶機(jī)天線方向圖、衛(wèi)星天線方向圖,可滿足衛(wèi)星導(dǎo)航模擬器軟件的使用需求,極大極高了該軟件的真實環(huán)境仿真能力,具有良好的應(yīng)用前景。