專利名稱:用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池及其實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計算機仿真技術(shù)領(lǐng)域,具體涉及一種用于計算機生成兵力(Computer Generate Force, CGF)仿真系統(tǒng)的數(shù)據(jù)池及其實現(xiàn)方法。
背景技術(shù):
計算機生成兵力領(lǐng)域的應(yīng)用通常是仿真虛擬戰(zhàn)場環(huán)境。為了建立虛擬戰(zhàn)場,需要 通過軟件和硬件方式創(chuàng)造多個能夠自主決策、自主行動的虛擬作戰(zhàn)對象,如飛機、坦克等。 這些虛擬的作戰(zhàn)對象稱為仿真對象。在仿真運行過程中,仿真對象之間進(jìn)行數(shù)據(jù)交互是一 種常見的需求。實現(xiàn)仿真對象數(shù)據(jù)交互的傳統(tǒng)方法有兩種,一種是直接訪問方式,另一種是共享 內(nèi)存方式。第一種直接訪問方式如圖1所示,仿真對象~上包含有仿真對象A2的接口模塊, 仿真對象A2上包含有仿真對象A1的接口模塊,參與交互的仿真對象A1和仿真對象A2直接 調(diào)用對方的接口模塊,從而獲得數(shù)據(jù)。這種方式的效率高,但獲取數(shù)據(jù)的一方需要事先包含 提供數(shù)據(jù)一方的接口模塊。因此,這種方式會使仿真對象之間產(chǎn)生耦合關(guān)系,需要額外的集 成調(diào)試工作才能協(xié)調(diào)工作,這不符合當(dāng)前模塊化的系統(tǒng)構(gòu)建原則。另一種共享內(nèi)存方式通過公共內(nèi)存實現(xiàn)數(shù)據(jù)交互,如圖2所示,仿真系統(tǒng)首先定 義一塊足夠大小的內(nèi)存空間,并為每個仿真對象An進(jìn)行分配。仿真對象把與外部共享的數(shù) 據(jù)存放在自己的內(nèi)存區(qū),并負(fù)責(zé)更新,如圖2中的空心箭頭所示。若仿真對象A1將數(shù)據(jù)存 放在自己的內(nèi)存區(qū),而仿真對象A2需要仿真對象A1的數(shù)據(jù),則直接訪問仿真對象A1的內(nèi)存 區(qū)查詢所需數(shù)據(jù)然后存取,如圖2中的實心箭頭所示。這樣,每個仿真對象都只跟共享內(nèi)存 交互,不存在仿真對象之間的耦合問題。但這種方式加入了數(shù)據(jù)的復(fù)制和拷貝操作,因此效 率較低。另外,這種方式還需要額外開辟的內(nèi)存空間,造成浪費。模板是一種泛型編程技術(shù)。所謂泛型編程就是以獨立于任何特定類型的方式編 寫代碼,而實現(xiàn)這種方式的途徑就是模板。模板是創(chuàng)建類或函數(shù)的藍(lán)圖或公式。例如, 我們可以定義一個模板Array<ClaSS T>,可以作為多種數(shù)據(jù)類型的存儲數(shù)組,既可以是 Array<int>,也可以是 Array<double>。模板類具有以下一般形式template<typename Tl,typename T2.">class MyClass{...}關(guān)鍵詞template表示當(dāng)前是一個模板類定義。關(guān)鍵字template后跟模板的形參 列表。類型參數(shù)typename表示Tl和T2都是某種類型。關(guān)鍵詞class表明當(dāng)前是一個類 的定義。最后,類的名稱為MyClass。模板還有其它形式,例如模板函數(shù)。以下是模板函數(shù) 的典型定義方式template<typename Tl,typename Τ2···>returntype function (const Tl & value 1,const T2& value2."){
...}而函數(shù)指針是指向函數(shù)而非指向?qū)ο蟮闹羔槨O衿渌羔樢粯?,函?shù)指針也指向 某個特定的類型;這個類型與函數(shù)的返回值和形參表有關(guān),而與函數(shù)名無關(guān)。例如,以下為 函數(shù)指針的典型定義bool (* pf) (const string&,const string&);通過以上方式,pf被定義為指向一類函數(shù)的指針這類函數(shù)帶有兩個const String&參數(shù),并返回布爾值。函數(shù)指針可以作為一般指針進(jìn)行使用,等價于直接調(diào)用函數(shù), 效率高。
發(fā)明內(nèi)容
本發(fā)明的目的是為了解決上述仿真對象數(shù)據(jù)交互的傳統(tǒng)方法中需要額外的集成 調(diào)試工作,或者訪問數(shù)據(jù)效率較低等問題提出一種用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池 及其實現(xiàn)方法,用于管理仿真對象之間的數(shù)據(jù)交互。一種用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池,由模板組、數(shù)據(jù)接口節(jié)點和節(jié)點管 理對象組成;所述模板組包括4類模板對象,用于對不同的數(shù)據(jù)源進(jìn)行封裝;所述數(shù)據(jù)接口節(jié) 點是在模板對象基礎(chǔ)上對數(shù)據(jù)源的進(jìn)一步封裝;所述節(jié)點管理對象管理多個數(shù)據(jù)接口節(jié) 點,并將索引名稱與數(shù)據(jù)接口節(jié)點綁定;仿真對象向節(jié)點管理對象傳遞索引名稱,節(jié)點管理對象返回與該名稱綁定的數(shù)據(jù) 接口節(jié)點,該數(shù)據(jù)接口節(jié)點通過訪問模板組中的模板對象獲取數(shù)據(jù),節(jié)點管理對象將獲取 的數(shù)據(jù)返回給仿真對象。所述模板組包括的4類模板對象,具體是C0M組件模板對象,用于封裝具有COM 組件形式的數(shù)據(jù)源;內(nèi)存模板對象,用于封裝存在于內(nèi)存中的數(shù)據(jù)源;仿真對象接口模板 對象,用于封裝具有仿真對象的數(shù)據(jù)接口形式的數(shù)據(jù)源;全局接口模板對象用于封裝以全 局接口形式存在的數(shù)據(jù)源。所述數(shù)據(jù)接口節(jié)點提供數(shù)據(jù)的綁定接口、讀寫接口和事件監(jiān)聽器接口。綁定接口 具有相同的接口形式,以模板對象為參數(shù),實現(xiàn)數(shù)據(jù)源與索引名稱的綁定。讀寫接口通過訪 問模板對象實現(xiàn)對數(shù)據(jù)源的讀取和寫入。事件監(jiān)聽器接口負(fù)責(zé)監(jiān)聽三類事件,包括數(shù)據(jù) 源的數(shù)據(jù)發(fā)生改變、數(shù)據(jù)接口節(jié)點自身被刪除、數(shù)據(jù)接口節(jié)點自身被創(chuàng)建,當(dāng)這些事件發(fā)生 時,所有正在監(jiān)聽的數(shù)據(jù)接口節(jié)點都將得到通知。所述的節(jié)點管理對象外部接口包括數(shù)據(jù)節(jié)點查詢接口、綁定操作接口和數(shù)據(jù)訪問 接口。數(shù)據(jù)節(jié)點查詢接口接收仿真對象傳遞的索引名稱,并返回對應(yīng)的數(shù)據(jù)接口節(jié)點。 綁定操作接口采用函數(shù)指針技術(shù),將不同形式的數(shù)據(jù)源轉(zhuǎn)換為的數(shù)據(jù)接口節(jié)點綁定在數(shù)據(jù) 池中。數(shù)據(jù)訪問接口包括數(shù)據(jù)讀取接口和數(shù)據(jù)寫入接口。數(shù)據(jù)讀取接口的參數(shù)為索引名稱, 返回相應(yīng)數(shù)據(jù)源的當(dāng)前數(shù)值。數(shù)據(jù)寫入接口的輸入?yún)?shù)為索引名稱和寫入的數(shù)值,返回是 否成功標(biāo)志。一種用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池的實現(xiàn)方法,具體包括以下步驟
步驟一、構(gòu)建模板組中的模板對象,將仿真對象的數(shù)據(jù)在模板組1中進(jìn)行封裝;所述的模板對象實現(xiàn)對數(shù)據(jù)源的讀、寫以及數(shù)據(jù)自身復(fù)制的操作,構(gòu)建有四類 COM組件模板對象用于封裝以COM組件形式存在的仿真對象;內(nèi)存模板對象用于封裝內(nèi)存 中的獨立變量數(shù)據(jù)源;仿真對象接口模板對象用于封裝仿真對象的成員數(shù)據(jù)接口 ;全局接 口模板對象,用于封裝一類具有整型索弓I參數(shù)的對象成員接口 ;步驟二、實現(xiàn)數(shù)據(jù)接口節(jié)點,將步驟一中經(jīng)過模板對象封裝后的數(shù)據(jù)進(jìn)一步封 裝;所述數(shù)據(jù)節(jié)點對象實現(xiàn)綁定接口、讀寫接口以及事件監(jiān)聽接口 ;綁定接口具有相 同的接口形式,以模板對象為參數(shù),實現(xiàn)數(shù)據(jù)源與索引名稱的綁定;讀寫接口通過訪問模板 對象來實現(xiàn)對數(shù)據(jù)源的讀出或?qū)懭氩僮鳎皇录O(jiān)聽器接口以回調(diào)的方式工作,響應(yīng)三類事 件數(shù)據(jù)接口節(jié)點自身綁定的數(shù)據(jù)發(fā)生改變、數(shù)據(jù)接口節(jié)點自身被刪除以及數(shù)據(jù)接口節(jié)點 自身被創(chuàng)建,當(dāng)一個數(shù)據(jù)接口節(jié)點發(fā)生 這些事件時,所有正在監(jiān)聽的其它數(shù)據(jù)接口節(jié)點都 將得到通知;步驟三、實現(xiàn)節(jié)點管理對象,使能夠?qū)γ總€數(shù)據(jù)接口節(jié)點通過唯一索引名稱進(jìn)行 索引;所述節(jié)點管理對象實現(xiàn)數(shù)據(jù)節(jié)點查詢接口、綁定操作接口以及數(shù)據(jù)訪問接口 ;數(shù) 據(jù)節(jié)點查詢接口接收輸入的索引名稱,并返回與之關(guān)聯(lián)的數(shù)據(jù)接口節(jié)點;綁定操作接口采 用函數(shù)指針技術(shù)將各數(shù)據(jù)接口節(jié)點綁定在數(shù)據(jù)池;數(shù)據(jù)訪問接口包括數(shù)據(jù)讀取接口和數(shù)據(jù) 寫入接口,數(shù)據(jù)讀取接口的參數(shù)為索引名稱,返回與索引名稱對應(yīng)的當(dāng)前數(shù)值,數(shù)據(jù)寫入接 口的輸入?yún)?shù)為索引名稱和寫入的數(shù)值,返回是否成功標(biāo)志;步驟四、仿真對象通過數(shù)據(jù)池,實現(xiàn)對數(shù)據(jù)的訪問。本發(fā)明的優(yōu)點在于(1)每個仿真對象都通過索引名稱向數(shù)據(jù)池查詢數(shù)據(jù),仿真對象之間沒有耦合關(guān) 系。這使仿真系統(tǒng)的開發(fā)和集成提供了極大的便利;(2)數(shù)據(jù)的訪問效率高。仿真對象獲取數(shù)據(jù)的過程最終是通過指針(變量指針或 函數(shù)指針)操作實現(xiàn)的,這與仿真對象之間直接調(diào)用的效率相當(dāng);(3)實現(xiàn)了開放性的擴展能力。對于使用數(shù)據(jù)池進(jìn)行交互的仿真系統(tǒng),用戶可以很 容易地加入新的功能模塊,從而實現(xiàn)對已有功能的擴展。例如,加入未來可能出現(xiàn)的新類型 的兵力仿真對象。
圖1是采用直接訪問方式的仿真對象數(shù)據(jù)交互示意圖;圖2是采用數(shù)據(jù)共享內(nèi)存訪問方式的仿真對象數(shù)據(jù)交互示意圖;圖3是本發(fā)明的數(shù)據(jù)池的整體結(jié)構(gòu)示意圖;圖4是本發(fā)明的數(shù)據(jù)池中模板組所包含的模板對象的示意圖;圖5是本發(fā)明的數(shù)據(jù)池中數(shù)據(jù)接口節(jié)點的結(jié)構(gòu)示意圖;圖6是本發(fā)明的數(shù)據(jù)池中節(jié)點管理對象的“樹”結(jié)構(gòu)的示意圖;圖7是仿真對象數(shù)據(jù)采用本發(fā)明的數(shù)據(jù)池進(jìn)行數(shù)據(jù)交換的示意圖;圖8是本發(fā)明的數(shù)據(jù)池的實現(xiàn)方法的步驟流程圖9是本發(fā)明實施例中仿真對象進(jìn)行數(shù)據(jù)交互的方式示意圖。圖中1-模板組2-數(shù)據(jù)接口節(jié)點3-節(jié)點管理對象201-綁定節(jié)口202-讀寫接口 203-事件監(jiān)聽器接口 301-數(shù)據(jù)節(jié)點查詢接口 302-綁定操作接口303-數(shù)據(jù)訪問接口
具體實施例方式下面將結(jié)合附圖和實施例對本發(fā)明作進(jìn)一步的詳細(xì)說明。本發(fā)明提出的一種用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池,如圖3所示,包括模 板組1、數(shù)據(jù)接口節(jié)點2和節(jié)點管理對象3 ;其中,數(shù)據(jù)接口節(jié)點2可以有多個。模板組1包括多種模板對象,用于實現(xiàn)數(shù)據(jù)池對不同類型數(shù)據(jù)源的管理。數(shù)據(jù)源 是指向外提供數(shù)據(jù)的對象,有多種形式,可以是內(nèi)存中某個獨立變量,也可以是組件模塊的 數(shù)據(jù)訪問函數(shù)。數(shù)據(jù)接口節(jié)點2是在模板對象基礎(chǔ)上對數(shù)據(jù)源的進(jìn)一步封裝,通過綁定接 口 201、讀寫接口 202以及事件監(jiān)聽接口 203,實現(xiàn)了對數(shù)據(jù)源的統(tǒng)一操作。節(jié)點管理對象 3管理多個數(shù)據(jù)接口節(jié)點2,實現(xiàn)了將索引名稱與數(shù)據(jù)接口節(jié)點2綁定的功能。當(dāng)仿真對象 (即數(shù)據(jù)池的用戶)需要數(shù)據(jù)時,首先向節(jié)點管理對象3傳遞索引名稱;節(jié)點管理對象3獲 得與名稱綁定的數(shù)據(jù)接口節(jié)點2,并獲取數(shù)據(jù)。最后,節(jié)點管理對象3將數(shù)據(jù)返回仿真對象。所述的模板組1包括4類模板對象,如圖4所示。其中,COM組件模板對象封裝了 以COM組件形式存在的數(shù)據(jù)源,內(nèi)存模板對象封裝了內(nèi)存數(shù)據(jù)形式的數(shù)據(jù)源,仿真對象接 口模板對象封裝了以接口形式存在的數(shù)據(jù)源,全局接口模板對象封裝了以全局接口形式存 在的數(shù)據(jù)源。模板對象封裝這些不同類型的數(shù)據(jù)源,均實現(xiàn)了對數(shù)據(jù)源的“讀”、“寫”以及 “克隆自身”操作,向外部屏蔽了數(shù)據(jù)源訪問形式上的區(qū)別。模板組1將數(shù)據(jù)源經(jīng)模板對象 封裝后傳送給數(shù)據(jù)接口節(jié)點2進(jìn)行進(jìn)一步的封裝。所述的數(shù)據(jù)接口節(jié)點2在模板組1傳過的數(shù)據(jù)基礎(chǔ)上進(jìn)一步對該數(shù)據(jù)進(jìn)行封裝, 向節(jié)點管理對象3屏蔽4類模板對象之間的差異性;節(jié)點管理對象3管理多個數(shù)據(jù)接口節(jié) 點2。如圖3所示,數(shù)據(jù)接口節(jié)點2主要提供了兩類接口 對數(shù)據(jù)的綁定接口 201和讀寫接 口 202,此外還提供了事件監(jiān)聽器接口 203。如圖5所示,數(shù)據(jù)接口節(jié)點2的綁定接口 201實現(xiàn)數(shù)據(jù)源與索引名稱的綁定,實際 通過模板組1的綁定接口實現(xiàn)具體操作。綁定接口 201實現(xiàn)了對布爾型(boolean)、整型 (int)、短整型(short)、長整型(long)、單精度浮點數(shù)(float)、雙精度浮點數(shù)(double)、字 符串(string)以及COM組件類型的數(shù)據(jù)源綁定能力。數(shù)據(jù)接口節(jié)點2的讀寫接口 202實現(xiàn)對數(shù)據(jù)的操作能力,包括讀取和寫入兩種操 作,如圖5所示,讀寫接口 202通過訪問模板對象來實現(xiàn)對數(shù)據(jù)源的讀取或?qū)懭氩僮鳌?shù)據(jù)接口節(jié)點2還實現(xiàn)了事件監(jiān)聽器接口 203。事件監(jiān)聽器接口 203響應(yīng)三類事 件1)自身綁定的數(shù)據(jù)發(fā)生改變;2)自身被刪除;3)自身被創(chuàng)建了。如圖5所示,對一個特 定的數(shù)據(jù)接口節(jié)點2而言,當(dāng)發(fā)生這些事件時,所有正在監(jiān)聽的其它數(shù)據(jù)接口節(jié)點2都將得 到通知,這種特性使節(jié)點管理對象3能方便地監(jiān)控數(shù)據(jù)接口節(jié)點2。所述的節(jié)點管理對象3通過“樹”結(jié)構(gòu)管理多個數(shù)據(jù)接口節(jié)點2,對每個數(shù)據(jù)接口節(jié)點2通過唯一的名稱即索引名稱進(jìn)行索引,如圖6所示。其中,“根節(jié)點”是一個虛擬的 頂層節(jié)點,表示節(jié)點管理對象3自身?!案?jié)點”下面可以有多個對象,如圖6所示,為兩個 仿真對象所建立的節(jié)點管理對象3,其“根節(jié)點”下面包括“對象一”和“對象二”。每個對象 表示多個數(shù)據(jù)接口節(jié)點2的集合。在“樹”結(jié)構(gòu)中,葉結(jié)點就是各個數(shù)據(jù)接口節(jié)點2。每個 葉節(jié)點都綁定了特定形式的數(shù)據(jù)源。葉節(jié)點的索引名稱有特定的構(gòu)造方式,與文件系統(tǒng)的 “路徑”類似,中間通過符號“/”分開。例如,圖6中由虛線標(biāo)出的葉結(jié)點“數(shù)據(jù)B”,索引名 稱為“根節(jié)點/對象一 /數(shù)據(jù)B”。用戶通過索引名稱查詢節(jié)點管理對象3,獲得相應(yīng)的數(shù)據(jù) 接口節(jié)點2。 如圖3所示,節(jié)點管理對象3的外部接口包括數(shù)據(jù)節(jié)點查詢接口 301、綁定操作 接口 302和數(shù)據(jù)訪問接口 303。所述的數(shù)據(jù)節(jié)點查詢接口 301接收輸入的索引名稱,并返回與之關(guān)聯(lián)的數(shù)據(jù)接口 節(jié)點2。所述的綁定操作接口 302,用于將不同形式的數(shù)據(jù)源轉(zhuǎn)換為的數(shù)據(jù)接口節(jié)點2綁 定在數(shù)據(jù)池中。在本發(fā)明中,索引名稱與數(shù)據(jù)接口節(jié)點2的綁定采用函數(shù)指針技術(shù)。對于 獨立變量形式的數(shù)據(jù)源,綁定時需要指定的索引名稱和獨立變量的指針。對于以仿真對象 數(shù)據(jù)接口形式存在的數(shù)據(jù)源,綁定時需要指定索引名稱和仿真對象數(shù)據(jù)接口。所述的數(shù)據(jù)訪問接口 303包括數(shù)據(jù)讀取接口和數(shù)據(jù)寫入接口。數(shù)據(jù)讀取接口的參 數(shù)為索引名稱,返回與索引名稱對應(yīng)的當(dāng)前數(shù)值。數(shù)據(jù)寫入接口的輸入?yún)?shù)為索引名稱和 寫入的數(shù)值,返回是否成功標(biāo)志。本發(fā)明的數(shù)據(jù)池的工作過程,如圖7所示,假設(shè)有An個仿真對象使用本發(fā)明的數(shù) 據(jù)池進(jìn)行數(shù)據(jù)交換,在圖中標(biāo)記為仿真對象A1、仿真對象A2…仿真對象An。首先,在初始化 時刻,各仿真對象將自身向外部提供的數(shù)據(jù)源與數(shù)據(jù)池進(jìn)行綁定,如圖中①所示。其次,在 運行時刻,仿真對象可通過索引名稱向數(shù)據(jù)池查詢指定的數(shù)據(jù)源,如圖中②所示。索引名稱 可以指向任何仿真對象。最后,數(shù)據(jù)池返回查詢結(jié)果給仿真對象,如圖中③所示。從工作過 程可知,數(shù)據(jù)池作為一個集中的數(shù)據(jù)交換區(qū)域,解除了仿真對象之間的耦合關(guān)系,使得仿真 對象不需要了解彼此的定義就能實現(xiàn)數(shù)據(jù)交互。本發(fā)明一種用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池的實現(xiàn)方法,如圖8所示,具 體包括如下步驟步驟一、構(gòu)建模塊組1中的模板對象,將仿真對象的數(shù)據(jù)在模板組1中進(jìn)行封裝。各模板對象封裝不同類型的數(shù)據(jù)源,實現(xiàn)對數(shù)據(jù)源的讀、寫以及數(shù)據(jù)自身復(fù)制的 操作。在模塊組1中構(gòu)建4類模塊對象C0M組件模板對象用于封裝以COM組件形式存在 的仿真對象;內(nèi)存模板模板用于封裝內(nèi)存中的獨立變量數(shù)據(jù)源;仿真對象接口模板對象用 于封裝仿真對象的成員數(shù)據(jù)接口 ;全局接口模板對象,用于封裝一類具有整型索引參數(shù)的 對象成員接口。步驟二、實現(xiàn)各數(shù)據(jù)接口節(jié)點2,將步驟一中經(jīng)過模板對象封裝后的數(shù)據(jù)進(jìn)一步封 裝。實現(xiàn)數(shù)據(jù)接口節(jié)點2通過實現(xiàn)綁定接口 201、讀寫接口 202以及事件監(jiān)聽接口 203來實 現(xiàn)。綁定接口 201實現(xiàn)數(shù)據(jù)源與索引名稱的綁定,綁定接口 201具有相同的接口形式, 以模板對象為參數(shù),實際通過模板組1的綁定接口實現(xiàn)具體操作。綁定接口 201實現(xiàn)了對布爾型(boolean)、整型(int)、短整型(short)、長整型(long)、單精度浮點數(shù)(float)、雙 精度浮點數(shù)(double)、字符串(string)以及COM組件類型的數(shù)據(jù)源綁定能力。讀寫接口 202通過訪問模板對象來實現(xiàn)對數(shù)據(jù)源的讀出或?qū)懭氩僮?。?shù)據(jù)接口節(jié) 點2在內(nèi)部將輸入的模板對象進(jìn)行克隆,以獲得對數(shù)據(jù)源的訪問能力。事件監(jiān)聽器接口 203以回調(diào)的方式工作,觸發(fā)事件的一方調(diào)用,處于監(jiān)聽的一方 接收。事件監(jiān)聽器接口 203響應(yīng)三類事件1)數(shù)據(jù)接口節(jié)點2自身綁定的數(shù)據(jù)發(fā)生改變; 2)數(shù)據(jù)接口節(jié)點2自身被刪除;3)數(shù)據(jù)接口節(jié)點2自身被創(chuàng)建了,當(dāng)本數(shù)據(jù)接口節(jié)點2發(fā) 生這些事件時,所有正在監(jiān)聽的其它數(shù)據(jù)接口節(jié)點2都將得到通知。 步驟三、實現(xiàn)節(jié)點管理對象3,使能夠?qū)γ總€數(shù)據(jù)接口節(jié)點2通過唯一索引名稱進(jìn) 行索引。具體實現(xiàn)節(jié)點管理對象3通過實現(xiàn)數(shù)據(jù)節(jié)點查詢接口 301、綁定操作接口 302以及 數(shù)據(jù)訪問接口 303來實現(xiàn)。數(shù)據(jù)節(jié)點查詢接口 301接收輸入的索引名稱,并返回與之關(guān)聯(lián)的數(shù)據(jù)接口節(jié)點2。綁定操作接口 302,用于將不同形式的數(shù)據(jù)源轉(zhuǎn)換為的數(shù)據(jù)接口節(jié)點2綁定在數(shù) 據(jù)池中。索引名稱與數(shù)據(jù)接口節(jié)點2的綁定采用函數(shù)指針技術(shù)。對于獨立變量形式的數(shù)據(jù) 源,綁定時需要指定索引名稱和獨立變量的指針。對于以仿真對象數(shù)據(jù)接口形式存在的數(shù) 據(jù)源,綁定時需要指定索引名稱和仿真對象數(shù)據(jù)接口。數(shù)據(jù)訪問接口 303包括數(shù)據(jù)讀取接口和數(shù)據(jù)寫入接口。數(shù)據(jù)讀取接口的參數(shù)為索 引名稱,返回與索引名稱對應(yīng)的當(dāng)前數(shù)值。數(shù)據(jù)寫入接口的輸入?yún)?shù)為索引名稱和寫入的 數(shù)值,返回是否成功標(biāo)志。節(jié)點管理對象3通過“樹”結(jié)構(gòu)管理多個數(shù)據(jù)接口節(jié)點2,其中,“樹”結(jié)構(gòu)的“根節(jié) 點”是一個虛擬的頂層節(jié)點,表示節(jié)點管理對象3自身,“根節(jié)點”下面有若干對象,每個對 象是多個數(shù)據(jù)接口節(jié)點2的集合,各對象的下面就是各葉結(jié)點,各葉結(jié)點就是各個數(shù)據(jù)接 口節(jié)點2。每個葉節(jié)點都綁定了特定形式的數(shù)據(jù)源。葉節(jié)點的索引名稱有特定的構(gòu)造方式, 與文件系統(tǒng)的“路徑”類似,中間通過符號“/”分開。步驟四、仿真對象實現(xiàn)對數(shù)據(jù)的訪問。具體在訪問數(shù)據(jù)時可以通過下述兩種方式 實現(xiàn)。第一種方式如圖9中的實線箭頭所示仿真對象通過索引名稱從節(jié)點管理對象3 獲得相應(yīng)的數(shù)據(jù)接口節(jié)點2,再通過該數(shù)據(jù)接口節(jié)點2的讀寫接口訪問數(shù)據(jù),數(shù)據(jù)通過節(jié)點 管理對象3的訪問接口返回給仿真對象。第二種如圖9中的點劃線箭頭所示仿真對象通過節(jié)點管理對象3訪問數(shù)據(jù)源,節(jié) 點管理對象3將數(shù)據(jù)直接返回給仿真對象,這種方式實際上,節(jié)點管理對象3在內(nèi)部仍通過 數(shù)據(jù)接口節(jié)點2操作數(shù)據(jù)源,只是把這個過程向外部的仿真對象隱藏了。以第一種方式實現(xiàn)數(shù)據(jù)交互需要執(zhí)行兩個步驟,但效率高。因為除了第一次之外, 其它時候訪問數(shù)據(jù)將不需要再執(zhí)行對字符串的解析、查詢操作。采用第二種方式只需執(zhí)行 一個步驟,但每次都要進(jìn)行對數(shù)據(jù)節(jié)點的查詢,效率較低。因此,在仿真運行時刻推薦采用 第一種方式。實施例建立一個仿真實驗應(yīng)用,包含數(shù)據(jù)池以及兩個仿真對象,分別為雷達(dá)對象 (Radar)和飛機對象(Fighter),仿真雷達(dá)對飛機的探測過程。在這個過程中,雷達(dá)需要飛 機的當(dāng)前位置數(shù)據(jù),從而判斷飛機是否應(yīng)出現(xiàn)在雷達(dá)屏幕上。兩個仿真對象通過數(shù)據(jù)池進(jìn)行數(shù)據(jù)交互。本實施例中建立的本發(fā)明的數(shù)據(jù)池具體如下。在該仿真實驗中,在模塊組1針對不同類型的數(shù)據(jù)使用對應(yīng)的模板對象進(jìn)行封 裝,COM組件模板對象用于封裝以COM組件形式存在的仿真對象;內(nèi)存模板對象用于封裝內(nèi) 存中的獨立變量數(shù)據(jù)源;仿真對象接口模板對象用于封裝仿真對象的成員數(shù)據(jù)接口 ;全局 接口模板對象,用于封裝一類具有整型索弓I參數(shù)的對象成員接口。在數(shù)據(jù)接口節(jié)點2實現(xiàn)了數(shù)據(jù)的綁定接口 201、讀寫接口 202以及事件監(jiān)聽器接口 203。對于不同類型的數(shù)據(jù)源,綁定接口 201具有相同的實現(xiàn)形式。以整形和雙精度浮 點型數(shù)據(jù)為例綁定接口的實現(xiàn)方式如表1所示表1綁定接口的實現(xiàn)形式 如表1所示,綁定接口 201的接口名稱為Bind,數(shù)據(jù)源不論是整形數(shù)據(jù)還是雙精度 浮點型數(shù)據(jù),返回值均為布爾類型。綁定接口 201由節(jié)點管理對象3使用,并不直接暴露給 外部的仿真對象。讀寫接口 202的實現(xiàn)方式,以訪問整型數(shù)據(jù)int為例,如表2所示表2數(shù)據(jù)讀寫接口的實現(xiàn)方式 表2中,針對整型數(shù)據(jù),實現(xiàn)讀寫接口 202的功能有接口 getlntValue與接口 setlntValue,分別實現(xiàn)該讀寫接口 202的讀出和寫入功能。針對其它類型的讀寫接口 202 的實現(xiàn)形式與表2中所述類似。時間監(jiān)聽器接口 203以回調(diào)的方式工作,觸發(fā)事件的一方調(diào)用,處于監(jiān)聽的一方 接收。以響應(yīng)綁定數(shù)據(jù)發(fā)生變化的事件為例,時間監(jiān)聽器接口 valueChange的實現(xiàn)方式如 表3 表3時間監(jiān)聽器接口的實現(xiàn)方式 在節(jié)點管理對象3實現(xiàn)數(shù)據(jù)節(jié)點查詢接口 301、綁定操作接口 302以及數(shù)據(jù)訪問接 Π 303。數(shù)據(jù)節(jié)點查詢接口 301的實現(xiàn)形式如表4所示 表4數(shù)據(jù)節(jié)點查詢接口的實現(xiàn)方式 如表4所示,數(shù)據(jù)節(jié)點查詢接口名稱為FindNode,參數(shù)為索引名稱,返回值為對應(yīng) 的數(shù)據(jù)接口節(jié)點2。節(jié)點管理對象3的綁定操作接口 302與綁定接口 201具有相同的名稱Bind,但接 口參數(shù)則與被綁定對象有關(guān)。若被綁定的是仿真對象的數(shù)據(jù)接口,則具有以下形式,如表5 所示表5針對仿真對象數(shù)據(jù)接口綁定的綁定操作接口的實現(xiàn)形式 +一將索引名稱與仿真對象的 Bind 嶽象隱據(jù)纖數(shù)搬口綁定
接口若被綁定的是獨立變量,則綁定操作接口 302具有以下形式,如表6所示表6針對獨立變量綁定的綁定操作接口的實現(xiàn)形式 表6中,對于獨立變量形式的數(shù)據(jù)源,綁定時需要指定的索引名稱和獨立變量的 指針。表5中,對于以仿真對象數(shù)據(jù)接口形式存在的數(shù)據(jù)源,綁定時需要指定索引名稱和仿 真對象數(shù)據(jù)接口。節(jié)點管理對象3的數(shù)據(jù)訪問接口 303分為數(shù)據(jù)讀取接口和數(shù)據(jù)寫入接口。以整數(shù)型數(shù)據(jù)的訪問接口為例,其形式如表7所示表7數(shù)據(jù)訪問接口的實現(xiàn)形式 其中,數(shù)據(jù)讀取接口名稱為Getlnt,數(shù)據(jù)寫入接口名稱為Setlnt。當(dāng)前實施例中包含飛機(Fighter)和雷達(dá)(Radar)兩個仿真對象。表8列出了仿 真對象的部分?jǐn)?shù)據(jù)、訪問接口以及索引名稱表8本發(fā)明實施例仿真對象的部分?jǐn)?shù)據(jù)、訪問接口以及索引名稱 如表8所示,仿真對象Radar輸入仿真對象Fighter的當(dāng)前位置數(shù)據(jù)(x,y,ζ)。 對Radar來說,χ、y、ζ是由仿真對象Fighter提供的數(shù)據(jù)源。以χ為例,其索引名稱為 Air2GroundFighter/output/posx,數(shù)據(jù)寫入接口 setTarposx (double Value), Value 為寫 入的數(shù)據(jù),數(shù)據(jù)讀取接口 getTarposxO。y、z與χ類似。仿真對象Radar的輸出為“是否發(fā)現(xiàn)目標(biāo)”標(biāo)記,即isFindTar參數(shù)。對仿真對象Fighter而言,參數(shù)isFindTar是由Radar 提供的數(shù)據(jù)源,索引名稱為Radar/output/isfindtar。本實施例仿真運行分為初始化過程和運行過程,具體運行過程如下。在初始化過程,首先創(chuàng)建節(jié)點管理對象3。仿真對象根據(jù)自己提供的數(shù)據(jù)源創(chuàng)數(shù)據(jù) 接口節(jié)點2,交給節(jié)點管理對象3管理。節(jié)點管理對象3通過內(nèi)部建立的“樹”型結(jié)構(gòu)管理 多個仿真對象的數(shù)據(jù)接口節(jié)點2。 在仿真運行時刻,采用第一種方式進(jìn)行數(shù)據(jù)交互。仿真對象通過索引名稱從節(jié)點 管理對象3獲得相應(yīng)的數(shù)據(jù)接口節(jié)點2,再通過該數(shù)據(jù)接口節(jié)點2的讀寫接口訪問數(shù)據(jù),數(shù) 據(jù)通過節(jié)點管理對象3訪問接口返回給仿真對象。
權(quán)利要求
一種用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池,其特征在于,由模板組、數(shù)據(jù)接口節(jié)點和節(jié)點管理對象組成;所述模板組用于對仿真對象不同的數(shù)據(jù)源進(jìn)行封裝,包括4類模板對象COM組件模板對象,用于封裝具有COM組件形式的數(shù)據(jù)源;內(nèi)存模板對象,用于封裝存在于內(nèi)存中的數(shù)據(jù)源;仿真對象接口模板對象,用于封裝具有仿真對象的數(shù)據(jù)接口形式的數(shù)據(jù)源;全局接口模板對象用于封裝以全局接口形式存在的數(shù)據(jù)源;所述數(shù)據(jù)接口節(jié)點是在模板對象基礎(chǔ)上對數(shù)據(jù)源進(jìn)一步封裝;所述節(jié)點管理對象管理數(shù)據(jù)接口節(jié)點,并將索引名稱與數(shù)據(jù)接口節(jié)點綁定;仿真對象向節(jié)點管理對象傳遞索引名稱,節(jié)點管理對象返回與該名稱綁定的數(shù)據(jù)接口節(jié)點,該數(shù)據(jù)接口節(jié)點通過訪問模板組中的模板對象獲取數(shù)據(jù),節(jié)點管理對象將獲取的數(shù)據(jù)返回給仿真對象模板。
2.根據(jù)權(quán)利要求1所述的一種用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池,其特征在于, 所述各模板對象封裝不同類型的數(shù)據(jù)源,是對數(shù)據(jù)源進(jìn)行讀、寫以及數(shù)據(jù)自身復(fù)制的操作。
3.根據(jù)權(quán)利要求1所述的一種用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池,其特征在于, 所述數(shù)據(jù)接口節(jié)點,其提供數(shù)據(jù)的綁定接口、讀寫接口和事件監(jiān)聽器接口 ;綁定接口具有相同的接口形式,以模板對象為參數(shù),實現(xiàn)數(shù)據(jù)源與索引名稱的綁定;讀寫接口通過訪問模板對象實現(xiàn)對數(shù)據(jù)源的讀取和寫入;事件監(jiān)聽器接口負(fù)責(zé)監(jiān)聽三類事件,包括數(shù)據(jù)源的數(shù)據(jù)發(fā)生改變、數(shù)據(jù)接口節(jié)點自身 被刪除、數(shù)據(jù)接口節(jié)點自身被創(chuàng)建,當(dāng)這些事件發(fā)生時,所有正在監(jiān)聽的數(shù)據(jù)接口節(jié)點都將 得到通知。
4.根據(jù)權(quán)利要求1所述的一種用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池,其特征在于, 所述的節(jié)點管理對象,是通過“樹”結(jié)構(gòu)來管理數(shù)據(jù)接口節(jié)點,對每個數(shù)據(jù)接口節(jié)點通過唯 一的索引名稱進(jìn)行索引,“樹”結(jié)構(gòu)的“根節(jié)點”表示節(jié)點管理對象自身,“根節(jié)點”下面為對 象,每個對象為數(shù)據(jù)接口節(jié)點的集合,每個對象的下面是各葉結(jié)點,各葉結(jié)點就是各個數(shù)據(jù) 接口節(jié)點。
5.根據(jù)權(quán)利要求1所述的一種用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池,其特征在于, 所述的節(jié)點管理對象,其外部接口包括數(shù)據(jù)節(jié)點查詢接口、綁定操作接口和數(shù)據(jù)訪問接 Π ;數(shù)據(jù)節(jié)點查詢接口接收仿真對象傳遞的索引名稱,并返回對應(yīng)的數(shù)據(jù)接口節(jié)點;綁定操作接口采用函數(shù)指針技術(shù),將不同形式的數(shù)據(jù)源轉(zhuǎn)換為的數(shù)據(jù)接口節(jié)點綁定在 數(shù)據(jù)池中;數(shù)據(jù)訪問接口包括數(shù)據(jù)讀取接口和數(shù)據(jù)寫入接口 ;數(shù)據(jù)讀取接口的參數(shù)為索引名稱, 返回相應(yīng)數(shù)據(jù)源的當(dāng)前數(shù)值;數(shù)據(jù)寫入接口的輸入?yún)?shù)為索引名稱和寫入的數(shù)值,返回是 否成功標(biāo)志。
6.根據(jù)權(quán)利要求5所述的一種用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池,其特征在于, 所述綁定操作接口,對于獨立變量形式的數(shù)據(jù)源,綁定時需要指定的索引名稱和獨立變量 的指針,對于以仿真對象數(shù)據(jù)接口形式存在的數(shù)據(jù)源,綁定時需要指定索引名稱和仿真對 象數(shù)據(jù)接口。
7.一種用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池實現(xiàn)方法,其特征在于,具體包括如下步驟步驟一、構(gòu)建模板組中的模板對象,將仿真對象的數(shù)據(jù)在模板組中進(jìn)行封裝;所述的模板對象實現(xiàn)對數(shù)據(jù)源的讀、寫以及數(shù)據(jù)自身復(fù)制的操作,構(gòu)建有四類COM組 件模板對象用于封裝以COM組件形式存在的仿真對象;內(nèi)存模板對象用于封裝內(nèi)存中的獨 立變量數(shù)據(jù)源;仿真對象接口模板對象用于封裝仿真對象的成員數(shù)據(jù)接口 ;全局接口模板 對象,用于封裝一類具有整型索引參數(shù)的對象成員接口 ;步驟二、實現(xiàn)各數(shù)據(jù)接口節(jié)點,將步驟一中經(jīng)過模板對象封裝后的數(shù)據(jù)進(jìn)一步封裝;所述數(shù)據(jù)節(jié)點對象實現(xiàn)綁定接口、讀寫接口以及事件監(jiān)聽接口 ;綁定接口具有相同的 接口形式,以模板對象為參數(shù),實現(xiàn)數(shù)據(jù)源與索引名稱的綁定;讀寫接口通過訪問模板對象 來實現(xiàn)對數(shù)據(jù)源的讀出或?qū)懭氩僮?;事件監(jiān)聽器接口以回調(diào)的方式工作,響應(yīng)三類事件 數(shù)據(jù)接口節(jié)點自身綁定的數(shù)據(jù)發(fā)生改變、數(shù)據(jù)接口節(jié)點自身被刪除以及數(shù)據(jù)接口節(jié)點自身 被創(chuàng)建,當(dāng)一個數(shù)據(jù)接口節(jié)點發(fā)生這些事件時,所有正在監(jiān)聽的其它數(shù)據(jù)接口節(jié)點都將得 到通知;步驟三、實現(xiàn)節(jié)點管理對象,使能夠?qū)γ總€數(shù)據(jù)接口節(jié)點通過唯一索引名稱進(jìn)行索引;所述節(jié)點管理對象實現(xiàn)數(shù)據(jù)節(jié)點查詢接口、綁定操作接口以及數(shù)據(jù)訪問接口 ;數(shù)據(jù)節(jié) 點查詢接口接收輸入的索引名稱,并返回與之關(guān)聯(lián)的數(shù)據(jù)接口節(jié)點;綁定操作接口采用函 數(shù)指針技術(shù)將各數(shù)據(jù)接口節(jié)點綁定在數(shù)據(jù)池;數(shù)據(jù)訪問接口包括數(shù)據(jù)讀取接口和數(shù)據(jù)寫入 接口,數(shù)據(jù)讀取接口的參數(shù)為索引名稱,返回與索引名稱對應(yīng)的當(dāng)前數(shù)值,數(shù)據(jù)寫入接口的 輸入?yún)?shù)為索引名稱和寫入的數(shù)值,返回是否成功標(biāo)志;步驟四、仿真對象通過數(shù)據(jù)池,實現(xiàn)對數(shù)據(jù)的訪問。
8.根據(jù)權(quán)利要求7所述的一種用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池實現(xiàn)方法,其 特征在于,步驟三中所述的綁定操作接口采用函數(shù)指針技術(shù)將各數(shù)據(jù)接口節(jié)點綁定在數(shù)據(jù) 池,對于獨立變量形式的數(shù)據(jù)源,綁定時需要指定索引名稱和獨立變量的指針;對于以仿真 對象數(shù)據(jù)接口形式存在的數(shù)據(jù)源,綁定時需要指定索引名稱和仿真對象數(shù)據(jù)接口。
9.根據(jù)權(quán)利要求7所述的一種用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池實現(xiàn)方法,其特 征在于,步驟三中所述的節(jié)點管理對象,是通過“樹”結(jié)構(gòu)管理數(shù)據(jù)接口節(jié)點,“樹”結(jié)構(gòu)的 “根節(jié)點,,表示節(jié)點管理對象自身,“根節(jié)點,,下面為對象,每個對象表示為數(shù)據(jù)接口節(jié)點的 集合,各對象各自的下面是各葉結(jié)點,各葉結(jié)點就是各個數(shù)據(jù)接口節(jié)點。
10.根據(jù)權(quán)利要求7所述的一種用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池實現(xiàn)方法,其 特征在于,步驟四中所述的仿真對象實現(xiàn)對數(shù)據(jù)的訪問,包括兩種方式第一種方式是仿真 對象通過索引名稱從節(jié)點管理對象獲得相應(yīng)的數(shù)據(jù)接口節(jié)點,再通過該數(shù)據(jù)接口節(jié)點的讀 寫接口訪問數(shù)據(jù),數(shù)據(jù)通過節(jié)點管理對象訪問接口返回給仿真對象;第二種方式是仿真對 象通過節(jié)點管理對象訪問數(shù)據(jù)源,節(jié)點管理對象將數(shù)據(jù)直接返回給仿真對象。
全文摘要
本發(fā)明提出用于計算機生成兵力仿真系統(tǒng)的數(shù)據(jù)池及其實現(xiàn)方法,用于管理仿真對象之間的數(shù)據(jù)交互。其中,數(shù)據(jù)池包括模板組、數(shù)據(jù)接口節(jié)點和節(jié)點管理對象,模板組提供模板對象對多種類型數(shù)據(jù)封裝,數(shù)據(jù)接口節(jié)點對數(shù)據(jù)進(jìn)一步封裝,節(jié)點管理對象將索引名稱與數(shù)據(jù)接口節(jié)點綁定。數(shù)據(jù)池實現(xiàn)方法主要通過創(chuàng)建模板對象、實現(xiàn)數(shù)據(jù)接口節(jié)點與節(jié)點管理對象,實現(xiàn)了對仿真對象的數(shù)據(jù)封裝,仿真對象通過索引名稱可向數(shù)據(jù)池查詢數(shù)據(jù)。仿真對象最終通過指針操作獲取數(shù)據(jù),仿真對象之間無耦合關(guān)系,數(shù)據(jù)的訪問效率比較高,為仿真系統(tǒng)的開發(fā)和集成提供了便利,并且本發(fā)明的數(shù)據(jù)池能夠以模塊化的方式逐步擴展新功能,實現(xiàn)了開放性的擴展能力。
文檔編號G06F17/30GK101872358SQ201010197089
公開日2010年10月27日 申請日期2010年6月2日 優(yōu)先權(quán)日2010年6月2日
發(fā)明者劉凌宇, 馬耀飛, 龔光紅 申請人:北京航空航天大學(xué)