Типы данных параметров в сгенерированном коде

Тип данных параметров блоков (такого как параметр Gain блока Gain), числовой MATLAB® переменная, или Simulink.Parameter объект определяет тип данных, которые используют соответствующие сущности в сгенерированном коде (для примера, глобальная переменная или аргумент функции). Чтобы сгенерировать более эффективный код, можно сопоставить типы данных параметров с типами данных сигналов или хранить параметры в меньших типах данных.

Для получения основной информации об установке типов данных параметров блоков в модели, смотрите Control Block Parameter Data Types.

Значимость типов данных параметров

Тип данных, который использует параметры блоков, переменный MATLAB или объект параметра, определяет тип данных, который используется сгенерированным кодом для хранения значения параметров в памяти. Для примера:

  • Если вы задаете параметр конфигурации <reservedrangesplaceholder1> модели (см. Поведение параметра по умолчанию) Tunable, параметр Gain блока Gain появляется в сгенерированном коде как поле глобальной структуры, которая хранит данные параметра. Если вы применяете тип данных single для параметров блоков в модели в поле структуры в коде используется соответствующий тип данных, real32_T.

  • Если вы применяете класс памяти ExportedGlobal в Simulink.Parameter объект появляется в сгенерированном коде как отдельная глобальная переменная. Если вы задаете DataType свойство объекта, которое должно быть int8глобальная переменная в коде использует соответствующий тип данных, int8_T.

  • Если вы конфигурируете Simulink.Parameter объект в рабочем пространстве модели как аргумент модели, объект появляется в сгенерированном коде как формальный параметр (аргумент) функции точки входа модели, такой как step функция. The DataType свойство объекта определяет тип данных формального параметра.

Кроме определения типа данных, которые использует сгенерированный код для хранения значений параметров в памяти, тип данных параметра, переменной или объекта может также:

  • Заставить блок привести значение параметра до генерации кода. Приведение может привести к переполнению, недействию или квантованию.

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

Typecasts из-за несоответствий типа данных параметра

Когда типы данных параметров блоков, переменных рабочей области и сигналов различаются, блоки могут использовать typecasts, чтобы согласовать несоответствия типов данных. Эти typecasts могут вызвать сгенерированный алгоритм кода, включая модель step функция, для включения явных приведений для согласования несоответствий в типах данных запоминающего устройства и битовых сдвигов C для согласования несоответствий при масштабировании с фиксированной точкой.

Несоответствия типа данных параметра могут возникнуть, когда:

  • Тип данных, который вы задаете для переменного MATLAB или объекта параметра (Simulink.Parameter) отличается от типа данных параметров блоков. В параметры блоков вводится значение переменной или объекта.

  • Тип данных, который вы задаете для начального значения, отличается от типа данных инициализированного сигнала или состояния.

  • Тип данных, который вы задаете для параметров блоков, отличается от типа данных сигнала или сигналов, над которыми работает параметр. Некоторые блоки вводят параметр для выполнения операции. Для примера блок Gain выполняет эту typecast.

Если вы конфигурируете переменную или объект, чтобы использовать смещение или дробный наклон с фиксированной точкой, параметры блоков не могут выполнить typecast. В этом случае необходимо сопоставить тип данных переменной или объекта параметра с типом данных параметров блоков. Используйте один из следующих методов:

  • Используйте контекстно-зависимую типизацию данных для переменной или объекта параметра. Для переменного MATLAB используйте double число, чтобы задать значение переменной. Для объекта параметра установите DataType свойство к auto.

  • Использование Simulink.AliasType или Simulink.NumericType объект, чтобы задать тип данных параметров блоков и тип данных объекта параметра.

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

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

    Используйте этот метод, чтобы уменьшить зависимость модели от унаследованных и контекстно-зависимых типов данных и от внешних переменных и объектов.

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

Для получения информации о соответствии типов данных параметров при использовании аргументов модели, смотрите Типы управляющих данных аргументов модели и Значения аргументов.

Обнаружение понижающей передачи и потери точности из-за несоответствий типов данных

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

Факторы для других шаблонов моделирования

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

Настраиваемые параметры и лучшее точное масштабирование с фиксированной точкой

