При конфигурировании модели для генерации кода можно идентифицировать и сконфигурировать параметры для настраиваемости, например, для калибровки. Типы параметров, которые можно настроить, перечислены в этой таблице.
Тип параметра | Описание |
---|---|
Аргумент параметра модели | Блокируйте параметр в рабочем пространстве модели, который вы конфигурируете как аргумент модели. Каждому образцу модели, которая включает аргумент параметра модели, может быть задано уникальное значение аргумента. |
Параметр модели | Параметр, заданный в модели, такой как параметр в рабочем пространстве модели. |
Внешний параметр | Параметр, заданный как объект в базовом рабочем пространстве или в словаре данных. |
Постоянный | Параметр Constant. |
Чтобы сконфигурировать параметр для генерации кода, необходимо связать параметр с объектом данных. Например, перед конфигурированием переменного MATLAB для генерации кода в Model Explorer преобразуйте переменную в объект параметра.
Когда вы открываете модель в приложении Embedded Coder, параметры модели, аргументы параметра модели и константы, которые связаны с объектами данных, появляются в редакторе Отображения. В редакторе можно сконфигурировать параметры для генерации кода. Если модель использует внешние параметры, можно добавить их в редактор Отображения, нажав на Refresh
ссылка справа от имени параметра. Эта ссылка инициирует схему обновления и, в представлении редактор, добавляет внешние параметры, которые используются моделью.
Сконфигурируйте данные параметра так:
Сделайте данные доступными для взаимодействия во время выполнения сгенерированного кода.
Минимизируйте объем данных, которые хранятся в памяти.
Управляйте, где генератор кода помещает данные параметра в память.
Продвигайте данные параметров в интерфейс модели, чтобы другие компоненты и системы могли получить доступ к этим данным.
Улучшите читаемость и трассируемость сгенерированного кода.
Чтобы контролировать, являются ли параметры во всей модели настраиваемыми, можно получить доступ к параметр конфигурации <reservedrangesplaceholder1> модели с помощью '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. Смотрите Использование Исполнительных Моделей для Генерации Кода, Который Использует Условия Препроцессора С.
Включите static
type qualifier в определениях глобальных переменных и объявлениях, например, для предотвращения конфликтов имен. Требуется Embedded Coder. См. раздел «Предотвращение конфликтов имен путем настройки элемента данных как статического».
Включите const
, volatile
, или const
и volatile
type qualifier в определениях и объявлениях глобальных переменных. Требуется Embedded Coder. См. Раздел «Защита глобальных данных с помощью стандартных и энергозависимых классификаторов типов».
Сгенерируйте макрос (#define
) или код, который использует макрос, заданный во внешнем заголовочном файле. Требуется Embedded Coder. См. раздел Определения макросов (# define).
Сгенерируйте структуру глобальных данных с заданным именем. Требуется Embedded Coder. См. раздел Организация данных в структуры в сгенерированном коде.
Поместите данные параметра в определенную область памяти. Требуется Embedded Coder. Смотрите Control Data and Function Placement in Memory путем вставки прагм.
Список требований к интерфейсам, относящихся к параметрам, имеющим соответствующие классы памяти и свойства класса памяти, см. в разделе Выбор классов памяти и свойств классов памяти для хранилищ данных.
Требования к параметрам, например, к rtwdemo_configinterface
модели являются:
По умолчанию сохраните параметры модели в сгенерированном коде для настройки. Не оптимизируйте код путем встраивания параметров.
Представьте параметры модели как отдельные глобальные переменные, определенные и объявленные с const
и volatile
классификаторы типов.
Применить префикс mp_
к именам переменных, которые представляют параметры модели.
Включите постоянные параметры UPPER
и LOWER
иметь различные значения для каждого образца модели.
Для каждого образца аргумента параметра модели по умолчанию выделите область памяти, представленную как уникально именованное поле в экспортированной структуре.
Аргументы параметра модели появляются как отдельные аргументы функции model в сгенерированном коде. Включите генератор кода, чтобы оптимизировать аргументы параметра модели, которые не используются блоками в модели.
В данном примере сконфигурируйте параметры модели и аргументы параметра модели в 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
. В Property Inspector разверните узел Code. Установите свойство класса памяти 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.
В диалоговом окне «Создание новых данных» установите Value равным Simulink.Parameter(1.0)
и нажмите Create.
Simulink добавляет Simulink.Parameter
объект с именем p1
в рабочее пространство модели.
В диалоговом окне свойств для p1
, нажмите OK.
Если вам не пришлось настраивать другие параметры, можно щелкнуть вкладку Code Generation. Затем нажмите кнопку Configure in Coder App, которая открывает приложение Embedded Coder и редактор Code Mappings.
Используйте 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 параметра
. В Property Inspector под Code установите значение свойства 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 directive) или код, который использует макрос, заданный в заголовочном файле внешнего кода. | Задайте, ИмпортируйтеЗадайте |
Сгенерируйте глобальное определение переменной и объявление. | ExportedGlobal |
Сгенерируйте определение глобальной переменной и объявление в указанный файл. | ExportToFile |
Сгенерируйте глобальное определение переменной и объявление, которое имеет static type qualifier. | FileScope (только для локальных и общих локальных хранилищ данных) |
Сгенерируйте код, который взаимодействует с данными, вызывая пользовательские функции доступа. | GetSet |
Сгенерируйте код, который читается и записывается в глобальную переменную или глобальный указатель переменной, заданный вашим внешним кодом. | ImportedExtern, ImportedExternPointer |
Сгенерируйте код, который читается и записывается в глобальную переменную, заданную вашим внешним заголовочным файлом. | ImportFromFile |
Сгенерируйте глобальную структуру, которая имеет имя, которое можно задать. | Struct (только для отдельных отображений) |
Список доступных классов памяти может включать другие специфичные для проекта классы памяти, определенные в словаре Embedded Coder Dictionary. Если у вас есть особые требования, не удовлетворяющие перечисленным классам памяти, и вы имеете программное обеспечение Embedded Coder, можно задать класс памяти. Смотрите раздел «Определение классов памяти, разделов памяти и шаблонов функций» для программной архитектуры.
Для отдельного параметра модели используйте свойство Identifier класса памяти, чтобы сконфигурировать имя для переменной, представляющей параметр в сгенерированном коде. С помощью Embedded Coder, в зависимости от выбранного класса памяти, можно также сконфигурировать эти свойства.
Свойство | Описание | Классы памяти |
---|---|---|
DefinitionFile | Исходный файл определения, который содержит определения для глобальных данных, который считывается параметром и внешним кодом | ExportToFile и Volatile |
GetFunction | Параметр появляется в сгенерированном коде как вызов к заданному get функция | GetSet |
HeaderFile | Исходный файл заголовка, который содержит объявления для глобальных данных, который считывается параметром и внешним кодом | ExportToFile , GetSet , ImportFromFile , и Volatile |
Memory Section (только строение параметра по умолчанию) | Раздел памяти, который содержит данные, считанные параметром | 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