Преобразование подсистем в ссылочные модели улучшает инкрементальную генерацию кода, модульную разработку ссылочных моделей и повторное использование кода. Многие большие модели используют комбинацию моделей-ссылок и подсистем.
Чтобы преобразовать блок Subsystem в блок Model, используйте любой из следующих методов:
В Simulink® Редактор, выберите Subsystem блок. На панели инструментов Simulink, вкладке Subsystem Block, выберите Convert > Model Block.
В MATLAB® Командное окно, используйте Simulink.SubSystem.convertToModelReference
функция со 'UseConversionAdvisor'
для аргумента задано значение true
.
Перед преобразованием подсистемы в ссылочную модель:
Сконфигурируйте блок Subsystem как атомарную подсистему. В Параметрах Блока Subsystem выберите свойство Treat as atomic unit.
Атомарная подсистема выполняется как модуль измерения относительно родительской модели. Выполнение подсистемы не перемежается с выполнением родительского блока. Это свойство позволяет извлечь подсистемы для использования в качестве автономных моделей и как функции в сгенерированном коде.
Установите параметр конфигурации модели Разрешение сигнала равным Explicit only
или None
.
Можно сопоставить класс памяти с категорией элементов данных моделей или с отдельным элементом с помощью редактора Code Mappings или API Code Mappings (coder.mapping.api.CodeMapping
). Затем используйте Property Inspector или API, чтобы задать параметры строений кода, характерные для этого класса памяти, такие как заголовочные файлы, файлы определений и разделы памяти. Если ваша модель содержит отображения кода, можно перенести отображения кода при преобразовании подсистемы в модель-ссылку. Для получения дополнительной информации см. раздел Code Mappings editor.
Откройте пример модели rtwdemo_roll
.
rtwdemo_roll
На панели инструментов Simulink, вкладке Apps, выберите приложение Embedded Coder или Simulink Coder.
На вкладке C Code щелкните Code Interface > Default Code Mappings. Эта опция устанавливает контакт с редактором отображений кода и панелью Property Inspector.
Сопоставьте класс памяти с категорией элемента данных моделей. В редакторе Отображения выберите вкладку Data Defaults. Для категории Inports задайте Storage Class следующим ExportedGlobal
.
Кроме того, чтобы сконфигурировать отображение по умолчанию для Inports, в Командном Окне MATLAB, введите:
roll_mapping = coder.mapping.api.get('rtwdemo_roll'); setDataDefault(roll_mapping,'Inports','StorageClass','ExportedGlobal');
Чтобы преобразовать подсистему в ссылочную модель, откройте Model Reference Conversion Advisor. Выберите подсистему HeadingMode
. На вкладке Subsystem Block выберите Convert > Model Block.
Модель-ссылка Conversion Advisor позволяет вам в интерактивном режиме задавать параметры преобразования и устранять проблемы, которые находит советник.
Проверьте имя автоматически заполненной модели. При необходимости можно обновить это имя.
Чтобы ускорить процесс преобразования, выберите Fix errors automatically (if possible). Эта опция устраняет некоторые проблемы преобразования. Вы не управляете исправлениями.
Чтобы скопировать отображения кода, заданные для модели, выберите опцию Copy code mappings. Эта опция переносит отображения кода из родительской модели в вновь преобразованную модель-ссылку. По умолчанию эта опция снимается.
Нажмите Convert.
Советник по преобразованию Модели-ссылки выполняет каждую из проверок. Решает любые вопросы, о которых сообщает советник. После того, как Модель-ссылка Conversion Advisor успешно завершает преобразование, он заменяет блок Subsystem на блок Model, который ссылается на новую модель.
Кроме того, чтобы преобразовать подсистему в ссылочную модель, в Командном Окне MATLAB введите:
Simulink.SubSystem.convertToModelReference(... 'rtwdemo_roll/HeadingMode', ... 'HeadingMode', ... 'AutoFix',true,... 'ReplaceSubsystem',true,... 'CopyCodeMappings',true);
Если вы хотите скопировать отображения кода из родительской модели в модель-ссылку и ранее не выбирали опцию Copy code mappings в Модель-ссылку Conversion Advisor, в Командном окне MATLAB, введите:
roll_mapping = coder.mapping.api.get('rtwdemo_roll'); roll_sc = getDataDefault(roll_mapping,'Inports','StorageClass'); mode_mapping = coder.mapping.api.get('HeadingMode'); setDataDefault(mode_mapping,'Inports','StorageClass',roll_sc);
Для rtwdemo_roll
, модель, которая содержит ссылочную модель HeadingMode
откройте вкладку C Code. Чтобы сгенерировать код для иерархии модели-ссылки, нажмите Build.
Процесс сборки Simulink Coder™ генерирует и компилирует код. Текущая папка теперь содержит новые файлы и новую папку.
Папка или файл | Цель |
---|---|
rtwdemo_roll_grt_rtw | Папка сборки, содержащая сгенерированный код для верхней модели. |
slprj > grt > Heading Mode | Папка сборки, содержащая сгенерированный код для ссылочной модели. |
rtwdemo_roll.exe | Исполняемый файл, созданный процессом сборки. |
rtwdemo_roll.slxc | Файл кэша Simulink для верхней модели. |
HeadingMode.slxc | Файл кэша Simulink для ссылочных моделей. |