Служит универсальным интерфейсом UDS для асинхронной обработки входящих диагностических запросов в Diagnostic Management.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: d0d38c589b70Происхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Служит универсальным интерфейсом UDS для асинхронной обработки входящих диагностических запросов в Diagnostic Management.
Класс ara::diag::GenericUDSService в качестве универсального обработчика сервисов UDS обеспечивает прием и обработку любых диагностических запросов UDS через диспетчер диагностики AUTOSAR [SWS_DM_00616]. После привязки к прототипу порта сервис активируется с помощью Offer(), асинхронно обрабатывает запросы в методе HandleMessage() и дерегистрируется посредством StopOffer()[SWS_DM_00618], [SWS_DM_00619], [SWS_DM_00620]. Экземпляр не подлежит копированию или перемещению и сигнализирует об ошибках через коды NRC из DiagUdsNrcErrc[SWS_DM_01657], [SWS_DM_00618].
Контекст
Класс ara::diag::GenericUDSService предоставляет универсальный сервисный интерфейс для диагностической коммуникации по стандарту UDS (Unified Diagnostic Services). Он служит базовым классом для приложений, которые хотят реализовывать и обрабатывать пользовательские или не охваченные выделенными интерфейсами сервисы UDS. Взаимодействие происходит главным образом между диагностическим компонентом приложения, диспетчером диагностики AUTOSAR (DM) и базовым контекстом моделирования. Подключение к диспетчеру диагностики и модели платформы осуществляется при инстанцировании через ara::core::InstanceSpecifier, который указывает на соответствующий прототип порта компонента DiagnosticGenericUdsInterface[SWS_DM_00616]. Как только регистрация активируется через интерфейс, диспетчер диагностики перенаправляет входящие запросы UDS реализованному экземпляру [SWS_DM_00619].
Экземпляр ara::diag::GenericUDSService привязан к фиксированному прототипу порта и спроектирован как одиночный экземпляр: конструктор копирования [SWS_DM_01657], конструктор перемещения [SWS_DM_01658], а также операторы присваивания [SWS_DM_01655], [SWS_DM_01656] удалены (delete). Создание выполняется явно через конструктор с указанием InstanceSpecifier и конфигурации параллелизма ConcurrencyType (kConcurrent или kNotConcurrent) [SWS_DM_00616]. Жизненный цикл готовности сервиса делится на две основные фазы:
Не предлагается (Stopped / Initial): после конструирования или после вызова StopOffer() DM не перенаправляет запросы экземпляру [SWS_DM_00620].
Предлагается (Offered): после успешного вызова Offer() обработчик активен и обрабатывает входящие диагностические сообщения [SWS_DM_00619].
Уничтожение выполняется через виртуальный деструктор ~GenericUDSService()[SWS_DM_00584]. С точки зрения потокобезопасности конструктор специфицирован как потокобезопасный, тогда как Offer(), StopOffer() и деструктор не являются потокобезопасными и требуют внешней синхронизации [SWS_DM_00616], [SWS_DM_00619], [SWS_DM_00620], [SWS_DM_00584].
Штатная последовательность включает инстанцирование производного сервисного класса, активацию обработчика, асинхронную обработку заданий и последующую деактивацию:
Инстанцирование: приложение инстанцирует специализированный сервисный класс с подходящим ara::core::InstanceSpecifier, а также с желаемым ConcurrencyType[SWS_DM_00616].
Предложение сервиса: вызов Offer() сигнализирует диспетчеру диагностики о готовности к приему сообщений [SWS_DM_00619].
Обработка сообщений: входящие запросы UDS приводят к вызову чисто виртуального метода HandleMessage() со стороны DM. Передаются идентификатор сервиса (sid), полезные данные (requestData), метаданные (metaInfo) и cancellationHandler[SWS_DM_00618]. Метод возвращает ara::core::Future<OperationOutput>, через который асинхронно предоставляется результат или ошибка [SWS_DM_00618]. Обработчик может проверить через cancellationHandler.IsCanceled(), была ли операция отменена, или зарегистрировать уведомление через cancellationHandler.SetNotifier()[SWS_DM_00618].
Завершение сервиса: посредством StopOffer() перенаправление запросов прекращается перед тем, как экземпляр будет уничтожен [SWS_DM_00620], [SWS_DM_00584].
Ошибочные ситуации могут возникать на различных фазах и требуют дифференцированной обработки:
Нарушения при инстанцировании: если сопоставление InstanceSpecifier в модели завершается сбоем, фреймворк сообщает об определенных нарушениях (Violations): InstanceSpecifierMappingIntegrityViolation (спецификатор не может быть разрешен в модели или не указывает на PortPrototype), PortInterfaceMappingViolation (порт не сослан через DiagnosticServiceGenericMapping), ProcessMappingViolation (подходящий процесс не смоделирован) или InstanceSpecifierAlreadyInUseViolation (спецификатор уже используется в процессе) [SWS_DM_00616].
Повторный вызов предложения: если Offer() вызывается, когда сервис уже активно предлагается, вызов завершается сбоем и возвращает код ошибки DiagOfferErrc::kAlreadyOffered (семантика отката) [SWS_DM_00619].
Ошибки выполнения, связанные с диагностикой: если на сообщение UDS в HandleMessage() невозможно дать положительный ответ по существу, результат в Future должен быть заполнен подходящим кодом отрицательного ответа (Negative Response Code, NRC) согласно ISO 14229-1 через DiagUdsNrcErrc[SWS_DM_00618]. Кроме того, реализация должна реагировать на сигналы отмены cancellationHandler, если базовый сеанс диагностики был преждевременно завершен [SWS_DM_00618].
Настоящее руководство по классу было автоматически сгенерировано на основе стандарта AUTOSAR.
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 typed by a pingViolation DiagnosticGenericUdsInterface needs to be referenced by a DiagnosticServiceGenericMapping. 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 DiagnosticGenericUdsInterface.
concurrencyType
Specifies if the interface is implemented as thread safe ( kConcurrent) or non-thread safe (kNotConcurrent).
Request a governed re-review of this record. The record is not changed immediately.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 38c6453769b1Происхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Метод HandleMessage из ara::diag::GenericUDSService служит для специфичной для приложения обработки входящих диагностических UDS-запросов [SWS_DM_00618].
Использование
Diagnostic Management (DM) вызывает этот метод для каждого принятого диагностического сообщения-запроса [SWS_DM_00618]. На основе параметров передаются идентификатор службы (sid), полезные данные (requestData как ara::core::Span<const std::uint8_t>), информация о соединении (metaInfo), а также cancellationHandler. Обработка выполняется асинхронно через возврат ara::core::Future<OperationOutput>[SWS_DM_00618]. Полезные данные в requestData остаются действительными до тех пор, пока не будет выполнено соответствующее Promise или пока операция не будет отменена. С помощью cancellationHandler.IsCanceled() приложение может проверять статус отмены или регистрировать оповещение об отмене сеансов через cancellationHandler.SetNotifier()[SWS_DM_00618].
Обработка ошибок
Если запрос не может быть успешно обработан, приложение сигнализирует об ошибке через возвращенный Future с помощью подходящего отрицательного кода ответа (NRC согласно ISO 14229-1) через DiagUdsNrcErrc[SWS_DM_00618].
Параллелизм и граничные условия
Срок жизни metaInfo: Срок действия объекта metaInfo строго ограничен временем активного выполнения вызова метода [SWS_DM_01345]. Сохранение или использование после возврата из HandleMessage приводит к неопределенному поведению.
Реэ enterабельность и параллелизм: Должны ли вызовы быть потокобезопасными, определяется заданным в конструкторе ara::diag::ConcurrencyTypeSWS Diagnostics §7.3.1.2 «Concurrency of ara::diag interfaces». При kConcurrent DM может параллельно вызывать последующие запросы; при kNotConcurrent DM ожидает, пока не будет предоставлен результат текущего запроса.
Это указание по использованию было сгенерировано автоматически на основе спецификации AUTOSAR Adaptive R25-11.
Руководство разработчика реализации в подготовке (сложность I2)
conditional whether the function has to be implemented thread safe or non-thread safe is determined by the ConcurrencyType given in the constructor
Parameter (in)
Parameter
Beschreibung
sid
Diagnostic Request Service Identifier.
requestData
Diagnostic request data (starting after SID). Lifetime: Valid until Promise is fulfilled or the processing is cancelled by the cancellationHandler.
metaInfo
MetaInfo of the request.
cancellationHandler
This parameter is used to • Query the current cancellation status by calling cancellationHandler.IsCanceled. Returns TRUE in case, the current conversation has been cancelled and FALSE otherwise. • Register a notifier function by calling cancellationHandler.SetNotifier. The registered notifier is called if the current conversation is cancelled.
This Offer will enable the DM to forward request messages to this handler.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 19027d24302fПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Использование
Метод Offer класса ara::diag::GenericUDSService активирует пересылку диагностических запросов: он позволяет Diagnostic Manager (DM) пересылать входящие сообщения с запросами UDS этому обработчику [SWS_DM_00619]. Синхронный вызов не имеет параметров, не блокирует и возвращает в качестве возвращаемого значения ara::core::Result<void>[SWS_DM_00619]. Выполнение, вероятно, обычно происходит (интерпретация:) на этапе инициализации и запуска Adaptive Application до того, как потребуется обрабатывать диагностические сообщения по сети. Вопрос Q-c1e385a434fe1e4e (открытый)
Обработка ошибок и параллелизм
Функция объявлена с noexcept и гарантирует безопасность исключений [SWS_DM_00619]. Если сервис уже предлагался ранее, регистрация завершается сбоем и возвращает код ошибки DiagOfferErrc::kAlreadyOffered с семантикой отката [SWS_DM_00619]. В отношении потокобезопасности интерфейс специфицирован как not thread-safe[SWS_DM_00619]; одновременные вызовы на одном и том же экземпляре должны синхронизироваться вызывающим приложением.
Взаимодействие
Предоставление через Offer соответствует стандартизированному паттерну регистрации в подсистеме диагностики AUTOSAR Adaptive, аналогично тому, как это специфицировано для рутин ([SWS_DM_00557]) или идентификаторов данных ([SWS_DM_00638]). Хотя номенклатура основана на ara::com, речь идет о специфическом для диагностики методе Diagnostic Manager AUTOSAR_AP_SWS_Diagnostics §7.3.4.1.2 «Monitors».
Это указание по использованию было сгенерировано ИИ на основе спецификации AUTOSAR R25-11.
Руководство разработчика реализации в подготовке (сложность I1)
This StopOffer will disable the forwarding of request messages from DM.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 5dba8a8b4077ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Использование
Метод StopOffer класса ara::diag::GenericUDSService деактивирует пересылку входящих диагностических запросов от Diagnostic Management (DM) в экземпляр сервиса [SWS_DM_00620]. Функция предоставляется через заголовочный файл ara/diag/generic_uds_service.h, не ожидает параметров и имеет тип возвращаемого значения void[SWS_DM_00620].
Обработка ошибок
Метод специфицирован с noexcept и как исключениебезопасный (exception safe) [SWS_DM_00620]. Он не выбрасывает исключений и не возвращает кодов ошибок; остановка пересылки происходит детерминированно.
Параллелизм и ограничения
Согласно спецификации, StopOffer классифицирован как непотокобезопасный (not thread-safe) [SWS_DM_00620]. Параллельные вызовы для одного и того же экземпляра должны быть защищены со стороны приложения. Интерпретация: вызов StopOffer обычно выполняется перед уничтожением объекта экземпляра или при его временной недоступности, чтобы предотвратить повисшие пересылки. Вопрос Q-408323dd00c313c0 (открытый)
Взаимодействие
Концепция StopOffer следует согласованному архитектурному паттерну в рамках ara::diag, который также встречается в обобщённых рутинах [SWS_DM_00558], обобщённых идентификаторах данных (Data Identifier) [SWS_DM_00639], Security Access [SWS_DM_00767], а также мониторах [SWS_DM_01089]. Хотя обозначения ориентированы на ara::com, речь идёт о самостоятельной реализации Diagnostic Management AUTOSAR_AP_SWS_Diagnostics §7.3.4.1.2 «Monitors».
Это указание по использованию было сгенерировано ИИ и базируется исключительно на спецификациях релиза AUTOSAR R25-11.
Руководство разработчика реализации в подготовке (сложность I2)
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал