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