本發(fā)明涉及一種模型描述及生成方法,具體地說是一種支持組合模型的模型描述及生成方法,屬于模型描述及生成方法領域。
背景技術:
建模技術是系統(tǒng)仿真過程最基礎、也是最重要的一個環(huán)節(jié),一定程度上決定了系統(tǒng)運行效率和仿真推演的成功率。仿真系統(tǒng)的模型體系中除指揮決策模型、偵察探測模型、通信傳輸模型、信息融合模型、仿真實體模型和戰(zhàn)場環(huán)境模型,還包括作戰(zhàn)行動中所涉及的各類作戰(zhàn)實體模型和實體之間的交互關系模型等等。
上述模型在邏輯層面存在較大差異,目前市面中難以對其結構統(tǒng)一,只能依據(jù)實際業(yè)務體系,在具體的業(yè)務中建立支撐體系,無法實現(xiàn)仿真界廣義的通用。因此,從底層設計的角度對模型做一個通盤統(tǒng)一的考慮,加強系統(tǒng)仿真中建模體系的總體規(guī)劃與設計,實現(xiàn)一種通用的模型生成方法,提高模型描述與開發(fā)的標準化、規(guī)范化程度,增強模型的獨立性和可組合性,極大地實現(xiàn)模型的可復用性,特別是對系統(tǒng)集成具有更重要的意義。
技術實現(xiàn)要素:
為了解決上述問題,本發(fā)明設計了一種支持組合模型的模型描述及生成方法,實現(xiàn)了系統(tǒng)仿真領域內的模型通用分類,將領域內模型統(tǒng)一歸類,通用處理;并實現(xiàn)了模型的通用描述方法,實現(xiàn)了模型的構件化,所有模型接口、參數(shù)統(tǒng)一標準,便于系統(tǒng)中數(shù)據(jù)、指令的通信。
本發(fā)明的技術方案為:
一種支持組合模型的模型描述及生成方法,包含通用的模型分類方法、模型的通用結構組成、支持組合模型的描述方法、模型的通用生成方法四個部分,具體內容如下:
(1)通用的模型分類方法
為滿足模型的通用性需求,將系統(tǒng)仿真行業(yè)內的所有模型歸類,分為六類模型,包括實體模型、計算模型、顯示組件、算子模型、業(yè)務構件和通用插件;其中實體模型指自然界所有可以獨立工作,并輸出工作成果的物體集合,比如飛機模型、火箭模型等。計算模型是指數(shù)學領域內涉及到的所有計算公式或者計算方法共同組成模型,比如求正弦模型、求微積分模型等。顯示組件是指仿真系統(tǒng)中用于形象化展示仿真過程某一個或者多個模型的屬性集信息的組件,此類組件有獨立的界面,并且可人工設置顯示界面,比如曲線圖顯示組件、二維GIS顯示組件等。算子模型是指為一個方案或者系統(tǒng)仿真執(zhí)行過程特殊定制的評估計算模型,依據(jù)不同的評估方法可以生成多種評估模型,例如飛機飛行速度分布算子模型。業(yè)務構件一般具有獨立業(yè)務性,具有某一項獨立的功能,大部分業(yè)務構件包含界面,可以響應用戶人機交互操作,并執(zhí)行預先編排好的業(yè)務功能,實現(xiàn)與其他構件或者模型的交互,比如想定工程列表樹構件、日志欄構件等。通用插件一般指數(shù)據(jù)指令傳輸、信號解析、界面預處理等在仿真系統(tǒng)中常用的中間件,比如網(wǎng)絡消息中間件插件、單機仿真引擎插件等。
(2)模型的通用結構組成
所有的模型分為六類,但是六類模型具有通用的結構組成,任意一個模型都包含基本信息、屬性信息、輸入接口、輸出接口、發(fā)起事件、響應事件六大類屬性組成。其中基本信息描述創(chuàng)建模型時的版權及類別信息等;屬性信息描述模型的靜態(tài)信息;輸入接口描述在仿真過程中模型需要接收的參數(shù)信息;輸出接口描述在仿真過程中模型能夠提供的參數(shù)信息;發(fā)起事件描述在仿真過程中滿足觸發(fā)條件或觸發(fā)時間,模型能夠觸發(fā)的事件集;響應事件描述在仿真過程中模型本體需要響應其他模型對應的發(fā)起事件集。模型的各個屬性結點中都需要數(shù)據(jù)類型的支持,除支持基本類型,還可以支持用戶自定義的數(shù)據(jù)類型,因此模型的描述中還需要包含自定義數(shù)據(jù)結構,支持設計人員按照自身業(yè)務需要的數(shù)據(jù)定義。
(3)支持組合模型的描述方法
用于依據(jù)實際的業(yè)務需要,可以對已開發(fā)模型進行任意組合配置,組合后可以當成一個基本模型使用,使用方式與非組合基本模型相同。組合模型中,有且僅有一個父模型,多個子模型;父模型屬性結構內添加了組合模型的描述信息。
(4)模型的通用生成方法
一、依據(jù)模型的分類特征建立通用的工程模板,還可以分別定義各個模型類別的模板,模板中包含模型計算需要的公共接口,包括數(shù)據(jù)初始化、仿真運行、數(shù)據(jù)公布、數(shù)據(jù)訂購、狀態(tài)控制等功能接口。在模板中涉及到模型參數(shù)信息的部分,均用<$Name$>的格式替代,其中Name為模板屬性,人為定義生成。模板中需要包含可編譯執(zhí)行的頭文件、源文件、配置文件、工程文件,可以包含不同擴展名的工程文件。
二、配置模板與模型的屬性關聯(lián)映射,模板的屬性是指<$Name$>中Name字段,模型的屬性是指按照上述既定格式定義的模型各個信息結點字段,兩類屬性的映射關系為1:1,不允許出現(xiàn)1:N或者M:N的映射關系。
三、關聯(lián)映射完成后,將模型的屬性信息、輸入接口、輸出接口、發(fā)起事件、響應事件共五類參數(shù)結構,按照參數(shù)的可使用范圍、參數(shù)類型、參數(shù)值的順序讀取并依據(jù)映射表替代模板的所有屬性字段。
四、若模型的組合模型屬性中有子模型結點,需要將對應的母體模型編號關聯(lián)映射,并將母體模型的屬性信息、輸入?yún)?shù)、輸出參數(shù)、發(fā)起事件、響應事件實參映射,即在計算中母體模型的參數(shù)相當于模型本體的參數(shù)來用;若模型的組合模型屬性中有母體模型結點,需要將對應的所有子模型編號關聯(lián)映射,并將子模型的全部屬性信息、輸入?yún)?shù)、輸出參數(shù)、發(fā)起事件、響應事件信息映射到母體模型中,作為模型本體的子屬性集合。
五、將模板文件名修改為模型英文名稱,批量導出文件。至此,成功生成可編譯執(zhí)行的模型工程。
本發(fā)明有如下優(yōu)點:以評估指標體系、數(shù)據(jù)評估分析算子模型和工具為支撐,為各種應用數(shù)據(jù)、仿真結果提供有力的定性定量分析,為決策制定、方案評估優(yōu)化等提供支持,實現(xiàn)了系統(tǒng)仿真領域內的模型通用分類,將領域內模型統(tǒng)一歸類,通用處理;并實現(xiàn)了模型的通用描述方法,實現(xiàn)了模型的構件化,所有模型接口、參數(shù)統(tǒng)一標準,便于系統(tǒng)中數(shù)據(jù)、指令的通信。
附圖說明
圖1為系統(tǒng)仿真行業(yè)模型通用分類圖;
圖2為模型通用結構組成圖;
圖3為模型的通用生成方法步驟圖。
具體實施方式
以下對本發(fā)明的優(yōu)選實施例進行說明,應當理解,此處所描述的優(yōu)選實施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。
實施例1
一種支持組合模型的模型描述及生成方法,包含通用的模型分類方法、模型的通用結構組成、支持組合模型的描述方法、模型的通用生成方法四個部分,具體內容如下:
(1)通用的模型分類方法
為滿足模型的通用性需求,將系統(tǒng)仿真行業(yè)內的所有模型歸類,分為六類模型,包括實體模型、計算模型、顯示組件、算子模型、業(yè)務構件和通用插件,見附圖 1所示。其中實體模型指自然界所有可以獨立工作,并輸出工作成果的物體集合,比如飛機模型、火箭模型等。計算模型是指數(shù)學領域內涉及到的所有計算公式或者計算方法共同組成模型,比如求正弦模型、求微積分模型等。顯示組件是指仿真系統(tǒng)中用于形象化展示仿真過程某一個或者多個模型的屬性集信息的組件,此類組件有獨立的界面,并且可人工設置顯示界面,比如曲線圖顯示組件、二維GIS顯示組件等。算子模型是指為一個方案或者系統(tǒng)仿真執(zhí)行過程特殊定制的評估計算模型,依據(jù)不同的評估方法可以生成多種評估模型,例如飛機飛行速度分布算子模型。業(yè)務構件一般具有獨立業(yè)務性,具有某一項獨立的功能,大部分業(yè)務構件包含界面,可以響應用戶人機交互操作,并執(zhí)行預先編排好的業(yè)務功能,實現(xiàn)與其他構件或者模型的交互,比如想定工程列表樹構件、日志欄構件等。通用插件一般指數(shù)據(jù)指令傳輸、信號解析、界面預處理等在仿真系統(tǒng)中常用的中間件,比如網(wǎng)絡消息中間件插件、單機仿真引擎插件等。
(2)模型的通用結構組成
所有的模型分為六類,但是六類模型具有通用的結構組成,結構組成如附圖2所示。任意一個模型都包含基本信息、屬性信息、輸入接口、輸出接口、發(fā)起事件、響應事件六大類屬性組成。其中基本信息描述創(chuàng)建模型時的版權及類別信息等;屬性信息描述模型的靜態(tài)信息;輸入接口描述在仿真過程中模型需要接收的參數(shù)信息;輸出接口描述在仿真過程中模型能夠提供的參數(shù)信息;發(fā)起事件描述在仿真過程中滿足觸發(fā)條件或觸發(fā)時間,模型能夠觸發(fā)的事件集;響應事件描述在仿真過程中模型本體需要響應其他模型對應的發(fā)起事件集。其中,模型的基本信息如表1所示,模型的屬性信息如表2所示,模型的輸入接口如表3所示,模型的輸出接口如表4所示,模型的發(fā)起事件如表5所示,模型的響應事件如表6所示。模型的各個屬性結點中都需要數(shù)據(jù)類型的支持,除支持基本類型,還可以支持用戶自定義的數(shù)據(jù)類型,因此模型的描述中還需要包含自定義數(shù)據(jù)結構,支持設計人員按照自身業(yè)務需要的數(shù)據(jù)定義,如表7所示。
(3)支持組合模型的描述方法
用于依據(jù)實際的業(yè)務需要,可以對已開發(fā)模型進行任意組合配置,組合后可以當成一個基本模型使用,使用方式與非組合基本模型相同。組合模型中,有且僅有一個父模型,多個子模型;父模型屬性結構內添加了組合模型的描述信息,描述信息如表8所示。
(4)模型的通用生成方法
一、依據(jù)模型的分類特征建立通用的工程模板,還可以分別定義各個模型類別的模板,模板中包含模型計算需要的公共接口,包括數(shù)據(jù)初始化、仿真運行、數(shù)據(jù)公布、數(shù)據(jù)訂購、狀態(tài)控制等功能接口,如表9所示。在模板中涉及到模型參數(shù)信息的部分,均用<$Name$>的格式替代,其中Name為模板屬性,人為定義生成。模板中需要包含可編譯執(zhí)行的頭文件、源文件、配置文件、工程文件,可以包含不同擴展名的工程文件。
二、配置模板與模型的屬性關聯(lián)映射,模板的屬性是指<$Name$>中Name字段,模型的屬性是指按照上述既定格式定義的模型各個信息結點字段,兩類屬性的映射關系為1:1,不允許出現(xiàn)1:N或者M:N的映射關系。
三、關聯(lián)映射完成后,將模型的屬性信息、輸入接口、輸出接口、發(fā)起事件、響應事件共五類參數(shù)結構,按照參數(shù)的可使用范圍、參數(shù)類型、參數(shù)值的順序讀取并依據(jù)映射表替代模板的所有屬性字段。
四、若模型的組合模型屬性中有子模型結點,需要將對應的母體模型編號關聯(lián)映射,并將母體模型的屬性信息、輸入?yún)?shù)、輸出參數(shù)、發(fā)起事件、響應事件實參映射,即在計算中母體模型的參數(shù)相當于模型本身的參數(shù)來用;若模型的組合模型屬性中有母體模型結點,需要將對應的所有子模型編號關聯(lián)映射,并將子模型的全部屬性信息、輸入?yún)?shù)、輸出參數(shù)、發(fā)起事件、響應事件信息映射到母體模型中,作為本模型的子屬性集合。
五、將模板文件名修改為模型英文名稱,批量導出文件。至此,成功生成可編譯執(zhí)行的模型工程,生成流程如圖3所示。
拿實體模型舉例,新建一個通信衛(wèi)星實體模型,將模型的描述文件擴展名定義為.mdc,并采用xml的語法結構存儲,由于衛(wèi)星模型是單例實體,非組合模型,所以不包含組合描述結構,建成后的結構如下:
<!-- TIS - Model Data Configuration -->
<MDC>
<Basic NameEn="CHINASAT_6" NameCn="通信衛(wèi)星" Type="實體模型" CLSID="F484F5C9-11BA-485a-825F-6792B42BC9FC" ScenarioID="" NameEnPln="pleSatelliteD" NameCnPln="通信衛(wèi)星" Version="V0.0.0.1" CreateDate="2015-6-22 09:09:26" ModificationDate="2015-8-22 09:40:04" SecurityClassification="Unclassified" Purpose="衛(wèi)星仿真案例" Description="衛(wèi)星仿真案例">
<POC POCName="TIS" POCOrganization="TIS" POCTelephone="13XXXXXXXXX" POCEmail="tis@css.com.cn"/>
<Glyph Path="CHINASAT_6.png" Type="png" Alternate="通信衛(wèi)星" Height="48" Width="48"/>
</Basic>
<Property>
<g n="Schedule" v="true" r="想定參數(shù)">
<pp n="InitPos" t="StPos" u="NULL" r="初始位置"></pp>
</g>
<g n="Basic" v="true" r="基礎屬性">
<pp n="Name" t="string" u="NULL" r="名稱">CHINASAT_6</pp>
<pp n="TleFile" t="string" u="NULL" r="兩行星歷參數(shù)文件"> CHINASAT_6.tle</pp>
</g>
</Property>
<Input/>
<Output>
<g n="空間位置" r="當前位置">
<op n="CurPos" t="StPos" u="NULL" r="當前位置"/>
</g>
</Output>
<Event>
<EI/>
<EO/>
</Event>
<ChildModel/>
<Userdefine>
<s n="StPos" r="空間位置">
<sp n="lon" t="double" u="度" r="lon"/>
<sp n="lat" t="double" u="度" r="lat"/>
<sp n="alt" t="double" u="米" r="alt"/>
</s>
</Userdefine>
</MDC>
生成模型的配置文件后,再定義模型的工程模板文件,拿模型的可編譯頭文件舉例,模板定義為如下結構:
//=================================================================
// Copyright(C), CSS Inc. 2015.
// Summary:
// ple 實體模型 <$Name$>
// Aauthor:
//
// Date:
// 2015-08-12
// Remark:
// <$Name$>實體模型
// Usage:
// <$Name$>實體模型
// History:
// <author> <time> <version > <desc>
// 2015/08/12 1.0 build this moudle
//=================================================================
#ifndef _AFX_PLE<$U_Name$>_TIS_CSS_SMILESANGEL_INCLUDED_
#define _AFX_PLE<$U_Name$>_TIS_CSS_SMILESANGEL_INCLUDED_
#include "module/plugininc.h"
#include "pleclsiddefine.h"
class CPle<$Name$> : public ITPleModelBase
{
X3BEGIN_CLASS_DECLARE(CPle<$Name$>, CLSIDple<$Name$>)
X3DEFINE_INTERFACE_ENTRY(ITPlx_Model)
X3END_CLASS_DECLARE()
public:
// 模型初始化
int init(std::wstring strNameEn, std::wstring strDir);
// 仿真運行
int run(long long llTime);
// 復位
int reset(void);
// 更新輸入數(shù)據(jù)
long dataUpdate();
// 更新輸出數(shù)據(jù)
long dataPublish();
// 添加public訪問標記的通用成員函數(shù)
MEMBER_FUNCS_DECLARE()
protected:
/**********************************************************************
* 函數(shù)名稱:CPle<$Name$>()
* 函數(shù)功能:構造函數(shù)。
* 輸入?yún)?shù):無。
* 輸出參數(shù):無。
* 函數(shù)返回:無。
* 特殊說明:無。
**********************************************************************/
CPle<$Name$>(void);
/**********************************************************************
* 函數(shù)名稱:~CPle<$Name$>()
* 函數(shù)功能:析構函數(shù)。
* 輸入?yún)?shù):無。
* 輸出參數(shù):無。
* 函數(shù)返回:無。
* 特殊說明:無。
**********************************************************************/
~CPle<$Name$>(void);
/**********************************************************************
* 函數(shù)名稱:setUserDefinePropertyValue()
* 函數(shù)功能:設置用戶自定義屬性值。
* 輸入?yún)?shù):strName -- 屬性名稱。
* pValue -- 屬性值。
* nBytes -- 屬性值占用的字節(jié)數(shù)。
* 輸出參數(shù):無。
* 函數(shù)返回:無。
* 特殊說明:在setPropertyValue中被調用。
**********************************************************************/
void setUserDefinePropertyValue(const std::wstring &strName, char *pValue, int nBytes);
/**********************************************************************
* 函數(shù)名稱:setUserDefineOutputValue()
* 函數(shù)功能:設置用戶自定義輸出參數(shù)值。
* 輸入?yún)?shù):strName -- 輸出參數(shù)名稱。
* pValue -- 輸出參數(shù)值。
* nBytes -- 輸出參數(shù)值占用的字節(jié)數(shù)。
* 輸出參數(shù):無。
* 函數(shù)返回:無。
* 特殊說明:在setOutputValue中被調用。
**********************************************************************/
void setUserDefineOutputValue(const std::wstring &strName, char *pValue, int nBytes);
/**********************************************************************
* 函數(shù)名稱:setUserDefineInputValue()
* 函數(shù)功能:設置用戶自定義輸入?yún)?shù)值。
* 輸入?yún)?shù):strName -- 輸入?yún)?shù)名稱。
* pValue -- 輸入?yún)?shù)值。
* nBytes -- 輸入?yún)?shù)值占用的字節(jié)數(shù)。
* 輸出參數(shù):無。
* 函數(shù)返回:無。
* 特殊說明:在setInputValue中被調用。
**********************************************************************/
void setUserDefineInputValue(const std::wstring &strName, char *pValue, int nBytes);
private:
protected:
// 通用數(shù)據(jù)成員
DECLARE_MODELDATA_MAP()
// 模型模板內部變量(包括輸入、輸出和屬性)
BEGIN_INTERNAL_VARIABLE_RECD_PART()
<$DeclareModelDataMap$>
// 模型位置變量聲明
MODEL_POSITION_VARIABLE()
END_INTERNAL_VARIABLE_RECD_PART()
// ============== 其他數(shù)據(jù)成員 ===================================
CTFileMPCOperate m_mpcFile; // MPC文件操作類對象
// ============== 模板中的數(shù)據(jù)成員 ===============================
protected:
<$PropertyDefineH$>
};
#endif // _AFX_PLE<$Name$>_TIS_CSS_SMILESANGEL_INCLUDED_
模板中<$Name$>、<$U_Name$>、<$DeclareModelDataMap$>、<$PropertyDefineH$>分別與模型的NameEn、NameEnPln、Basic-Name做映射,再依據(jù)模型的屬性值做替換,應用通用的模型生成方法生成模型工程,最后編譯生成模型插件。至此,生成一套完整的模型工程。