HLA — использование timeAdvanceRequest()

У меня есть симуляция HLA на Java с использованием pRTI с двумя федерациями. Я хочу ускорить время моей симуляции. Насколько я знаю, для этой цели используется следующий метод:

_ambassador.timeAdvanceRequest(time);

, где ambassador — представитель RTI.

У меня вопрос, что передать в параметр time? Я предполагаю, что это должно быть время, до которого я хочу, чтобы моя симуляция продвинулась, но как получить это?


person Kao    schedule 02.05.2014    source источник
comment
Я изменил тег, так как тег hla относится к сборке высокого уровня, а не к архитектуре высокого уровня (моделирование).   -  person DNA    schedule 03.05.2014


Ответы (2)


Хорошо, я понял это.

Необходимо использовать одну из реализаций интерфейса LogicalTime, например с помощью TimeFactory:

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

вызов timeAdvanceRequest() отправит запрос в RTI. Если время было увеличено, функция timeAdvanceGrant() будет вызываться для федерации.

Дополнительная информация здесь.

person Kao    schedule 02.05.2014
comment
Этот подход сработал для вас? Видели ли вы на самом деле обратные вызовы timeAdvanceGrant, и если да, то в какое время? Я бы предположил, что вы никогда не получите timeAdvanceGrant, потому что запрошенное время больше, чем все возможные времена (я думал, что makeFinal() должен возвращать максимально возможное значение времени). Я знаю, что этот вопрос и ответ устарели, но мне было бы интересно узнать, как вам это удалось. - person Anthony Cramp; 24.01.2017

Вот как я думаю, что это должно работать в HLA 1516-2010. Согласно HLA 1516-2010, RTI должен обеспечивать два представления времени: HLAinteger64Time и HLAfloat64Time (разделы 12.4 и 12.11.2 Спецификации интерфейса HLA). Чтобы получить к ним доступ, вы используете файл LogicalTimeFactoryFactory. Например, следующий код получает HLAfloat64TimeFactory:

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

Затем этот экземпляр timeFactory можно использовать для создания экземпляров HLAfloat64Time и HLAfloat64Interval:

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

или, используя интерфейсы

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

Аналогичный код используется для фабрики времени Integer.

person Anthony Cramp    schedule 24.01.2017