Преобразуйте подсистему в ссылочную модель и генерируйте код

Преобразование подсистем в ссылочные модели улучшает инкрементальную генерацию кода, модульную разработку ссылочных моделей и повторное использование кода. Многие большие модели используют комбинацию моделей-ссылок и подсистем.

Чтобы преобразовать блок Subsystem в блок Model, используйте любой из следующих методов:

  • В Simulink® Редактор, выберите Subsystem блок. На панели инструментов Simulink, вкладке Subsystem Block, выберите Convert > Model Block.

  • В MATLAB® Командное окно, используйте Simulink.SubSystem.convertToModelReference функция со 'UseConversionAdvisor' для аргумента задано значение true.

Перед преобразованием подсистемы в ссылочную модель:

  1. Сконфигурируйте блок Subsystem как атомарную подсистему. В Параметрах Блока Subsystem выберите свойство Treat as atomic unit.

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

  2. Установите параметр конфигурации модели Разрешение сигнала равным Explicit only или None.

Можно сопоставить класс памяти с категорией элементов данных моделей или с отдельным элементом с помощью редактора Code Mappings или API Code Mappings (coder.mapping.api.CodeMapping). Затем используйте Property Inspector или API, чтобы задать параметры строений кода, характерные для этого класса памяти, такие как заголовочные файлы, файлы определений и разделы памяти. Если ваша модель содержит отображения кода, можно перенести отображения кода при преобразовании подсистемы в модель-ссылку. Для получения дополнительной информации см. раздел Code Mappings editor.

Сконфигурируйте отображения кода

  1. Откройте пример модели rtwdemo_roll.

    rtwdemo_roll

  2. На панели инструментов Simulink, вкладке Apps, выберите приложение Embedded Coder или Simulink Coder.

  3. На вкладке C Code щелкните Code Interface > Default Code Mappings. Эта опция устанавливает контакт с редактором отображений кода и панелью Property Inspector.

  4. Сопоставьте класс памяти с категорией элемента данных моделей. В редакторе Отображения выберите вкладку Data Defaults. Для категории Inports задайте Storage Class следующим ExportedGlobal.

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

roll_mapping = coder.mapping.api.get('rtwdemo_roll');
setDataDefault(roll_mapping,'Inports','StorageClass','ExportedGlobal');

Преобразование подсистемы в ссылочную Модель

  1. Чтобы преобразовать подсистему в ссылочную модель, откройте Model Reference Conversion Advisor. Выберите подсистему HeadingMode. На вкладке Subsystem Block выберите Convert > Model Block.

    Модель-ссылка Conversion Advisor позволяет вам в интерактивном режиме задавать параметры преобразования и устранять проблемы, которые находит советник.

    Model Reference Conversion Advisor window is open. New model name is autopopulated as HeadingMode.

  2. Проверьте имя автоматически заполненной модели. При необходимости можно обновить это имя.

  3. Чтобы ускорить процесс преобразования, выберите Fix errors automatically (if possible). Эта опция устраняет некоторые проблемы преобразования. Вы не управляете исправлениями.

  4. Чтобы скопировать отображения кода, заданные для модели, выберите опцию Copy code mappings. Эта опция переносит отображения кода из родительской модели в вновь преобразованную модель-ссылку. По умолчанию эта опция снимается.

  5. Нажмите 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 для ссылочных моделей.

Похожие темы