exponenta event banner

Конфигурирование параметров для генерации кода C

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

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

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

При открытии модели в приложении Embedded Coder параметры модели, аргументы параметров модели и константы, связанные с объектами данных, отображаются в редакторе Сопоставления кодов. В редакторе можно настроить параметры для генерации кода. Если модель использует внешние параметры, их можно добавить в редактор сопоставлений кодов, щелкнув значок Refresh ссылка справа от имени параметра. Эта связь инициирует схему обновления и в режиме редактора добавляет внешние параметры, используемые моделью.

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

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

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

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

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

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

Чтобы управлять возможностью настройки параметров в модели, можно получить доступ к параметру конфигурации модели Поведение параметра по умолчанию с помощью 'Auto' will be tunable/inline ссылка на вкладке «Значения по умолчанию» редактора сопоставлений кодов. Например, эту ссылку можно использовать для настройки параметров в следующих случаях:

  • Уточнение параметров во время быстрого прототипирования

  • Калибровка параметров

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

Для создания кода в примерах показано, как настроить параметры модели и аргументы параметров модели для модели. rtwdemo_configinterface. Можно настроить сопоставления кода с помощью редактора сопоставлений кода или интерфейса программирования сопоставлений кода (coder.mapping.api.CodeMapping).

Выбор параметров адаптации для параметров

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

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

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

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

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

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

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

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

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

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

    • Как вызовы функций доступа. Требуется встроенный кодер ®

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

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

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

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

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

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

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

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

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

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

Для этого примера настройте параметры модели и аргументы параметров модели в rtwdemo_configinterface в соответствии с этими требованиями к созданию кода.

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

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

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

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

  4. В редакторе Сопоставления кодов выберите Аргументы параметров модели. Оставьте для класса хранения значение Default. Генератор кода выделяет отдельную область памяти для каждого экземпляра аргумента.

  5. В редакторе сопоставлений кодов в разделе «Параметры» выберите категорию «Параметры модели». Текст ссылки 'Auto' will be inlined указывает, что генератор кода по умолчанию настроен на встроенные параметры модели. Для этого примера необходимо, чтобы параметры модели были настраиваемыми. Щелкнуть 'Auto' will be inlined.

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

  7. В окне Сопоставления кода (Code Mappings), в котором по-прежнему выбрана категория Параметры модели (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. В редакторе сопоставлений кодов перейдите на вкладку «Параметры». Разверните «Аргументы параметра модели». По умолчанию класс хранения для каждого параметра модели имеет значение Auto, что означает, что генератор кода может исключить или изменить представление соответствующего кода в целях оптимизации. Если оптимизация невозможна, генератор кода применяет конфигурацию модели по умолчанию. В этом примере оставьте для класса хранения значение Auto.

  3. Разверните узел «Параметры модели». По умолчанию класс хранения для каждого параметра имеет значение Auto. Использовать конфигурацию модели по умолчанию, определяющую класс хранения ConstVolatile.

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

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

  4. В редакторе сопоставлений кодов в разделе «Параметры модели» выберите параметры 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. В инспекторе свойств разверните узел «Код». Задайте для свойства класса хранения 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. См. раздел Упорядочение данных по структурам в сгенерированном коде.

Создание примерной модели

Создайте пример модели с тремя блоками констант и тремя блоками аутпорта. Назовите модель ex_struct_param.

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

  1. Откройте Редактор данных модели (Model Data Editor). На вкладке Моделирование (Modeling) щелкните Редактор данных модели (Model Data Editor).

  2. В Редакторе данных модели (Model Data Editor) выберите вкладку Параметры (Parameters).

  3. В модели выберите верхний блок «Константа».

  4. В редакторе данных модели используйте столбец Значение (Value), чтобы задать значение константы равным p1. Рядом с p1нажмите кнопку действия и выберите Создать.

  5. В диалоговом окне «Создание новых данных» задайте для параметра «Значение» значение Simulink.Parameter(1.0) и нажмите кнопку «Создать».

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

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

    Если не требуется настраивать другие параметры, можно перейти на закладку Создание кода. Затем нажмите кнопку Настроить в приложении Coder, чтобы открыть приложение Embedded Coder и редактор сопоставлений кода.

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

Настройка постоянных параметров для создания кода

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

  2. На вкладке Код C выберите Интерфейс кода > Сопоставления кодов отдельных элементов.

  3. В редакторе сопоставлений кодов перейдите на вкладку «Параметры».

  4. Разверните узел «Параметры модели».

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

  6. Выбор параметра p1. В инспекторе свойств в группе «Код» задайте свойству StructName значение my_struct. Для параметров p2 и p3, задать StructNameto 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. Задать для параметра конфигурации модели Поведение параметра по умолчанию значение 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 (Только отдельные сопоставления)
Создание структуры, хранящей логические данные в именованных битовых полях.Bitfield (только индивидуальное сопоставление)
Поддержка условий препроцессора, определенных с помощью флага или параметра компилятора.CompilerFlag
Создание определения и объявления глобальной переменной с const, volatile, или const и volatile квалификаторы типа.Const, Volatile и ConstVolatile
Создать макрос (#define директива) или код, использующий макрос, определенный в файле заголовка во внешнем коде.Определите, ImportedDefine
Создание определения и объявления глобальной переменной.ExportedGlobal
Создание определения и объявления глобальной переменной для указанного файла.ExportToFile
Создание определения и объявления глобальной переменной с static квалификатор типа.FileScope (только сопоставления локального и общего локального хранилища данных)
Создайте код, который взаимодействует с данными, вызвав пользовательские функции доступа.GetSet
Создание кода, считывающего и записывающего в глобальную переменную или указатель глобальной переменной, определенный внешним кодом.ImportedExtern, ImportedExternPointer
Создание кода, который считывает и записывает в глобальную переменную, определенную внешним заголовочным файлом.ImportFromFile
Создайте глобальную структуру с именем, которое можно указать.Структура (только отдельные сопоставления)

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

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

СобственностьОписаниеКлассы хранения
DefinitionFileФайл определения источника, содержащий определения глобальных данных, считываемый параметром и внешним кодомExportToFile и Volatile
GetFunctionПараметр появляется в сгенерированном коде как вызов указанного get функцияGetSet
HeaderFileИсходный файл заголовка, содержащий объявления для глобальных данных, считываемый параметром и внешним кодомExportToFile, GetSet, ImportFromFile, и Volatile
Memory Section(только конфигурация параметров по умолчанию)Раздел памяти, содержащий данные, считываемые параметромDefault
OwnerГенератор кода помещает определение параметров в код, созданный для одной из нескольких моделей, в иерархию модели, в которой используются общие определения. Необходимо выбрать параметр конфигурации модели Использовать владельца из объекта данных для размещения определения данных. См. раздел Управление размещением глобальных определений и деклараций данных в созданных файлах.ExportToFile и Volatile
PreserveDimensionsГенератор кода сохраняет размеры данных параметров, которые представлены в сформированном коде в виде многомерного массива. Необходимо установить параметр конфигурации модели Array layout равным Row-major. См. раздел Сохранение измерений многомерных массивов в сгенерированном коде.ExportToFile, FileScope, ImportFromFile, Localizable и Volatile
SetFunctionПараметр появляется в сгенерированном коде как вызов указанного set функция.GetSet
StructNameИмя структуры в сгенерированном коде параметра.BitField и Struct

См. также

|

Связанные темы