exponenta event banner

Конфигурирование связи между переключателями в режиме AUTOSAR

Обмен данными между переключателями режимов AUTOSAR (M-S) осуществляется на основе менеджера режимов и подключенных пользователей режимов. Менеджер режимов является авторитетным источником для компонентов программного обеспечения для запроса текущего режима и получения уведомления при изменении режима (переключениях). Менеджер режимов может быть предоставлен основным программным обеспечением AUTOSAR (BSW) или реализован как программный компонент AUTOSAR. Менеджер режимов, реализованный как программный компонент, называется менеджером режимов приложений. Программный компонент, который запрашивает диспетчер режимов и принимает уведомления о переключателях режимов, является пользователем режима.

Конфигурирование порта приемника режима и события переключения режима для пользователя режима

Для моделирования пользовательского программного компонента режима используйте порт приемника режима AUTOSAR и событие переключения режима. Порт приемника режима использует интерфейс переключения режима (M-S) для соединения и связи с менеджером режима, который предоставляет уведомления об изменениях режима. Событие mode-switch настраивается так, чтобы реагировать на указанное изменение режима, активируя связанный выполняемый объект. В этом примере показано, как настроить порт приемника режима AUTOSAR, событие переключения режима и связанные элементы для пользователя режима.

Примечание

В этом примере не реализован значимый алгоритм управления выполнением компонента на основе текущего режима ECU.

  1. Открытие копии примера модели с возможностью записи autosar_swc_expfcns.

  2. Объявите группу объявления режима - группу значений режима - с помощью перечисления 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');
  3. Переименование входного порта Simulink RPort_DE1 (ErrorStatus) кому MRPort (ECU mode). Например, откройте Редактор данных модели (на вкладке Моделирование (Modeling) щелкните Редактор данных модели (Model Data Editor)). Используйте столбец Источник (Source), чтобы переименовать входной порт. На следующем шаге этот входной порт будет сопоставлен с портом-приемником режима AUTOSAR.

  4. Затем примените группу объявления режима mdgEcuModes на вход. В редакторе данных модели для параметра «Ввод» задайте для параметра «Тип данных» значение Enum: mdgEcuModes. Кроме того, задайте для параметра Сложность значение auto.

  5. В окне модели откройте подсистему вызова функций с именем Runnable1_subsystem и внесите следующие изменения:

    1. Переименовать вход ErrorStatus кому CurrentMode.

    2. Заменить блок константы RTE_E_OK с блоком «Перечисляемая константа». (Блок «Перечисляемая константа» находится в группе блоков «Источники».) Дважды щелкните блок, чтобы открыть диалоговое окно параметров блока. Задайте для типа данных Output значение Enum: mdgEcuModes и установите значение в mdgEcuModes.Run. Нажмите кнопку ОК.

  6. Добавьте в модель интерфейс переключения режимов AUTOSAR. Откройте словарь AUTOSAR. Выберите M-S Interfaces. Нажмите кнопку «Добавить». В диалоговом окне «Добавление интерфейсов» укажите «Имя» как Interface3 и укажите GroupGroup как mgEcuMode.

    Свойство IsService интерфейса M-S по умолчанию имеет значение true. Для целей этого примера можно оставить IsService по умолчанию, если у вас нет причины изменять его.

    Нажмите "Добавить".

    Значение, указанное для группы режимов AUTOSAR, используется на следующем шаге при сопоставлении входного порта Simulink с портом и элементом приемника режимов AUTOSAR.

  7. Добавьте в модель порт приемника режима AUTOSAR. Развернуть компонент AtomicComponents, развернуть компонент ASWC, и выберите ModeReceiverPorts. Для открытия диалогового окна «Добавить порты» нажмите кнопку «Добавить». В диалоговом окне «Добавление портов» укажите «Имя» как MRPort. Для интерфейса уже установлено значение Interface3 (единственное доступное значение в этой конфигурации), и для параметра Type уже установлено значение ModeReceiver. Нажмите "Добавить".

  8. В редакторе сопоставлений кодов сопоставьте входной порт Simulink MRPort (ECU mode) к порту и элементу приемника режима AUTOSAR. Откройте редактор сопоставлений кодов и перейдите на вкладку «Inports». В строке для ввода MRPort (ECU mode), установите DataGroupMode в значение ModeReceive, установите порт в значение MRPortи задайте для параметра Element значение mgEcuMode. (Значение элемента AUTOSAR соответствует значению, указанному при добавлении интерфейса переключения режимов AUTOSAR Interface3.)

    На этом шаге завершается конфигурирование порта приемника режима AUTOSAR. Нажмите кнопку Validate для проверки конфигурации компонента AUTOSAR. Если сообщается об ошибках, устраните их и повторите проверку. Когда модель пройдет проверку, сохраните модель.

    Примечание

    Остальные шаги создают событие переключения режима AUTOSAR и настраивают его для запуска активации выполняемого AUTOSAR. Если предполагается использовать режимы ECU для управления выполнением программы без использования события для активации выполняемой программы, можно пропустить оставшиеся шаги и внедрить в проект требуемую логику управления потоком.

  9. Чтобы добавить событие переключения режима AUTOSAR для выполняемого:

    1. Откройте словарь AUTOSAR. Разверните узел AtomicComponents, разверните узел ASWC и выберите Runnables. В списке таблиц выполнения выберите Runnable1. Этот выбор активирует панель конфигурации События для выполняемой.

    2. Добавление события в список событий для Runnable1щелкните Добавить событие. Для нового события задайте для параметра Тип события значение ModeSwitchEvent. (При этом активируется подпанель свойств события.) Укажите имя события как Event_Run.

    3. В подпанели «» Свойства события «» установите для параметра «» Активация режима «» значение OnEntry, установите для параметра Mode Receiver Port значение MRPortи задайте для параметра «Объявление режима» значение Run. Нажмите кнопку «Применить».

  10. Откройте редактор Сопоставления кодов и перейдите на вкладку Функции. В этой примерной модели функции точек входа Simulink уже сопоставлены с runnables AUTOSAR, включая runnable. Runnable1, к которому вы только что добавили событие переключения режимов.

  11. На этом настройка событий переключения режимов AUTOSAR завершается. Нажмите кнопку Validate для проверки конфигурации компонента AUTOSAR. Если сообщается об ошибках, устраните их и повторите проверку. Когда модель пройдет проверку, сохраните модель. При необходимости можно создать код XML и код C из модели и проверить результаты.

