Сгенерируйте код для моделей, на которые ссылаются,

О генерации кода для моделей, на которые ссылаются,

Сгенерировать код для моделей, на которые ссылаются, вас

  1. Создайте подсистему в существующей модели.

  2. Преобразуйте подсистему в модель, на которую ссылаются (блок Model).

  3. Вызовите модель, на которую ссылаются, от топ-модели.

  4. Сгенерируйте код для топ-модели и модель, на которую ссылаются.

  5. Исследуйте сгенерированный код и папку генерации кода.

Можно выполнить некоторые из этих задач автоматически с функцией под названием Simulink.Subsystem.convertToModelReference.

Создайте и сконфигурируйте подсистему

В первой части этого примера вы задаете подсистему для модели vdp в качестве примера, устанавливаете параметры конфигурации для модели и используете функцию Simulink.Subsystem.convertToModelReference, чтобы преобразовать его в две новых модели — топ-модель (vdptop) и модель vdpmultRM, на которую ссылаются, содержащая подсистему, которую вы создали (vdpmult).

  1. В Командном окне MATLAB® создайте новую рабочую папку везде, где вы хотите работать и cd в него:

    mkdir mrexample
    cd mrexample
  2. Откройте модель vdp в качестве примера путем ввода:

    vdp
  3. Перетащите поле вокруг трех блоков, обрисованных в общих чертах в синем ниже:

  4. Выберите Create Subsystem from Selection из меню Diagram> Subsystem & Model Reference.

    Блок подсистемы заменяет выбранные блоки.

  5. Если новый блок подсистемы не то, где вы хотите его, перемещаете его в предпочтительное местоположение.

  6. Переименуйте блок vdpmult.

  7. Щелкните правой кнопкой по блоку vdpmult и выберите Block Parameters (Subsystem).

    Диалоговое окно Function Block Parameters появляется.

  8. В диалоговом окне Function Block Parameters выберите Treat как атомарный модуль, затем нажмите ОК.

    Граница подсистемы vdpmult утолщает, чтобы указать, что это является теперь атомарным. Атомарная подсистема выполняется как модуль относительно родительской модели: выполнение блока подсистемы не чередуется с родительским выполнением блока. Это свойство позволяет извлечь подсистемы для использования в качестве автономных моделей и в качестве функций в сгенерированном коде.

    Блок-схема появляется.

Необходимо установить несколько свойств, прежде чем можно будет извлечь подсистему для использования в качестве модели, на которую ссылаются. Установить свойства:

  1. Откройте Model Explorer путем выбора Model Explorer из меню View модели.

  2. В панели Model Hierarchy расширьте модель, чтобы показать ее компоненты.

  3. Выберите узел Настроек.

  4. В панели Contents щелкните правой кнопкой по Configuration (Active) и нажмите Open в контекстном меню, чтобы открыть диалоговое окно Configuration Parameters.

  5. На левой панели диалогового окна Configuration Parameters выберите Solver.

  6. Измените Type на Fixed-step, затем нажмите Apply. Необходимо использовать решатели фиксированного шага при генерации кода, несмотря на то, что модели, на которые ссылаются, могут использовать другие решатели, чем топ-модели.

  7. На левой панели кликните по символу, предшествующему Diagnostics. На левой панели ниже Diagnostics выберите Data Validity. В области Signals, набор Signal resolution к Explicit only. Также, если вы не хотите использовать объекты Simulink.Signal, установите Signal resolution на None.

  8. Нажмите Apply.

    Модель теперь имеет свойства, которых требует образцовая ссылка.

  9. На левой панели нажмите Model Referencing. В разделе Options for all referenced models, набор Rebuild к If any changes in known dependencies detected. Нажмите OK. Эта установка предотвращает регенерацию кода, когда это не требуется.

  10. В окне модели 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')

Эта команда:

  1. Извлекает подсистему vdpmult от vdptop.

  2. Преобразовывает извлеченную подсистему в отдельную модель под названием vdpmultRM и сохраняет модель в рабочую папку.

  3. В vdptop, заменяет извлеченную подсистему на блок Model, это ссылается на vdpmultRM.

  4. Создает цель симуляции для vdptop и vdpmultRM.

Конвертер распечатывает сообщения о ходе выполнения и останавливается с

ans =
     1

Родительская модель vdptop теперь выглядит так:

Обратите внимание на изменения во внешнем виде блока vdpmult. Эти изменения указывают, что это - теперь блок Model, а не подсистема. Как блок Model, это не имеет собственного содержимого: предыдущее содержимое теперь существует в модели vdpmultRM, на которую ссылаются, имя которой появляется наверху блока Model. Расширьте блок Model, чтобы представить полное имя модели, на которую ссылаются.

Если бы родительская модель, vdptop был закрыт во время преобразования, конвертер, открыла бы его. Извлечение подсистемы к модели, на которую ссылаются, автоматически не создает или изменяет сохраненную копию родительской модели. Чтобы сохранить изменения в родительской модели, сохраните vdptop.

Щелкните правой кнопкой по блоку Model vdpmultRM и выберите Open, чтобы открыть модель, на которую ссылаются. Модель выглядит так:

Файлы, созданные и измененные конвертером

Файлы в вашей рабочей папке теперь состоят из следующего (не в этом порядке).

Файл Описание

Файл модели vdptop

Топ-модель, которая содержит блок Model, где подсистема vdpmult была

