Объединенные подсистемы в модели с именами функций и файлами.
Узнать, как к:
Задайте функцию и имена файлов в сгенерированном коде.
Идентифицируйте части сгенерированного кода, которые требуются для интегрирования.
Сгенерируйте код для атомарных подсистем.
Идентифицируйте данные, которые требуются, чтобы выполнять сгенерированную функцию.
Для получения информации о модели в качестве примера и других примерах в этом ряду, смотрите, Генерируют код С от Алгоритма управления для Встраиваемой системы.
Модели в качестве примера в Генерируют код С от Алгоритма управления для Встраиваемой системы и Конфигурируют Интерфейс Данных в виртуальных подсистемах использования Сгенерированного кода. Виртуальные подсистемы визуально организуют блоки, но не влияют на образцовые Атомарные подсистемы функциональности, оценивают все включенные блоки как модуль. С атомарными подсистемами можно указать дополнительную информацию разделения функции. В модели атомарные подсистемы появляются с полужирной границей.
Откройте модель в качестве примера, rtwdemo_PCG_Eval_P3
.
Сохраните копию модели к вашей текущей папке.
Этот пример показывает, как заменить виртуальные подсистемы на подсистемы вызова функции. Function-Call подсистемы:
Атомарные подсистемы
Позвольте вам управлять порядком выполнения подсистемы
Выполнитесь, когда вызов функции будет сигнализировать о триггерах
Путем управления порядком выполнения подсистем можно совпадать с моделью существующей системе, которая имеет определенный порядок выполнения.
Фигура идентифицирует подсистемы вызова функции (1) PI_ctrl_1
, PI_ctrl_2
и Pos_Command_Arbitration
.
Эта версия модели содержит новую подсистему Execution_Order_Control
(2), который содержит график Stateflow®, который моделирует функциональность вызова планировщика. Подсистема управляет порядком выполнения подсистем вызова функции через сигналы вызова функции (3). Позже в этом примере, вы исследуете, как изменение порядка выполнения может изменить результаты симуляции.
Эта версия модели содержит новые блоки Преобразования Сигнала (4) при выходных параметрах контроллеров PI. С этими дополнительными блоками на месте, генератор кода может сгенерировать одну повторно используемую функцию для контроллеров PI.
В Генерируют код С от Алгоритма управления для Встраиваемой системы и Конфигурируют Интерфейс Данных в Сгенерированном коде, генератор кода создает одну функцию model_step
, которая содержит код алгоритма управления. Однако много приложений требуют большего уровня управления размещением файла функций. Путем изменения параметров атомарных подсистем можно задать несколько функций в одной модели.
Данные показывают параметры подсистемы для PI_ctrl_1
.
Обработайте как атомарный модуль
Включает другие подменю. Для атомарных подсистем этот параметр автоматически выбран и отключен.
'SampleTime'
Задает шаг расчета для выполнения. Не доступный для подсистем вызова функций.
Функция упаковочные опции
Автоматический - Определяет, как подсистема появляется в сгенерированном коде. Это значение является значением по умолчанию.
Встроенный - Места код подсистемы встраивают с остальной частью типового кодекса.
Функция - Генерирует код для подсистемы как функция.
Допускающая повторное использование функция - Генерирует допускающую повторное использование (повторно используемую) функцию от подсистемы. Функция передает все входные и выходные данные через формальные параметры. Функция непосредственно не получает доступ к глобальным переменным.
Опции имени функции
Выбор Function или Reusable function для Функциональной упаковки включает опции имени функции.
Автоматический - Определяет функцию.
Используйте имя подсистемы - Основы функция на имени подсистемы.
Пользователь задал - Применяет заданное имя файла.
Опции имени файла
Выбор Function или Reusable function для Функциональной упаковки включает опции имени файла.
Автоматический - Места, которые функциональное определение в модуле сгенерировало для родительской системы, или, если образцовый корень является родительским элементом в model.c
.
Используйте имя подсистемы - Генерирует отдельный файл. Имя файла является именем блока библиотеки или подсистемы.
Используйте имя функции - Генерирует отдельный файл. Имя файла является именем, которое вы задаете с опциями Имени функции.
Пользователь задал - Применяет заданное, уникальное имя файла.
Функция с отдельными данными
Enabled, когда вы упаковка функции множества, чтобы Функционировать. Когда выбрано, генератор кода разделяет внутренние данные подсистемы (например, сигналы) от данных родительской модели. Подсистема владеет этими отдельными данными.
Embedded Coder® поддерживает повторно используемый код. Повторно используемый код является допускающей повторное использование стандартной программой программирования, которую несколько программ могут использовать одновременно. Повторно используемый код используется в операционных системах и другом системном программном обеспечении, которое использует многопоточность, чтобы обработать параллельные события. Повторно используемый код не поддерживает данные состояния, таким образом, нет никаких персистентных переменных в функции. Программы вызова поддерживают переменные состояния и должны передать данные состояния в функцию. Многий пользователь или процессы могут совместно использовать одну копию повторно используемой функции.
Чтобы сгенерировать повторно используемый код, необходимо сначала задать подсистему как допускающую повторное использование путем конфигурирования упаковки Функции параметра подсистемы.
В некоторых случаях настройка модели предотвращает повторно используемый код. Таблица приводит распространенные проблемы.
Cause Solution
Subsystem output feeds global signal Add a Signal Conversion block between the data subsystem and the global signal.
Generated function receives data Select Configuration Parameters > (formal parameters) through pointers Model Referencing > Pass fixed-size scalar root inputs by value for code generation.
Subsystem uses global signal data Use a port to pass the global data in and out in internal algorithm of the subsystem.
Чтобы задать алгоритмические данные о параметре (такие как усиление или коэффициент) вне осциллографа допускающего повторное использование блока библиотеки или подсистемы, можно применить маску к блоку или подсистеме и создать параметр маски. Можно затем задать различное значение параметров для каждого экземпляра блока или подсистемы. Каждый параметр маски появляется в сгенерированном коде как формальный параметр повторно используемой функции.
В этой версии модели подсистемы маскируются PI_ctrl_1
и PI_ctrl_2
. В каждой маске значения P
и усилений I
установлены объектами данных, такими как I_Gain_2
и P_Gain_2
.
В Генерируют код С от Алгоритма управления для Встраиваемой системы и Конфигурируют Интерфейс Данных в Сгенерированном коде, вы генерируете код на корневом уровне модели. Также можно создать определенную подсистему.
Чтобы инициировать сборку подсистемы, используйте контекстное меню. Можно выбрать из этих опций:
Подсистема сборки: Обрабатывает подсистему как отдельный режим и создает полный набор источника C файлы и заголовочные файлы. Эта опция не поддерживает подсистемы вызова функций.
Сгенерируйте S-функцию: Генерирует код С для подсистемы и создает обертку S-функции. Можно затем моделировать код в исходной модели. Эта опция не поддерживает подсистемы вызова функций.
Экспорты функций: Генерирует код С без кода планирования, который идет с опцией Подсистемы Сборки. Используйте эту опцию, чтобы создать подсистемы, которые используют триггеры, такие как подсистемы вызова функций.
Этот пример сравнивает файлы, которые сгенерированы для полной системной сборки с файлами, которые сгенерированы для экспортируемых функций. Вы также исследуете, как данные маскированные появляются в коде.
Запустите скрипт сборки для этих трех опций. Затем исследуйте сгенерированные файлы путем нажатия на гиперссылки.
rtwdemo_PCG_Eval_P3.c
Полная сборка: Да, Ступенчатая функция
PI_ctrl_1: нет
Pos_Command_Arbitration: нет
PI_ctrl_1.c
Полная сборка: нет
PI_ctrl_1: Да, Триггерная функция
Pos_Command_Arbitration: нет
Pos_Command_Arbitration.c
Полная сборка: нет
PI_ctrl_1: нет
Pos_Command_Arbitration: да, Init и функция
PI_Ctrl_Reusable.c
ert_main.c
eval_data.c
(1) eval_data.c
имеет различное содержимое в сборках полного и экспорта функций. Полная сборка включает все параметры, которые использует модель. Экспорт функций содержит только переменные, которые использует подсистема.
Данные маскированные в сгенерированном коде
В файле rtwdemo_PCG_Eval_P3.c
сайты вызова повторно используемой функции используют объекты данных P_Gain
, I_Gain
, P_Gain_2
и I_Gain_2
в качестве аргументов.
По умолчанию Simulink® выполняет подсистемы в этом порядке:
PI_ctrl_1
PI_ctrl_2
Pos_Command_Arbitration
В данном примере можно задать один из двух альтернативных порядков выполнения. Можно затем использовать тестовую обвязку, чтобы наблюдать эффект порядка выполнения на результатах симуляции. Execution_Order_Control
подсистемы имеет две настройки, которые управляют порядком выполнения. Чтобы выбрать настройку, используйте контекстное меню подсистемы.
Измените порядок выполнения и наблюдайте результаты.
Результаты симуляции (положение дросселя в зависимости от времени) отличаются немного в зависимости от порядка выполнения. Вы видите различие наиболее ясно, когда запрос дросселя изменяется.
Для следующего примера в этом ряду смотрите Вызов Внешний код С из Типового кодекса и Сгенерированного кода.