Сгенерировать код для моделей, на которые ссылаются, вас
Создайте подсистему в существующей модели.
Преобразуйте подсистему в модель, на которую ссылаются (блок Model).
Вызовите модель, на которую ссылаются, от топ-модели.
Сгенерируйте код для топ-модели и модель, на которую ссылаются.
Исследуйте сгенерированный код и папку генерации кода.
Можно выполнить некоторые из этих задач автоматически с функцией под названием Simulink.Subsystem.convertToModelReference
.
В первой части этого примера вы задаете подсистему для vdp
модель в качестве примера, параметры конфигурации набора для модели и использование Simulink.Subsystem.convertToModelReference
функционируйте, чтобы преобразовать его в две новых модели — топ-модель (vdptop
) и модель vdpmultRM
, на которую ссылаются, содержа подсистему вы создали (
vdpmult
).
В Командном окне MATLAB® создайте новую рабочую папку везде, где вы хотите работать и cd
в него:
mkdir mrexample cd mrexample
Откройте vdp
модель в качестве примера путем ввода:
vdp
Перетащите поле вокруг трех блоков, обрисованных в общих чертах в синем ниже:
Выберите Create Subsystem из вкладки Multiple на панели инструментов.
Блок подсистемы заменяет выбранные блоки.
Если новый блок подсистемы не то, где вы хотите его, перемещаете его в предпочтительное местоположение.
Переименуйте блок vdpmult
.
Щелкните правой кнопкой по vdpmult
блокируйте и выберите Block Parameters (Subsystem).
Диалоговое окно Block Parameters появляется.
В диалоговом окне Block Parameters выберите Treat как атомарный модуль, затем нажмите ОК.
Граница vdpmult
подсистема утолщает, чтобы указать, что это является теперь атомарным. Атомарная подсистема выполняется как модуль относительно родительской модели: выполнение блока подсистемы не чередуется с родительским выполнением блока. Это свойство позволяет извлечь подсистемы для использования в качестве автономных моделей и в качестве функций в сгенерированном коде.
Блок-схема появляется.
Необходимо установить несколько свойств, прежде чем можно будет извлечь подсистему для использования в качестве модели, на которую ссылаются. Установить свойства:
Открытый Model Explorer. На вкладке Modeling нажмите Model Explorer.
В панели Model Hierarchy расширьте модель, чтобы показать ее компоненты.
Выберите узел Настроек.
В панели Contents щелкните правой кнопкой по Configuration (Active) и нажмите Open в контекстном меню, чтобы открыть диалоговое окно Configuration Parameters.
На левой панели диалогового окна Configuration Parameters выберите Solver.
Измените Type в Fixed-step
, затем нажмите Apply. Необходимо использовать решатели фиксированного шага при генерации кода, несмотря на то, что модели, на которые ссылаются, могут использовать другие решатели, чем топ-модели.
На левой панели кликните по символу, предшествующему Diagnostics. На левой панели ниже Diagnostics выберите Data Validity. В области Signals, набор Signal resolution к Explicit only
. В качестве альтернативы, если вы не хотите использовать Simulink.Signal
объекты, набор Signal resolution к None
.
Нажмите Apply.
Модель теперь имеет свойства, которых требует ссылка модели.
На левой панели нажмите Model Referencing. В разделе Options for all referenced models, набор Rebuild к If any changes in known dependencies detected
. Нажмите OK. Эта установка предотвращает регенерацию кода, когда это не требуется.
В vdp
окно модели, выберите File> Save as. Сохраните модель как vdptop
в вашей рабочей папке. Оставьте модель открытой.
В этом фрагменте примера вы используете функцию преобразования Simulink.SubSystem.convertToModelReference
извлекать подсистему vdpmult
от vdptop
и преобразуйте vdpmult
в модель, на которую ссылаются, под названием vdpmultRM
. Чтобы видеть полный синтаксис функции преобразования, введите в посдказке MATLAB:
help Simulink.SubSystem.convertToModelReference
Для получения дополнительной информации введите:
doc Simulink.SubSystem.convertToModelReference
Если вы хотите видеть пример Simulink.SubSystem.convertToModelReference
перед использованием его самостоятельно, введите:
sldemo_mdlref_conversion
Simulink® также обеспечивает команду меню, Subsystem & Model Reference> Convert Subsystem to> Referenced Model, который можно использовать, чтобы преобразовать подсистему в модель, на которую ссылаются. Команда вызывает Simulink.SubSystem.convertToModelReference
с параметрами по умолчанию. Для получения дополнительной информации смотрите, Преобразуют Подсистемы в Модели, на которые Ссылаются (Simulink).
Использовать Simulink.SubSystem.convertToModelReference
извлекать vdpmult
и преобразуйте его в модель, на которую ссылаются, введите:
Simulink.SubSystem.convertToModelReference... ('vdptop/vdpmult', 'vdpmultRM',... 'ReplaceSubsystem', true, 'BuildTarget', 'Sim')
Эта команда:
Извлекает подсистему vdpmult
от vdptop
.
Преобразует извлеченную подсистему в отдельную модель под названием vdpmultRM
и сохраняет модель в рабочую папку.
В vdptop
, заменяет извлеченную подсистему на блок Model, это ссылается на vdpmultRM
.
Создает цель симуляции для vdptop
и vdpmultRM
.
Конвертер распечатывает сообщения о ходе выполнения и завершает работу с
ans = 1
Родительская модель vdptop
теперь выглядит так:
Обратите внимание на изменения во внешнем виде блока vdpmult
. Эти изменения указывают, что это - теперь блок Model, а не подсистема. Как блок Model, это не имеет собственного содержимого: предыдущее содержимое теперь существует в модели vdpmultRM
, на которую ссылаются,, чье имя появляется наверху блока Model. Расширьте блок Model, чтобы отсоединить полное имя модели, на которую ссылаются.
Если родительская модель vdptop
был закрыт во время преобразования, конвертер откроет его. Извлечение подсистемы к модели, на которую ссылаются, автоматически не создает или изменяет сохраненную копию родительской модели. Чтобы сохранить изменения в родительской модели, сохраните vdptop
.
Щелкните правой кнопкой по блоку Model vdpmultRM
и выберите Open, чтобы открыть модель, на которую ссылаются. Модель выглядит так:
Файлы в вашей рабочей папке теперь состоят из следующего (не в этом порядке).
Файл | Описание |
---|---|
| Топ-модель, которая содержит блок Model где |
| Модель, на которую ссылаются, создается для |
| Статический файл библиотеки (только платформы Microsoft® Windows®). Расширение файла системно-зависимо и может отличаться. Этот файл выполняется когда |
| Папка для сгенерированного кода модели - ссылки |
Код для целей симуляции модели - ссылки помещается в slprj/sim
подпапка. Сгенерированный код для GRT, ERT и других целей Simulink Coder™ помещается в slprj
подпапки, названные по имени тех целей. Вы будете смотреть некоторый код модели - ссылки позже в этом примере. Для получения дополнительной информации о папках генерации кода смотрите работу с Папками Генерации кода.
Откройте блок Scope в vdptop
если это не отображается. В vdptop
окно, кликните по инструменту Run или нажмите Run от вкладки Simulation. Модель вызывает vdpmultRM_msf
цель симуляции, чтобы симулировать. Выход выглядит так:
Функциональный Simulink.SubSystem.convertToModelReference
созданный модель и конечные файлы симуляции для модели vdpmultRM
, на которую ссылаются,. В этой части примера вы генерируете код для той модели и
vdptop
модель и запуск исполняемый файл вы создаете:
Проверьте, что вы все еще работаете в mrexample
папка.
Если модель vdptop
не открыто, откройте его. Убедитесь, что это - активное окно.
Открытый Model Explorer. На вкладке Modeling нажмите Model Explorer.
В панели Model Hierarchy кликните по символу, предшествующему vdptop
модель, чтобы показать ее компоненты.
Выберите узел Настроек ниже узла модели.
В панели Contents щелкните правой кнопкой по Configuration (Active) и нажмите Open в контекстном меню, чтобы открыть диалоговое окно Configuration Parameters.
На левой панели выберите Data Import/Export.
В разделе Save to workspace or file выберите Time и Output и очистите Data stores. Нажмите Apply.
Эти настройки сообщают модели vdptop
(и позже его исполняемый файл), чтобы регистрировать время и выходные данные к MAT-файлам для каждого временного шага.
Сгенерируйте код GRT (значение по умолчанию) и исполняемый файл для топ-модели и модели, на которую ссылаются. Например, в модели, нажмите Ctrl+B.
Процесс сборки Simulink Coder генерирует и компилирует код. Текущая папка теперь содержит новый файл и новую папку.
Файл | Описание |
---|---|
| Исполняемый файл создается процессом сборки |
| Папка сборки, содержа сгенерированный код для топ-модели |
Процесс сборки также сгенерировал код GRT для модели, на которую ссылаются, и поместил его в slprj
папка.
Чтобы просмотреть сгенерированный код модели в Model Explorer, модель должна быть открыта. Использовать Model Explorer, чтобы смотреть недавно созданную папку сборки, vdptop_grt_rtw
:
Открытый Model Explorer. На вкладке Modeling нажмите Model Explorer.
В панели Model Hierarchy расширьте имя модели, чтобы показать его компоненты.
Расширьте Code for vdptop
показать его компоненты.
Нажмите This Model
.
Список файлов сгенерированного кода для vdptop
появляется в панели Contents:
rtmodel.h vdptop.c vdptop.h vdptop.mk vdptop_private.h vdptop_types.h
Можно просмотреть код путем выбора файла интереса к панели Contents.
Чтобы открыть файл в текстовом редакторе, кликните по имени файла, и затем кликните по гиперссылке, которая появляется в серой области наверху панели Document. Этот рисунок показывает код просмотра для vdptop.c
в текстовом редакторе. Ваш код может отличаться.
Чтобы просмотреть сгенерированный код в отчете генерации кода, смотрите, Генерируют Отчет Генерации кода (Simulink Coder).
Код модели - ссылки сгенерирован в вашей папке генерации кода (Simulink), и целевой код симуляции сгенерирован в вашей папке кэша симуляции (Simulink). Из-за этого процесса существуют ограничения на:
Когда и где цели модели-ссылки создаются.
Как к целям модели-ссылки получают доступ.
Модели, на которые ссылаются блоки Model, могут храниться где угодно на пути MATLAB. Данная топ-модель может включать модели, сохраненные в различных файловых системах или в различных папках. То же самое не верно для целей симуляции и сгенерированного кода, выведенного из этих моделей. При большинстве обстоятельств, чтобы позволить повторное использование кода, модели, на которые ссылается данная топ-модель, должны быть настроены, чтобы симулировать и сгенерировать код цели модели-ссылки в одной папке генерации кода.
Это означает, что, если вы ссылаетесь на ту же модель от нескольких топ-моделей, каждый сохраненный в различной папке, необходимо выбрать один из этих подходов:
Всегда работайте с той же папкой генерации кода и быть уверенными, что модели находятся на вашем пути.
Позвольте отдельным папкам генерации кода, целям симуляции и целям Simulink Coder быть сгенерированными в каждой папке, в которой вы работаете.
Второй подход требует обслуживания нескольких экземпляров кода модели - ссылки, и для сгенерированного кода возможно стать избыточным. Например, когда вы вносите изменения в модель, на которую ссылаются. Поэтому, чтобы минимизировать регенерацию кода моделей, на которые ссылаются, выберите определенную папку генерации кода для всех сеансов.