Преобразование подсистем к моделям, на которые ссылаются, улучшает инкрементную генерацию кода, модульную разработку моделей, на которые ссылаются и повторное использование кода. Много больших моделей используют комбинацию моделей, на которые ссылаются, и подсистем.
Чтобы преобразовать блок 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
.
Можно сопоставить класс памяти с категорией элементов данных модели или к отдельному элементу при помощи редактора Отображений Кода или API Отображений Кода (coder.mapping.api.CodeMapping
). Затем используйте Property Inspector или API, чтобы задать настройки настроек кода, специфичные для того класса памяти, такие как заголовочные файлы, файлы определения и разделы памяти. Если ваша модель содержит отображения кода, можно переместить отображения кода, когда вы преобразуете подсистему в модель, на которую ссылаются. Для получения дополнительной информации смотрите Code Mappings editor.
Откройте модель rtwdemo_roll
в качестве примера.
rtwdemo_roll
На панели инструментов Simulink, вкладке Apps, выбирают приложение Simulink Coder или Embedded 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.
Советник по вопросам Преобразования Модели - ссылки позволяет вам в интерактивном режиме задать параметры преобразования и устранить проблемы, которые находит советник.
Рассмотрите автозаполненное имя модели. В случае необходимости можно обновить это имя.
Чтобы сделать процесс преобразования быстрее, выберите Fix errors automatically (if possible). Эта опция фиксирует некоторые проблемы преобразования. Вы не управляете мерами.
Чтобы скопировать отображения кода, заданные для модели, выберите опцию Copy code mappings. Эта опция перемещает отображения кода от родительской модели до недавно конвертированной модели, на которую ссылаются. По умолчанию эта опция очищена.
Нажмите Convert.
Советник по вопросам Преобразования Модели - ссылки продвигается посредством каждой из проверок. Решите любые проблемы, о которых сообщает советник. После того, как Советник по вопросам Преобразования Модели - ссылки успешно завершает преобразование, оно заменяет блок Subsystem на блок Model, который ссылается на новую модель.
В качестве альтернативы преобразовывать подсистему в модель, на которую ссылаются, в командном окне MATLAB, введите:
Simulink.SubSystem.convertToModelReference(... 'rtwdemo_roll/HeadingMode', ... 'HeadingMode', ... 'AutoFix',true,... 'ReplaceSubsystem',true,... 'CopyCodeMappings',true);
Если вы хотите скопировать отображения кода от родительской модели до модели, на которую ссылаются, и вы ранее не выбирали опцию Copy code mappings в Советнике по вопросам Преобразования Модели - ссылки в командном окне 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 для модели, на которую ссылаются. |