Чтобы применить масштабирование с лучшей точностью и фиксированной точностью к настраиваемым параметрам блоков или объекту параметра, можно использовать Fixed-Point Tool для автоматического масштабирования всей системы или использовать Data Type Assistant для настройки отдельных параметров или объектов. См. «Вычисление оптимальной точности масштабирования фиксированной точки» для настраиваемых Параметров блоков.

Если настраиваемый параметр использует масштабирование с лучшей точностью и фиксированной точностью, Simulink® выбирает тип данных на основе минимальных и максимальных значений, которые вы задаете для параметра (см. «Задание минимальных и максимальных значений для параметров блоков»). Можно задать эти значения в диалоговом окне блока, которое использует параметр или в свойствах Simulink.Parameter объект.

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

Настраиваемый параметр может использовать масштабирование наилучшей точности, даже если вы не задаете его в типе данных параметра. Например, блок Gain может выбрать масштабирование с оптимальной точностью, если для Parameter data type в диалоговом окне блока задано значение Inherit: Inherit via internal rule. Эта настройка является настройкой по умолчанию для блока.

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

Когда вы используете структуру в качестве значения параметров блоков (для примера инициализировать сигнал шины), или когда вы организовываете несколько значений параметров блоков в одну структуру, можно создать Simulink.Bus объект для использования в качестве типа данных Simulink.Parameter объект. Затем можно управлять типами данных отдельных полей в структуре. Смотрите Типы данных и Характеристики Управляющего поля путем Создания Объекта параметра и Типы данных управления Полей Структуры Начальных Условий.

Управляйте типами данных объектов интерполяционной таблицы

Когда вы используете Simulink.LookupTable и Simulink.Breakpoint объекты для хранения данных таблицы и точек по оси Х для блока интерполяционной таблицы, для управления типами данных таблицы и данных точек по оси Х используют один из следующих методов:

  • Установите Value свойство встроенного Simulink.lookuptable.Table и Simulink.lookuptable.Breakpoint объекты при помощи нетипичных выражений, таких как [1 2 3], который возвращает double вектор. Если для Breakpoint specification задано значение Explicit valuesиспользуйте текстовое поле выражения MATLAB и табличный интерфейс в нижней части диалогового окна свойств. Чтобы управлять типом данных, установите DataType свойство к значению, отличному от auto.

    Используйте этот метод, чтобы отделить значение таблицы или данных точек по оси Х от типа данных, что может улучшить читаемость и понимание вашего проекта. Затем можно использовать Simulink.NumericType или Simulink.AliasType объект для:

    • Настройте имя типа данных в сгенерированном коде.

    • Сопоставьте тип данных таблицы или данных точек по оси Х с типом данных сигнала в модели.

  • Установите Value свойство внедренных объектов при помощи типизированных выражений, таких как single([1 2 3]). Чтобы использовать тип данных с фиксированной точкой, установите Value свойство со fi объект. Если для Breakpoint specification задано значение Explicit valuesиспользуйте текстовое поле выражения MATLAB и табличный интерфейс в нижней части диалогового окна свойств.

    Установите DataType свойство встраиваемых объектов к значению по умолчанию, auto. Таблица и данные точек по оси Х затем получают тип данных, который используется для установки Value свойство.

    Используйте этот метод для хранения информации о типе данных в Value свойство, которое может упростить способ взаимодействия со Simulink.LookupTable и Simulink.Breakpoint объекты. Вы можете покинуть DataType свойство в значение по умолчанию.

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

    myLUTObject.Table.Value(:) = [4 5 6];

    При изменении данных, хранящихся в Value свойство, если вы не используете типизированное выражение или подписанное назначение, вы теряете информацию о типе данных.

Когда блоки в подсистеме используют Simulink.LookupTable или Simulink.Breakpoint объекты, переопределение типа данных (см. «Управление Инструментирования с фиксированной точкой» и «Переопределение типа данных») нельзя задать только в подсистеме. Вместо этого установите переопределение типа данных на всей модели.

Типирование данных для выражений в объектах параметров

Можно использовать выражение, чтобы задать значение объекта параметра (такого как Simulink.Parameter). Выражение кодирует математические отношения между различными объектами. Когда вы используете этот метод, применяются различные правила набора данных. См. «Задать значение переменных при помощи математического выражения».

Похожие темы