科技创新与应用
设计创新基于Matlab模型的HLA仿真系统设计2
李占丽1,,史晓萌1,高
2
琳1,(1.中国电子科技集团公司第二十七研究所,河南郑州450047;2.郑州市水下信息系统技术重点实验室,河南郑州450047)
摘要:文章介绍了基于HLA的仿真系统的开发过程,重点说明了基于VR-Link的联邦成员的开发过程和开发过程中需要注意
针对Matlab仿真模型,的问题。设计了适配器,实现了Matlab仿真模型与HLA/RTI的数据交互,可以对类似的HLA应用开发起到借鉴作用。
关键词:HLA;VR-Link;Matlab适配器中图分类号院TP391.9
文献标志码院A
文章编号院2095-2945渊2020冤02-0085-03
actionbetweenMatlabsimulationmodelandHLA/RTI,ItcanbeusedforreferenceinsimilarHLAapplications.
Keywords:HLA;VR-Link;Matlabadapter
baseonVR-Linkandtheproblemsareemphasized.ForMatlabsimulationmodel,theadapterisdesigned,torealizedthedatainter鄄
Abstract:ThispaperintroducesthedevelopmentprocessofHLA-basedsimulationsystem,thedevelopmentprocessoffederate
1概述
高层体系结构HLA(HighLevelArchitecture)是美国国防部提出的一个分布式仿真技术框架,它的主要目的是解决仿真应用的互操作性和仿真资源的可重用性问题。它
仿真运行通过运行支撑环境RTI将具体的仿真功能实现、
管理和底层传输三者分离,隐蔽它们各自的实现细节,使各个部分可以相对地开发,实现应用系统的即插即用。
VR-Link对RTI函数进行了封装,提供了可以使联邦成员创建工作更容易的高层功能,使开发人员重点专注于仿真模型的设计,大大减少他们的工作量。
Matlab是用以开发数值模型的强大建模和分析工具,但是Matlab本身并不支持HLA/RTI,设计Matlab适配器,使Matlab仿真模型能够参与到基于HLA的协同仿真中来,可以提高系统开发的效率。
2开发过程
(FCM)2.1联邦概念模型开发
联邦的概念模型是对问题域的抽象,是在需求和实现之间架起的一座桥梁。主要任务是对系统的组成和行为进行宏观的描述,包括仿真系统的构成和工作过程。
(FOM)2.2联邦对象模型设计
FOM的设计是整个仿真系统的开发过程中一个重要的部分,开发FOM的过程,是对仿真系统中的交互数据进行抽象和建模的过程,其一般步骤为:
(1)分解仿真任务,确定联邦成员及其实体类型和事件;
(2)确定FOM中的对象类和交互类;(3)确定对象类属性和交互类参数的特性;
(SOM)(4)生成仿真对象模型表;
(5)综合SOM表,生成FOM表。
2.3生成FED(FederationExecutionData)文件
FED文件是FOM开发的结果,用于向RTI和VR-Link提供FOM表的信息。在开发时,可以根据FOM表对FED文件进行修改,以满足系统的需求。
2.4联邦成员开发
联邦成员需要与联邦中的其他成员共同实现FCM中定义的联邦需求。根据FCM映射到本联邦成员需要实现的功能,开发联邦成员。VR-Link的开发联邦成员的过程为:
(1)创建并加入联邦仿真开始时,需要通过DtExerciseConn产生联邦,如果联邦已经产生,则加入联邦。需要注意的是,构造DtExer原ciseConn时,必须提供联邦执行名和联邦成员名,并且同一联邦的联邦执行名和FED文件名必须相同。
DtExerciseConnexConn;
exConn=newDtExerciseConn(execName,fedName,DtRprFomMapper::create(0),\"VR-Link.FED\",0);
如果用户不向DtExerciseConn构造函数提供FED文件的名称,则假设FED文件名与联邦执行的名称相同,VR-Link会在运行的程序所在的目录中寻找FED文件,要确保用户正在DtExerciseConn中使用的FED文件在运行程序所在的目录中。
(2)对象类的发布与订阅
联邦产生以后,需要发布和订阅FOM中的对象类属性。如果发布、订阅的是对象类的全部属性,需要构造对象
(DtEntityPublisher)(DtReflected-发布器和映射实体列表EntityList);如果发布、订阅的是对象类的部分属性,可以使用DtObjClassDesc的成员函数publish()/subscribe()。
(1982-)仿真验证、信号处理。作者简介:李占丽,女,硕士,高级工程师,研究方向:-85-
设计创新TechnologyInnovationandApplication
科技创新与应用
2020年2期图1Matlab适配器实现机制示意图
(3)属性更新
在每一个仿真步长中,DtEntityPublisher通过调用tick()函数把更新的实体状态发送出去。对DtExerciseConn::drainlnPut()接收到的远程实体,DtReflectedEntityList会将其更新信息存放到与该映射实体对应的实体状态库中。
(4)交互类的发布和订阅
HLA中使用交互来表示所发生的事件,VR-Link通过派生DtInteraction类来管理这些交互。交互类的发送是交互类实例在交互事件发生时进行发送的,发送交互的示例:
DtExamInteractioninter;//创建交互实例inter.setPar1(par1);//设置参数1inter.setPar2(par2);//设置参数2inter.setPar3(par3);//设置参数3exConn.sendStamped(inter);//发送交互
交互类的订购需要交互接受方在仿真开始之前为交互类注册一个回调函数,对接收到的交互进行响应。
DtExamInteraction::addCallback(&exConn,theInterac原tionCb,this);
参数中,theInteractionCb为回调函数,当接受到交互后,调用此函数。因为回调函数是作为普通的VR-Link回调注册函数指针传入的,所以回调函数本身不能是非静态成员函数,它可以是全局函数或静态类成员。该函数原型为:
void
theInteractionCb(DtExamInteraction*inter,void*usr){……}(5)交互处理
在回调函数中获取交互数据后,要对数据进行处理,可在回调函数中设置事件,利用事件机制触发处理过程。
对于复杂的处理,事件发生后可利用消息机制发送消息,通知消息处理函数进行处理。
HandlehEvent;SetEvent(hEvent);
if(WaitForSingleObject(hEvent)==WAIT_OB原JECT_0)
{
::PostMessage(stsComponent->m_hWnd,Mes原
sageName,0,0);
}
需要注意的是,这里要利用PostMessage函数,而不能利用SendMessage函数。
3Matlab适配器
由于仿真模型采用Matlab建立,而Matlab没有提供HLA/RTI的接口,为了把这些模型集成到仿真系统,实现基于HLA的协同仿真,就需要采用一定的机制将RTI与这些模型连接起来,使这些模型能够和RTI进行数据交换和时间同步。
3.1设计思路
本文采用Matlab引擎的方式开发适配器,使Matlab作为一个联邦成员加入联邦,通过适配器发布和订购所需要的对象类与交互类。
为实现Matlab仿真模型与RTI的数据交互,适配器将Matlab所需要的对象类和交互类映射为Matlab仿真模型中的输入输出变量,并根据仿真控制子系统的控制指令(如启动、暂停、继续和终止等),通过Matlab的API接口对Matlab引擎进行相应的控制,其实现机制如图1所示。
3.2适配器的实现
Matlab引擎采用客户/服务器模式,利用ActiveX自动化和DDE技术,实现VC++与Matlab之间的动态数据交
-86-
2020年2期TechnologyInnovationandApplication
科技创新与应用
设计创新换。在VC++中使用Matlab引擎来编写程序时,VC++作为客户端,负责用户接口并提出数据请求;Matlab作为服务器端,向客户端提供数据服务。VC++通过调用Matlab引擎
与2所Matlab示。
服务器建立连接,实现动态通信。
具体过程如图图2Matlab引擎调用过程
上面的过程中包含了两个重要问题,一个是引擎接口的设计与使用,VC++为Matlab引擎调用Matlab服务提供
了应用程序接口,用于完成连接的建立与撤销、
数据的传递与接收,主要的引擎库函数如表1所示。
表1Matlab引擎库函数
函数名 功能 engOpen 启动引擎 engClose 关闭引擎 engGetArray 从Matlab引擎获取数据 engPutArray 向Matlab引擎发送数据 engEvalString 请求Matlab引擎执行命令 engOutputBuffer 获取Matlab文本输出 另 一个问题是数据组织,即VC++数据类型与mxArray
矩VC++阵的转换问题,数据组织方式正确与否直接它的Matlab与Matlab相关函对数来VC++服务器实现。数之据间动态数据交换的有效性。
决定着对的于组织每种利VC++用mxArray数据类型矩,阵都结有一构和
个
函数用于创建mxArray矩阵结构,如表2所示。
在VC++中对Matlab引擎的调用过程可用如下伪代码实现:
IFengOpenBEGIN
//启动引擎成功//进行数据初始化;
表2Matlab矩阵转换函数
函数名 功能 mxCreateDoubleMatrix 创建二维double型矩阵 mxCreateCellArray 创建单元矩阵 mxCreateCellMatrix 创建二维单元矩阵 mxCreateCharArray 创建字符矩阵 mxCreateSparse 创建稀疏矩阵 mxCreateString 创建字符串 mxCreateStructMatrix 创建结构体矩阵 mxCreatexxxengPutArray();//进行数据类型转换;数;
engEvalString((););////向调Matlab用仿真引模擎型发,可送以是数据;M函
mxDestoryArrayengGetArray();//(删);//除获取矩阵仿真结果;END
engClose();//关闭引擎;
;利用Matlab适配器可以方便地将Matlab仿真模型转化为一个HLA/RTI邦元,如图3所示。
4图3利用Matlab适配器开发的邦元
本结束语
文论述了利用VR-Link开发HLA应用的过程,设计了Matlab适配器,详细说明了适配器的实现方法,利用适配器使Matlab仿真模型可以参与到HLA/RTI协同仿真中来,可以对类似的HLA应用起到借鉴作用。参考文献院
[1]与[2]王王勃净,,艾战凯祖亮,吴.VR-Link朝晖.基于开HLA发[M].的北京潜舰:国防对抗模拟工业出训练版社系统,2009.的设计
指挥[3]实郝雁现[J].中,火杨力承志与指挥.基于控制HLA,2012的电,37子(战飞8):127-132.机作战仿真系统研究[J].
[4]曾控艳丽制与对抗技术,,2004李仿真华,.基于,200819(4)HLA,30(:16-18的3)仿真:102-105.,23.
应用成员的设计与实现[J].电子
-87-
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务