Сгенерируйте код функции C для модели экспорта функций

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

Сгенерировать функциональный код для экспорта:

  1. Создайте модель, которая содержит функции для экспорта.

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

  3. Моделируйте модель, которая содержит функции при помощи модели тестовой обвязки.

  4. Сгенерируйте код для модели, которая содержит функции.

Создайте модель, которая содержит функции для экспорта

Модель с функциями для экспорта должна удовлетворить архитектурные ограничения на образцовом корневом уровне. На корневом уровне допустимые блоки:

  • Inport

  • Выходной порт

  • Подсистема вызова функций

  • Функция Simulink

  • Goto

  • От

  • Слияние

Генератор кода производит функциональный код для Подсистемы вызова функций и Функциональных блоков Simulink, и Инициализируйте и Функциональные блоки Сброса. Для блока Function-call Subsystem вы соединяете входные порты блока, чтобы базироваться блоки Inport, которые утверждают сигналы вызова функции. Подсистема выполняется на основе сигнала вызова функции, что это получает. Функциональный блок Simulink выполняется в ответ на выполнение соответствующего блока Function Caller или диаграммы Stateflow. Инициализировать Функциональный блок выполняется на модели, инициализируют событие, и Функциональный блок Сброса выполняется на пользовательском событии сброса.

Для экспорта функций модель rtwdemo_functions содержит две подсистемы вызова функций (f1_alg и f2_alg) и Функциональный блок Simulink (f3) для экспорта функций. Модель также содержит Инициализировать Функциональный блок (Initialize Function) и Функциональный блок Сброса (Reset Function). Чтобы вычислить начальные условия для блоков с состоянием в других частях модели, блоки Средства записи состояния используются в Функциональных блоках Инициализирования и Сброса.

open_system('rtwdemo_functions')

Создайте модель, которая содержит функциональный блок вызывающей стороны

Используйте блок Function Caller, чтобы вызвать Simulink Function block. Блок Function Caller может быть в той же модели или в различной модели как Функциональный блок Simulink.

Несколько Функциональных блоков Вызывающей стороны могут вызвать Simulink Function block. Можно поместить блок Function Caller в подсистеме вызова функций. Во время генерации кода генератор кода экспортирует функцию от подсистемы вызова функций.

Модель rtwdemo_caller экспортирует подсистему вызова функций, которая содержит блок Function Caller.

open_system('rtwdemo_caller')

Создайте модель тестовой обвязки для симуляции

Когда вы экспорты функций, сгенерированный код не включает планировщик. Создайте модель тестовой обвязки, чтобы обработать планирование во время симуляции. Не используйте модель тестовой обвязки, чтобы сгенерировать код, который вы развертываете.

Образцовый rtwdemo_export_functions является тестовой обвязкой. Модель:

  • Планирует Функциональный блок Simulink с блоком Function Caller в rtwdemo_caller.

  • Предоставляет сигналы вызова функции другим моделям в этом примере, чтобы запланировать образцовое содержимое, включая модель инициализируют и сбрасывают события.

open_system('rtwdemo_export_functions')

Моделируйте модель тестовой обвязки

Проверьте, что модель, содержащая функции, которые вы хотите экспортировать, выполняется, как вы ожидаете путем симуляции модели тестовой обвязки. Например, моделируйте rtwdemo_export_functions.

sim('rtwdemo_export_functions')

Сгенерируйте функциональный код и отчет

Сгенерируйте код и отчет генерации кода для функций, что вы хотите экспортировать. Например, сгенерируйте код для rtwdemo_functions.

rtwbuild('rtwdemo_functions')
### Starting build procedure for model: rtwdemo_functions
### Successful completion of code generation for model: rtwdemo_functions

Рассмотрите сгенерированный код

Из отчета генерации кода рассмотрите сгенерированный код.

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

  • rtwdemo_functions.c вызывает функцию инициализации, включая Initialize Function и экспортируемые функции для компонентов модели f1_alg, f2_alg и f3.

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

  • f3.h является совместно используемым файлом, который объявляет интерфейс вызова для функции Simulink f3.

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

Запишите интерфейсный код

Откройте и рассмотрите Отчет Интерфейса Кода. Чтобы записать интерфейсный код для вашей среды выполнения, используйте информацию в том отчете.

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

  2. Запишите входные данные в сгенерированный код для блоков модели Inport.

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

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

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

  • rtU.U1 типа real_T с размерностью 1

  • rtU.U2 типа real_T с размерностью 1

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

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

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

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

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

  • Функция Simulink, void f3(real_T rtu_u, real_T *rty_y). Вызовите эту функцию по мере необходимости.

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

  • rtY.Accumulator1 типа int8_T с размерностью [2]

  • rtY.Accumulator2 типа int8_T с размерностью [2]

  • rtY.TicToc10 типа int8_T с размерностью 1

Больше о

Закройте модели в качестве примера

bdclose('rtwdemo_export_functions')
bdclose('rtwdemo_functions')
bdclose('rtwdemo_caller')