exponenta event banner

Модель явного вызова функции с подсистемами вызова функции

Развертывание встроенного системного кода из моделей Simulink ® путем разделения модели на подсистемы вызова функций, которые создаются отдельно .

Модель подсистемы Function-Call

Откройте пример rtwdemo_explicitinvocation_funccallsubsys модели. Модель сконфигурирована для отображения времени образца с цветовым кодированием с аннотациями. Чтобы увидеть их, после открытия модели обновите схему, нажав клавиши Ctrl + D. Чтобы отобразить легенду, нажмите клавиши CTRL + J.

Эта модель разделяет алгоритм на три подсистемы вызова функций: Rate1s, Rate2s, и DataBuffer. Используйте подсистемы вызова функций для явного моделирования многоскоростных систем.

Подсистемы Rate1s и DataBuffer используйте время выборки, равное 1 секунде. Подсистема Rate2s использует время выборки 2 секунды.

Эта конструкция модели называется моделированием функции экспорта. Simulink ограничивает модель подсистемами вызова функций на корневом уровне. Управляющий блок Inport указывает имя функции.

Соответствующие настройки параметров конфигурации модели

  • Тип имеет значение Fixed-step.

  • Решатель имеет значение discrete (no continuous states).

  • Каждая дискретная скорость рассматривается как отдельная выбранная задача. Simulink применяет многозадачность, поскольку модель использует несколько скоростей выборки.

Планирование

Simulink ® моделирует модель на основе конфигурации модели. Simulink распространяет и использует время выборки блоков Inport для заказа выполнения блоков на основе одноядерной многозадачной платформы выполнения.

В условном обозначении времени выборки красный цвет обозначает самую быструю дискретную скорость. Magenta определяет скорости, унаследованные от экспортированных функций, указывая, что их выполнение находится вне контекста планирования Simulink.

Среда выполнения должна запланировать сгенерированный код функции и перенести данные между функциями.

Инфраструктура выполнения должна планировать сгенерированный код функции и обрабатывать перенос данных между функциями. Созданный код прост, и вы контролируете порядок выполнения.

Создание кода и отчета

Откройте приложение Embedded Coder. Затем создайте код и отчет о создании кода.

Просмотреть созданный код

Просмотрите созданный код из отчета о создании кода.

  • ert_main.c является примером основной программы (инфраструктуры выполнения) для модели. В этом коде показано, как вызывать экспортированные функции. Код также показывает, как инициализировать, выполнять и заканчивать сгенерированный код.

  • rtwdemo_explicitinvocation_funccallsubsys.c вызывает функцию инициализации и экспортированные функции для подсистем Rate1s, Rate2s, и DataBuffer.

  • rtwdemo_explicitinvocation_funccallsubsys.h объявляет структуры данных модели и открытый интерфейс к экспортируемым функциям точек входа и структурам данных.

  • rtwtypes.h определяет типы данных, структуры и макросы, необходимые для созданного кода.

Интерфейс кода

Откройте и просмотрите отчет по кодовому интерфейсу. Используйте информацию в этом отчете для написания кода интерфейса для среды выполнения:

  1. Включение созданных файлов заголовков путем добавления директив #include Rate1s.h, #include DataBuffer.h, и #include Rate2s.h.

  2. Запись входных данных в созданный код для блоков ввода модели.

  3. Вызовите сгенерированные функции точки входа.

  4. Считывание данных из созданного кода для блоков Outport модели.

Входные порты:

  • rtU.In1_1s типа real_T с размером 1

  • rtU.In2_2s типа real_T с размером 1

Функции точки входа:

  • Инициализация функции точки входа, void rtwdemo_explicitinvocation_funccallsubsys_initialize(void). При запуске вызовите эту функцию один раз.

  • Экспортированная функция, void CallEvery1s(void). Вызовите эту функцию по мере необходимости.

  • Экспортированная функция, void CallEvery1s(void). Вызовите эту функцию по мере необходимости.

  • Экспортированная функция, void CallEvery2sAt1sPriority(void). Вызовите эту функцию по мере необходимости.

Выходные порты:

  • rtY.Out1 типа real_T с размером 1

  • rtY.Out2 типа real_T с размером 1

Подробнее