Simulink. Класс LookupTable

Пакет: Simulink
Суперклассы:

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

Описание

Объект класса Simulink.LookupTable хранит данные точки останова и интерполяционная таблица. Можно использовать это данные в блоке интерполяционной таблицы, такие как n-D блок Lookup Table. С объектом можно задать типы данных и настройки генерации кода для таблицы и наборов точки останова.

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

Чтобы совместно использовать набор точки останова между несколькими интерполяционными таблицами, например для генерации кода COM_AXIS, используют объект Simulink.Breakpoint в одном или нескольких блоках Перед поиском. Используйте объекты Simulink.LookupTable в Интерполяции Используя блоки Перед поиском. Затем сконфигурируйте объекты интерполяционной таблицы относиться к объекту точки останова. Для получения дополнительной информации смотрите Пакет Разделяемые Данные Точки останова и Таблицы для Интерполяционных таблиц.

Конструкция

LUTObj = Simulink.LookupTable возвращает объект Simulink.LookupTable LUTObj со значениями свойств по умолчанию.

Чтобы создать объект Simulink.LookupTable при помощи Образцового Проводника, используйте кнопку на панели инструментов. Именем по умолчанию для объекта является Object.

Диалоговое окно свойства

Количество табличных размерностей

Количество размерностей интерполяционной таблицы. Задайте целочисленное значение до 30 (включительно). Например, чтобы представлять трехмерную интерполяционную таблицу, задайте целочисленный 3.

Таблица

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

Значение

Табличные данные. Задайте числовой векторный или многомерный массив по крайней мере с двумя элементами.

Можно также использовать выражение с математическими операторами, такими как sin(1:0.5:30), пока выражение возвращает числовой векторный или многомерный массив. Когда вы нажимаете Apply или OK, объект выполняет выражение и использует результат установить значение этого свойства.

Когда вы установите Тип данных на auto, чтобы установить Значение, используйте введенное выражение, такое как single([1 2 3]) или используйте конструктора fi, чтобы встроить объект fi.

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

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

Тип данных

Тип данных табличных данных. Настройкой по умолчанию является auto, что означает, что табличные данные получают тип данных от значения, которое вы задаете в Значении. При использовании нетипизированное выражение, такое как [1 2 3], чтобы установить Значение, табличные данные используют тип данных double. Если вы задаете введенное выражение, такое как single([1 2 3]) или объект fi, табличные данные используют тип данных, заданный выражением или объектом. Перечислимые типы данных также поддержаны.

Можно явным образом задать целочисленный тип данных, тип данных с плавающей точкой, тип данных фиксированной точки или выражение типа данных, такое как имя объекта Simulink.AliasType.

Для получения дополнительной информации о типах данных в Simulink®, смотрите Типы данных, Поддержанные Simulink. Чтобы решить, как управлять типами данных таблицы и данных точки останова в Simulink.LookupTable и объектах Simulink.Breakpoint, смотрите Типы данных Управления Объектов Интерполяционной таблицы (Simulink Coder).

Размерности

Длины размерности данных интерполяционной таблицы.

Чтобы использовать символьные размерности, задайте вектор символа. Смотрите Варианты Размерности Реализации для Размеров Массивов в Сгенерированном коде (Embedded Coder).

Min

Минимальное значение элементов в табличных данных. Значение по умолчанию пусто, []. Можно задать числовое, действительное значение.

Для получения дополнительной информации о том, как Симулинк использует это свойство, смотрите, Задают Минимальные и Максимальные значения для Блочных Параметров.

Max

Максимальное значение элементов в табличных данных. Значение по умолчанию пусто, []. Можно задать числовое, действительное значение.

Для получения дополнительной информации о том, как Симулинк использует это свойство, смотрите, Задают Минимальные и Максимальные значения для Блочных Параметров.

Модуль

Физические единицы измерения элементов в интерполяционной таблице. Можно задать текст, такой как degC. Смотрите Модульную Спецификацию в Моделях Simulink.

Имя поля

Имя поля структуры в сгенерированном коде. Это поле хранит табличные данные, если вы конфигурируете объект Simulink.LookupTable появиться в сгенерированном коде как структура. Значением по умолчанию является Table. Чтобы изменить имя поля, задайте текст.

Описание

Описание интерполяционной таблицы. Можно задать текст, такой как This lookup table describes the action of a pump.

Точки останова

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

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

Спецификация

Источник для получения информации наборов точки останова, заданных как Explicit values (значение по умолчанию), Reference или Even spacing.

  • Чтобы сохранить всю таблицу и данные набора точки останова в объекте Simulink.LookupTable, установите Спецификацию на Explicit values.

    Объект Simulink.LookupTable появляется в сгенерированном коде как единственная переменная структуры.

  • Чтобы хранить табличные данные в объекте Simulink.LookupTable и хранить данные набора точки останова в объектах Simulink.Breakpoint, установите Спецификацию на Reference.

    Объект Simulink.LookupTable появляется в сгенерированном коде как переменная отдельного массива, которая содержит табличные данные. Каждый объект Simulink.Breakpoint появляется как отдельный массив или переменная структуры, которая содержит данные набора точки останова.

  • Чтобы хранить табличные данные и равномерно распределенные точки останова в объекте Simulink.LookupTable, установите Спецификацию на Even spacing. Используйте Первую точку и параметры Интервала, чтобы сгенерировать набор равномерно расположенных с интервалами точек останова.

Примечание

Когда Спецификация установлена в Explicit values или Even spacing, можно изменить порядок настраиваемого размера, точки останова и записей таблицы в интерполяционной таблице сгенерированная объектом структура.

Поддержите настраиваемый размер

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

Это свойство появляется, только если вы устанавливаете Спецификацию на Explicit values или Even spacing.

Примечание

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

Значение

Данные для точки останова установлены. Задайте числовой вектор по крайней мере с двумя элементами.

Можно также использовать выражение с математическими операторами, такими как sin(1:0.5:30), пока выражение возвращает числовой вектор. Когда вы нажимаете Apply или OK, объект выполняет выражение и использует результат установить значение этого свойства.

Когда вы установите Тип данных на auto, чтобы установить Значение, используйте введенное выражение, такое как single([1 2 3]) или используйте конструктора fi, чтобы встроить объект fi.

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

Тип данных

Тип данных точки останова установлен. Настройкой по умолчанию является auto, что означает, что набор точки останова получает тип данных от значения, которое вы задаете в Значении. При использовании нетипизированное выражение, такое как [1 2 3], чтобы установить Значение, данные точки останова используют тип данных double. Если вы задаете введенное выражение, такое как single([1 2 3]) или объект fi, данные точки останова используют тип данных, заданный выражением или объектом.

Можно явным образом задать целочисленный тип данных, тип данных с плавающей точкой, тип данных фиксированной точки или выражение типа данных, такое как имя объекта Simulink.AliasType.

Для получения дополнительной информации о типах данных в Simulink, смотрите Типы данных, Поддержанные Simulink. Чтобы решить, как управлять типами данных таблицы и данных точки останова в Simulink.LookupTable и объектах Simulink.Breakpoint, смотрите Типы данных Управления Объектов Интерполяционной таблицы (Simulink Coder).

Размерности

Длины размерности точки останова установлены.

Чтобы использовать символьные размерности, задайте вектор символа. Смотрите Варианты Размерности Реализации для Размеров Массивов в Сгенерированном коде (Embedded Coder).

Min

Минимальное значение элементов в точке останова установлено. Значение по умолчанию пусто, []. Можно задать числовое, действительное значение.

Для получения дополнительной информации о том, как Симулинк использует это свойство, смотрите, Задают Минимальные и Максимальные значения для Блочных Параметров.

Max

Максимальное значение элементов в точке останова установлено. Значение по умолчанию пусто, []. Можно задать числовое, действительное значение.

Для получения дополнительной информации о том, как Симулинк использует это свойство, смотрите, Задают Минимальные и Максимальные значения для Блочных Параметров.

Модуль

Физическая единица измерения элементов в точке останова установлена. Можно задать текст, такой как degF. Смотрите Модульную Спецификацию в Моделях Simulink.

Имя поля

Имя поля структуры в сгенерированном коде. Это поле хранит данные набора точки останова. Значением по умолчанию является BP1 для первого набора точки останова и BP2 для второго набора. Чтобы изменить имя поля, задайте текст.

Настраиваемое имя размера

Имя поля структуры в сгенерированном коде. Это поле хранит длину (число элементов) набора точки останова, который использование алгоритма сгенерированного кода определить размер таблицы. Чтобы настроить эффективный размер таблицы во время выполнения кода, измените значение этого поля структуры в памяти. Именем по умолчанию является N1 для первого набора точки останова и N2 для второго набора. Чтобы изменить имя поля, задайте текст.

Этот столбец появляется, только если вы выбираете Support настраиваемый размер.

Описание

Описание точки останова установлено. Можно задать текст, такой как This breakpoint set represents the pressure input.

Первая точка

Сначала укажите в равномерно расположенных с интервалами данных точки останова. Этот параметр доступен, когда Спецификация установлена в Even spacing.

Разрядка

Разрядка между точками в равномерно расположенных с интервалами данных точки останова. Этот параметр доступен, когда Спецификация установлена в Even spacing.

Имя

Имя объекта Simulink.Breakpoint, который хранит информацию для этого набора точки останова.

Этот столбец появляется, только если вы устанавливаете Спецификацию на Reference.

Сначала укажите имя

Имя объекта Simulink.Breakpoint, который хранит информацию для первой точки. Этот параметр доступен, когда Спецификация установлена в Even spacing.

Разрядка имени

Имя объекта Simulink.Breakpoint, который хранит информацию для интервала. Этот параметр доступен, когда Спецификация установлена в Even spacing.

Определение данных: Класс памяти

Класс памяти переменной структуры (если вы устанавливаете Спецификацию на Explicit values или Even spacing), или переменная типа массив (Reference) в сгенерированном коде. Переменная хранит табличные данные и, если переменная является структурой, данными набора точки останова. Настройкой по умолчанию является Auto.

Для получения дополнительной информации о классах памяти, смотрите, Применяют Классы памяти к Отдельному Сигналу, состоянию и Элементам данных Параметра (Simulink Coder).

Если вы Встроили Coder®, можно выбрать пользовательский класс памяти. Для получения информации о пользовательских классах памяти смотрите, Применяют Пользовательские Классы памяти к Отдельному Сигналу, состоянию и Элементам данных Параметра (Embedded Coder).

Определение данных: Псевдоним

Альтернативное имя для переменной структуры (если вы устанавливаете Спецификацию на Explicit values или Even spacing), или переменная типа массив (Reference) в сгенерированном коде. Значение по умолчанию пусто, в этом случае сгенерированный код использует имя объекта Simulink.LookupTable как имя структуры или переменной типа массив. Чтобы установить псевдоним, задайте текст.

Чтобы включить это свойство, установите Определение данных: Класс памяти к установке кроме Auto.

Определение данных: Выравнивание

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

Задайте положительное целое число, которое является степенью 2, не превышая 128. Для получения дополнительной информации об использовании выравнивания данных для замены кода смотрите Выравнивание Данных для Замены Кода (Embedded Coder).

Определение Типа struct: Имя

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

Это свойство появляется, только если вы устанавливаете Спецификацию на Explicit values или Even spacing.

Определение Типа struct: осциллограф Данных

Осциллограф структуры вводит определение (импортированный из вашего пользовательского кода или экспортируемый от сгенерированного кода). Значением по умолчанию является Auto. Когда вы выбираете Auto:

  • Если вы не задаете значение в определении Типа Struct: поле Заголовочного файла, экспорт сгенерированного кода определение типа структуры файлу model_types.h h. model является именем модели.

  • Если вы задаете значение в определении Типа Struct: поле Заголовочного файла, такое как myHdr.h, сгенерированный код импортирует определение типа структуры из myHdr.h h.

Явным образом задавать осциллограф данных:

  • Чтобы импортировать определение типа структуры в сгенерированный код из вашего пользовательского кода, выберите Imported.

  • К экспорту определение типа структуры от сгенерированного кода выберите Exported.

Если вы не задаете значение в определении Типа Struct: поле Заголовочного файла, импорт сгенерированного кода или экспорт определение типа от или до StructName.h h. StructName является именем, которое вы задаете при помощи определения свойства Struct Type: Имя.

Это свойство появляется, только если вы устанавливаете Спецификацию на Explicit values или Even spacing.

Определение Типа struct: Заголовочный файл

Имя заголовочного файла, который содержит определение типа структуры. Можно импортировать определение из заголовочного файла, который вы создаете, или экспорт определение в сгенерированный заголовочный файл. Чтобы управлять осциллографом типа структуры, настройте установку для определения Типа Struct: свойство scope Данных.

Это свойство появляется, только если вы устанавливаете Спецификацию на Explicit values или Even spacing.

Свойства

развернуть все

Установите точки останова информацию о наборе, заданную, когда вектор Simulink.lookuptable.Breakpoint возражает, массив ячеек из символьных векторов или вектор объектов Simulink.lookuptable.Evenspacing.

При использовании вектор объектов Simulink.lookuptable.Breakpoint, каждый объект представляет набор точки останова. Используя вектор Simulink.lookuptable.Breakpoint объекты устанавливает свойство BreakpointsSpecification на 'Explicit values'.

При использовании массив ячеек из символьных векторов, каждый вектор символа представляет имя объекта Simulink.Breakpoint. Используя массив ячеек из символьных векторов устанавливает свойство BreakpointsSpecification на 'Reference'.

При использовании вектор объектов Simulink.lookuptable.Evenspacing, каждый объект представляет набор точки останова. Используя вектор Simulink.lookuptable.Evenspacing объекты устанавливает свойство BreakpointsSpecification на 'Even Spacing'.

Источник точки останова установил информацию, заданную как 'Explicit values' (значение по умолчанию), 'Even spacing' или 'Reference'. Смотрите Точки останова> параметр Спецификации.

Типы данных: char

Настройки генерации кода для переменной структуры (если вы устанавливаете BreakpointsSpecification на 'Explicit values' или 'Even spacing') или переменная типа массив ('Reference'), который хранит интерполяционную таблицу и наборы точки останова, заданные как объект Simulink.CoderInfo. Можно задать класс памяти или пользовательский класс памяти при помощи этого внедренного объекта. Смотрите Simulink.CoderInfo.

Настройки для типа структуры, который переменная структуры использует в сгенерированном коде, заданном как объект Simulink.lookuptable.StructTypeInfo.

Если вы устанавливаете BreakpointsSpecification на 'Reference', объект Simulink.LookupTable не появляется в сгенерированном коде как структура. Генератор кода игнорирует это свойство.

Опция, чтобы сгенерировать код, который включает приспособляемость эффективного размера таблицы, заданной как true или false. Смотрите Поддержку Настраиваемый параметр Размера.

Типы данных: логический

Информация для табличных данных, заданных как объект Simulink.lookuptable.Table.

Копировать семантику

Указатель. Чтобы изучить, как классы Handle влияют на операции копии, смотрите Копирование Объектов (MATLAB).

Примеры

Представляйте одномерную интерполяционную таблицу

  1. Создайте объект Simulink.LookupTable под названием LUTObj.

    LUTObj = Simulink.LookupTable;

  2. Задайте табличные данные.

    LUTObj.Table.Value = [1.1 2.2 3.3 4.4 5.5];

  3. Задайте данные набора точки останова.

    LUTObj.Breakpoints(1).Value = [-2 -1 0 1 2];

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

    LUTObj.StructTypeInfo.Name = 'myLUTStruct';

Можно использовать LUTObj в 1D диалоговом окне блока Lookup Table. В блоке, спецификации Данных набора к Lookup table object и Имени к LUTObj.

Представляйте двумерную интерполяционную таблицу

  1. Создайте объект Simulink.LookupTable под названием LUTObj.

    LUTObj = Simulink.LookupTable;

  2. Задайте табличные данные.

    LUTObj.Table.Value = [1.1 2.2 3.3 4.4 5.5; ...
                              6.6 7.7 8.8 9.9 10.1];

  3. Задайте данные набора точки останова. В свойстве Breakpoints используйте векторный индекс 2, чтобы установить значения во втором наборе точки останова.

    LUTObj.Breakpoints(1).Value = [-1 1];
    
    LUTObj.Breakpoints(2).Value = [-2 -1 0 1 2];
    

    LUTObj создает объект Simulink.lookuptable.Breakpoint как второй векторный элемент в значении свойства Breakpoints. За исключением свойства Value, новый объект имеет значения свойств по умолчанию.

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

    LUTObj.StructTypeInfo.Name = 'myLUTStruct';

Можно использовать LUTObj в 2D диалоговом окне блока Lookup Table.

Равномерно расположите с интервалами каждое второе значение, запускающееся от 1

Чтобы равномерно расположить с интервалами каждое второе значение, запускающееся от 1, используйте объект Breakpoint.

  1. Создайте объект Simulink.LookupTable под названием LUTObj.

    LUTObj=Simulink.LookupTable
    
    LUTObj = 
    
      LookupTable with properties:
    
                           Table: [1×1 Simulink.lookuptable.Table]
        BreakpointsSpecification: 'Explicit values'
                     Breakpoints: [1×1 Simulink.lookuptable.Breakpoint]
              SupportTunableSize: 0
                       CoderInfo: [1×1 Simulink.CoderInfo]
                  StructTypeInfo: [1×1 Simulink.lookuptable.StructTypeInfo]
  2. Настройте свойство точек прерывания к ровному интервалу.

    LUTObj.BreakpointsSpecification='Even spacing'
    
    LUTObj = 
    
      LookupTable with properties:
    
                           Table: [1×1 Simulink.lookuptable.Table]
        BreakpointsSpecification: 'Even spacing'
                     Breakpoints: [1×1 Simulink.lookuptable.Evenspacing]
              SupportTunableSize: 0
                       CoderInfo: [1×1 Simulink.CoderInfo]
                  StructTypeInfo: [1×1 Simulink.lookuptable.StructTypeInfo]
  3. Получите свойства точки останова.

    LUTObj.Breakpoints(1)
    
    
    ans = 
    
      Evenspacing with properties:
    
             FirstPoint: 0
                Spacing: 1
               DataType: 'auto'
                    Min: []
                    Max: []
                   Unit: ''
         FirstPointName: 'BPFirstPoint1'
            SpacingName: 'BPSpacing1'
        TunableSizeName: 'N1'
            Description: ''
  4. Чтобы установить первое свойство точки, используйте свойство FirstPoint объекта Breakpoint.

    LUTObj.Breakpoints(1).FirstPoint=1
  5. Чтобы установить свойство интервала, используйте объект Breakpoint.

    LUTObj.Breakpoints(1).Spacing=2
  6. Получите свойства точки останова.

    LUTObj.Breakpoints(1)
    
    ans = 
    
      Evenspacing with properties:
    
             FirstPoint: 1
                Spacing: 2
               DataType: 'auto'
                    Min: []
                    Max: []
                   Unit: ''
         FirstPointName: 'BPFirstPoint1'
            SpacingName: 'BPSpacing1'
        TunableSizeName: 'N1'
            Description: ''

Генерация кода системы управления для наборов интерполяционной таблицы и точки останова

Создайте объект Simulink.LookupTable под названием LUTObj.

LUTObj = Simulink.LookupTable;

Задайте табличные данные.

LUTObj.Table.Value = [1.00 2.25 3.50 4.75 6.00; ...
                          7.25 8.50 9.75 11.00 12.25];

Задайте данные набора точки останова. В свойстве Breakpoints используйте индекс массива 2, чтобы создать дополнительный объект Simulink.lookuptable.BreakpointInfo, который представляет второй набор точки останова.

LUTObj.Breakpoints(1).Value = [-1 1];

LUTObj.Breakpoints(2).Value = [-2 -1 0 1 2];

Задайте типы данных для интерполяционной таблицы и каждого набора точки останова.

LUTObj.Table.DataType = 'fixdt(1,16,2)';

LUTObj.Breakpoints(1).DataType = 'int16';

LUTObj.Breakpoints(2).DataType = 'int16';

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

LUTObj.Table.FieldName = 'myTable';

LUTObj.Breakpoints(1).FieldName = 'myBPSet1';

LUTObj.Breakpoints(2).FieldName = 'myBPSet2';

Экспорт определение переменной структуры от сгенерированного кода при помощи класса памяти ExportedGlobal.

LUTObj.CoderInfo.StorageClass = 'ExportedGlobal';

Назовите тип структуры в сгенерированном коде LUTStructType. Экспорт определение типа структуры сгенерированному заголовочному файлу под названием myLUTHdr.h h.

LUTObj.StructTypeInfo.Name = 'LUTStructType';
LUTObj.StructTypeInfo.DataScope = 'Exported';
LUTObj.StructTypeInfo.HeaderFileName = 'myLUTHdr.h';

В n-D блоке Lookup Table в модели, спецификации Данных набора к Lookup table object и Имени к LUTObj.

load_system('myModel_LUTObj')
set_param('myModel_LUTObj/Lookup Table','DataSpecification','Lookup table object',...
    'LookupTableObject','LUTObj')

Сгенерируйте код от модели.

rtwbuild('myModel_LUTObj')
### Starting build procedure for model: myModel_LUTObj
### Successful completion of code generation for model: myModel_LUTObj

Сгенерированный код задает тип структуры LUTStructType в сгенерированном заголовочном файле myLUTHdr.h h.

file = fullfile('myModel_LUTObj_ert_rtw','myLUTHdr.h');
rtwdemodbtype(file,'typedef struct {','} LUTStructType;',1,1)
typedef struct {
  int16_T myBPSet1[2];
  int16_T myBPSet2[5];
  int16_T myTable[10];
} LUTStructType;

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

file = fullfile('myModel_LUTObj_ert_rtw','myModel_LUTObj.c');
rtwdemodbtype(file,'LUTStructType LUTObj = {','/* Variable: LUTObj',1,1)
LUTStructType LUTObj = {
  { -1, 1 },

  { -2, -1, 0, 1, 2 },

  { 4, 29, 9, 34, 14, 39, 19, 44, 24, 49 }
} ;                                    /* Variable: LUTObj

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

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

Символьные размерности требуют, чтобы вы использовали основанный на ERT системный конечный файл, который требует Встроенного Coder®.

Исследуйте внешний код

В вашей текущей папке скопируйте эти макроопределения в заголовочный файл под названием ex_myHdr_LUT.h h.

#include "rtwtypes.h"

#ifndef _HEADER_MYHDR_H_
#define _HEADER_MYHDR_H_

#define bp1Len 2
#define bp2Len 2

typedef struct {
  real_T BP1[bp1Len];
  real_T BP2[bp2Len];
  real_T Table[bp1Len * bp2Len];
} LUTObj_Type;

extern LUTObj_Type LUTObj;

#endif

Скопируйте этот статический код инициализации в исходный файл под названием ex_mySrc_LUT.c c.

#include "ex_myHdr_LUT.h"

#if bp1Len == 2 && bp1Len == 2
LUTObj_Type LUTObj = {
  { 1.0, 2.0 },

  { 3.0, 4.0 },

  { 3.0, 2.0, 4.0, 1.0 }
} ;         
#endif

#if bp1Len == 3 && bp1Len == 3
LUTObj_Type LUTObj = {
  { 1.0, 2.0, 3.0 },

  { 4.0, 5.0, 6.0 },

  { 1.0, 6.0, 2.0, 3.0, 8.0, 9.0, 5.0, 4.0, 7.0 }
} ;     
#endif

Чтобы сгенерировать код, который импортирует это данные, создайте bp1Len и bp2Len, когда Simulink.Parameter возражает в MATLAB. Создайте LUTObj как объект Simulink.LookupTable. Используйте объекты параметра, чтобы задать длины размерности для таблицы и данных набора точки останова в объекте Simulink.LookupTable.

Создайте модель в качестве примера

Создайте модель в качестве примера ex_LUTObj при помощи n-D блока Lookup Table. В диалоговом окне блока Lookup Table, на вкладке Table и Breakpoints, определенном Номере табличных размерностей к 2.

open_system('ex_LUTObj')

Создайте объект Simulink.LookupTable

В Образцовой панели Иерархии модели Проводника выберите Base Workspace.

На панели инструментов нажмите кнопку Add Simulink LookupTable. Объект Simulink.LookupTable под названием Object появляется в базовом рабочем пространстве.

В панели Содержимого (средняя панель), переименуйте объект как LUTObj.

Также создайте объект в командной строке:

LUTObj = Simulink.LookupTable;

Сконфигурируйте объект Simulink.LookupTable

В панели Содержимого выберите новый объект LUTObj. Диалоговое окно свойства появляется в Диалоговой панели (правая панель).

Определите Номер табличных размерностей к 2.

В соответствии с Таблицей, установленным Значением к [3 4; 2 1].

В первой строке под Точками останова, установленным Значением к [1 2].

Во второй строке под Точками останова, установленным Значением к [3 4]. Нажмите Apply.

В соответствии с определением Типа Struct, Данные набора определяют объем к Imported. Установите Заголовочный файл на ex_myHdr_LUT.h h. Определите Имя к LUTObj_Type.

В диалоговом окне блока Lookup Table, спецификации Данных набора к Lookup table object. Определите Имя к LUTObj. Нажмите Apply.

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

LUTObj.Breakpoints(1).Value = [1 2];
LUTObj.Breakpoints(2).Value = [3 4];
LUTObj.Table.Value = [3 4; 2 1];
LUTObj.StructTypeInfo.DataScope = 'Imported';
LUTObj.StructTypeInfo.HeaderFileName = 'ex_myHdr_LUT.h';
LUTObj.StructTypeInfo.Name = 'LUTObj_Type';
set_param('ex_LUTObj/Lookup Table','LookupTableObject','LUTObj')
set_param('ex_LUTObj/Lookup Table',...
    'DataSpecification','Lookup table object')

Позвольте генератору кода использовать объекты Simulink.Parameter в качестве макросов, которые задают длины размерности. Выбор параметр конфигурации Позволяет символьную спецификацию размерности.

set_param('ex_LUTObj','AllowSymbolicDim','on')

Создайте объекты Simulink.Parameter, которые представляют макросы bp1Len и bp2Len. Чтобы сгенерировать код, который импортирует макросы из вашего заголовочного файла ex_myHdr_LUT.h, примените пользовательский класс памяти ImportedDefine.

bp1Len = Simulink.Parameter(2);
bp1Len.Min = 2;
bp1Len.Max = 3;
bp1Len.DataType = 'int32';
bp1Len.CoderInfo.StorageClass = 'Custom';
bp1Len.CoderInfo.CustomStorageClass = 'ImportedDefine';
bp1Len.CoderInfo.CustomAttributes.HeaderFile = 'ex_myHdr_LUT.h';

bp2Len = Simulink.Parameter(2);
bp2Len.Min = 2;
bp2Len.Max = 3;
bp2Len.DataType = 'int32';
bp2Len.CoderInfo.StorageClass = 'Custom';
bp2Len.CoderInfo.CustomStorageClass = 'ImportedDefine';
bp2Len.CoderInfo.CustomAttributes.HeaderFile = 'ex_myHdr_LUT.h';

Сконфигурируйте существующий объект Simulink.LookupTable LUTObj, чтобы использовать объекты Simulink.Parameter. Установите длины размерности данных набора точки останова и табличных данных при помощи имен объектов параметра.

LUTObj.Breakpoints(1).Dimensions = '[1 bp1Len]';
LUTObj.Breakpoints(2).Dimensions = '[1 bp2Len]';
LUTObj.Table.Dimensions = '[bp1Len bp2Len]';

Сконфигурируйте LUTObj как импортированные данные путем применения пользовательского класса памяти ImportFromFile. Чтобы импортировать ваше определение LUTObj, добавьте имя файла ex_mySrc_LUT.c к образцовым Параметрам конфигурации параметра конфигурации> Генерация кода> Пользовательский код> Дополнительная информация о Сборке> Исходные файлы.

LUTObj.CoderInfo.StorageClass = 'Custom';
LUTObj.CoderInfo.CustomStorageClass = 'ImportFromFile';
LUTObj.CoderInfo.CustomAttributes.HeaderFile = 'ex_myHdr_LUT.h';

set_param('ex_LUTObj','CustomSource','ex_mySrc_LUT.c')

Сгенерируйте и осмотрите код

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

set_param('ex_LUTObj','GenCodeOnly','off')

Сгенерируйте код от модели.

rtwbuild('ex_LUTObj')
### Starting build procedure for model: ex_LUTObj
### Successful completion of build procedure for model: ex_LUTObj

В отчете генерации кода просмотрите сгенерированный файл ex_LUTObj.h h. Файл импортирует макроопределения и определение типа структуры включением вашего заголовочного файла ex_myHdr_LUT.h h.

file = fullfile('ex_LUTObj_ert_rtw','ex_LUTObj.h');
rtwdemodbtype(file,'#include "ex_myHdr_LUT.h"','#include "ex_myHdr_LUT.h"',1,1)
#include "ex_myHdr_LUT.h"

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

file = fullfile('ex_LUTObj_ert_rtw','ex_LUTObj.c');
rtwdemodbtype(file,'/* Model step function */','/* Model initialize function */',1,0)
/* Model step function */
void ex_LUTObj_step(void)
{
  /* Outport: '<Root>/Out1' incorporates:
   *  Inport: '<Root>/In1'
   *  Inport: '<Root>/In2'
   *  Lookup_n-D: '<Root>/Lookup Table'
   */
  ex_LUTObj_Y.Out1 = look2_binlcapw(ex_LUTObj_U.In1, ex_LUTObj_U.In2,
    (&(LUTObj.BP1[0])), (&(LUTObj.BP2[0])), (&(LUTObj.Table[0])),
    ex_LUTObj_ConstP.LookupTable_maxIndex, (uint32_T)bp1Len);
}

Ограничения

  • Вы не можете разделить на подклассы Simulink.Breakpoint или Simulink.LookupTable. Поэтому вы не можете применить пользовательские классы памяти кроме тех во встроенном пакете Simulink.

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

    • Образцовый аргумент в рабочем пространстве модели или образцовое значение аргумента в Блоке модели.

    • Значение параметра маски на блоке CodeReuse Subsystem.

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

    Однако можно использовать автономные объекты Simulink.LookupTable, которые не относятся к объектам Simulink.Breakpoint этими способами.

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

Введенный в R2017b

Была ли эта тема полезной?