Коммуникация переключателя режима (M-S) AUTOSAR основана на менеджере режимов и подключенных пользователях режима. Менеджер режимов является авторитетным источником для программных компонентов, чтобы запросить текущий режим и получить уведомление при изменении режима (switches). Диспетчер режимов может быть предоставлен программным обеспечением AUTOSAR Basic Software (BSW) или реализован как программный компонент AUTOSAR. Менеджер режимов, реализованный как программный компонент, называется менеджером режимов приложений. Программный компонент, который запрашивает диспетчер режимов и получает уведомления о переключателях режимов, является пользователем режима.
Чтобы смоделировать программный компонент пользователя режима, используйте порт приемника режима AUTOSAR и событие переключения режима. Порт приемника режима использует интерфейс mode-switch (M-S) для соединения и связи с менеджером режимов, который обеспечивает уведомления об изменениях режима. Вы конфигурируете событие переключения режима, чтобы ответить на указанное изменение режима путем активации связанного runnable. В этом примере показано, как сконфигурировать порт приемника режима AUTOSAR, событие переключения режима и связанные элементы для пользователя режима.
Примечание
Этот пример не реализует значимый алгоритм для управления выполнением компонента на основе текущего режима ECU.
Откройте копию примера модели с возможностью записи autosar_swc_expfcns
.
Объявите группу объявления режима - группу значений режима - используя Simulink® перечисление. Укажите тип склада как беззнаковое целое число. Введите следующую команду в MATLAB® Командное окно:
Simulink.defineIntEnumType('mdgEcuModes', ... {'Run', 'Sleep'}, [0;1], ... 'Description', 'Mode declaration group for ECU modes', ... 'DefaultValue', 'Run', ... 'HeaderFile', 'Rte_Type.h', ... 'AddClassNameToEnumNames', false,... 'StorageType', 'uint16');
Переименуйте входной порт Simulink RPort_DE1 (ErrorStatus)
на MRPort (ECU mode)
. Например, откройте Model Data Editor (на вкладке Modeling, нажмите Model Data Editor). Используйте столбец Source для переименования входного порта. На более позднем этапе этот входной порт будет сопоставлен с портом приемника режима AUTOSAR.
Затем примените группу объявлений о режиме mdgEcuModes
к входному порту. В Model Data Editor для входного порта установите Data Type равным Enum: mdgEcuModes
. Дополнительно установите Complexity равным auto
.
В окне модели откройте подсистему вызова функций с именем Runnable1_subsystem
и внести следующие изменения:
Переименуйте входной порт ErrorStatus
на CurrentMode
.
Замените блок Constant RTE_E_OK
с перечисленным постоянным блоком. (Блок Перечисленная Константа можно найти в группе блоков Источники.) Дважды кликните блок, чтобы открыть диалоговое окно параметров блоков. Установите Output data type значение Enum: mdgEcuModes
и установите Value равным mdgEcuModes.Run
. Нажмите OK.
Добавьте интерфейс переключателя режима AUTOSAR к модели. Откройте словарь AUTOSAR. Выберите M-S Interfaces. Нажмите кнопку Add. В диалоговом окне Add Interfaces задайте Name следующим Interface3
и задайте ModeGroup следующим mgEcuMode
.
Свойство IsService интерфейса M-S по умолчанию равняется true
. В целях этого примера можно оставить IsService при значении по умолчанию, если у вас нет причины его изменить.
Нажмите Add.
Значение, заданное для группы режимов AUTOSAR, используется на более позднем этапе, когда вы сопоставляете входной порт Simulink с портом и элементом приемника режимов AUTOSAR.
Добавьте порт приемника режима AUTOSAR к модели. Разверните AtomicComponents, разверните компонент ASWC
, и выберите ModeReceiverPorts. Чтобы открыть диалоговое окно Add Ports, нажмите кнопку Add. В диалоговом окне Add Ports задайте Name следующим MRPort
. Interface уже установлено на Interface3
(единственное доступное значение в этом строении), и Type уже установлено на ModeReceiver
. Нажмите Add.
В редакторе Code Mappings сопоставьте входной порт Simulink MRPort (ECU mode)
к порту и элементу AUTOSAR mode-receiver. Откройте редактор Отображения и выберите вкладку Inports. В строке для inport MRPort (ECU mode)
, установите DataAccessMode равным ModeReceive
, установите Port равным MRPort
, и установите Element равным mgEcuMode
. (Значение элемента AUTOSAR соответствует ModeGroup значению, заданному при добавлении интерфейса переключателя режима AUTOSAR Interface3
.)
Этот шаг завершает строение порта приемника режима AUTOSAR. Нажмите кнопку Validate для проверки строения компонента AUTOSAR. Если сообщается об ошибках, устраните их и повторите валидацию. Когда модель пройдет валидацию, сохраните модель.
Примечание
Остальные шаги создают событие переключения режима AUTOSAR и настраивают его, чтобы инициировать активацию выполняемого AUTOSAR. Если вы намерены использовать режимы ECU для управления выполнением программы, без использования события для активации runnable, можно пропустить оставшиеся шаги и реализовать необходимую логику управления потоком в своем проекте.
Чтобы добавить событие переключения режима AUTOSAR для выполняемого, выполните следующие действия.
Откройте словарь AUTOSAR. Разверните AtomicComponents, разверните ASWC
Компонентом и выберите Runnables. В списке исполняемых элементов выберите Runnable1
. Этот выбор активирует панель строения Events для runnable.
Добавление события в список событий для Runnable1
, нажмите Add Event. Для нового события установите Event Type равным ModeSwitchEvent
. (Это активирует Event Properties подпанель.) Задайте Event Name следующим Event_Run
.
В подпанели Event Properties задайте Mode Activation OnEntry
, установите Mode Receiver Port равным MRPort
, и установите Mode Declaration равным Run
. Нажмите Apply.
Откройте редактор Отображения и выберите вкладку Functions. В этой модели примера функции точки входа Simulink уже были сопоставлены с выполняемыми AUTOSAR, включая выполняемые Runnable1
, к которому вы только что добавили событие переключения режима.
Это завершает строение события переключения режима AUTOSAR. Нажмите кнопку Validate для проверки строения компонента AUTOSAR. Если сообщается об ошибках, устраните их и повторите валидацию. Когда модель пройдет валидацию, сохраните модель. Вы также можете сгенерировать XML и Код С из модели и просмотреть результаты.
Чтобы смоделировать программный компонент менеджера режимов приложений, используйте порт отправителя режима AUTOSAR. Порты отправителя режима используют интерфейс переключателя режима (M-S) для вывода переключателя режима на пользовательские компоненты подключенного режима.
Вы моделируете порт отправителя режима как корневой выходной порт модели, который сопоставлен с портом отправителя режима AUTOSAR и интерфейсом переключателя режима (M-S). Тип данных outport является классом перечисления с беззнаковым целочисленным типом хранилища, представляющим группу объявления режима AUTOSAR.
В этом примере показано, как сконфигурировать порт отправителя режима и связанные элементы для менеджера режима приложения.
Откройте модель, сконфигурированную для генерации кода AUTOSAR. Этот пример использует модель, которая содержит Stateflow® логика поддержания состояния двигателя. Модель выводит текущее значение режима двигателя.
Объявить группу объявления режима - группу значений режима. Значения режима можно объявить с помощью перечисления Simulink. В этом примере логика Stateflow задает EngineModes
значения Off
, Crank
, Stall
, Idle
, и Run
. Для примера:
Добавьте интерфейс AUTOSAR M-S к модели. Откройте словарь AUTOSAR и выберите M-S Interfaces. Нажмите кнопку Add. В диалоговом окне Add Interfaces установите isService равным true
и введите имя ModeGroup. В этом примере группа объявления режима EngineModes
.
Добавьте порт отправителя в режиме AUTOSAR к модели. Разверните AtomicComponents, разверните компонент и выберите ModeSenderPorts. Нажмите кнопку Add. В диалоговом окне Add Ports задайте Interface имя созданного интерфейса M-S.
Отобразите выходной порт Simulink, который выводит значение режима, на созданный вами порт отправителя режима AUTOSAR. Откройте редактор Отображения и выберите вкладку Outports. Чтобы сопоставить порт вывода с портом отправителя в режиме AUTOSAR, установите DataAccessMode равным ModeSend
выберите имя Port и для Element выберите имя группы объявлений режима, заданное для интерфейса M-S.
Сгенерируйте код для модели.
Код ARXML включает ссылку Mode Switch Points, Mode Switch Interfaces и Mode Declaration Group. Например, следующий код ARXML описывает ModeSwitchPoint для порта отправителя режима AUTOSAR.
<RUNNABLE-ENTITY> ... <MODE-SWITCH-POINTS> <MODE-SWITCH-POINT UUID="..."> <SHORT-NAME>OUT_currentState_EngineModes</SHORT-NAME> <MODE-GROUP-IREF> <CONTEXT-P-PORT-REF DEST="P-PORT-PROTOTYPE">/pkg/swc/mEngineFailureMode/currentState </CONTEXT-P-PORT-REF> <TARGET-MODE-GROUP-REF DEST="MODE-DECLARATION-GROUP-PROTOTYPE"> /pkg/if/msInterface/EngineModes</TARGET-MODE-GROUP-REF> </MODE-GROUP-IREF> </MODE-SWITCH-POINT> </MODE-SWITCH-POINTS> ... </RUNNABLE-ENTITY>
Этот Код С включает в себя Rte_Switch
Вызовы API для передачи переключателей режима другим компонентам программного обеспечения. Например, следующий код передает EngineModes
переключатель режима.
/* Outport: '<Root>/EngineMode' */ Rte_Switch_currentState_EngineModes(mEngineFailureMode_B.engstate);