При конфигурировании модели для генерации кода можно идентифицировать и сконфигурировать параметры для настраиваемости, например, для калибровки. Типы параметров, которые можно настроить, перечислены в этой таблице.
Тип параметра | Описание |
---|---|
Параметр модели | Параметр, заданный в модели, такой как параметр в рабочем пространстве модели. |
Внешний параметр | Параметр, заданный как объект в базовом рабочем пространстве или в словаре данных. |
Чтобы сконфигурировать параметр для генерации кода, необходимо связать параметр с объектом данных. Например, перед конфигурированием переменного MATLAB для генерации кода в Model Explorer преобразуйте переменную в объект параметра.
Когда вы открываете модель в приложении Simulink Coder, параметры модели, которые связаны с объектами данных, появляются в редакторе Отображения. В редакторе можно сконфигурировать параметры для генерации кода. Если модель использует внешние параметры, можно добавить их в редактор Отображения, нажав на Refresh
ссылка справа от имени параметра. Эта ссылка инициирует схему обновления и, в представлении редактор, добавляет внешние параметры, которые используются моделью.
Сконфигурируйте данные параметра так:
Сделайте данные доступными для взаимодействия во время выполнения сгенерированного кода.
Минимизируйте объем данных, которые хранятся в памяти.
Продвигайте данные параметров в интерфейс модели, чтобы другие компоненты и системы могли получить доступ к этим данным.
Улучшите читаемость и трассируемость сгенерированного кода.
Чтобы контролировать, являются ли параметры во всей модели настраиваемыми, можно получить доступ к параметр конфигурации <reservedrangesplaceholder1> модели с помощью 'Auto' will be tunable/inline
ссылка на вкладке Data Defaults редактора Отображения. Например, вы можете использовать эту ссылку, чтобы сделать параметры настраиваемыми в следующих случаях:
Уточните настройки параметра во время быстрого прототипирования
Калибровка параметров
Оптимизируйте параметры для производственного кода
Для генерации кода примеры показывают, как сконфигурировать параметры модели и аргументы параметра модели для модели rtwdemo_configrpinterface
. Можно сконфигурировать отображения кода с помощью интерфейса программирования Code Mappings editor или отображений кода (coder.mapping.api.CodeMapping
).
По умолчанию параметры в модели появляются в сгенерированном коде как поля структуры глобальных данных с именем
Основываясь на требованиях к интерфейсам кода, решите, настраивать ли генерацию данных параметра. Если вы не конфигурируете индивидуальных настроек, генератор кода определяет, устранять или изменять представление параметров в сгенерированном коде в целях оптимизации. Если вы конфигурируете индивидуальные настройки, решите:model
_P
Настройка ли строения по умолчанию
Если модель включает значительное количество параметров категории, которые должны быть настраиваемыми (для примера более 10), более эффективно конфигурировать параметры этой категории с помощью настройки по умолчанию, а затем переопределить эту настройку для особых случаев. Если модель включает несколько параметров заданной категории, которые имеют уникальные требования к источнику, именованию или размещению, рассмотрите настройку параметров отдельно.
Как объявить и обработать данные параметра модели в сгенерированном коде
Как отдельные глобальные переменные
Чтобы считать данные параметра модели из глобальных переменных, определенных во внешнем коде
Как вызовы для доступа к функциям. Требуется Embedded Coder®
Для получения дополнительной информации об этих опциях смотрите Управляющие данные и Интерфейс функции в Сгенерированном коде.
Другие факторы для параметров модели включают в себя, следует ли:
Назовите параметры в сгенерированном коде при помощи имен параметров в модели или при помощи уникальных идентификаторов кода.
Поддержка условий предпроцессора, заданных флагами или опциями компилятора. Требуется Embedded Coder. Смотрите Использование Исполнительных Моделей Для Генерации Кода, Который Использует Условия Препроцессора C (Embedded Coder).
Включите static
type qualifier в определениях глобальных переменных и объявлениях, например, для предотвращения конфликтов имен. Требуется Embedded Coder. См. «Предотвращение конфликтов имен путем настройки элемента данных как статического» (Embedded Coder).
Включите const
, volatile
, или const
и volatile
type qualifier в определениях и объявлениях глобальных переменных. Требуется Embedded Coder. Смотрите Protect Global Data with const and volatile Type Qualifiers (Embedded Coder).
Сгенерируйте макрос (#define
) или код, который использует макрос, заданный во внешнем заголовочном файле. Требуется Embedded Coder. См. раздел Определения макросов (# define) (Embedded Coder).
Сгенерируйте структуру глобальных данных с заданным именем. Требуется Embedded Coder. См. «Организация данных в структуры» в Сгенерированном коде (Embedded Coder).
Поместите данные параметра в определенную область памяти. Требуется Embedded Coder. Смотрите Control Data and Function Placement in Memory by Inserting Pragmas (Embedded Coder).
Список требований к интерфейсам, относящихся к параметрам, имеющим соответствующие классы памяти и свойства класса памяти, см. в разделе Выбор классов памяти и свойств классов памяти для хранилищ данных.
Требования к параметрам, например, к rtwdemo_configrpinterface
модели являются:
По умолчанию сохраните параметры модели в сгенерированном коде для настройки. Не оптимизируйте код путем встраивания параметров.
Применить префикс mp_
к именам переменных, которые представляют параметры модели.
В данном примере сконфигурируйте параметры модели в rtwdemo_configrpinterface
для соответствия этим требованиям генерации кода.
Настройки генерации кода по умолчанию для параметров могут уменьшить усилия по подготовке модели к генерации кода, особенно если у модели есть значительное количество параметров, с которыми вам нужно взаимодействовать во время выполнения сгенерированного кода. Выберите настройки строения один раз, и генератор кода применяет эти настройки к параметрам по всей модели. Simulink® сохраняет строение по умолчанию как часть модели.
Рассмотрите конфигурирование настроек генерации кода по умолчанию для параметров модели, если ваша модель использует несколько параметров для той же категории, которая не имеет уникальных требований.
В этом примере показано, как использовать Code Mappings editor для конфигурации настроек по умолчанию для параметров модели для rtwdemo_configrpinterface модели. Сконфигурируйте параметры модели так, чтобы они были настраиваемыми и были определены и объявлены в сгенерированном коде как отдельные глобальные переменные.
Откройте rtwdemo_configrpinterface модели. Сохраните копию модели в месте с возможностью записи.
Откройте приложение Simulink Coder.
На вкладке C Code выберите Code Interface > Default Code Mappings.
В редакторе Отображения в разделе Parameters выберите Model parameters категории. Ссылка на текстовое 'Auto' will be inlined
указывает, что генератор кода сконфигурирован на встроенные параметры модели по умолчанию. Требование к этому примеру - параметры модели быть настраиваемыми. Нажмите 'Auto' will be inlined
.
В диалоговом окне Model Configuration Parameters установите параметр конфигурации модели Default parameter behavior равным Tunable
. Сохраните изменения и закройте диалоговое окно. В редакторе Отображения текст ссылки изменяется на 'Auto' will be tunable
.
В Код Отображений, когда категория Model parameters все еще выбрана, установите класс склада равным ExportedGlobal
.
Сохраните модель.
Можно сконфигурировать отдельные параметры для генерации кода. Например, если у модели есть два параметра одной категории, которые имеют уникальные требования к генерации кода, сконфигурируйте параметры индивидуально. Или, если вы конфигурируете настройки по умолчанию для категории параметров, можно переопределить эти настройки для определенных параметров.
Если ваша модель соответствует хотя бы одному из следующих критериев, рассмотрите настройку настроек генерации кода для параметров индивидуально:
Использует несколько параметров одной категории, которые имеют уникальные требования к источнику, именованию или размещению.
Использует несколько параметров той же категории.
Имеет строение по умолчанию для категории параметров, и вам нужно переопределить строение для некоторых определенных параметров.
В этом примере показано, как использовать редактор Отображения для применения настройки класса памяти по умолчанию для параметров модели к параметрам K1
, Table1
, и Table2
в rtwdemo_configinterface модели
. Вы конфигурируете идентификаторы кода для этих параметров. Можно задать идентификаторы генерации кода, для примера для интегрирования, не изменяя проект модели.
Если вы еще не сделали этого, выполните шаги в Настройте настройки генерации кода по умолчанию для параметров.
Разверните Model Parameters. По умолчанию класс памяти для каждого параметра устанавливается на Auto
. Используйте строение модели по умолчанию, которая задает класс памяти ExportedGlobal
.
Чтобы избежать оптимизации и заставить генератор кода использовать строение по умолчанию, установите класс памяти равным Model default
.
Чтобы переопределить строение по умолчанию, задайте класс памяти, который удовлетворяет требованиям генерации кода для этого параметра.
В редакторе Отображения в разделе Model Parameters выберите параметры K1
, Table1
, и Table2
. Установите класс памяти равным Model default: ExportedGlobal
.
Сконфигурируйте идентификаторы кода для параметров модели с именами, которые включают префикс mp_
. В редакторе Отображения выберите параметр модели K1
. В Property Inspector разверните узел Code. Установите свойство класса памяти Identifier равным mp_K1
. Для параметров Table1
и Table2
, установите Identifier равным mp_Table1
и mp_Table2
.
Сохраните модель.
Сгенерируйте и просмотрите код. Для примера найдите определения данных для параметра модели mp_K1
в rtwdemo_configrpinterface.c
.
int8_T mp_K1 = 2;
Найдите, где параметр используется в функции точки входа шага.
if (mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; }
Чтобы автоматизировать строение параметров для генерации кода, используйте интерфейс программирования для отображения кода. Например, при создании пользовательских библиотек блоков или части тестового окружения приложения используйте интерфейс программирования для автоматизации строения данных.
В этом примере показано, как сконфигурировать настройки по умолчанию для параметров модели для rtwdemo_configrpinterface модели. Сконфигурируйте параметры модели так, чтобы они были настраиваемыми и были определены и объявлены в сгенерированном коде как отдельные глобальные переменные. Примените настройку класса памяти по умолчанию для параметров модели к параметрам K1
, Table1
, и Table2
. Сконфигурируйте идентификаторы кода для этих параметров.
Откройте пример модели.
open_system('rtwdemo_configrpinterface')
Установите Default parameter behavior параметра конфигурации модели в Tunable
.
model='rtwdemo_configrpinterface';
set_param(model,'DefaultParameterBehavior','Tunable');
Создайте объект cm
вызовом функции coder.mapping.api.get
. Объект хранит строение генерации кода для элементов данных в модели rtwdemo_configrpdefaults
.
cm = coder.mapping.api.get('rtwdemo_configrpinterface');
Сконфигурируйте настройки по умолчанию для параметров модели путем вызова функции setDataDefault
. Для аргументов задайте следующие значения:
Объект, возвращенный coder.mapping.api.get
ModelParameters
для категории по умолчанию
Имя свойства StorageClass
со значением свойства ExportedGlobal
setDataDefault(cm,'ModelParameters','StorageClass','ExportedGlobal');
Проверьте свои строения по умолчанию для параметров модели. Выдавать звонки на getDataDefault
который задает объект, возвращенный coder.mapping.api.get
, категория ModelParameters
, и StorageClass
.
getDataDefault(cm,'ModelParameters','StorageClass') ans = 'ExportedGlobal'
Примените строение по умолчанию для параметров модели к параметрам 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_configrpinterface.c
.
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 (Только отдельные отображения) |
Сгенерируйте глобальное определение переменной и объявление. | ExportedGlobal |
Сгенерируйте код, который читается и записывается в глобальную переменную или глобальный указатель переменной, заданный вашим внешним кодом. | ImportedExtern, ImportedExternPointer |
Список доступных классов памяти может включать другие специфичные для проекта классы памяти, определенные в словаре Embedded Coder Dictionary. Если у вас есть особые требования, не удовлетворяющие перечисленным классам памяти, и вы имеете программное обеспечение Embedded Coder, можно задать класс памяти. Смотрите «Определение классов памяти», «Разделы памяти» и «Шаблоны функций» для программной архитектуры (Embedded Coder).
Для отдельного параметра модели используйте свойство Identifier класса памяти, чтобы сконфигурировать имя для переменной, представляющей параметр в сгенерированном коде.
Редактор отображений кода | coder.mapping.api.CodeMapping