梁培生,周玉芳,翟永翠
(中国船舶重工集团公司江苏自动化研究所,江苏 连云港 222006)
分布交互仿真(Distributed Interactive Simulation)具有分布性、交互性、异构型、时空一致性和开放性特点[1]。它的体系结构主要经历了仿真组网(Simulation Networking,SIMNET)、分布交互式仿真(Distributed Interactive Simulation,DIS)、聚合级仿真协议(Aggregate Level Simulation Protocol,ALSP)、高层体系结构(High Level Architecture,HLA)、试验与训练使能体系结构[2](Test and Training Enabling Architecture,TENA)等阶段。
HLA主要针对建模与仿真领域,因而它主要应用于虚拟和构造仿真,而TENA主要针对靶场领域,它所支持的是真实仿真。因而构建LVC体系结构可以从HLA或者 TENA方面进行研究。考虑到目前 TENA参考资料较少并且只支持真实仿真等原因,本文打算从HLA进行研究。HLA时间管理的出发点是在保证正确地实现联邦成员间仿真时间的协调推进和数据交换的前提下,定义所需服务的最小集合,它的时间管理原则[3]主要是不存在全局时钟,可以产生“时戳”是“未来”的事件而且联邦成员不需要按事件的时戳调度事件。同时它将联邦成员设为时间控制和时间受限等状态,时间控制成员只能发送时戳消息,时间受限成员只能接收时戳消息,同时当联邦成员请求时间推进时,必须得到RTI的同意,这样就在一定程度上影响了信息传输的实时性。
由于真实仿真的实时性要求比较高,而LVC为了支持真实仿真,必须在实时性方面较以往体系结构有较大的改善。为了实现这一目标,在参考了 HLA相关知识的基础上,本文提出了一套LVC时间管理的实时性方法,并给出了性能测试。测试结果表明该方法的提出对分布交互仿真的发展具有重要的意义。
HLA时间管理在实时性方面主要存在以下几个问题:
1)在HLA中,每个联邦成员可以有自己的联邦成员时间,而各个成员的联邦成员时间可以不同,这样虽然可以提高联邦的交互性。但这样一个联邦成员Fi发送消息给另一各联邦成员 Fj请求知道它目前 t时刻的状态信息,这里的t时刻是相对Fi的联邦成员时间来说的,而Fj的 目前联邦成员时间小于t,Fj等到自己联邦成员时间到达 t时把自己的信息发送给Fi。这样,Fi接收到的消息并不是自己想要的信息,从而导致了实时消息的错误。
2)在HLA中,由于各个联邦成员内部都可以有自己的联邦成员时间[4],当要推进联邦成员时间时,必须向RTI提出“时间推进请求”服务,而RTI要根据联邦成员的逻辑时间管理策略、消息传递机制和时间推进机制的配置信息来响应这个请求,所以当一个联邦成员请求时间推进时,不一定可以马上得到RTI的响应,这样联邦成员不能及时推进它的逻辑时间,这样就产生了联邦成员逻辑时间推进响应速度比较慢的问题。
3)目前一些 RTI的软件开发采用的是基于CORBA的技术,而从目前的资料来看,CORBA本身就没有提供实时功能。如果想真正实现实时,就不能采用CORBA技术,而必须通过调用底层的API函数来实现。
4)联邦成员间的消息传递是通过网络来完成的,网络传输总存在时延,而且时延还受到网络的带宽和流量的限制。当系统要求实时仿真时,就会出现各种预期不到的问题,而无法实现实时要求,这样就产生了网络延迟较大的问题。
5)在实际的系统中,DIS仿真系统是实物直接和仿真机互联,然后接入到DIS系统中,实现的是实时仿真;由于 HLA本身仿真的盟员较多,加上仿真设备性能的影响,会使得仿真不能实时推进,仿真时间与墙钟(wall clock)不一致。当DIS和HLA系统互联时,很难实现系统的协调同步,从而在HLA和DIS系统互操作时无法满足实时仿真的要求[5]。
LVC仿真体系结构的目的是为了同时支持真实仿真(L)、虚拟仿真(V)和构造仿真(C)之间的互操作。对于一个真实仿真来说,实时性的要求是构建一个真实仿真系统的重要因素。对于 HLA来说,HLA时间管理是可选服务,只定义了所需服务的最小集合,目的是尽量减少时间管理服务对消息传递的延迟,但是这些措施并不足以满足真实仿真的要求。真实仿真需要端到端的网络性能预测能力,但是 HLA没有提供用于规定端到端性能预测所需要的接口,而且 HLA只支持可靠的(reliable)和尽可能快的(best effort)两种消息传递方式,远不能满足真实仿真对消息传递的要求。另外,标准的 HLA时间管理并不能区分需要实时处理的消息和非实时消息,因此不能给有实时处理要求的消息优先分配资源。为了实现LVC体系结构的构建,就必须在时间管理的实时性方面进行深入研究。
鉴于 HLA时间管理机制在实时性方面存在上述问题,国内外有不少专家提出了 HLA的实时性改善方法,如提高网络和主机性能、增加特殊的硬件和采用实时算法[3]等等,但由于其代价比较大,本文提出了如下两种 LVC时间管理实时性方法:优先级方法HLA虽然提出过,但没有真正实现;最大发送时间限制是一个新提出的方法,因此LVC的时间管理机制与RTI的时间管理机制不同。
1)优先级方法 优先级方法的本质是减少同一时刻在网络上传输的数据量,优先级在设置时可以对成员设置优先级,也可以对成员发送的消息设置优先级。如对成员设置优先级时,中间件将对各个成员的类型进行判断,根据仿真需要给各个成员设置不同等级的优先级,优先级高的成员中间件会提前发送,这样在网络上传输的只是高优先级成员发送的消息,等到高优先级成员消息发送完毕以后,再发送中、低优先级成员的消息。对消息设置不同优先级原理类似,通过给成员发送的消息设置优先级,中间件将会根据消息的优先级大小在网络上传输,这样也同样减少了网络的数据量。
优先级方法实现过程是当联邦成员需要发送消息时首先向中间件发送一个请求,这个请求中包含了成员的类型,如真实仿真成员、虚拟仿真成员和构造仿真成员。用户在中间件中给真实仿真成员、虚拟仿真成员和构造仿真成员设置不同级别的优先级,优先级的数值大小是用户根据自己的实际需要来设置的。这样当中间件收到各个联邦成员的消息发送请求时会根据事先设置好的优先级大小来给各个联邦成员优先级赋值,中间件会根据优先级的大小来将消息发送到接收方。例如若为真实仿真成员,则用户可以在中间件上将该联邦成员的优先级设为高优先级,将其他联邦成员设置中、低优先级,这样给有实时处理要求的真实仿真成员的消息优先分配资源,从而可以保证真实仿真成员发送的消息能够及时的发送到消息接收方,其具体的实现过程如图1所示。
图1 优先级实现过程
2)最大发送时间限制 最大发送时间限制是中间件所具有的一个对接收到的消息超时与否进行判断的功能。当接收到的消息发送超时时,中间件将根据仿真成员的要求来请求成员重新发送。具体的实现过程是仿真系统中的联邦成员在发送的消息中事先增加了一个最大发送时间限制参数,该参数表示此消息必须在规定的时间之内发送到接收方,同时增加了一个发送超时是否重新发送参数。当此参数为真时,表示发送超时将重新发送;若此参数为假,则表示发送超时无须重新发送。当中间件接收到该消息后,它将负责计算接收到的消息的传输时间是否超过了规定的最大发送时间限制,若消息没有在规定的时间内成功发送到中间件,则中间件将发送一个信息发送超时报告,同时根据发送超时是否重新发送参数来判断是否请求联邦成员重新发送。这种处理方式在一定程度上提高了信息发送的实时性,也避免了对错误信息的处理,提高了仿真的效率。同时为了解决消息发送时发生逻辑错误,LVC时间管理的实时性方法还采用了“因果关系处理”服务,为了防止出现联邦成员接收到的消息逻辑时间前后不一致,中间件将会判断成员需要接收的多个消息是否具有因果关系,若具有因果关系则LVC时间管理中间件首先将“因消息”发送到接收方,再将“果消息”发送到接收方。这种处理方式在一定程度上解决了“因果颠倒”的问题。
LVC时间管理中间件作为联邦执行的底层支撑系统,其体系结构的优劣直接关系到仿真系统的性能,从其逻辑结构看,有以下三种结构模型:
1)集中式结构模型 这种结构的特点是具有一个全功能的中心节点,在该中心节点上实现所有的服务。联邦成员之间无直接的通信关系,所有的成员之间都通过中心节点提供的服务,来实现消息的转发与交换。其优点是结构简单,容易实现,但中心节点负担大,将成为系统的瓶颈,不利于系统规模的扩展。
2)分布式结构模型 这种结构的特点类似于ALSP系统的体系结构,不存在中心节点,但在每个仿真节点机上都有自己的局部 RTI服务器(Local RTI),联邦成员只需向本地RTI服务进程提出请求,由本地RTI做出响应。如果本地RTI不能完成响应,则请求外部的RTI服务进程协同完成。
3)层次式结构模型 层次式结构模型结合分布式和集中式实现方法,以克服各自存在的问题,这种结构模型中有一个中心服务器,用于执行一些全局操作,在中心服务器下设置一组子RTI服务器,每个子服务器负责一组联邦成员的服务请求,涉及到全局操作的请求,由中心服务器协调各个子RTI服务器共同完成。
由于层次式结构模型可以减少全局操作的延迟,提高仿真系统运行的效率。对于一些局部操作,由RTI的子服务器分散执行,可降低计算的耦合度,从而提高执行效率。因此本文的LVC时间管理中间件采用这种层次式的结构模型。其系统总体模型如图2所示。
图2 系统总体模型图
LVC时间管理中间件提供给联邦成员调用的函数及功能主要有以下几类:
1)MemberJoinRequest()
此函数的主要功能是当中间件发送仿真初始化报文以后,成员调用此函数加入到仿真系统中,如果加入成功的话,中间件会发送一个回执信息。
2)SendPublishMsg()
此函数的主要功能是成员调用此函数后可以向中间件发送自己公布的消息,即成员对外要发送的消息。
3)SendSubscribeMsg()
此函数的主要功能是成员调用此函数后可以向中间件发送自己订购的消息,即成员要接收的消息。
4)TimeAdvanceRequest()
此函数的主要功能是成员通过调用此函数来实现仿真时间的推进。
此功能的实现算法如下:
①处理异常:如果联邦成员没有加入联邦或者已经处于挂起状态,则引发异常;如果请求推进的逻辑时间小于联邦成员的当前逻辑时间,则引发异常。
②计算最大可用逻辑时间(GALT):GALT的计算与推进服务的类型、联邦成员所处的状态、Lookahead以及时戳队列中的最小时标信息等因素有关,绝不能简单地归结为min{Ti+Li}(Ti为联邦成员i的当前逻辑时间,Li为联邦成员i的Lookahead)。
③重新计算当前逻辑时间 T:如果联邦成员不是时间受限成员,则 T=theTime;否则T=min{minTSO,GALT,theTime},其中theTime为调用服务的参数,minTSO为获得的联邦成员时戳队列中最小消息的时标。
④处理Lookahead:如果 Lookahead在推进的过程中逐渐变小,此时必须检查联邦成员的 Lookahead是否在变化,并重新计算Lookahead。
⑤发送时戳消息:调用 SendPublishMsg()函数,将时戳队列中的消息按优先级顺序发送出去。
⑥中间件同意联邦成员推进:调用timeAdvanceGrant回调服务,允许联邦成员推进到逻辑时间T。
LVC时间管理中间件的内部回调函数主要有以下几类:
1)EnableMemberJoin()
此函数的主要功能是 LVC时间管理中间件内部调用此函数后向成员发送一个加入回执。
2)MiddlewareProcess()
此函数的是LVC时间管理中间件的核心部分,它主要用来完成优先级处理和因果关系处理,中间件内部调用此函数后,会根据优先级的大小来决定发送消息的顺序,同时此函数还会根据成员订购的消息是否具有因果关系来优先发送“因消息”,从而防止出现“因果颠倒”错误。
3)Federateprocess()
此函数的主要功能是对接收到的消息进行处理,判断接收到的消息是否超时,当中间件收到公布消息时,该函数获得成员发送时间、中间件时间以及最大发送时间等数据之后,来判断接收到的消息是否超时,若发送超时中间件请求成员重新发送。
4)processovertime()
此函数的主要功能是 LVC时间管理中间件内部调用此函数后对接收到的公布消息的最大发送时间限制进行处理,如果发送超时提示用户重新发送。
5)timeAdvanceGrant()
中间件同意联邦成员的时间推进,通知联邦成员将时间推进到其请求的时刻。
联邦成员调用 LVC时间管理中间件过程如图3所示。
图3 联邦成员调用LVC时间管理中间件过程
Windows XP操作系统的三台计算机、MAK RTI1.3V6版本和LVC时间管理中间件。
由于真实仿真成员的实时性要求比较高,因此LVC仿真系统信息传输的实时性要求比其他的仿真系统要求要高,这时LVC仿真系统与其他系统的主要区别之一。
设定3个联邦成员:真实仿真成员Federate1、虚拟仿真成员 Federate2和构造仿真成员 Federate3。Federate1订购和接收Federate2,Federate3的数据,公布和更新自己的数据。Federate2订购和接收Federate1的数据,公布和更新自己的数据。Federate3订购和接收Federate1的数据[6]。
1)Federate1公布自己的数据和订购 Federate2,Federate3的数据。Federate2订购Federate1的数据,公布和更新自己的数据。Federate3订购Federate1的数据,公布自己的数据,接下来进入仿真循环。
2)Federate1更新自己的数据。
3)Federate2和 Federate3确保接收到 Federate1的更新数据。
4)Federate2和Federate3分别更新自己的数据。
5)Federate1确保接收到过程4)中Federate2和Federate3的更新数据。
6)重复过程2)~过程5),直至仿真循环结束。
在不同数据量的情况下,记录过程2)~过程5)在LVC时间管理中间件中的时间延迟,然后将此同样 的环境在RTI1.3V6中测试。测试过程如图4所示。
图4 LVC时间管理中间件测试过程
在每种数据量下测量500组数据,获得传输延迟的最大延迟和最小延迟,然后获得这500组数据的均值。部分测试数据如表1所示。
表1 RTI1.3V6和LVC时间管理中间件时间延迟测试数
由均值数据得到的 LVC时间管理中间件与RTI1.3V6延迟大小对比如图5所示。
图5 LVC时间管理中间件与RTI1.3V6时间延迟比较
HLA解决了仿真领域中的可重用和互操作问题,但它应用在实时性要求较高的仿真系统中还存在缺陷和不足,从而也就限制了它的应用范围。LVC体系结构的提出就是为了能够在真正意义上实现真实、虚拟和构造这三种类型的仿真,而实时问题是LVC能否真正实现的关键,也是目前基于LVC分布仿真技术中极具挑战性的研究方向之一,其应用前景非常广阔。
本文针对HLA时间管理实时性方面存在的问题,提出了分布交互仿真的实时性改善方法。在综合考虑LVC时间管理中间件设计时应该注意的问题之后,实现了 LVC时间管理中间件的设计,进而分别对RTI1.3V6和LVC时间管理中间件进行性能测试,测试结果表明 LVC的时间管理在实时性方面较RTI1.3V6有较大的改善,LVC时间管理中间件工程使用的实现将会进一步推动分布交互仿真的发展。
[1]周彦,戴剑伟.HLA仿真程序设计[M].北京:电子工业出版社,2008.
[2]高世峰,蒋海滨,周红梅.分布交互式仿真体系结构发展状况的研究[C].2003年全国仿真技术学术会议论文集,2003.
[3]翟永翠,程健庆.HLA中时间管理及其对实时仿真改善方法的研究[J].计算机仿真,2003,8(8):144-147.
[4]徐大勇,蒋晓原,王钰.HLA时间管理的实时性扩展[J].计算机仿真,2005,6(5):202-207.
[5]姚新宇,黄柯棣.基于HLA时间管理的实时时间控制和乐观时间同步算法设计[J].国防科技大学学报,1999(6):84-87.
[6]何少情,王怀民,姚益平,等.HLA_RTI时间管理算法性能测试[J].系统仿真学报,2005,2(2):358-361.