合肥電子工程學(xué)院402教研室 徐 云
仿真模擬由于其靈活方便和投入少等特性,使得在裝備生產(chǎn)、訓(xùn)練過程中得到了廣泛的使用。在通信對抗裝備仿真中,仿真模型設(shè)計(jì)直接關(guān)系到仿真結(jié)果的科學(xué)性和有效性。
使用面向?qū)ο蠼<夹g(shù)建立的仿真模型是對客觀世界活動的自然刻劃,其中的對象是對客觀世界中有形或無形實(shí)體的直接模擬。采用面向?qū)ο筌浖_發(fā)技術(shù),能夠減小問題域與解題域之間的語義間隙,使得軟件開發(fā)過程顯得比較自然,從而提高軟件生產(chǎn)率。
并發(fā)是對象模型的一種潛在特性,為在仿真模型中提供對象的并發(fā)行為能力(如多個裝備或系統(tǒng)裝備中同時發(fā)生的并發(fā)行為),必須在面向?qū)ο竽P椭刑峁┎l(fā)描述機(jī)制,使其能夠描述裝備中發(fā)生的并發(fā)行為。而傳統(tǒng)的面向?qū)ο缶幊陶Z言只提供了描述程序順序執(zhí)行的能力,如何在對象中引入并發(fā)機(jī)制,使之方便地描述并發(fā)系統(tǒng),這些是很多人都在研究的問題。文獻(xiàn)[4]設(shè)計(jì)了一種基于事件驅(qū)動的并發(fā)模型,該模型通過同步或異步消息實(shí)現(xiàn)并發(fā)行為的驅(qū)動執(zhí)行,當(dāng)對象收到消息,根據(jù)消息種類的不同被動地作出相應(yīng)的處理,整個處理由各種不同消息驅(qū)動,而對象只是被動執(zhí)行請求的操作,這與面向?qū)ο罄砟畈环⑶抑荒芩闶菍鹘y(tǒng)面向過程編程的改進(jìn)。[5]介紹的多線程模型通過線程來模擬對象的并發(fā)行為,較好的切合了面向?qū)ο蟮脑O(shè)計(jì)理念。然而,很多研究表明:此種方設(shè)計(jì)時必須考慮并發(fā)與面向?qū)ο蟮囊恍┨匦韵嗷ジ蓴_,如繼承異常等問題[1]。
鑒于此,本文采用面向?qū)ο蟮慕<夹g(shù),[4-5]中介紹的各種并發(fā)技術(shù),提出一種使用事件/消息與多線程的混合并發(fā)模型,并應(yīng)用到通信對抗裝備的并發(fā)仿真模型設(shè)計(jì)中。
通信對抗裝備種類繁多,體系復(fù)雜,裝備參數(shù)眾多、功能繁雜,使得仿真模型設(shè)計(jì)難度較大,特別是設(shè)計(jì)具有并發(fā)行為的仿真模型面臨眾多困難。
現(xiàn)代通信對抗裝備已經(jīng)由早期的單機(jī)向系統(tǒng)發(fā)展,但是從功能上來說,仍然可以將其劃分為3大類:通信對抗偵察裝備、通信對抗測向裝備、通信對抗干擾裝備,任何復(fù)雜的通信對抗系統(tǒng)都是由這三種基本的裝備組合而成,這種模塊化、積木化的發(fā)展方式也正是目前裝備發(fā)展的趨勢[2]。另外上述三大類裝備還可以進(jìn)一步劃分:偵察裝備可以按其實(shí)現(xiàn)的功能劃分全景搜索接收設(shè)備、監(jiān)測偵聽分析接收設(shè)備、信道化接收設(shè)備等;測向裝備可以按測向原理劃分為振幅法測向設(shè)備、相位法測向設(shè)備等;干擾裝備按照干擾帶寬劃分為窄帶瞄準(zhǔn)式干擾設(shè)備、寬帶攔阻式干擾設(shè)備等[2]。在模型設(shè)計(jì)時需要重點(diǎn)考慮兩個問題:模型的層次劃分與模型參數(shù)、行為分配。
(1)模型的層次劃分
模型的層次劃分是指對所描述的對象按照“父—子”關(guān)系劃分為不同的層次,子模型可以自動繼承父模型所具備的屬性和行為,同時子模型可以具有自己特有的屬性和行為,并能夠?qū)Ω改P退邆涞牟糠中袨檫M(jìn)行“進(jìn)化”,從而具備更適應(yīng)自身要求的行為特征。這種清晰的模型層次劃分能夠節(jié)省子模型代碼數(shù)量,并且修改模型時,對父模型的修改直接被子模型繼承,子模型不需要進(jìn)行修改,大大方便了模型的修改與維護(hù)。
根據(jù)通信對抗裝備的分類方法,采用層次化的模型設(shè)計(jì)方法,設(shè)計(jì)一個“基類模型”作為所有通信通信對抗裝備的頂層模型,在此基礎(chǔ)上派生出三個第二層模型:通信對抗偵察裝備模型、通信對抗測向裝備模型及通信對抗干擾裝備模型,以此類推,形成完整的模型層次結(jié)構(gòu),如圖1所示。
圖1 通信對抗裝備層次模型
說明:根據(jù)仿真的需要,以上模型設(shè)計(jì)還可以按照具體的裝備型號進(jìn)行進(jìn)一步的劃分,從而形成與型號裝備對應(yīng)的仿真模型。
(2)模型參數(shù)、行為分配
模型層次結(jié)構(gòu)設(shè)計(jì)好之后,接下來的關(guān)鍵則是將模型參數(shù)、行為分配到相應(yīng)的層次中,分配模型參數(shù)、行為時應(yīng)遵循如下原則:
1)盡可能將多種設(shè)備共同參數(shù)和行為分配到盡可能高一級的模型中;
2)某種設(shè)備特有的參數(shù)和行為盡可能分配到低一級的模型中;
3)對于含義相同、行為略有差別的行為,可以采用虛擬化技術(shù)限定,從而使得下一級模型可以重寫上一級模型的行為,滿足仿真需求;
根據(jù)以上設(shè)計(jì)原則,以頂層模型、第二層偵察裝備模型及第三層全景搜索接收裝備模型為例,將其部分模型參數(shù)和行為按圖2所示進(jìn)行分配。
在通信對抗裝備仿真中,具有典型并發(fā)特征的行為主要有三個:偵察、測向和干擾。由于這三種行為都需要消耗大量的時間資源和存貯資源,并且當(dāng)同時模擬多個設(shè)備或較大型的系統(tǒng)設(shè)備時,必然存在設(shè)備內(nèi)部及設(shè)備與設(shè)備之間的各種并發(fā)行為。
在傳統(tǒng)的面向過程的程序設(shè)計(jì)中,常采用集中控制的方式對并發(fā)行為進(jìn)行描述,也就是將所有對象的并發(fā)行為集中在一個過程函數(shù)中逐一描述,此種方法的優(yōu)點(diǎn)是過程清晰,并發(fā)行為之間的同步設(shè)計(jì)簡單(如圖3所示)。但是此種過程式的并發(fā)行為設(shè)計(jì)其本質(zhì)仍然是順序處理而不是真正意義上的并發(fā)處理。當(dāng)并發(fā)行為較多時,邏輯控制比較復(fù)雜,特別是當(dāng)并發(fā)行為之間如果具有依賴性(如某個并發(fā)行為必須等到另一個并發(fā)行為結(jié)束之后才能進(jìn)行),將會導(dǎo)致并發(fā)行為邏輯控制相當(dāng)復(fù)雜甚至無法進(jìn)行。同時,此種方法不能充分發(fā)揮現(xiàn)代多核處理器的同時多任務(wù)處理能力。
圖3 面向過程的并發(fā)行為
針對上述面向過程的并發(fā)行為存在的問題,[4]提出的基于消息并發(fā)對象模型及[1]介紹的在面向?qū)ο竽P椭幸氩l(fā)機(jī)制,根據(jù)通信對抗裝備仿真特點(diǎn)和需求,采用C++語言提供的消息、事件、線程等元素[3],設(shè)計(jì)了基于對象的、主動式的、自治的并發(fā)仿真模型,其基本思路是:使用線程作為并發(fā)行為的載體,使用消息提供對象之間以及對象與外部控制、顯示模塊進(jìn)行通信,使用事件實(shí)現(xiàn)線程內(nèi)部對數(shù)據(jù)處理的同步,如圖4所示,該并發(fā)模型的特點(diǎn)是:
圖4 并發(fā)行為模型及并發(fā)對象之間通信模型
(1)將并發(fā)行為的載體——線程封裝在對象之中,高效的利用了多核處理器的處理能力;同時,并發(fā)行為由其所屬的對象完全管理,每個模型都是一個高度自治的對象,從而大大降低了并發(fā)行為管理的復(fù)雜性。
(2)對象與對象之間、對象與外部控制、顯示等模塊之間的通信通過互發(fā)消息進(jìn)行,避免對處理流程的額外干擾。
(3)使用事件進(jìn)行同步,較好的實(shí)現(xiàn)了對具有依賴性的并發(fā)行為之間的同步。
根據(jù)上述設(shè)計(jì),我們以通信對抗偵察設(shè)備為例,使用Visual C++語言設(shè)計(jì)實(shí)現(xiàn)其仿真并發(fā)模型。
頂層模型中包含所有裝備的共性屬性和行為,其共性屬性主要有裝備類別、平臺類別、工作狀態(tài)等,其共性的行為主要有裝備的機(jī)動、設(shè)備電源的打開與關(guān)閉等。下面給出其實(shí)現(xiàn)示例代碼:
class CBaseEquip
{
//構(gòu)造函數(shù)與析構(gòu)函數(shù)
public:
CBaseEquip();
virtual~CBaseEquip();
//設(shè)備屬性參數(shù)
protect:
int m_intEquipType;//裝備類別
int m_intPlatType;//平臺類別
int m_intWorkState;//工作狀態(tài)
//設(shè)備屬性參數(shù)訪問函數(shù)(略)
//設(shè)備行為
public:
virtual void Move();//設(shè)備機(jī)動行為
virtual void Power(BOOL bPowerOnOff);//電源開關(guān)
};
說明:
(1)為封裝內(nèi)部數(shù)據(jù),屬性參數(shù)一般使用protect屬性進(jìn)行保護(hù),以免外部直接訪問,破壞內(nèi)部數(shù)據(jù)狀態(tài),同時通過提供屬性參數(shù)訪問接口以便外部統(tǒng)一訪問。
(2)為提供繼承類可以實(shí)現(xiàn)特殊的可以修改的行為,在設(shè)備行為中增加virtual修飾符,即繼承類可以重寫基類的行為,而編譯器可以根據(jù)對象運(yùn)行時信息確定調(diào)用合適的函數(shù)。
通信對抗偵察設(shè)備仿真模型由基類模型CBaseEquip通過繼承獲得,除了自動具備基類CBaseEquip所有公開和保護(hù)的屬性和行為外,還具有自身特有的屬性和行為,如最低工作頻率、最高工作頻率、接收機(jī)的靈敏度、解調(diào)方式、中頻帶寬等屬性參數(shù)以及偵察接收等個性化的行為。
在這里,應(yīng)重點(diǎn)考慮偵察行為的并發(fā)設(shè)計(jì)。通常,一個完整的偵察流程應(yīng)包括:設(shè)備參數(shù)初始化、采集信號、數(shù)據(jù)處理、數(shù)據(jù)顯示等四個步驟。其中參數(shù)初始化主要用于初始化接收機(jī)工作參數(shù)(如工作頻率、解調(diào)方式、天線衰減、增益控制等),信號采集主要用于從專用的采集設(shè)備提取信號數(shù)據(jù),數(shù)據(jù)處理則根據(jù)處理需求不同而不同(如進(jìn)行數(shù)據(jù)加床、頻域分析等),數(shù)據(jù)顯示主要用于顯示數(shù)據(jù)處理的結(jié)果。按照1.2設(shè)計(jì)的并發(fā)行為模型,采用在面向?qū)ο竽P椭幸M(jìn)并發(fā)機(jī)制的方法,使用線程實(shí)現(xiàn)并發(fā)行為,給出偵察并發(fā)行為的實(shí)現(xiàn)流程及示例代碼如圖5所示。
圖5 偵察流程及示例代碼
面向?qū)ο蟮哪P驮O(shè)計(jì)模仿人類認(rèn)識世界的方法將客觀世界的任何事物看作對象,進(jìn)而分析事物的組成關(guān)系和交互關(guān)系,建立描述客觀世界的抽象模型,借助封裝、數(shù)據(jù)抽象、多態(tài)和繼承等手段很好的實(shí)現(xiàn)了對客觀事物的描述。針對在裝備仿真中存在的并發(fā)行為特征,文章使用在面向?qū)ο竽P椭幸M(jìn)并發(fā)機(jī)制的方法,設(shè)計(jì)實(shí)現(xiàn)了并發(fā)仿真模型,并探討了在并發(fā)仿真模型中實(shí)現(xiàn)通信及同步的基本方法。
[1] 陳家駿.面向?qū)ο蟪绦蛟O(shè)計(jì)模型中的并發(fā)行為[J].2008:3-5.
[2] 蔡曉霞等.通信對抗原理[M].解放軍出版社,2011,01.
[3] Jeffery Richter著.王建生等譯.Windows核心編程[M].機(jī)械工業(yè)出版社,2000,5:172-190.
[4] 周光明.基于對象的并發(fā)模型[J].計(jì)算機(jī)技術(shù)與發(fā)展,2008.No12.Vol18:147.
[5] 李慧霸等.網(wǎng)絡(luò)程序設(shè)計(jì)中的并發(fā)復(fù)雜性[J].軟件學(xué)報,Vol.22,No.1,January 2011.