Переключатель режима AUTOSAR (M-S) коммуникация использует менеджера по режиму и соединенных пользователей режима. Менеджер по режиму является авторитетным источником для компонентов программного обеспечения, чтобы запросить текущий режим и получить уведомление, когда режим изменяется (переключается). Менеджеру по режиму может предоставить AUTOSAR Basic Software (BSW) или реализовать как компонент программного обеспечения AUTOSAR. Менеджер по режиму реализовал, как компонент программного обеспечения называется менеджером по режиму приложения. Компонент программного обеспечения, который запрашивает менеджера по режиму и получает уведомления о переключателях режима, является пользователем режима.
Чтобы смоделировать пользовательский компонент программного обеспечения режима, используйте порт получателя режима AUTOSAR и событие переключателя режима. Порт получателя режима использует интерфейс (M-S) переключателя режима, чтобы соединиться и связаться с менеджером по режиму, который предоставляет уведомления об изменениях режима. Вы конфигурируете событие переключателя режима, чтобы ответить на заданное изменение режима путем активации связанного выполнимого. В этом примере показано, как сконфигурировать порт получателя режима 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 (на вкладке AUTOSAR, выберите Settings> Model Data Editor). Используйте столбец Source, чтобы переименовать импорт. На более позднем шаге вы сопоставите этот импорт в порт получателя режима AUTOSAR.
Затем примените группу объявления режима mdgEcuModes
к импорту. В Model Data Editor, для импорта, устанавливает Data Type на Enum: mdgEcuModes
. Кроме того, установите Complexity на auto
.
В окне модели откройте подсистему вызова функций под названием Runnable1_subsystem
и внесите следующие изменения:
Переименуйте импортируют ErrorStatus
к CurrentMode
.
Замените блок Constant RTE_E_OK
с блоком Enumerated Constant. (Блок Enumerated Constant может быть найден в группе блока Sources.) Дважды кликают блок, чтобы открыть его диалоговое окно параметров блоков. Установите 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.
В редакторе Отображений Кода сопоставьте импорт Simulink MRPort (ECU mode)
к порту получателя режима AUTOSAR и элементу. Откройте редактор Отображений Кода и выберите вкладку Inports. В строке для импорта MRPort (ECU mode)
, установите DataAccessMode на ModeReceive
, установите Port на MRPort
, и набор Element к mgEcuMode
. (Значение элемента AUTOSAR совпадает со значением ModeGroup, которое вы задали, когда вы добавили интерфейс Interface3
переключателя режима AUTOSAR.)
Этот шаг завершает конфигурацию порта получателя режима AUTOSAR. Нажмите кнопку Validate, чтобы подтвердить настройку компонента AUTOSAR. Если об ошибках сообщают, обращаются к ним и затем повторяют валидацию. Когда валидация передач модели, сохраните модель.
Остающиеся шаги создают событие переключателя режима AUTOSAR и настраивают его, чтобы инициировать активацию выполнимого AUTOSAR. Если вы намереваетесь использовать режимы ECU для выполнения управляющей программы, не используя событие, чтобы активировать выполнимое, можно пропустить остающиеся шаги и реализовать необходимую логику управления потоками в проекте.
Добавить событие переключателя режима AUTOSAR для выполнимого:
Откройте Словарь AUTOSAR. Расширьте AtomicComponents, расширьте ASWC
компонент, и выбирает Runnables. В списке runnables выберите Runnable1
. Этот выбор активирует панель настройки Events для выполнимого.
Добавить событие в список событий для 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 runnables, включая выполнимый Runnable1
, в который вы только добавили событие переключателя режима.
Это завершает настройку события переключателя режима AUTOSAR. Нажмите кнопку Validate, чтобы подтвердить настройку компонента AUTOSAR. Если об ошибках сообщают, обращаются к ним и затем повторяют валидацию. Когда валидация передач модели, сохраните модель. Опционально, можно сгенерировать XML и код С из модели и смотреть результаты.
Чтобы смоделировать менеджера по режиму приложения компонент программного обеспечения, используйте порт отправителя режима AUTOSAR (как задано в Релизе 4 AUTOSAR). Порты отправителя режима используют интерфейс (M-S) переключателя режима, чтобы вывести переключатель режима к связанным пользовательским компонентам режима.
Вы моделируете порт отправителя режима как корневой выходной порт модели, который сопоставлен с портом отправителя режима AUTOSAR и интерфейсом (M-S) переключателя режима. Тип данных выходного порта является классом перечисления с типом хранения беззнаковых целых чисел, представляя группу объявления режима 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
код включает, сослался на ModeSwitchPoints, ModeSwitchInterfaces и ModeDeclarationGroups. Например, следующий 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);