exponenta event banner

Сохранение размеров многомерных массивов в сгенерированном коде

По умолчанию созданный код содержит одномерные массивы для данных многомерной модели. В диалоговом окне «Параметры конфигурации» установите для параметра компоновки «Массив» значение Row-major, можно сохранить размеры многомерных массивов в созданном коде. Сохранение размеров массива в созданном коде усиливает интеграцию с внешним кодом.

MATLAB ® и C организуют многомерные данные различными способами. Дополнительные сведения см. в разделе Сохранение размеров многомерных массивов.

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

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

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

  • Inports

  • Вспомогательные порты

  • Сигналы, состояния и внутренние данные

  • Общие локальные хранилища данных

  • Глобальные хранилища данных

  • Параметры модели

  • Внешние параметры

Затем при установке для класса Storage значения Auto или Model default для отдельных элементов данных модели по умолчанию генератор кода применяет конфигурацию, настроенную для соответствующих элементов данных модели на вкладке Значения по умолчанию (Data Defaults).

Пример рабочего процесса, применимого к предыдущим категориям элементов данных модели:

  1. Открытие модели rtwdemo_preservedimensions.

  2. В диалоговом окне «Параметры конфигурации» убедитесь, что для параметра Array layout установлено значение Row-major.

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

  4. На вкладке C Code откройте редактор Code Mappings. Выберите Интерфейс кода > Сопоставления кодов по умолчанию. Этот параметр связывает редактор «Сопоставления кодов» и панель «Инспектор свойств».

  5. На вкладке Значения по умолчанию выберите категорию Ввод. Указан класс хранилища ExportToFile. В Инспекторе свойств в разделе «Код» выберите свойство PreserureDimensions.

    Property Inspector attached to the Code Mappings editor. Shows the selected PreserveDimensions property check box

    Для программной настройки свойства PreserureDimensions используйте coder.mapping.defaults.set в окне команд MATLAB:

    coder.mapping.defaults.set('rtwdemo_preservedimensions', 'Inports',...
      'Storageclass', 'ExportToFile',...
      'PreserveDimensions', 'off')

    Можно создать новый класс хранения в Embedded Coder ®, а затем указать этот класс для сохранения размеров. Дополнительные сведения см. в разделе Сохранение размеров для новых классов хранения.

    Список поддерживаемых классов хранения см. в разделе Поддерживаемые классы хранения для сохранения измерений.

  6. Создание и просмотр кода. Созданный код сохраняет размеры корневых портов ввода.

    real_T rtPressure[2][3];
    real_T rtTargetVolume[2][3];
    real_T rtTemperature[2][3]; 

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

Конфигурации по умолчанию, заданные на вкладке Значения по умолчанию (Data Defaults), можно переопределить, настроив отдельные источники элементов данных модели на других вкладках, таких как Inports, Outports, Parameters, Data Stores и Signals/States. Ниже приведен пример рабочего процесса, применимого к категориям элементов данных модели.

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

  2. В редакторе сопоставлений кодов выберите вкладку «Сигналы/Состояния». Раздел «Сигналы» в настоящее время пуст. В данной модели может быть несколько сигналов. Некоторые из этих сигналов могут не иметь значения при конфигурировании генерации кода. Сигналы можно пометить как интересующие сигналы, релевантные для конфигурации генерации кода. При явном добавлении сигнала он добавляется в редактор сопоставлений кода.

    В редакторе сопоставлений кодов откройте вкладку «Сигналы/Состояния». Выберите в редакторе Simulink ® сигнал, который требуется добавить в редактор сопоставлений кода. Сделайте паузу на многоточии (...), которое появляется выше или ниже сигнальной линии, чтобы открыть панель действий. Нажмите кнопку Add selected signals to code mappings (Добавить выбранные сигналы в сопоставления кода). Сигнал заполняется в таблице Сигналы (Signals) в редакторе Сопоставления кодов (Code MappingsSignal of interest is selected in the model and the action bar is displayed. The cursor is on the Enable Code Configuration option.).

    В этом примере выберите сигнал, поступающий из подсистемы Volume Controller в команду outport Activor Command, и нажмите кнопку Add selected signals to code mappings.

  3. Согласно конфигурациям на закладке Data Defaults, классом хранения сигналов по умолчанию является Localizable. Конфигурация по умолчанию для сигналов также определяет сохранение размеров многомерных массивов.

    По умолчанию класс хранения индивидуально добавленного сигнала конфигурируется как Auto. Можно переопределить конфигурацию по умолчанию для отдельного сигнала, изменив спецификацию добавленного сигнала на вкладке Сигналы/состояния.

    Если необходимо применить параметры по умолчанию, установите для класса хранения значение Model default: Localizable. Если требуется ведение того же класса хранения, Localizable, но не сохранять размеры для выбранного сигнала, укажите класс хранения как Localizable и очистите свойство PreserureDimensions в инспекторе свойств.

    Примечание

    Если класс хранения указан как Model default, нельзя переопределить конфигурации по умолчанию, указанные на вкладке «Параметры по умолчанию». Чтобы переопределить спецификации по умолчанию для класса хранения по умолчанию, выберите этот класс хранения и измените конфигурации для отдельного элемента моделирования.

  4. В инспекторе свойств укажите имя сигнала в свойстве «Идентификатор», например VolumeController.

    Property Inspector pane attached to the Code Mappings editor. Shows the cleared Preserve array dimensions property check box with non-empty Identifier property.

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

    /* Definition for custom storage class: Localizable */
    static real_T LogSignal[11][9];        /* '<S2>/Log volume difference' */
    real_T VolumeController[6];            /* '<S3>/Gain' */
    static real_T rtIterationCount[2][3];  /* '<S2>/IterationCount' */
    static real_T rtIterationCount_g[2][3];/* '<S2>/PreviousVolumeErrorAverage' */
    static real_T rtVolumedifference[2][3];/* '<S1>/Volume difference' */

Поддерживаемые классы хранения данных для сохранения измерений

Аналитики можно сохранить в созданном коде для следующих классов хранения:

  • Const

  • Volatile

  • ConstVolatile

  • ExportToFile

  • ImportFromFile

  • FileScope

  • Localizable

Сохранение размеров для новых классов хранения

Чтобы сохранить размеры при проектировании собственного класса хранения, в словаре встроенного кодера в инспекторе свойств задайте для параметра «Тип хранилища» значение Unstructured и выберите свойство «Сохранить размеры массива». При выборе этого свойства сохраняются измерения для экземпляров класса хранения. Чтобы использовать класс хранения, в редакторе сопоставлений кодов настройте категории элементов модели, указав класс хранения для созданного нового класса хранения.

Чтобы сохранить размеры при проектировании собственного класса хранения в пользовательском конструкторе классов хранения, укажите тип как Unstructured и выберите свойство «Сохранить размеры массива». Параметры сохранения размеров массива:

  • No (по умолчанию) - сведение многомерного массива к одному измерению в сгенерированном коде.

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

  • Instance Specific - Если необходимо сохранить размеры массива для каждого экземпляра класса хранения, включите свойство Preserve array dimensions в объекте параметра. Для пакета Simulink этот параметр свойства имеет значение Instance Specific по умолчанию.

Ограничения

  • Генератор кода сглаживает многомерные массивы в шинах Simulink в сгенерированном коде.

  • Генератор кода не сохраняет размеры для параметров без объектов данных.

См. также

| |

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