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

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

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

  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 из вкладки Multiple на панели инструментов.

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

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

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

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

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

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

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

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

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

  1. Открытый Model Explorer. На вкладке Modeling нажмите Model Explorer.

  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. На вкладке Modeling нажмите Model Explorer.

  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. На вкладке Modeling нажмите Model Explorer.

  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 в текстовом редакторе. Ваш код может отличаться.

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

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

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

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

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

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

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

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

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

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

Похожие темы