【问题标题】:HLA - usage of timeAdvanceRequest()HLA - timeAdvanceRequest() 的使用
【发布时间】:2014-06-19 15:27:24
【问题描述】:

我在 Java 中使用 pRTI 和两个联邦进行 HLA 模拟。我想提前我的模拟时间。据我所知,以下方法用于此目的:

_ambassador.timeAdvanceRequest(time);

,其中ambassador 是 RTI 大使。

我的问题是将什么传递给time 参数?我想这应该是我希望我的模拟前进到的时间,但是如何获得这个呢?

【问题讨论】:

  • 我已经更改了标签,因为hla 标签指的是高级装配,而不是高级架构(模拟)

标签: java simulation federation high-level-architecture


【解决方案1】:

好的,我想通了。

必须使用LogicalTime接口实现之一,例如使用TimeFactory:

LogicalTime time =  _ambassador.getTimeFactory().makeFinal();

拨打timeAdvanceRequest() 将向RTI 发送请求。如果时间提前,timeAdvanceGrant() 将在联邦中调用。

更多信息here

【讨论】:

  • 这种方法对您有用吗?您是否真的看到了 timeAdvanceGrant 回调,如果有,那是什么时候?我会假设您永远不会得到 timeAdvanceGrant 因为请求的时间大于所有可能的时间(我认为 makeFinal() 应该返回最大的可能时间值)。我知道这个问题和答案很老,但我很想知道你是如何做到这一点的。
【解决方案2】:

这是我认为它应该在 HLA 1516-2010 中工作的方式。从 HLA 1516-2010 开始,RTI 需要提供两种时间表示:HLAinteger64TimeHLAfloat64Time(HLA 接口规范的第 12.4 和 12.11.2 节)。要访问这些,请使用LogicalTimeFactoryFactory。例如,以下代码获取HLAfloat64TimeFactory

HLAfloat64TimeFactory timeFactory = 
     (HLAfloat64TimeFactory)LogicalTimeFactoryFactory.getLogicalTimeFactory("HLAfloat64Time")

timeFactory 实例随后可用于创建HLAfloat64TimeHLAfloat64Interval 实例:

HLAfloat64Time t = timeFactory.makeTime(3.0);
HLAfloat64Interval interval = timeFactory.makeInterval(1.0);

或者,使用接口

LogicalTime t = timeFactory.makeTime(3.0);
LogicalTimeInterval interval = timeFactory.makeInterval(1.0);

类似的代码用于整数时间工厂。

【讨论】:

    猜你喜欢
    • 2012-12-02
    • 2012-09-04
    • 2012-01-17
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多