Настройка порта отправителя режима и точки переключения режима для диспетчера режима приложения

Для моделирования программного компонента диспетчера режимов приложений используйте порт отправителя режима AUTOSAR. Порты отправителя режима используют интерфейс переключения режима (M-S) для вывода переключателя режима на подключенные компоненты пользователя режима.

Порт отправителя режима моделируется как корневой порт модели, который сопоставляется с портом отправителя режима AUTOSAR и интерфейсом переключения режимов (M-S). Тип данных outport является классом перечисления с неподписанным целочисленным типом хранения, представляющим собой группу объявления режима AUTOSAR.

В этом примере показано, как настроить порт отправителя режима и связанные элементы для диспетчера режима приложения.

  1. Откройте модель, настроенную для генерации кода AUTOSAR. В этом примере используется модель, которая содержит логику Stateflow ® для поддержания состояния двигателя. Модель выводит текущее значение режима двигателя.

  2. Объявить группу объявления режима - группу значений режима. Значения режима можно объявить с помощью перечисления Simulink. В этом примере логика Stateflow определяет EngineModes ценности Off, Crank, Stall, Idle, и Run. Например:

  3. Добавьте в модель интерфейс AUTOSAR M-S. Откройте словарь AUTOSAR и выберите M-S Interfaces. Нажмите кнопку «Добавить». В диалоговом окне «Добавление интерфейсов» установите для параметра isService значение true и введите имя рабочей группы. В этом примере группой объявления режима является EngineModes.

  4. Добавьте в модель порт отправителя режима AUTOSAR. Разверните узел «AtomicComponents», разверните компонент и выберите пункт Режим «SenderPorts». Нажмите кнопку «Добавить». В диалоговом окне Add Ports установите для Interface имя созданного интерфейса M-S.

  5. Сопоставьте выходной порт Simulink, который выводит значение режима, с созданным портом отправителя режима AUTOSAR. Откройте редактор сопоставлений кодов и перейдите на вкладку «Выходы». Чтобы сопоставить исходящий порт с портом отправителя в режиме AUTOSAR, установите DataGroupMode в значение ModeSend, выберите имя порта и в поле Element выберите имя группы объявления режима, указанное для интерфейса M-S.

  6. Создайте код для модели.

    Код ARXML включает в себя ссылочные «Точки управления», «Интерфейсы управления» и «Группы управления». Например, в следующем коде ARXML описана точка переключения для порта отправителя в режиме 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>

    Код C включает Rte_Switch Вызовы API для связи переключателей режимов с другими компонентами программного обеспечения. Например, следующий код передает EngineModes переключатель режима.

    /* Outport: '<Root>/EngineMode' */
    Rte_Switch_currentState_EngineModes(mEngineFailureMode_B.engstate);

Связанные примеры

Подробнее