1 / 7
文档名称:

HLA运行支撑环境(RTI)中间件简介.pdf

格式:pdf   大小:210KB   页数:7页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

HLA运行支撑环境(RTI)中间件简介.pdf

上传人:2210620458 9/24/2022 文件大小:210 KB

下载得到文件列表

HLA运行支撑环境(RTI)中间件简介.pdf

相关文档

文档介绍

文档介绍:该【HLA运行支撑环境(RTI)中间件简介 】是由【2210620458】上传分享,文档一共【7】页,该文档可以免费在线阅读,需要了解更多关于【HLA运行支撑环境(RTI)中间件简介 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。VR-Link并不是RTI的替代品,VR-Link是RTI与用户应用程序之间
的中间件,开发者只需要调用简单的VR-LinkAPI就可以完成HLA的
实现,而烦琐的RTI函数都交给VR-Link去调度。
HLA(HighLevelArchitecture:高层体系结构)的诞生是
为了满足了大规模复杂系统的迫切需求,目前不但在军用领域得到了
广泛的应用并在民用领域展示出了广阔的应用前景。而RTI(RunTime
Infrastructure:运行支撑环境)作为他HLA的重要组成部分,一直
是HLA实现的核心内容。RTI原形系统开始于1995年底,到现在已
经整整10年了,就像windows编程世界里WIN32API被MFC所替代
一样,通过直接编写繁琐的RTI代码来实现HLA的开发人员正逐渐减
少,这是软件界不变规律,也是历史发展的必然结果。对于绝大多数
HLA应用开发人员来说,并不希望也不需要对花过多的时间去理解
RTI的细节,而更愿意在应用本身上多下功夫,编程只是实现的手段,
实现过程当然越简单越好。既然市场有这个需求当然就会有相应的产
品,从DIS时代开始,MAK的VR-Link就给开发者提供了这样一个产
品,它也成为了国际市场上此类软件的佼佼者,事实上VR-Link已经
使得大量的HLA应用程序开发者在对RTI并不十分了解的情况下编出
了可靠而功能强大的HLA应用。下面就以MAK的VR-Link为例说明一
下RTI中间件的工作方式,需要补充说明的是,VR-Link并不是RTI
的替代品,VR-Link是RTI与用户应用程序之间的中间件,开发者只
需要调用简单的VR-LinkAPI就可以完成HLA的实现,而烦琐的RTI
函数都交给VR-Link去调度。
什么是VR-Link?
VR-Link是一个面向对象的C++工具包,它使得仿真开发人
员可以方便快捷的进行HLA或DIS应用开发。它提供了一系列的类
库,用于执行实现HLA和DIS的可靠、稳定的API(应用程序接口)。
当你使用VR-Link时,你可以专注于你的应用,而不用花太多的时间
去担心网络传输的细节。少量的VR-Link函数调用可以替代数千行的
RTI代码,在开发和维护过程中为你节省了时间和金钱。
VR-Link的顶层API与网络协议无关。例如,应用程序设置
本地实体和对象的状态时,所有被需要的数据都会通过HLARTI或
DIS网络自动的送往其它的应用程序。在接受方,VR-Link处理所收
的到信息并提供一个远程对象的当前状态接口,应用程序甚至不需要
知道更新到达的时间。
VR-Link是RTI代码自动生成软件吗?
不是。现在有很多的RTI代码自动生成软件,这类软件可以
通过fed文件自动生成RTI代码,所生成的RTI代码只是一个不包含
任何应用程序流程的一个联邦成员框架。对于HLA应用程序开发者而
言,如果他们选择使用RTI自动代码工具,还是需要掌握繁琐的RTI
内容,而且并不能减轻应用程序本身的逻辑的开发工作量。在后期维
护方面,由于RTI代码自动生成软件所生成的代码需要考虑到通用
性,所生成的代码往往比手写RTI代码更加繁琐,而且在程序出错时
也不容易找到错位来源。于RTI代码自动生成工具不同,VR-Link是
一套类库,有着功能强大而又简洁方便的API,使用VR-Link所编写
的应用程序代码中可以不包含任何的RTI函数,当然VR-Link也提供
了RTI的函数接口,不过在绝大多数情况下你都不需要使用它。使用
VR-Link开发基于HLA的应用程序时,开发人员之需要了解一些RTI
的基本概念例如:联邦,联邦成员,发布,订购等。当然与RTI代码
自动生成工具相比VR-Link也有自己的弱点,由于VR-Link使
用的是自己的API,并有着一套独特的框架结构,在使用前,开发人
员需要一段时间来学****如何使用它,当然学****VR-Link要比理
解RTI要容易的多,如果你已经掌握了RTI,那么这一学****过程
将会更加轻松而短暂。
VR-Link只是RTI与应用程序的中间件吗?
这个问题就如同问“MFC是否只是Win32API的中间件?”一样,当
然不是。VR-Link不但可以使用简洁的API调用复杂的RTI函数,还
增加了许多新的功能,以方便分布式仿真应用程序的开发,任何使用
VR-Link可以实现的功能都能过使用RTI函数来实现,但是实现过程
将会十分复杂,如果你选择直接使用RTI,那么你将花费更多的时间
和精力。
VR-Link的API长什么样?
回答这个问题最好的方法就是给你展示一个简单的VR-Link
例子。这个例子的主要功能是从网络中读取数据:
Listen-OnlyExample:
1//Defineacallbacktoprocessfireinteractions
2voidfireCb(DtFireInteraction*fire,void*usr)
3{
4printf("FireInteractionfrom%s\n",
fire->attackerId().string());
5}
6
7intmain()
8{
9//Createaconnectiontotheexerciseorfederationexecution
10#ifDtHLA
11//PassexecutionNameandfederateName
12DtExerciseConnexConn("VR-Link","VR-Linklisten");
13#else
14//Passportnumber,exerciseId,siteIdandapplication
number
15DtExerciseConnexConn(3000,1,1,15);
16#endif
17
18//Registeracallbacktohandlefireinteractions
19DtFireInteraction::addCallback(&exConn,fireCb,NULL);
20
21//Createanobjecttomanageremoteentities.
22DtReflectedEntityListrel(&exConn);
23
24while(1)
25{
26//TellVR-Linkthecurrentvalueofsimulationtime
27
()->setSimTime(()->elapsedRealTime(
));
28//Processanyincomingmessages
();
30
31//Findthefirstentityinthereflectedentitylist
32DtReflectedEntity*first=();
33
34if(first)
35{
36//Grabitsstaterepository,wherewecaninspectitsdata
37DtEntityStateRepository*esr=first->entityStateRep();
38
39//Printtheposition
40printf("Positionoffirstentity:%s\n",
esr->location().string());
41}
42
43//Sleeptillnextiteration
44DtSleep();
45}
46}
代码一共46行,这46行中还包括了详细的注释,以及对DIS的兼容
和打印程序的运行结果。而核心代码也就10行左右。与直接使用RTI
相比,VR-Link大大减少了编码工作量,所编写的代码可读性更强,
更利于日后的扩展和维护。下面我们对这些代码作一个简单的说明:

代码的10-16行创建了一个DtExerciseConnection,它
是本联邦成员与联邦的接口。对于基于HLA的应用程序,只需要将联
邦和本联邦成员的名字作为参数加入即可。

第2行定义了一个用户处理开火交互的回调函数fireCb,在
第19行将这个回调函数注册到本联邦成员。这样我们就实现了对开
火交互的订购并响应。

在22行我们创建了一个影射实体列表rel,用于跟踪记录
在网络中找到的实体。除完成订购工作外,Rel还负责跟踪实体的到
达和离开,并进行航路推算,管理超时等工作。

在每一个循环的开始,为VR-Link设置当前的仿真时间(第
27行)。drainInput()函数的调用(第29行)读取并处理从联邦中
收到的任何的消息,它将会触发所有你事先注册好并需要运行的回调
函数。在HLA中,这也是RTI的到tick的地方。在程序第32行,程
序获得实体列表中的第一个实体,然后在程序的第37行得到指向实
体状态库的指针。在程序的第40行,进行航路推算并打印出实体的
位置。