Служит для стандартизированного подключения и управления внешними транспортными протоколами UDS в управлении диагностикой.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: ce8b113ec3f5ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Служит для стандартизированного подключения и управления внешними транспортными протоколами UDS в управлении диагностикой.
Пространство имен apext::diag::uds_transport предоставляет транспортный интерфейс C++ для разделения универсального управления диагностикой и конкретных транспортных протоколов UDS AUTOSAR_AP_SWS_Diagnostics §7.1 «UDS Transport Layer». Плагины протоколов наследуются от базового класса UdsTransportProtocolHandler и проходят строгий жизненный цикл, состоящий из конструирования, инициализации, запуска и упорядоченного останова [SWS_DM_00329]. Входящие сообщения регистрируются через IndicateMessage и при наличии свободных емкостей получают управляемый памятью UdsMessagePtr для приема полезных данных. Ключевым граничным условием является то, что после останова не допускаются никакие дальнейшие вызовы к управлению диагностикой, кроме сообщения с подтверждением.
Контекст
Пространство имен apext::diag::uds_transport определяет стандартизированный транспортный интерфейс C++ (Transport Protocol API) для управления диагностикой (DM) в AUTOSAR Adaptive Platform AUTOSAR_AP_SWS_Diagnostics §7.1 «UDS Transport Layer». Архитектура функционально отделяет универсальное ядро управления диагностикой от конкретных сетевых и транспортных уровней. Таким образом, стандартизированные протоколы, такие как DoIP, а также будущие или специфические для производителя транспортные протоколы (например, для CAN, CAN-FD или FlexRay) могут быть интегрированы в виде модульных плагинов AUTOSAR_AP_SWS_Diagnostics §7.1 «UDS Transport Layer».
Центральным связующим звеном выступает класс UdsTransportProtocolMgr, который координирует взаимодействие между экземплярами Diagnostic Server и подключенными транспортными протоколами. Конкретные плагины протоколов наследуются от абстрактного базового класса UdsTransportProtocolHandlerAUTOSAR_AP_SWS_Diagnostics §7.1.1 «Support of UDS Transport Layer»[SWS_DM_00315]. Отдельные экземпляры обработчиков адресуются через UdsTransportProtocolHandlerID[SWS_DM_00336], тогда как коммуникационные каналы идентифицируются через тип ChannelID[SWS_DM_00337]. Для поддержки периодических запросов данных в соответствии со службой ISO 0x2A интерфейс дополнительно подключает класс UdsTransportProtocolPeriodicHandler.
Жизненный цикл
Управление диагностикой управляет жизненным циклом каждого экземпляра UdsTransportProtocolHandler в строго заданной последовательности [SWS_DM_00329]:
Создание: DM инстанцирует плагин протокола через конструктор UdsTransportProtocolHandler::UdsTransportProtocolHandler[SWS_DM_00329].
Инициализация: DM вызывает UdsTransportProtocolHandler::Initialize[SWS_DM_00329]. За исключением запроса GetPeriodicHandler, DM не имеет права вызывать другие методы обработчика до успешного возврата kInitializeOk[SWS_DM_01746].
Запуск и работа: после успешной инициализации обработчик активируется с помощью UdsTransportProtocolHandler::Start. Только после этого вызова DM обрабатывает сообщения о реактивированных каналах через UdsTransportProtocolMgr::ChannelReestablished[SWS_DM_01744].
Завершение: если DM переходит в состояние ApplicationState.kTerminating, оно вызывает UdsTransportProtocolHandler::Stop для всех активных плагинов [SWS_DM_00333]. После возврата из этого вызова плагин имеет право вызывать исключительно UdsTransportProtocolMgr::HandlerStopped[SWS_DM_01741]. DM активно ожидает этого подтверждения [SWS_DM_00340].
В процессе работы пересылка входящих диагностических сообщений осуществляется посредством скоординированного взаимодействия обработчика и менеджера:
Индикация сообщения: если обработчик принимает данные на канале (ChannelID[SWS_DM_00337]), он вызывает UdsTransportProtocolMgr::IndicateMessage. При этом он может передать предварительные полезные данные в payloadInfo; рекомендуется передавать как минимум первые два байта для раннего распознавания функциональных запросов AUTOSAR_AP_SWS_Diagnostics §7.1 «UDS Transport Layer».
Выделение буфера: если DM готово к приему, IndicateMessage отвечает значением std::pair из IndicationResult::kIndicationOk и действительным интеллектуальным указателем UdsMessagePtr[SWS_DM_00309][SWS_DM_00385]. Адресуемый объект UdsMessage имеет минимальную вместимость в один байт [SWS_DM_00385]. Буфер управляется как std::unique_ptr со специфическим делитором ядра DM и не является потокобезопасным [SWS_DM_00303]. Для операций чтения существует константный эквивалент UdsMessageConstPtr[SWS_DM_00304].
Передача данных: обработчик записывает принятые диагностические данные в предоставленный буфер, байтовая последовательность которого типизирована через тип ByteSpan (псевдоним для ara::core::Span<ara::core::Byte>[SWS_DM_00338]). Предположительно, предоставление отдельного класса UdsTransportProtocolPeriodicHandler через GetPeriodicHandler служит для разделения службы периодической передачи 0x2A и стандартного тракта сообщений UDS. Вопрос Q-230ef0b7c384c594 (открытый)
Спецификация определяет конкретные состояния ошибок и предварительные условия для транспортного подключения:
Неудачная инициализация: если UdsTransportProtocolHandler::Initialize возвращает результат kInitializeFailed, DM немедленно прерывает процесс инициализации для этого обработчика и больше не вызывает у него никаких методов [SWS_DM_01745].
Отклонение при занятом ядре диагностики: если DM заблокировано текущей обработкой службы той же сессии Tester-Present и речь идет не о функциональном Tester-Present с payloadInfo0x3E 0x80, IndicateMessage возвращает результат kIndicationOccupied вместе с nullptr вместо буфера сообщений [SWS_DM_00386].
Недопустимые вызовы после завершения: если плагин после возврата из Stop вызывает другой метод UdsTransportProtocolMgr, кроме HandlerStopped, это нарушает требования протокола [SWS_DM_01741]. Точно так же DM игнорирует сигналы, такие как ChannelReestablished, если они поступают до успешного вызова Start[SWS_DM_01744].
Данное руководство основано исключительно на спецификациях AUTOSAR Adaptive Platform Release R25-11.
KI-gestützte Gruppierung auf Basis der Records und Spezifikationsauszüge; keine Gliederung aus der AUTOSAR-Spezifikation.
Диаграмма классов
Abgerundete Rahmen = Namespace- bzw. Klassen-Scopes; hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); graue Boxen = namespace-fremde bzw. externe Basisklassen. Klicken öffnet die jeweilige Klassen- bzw. cppreference-Seite.
This is the unique_ptr for constant UdsMessages containing a custom deleter as provided by the generic/core DM part towards the UdsTransportLayer-Plugin.
This is the unique_ptr for constant UdsMessages containing a custom deleter as provided by the generic/core DM part towards the UdsTransportLayer-Plugin.
Hinweise: How the exact typedef for UdsMessageConstPtr looks like, is up to the DM product vendor. I.e. how f.i. the deleter signature looks like ... basically the minimal agreement is: UdsMessage ConstPtr shall behave like a std::unique_ptr<const UdsMessage>!
Request a governed re-review of this record. The record is not changed immediately.
Hinweise: How the exact typedef for UdsMessagePtr looks like, is up to the DM product vendor. I.e. how f.i. the deleter signature looks like ... basically the minimal agreement is: UdsMessagePtr shall behave like a std::unique_ptr<UdsMessage>!
Request a governed re-review of this record. The record is not changed immediately.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал