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

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

Тип параметраОписание
Аргумент параметра моделиПараметры блоков в рабочем пространстве модели, которое вы конфигурируете в качестве аргумента модели. Каждому экземпляру модели, которая включает аргумент параметра модели, можно было установить аргумент на уникальное значение.
Параметр моделиПараметр задан в модели, такой в качестве параметра в рабочем пространстве модели.
Внешний параметрПараметр, заданный как объект в базовом рабочем пространстве или в словаре данных.
ПостоянныйПостоянный параметр.

Чтобы сконфигурировать параметр для генерации кода, необходимо сопоставить параметр с объектом данных. Например, прежде, чем сконфигурировать переменную MATLAB для генерации кода, в Model Explorer, преобразуют переменную в объект параметра.

Когда вы открываете модель в приложении Embedded Coder, параметры модели, аргументы параметра модели и константы, которые сопоставлены с объектами данных, появляются в редакторе Отображений Кода. В редакторе можно сконфигурировать параметры для генерации кода. Если модель использует внешние параметры, можно добавить их в редактор Отображений Кода путем нажатия на Refresh соединитесь справа от названия параметра. Та ссылка инициирует схему обновления и в представлении редактора, добавляют внешние параметры, которые используются моделью.

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

  • Сделайте данные доступными для взаимодействия, в то время как сгенерированный код выполняется.

  • Минимизируйте объем данных, который хранится в памяти.

  • Управляйте, куда генератор кода помещает данные о параметре в память.

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

  • Улучшите удобочитаемость и трассируемость сгенерированного кода.

Чтобы управлять, являются ли параметры в модели настраиваемыми, можно получить доступ к параметру конфигурации модели Default parameter behavior при помощи 'Auto' will be tunable/inline ссылка на редактор Отображений Кода вкладка Data Defaults. Например, можно использовать ту ссылку, чтобы сделать параметры настраиваемыми в этих случаях:

  • Совершенствуйте установки параметров во время быстрого прототипирования

  • Калибруйте параметры

  • Оптимизируйте параметры для производственного кода

Для генерации кода примеры показывают, как сконфигурировать параметры модели и аргументы параметра модели для модели rtwdemo_configinterface. Можно сконфигурировать отображения кода при помощи Code Mappings Editor или API отображений кода (Code Mappings Editor).

Выберите Customization Options for Parameters

По умолчанию параметры в модели появляются в сгенерированном коде как поля названных структур глобальных данных:

  • modelP для параметров модели

  • model_InstP для аргументов параметра модели

  • model_ConstP для постоянных параметров

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

  • Настроить ли настройку по умолчанию

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

  • Как объявить и обработать данные о параметре модели в сгенерированном коде

    • Как разделяют глобальные переменные

    • Считывать данные о параметре модели из глобальных переменных, заданных во внешнем коде

    • Как вызывает к функциям доступа. Требует 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. Сконфигурируйте аргументы параметра модели, чтобы использовать настройки по умолчанию, где генератор кода выделяет область памяти, представленной как исключительно именованное поле в экспортируемой структуре для каждого экземпляра аргумента.

  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. В диалоговом окне Create New Data, набор Value к Simulink.Parameter(1.0) и нажмите Create.

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

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

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

  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;
      }
    

Выберите Storage Class и Storage Class Properties for Model Parameters

В зависимости от ваших требований генерации кода примите решение из этих классов памяти сконфигурировать генерацию кода для параметров модели. Для констант, только Default применяется. Для аргументов параметра модели, только Auto, Default, и Model default применяться.

ТребованияКласс памяти
Включите оптимизацию, потенциально генерируя более эффективный код.Автоматический (Только отдельные отображения)
Для элементов данных, которые не могут быть оптимизированы, представляйте данные как поле стандартной структуры данных.Значение по умолчанию (Значение по умолчанию, сопоставляющее только)
Препятствуйте тому, чтобы оптимизация устранила устройство хранения данных для элемента данных, и используйте отображение значения по умолчанию для категории элемента данных.Значение по умолчанию модели (Только отдельные отображения), Dictionary Default (Только отдельные отображения)
Сгенерируйте структуру, которая хранит булевы данные в именованных битовых полях.Битовое поле (Индивидуум, сопоставляющий только)
Поддержите условные выражения препроцессора, заданные при помощи флага компилятора или опции.CompilerFlag
Сгенерируйте определение глобальной переменной и объявление, которое имеет const, volatile, или const и volatile введите спецификаторы.Const, энергозависимый, и ConstVolatile
Сгенерируйте макрос (#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

Смотрите также

|

Похожие темы