При конфигурировании модели для генерации кода можно идентифицировать и сконфигурировать параметры для настриваемости, например, для калибровки. Типы параметров, которые можно сконфигурировать, перечислены в этой таблице.
Тип параметра | Описание |
---|---|
Аргумент параметра модели | Параметры блоков в рабочем пространстве модели, которое вы конфигурируете в качестве аргумента модели. Каждому экземпляру модели, которая включает аргумент параметра модели, можно было установить аргумент на уникальное значение. |
Параметр модели | Параметр задан в модели, такой в качестве параметра в рабочем пространстве модели. |
Внешний параметр | Параметр, заданный как объект в базовом рабочем пространстве или в словаре данных. |
Постоянный | Постоянный параметр. |
Чтобы сконфигурировать параметр для генерации кода, необходимо сопоставить параметр с объектом данных. Например, прежде, чем сконфигурировать переменную MATLAB для генерации кода, в Model Explorer, преобразуют переменную в объект параметра.
Когда вы открываете модель в приложении Embedded Coder, параметры модели, аргументы параметра модели и константы, которые сопоставлены с объектами данных, появляются в редакторе Отображений Кода. В редакторе можно сконфигурировать параметры для генерации кода. Если модель использует внешние параметры, можно добавить их в редактор Отображений Кода путем нажатия на Refresh
соединитесь справа от названия параметра. Та ссылка инициирует схему обновления и в представлении редактора, добавляют внешние параметры, которые используются моделью.
Сконфигурируйте данные о параметре к:
Сделайте данные доступными для взаимодействия, в то время как сгенерированный код выполняется.
Минимизируйте объем данных, который хранится в памяти.
Управляйте, куда генератор кода помещает данные о параметре в память.
Продвиньте данные о параметре интерфейс модели так, чтобы другие компоненты и системы могли получить доступ к тем данным.
Улучшите удобочитаемость и трассируемость сгенерированного кода.
Чтобы управлять, являются ли параметры в модели настраиваемыми, можно получить доступ к параметру конфигурации модели Default parameter behavior при помощи 'Auto' will be tunable/inline
ссылка на редактор Отображений Кода вкладка Data Defaults. Например, можно использовать ту ссылку, чтобы сделать параметры настраиваемыми в этих случаях:
Совершенствуйте установки параметров во время быстрого прототипирования
Калибруйте параметры
Оптимизируйте параметры для производственного кода
Для генерации кода примеры показывают, как сконфигурировать параметры модели и аргументы параметра модели для модели rtwdemo_configinterface
. Можно сконфигурировать отображения кода при помощи Code Mappings editor или интерфейса программирования отображений кода (coder.mapping.api.CodeMapping
).
По умолчанию параметры в модели появляются в сгенерированном коде как поля названных структур глобальных данных:
для параметров моделиmodel
P
для аргументов параметра моделиmodel
_InstP
для постоянных параметровmodel
_ConstP
На основе ваших требований интерфейса кода решите, настроить ли генерацию данных о параметре. Если вы не конфигурируете индивидуальные настройки, генератор кода определяет, устранить ли или изменить представление параметров в сгенерированном коде в целях оптимизации. Если вы конфигурируете индивидуальные настройки, решаете:
Настроить ли настройку по умолчанию
Если модель включает значительное количество параметров категории, которая должна быть настраиваемой (например, больше чем 10), более эффективно сконфигурировать параметры той категории при помощи настройки по умолчанию, и затем заменить ту установку для особых случаев. Если модель включает несколько параметров данной категории, которые имеют уникальный источник, именование, или требования размещения, рассматривают конфигурирование параметров индивидуально.
Как объявить и обработать данные о параметре модели в сгенерированном коде
Как разделяют глобальные переменные
Считывать данные о параметре модели из глобальных переменных, заданных во внешнем коде
Как вызывает к функциям доступа. Требует Embedded Coder®
Для получения дополнительной информации об этих опциях, смотрите Данные об Управлении и Функциональный Интерфейс в Сгенерированном коде.
Другие факторы для параметров модели включают ли в:
Назовите параметры в сгенерированном коде при помощи названий параметра в модели или при помощи идентификаторов уникального кода.
Поддержите условные выражения препроцессора, заданные флагами компилятора или опциями. Требует Embedded Coder. См. Модели Варианта Использования, чтобы Сгенерировать Код Который Использование C Условные выражения Препроцессора.
Включайте static
введите спецификатор в определениях глобальной переменной и объявлениях, например, чтобы предотвратить столкновения имени. Требует Embedded Coder. Смотрите Предотвращают Столкновения Имени путем Конфигурирования Элемента данных как статического.
Включайте const
, volatile
, или const
и volatile
введите спецификатор в определениях глобальной переменной и объявлениях. Требует Embedded Coder. Смотрите Защищают Глобальные данные с const и энергозависимыми Спецификаторами Типа.
Сгенерируйте макрос (#define
) или код, который использует макрос, заданный во внешнем заголовочном файле. Требует Embedded Coder. Смотрите Макроопределения (#define).
Сгенерируйте структуру глобальных данных с именем, которое вы задаете. Требует Embedded Coder. Смотрите Организуют Данные в Структуры в Сгенерированном коде.
Поместите данные о параметре в определенную область памяти. Требует Embedded Coder. Смотрите Данные об Управлении и Функциональное Размещение в Памяти Вставкой Прагм.
Для списка интерфейсных требований, которые относятся к параметрам, которые имеют соответствующие классы памяти и свойства класса памяти, смотрите Choose Storage Class and Storage Class Properties для Хранилищ данных.
Требования параметра, например, модель rtwdemo_configinterface
:
По умолчанию сохраните параметры модели в сгенерированном коде для настройки. Не оптимизируйте код путем встраивания параметров.
Представляйте параметры модели как отдельные глобальные переменные, заданные и заявленные с const
и volatile
введите спецификаторы.
Примените префиксный mp_
к именам переменных, которые представляют параметры модели.
Включите постоянным параметрам UPPER
и LOWER
иметь различные значения для каждого экземпляра модели.
Для каждого экземпляра аргумента параметра модели, по умолчанию, выделяют область памяти, представленной как исключительно именованное поле в экспортируемой структуре.
Аргументы параметра модели появляются как отдельные аргументы функции модели в сгенерированном коде. Позвольте генератору кода оптимизировать аргументы параметра модели, которые не используются блоками в модели.
В данном примере сконфигурируйте параметры модели и аргументы параметра модели в rtwdemo_configinterface
удовлетворять эти требования генерации кода.
Настройки генерации кода по умолчанию для параметров могут уменьшать усилие по подготовке модели для генерации кода, особенно если модель имеет значительное количество параметров, с которыми необходимо взаимодействовать, в то время как сгенерированный код выполняется. Выберите параметры конфигурации однажды, и генератор кода применяет те настройки к параметрам через модель. Simulink® хранит настройку по умолчанию как часть модели.
Рассмотрите конфигурирующие настройки генерации кода по умолчанию для параметров модели, если ваша модель использует несколько параметров для той же категории, которые не имеют уникальных требований или используют разделяемый Словарь Embedded Coder.
В этом примере показано, как использовать Code Mappings editor, чтобы сконфигурировать настройки по умолчанию для параметров модели и аргументы параметра модели для модели rtwdemo_configinterface
. Сконфигурируйте параметры модели так, чтобы они были настраиваемыми и были заданы и объявлены в сгенерированном коде как отдельные глобальные переменные, которые имеют спецификаторы типа const
и volatile
. Сконфигурируйте аргументы параметра модели, чтобы использовать настройки по умолчанию, где генератор кода выделяет область памяти, представленной как исключительно именованное поле в экспортируемой структуре для каждого экземпляра аргумента.
Открытая модель rtwdemo_configinterface
. Сохраните копию модели к перезаписываемому местоположению.
Откройте приложение Embedded Coder.
Во вкладке C Code выберите Code Interface> Default Code Mappings.
В редакторе Отображений Кода выберите Model parameter arguments. Оставьте набор класса памяти Default
. Генератор кода выделяет отдельную область памяти для каждого экземпляра аргумента.
В редакторе Отображений Кода, под Parameters, избранная категория Model parameters. Текст ссылки 'Auto' will be inlined
указывает, что генератор кода сконфигурирован, чтобы встроить параметры модели по умолчанию. Требование для этого примера является параметрами модели быть настраиваемым. Нажмите 'Auto' will be inlined
.
В диалоговом окне Model Configuration Parameters, параметр конфигурации модели набора Default parameter behavior к Tunable
. Сохраните изменение и закройте диалоговое окно. В редакторе Отображений Кода текст ссылки превращается в 'Auto' will be tunable
.
В Отображениях Кода, с категорией Model parameters, все еще выбранной, устанавливает класс памяти на ConstVolatile
.
Сохраните модель.
Можно сконфигурировать отдельные параметры для генерации кода. Например, если модель имеет два параметра той же категории, которые имеют требования генерации уникального кода, конфигурируют параметры индивидуально. Или, если вы конфигурируете настройки по умолчанию для категории параметров, можно заменить те настройки для определенных параметров.
Если ваша модель соответствует по крайней мере одному из этих критериев, рассмотрите настройки генерации кода конфигурирования для параметров индивидуально:
Использование несколько параметров той же категории, которые имеют уникальный источник, именование или требования размещения.
Использование несколько параметров той же категории.
Имеет настройку по умолчанию для категории параметров, и необходимо заменить настройку для некоторых определенных параметров.
В этом примере показано, как использовать редактор Отображений Кода, чтобы применить вашу установку класса памяти по умолчанию для параметров модели к параметрам K1
, Table1
, и Table2
в модели rtwdemo_configinterface
. Вы конфигурируете идентификаторы кода для тех параметров и для аргументов LOWER
параметра модели и
UPPER
. Можно задать идентификаторы генерации кода, например, для интегрирования, не изменяя проект модели.
Если вы уже не сделали так, завершитесь, шаги в Конфигурируют Настройки генерации кода По умолчанию для Параметров.
В редакторе Отображений Кода кликните по вкладке Parameters. Расширьте Model Parameter Arguments. По умолчанию класс памяти для каждого параметра модели установлен в Auto
, что означает, что генератор кода может устранить или изменить представление соответствующих норм в целях оптимизации. Если оптимизация не возможна, генератор кода применяет настройку по умолчанию модели. В данном примере оставьте набор класса памяти Auto
.
Расширьте Model Parameters. По умолчанию класс памяти для каждого параметра установлен в Auto
. Используйте настройку по умолчанию модели, которая задает класс памяти ConstVolatile
.
Чтобы избежать оптимизации и обеспечить генератор кода, чтобы использовать настройку по умолчанию, установите класс памяти на Model default
.
Чтобы заменить настройку по умолчанию, задайте класс памяти, который удовлетворяет требования генерации кода для того параметра.
В редакторе Отображений Кода, под Model Parameters, избранные параметры K1
, Table1
, и Table2
. Установите класс памяти на Model default: ConstVolatile
.
Сконфигурируйте идентификаторы кода для параметров модели с именами, которые включают префиксный mp_
. В редакторе Отображений Кода выберите параметр модели K1
. Кликните по значку и установите свойство Identifier класса памяти на mp_K1
. Для параметров Table1
и Table2
, установите Identifier на mp_Table1
и mp_Table2
.
Сохраните модель.
Сгенерируйте и просмотрите код. Например, найдите определения данных для параметра модели mp_K1
в rtwdemo_configinterface.c
.
const volatile int8_T mp_K1 = 2;
Найдите, где параметр используется в функции точки входа шага.
if (mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; }
Struct
Класс памятиВ этом примере показано, как использовать Struct
класс памяти, чтобы организовать значения параметров блоков в структуру в сгенерированном коде. Вы применяете класс памяти непосредственно к отдельным элементам данных в модели.
Чтобы создать пользовательскую структуру данных о параметре в сгенерированном коде, рассмотрите создание соответствующей структуры в Simulink. Смотрите Организуют Данные в Структуры в Сгенерированном коде.
Создайте эту модель в качестве примера с тремя блоками Constant и тремя блоками Outport. Назовите модель ex_struct_param
.
Откройте Model Data Editor. На вкладке Modeling нажмите Model Data Editor.
В Model Data Editor выберите вкладку Parameters.
В модели выберите верхний блок Constant.
В Model Data Editor используйте столбец Value, чтобы установить постоянное значение к p1
. Рядом с p1
, кликните по кнопке действий и выберите Create.
В диалоговом окне Create New Data, набор Value к Simulink.Parameter(1.0)
и нажмите Create.
Simulink добавляет Simulink.Parameter
возразите названному p1
к рабочему пространству модели.
В диалоговом окне свойства для p1
, нажмите OK.
Если бы вы не должны были настраивать другие параметры, вы могли бы кликнуть по вкладке Code Generation. Затем нажмите кнопку Configure in Coder App, которая открывает редактор Отображений приложения и Кода Embedded Coder.
Используйте Model Data Editor, чтобы установить другие постоянные значения при помощи объектов параметра под названием p2
(значение 2.0
) и p3
(значение 3.0
).
Откройте приложение Embedded Coder.
На вкладке C Code выберите Code Interface> Individual Element Code Mappings.
В редакторе Отображений Кода кликните по вкладке Parameters.
Расширьте Model Parameters.
Установите класс памяти для параметров p1
, p2
, и p3
к Struct
.
Выберите параметр p1
. Кликните по значку и установите свойство StructName на my_struct
. Для параметров p2
и p3
, установите StructName на my_struct
.
Сохраните модель.
Сгенерируйте и смотрите код.
Файл ex_struct_param.h
задает тип структуры, my_struct_type
.
/* Type definition for custom storage class: Struct */ typedef struct my_struct_tag { real_T p1; real_T p2; real_T p3; } my_struct_type;
Файл ex_struct_param.c
задает глобальную переменную my_struct
.
/* Definition for custom storage class: Struct */ my_struct_type my_struct = { /* p1 */ 1.0, /* p2 */ 2.0, /* p3 */ 3.0 };
Чтобы автоматизировать настройку параметров для генерации кода, используйте интерфейс программирования для отображений кода. Например, при создании библиотек пользовательского блока или части тестовой среды приложения, используйте интерфейс программирования, чтобы автоматизировать настройку данных.
В этом примере показано, как сконфигурировать настройки по умолчанию для параметров модели и аргументы параметра модели для модели rtwdemo_configinterface. Сконфигурируйте параметры модели так, чтобы они были настраиваемыми и были заданы и объявлены в сгенерированном коде как отдельные глобальные переменные, которые имеют спецификаторы типа const
и volatile
. Сконфигурируйте аргументы параметра модели, чтобы использовать настройки по умолчанию, где генератор кода выделяет область памяти, представленной как исключительно именованное поле в экспортируемой структуре для каждого экземпляра аргумента. Примените свою установку класса памяти по умолчанию для параметров модели к параметрам K1
, Table1
, и Table2
. Сконфигурируйте идентификаторы кода для тех параметров.
Откройте модель в качестве примера.
open_system('rtwdemo_configinterface');
Установите параметр конфигурации модели Default parameter behavior на Tunable
.
model='rtwdemo_configinterface';
set_param(model,'DefaultParameterBehavior','Tunable');
Создайте объект cm
путем вызывания функции coder.mapping.api.get
. Объектно-ориентированная память настройка генерации кода для элементов данных и функций в модели rtwdemo_configdefaults
.
cm = coder.mapping.api.get('rtwdemo_configinterface');
Сконфигурируйте настройки по умолчанию для параметров модели путем вызывания функции setDataDefault
. Для аргументов задайте эти значения:
Объект, возвращенный coder.mapping.api.get
ModelParameters
для категории по умолчанию
Имя свойства StorageClass
со значением свойства ConstVolatile
setDataDefault(cm,'ModelParameters','StorageClass','ConstVolatile');
Сконфигурируйте настройки по умолчанию для аргументов параметра модели. В вызове setDataDefault
, задайте эти значения для аргументов:
Объект, возвращенный coder.mapping.api.get
.
ModelParameterArguments
для категории по умолчанию.
Имя свойства StorageClass
со значением свойства Default
.
setDataDefault(cm,'ModelParameterArguments','StorageClass','Default');
Проверьте свою настройку по умолчанию для аргументов параметра модели и параметров модели. Издайте приказы к getDataDefault
это задает объект, возвращенный coder.mapping.api.get
, категория ModelParameters
или ModelParameterArguments
, и StorageClass
.
getDataDefault(cm, 'ModelParameters', 'StorageClass') ans = 'ConstVolatile'
getDataDefault(cm, 'ModelParameterArguments', 'StorageClass') ans = 'Default'
Примените настройку по умолчанию для параметров модели к параметрам K1
, Table1
, и Table2
.
По умолчанию Simulink устанавливает класс памяти для отдельных параметров к Auto
. Когда классом памяти является Auto
, генератор кода:
Определяет, устранить ли данные из сгенерированного кода в целях оптимизации.
При сохранении данных, определяет, как эффективно представлять данные в сгенерированном коде, учитывая параметры конфигурации по умолчанию.
Сконфигурируйте генератор кода, чтобы применить ваши настройки параметра модели по умолчанию к параметрам K1
, Table1
, и Table2
. Для каждого параметра вызовите функцию setModelParameter
. Задайте объект, возвращенный coder.mapping.api.get
, название параметра, имя свойства StorageClass
, и значение свойства Model default
.
setModelParameter(cm,'K1','StorageClass','Model default'); setModelParameter(cm,'Table1','StorageClass','Model default'); setModelParameter(cm,'Table2','StorageClass','Model default');
Проверьте свои изменения конфигурации для параметров K1
, Table1
, и Table2
при помощи вызовов функции getModelParameter
.
getModelParameter(cm,'K1','StorageClass') ans = 'Model default' getModelParameter(cm,'Table1','StorageClass') ans = 'Model default' getModelParameter(cm,'Table2','StorageClass') ans = 'Model default'
Сконфигурируйте идентификаторы кода для параметров модели. Для каждого параметра вызовите функцию setModelParameter
. Задайте объект, возвращенный coder.mapping.api.get
, название параметра, имя свойства Identifier
, и одни из этих значений свойств.
Параметр модели | Идентификатор кода |
---|---|
K1 | mp_K1 |
Table1 | mp_Table1 |
Table2 | mp_Table2 |
setModelParameter(cm,'K1','Identifier','mp_K1'); setModelParameter(cm,'Table1','Identifier','mp_Table1'); setModelParameter(cm,'Table2','Identifier','mp_Table2');
Проверьте свои изменения конфигурации для параметров модели при помощи вызовов функции getModelParameter
.
getModelParameter(cm,'K1','Identifier') ans = 'mp_K1' getModelParameter(cm,'Table1','Identifier') ans = 'mp_Table1' getModelParameter(cm, 'Table2', 'Identifier') ans = 'mp_Table2'
Сохраните модель.
Сгенерируйте и просмотрите код. Например, найдите определения данных для параметра модели mp_K1
в rtwdemo_configinterface.c
.
const volatile int8_T mp_K1 = 2;
Найдите, где параметр используется в функции точки входа шага.
if (mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; }
В зависимости от ваших требований генерации кода примите решение из этих классов памяти сконфигурировать генерацию кода для параметров модели. Для констант, только Default
применяется. Для аргументов параметра модели, только Auto
, Default
, и Model default
применяться.
Требования | Класс памяти |
---|---|
Включите оптимизацию, потенциально генерируя более эффективный код. | Автоматический (Только отдельные отображения) |
Для элементов данных, которые не могут быть оптимизированы, представляйте данные как поле стандартной структуры данных. | Значение по умолчанию (Значение по умолчанию, сопоставляющее только) |
Препятствуйте тому, чтобы оптимизация устранила устройство хранения данных для элемента данных, и используйте отображение значения по умолчанию для категории элемента данных. | Значение по умолчанию модели (Только отдельные отображения), Dictionary Default (Только отдельные отображения) |
Сгенерируйте структуру, которая хранит булевы данные в именованных битовых полях. | Битовое поле (Индивидуум, сопоставляющий только) |
Поддержите условные выражения препроцессора, заданные при помощи флага компилятора или опции. | CompilerFlag |
Сгенерируйте определение глобальной переменной и объявление, которое имеет const , volatile , или const и volatile введите спецификаторы. | Const, Volatile, и ConstVolatile |
Сгенерируйте макрос (#define директива) или код, который использует макрос, заданный в заголовочном файле в вашем внешнем коде. | Define, ImportedDefine |
Сгенерируйте определение глобальной переменной и объявление. | ExportedGlobal |
Сгенерируйте определение глобальной переменной и объявление к заданному файлу. | ExportToFile |
Сгенерируйте определение глобальной переменной и объявление, которое имеет static введите спецификатор. | FileScope (Только локальные и совместно использованные локальные отображения хранилища данных) |
Сгенерируйте код, который взаимодействует с данными путем вызывания пользовательских функций средства доступа. | GetSet |
Сгенерируйте код, который читает из и пишет в указатель глобальной переменной или глобальной переменной, заданный вашим внешним кодом. | ImportedExtern, ImportedExternPointer |
Сгенерируйте код, который читает из и пишет в глобальную переменную, заданную вашим внешним заголовочным файлом. | ImportFromFile |
Сгенерируйте глобальную структуру, которая имеет имя, которое можно задать. | Struct (Только отдельные отображения) |
Список доступных классов памяти может включать другие специфичные для проекта классы памяти, заданные в Словарь Embedded Coder. Если у вас есть особые требования, которым не отвечают перечисленные классы памяти, и у вас есть программное обеспечение Embedded Coder, можно задать класс памяти. Смотрите Задают Классы памяти, Разделы Памяти и Шаблоны функций для Программной архитектуры.
Для отдельного параметра модели используйте свойство класса памяти Identifier сконфигурировать имя для переменной, представляющей параметр в сгенерированном коде. С Embedded Coder, в зависимости от класса памяти, который вы выбираете, можно также сконфигурировать эти свойства.
Свойство | Описание | Классы памяти |
---|---|---|
DefinitionFile | Исходный файл определения, который содержит определения для глобальных данных, которые считаны параметром и внешним кодом | ExportToFile и Volatile |
GetFunction | Параметр появляется в сгенерированном коде как вызов заданного get функция | GetSet |
HeaderFile | Исходный заголовочный файл, который содержит объявления для глобальных данных, которые считаны параметром и внешним кодом | ExportToFile , GetSet , ImportFromFile , и Volatile |
Memory Section (только настройка параметра по умолчанию) | Раздел Memory, который содержит данные, считанные параметром | Default |
Owner | Генератор кода помещает определение для параметров в коде, сгенерированном для одной из многоуровневых моделей в иерархии модели та доля определения. Необходимо выбрать параметр конфигурации модели Use owner from data object for data definition placement. Смотрите Размещение Управления Определений Глобальных данных и Объявлений в Сгенерированных Файлах. | ExportToFile и Volatile |
PreserveDimensions | Генератор кода сохраняет размерности данных о параметре, которые представлены в сгенерированном коде как многомерный массив. Необходимо установить параметр конфигурации модели Array layout на Row-major . Смотрите размерности заповедника многомерных массивов в сгенерированном коде. | ExportToFile , FileScope , ImportFromFile , Localizable и Volatile |
SetFunction | Параметр появляется в сгенерированном коде как вызов заданного set функция. | GetSet |
StructName | Назовите для структуры в сгенерированном коде для параметра. | BitField и Struct |
Редактор Отображений кода | coder.mapping.api.CodeMapping