本发明涉及一种模型描述及生成方法,具体地说是一种支持组合模型的模型描述及生成方法,属于模型描述及生成方法领域。
背景技术:
建模技术是系统仿真过程最基础、也是最重要的一个环节,一定程度上决定了系统运行效率和仿真推演的成功率。仿真系统的模型体系中除指挥决策模型、侦察探测模型、通信传输模型、信息融合模型、仿真实体模型和战场环境模型,还包括作战行动中所涉及的各类作战实体模型和实体之间的交互关系模型等等。
上述模型在逻辑层面存在较大差异,目前市面中难以对其结构统一,只能依据实际业务体系,在具体的业务中建立支撑体系,无法实现仿真界广义的通用。因此,从底层设计的角度对模型做一个通盘统一的考虑,加强系统仿真中建模体系的总体规划与设计,实现一种通用的模型生成方法,提高模型描述与开发的标准化、规范化程度,增强模型的独立性和可组合性,极大地实现模型的可复用性,特别是对系统集成具有更重要的意义。
技术实现要素:
为了解决上述问题,本发明设计了一种支持组合模型的模型描述及生成方法,实现了系统仿真领域内的模型通用分类,将领域内模型统一归类,通用处理;并实现了模型的通用描述方法,实现了模型的构件化,所有模型接口、参数统一标准,便于系统中数据、指令的通信。
本发明的技术方案为:
一种支持组合模型的模型描述及生成方法,包含通用的模型分类方法、模型的通用结构组成、支持组合模型的描述方法、模型的通用生成方法四个部分,具体内容如下:
(1)通用的模型分类方法
为满足模型的通用性需求,将系统仿真行业内的所有模型归类,分为六类模型,包括实体模型、计算模型、显示组件、算子模型、业务构件和通用插件;其中实体模型指自然界所有可以独立工作,并输出工作成果的物体集合,比如飞机模型、火箭模型等。计算模型是指数学领域内涉及到的所有计算公式或者计算方法共同组成模型,比如求正弦模型、求微积分模型等。显示组件是指仿真系统中用于形象化展示仿真过程某一个或者多个模型的属性集信息的组件,此类组件有独立的界面,并且可人工设置显示界面,比如曲线图显示组件、二维GIS显示组件等。算子模型是指为一个方案或者系统仿真执行过程特殊定制的评估计算模型,依据不同的评估方法可以生成多种评估模型,例如飞机飞行速度分布算子模型。业务构件一般具有独立业务性,具有某一项独立的功能,大部分业务构件包含界面,可以响应用户人机交互操作,并执行预先编排好的业务功能,实现与其他构件或者模型的交互,比如想定工程列表树构件、日志栏构件等。通用插件一般指数据指令传输、信号解析、界面预处理等在仿真系统中常用的中间件,比如网络消息中间件插件、单机仿真引擎插件等。
(2)模型的通用结构组成
所有的模型分为六类,但是六类模型具有通用的结构组成,任意一个模型都包含基本信息、属性信息、输入接口、输出接口、发起事件、响应事件六大类属性组成。其中基本信息描述创建模型时的版权及类别信息等;属性信息描述模型的静态信息;输入接口描述在仿真过程中模型需要接收的参数信息;输出接口描述在仿真过程中模型能够提供的参数信息;发起事件描述在仿真过程中满足触发条件或触发时间,模型能够触发的事件集;响应事件描述在仿真过程中模型本体需要响应其他模型对应的发起事件集。模型的各个属性结点中都需要数据类型的支持,除支持基本类型,还可以支持用户自定义的数据类型,因此模型的描述中还需要包含自定义数据结构,支持设计人员按照自身业务需要的数据定义。
(3)支持组合模型的描述方法
用于依据实际的业务需要,可以对已开发模型进行任意组合配置,组合后可以当成一个基本模型使用,使用方式与非组合基本模型相同。组合模型中,有且仅有一个父模型,多个子模型;父模型属性结构内添加了组合模型的描述信息。
(4)模型的通用生成方法
一、依据模型的分类特征建立通用的工程模板,还可以分别定义各个模型类别的模板,模板中包含模型计算需要的公共接口,包括数据初始化、仿真运行、数据公布、数据订购、状态控制等功能接口。在模板中涉及到模型参数信息的部分,均用<$Name$>的格式替代,其中Name为模板属性,人为定义生成。模板中需要包含可编译执行的头文件、源文件、配置文件、工程文件,可以包含不同扩展名的工程文件。
二、配置模板与模型的属性关联映射,模板的属性是指<$Name$>中Name字段,模型的属性是指按照上述既定格式定义的模型各个信息结点字段,两类属性的映射关系为1:1,不允许出现1:N或者M:N的映射关系。
三、关联映射完成后,将模型的属性信息、输入接口、输出接口、发起事件、响应事件共五类参数结构,按照参数的可使用范围、参数类型、参数值的顺序读取并依据映射表替代模板的所有属性字段。
四、若模型的组合模型属性中有子模型结点,需要将对应的母体模型编号关联映射,并将母体模型的属性信息、输入参数、输出参数、发起事件、响应事件实参映射,即在计算中母体模型的参数相当于模型本体的参数来用;若模型的组合模型属性中有母体模型结点,需要将对应的所有子模型编号关联映射,并将子模型的全部属性信息、输入参数、输出参数、发起事件、响应事件信息映射到母体模型中,作为模型本体的子属性集合。
五、将模板文件名修改为模型英文名称,批量导出文件。至此,成功生成可编译执行的模型工程。
本发明有如下优点:以评估指标体系、数据评估分析算子模型和工具为支撑,为各种应用数据、仿真结果提供有力的定性定量分析,为决策制定、方案评估优化等提供支持,实现了系统仿真领域内的模型通用分类,将领域内模型统一归类,通用处理;并实现了模型的通用描述方法,实现了模型的构件化,所有模型接口、参数统一标准,便于系统中数据、指令的通信。
附图说明
图1为系统仿真行业模型通用分类图;
图2为模型通用结构组成图;
图3为模型的通用生成方法步骤图。
具体实施方式
以下对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
实施例1
一种支持组合模型的模型描述及生成方法,包含通用的模型分类方法、模型的通用结构组成、支持组合模型的描述方法、模型的通用生成方法四个部分,具体内容如下:
(1)通用的模型分类方法
为满足模型的通用性需求,将系统仿真行业内的所有模型归类,分为六类模型,包括实体模型、计算模型、显示组件、算子模型、业务构件和通用插件,见附图 1所示。其中实体模型指自然界所有可以独立工作,并输出工作成果的物体集合,比如飞机模型、火箭模型等。计算模型是指数学领域内涉及到的所有计算公式或者计算方法共同组成模型,比如求正弦模型、求微积分模型等。显示组件是指仿真系统中用于形象化展示仿真过程某一个或者多个模型的属性集信息的组件,此类组件有独立的界面,并且可人工设置显示界面,比如曲线图显示组件、二维GIS显示组件等。算子模型是指为一个方案或者系统仿真执行过程特殊定制的评估计算模型,依据不同的评估方法可以生成多种评估模型,例如飞机飞行速度分布算子模型。业务构件一般具有独立业务性,具有某一项独立的功能,大部分业务构件包含界面,可以响应用户人机交互操作,并执行预先编排好的业务功能,实现与其他构件或者模型的交互,比如想定工程列表树构件、日志栏构件等。通用插件一般指数据指令传输、信号解析、界面预处理等在仿真系统中常用的中间件,比如网络消息中间件插件、单机仿真引擎插件等。
(2)模型的通用结构组成
所有的模型分为六类,但是六类模型具有通用的结构组成,结构组成如附图2所示。任意一个模型都包含基本信息、属性信息、输入接口、输出接口、发起事件、响应事件六大类属性组成。其中基本信息描述创建模型时的版权及类别信息等;属性信息描述模型的静态信息;输入接口描述在仿真过程中模型需要接收的参数信息;输出接口描述在仿真过程中模型能够提供的参数信息;发起事件描述在仿真过程中满足触发条件或触发时间,模型能够触发的事件集;响应事件描述在仿真过程中模型本体需要响应其他模型对应的发起事件集。其中,模型的基本信息如表1所示,模型的属性信息如表2所示,模型的输入接口如表3所示,模型的输出接口如表4所示,模型的发起事件如表5所示,模型的响应事件如表6所示。模型的各个属性结点中都需要数据类型的支持,除支持基本类型,还可以支持用户自定义的数据类型,因此模型的描述中还需要包含自定义数据结构,支持设计人员按照自身业务需要的数据定义,如表7所示。
(3)支持组合模型的描述方法
用于依据实际的业务需要,可以对已开发模型进行任意组合配置,组合后可以当成一个基本模型使用,使用方式与非组合基本模型相同。组合模型中,有且仅有一个父模型,多个子模型;父模型属性结构内添加了组合模型的描述信息,描述信息如表8所示。
(4)模型的通用生成方法
一、依据模型的分类特征建立通用的工程模板,还可以分别定义各个模型类别的模板,模板中包含模型计算需要的公共接口,包括数据初始化、仿真运行、数据公布、数据订购、状态控制等功能接口,如表9所示。在模板中涉及到模型参数信息的部分,均用<$Name$>的格式替代,其中Name为模板属性,人为定义生成。模板中需要包含可编译执行的头文件、源文件、配置文件、工程文件,可以包含不同扩展名的工程文件。
二、配置模板与模型的属性关联映射,模板的属性是指<$Name$>中Name字段,模型的属性是指按照上述既定格式定义的模型各个信息结点字段,两类属性的映射关系为1:1,不允许出现1:N或者M:N的映射关系。
三、关联映射完成后,将模型的属性信息、输入接口、输出接口、发起事件、响应事件共五类参数结构,按照参数的可使用范围、参数类型、参数值的顺序读取并依据映射表替代模板的所有属性字段。
四、若模型的组合模型属性中有子模型结点,需要将对应的母体模型编号关联映射,并将母体模型的属性信息、输入参数、输出参数、发起事件、响应事件实参映射,即在计算中母体模型的参数相当于模型本身的参数来用;若模型的组合模型属性中有母体模型结点,需要将对应的所有子模型编号关联映射,并将子模型的全部属性信息、输入参数、输出参数、发起事件、响应事件信息映射到母体模型中,作为本模型的子属性集合。
五、将模板文件名修改为模型英文名称,批量导出文件。至此,成功生成可编译执行的模型工程,生成流程如图3所示。
拿实体模型举例,新建一个通信卫星实体模型,将模型的描述文件扩展名定义为.mdc,并采用xml的语法结构存储,由于卫星模型是单例实体,非组合模型,所以不包含组合描述结构,建成后的结构如下:
<!-- TIS - Model Data Configuration -->
<MDC>
<Basic NameEn="CHINASAT_6" NameCn="通信卫星" Type="实体模型" CLSID="F484F5C9-11BA-485a-825F-6792B42BC9FC" ScenarioID="" NameEnPln="pleSatelliteD" NameCnPln="通信卫星" Version="V0.0.0.1" CreateDate="2015-6-22 09:09:26" ModificationDate="2015-8-22 09:40:04" SecurityClassification="Unclassified" Purpose="卫星仿真案例" Description="卫星仿真案例">
<POC POCName="TIS" POCOrganization="TIS" POCTelephone="13XXXXXXXXX" POCEmail="tis@css.com.cn"/>
<Glyph Path="CHINASAT_6.png" Type="png" Alternate="通信卫星" Height="48" Width="48"/>
</Basic>
<Property>
<g n="Schedule" v="true" r="想定参数">
<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="两行星历参数文件"> 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);
// 更新输入数据
long dataUpdate();
// 更新输出数据
long dataPublish();
// 添加public访问标记的通用成员函数
MEMBER_FUNCS_DECLARE()
protected:
/**********************************************************************
* 函数名称:CPle<$Name$>()
* 函数功能:构造函数。
* 输入参数:无。
* 输出参数:无。
* 函数返回:无。
* 特殊说明:无。
**********************************************************************/
CPle<$Name$>(void);
/**********************************************************************
* 函数名称:~CPle<$Name$>()
* 函数功能:析构函数。
* 输入参数:无。
* 输出参数:无。
* 函数返回:无。
* 特殊说明:无。
**********************************************************************/
~CPle<$Name$>(void);
/**********************************************************************
* 函数名称:setUserDefinePropertyValue()
* 函数功能:设置用户自定义属性值。
* 输入参数:strName -- 属性名称。
* pValue -- 属性值。
* nBytes -- 属性值占用的字节数。
* 输出参数:无。
* 函数返回:无。
* 特殊说明:在setPropertyValue中被调用。
**********************************************************************/
void setUserDefinePropertyValue(const std::wstring &strName, char *pValue, int nBytes);
/**********************************************************************
* 函数名称:setUserDefineOutputValue()
* 函数功能:设置用户自定义输出参数值。
* 输入参数:strName -- 输出参数名称。
* pValue -- 输出参数值。
* nBytes -- 输出参数值占用的字节数。
* 输出参数:无。
* 函数返回:无。
* 特殊说明:在setOutputValue中被调用。
**********************************************************************/
void setUserDefineOutputValue(const std::wstring &strName, char *pValue, int nBytes);
/**********************************************************************
* 函数名称:setUserDefineInputValue()
* 函数功能:设置用户自定义输入参数值。
* 输入参数:strName -- 输入参数名称。
* pValue -- 输入参数值。
* nBytes -- 输入参数值占用的字节数。
* 输出参数:无。
* 函数返回:无。
* 特殊说明:在setInputValue中被调用。
**********************************************************************/
void setUserDefineInputValue(const std::wstring &strName, char *pValue, int nBytes);
private:
protected:
// 通用数据成员
DECLARE_MODELDATA_MAP()
// 模型模板内部变量(包括输入、输出和属性)
BEGIN_INTERNAL_VARIABLE_RECD_PART()
<$DeclareModelDataMap$>
// 模型位置变量声明
MODEL_POSITION_VARIABLE()
END_INTERNAL_VARIABLE_RECD_PART()
// ============== 其他数据成员 ===================================
CTFileMPCOperate m_mpcFile; // MPC文件操作类对象
// ============== 模板中的数据成员 ===============================
protected:
<$PropertyDefineH$>
};
#endif // _AFX_PLE<$Name$>_TIS_CSS_SMILESANGEL_INCLUDED_
模板中<$Name$>、<$U_Name$>、<$DeclareModelDataMap$>、<$PropertyDefineH$>分别与模型的NameEn、NameEnPln、Basic-Name做映射,再依据模型的属性值做替换,应用通用的模型生成方法生成模型工程,最后编译生成模型插件。至此,生成一套完整的模型工程。