李占丽 史晓萌 高琳
摘 要:文章介绍了基于HLA的仿真系统的开发过程,重点说明了基于VR-Link的联邦成员的开发过程和开发过程中需要注意的问题。针对Matlab仿真模型,设计了适配器,实现了Matlab仿真模型与HLA/RTI的数据交互,可以对类似的HLA应用开发起到借鉴作用。
关键词:HLA;VR-Link;Matlab适配器
中图分类号:TP391.9 文献标志码:A 文章编号:2095-2945(2020)02-0085-03
Abstract: This paper introduces the development process of HLA-based simulation system, the development process of federate base on VR-Link and the problems are emphasized. For Matlab simulation model, the adapter is designed, to realized the data interaction between Matlab simulation model and HLA/RTI, It can be used for reference in similar HLA applications.
Keywords: HLA; VR-Link; Matlab adapter
1 概述
高层体系结构HLA(High Level Architecture)是美国国防部提出的一个分布式仿真技术框架,它的主要目的是解决仿真应用的互操作性和仿真资源的可重用性问题。它通过运行支撑环境RTI将具体的仿真功能实现、仿真运行管理和底层传输三者分离,隐蔽它们各自的实现细节,使各个部分可以相对独立地开发,实现应用系统的即插即用。
VR-Link对RTI函数进行了封装,提供了可以使联邦成员创建工作更容易的高层功能,使开发人员重点专注于仿真模型的设计,大大减少他们的工作量。
Matlab是用以开发数值模型的强大建模和分析工具,但是Matlab本身并不支持HLA/RTI,设计Matlab适配器,使Matlab仿真模型能够参与到基于HLA的协同仿真中来,可以提高系统开发的效率。
2 开发过程
2.1 联邦概念模型(FCM)开发
联邦的概念模型是对问题域的抽象,是在需求和实现之间架起的一座桥梁。主要任务是对系统的组成和行为进行宏观的描述,包括仿真系统的构成和工作过程。
2.2 联邦对象模型(FOM)设计
FOM的设计是整个仿真系统的开发过程中一个重要的部分,开发FOM的过程,是对仿真系统中的交互数据进行抽象和建模的过程,其一般步骤为:
(1)分解仿真任务,确定联邦成员及其实体类型和事件;
(2)确定FOM中的对象类和交互类;
(3)确定对象类属性和交互类参数的特性;
(4)生成仿真对象模型(SOM)表;
(5)综合SOM表,生成FOM表。
2.3 生成FED(Federation Execution Data)文件
FED文件是FOM开发的结果,用于向RTI和VR-Link提供FOM表的信息。在开发时,可以根据FOM表对FED文件进行修改,以满足系统的需求。
2.4 联邦成员开发
联邦成员需要与联邦中的其他成员共同实现FCM中定义的联邦需求。根据FCM映射到本联邦成员需要实现的功能,开发联邦成员。VR-Link的开发联邦成员的过程为:
(1)创建并加入联邦
仿真开始时,需要通过DtExerciseConn产生联邦,如果联邦已经产生,则加入联邦。需要注意的是,构造DtExerciseConn时,必须提供联邦执行名和联邦成员名,并且同一联邦的联邦执行名和FED文件名必须相同。
DtExerciseConn exConn;
exConn = new DtExerciseConn(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( )。
(3)属性更新
在每一个仿真步长中,DtEntityPublisher通过调用tick()函数把更新的实体状态发送出去。对DtExerciseConn::drainlnPut()接收到的远程实体, DtReflectedEntityList会将其更新信息存放到与该映射实体对应的实体状态库中。
(4)交互类的发布和订阅
HLA中使用交互来表示所发生的事件,VR-Link通过派生DtInteraction类来管理这些交互。交互类的发送是交互类实例在交互事件发生时进行发送的,发送交互的示例:
DtExamInteraction inter; //创建交互实例
inter. setPar1(par1); //设置参数1
inter. setPar2(par2); //设置参数2
inter. setPar3(par3); //设置参数3
exConn. sendStamped(inter); //发送交互
交互类的订购需要交互接受方在仿真开始之前为交互类注册一个回调函数,对接收到的交互进行响应。
DtExamInteraction:: addCallback(&exConn,theInteractionCb, this);
参数中,theInteractionCb为回调函数,当接受到交互后,调用此函数。因为回调函数是作为普通的VR-Link回调注册函数指针传入的,所以回调函数本身不能是非静态成员函数,它可以是全局函数或静态类成员。该函数原型为:
void
theInteractionCb(DtExamInteraction* inter, void*usr)
{ … …}
(5)交互处理
在回调函数中获取交互数据后,要对数据进行处理,可在回调函数中设置事件,利用事件机制触发处理过程。对于复杂的处理,事件发生后可利用消息机制发送消息,通知消息处理函数进行处理。
Handle hEvent;
SetEvent(hEvent);
if(WaitForSingleObject(hEvent) == WAIT_OBJECT_0)
{
::PostMessage(stsComponent->m_hWnd, MessageName, 0, 0);
}
需要注意的是,这里要利用PostMessage函数,而不能利用SendMessage函数。
3 Matlab适配器
由于仿真模型采用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之间的动态数据交换。在VC++中使用Matlab引擎来编写程序时,VC++作为客户端,负责用户接口并提出数据请求;Matlab作为服务器端,向客户端提供数据服务。VC++通过调用Matlab引擎与Matlab服务器建立连接,实现动态通信。具体过程如图 2所示。
上面的过程中包含了两个重要问题,一个是引擎接口的设计与使用,VC++为Matlab引擎调用Matlab服务提供了应用程序接口,用于完成连接的建立与撤销、数据的传递与接收,主要的引擎库函数如表1所示。
另一个问题是数据组织,即VC++数据类型与mxArray矩阵的转换问题,数据组织方式正确与否直接决定着VC++与Matlab服务器之间动态数据交换的有效性。
Matlab对VC++数据的组织利用mxArray矩阵结构和它的相关函数来实现。对于每种VC++数据类型,都有一个函数用于创建mxArray矩阵结构,如表2所示。
在VC++中对Matlab引擎的调用过程可用如下伪代码实现:
IF engOpen //启动引擎成功
BEGIN
//進行数据初始化;
mxCreatexxx(); //进行数据类型转换;
engPutArray(); //向Matlab引擎发送数据;
engEvalString();//调用仿真模型,可以是M 函数;
engGetArray();//获取仿真结果;
mxDestoryArray();//删除矩阵;
engClose();// 关闭引擎;
END
利用Matlab适配器可以方便地将Matlab仿真模型转化为一个HLA/RTI邦元,如图3所示。
4 结束语
本文论述了利用VR-Link开发HLA应用的过程,设计了Matlab适配器,详细说明了适配器的实现方法,利用适配器使Matlab仿真模型可以参与到HLA/RTI协同仿真中来,可以对类似的HLA应用起到借鉴作用。
参考文献:
[1]王勃,艾祖亮.VR-Link开发[M].北京:国防工业出版社,2009.
[2]王净,战凯,吴朝晖.基于HLA的潜舰对抗模拟训练系统的设计与实现[J].火力与指挥控制,2012,37(8):127-132.
[3]郝雁中,杨承志.基于HLA的电子战飞机作战仿真系统研究[J].指挥控制与仿真,2008,30(3):102-105.
[4]曾艳丽,李华.基于HLA的仿真应用成员的设计与实现[J].电子对抗技术,2004,19(4):16-18,23.