Адаптивная служебная связь AUTOSAR предоставляет возможность настройки приложений для использования одноразового или динамического обнаружения для подписки на услуги. Режим обнаружения по умолчанию, OneTime, позволяет приложению AUTOSAR находить и подписываться на службы при инициализации. Этот режим обнаружения может потребовать запуска служб перед приложением. Можно изменить режим обнаружения службы на DynamicDiscovery позволяет приложению AUTOSAR находить и подписываться на службы по мере их доступности.
В модели или программно можно настроить режим обнаружения услуг для каждого требуемого порта услуг как OneTime или DynamicDiscovery:
В модели можно использовать словарь AUTOSAR, чтобы открыть атрибуты обнаружения службы для требуемых портов и выбрать их режимы обнаружения службы.
В этом примере показано, как установить требуемый порт в значение DynamicDiscovery.

Программно можно использовать set функция из API getAUTOSARProperties для настройки режима обнаружения службы.
В этом примере показано, как установить требуемый порт в значение DynamicDiscovery.
hModel = 'autosar_LaneGuidance'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); open_system(hModel); apiObj = autosar.api.getAUTOSARProperties(hModel); set(apiObj,"/LaneGuidance_pkg/LaneGuidance_swc/LaneGuidance/RequiredPort/", ... "ServiceDiscoveryMode", "DynamicDiscovery")
Значение режима обнаружения службы влияет на сгенерированный код C++ (в файле исходного кода модели) в следующих двух местоположениях:
Место вызова StartFindService API и регистрация обратного вызова (для обоих InstanceIdentifier и InstanceSpecifier варианты).
// Model initialize function
void autosar_LaneGuidanceModelClass::initialize()
{
ProvidedPort = std::make_shared< company::chassis::provided::skeleton::
ProvidedInterfaceSkeleton >(ara::com::InstanceIdentifier("2"), ara::com::
MethodCallProcessingMode::kPoll);
ProvidedPort->OfferService();
company::chassis::required::proxy::RequiredInterfaceProxy::StartFindService
(std::move(std::bind(&autosar_LaneGuidanceModelClass::RequiredPortSvcHandler,
this, std::placeholders::_1, std::placeholders::_2)), ara::com::
InstanceIdentifier("1"));
}Определение функции обратного вызова.
void autosar_LaneGuidanceModelClass::RequiredPortSvcHandler(ara::com::
ServiceHandleContainer< company::chassis::required::proxy::
RequiredInterfaceProxy::HandleType > svcHandles, const ara::com::
FindServiceHandle fsHandle)
{
if ((!RequiredPort) && (svcHandles.size() > 0U)) {
RequiredPort = std::make_shared< company::chassis::required::proxy::
RequiredInterfaceProxy >(*svcHandles.begin());
RequiredPort->leftCarInBlindSpot.Subscribe(1U);
RequiredPort->leftLaneDistance.Subscribe(1U);
RequiredPort->leftTurnIndicator.Subscribe(1U);
RequiredPort->rightCarInBlindSpot.Subscribe(1U);
RequiredPort->rightLaneDistance.Subscribe(1U);
RequiredPort->rightTurnIndicator.Subscribe(1U);
company::chassis::required::proxy::RequiredInterfaceProxy::StopFindService
(fsHandle);
}
}