Позволяет адаптивным приложениям выполнять опрос и управляемый событиями мониторинг диагностических индикаторов транспортного средства.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 7d81598b6e77ПроисхождениеОткрытые вопросы (2)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Позволяет адаптивным приложениям выполнять опрос и управляемый событиями мониторинг диагностических индикаторов транспортного средства.
Интерфейс служит для структурированного опроса и мониторинга диагностических индикаторов транспортного средства в рамках AUTOSAR Adaptive Platform. Приложения инстанцируют объект через смоделированный идентификатор и могут считывать текущее состояние с помощью асинхронного метода опроса [SWS_DM_00744]. Кроме того, можно зарегистрировать пользовательскую функцию обратного вызова, которая получает обновления состояния непосредственно при изменениях [SWS_DM_00745]. Важным граничным условием является то, что экземпляр строго привязан к порту, не подлежит копированию или перемещению и требует синхронизации от параллельных вызовов при регистрации и уничтожении.
Контекст
Класс ara::diag::Indicator функционирует в модуле diag Adaptive Platform как центральное представление DiagnosticIndicatorInterface[SWS_DM_00742]. Его основная задача состоит в том, чтобы предоставить приложениям доступ к диагностическим индикаторам, таким как контрольные лампы или индикаторы функций (например, Malfunction Indicator Light, MIL).
Во взаимодействии в основном участвуют три компонента: использующее адаптивное приложение (такое как комбинация приборов или служба HMI), экземпляр ara::diag::Indicator как локальная конечная точка интерфейса, а также демон Diagnostic Management (DM). Последний обрабатывает общесистемные диагностические события и состояния DTC стандарта UDS транспортного средства и предоставляет базовую диагностическую функциональность [SWS_DM_00744].
Контекстная диаграмма: партнеры по взаимодействию интерфейса ara::diag::Indicator между логикой приложения и демоном Diagnostic Management. Источники: [SWS_DM_00742], [SWS_DM_00744].
Жизненный цикл
Создание объекта ara::diag::Indicator выполняется явно путем передачи ara::core::InstanceSpecifier в конструктор [SWS_DM_00742]. Этот идентификатор привязывает объект к PortPrototype, определенному в модели проектирования, который обязательно должен быть типизирован как DiagnosticIndicatorInterface[SWS_DM_00742].
С точки зрения отношений владения и объектной семантики ara::diag::Indicator спроектирован как строго одиночный экземпляр: запрещены как копирование, так и перемещение. Соответственно, конструктор копирования [SWS_DM_01629], конструктор перемещения [SWS_DM_01630], оператор присваивания копированием [SWS_DM_01627] и оператор присваивания перемещением [SWS_DM_01628] объявлены удаленными (=delete).
Жизненный цикл завершается вызовом деструктора ~Indicator()[SWS_DM_00743]. В то время как конструктор и опрос состояния специфицированы как потокобезопасные [SWS_DM_00742], [SWS_DM_00744], деструктор не является потокобезопасным [SWS_DM_00743]. Поэтому вызывающее приложение должно гарантировать, что во время уничтожения больше не происходит параллельных вызовов методов или выполнения уведомлений (notifier).
Путь использования
После успешной инициализации класс поддерживает две взаимодополняющие модели использования для определения состояния индикатора:
Управляемое событиями уведомление: через SetNotifier() может быть зарегистрирована функция обратного вызова типа IndicatorStatusTypeNotifier[SWS_DM_00745], [SWS_DM_02129]. Как только состояние индикатора изменяется, среда выполнения вызывает этот Notifier. Последовательный вызов SetNotifier() перезаписывает ранее зарегистрированный обработчик [SWS_DM_00745]. Поскольку SetNotifier() не является потокобезопасным, регистрация должна быть синхронизирована извне [SWS_DM_00745]. Предположительно, Notifier выполняется в контексте фонового потока Diagnostic Management, поэтому в нем не должно происходить длительных блокировок. Вопрос Q-c27898ecefb8006f (открытый)
Целевой опрос: через GetIndicatorState() можно активно запросить текущее состояние в любой произвольный момент времени [SWS_DM_00744]. Метод является потокобезопасным и возвращает ara::core::Future<IndicatorStatusType>[SWS_DM_00744]. Интерпретация: асинхронное предоставление через Future указывает на то, что опрос внутри делегируется центральному демону Diagnostic Management через межпроцессное взаимодействие (IPC). Вопрос Q-61a650bd8ab7fc04 (открытый)
Условия ошибок могут возникать как на этапе инициализации, так и во время выполнения:
Нарушения конфигурации при конструировании: конструктор сообщает о несоответствиях моделирования в форме определенных нарушений (Violations) [SWS_DM_00742]. К ним относятся InstanceSpecifierMappingIntegrityViolation (идентификатор не может быть разрешен или не ссылается на порт), PortInterfaceMappingViolation (целевой порт не типизирован с помощью DiagnosticIndicatorInterface), ProcessMappingViolation (отсутствует подходящий смоделированный процесс для экземпляра времени выполнения), а также InstanceSpecifierAlreadyInUseViolation (идентификатор уже используется другим экземпляром в процессе) [SWS_DM_00742].
Сбой диагностических функций: если выполнение GetIndicatorState() завершается сбоем, через возвращенный объект Future передается код ошибки DiagErrc::kServiceNotAvailable[SWS_DM_00744]. Это происходит, когда базовые функции Diagnostic Management недоступны во время вызова [SWS_DM_00744].
Конкурирующий доступ: поскольку SetNotifier()[SWS_DM_00745] и деструктор [SWS_DM_00743] не являются потокобезопасными, незащищенный параллельный доступ приводит к неопределенному поведению во время выполнения.
Настоящее руководство основано на спецификации AUTOSAR Adaptive Platform R25-11 и подготовлено с помощью ИИ-ассистента курации.
Register a notifier function which is called if the indicator is updated. A consecutive call of this method will overwrite the previous registered notifier.
InstanceSpeci- InstanceSpecifier either cannot be resolved in the model in the fierMappingIn- context of your executable, or it refers to a model element other tegrityViolation than a PortPrototype. PortInterfaceMap- A PortPrototype that is referenced by a pingViolation DiagnosticIndicatorPortMapping needs to be typed by a DiagnosticIndicatorInterface. ProcessMappingVio- Matching InstanceRef exists, but no matching (modelled) Process lation found that matches the (runtime) process. InstanceSpecifier- Violation message that is sent in case a constructor in the ara AlreadyInUseViola- framework was called with an InstanceSpecifier already in use in tion this process.
Parameter (in)
Parameter
Beschreibung
specifier
InstanceSpecifier to a PortPrototype of a DiagnosticIndicatorInterface.
Request a governed re-review of this record. The record is not changed immediately.
Register a notifier function which is called if the indicator is updated. A consecutive call of this method will overwrite the previous registered notifier.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: f2935619a27aПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Функция SetNotifier класса ara::diag::Indicator ([SWS_DM_00745], объявленная в заголовке ara/diag/indicator.h) регистрирует специфичную для приложения функцию оповещения типа IndicatorStatusTypeNotifier. Эта callback-функция вызывается Diagnostic Management, как только появляется обновление статуса диагностического предупреждающего индикатора ([SWS_DM_00745]).
Поведение при многократном вызове
Повторный вызов SetNotifier на одном и том же экземпляре полностью перезаписывает ранее зарегистрированный оповеститель ([SWS_DM_00745], [SWS_DM_01359]). Такое поведение перезаписи соответствует общему шаблону в Diagnostic Management, аналогично тому, как это определено для ara::diag::OperationCycle::SetNotifier ([SWS_DM_00755]) и ara::diag::CancellationHandler::SetNotifier ([SWS_DM_00615]).
Обработка ошибок и параллелизм
Обработка ошибок: Метод специфицирован как noexcept и исключениебезопасный (exception safe) ([SWS_DM_00745]). Поскольку стандартизированные ошибки не определены, возвращаемый ara::core::Result<void> в качестве интерпретации, вероятно, всегда инкапсулирует успешный вызов. Вопрос Q-dcde3dd383fbfb4a (открытый)
Конкурентность: Интерфейс явно объявлен как непотокобезопасный (not thread-safe) ([SWS_DM_00745]). Одновременные вызовы на одном и том же экземпляре должны синхронизироваться приложением.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал