Позволяет приложениям выполнять обобщенную обработку запросов UDS на чтение и запись для диагностических идентификаторов.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 02c252ff66d0ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Позволяет приложениям выполнять обобщенную обработку запросов UDS на чтение и запись для диагностических идентификаторов.
Класс ara::diag::GenericDataIdentifier служит обобщенным интерфейсом для асинхронной обработки запросов UDS на чтение и запись для диагностических идентификаторов в AUTOSAR Adaptive [SWS_DM_00636]. После привязки к порту и активации через Offer() Diagnostic Management перенаправляет запросы в реализованные методы [SWS_DM_00638]. Будучи сингулярным экземпляром, объект не может быть ни скопирован, ни перемещен, тогда как потокобезопасность обработки запросов управляется через конфигурацию параллелизма, выбранную при вызове конструктора.
Контекст
Класс ara::diag::GenericDataIdentifier представляет собой обобщенный сервисный интерфейс внутри функционального кластера Diagnostic Management (DM) платформы AUTOSAR Adaptive Platform SWS Diagnostics §8.2 «GenericDataIdentifier». В то время как типоспецифичные интерфейсы привязаны к жестко смоделированным типам данных, GenericDataIdentifier служит для гибкой обработки диагностических идентификаторов (Data Identifiers, DID), при которой 16-битный идентификатор передается динамически в качестве параметра.
В обработке диагностики участвуют преимущественно три роли:
Внешний диагностический тестер, направляющий автомобилю стандартизированные UDS-службы, такие как ReadDataByIdentifier (0x22) или WriteDataByIdentifier (0x2E).
Diagnostic Management (DM), которое принимает диагностические запросы, проверяет их и пересылает через определенные интерфейсы портов соответствующему экземпляру приложения, если он ранее был активирован через Offer[SWS_DM_00638].
Специфичная для приложения реализация GenericDataIdentifier, которая инкапсулирует фактическую логику обработки, предоставляя методы Read[SWS_DM_00636] и Write[SWS_DM_00637] и асинхронно возвращая данные.
Жизненный цикл
Экземпляр ara::diag::GenericDataIdentifier создается явно с помощью своего конструктора [SWS_DM_00634]. При этом вызывающая сторона привязывает объект к ara::core::InstanceSpecifier, ссылающемуся на PortPrototype смоделированного DiagnosticDataIdentifierGenericInterface. С помощью аргумента concurrencyType (типа DataIdentifierConcurrencyType) определяется, будут ли запросы передаваться обработчику параллельно (kConcurrent) или последовательно (kNotConcurrent) [SWS_DM_00634].
С точки зрения владения и времени жизни GenericDataIdentifier смоделирован как сингулярный, некопируемый и неперемещаемый экземпляр:
После создания экземпляр находится в неактивном состоянии; Diagnostic Management еще не пересылает запросы. Пересылка активируется только вызовом Offer()[SWS_DM_00638]. Чтобы снова отключить пересылку диагностических запросов, приложение вызывает StopOffer()[SWS_DM_00639]. Уничтожение объекта осуществляется через виртуальный деструктор [SWS_DM_00635].
В отношении многопоточности конструктор является потокобезопасным (thread-safe) [SWS_DM_00634]. Напротив, административные методы Offer()[SWS_DM_00638] и StopOffer()[SWS_DM_00639], а также деструктор [SWS_DM_00635] специфицированы как непотокобезопасные. Потокобезопасность методов Read и Write условно зависит от выбранного concurrencyType[SWS_DM_00636], [SWS_DM_00637].
Типичный сквозной процесс обработки диагностических запросов делится на следующие шаги:
Инициализация: приложение создает экземпляр своего производного класса обработчика с указанием InstanceSpecifier, а также конфигурации параллелизма [SWS_DM_00634]. Интерпретация: на практике это обычно должно происходить на этапе инициализации процесса приложения. Вопрос Q-32596fba68253958 (открытый)
При поступлении запроса на чтение DM вызывает метод Read(dataIdentifier, metaInfo, cancellationHandler)[SWS_DM_00636]. Приложение проверяет переданный 16-битный идентификатор и асинхронно возвращает ara::core::Future<OperationOutput>.
При поступлении запроса на запись DM вызывает Write(dataIdentifier, requestData, metaInfo, cancellationHandler)[SWS_DM_00637]. Полезные данные в requestData остаются действительными до тех пор, пока соответствующий Promise не будет выполнен или обработка не будет отменена.
Проверка отмены: во время длительных операций обработчик может проверить через cancellationHandler.IsCanceled(), была ли прервана коммуникация, или зарегистрировать функцию уведомления через cancellationHandler.SetNotifier[SWS_DM_00636], [SWS_DM_00637].
Отмена регистрации службы: перед завершением работы обработчика приложение вызывает StopOffer()[SWS_DM_00639], в результате чего DM прекращает пересылку.
Диаграмма последовательности: взаимодействие между внешним тестером, Diagnostic Management и GenericDataIdentifier при UDS-запросе на чтение. Источники: [SWS_DM_00638], [SWS_DM_00636]
Сценарии ошибок
Ошибки могут возникать на различных этапах взаимодействия:
Нарушения конфигурации и сопоставления: если InstanceSpecifier не удается разрешить в модели или если он не указывает на PortPrototype, имеет место InstanceSpecifierMappingIntegrityViolation[SWS_DM_00634]. При отсутствии привязки к DiagnosticDataPortMapping возникает PortInterfaceMappingViolation[SWS_DM_00634]. Отсутствующее сопоставление процессов порождает ProcessMappingViolation, а уже используемый InstanceSpecifier приводит к InstanceSpecifierAlreadyInUseViolation[SWS_DM_00634].
Повторное предложение: если Offer() вызывается, когда служба уже активно предлагается, метод возвращает ara::core::Result с кодом ошибки DiagOfferErrc::kAlreadyOffered[SWS_DM_00638].
Функциональные диагностические ошибки: если запрос на чтение или запись не может быть обслужен функционально, приложение возвращает в Future не статус успеха, а стандартизированный UDS-NRC (Negative Response Code) через DiagUdsNrcErrc в соответствии с ISO 14229-1 [SWS_DM_00636], [SWS_DM_00637].
Настоящее руководство основано на спецификации AUTOSAR R25-11 и сформировано автоматически.
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 DiagnosticDataIdentifierGenericInterface needs to be referenced by a DiagnosticDataPortMapping. 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 DiagnosticDataIdentifierGenericInterface.
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.
This Offer will enable the DM to forward request messages to this handler.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 860e6bd15d7fПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Использование: Синхронный метод Offer класса ara::diag::GenericDataIdentifier ([SWS_DM_00638]) служит для регистрации обработчика обобщенного идентификатора данных в Diagnostic Management (DM). С помощью этого вызова DM авторизуется пересылать входящие диагностические запросы (Request Messages) для соответствующего идентификатора данных этому обработчику ([SWS_DM_00638]). Функция не принимает входных параметров и синхронно возвращает ara::core::Result<void> ([SWS_DM_00638]), который сообщает об успехе или ошибке.
Обработка ошибок: Метод объявлен с noexcept и гарантирует полную исключениебезопасность (exception safe) ([SWS_DM_00638]). Возможные ошибки передаются через ara::core::Result. Если обработчик уже был предоставлен ранее, функция возвращает код ошибки DiagOfferErrc::kAlreadyOffered с семантикой отката ([SWS_DM_00638]). Он соответствует общему перечислению ошибок DiagErrc::kAlreadyOffered ([SWS_DM_00514]).
Параллелизм и ограничения: Функция специфицирована как непотокобезопасная (not thread-safe) ([SWS_DM_00638]). Следовательно, вызовы на одном и том же экземпляре должны быть защищены от одновременного доступа. Поскольку для GenericDataIdentifier не специфицирован отдельный метод отмены регистрации, предложение службы, вероятно, привязано к сроку жизни экземпляра обработчика (интерпретация). Вопрос Q-7c64a5bd308464a8 (открытый)
Взаимодействие: Процедура следует сквозному шаблону предоставления Diagnostic Management. Аналогичные интерфейсы имеются для типоспецифических идентификаторов данных ([SWS_DM_00599]), обобщенных процедур ([SWS_DM_00557]), а также обобщенных служб UDS ([SWS_DM_00619]).
Это указание по использованию было сгенерировано системой ИИ.
Руководство разработчика реализации в подготовке (сложность I1)
Called for ReadDataByIdentifier request for this DiagnosticDataIdentifier.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 7772a86b7791Происхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Использование
Метод Read класса ara::diag::GenericDataIdentifier вызывается, как только поступает диагностический запрос для ReadDataByIdentifier (UDS 0x22) для соответствующего идентификатора данных [SWS_DM_00636]. В качестве параметров функция принимает числовой идентификатор dataIdentifier, контекст metaInfo, а также cancellationHandler. Через cancellationHandler приложение может с помощью IsCanceled запрашивать статус отмены или через SetNotifier регистрировать функцию оповещения для отмененных диалогов [SWS_DM_00636]. Результат предоставляется асинхронно через ara::core::Future<OperationOutput>, который в случае успеха возвращает полезные данные (OperationOutput) [SWS_DM_00636].
Обработка ошибок
В случае ошибки Future возвращает отрицательное возвращаемое значение UDS (NRC) согласно ISO 14229-1 через DiagUdsNrcErrc[SWS_DM_00636]. Если интерфейс еще не предлагается или больше не предлагается через offer(), Diagnostic Management (DM) самостоятельно отвечает с NRC 0x94 (ResourceTemporarilyNotAvailable) [SWS_DM_01257]. Если достигнут настроенный лимит сообщений Response Pending, сервер прерывает обработку и отвечает с NRC 0x10 (generalReject) [SWS_DM_00369].
Параллелизм и взаимодействие
Метод объявлен как noexcept и является исключениебезопасным [SWS_DM_00636]. Его потокобезопасность является условной: должна ли реализация быть потокобезопасной, управляется через переданный в конструкторе ConcurrencyType[SWS_DM_00636]. Если readWrite установлено в kConcurrent, DM может запускать операции чтения и записи параллельно, в противном случае (kNotConcurrent) вызов выполняется последовательно [SWS_DM_00939]. В отличие от специфических интерфейсов, таких как [SWS_DM_00640], GenericDataIdentifier гибко охватывает обобщенные диапазоны DID через переданный ID [SWS_DM_00636].
Это указание по использованию было сгенерировано автоматически на основе спецификации AUTOSAR.
Руководство разработчика реализации в подготовке (сложность I1)
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
dataIdentifier
the corresponding DataIdentifier
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 StopOffer will disable the forwarding of request messages from DM.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: bd73a88bfde2ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Использование и контекст вызова
Функция-член StopOffer класса ara::diag::GenericDataIdentifier служит для деактивации пересылки входящих сообщений запросов из Diagnostic Management (DM) соответствующему экземпляру [SWS_DM_00639]. Вызов выполняется синхронно через интерфейс из заголовочного файла #include "ara/diag/generic_data_identifier.h"[SWS_DM_00639]. Функция имеет сигнатуру void StopOffer() noexcept;, не принимает входных параметров и не возвращает значения [SWS_DM_00639].
Обработка ошибок и параллелизм
Спецификация определяет StopOffer как безопасную относительно исключений (exception safe) и гарантирует отсутствие исключений с помощью идентификатора noexcept[SWS_DM_00639]. Специфические коды ошибок, реакции на ошибки или сообщения в DET либо DEM для этой операции не предусмотрены. В отношении параллелизма метод классифицирован как непотокобезопасный (not thread-safe) [SWS_DM_00639]. Поэтому параллельные вызовы на одном и том же экземпляре должны синхронизироваться вызывающей стороной. Интерпретация: уже начатые запросы в Diagnostic Management до окончательной остановки пересылки, вероятно, ещё будут обработаны в штатном режиме. Вопрос Q-94a464dc832c055c (открытый)
Взаимодействие в диагностическом модуле
Шаблон отзыва предоставления сервиса стандартизирован и согласованно применяется в диагностическом модуле. Аналогичные методы StopOffer существуют, среди прочего, для:
типоспецифических идентификаторов данных через DataIdentifierInterface::StopOffer[SWS_DM_00600], а также элементов данных [SWS_DM_00617],
обобщённых рутин через GenericRoutine::StopOffer[SWS_DM_00558] и типоспецифических интерфейсов рутин [SWS_DM_00595],
Called for WriteDataByIdentifier request for this DiagnosticDataIdentifier.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 7b195835c98cПроисхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Метод Write класса ara::diag::GenericDataIdentifier вызывается Diagnostic Management, как только принимается UDS-запрос службы WriteDataByIdentifier (0x2E) [SWS_DM_00637]. Необходимым условием для вызова является то, что запрошенный идентификатор данных поддерживается, а соответствующий диагностический сеанс и уровень безопасности разрешают выполнение [SWS_DM_00186], [SWS_DM_00415], [SWS_DM_00416].
Вызов выполняется со следующими параметрами [SWS_DM_00637]:
dataIdentifier: 16-битный идентификатор записываемого идентификатора данных.
requestData: ara::core::Span с необработанными данными запроса без префикса DID. Буфер остается действительным до тех пор, пока не будет выполнено соответствующее Promise или пока обработка не будет отменена.
metaInfo: дополнительные метаданные к диагностическому запросу.
cancellationHandler: служит для контроля преждевременной отмены диалога через IsCanceled, а также для регистрации оповещения об отмене через SetNotifier.
Выполнение происходит асинхронно и возвращает ara::core::Future<void>[SWS_DM_00637]. При успешной обработке Promise выполняется с void для положительного ответного сообщения. При возникновении ошибки Future должен быть завершен с подходящим отрицательным возвращаемым значением UDS (NRC) согласно ISO 14229-1 через DiagUdsNrcErrc[SWS_DM_00637]. Метод объявлен как noexcept и должен быть реализован исключениебезопасным [SWS_DM_00637].
Что касается параллелизма, потокобезопасность является условной: должна ли Write реализовываться потокобезопасной, зависит от ConcurrencyType, переданного в конструкторе при инстанцировании [SWS_DM_00637]. Параллельное выполнение операций чтения и записи управляется флагом readWrite[SWS_DM_00939].
Этот текст был создан ИИ. Все сведения основаны исключительно на спецификациях релиза R25-11.
Руководство разработчика реализации в подготовке (сложность I1)
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
dataIdentifier
the corresponding DataIdentifier
requestData
Content of request message (without DataIdentifier). 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.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал