Сконфигурируйте параметры для генерации кода C

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

Тип параметраОписание
Аргумент параметра моделиБлокируйте параметр в рабочем пространстве модели, который вы конфигурируете как аргумент модели. Каждому образцу модели, которая включает аргумент параметра модели, может быть задано уникальное значение аргумента.
Параметр моделиПараметр, заданный в модели, такой как параметр в рабочем пространстве модели.
Внешний параметрПараметр, заданный как объект в базовом рабочем пространстве или в словаре данных.
ПостоянныйПараметр 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®

    Для получения дополнительной информации об этих опциях смотрите Управляющие данные и Интерфейс функции в Сгенерированном коде.

Другие факторы для параметров модели включают в себя, следует ли:

Список требований к интерфейсам, относящихся к параметрам, имеющим соответствующие классы памяти и свойства класса памяти, см. в разделе Выбор классов памяти и свойств классов памяти для хранилищ данных.

Требования к параметрам, например, к rtwdemo_configinterface модели являются:

  • По умолчанию сохраните параметры модели в сгенерированном коде для настройки. Не оптимизируйте код путем встраивания параметров.

  • Представьте параметры модели как отдельные глобальные переменные, определенные и объявленные с const и volatile классификаторы типов.

  • Применить префикс mp_ к именам переменных, которые представляют параметры модели.

  • Включите постоянные параметры UPPER и LOWER иметь различные значения для каждого образца модели.

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

  • Аргументы параметра модели появляются как отдельные аргументы функции model в сгенерированном коде. Включите генератор кода, чтобы оптимизировать аргументы параметра модели, которые не используются блоками в модели.

В данном примере сконфигурируйте параметры модели и аргументы параметра модели в rtwdemo_configinterface для соответствия этим требованиям генерации кода.

Настройте настройки генерации кода по умолчанию для параметров

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

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

В этом примере показано, как использовать Code Mappings editor для конфигурации настроек по умолчанию для параметров модели и аргументов параметра модели для rtwdemo_configinterface модели. Сконфигурируйте параметры модели так, чтобы они были настраиваемыми и были определены и объявлены в сгенерированном коде как отдельные глобальные переменные, которые имеют квалификаторы типов const и volatile. Сконфигурируйте аргументы параметра модели, чтобы использовать настройки по умолчанию, где генератор кода выделяет область памяти, представленную как уникально именованное поле в экспортированной структуре для каждого образца аргумента.

  1. Откройте rtwdemo_configinterface модели. Сохраните копию модели в месте с возможностью записи.

    Simulink model to use for learning how to configure model parameters for code generation.

  2. Откройте приложение Embedded Coder.

  3. На вкладке C Code выберите Code Interface > Default Code Mappings.

  4. В редакторе Отображения выберите Model parameter arguments. Оставьте класс памяти равным Default. Генератор кода выделяет отдельную область памяти для каждого образца аргумента.

  5. В редакторе Отображения в разделе Parameters выберите Model parameters категории. Ссылка на текстовое 'Auto' will be inlined указывает, что генератор кода сконфигурирован на встроенные параметры модели по умолчанию. Требование к этому примеру - параметры модели быть настраиваемыми. Нажмите 'Auto' will be inlined.

  6. В диалоговом окне Model Configuration Parameters установите параметр конфигурации модели Default parameter behavior равным Tunable. Сохраните изменения и закройте диалоговое окно. В редакторе Отображения текст ссылки изменяется на 'Auto' will be tunable.

  7. В Код Отображений, когда категория Model parameters все еще выбрана, установите класс склада равным ConstVolatile.

    Code Mappings editor with Data Defaults tab selected, Parameters tree node expanded, and storage class for Model parameters set to ConstVolatile.

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

Сконфигурируйте генерацию кода для отдельных параметров

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

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

  • Использует несколько параметров одной категории, которые имеют уникальные требования к источнику, именованию или размещению.

  • Использует несколько параметров той же категории.

  • Имеет строение по умолчанию для категории параметров, и вам нужно переопределить строение для некоторых определенных параметров.

В этом примере показано, как использовать редактор Отображения для применения настройки класса памяти по умолчанию для параметров модели к параметрам K1, Table1, и Table2 в rtwdemo_configinterface модели. Вы конфигурируете идентификаторы кода для этих параметров и для аргументов параметра модели LOWER и UPPER. Можно задать идентификаторы генерации кода, для примера для интегрирования, не изменяя проект модели.

  1. Если вы еще не сделали этого, выполните шаги в Настройте настройки генерации кода по умолчанию для параметров.

  2. В редакторе Отображения перейдите на вкладку Parameters. Разверните Model Parameter Arguments. По умолчанию класс памяти для каждого параметра модели устанавливается на Auto, что означает, что генератор кода может исключить или изменить представление соответствующего кода в целях оптимизации. Если оптимизация невозможна, генератор кода применяет строение модели по умолчанию. В данном примере оставьте класс памяти установленным на Auto.

  3. Разверните Model Parameters. По умолчанию класс памяти для каждого параметра устанавливается на Auto. Используйте строение модели по умолчанию, которая задает класс памяти ConstVolatile.

    • Чтобы избежать оптимизации и заставить генератор кода использовать строение по умолчанию, установите класс памяти равным Model default.

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

  4. В редакторе Отображения в разделе Model Parameters выберите параметры K1, Table1, и Table2. Установите класс памяти равным Model default: ConstVolatile.

    Code Mappings editor with Parameters tab selected, parameters K1, Table1, and Table2 selected, and storage class being set to Model default: ConstVolatile.

  5. Сконфигурируйте идентификаторы кода для параметров модели с именами, которые включают префикс mp_. В редакторе Отображения выберите параметр модели K1. В Property Inspector разверните узел Code. Установите свойство класса памяти Identifier равным mp_K1. Для параметров Table1 и Table2, установите Identifier равным mp_Table1 и mp_Table2.

    Code Mappings editor with Parameters tab selected, Model parameters tree node expanded, and storage class for parameters K1, Table1, and Table2 set to Model default: ConstVolatile. Property Inspector shows Identifier property for parameter Table2 set to mp_Table2.

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

  7. Сгенерируйте и просмотрите код. Для примера найдите определения данных для параметра модели 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.

Настройте постоянные параметры

  1. Откройте Model Data Editor. На вкладке Modeling нажмите Model Data Editor.

  2. В Model Data Editor выберите вкладку Parameters.

  3. В модели выберите верхний Constant блок.

  4. В Model Data Editor используйте столбец Value, чтобы задать постоянное значение p1. Рядом с p1, нажмите кнопку действия и выберите Create.

  5. В диалоговом окне «Создание новых данных» установите Value равным Simulink.Parameter(1.0) и нажмите Create.

    Simulink добавляет Simulink.Parameter объект с именем p1 в рабочее пространство модели.

  6. В диалоговом окне свойств для p1, нажмите OK.

    Если вам не пришлось настраивать другие параметры, можно щелкнуть вкладку Code Generation. Затем нажмите кнопку Configure in Coder App, которая открывает приложение Embedded Coder и редактор Code Mappings.

  7. Используйте Model Data Editor, чтобы задать другие значения констант с помощью объектов параметра с именем p2 (значение 2.0) и p3 (значение 3.0).

Сконфигурируйте постоянные параметры для генерации кода

  1. Откройте приложение Embedded Coder.

  2. На вкладке C Code выберите Code Interface > Individual Element Code Mappings.

  3. В редакторе Отображения перейдите на вкладку Parameters.

  4. Разверните Model Parameters.

  5. Установите класс памяти для параметров p1, p2, и p3 на Struct.

  6. Выберите p1 параметра. В Property Inspector под Code установите значение свойства StructName my_struct. Для параметров p2 и p3, установите StructName равным my_struct.

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

Сгенерируйте и смотрите код

Сгенерируйте и проверьте код.

Файл 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. Сконфигурируйте идентификаторы кода для этих параметров.

  1. Откройте пример модели.

    open_system('rtwdemo_configinterface');
    
  2. Установите Default parameter behavior параметра конфигурации модели в Tunable.

    model='rtwdemo_configinterface';
    
    set_param(model,'DefaultParameterBehavior','Tunable');
    
  3. Создайте объект cm вызовом функции coder.mapping.api.get. Объект хранит строение генерации кода для элементов данных и функций в модели rtwdemo_configdefaults.

    cm = coder.mapping.api.get('rtwdemo_configinterface');
  4. Сконфигурируйте настройки по умолчанию для параметров модели путем вызова функции setDataDefault. Для аргументов задайте следующие значения:

    • Объект, возвращенный coder.mapping.api.get

    • ModelParameters для категории по умолчанию

    • Имя свойства StorageClass со значением свойства ConstVolatile

    setDataDefault(cm,'ModelParameters','StorageClass','ConstVolatile');
  5. Сконфигурируйте настройки по умолчанию для аргументов параметра модели. В вызове на setDataDefault, задайте следующие значения для аргументов:

    • Объект, возвращенный coder.mapping.api.get.

    • ModelParameterArguments для категории по умолчанию.

    • Имя свойства StorageClass со значением свойства Default.

    setDataDefault(cm,'ModelParameterArguments','StorageClass','Default');
  6. Проверьте строение по умолчанию для параметров модели и аргументов параметра модели. Выдавать звонки на getDataDefault который задает объект, возвращенный coder.mapping.api.get, категория ModelParameters или ModelParameterArguments, и StorageClass.

    getDataDefault(cm, 'ModelParameters', 'StorageClass')
    
    ans =
    
        'ConstVolatile'
    
    getDataDefault(cm, 'ModelParameterArguments', 'StorageClass')
    
    ans =
    
        'Default'
    
  7. Примените строение по умолчанию для параметров модели к параметрам 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');
    
  8. Проверьте изменения параметров в строении 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'
  9. Сконфигурируйте идентификаторы кода для параметров модели. Для каждого параметра вызовите функцию setModelParameter. Задайте объект, возвращенный coder.mapping.api.get, имя параметра, имя свойства Identifier, и одно из этих значений свойств.

    Параметр моделиИдентификатор кода
    K1mp_K1
    Table1mp_Table1
    Table2mp_Table2
    setModelParameter(cm,'K1','Identifier','mp_K1');
    setModelParameter(cm,'Table1','Identifier','mp_Table1');
    setModelParameter(cm,'Table2','Identifier','mp_Table2');
    
  10. Проверьте свои изменения строения параметров модели при помощи вызовов для функционирования getModelParameter.

    getModelParameter(cm,'K1','Identifier')
    
    ans =
    
        'mp_K1'
    
    getModelParameter(cm,'Table1','Identifier')
    
    ans =
    
        'mp_Table1'
    
    getModelParameter(cm, 'Table2', 'Identifier')
    
    ans =
    
        'mp_Table2'
    
  11. Сохраните модель.

  12. Сгенерируйте и просмотрите код. Для примера найдите определения данных для параметра модели 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

См. также

|

Похожие темы