Позволяет устанавливать и опрашивать несколько диагностических условий через общий интерфейс с помощью дескрипторов (handles).
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 2f3f3f7d9426ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Позволяет устанавливать и опрашивать несколько диагностических условий через общий интерфейс с помощью дескрипторов (handles).
Класс ara::diag::MultipleCondition служит для пакетного опроса и обновления нескольких диагностических условий через общий интерфейс порта с помощью числовых дескрипторов ([SWS_DM_01730]). Приложения создают экземпляр объекта через InstanceSpecifier и целенаправленно управляют условиями с помощью SetCondition и GetCondition ([SWS_DM_01729]). Существенными граничными условиями являются то, что класс не допускает ни копирования, ни перемещения, а его деструктор не является потокобезопасным. Кроме того, все адресуемые условия должны быть согласованно сконфигурированы в модели с помощью сопоставлений портов во избежание ошибок инициализации и времени выполнения.
Контекст
Класс ara::diag::MultipleCondition позволяет адаптивному приложению выполнять пакетное управление и модификацию нескольких диагностических условий через общий интерфейс ([SWS_DM_01730]). Функционально и семантически он предоставляет те же возможности, что и одиночные условия, однако расширяет операции адресным обращением через идентификационный дескриптор (AUTOSAR_AP_SWS_Diagnostics с. 237). Каждое управляемое диагностическое условие (DiagnosticCondition) требует в модели связи через DiagnosticMultipleConditionPortMapping с соответствующим образом типизированным портом ([SWS_DM_01727], AUTOSAR_AP_SWS_Diagnostics с. 237). Адресация осуществляется через тип ConditionHandleType; если явное значение overrideId отсутствует, Diagnostic Management (DM) присваивает возрастающие числовые значения, начиная с 0x010000, в алфавитном порядке коротких имен ([SWS_DM_01735]).
Экземпляр создается через конструктор MultipleCondition с передачей ara::core::InstanceSpecifier ([SWS_DM_01727]). Создание является потокобезопасным и объявлено как noexcept ([SWS_DM_01727]). Объект строго привязан к своей локальной области видимости: операции как копирования, так и перемещения удалены; конструктор копирования ([SWS_DM_02072]), конструктор перемещения ([SWS_DM_02071]), оператор присваивания копированием ([SWS_DM_02073]) и оператор перемещающего присваивания ([SWS_DM_02074]) недоступны (=delete).
Деструктор ~MultipleCondition() явно специфицирован как непотокобезопасный ([SWS_DM_01737]). Поэтому приложение должно гарантировать, что до уничтожения завершены все параллельные обращения к объекту. Для регулярных вызовов методов действует условная потокобезопасность ([SWS_DM_01728], [SWS_DM_01729]). Интерпретация: поскольку сигнатура конструктора согласно [SWS_DM_01727] не принимает явного параметра параллелизма, требуемый ConcurrencyType, вероятно, определяется базовой моделью портов в манифесте. Вопрос Q-f29def512a68aae9 (открытый)
Путь использования
Типичная последовательность действий при взаимодействии с диагностическими условиями включает следующие шаги:
Инициализация: приложение создает экземпляр класса с указанием целевого порта ([SWS_DM_01727]).
Установка состояния: с помощью SetCondition(conditionHandle, condition) приложение передает изменение состояния для указанного условия и проверяет результирующий ara::core::Result<void> ([SWS_DM_01729]).
Опрос состояния: через GetCondition(conditionHandle) асинхронно запрашивается текущее состояние адресуемого условия в виде ara::core::Future<ConditionType> ([SWS_DM_01728]).
Освобождение ресурсов: при выходе из области видимости деструктор корректно освобождает интерфейс ([SWS_DM_01737]).
При использовании следует различать обусловленные моделированием ошибки конструирования и функциональные ошибки времени выполнения:
Нарушения при конструировании ([SWS_DM_01727]):
если разрешение InstanceSpecifier завершается сбоем или он не указывает на PortPrototype, сообщается о InstanceSpecifierMappingIntegrityViolation. Ошибка PortInterfaceMappingViolation возникает, если порт не типизирован на DiagnosticMultipleConditionInterface. Если у процесса отсутствует смоделированный аналог, возникает ProcessMappingViolation. Если один и тот же InstanceSpecifier инстанциируется в процессе многократно, это приводит к InstanceSpecifierAlreadyInUseViolation.
Ошибки времени выполнения при вызовах методов:
если в SetCondition ([SWS_DM_01729]) или GetCondition ([SWS_DM_01728]) передается недопустимый параметр или недействительный дескриптор, методы возвращают ошибку DiagErrc::kInvalidArgument. Если базовая функциональность Diagnostic Management временно недоступна, GetCondition подтверждает вызов ошибкой DiagErrc::kServiceNotAvailable ([SWS_DM_01728]).
Настоящее руководство основано исключительно на спецификациях AUTOSAR Adaptive Platform 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 referenced by a pingViolation DiagnosticMultipleConditionPortMapping needs to be typed by a DiagnosticMultipleConditionInterface. 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 DiagnosticMultipleConditionInterface
Request a governed re-review of this record. The record is not changed immediately.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал