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

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

Для основной информации об установке типов данных параметров блоков в модели смотрите Типы данных параметров Блока управления (Simulink).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Обнаружьте Удрученный и Потеря Точности из-за Неверных типов данных

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

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

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

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

Чтобы применить фиксированную точку лучшей точности, масштабирующуюся к настраиваемым параметрам блоков или объекту параметра, можно использовать Fixed-Point Tool, чтобы автомасштабировать целую систему или использовать Ассистент Типа данных, чтобы сконфигурировать отдельные параметры или объекты. Смотрите Вычисляют Фиксированную точку Лучшей Точности, Масштабирующуюся для Настраиваемых Параметров блоков (Simulink).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Похожие темы