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

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

Тип параметраОписание
Параметр моделиПараметр, заданный в модели, такой как параметр в рабочем пространстве модели.
Внешний параметрПараметр, заданный как объект в базовом рабочем пространстве или в словаре данных.

Чтобы сконфигурировать параметр для генерации кода, необходимо связать параметр с объектом данных. Например, перед конфигурированием переменного 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®

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    getDataDefault(cm,'ModelParameters','StorageClass')
    
    ans =
    
        'ExportedGlobal'
    
  6. Примените строение по умолчанию для параметров модели к параметрам 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');
    
  7. Проверьте изменения параметров в строении 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'
  8. Сконфигурируйте идентификаторы кода для параметров модели. Для каждого параметра вызовите функцию 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');
    
  9. Проверьте свои изменения строения параметров модели при помощи вызовов для функционирования getModelParameter.

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

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

См. также

|

Похожие темы