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

Когда вы создаете допускающий повторное использование компонент как модель, на которую ссылаются, конфигурируете параметры блоков, чтобы использовать то же значение в экземплярах компонента или различное значение для каждого экземпляра.

Чтобы настроить реализацию аргументов параметра в сгенерированном коде, можно сконфигурировать упаковку этих параметров в модели, где они заданы.

Сконфигурируйте отображение значения по умолчанию для аргументов параметра модели при помощи одного из этих классов памяти:

  • Default — Каждый экземпляр параметра выделяется часть памяти в экспортируемой структуре, атрибуты которой заданы правилами именования идентификатора.

  • Класс структурированного хранилища — Каждый экземпляр параметра выделяется часть памяти, как задано определением кода того класса памяти.

Индивидуально задайте класс памяти для аргументов параметра модели при помощи одного из этих классов памяти:

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

  • Model default — Каждый экземпляр параметра выделяется часть памяти, как задано определением кода класса памяти по умолчанию. Задайте этот класс памяти по умолчанию посредством отображения по умолчанию модели.

Если вы используете разовую редактированием проверку генерацию кода, вы получаете ошибку для недопустимого класса памяти.

Для аргумента параметра с non-Auto класс памяти:

  • На блоке Model можно задать значение на экземпляр или как литерал, числовую переменную MATLAB® или как Simulink.Parameter объект.

  • Если значением на экземпляр является Simulink.Parameter объект, объект должен иметь класс памяти Auto.

  • Если значение на экземпляр является выражением, оцененное значение выражения используется, чтобы статически инициализировать параметр.

Если вы не задаете или отдельный класс памяти по умолчанию для аргумента параметра, генератор кода применяет класс внутренней памяти, InstP, к параметру. Instp класс памяти имеет эти свойства:

  • Экспортируемый осциллограф

  • Правилом именования типа является $R_InstP$M

  • Именем экземпляра является InstP$R$M

Поведение генерации кода

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

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

Для аргументов параметра, заданных в топ-модели, если аргумент не имеет класса памяти, он встраивается. Если это имеет класс памяти, получившийся код зависит от значения интерфейса Code упаковочный параметр:

  • Nonreusable function — Параметр сгенерирован в структуре, заданной в топ-модели.

  • Reusable function — Параметр сгенерирован в структуре, переданной как часть первого аргумента функции.

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

  1. Открытая модель ex_arg_code_ref.

  2. На вкладке Modeling нажмите Model Data Editor.

  3. Выберите вкладку Parameters.

  4. В модели выберите блок Gain.

  5. В Model Data Editor используйте столбец Value, чтобы установить значение параметра Gain к gainArg.

  6. Рядом с gainArg, кликните по кнопке действий и выберите Create.

  7. В диалоговом окне Create New Data, набор Value к Simulink.Parameter и Location к Model Workspace. Нажмите Create.

  8. В диалоговом окне свойства, набор Value к номеру, например, 3.17. Нажмите OK.

  9. Используйте Model Data Editor, чтобы установить параметр Numerator при помощи Simulink.Parameter возразите названному coeffArg чьим значением является 1.05. Как с gainArg, сохраните объект параметра в рабочем пространстве модели.

  10. В Model Data Editor нажмите кнопку Show/refresh additional information.

  11. Используйте поле Filter contents, чтобы найти каждый объект параметра (gainArg и coeffArg). Для каждого объекта установите флажок в столбце Argument.

  12. Сохраните ex_arg_code_ref модель.

Сначала рассмотрите случай, где эта модель сконфигурирована, чтобы поддержать только один экземпляр, и отображение значения по умолчанию для аргументов параметра модели не имеет класса памяти. В ex_arg_code_ref.h файл, существует определение типа и объявление для специфичных для экземпляра параметров.

Когда топ-модель ссылается на эту модель и предоставляет значения для специфичных для экземпляра параметров, код для топ-модели задает специфичные для экземпляра параметры при помощи значений, введенных топ-моделью.

Теперь рассмотрите, сконфигурирована ли модель, на которую ссылаются, чтобы поддержать несколько экземпляров. ex_arg_code_ref.h содержит то же определение типа, как одно экземпляр, но сам для модели также содержит указатель на экземпляр той структуры данных. Нет никакого объявления указателя к автономной глобальной переменной той структуры.

Топ-модель объявляет первичную структуру, включая экземпляр этой подструктуры, и инициализирует указатель в сам структура для модели, на которую ссылаются.

Ограничения

Когда вы конфигурируете специфичный для экземпляра параметр для генерации кода, эти ограничения применяются:

  • Отображение значения по умолчанию для аргументов параметра модели не может быть снова использовано для параметров модели или внешних объектов параметра.

  • Во время генерации кода необходимо ввести значение для каждого экземпляра параметра в иерархии модели - ссылки. Отказ предоставить значение приводит к ошибке генерации кода.

  • Специфичные для экземпляра значения параметров должны быть конечными.

  • Аргументы параметра с non-Auto класс памяти не поддержан для генерации Кода С++ с интерфейсом класса C++ кода.

Похожие темы