Использую ли я предоставленное время или предоставленный пользователем тег при обработке отражения атрибута заказа на прием от федерации с управлением по времени?

В симуляции с использованием RPR-FOM, если я получу reflectAttributeValues с LogicalTime отметка времени (время моделирования) и OrderType получить заказ в моем FederateAmbassador, Для алгоритмов бездействующего расчета я использую метку времени, предоставленную RTI, или метку времени, закодированную в userSuppliedTag? С использованием userSuppliedTag было бы декодированное значение, если абсолютные и системные часы, если относительные.

Чтобы уточнить, я получаю атрибуты, отражающие указанный порядок получения от федерации, управляемой временем, в этом вызове в FederateAmbassador из РТИ:

void reflectAttributeValues(ObjectInstanceHandle theObject,
                               AttributeHandleValueMap theAttributes,
                               byte[] userSuppliedTag,
                               OrderType sentOrdering,
                               TransportationTypeHandle theTransport,
                               LogicalTime theTime,
                               OrderType receivedOrdering,
                               MessageRetractionHandle retractionHandle,
                               SupplementalReflectInfo reflectInfo)

2 ответа

Решение

Для атрибутов, которые были обновлены Порядок меток времени, я использовал time параметр, чтобы узнать, когда атрибут был последний раз обновлен, и рассчитать время симуляции до смерти.

public void reflectAttributeValues(
            ObjectInstanceHandle objectHandle,
            AttributeHandleValueMap attributes,
            byte[] userSuppliedTag,
            OrderType sentOrdering,
            TransportationTypeHandle theTransport,
            LogicalTime time,
            OrderType receivedOrdering,
            MessageRetractionHandle retractionHandle,
            SupplementalReflectInfo reflectInfo) {
   attributes.forEach((attributeHandle, value) -> {
      lastUpdated.put(attributeHandle, time));
      timeManaged.add(attributeHandle);
      // decode value into your object
      ...
   }
}

Для атрибутов, в которых был обновлен порядок получения без отметки времени, я использовал userSuppliedTag чтобы узнать, когда был приписан последний атрибут (значение в теге для абсолютных и системных часов на момент получения атрибута для относительного), а затем использовать системные часы, чтобы считаться мертвыми.

public void reflectAttributeValues(
            ObjectInstanceHandle objectHandle,
            AttributeHandleValueMap attributes,
            byte[] userSuppliedTag,
            OrderType sentOrdering,
            TransportationTypeHandle theTransport,
            SupplementalReflectInfo reflectInfo) {
    LogicalTime time;
    if (isRelativeTag(userSuppliedTag)) {
       time = factory.createSystemLogicalTime(System.currentTimeMillis());
    } else {
       time = decodeTag(userSuppliedTag);
    }
    attributes.forEach((attributeHandle, value)-> {
       lastUpdated.put(attributeHandle, time);
       timeManaged.remove(attributeHandle); // attributes might switch
       // decode value into your objects
       ...
    }
}

Тогда до смерти считай:

private Vector3D getDeadReckonedWorldLocation(LogicalTime time) {
   LogicalTime lastUpdatedSpatial = lastUpdated.get(spatialAttributeHandle);
   if (!timeManaged.contains(spatialAttributeHandle)) {
      time = factory.createSystemLogicalTime(System.currentTimeMillis());
   }
   LogicalTimeInterval timeToDeadReckon = time.distance(lastUpdatedSpatial);

   return deadReckon(timeToDeadReckon);
}

Код здесь - упрощенные примеры, которые могут не компилироваться, но они отражают решение, которое мне удалось найти.

Большинство пользователей RPR FOM используют только время в теге User Supplied.

Сервисы HLA Time Management обычно не используются, если вы никогда не получите LogicalTime или сообщения в порядке меток времени (TSO).

См. Соглашение о федерации для RPR FOM, "SISO-STD-001-2015: Стандарт для руководящих указаний, обоснований и методов взаимодействия (GRIM) для эталонной объектной модели федерации платформы в реальном времени (RPR FOM)", для получения дополнительной информации: https://www.sisostds.org/DigitalLibrary.aspx?Command=Core_Download&EntryId=30822

Другие вопросы по тегам