Файл модели vdpmultRM

Модель, на которую ссылаются, создается для подсистемы vdpmult

vdpmultRM_msf.mexw64

Статический файл библиотеки (только платформы Microsoft® Windows®). Расширение файла системно-зависимо и может отличаться. Этот файл выполняется, когда модель vdptop вызывает блок Model vdpmult. Когда названо, vdpmult в свою очередь вызывает модель vdpmultRM, на которую ссылаются.

/slprj

Папка для сгенерированного кода модели - ссылки

Код для целей симуляции модели - ссылки помещается в подпапку slprj/sim. Сгенерированный код для GRT, ERT и других целей Simulink Coder™ помещается в подпапки slprj, названные по имени тех целей. Вы осмотрите некоторый код модели - ссылки позже в этом примере. Для получения дополнительной информации о папках генерации кода смотрите работу с Папками Генерации кода.

Запустите конвертированную модель

Откройте блок Scope в vdptop, если это не видимо. В окне vdptop кликните по инструменту Run или выберите Run из меню Simulation. Модель вызывает цель симуляции vdpmultRM_msf, чтобы моделировать. Вывод выглядит так:

Сгенерируйте код модели - ссылки для цели GRT

Функциональный Simulink.SubSystem.convertToModelReference создал модель и конечные файлы симуляции для модели vdpmultRM, на которую ссылаются. В этой части примера вы генерируете код для той модели и модели vdptop, и запускаете исполняемый файл, который вы создаете:

  1. Проверьте, что вы все еще работаете в папке mrexample.

  2. Если модель vdptop не открыта, откройте ее. Убедитесь, что это - активное окно.

  3. Откройте Model Explorer путем выбора Model Explorer из меню View модели.

  4. В панели Model Hierarchy кликните по символу, предшествующему модели vdptop, чтобы показать ее компоненты.

  5. Выберите узел Настроек ниже образцового узла.

  6. В панели Contents щелкните правой кнопкой по Configuration (Active) и нажмите Open в контекстном меню, чтобы открыть диалоговое окно Configuration Parameters.

  7. На левой панели выберите Data Import/Export.

  8. В разделе Save to workspace or file выберите Time и Output и очистите Data stores. Нажмите Apply.

    Эти настройки дают модели vdptop команду (и позже ее исполняемый файл) регистрировать время и выходные данные к MAT-файлам для каждого временного шага.

  9. Сгенерируйте код GRT (значение по умолчанию) и исполняемый файл для топ-модели и модели, на которую ссылаются. Например, в модели, нажмите Ctrl+B.

Процесс сборки Simulink Coder генерирует и компилирует код. Текущая папка теперь содержит новый файл и новую папку.

ФайлОписание

vdptop.exe

Исполняемый файл создается процессом сборки

vdptop_grt_rtw/

Папка сборки, содержа сгенерированный код для топ-модели

Процесс сборки также сгенерировал код GRT для модели, на которую ссылаются, и поместил его в папку slprj.

Чтобы просмотреть сгенерированный код модели в Model Explorer, модель должна быть открыта. Использовать Model Explorer, чтобы осмотреть недавно созданную папку сборки, vdptop_grt_rtw:

  1. Откройте Model Explorer путем выбора Model Explorer из меню View модели.

  2. В панели Model Hierarchy расширьте имя модели, чтобы показать его компоненты.

  3. Расширьте Code for vdptop, чтобы показать его компоненты.

  4. Нажмите This Model.

    Список файлов сгенерированного кода для vdptop появляется в панели Contents:

    rtmodel.h
    vdptop.c
    vdptop.h
    vdptop.mk
    vdptop_private.h
    vdptop_types.h

    Можно просмотреть код путем выбора файла интереса к панели Contents.

    Чтобы открыть файл в текстовом редакторе, кликните по имени файла, и затем кликните по гиперссылке, которая появляется в серой области наверху панели Document. Эти данные показывают код просмотра для vdptop.c в текстовом редакторе. Ваш код может отличаться.

    Чтобы просмотреть сгенерированный код в отчете генерации кода HTML, смотрите, Генерируют Отчет Генерации кода.

Работа с папками генерации кода

Код модели - ссылки сгенерирован в вашей папке генерации кода (Simulink), и целевой код симуляции сгенерирован в вашей папке кэша симуляции (Simulink). Из-за этого процесса существуют ограничения на:

  • Когда и где цели модели-ссылки создаются.

  • Как к целям модели-ссылки получают доступ.

Модели, на которые ссылаются блоки Model, могут храниться где угодно на пути MATLAB. Данная топ-модель может включать модели, сохраненные в различных файловых системах или в различных папках. То же самое не верно для целей симуляции и сгенерированного кода, выведенного из этих моделей. При большинстве обстоятельств, чтобы позволить повторное использование кода, модели, на которые ссылается данная топ-модель, должны быть настроены, чтобы моделировать и сгенерировать код цели модели-ссылки в одной папке генерации кода.

Это означает, что, если вы ссылаетесь на ту же модель от нескольких топ-моделей, каждый сохраненный в различной папке, необходимо выбрать один из этих подходов:

  • Всегда работайте с той же папкой генерации кода и быть уверенными, что модели находятся на вашем пути.

  • Позвольте отдельным папкам генерации кода, целям симуляции и целям Simulink Coder быть сгенерированными в каждой папке, в которой вы работаете.

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

Похожие темы