Пакет: Simulink
Суперклассы:
Сохраните и поделитесь интерполяционной таблицей и данными точек по оси Х, сконфигурируйте данные для генерации кода ASAP2 и AUTOSAR
Объект Simulink.LookupTable
класс хранит интерполяционную таблицу и данные точек по оси Х. Можно использовать эти данные в блоке интерполяционной таблицы, таком как блок n-D Lookup Table. С помощью объекта можно задать типы данных и настройки генерации кода для таблицы и наборов точек по оси Х.
Когда вы храните все данные таблицы и набора точек по оси Х в одной Simulink.LookupTable
объект, все данные появляются в одной структуре в сгенерированном коде. Чтобы сконфигурировать генерацию кода STD_AXIS для калибровки, используйте этот метод.
Чтобы поделиться набором точек по оси Х между несколькими интерполяционными таблицами, например, для генерации кода COM_AXIS, используйте Simulink.Breakpoint
объект в одном или нескольких блоках Prelookup. Использование Simulink.LookupTable
объекты в Interpolation Using Prelookup блоках. Затем сконфигурируйте объекты интерполяционной таблицы для ссылки на объект точки останова. Для получения дополнительной информации смотрите Пакеты Общие данные точек по оси Х и Данные таблицы для интерполяционных таблиц.
В подкласс из Simulink.LookupTable
и наследовать от этого базового класса, введите этот синтаксис как первую линию вашего файла определения класса, где myLookuptable является именем вашего нового класса:
classdef myLookuptable < Simulink.LookupTable
Пример для подклассирования см. в разделе Определение классов данных.
Если вы добавляете свойства к подклассу, вы можете увидеть их, отобразив объект подкласса в MATLAB® командная строка. В диалоговом окне свойств эти свойства отображаются на новой вкладке.
LUTObj = Simulink.LookupTable
возвращает Simulink.LookupTable
LUTObj объекта
со значениями свойств по умолчанию.
Как создать Simulink.LookupTable
используя Model Explorer, используйте кнопку на панели инструментов. Имя по умолчанию для объекта Object
.
Установка значения Breakpoints specification Explicit
(по умолчанию) отображает это представление диалогового окна свойств.
В нижней части диалогового окна содержатся таблица и значения данных точек по оси Х. Для получения дополнительной информации об этой табличной области смотрите View Simulink.LookupTable Object Data Using the Property Dialog Box Tabular Interface. Содержимое этой таблицы эквивалентно свойству Value, видимому, когда для свойства Breakpoints specification задано значение Even spacing
или Reference
.
Количество размерностей интерполяционной таблицы. Задайте целое число значения до 30
(включительно). Для примера, чтобы представлять трехмерную интерполяционную таблицу, задайте целое число 3
.
Информация для данных таблицы. Можно сконфигурировать следующие характеристики:
Данные таблицы. Задайте числовой вектор или многомерный массив с по крайней мере двумя элементами.
Данные Value таблицы совпадают с содержимым табличного интерфейса, видимого в нижней части диалогового окна, когда для свойства Breakpoints specification задано значение Explicit
. Для получения дополнительной информации об этой табличной области смотрите View Simulink.LookupTable Object Data Using the Property Dialog Box Tabular Interface.
Примечание
Это свойство появляется, только если Breakpoints specification установлено на Even spacing
или Reference
.
Можно также использовать выражение с математическими операторами, такими как sin(1:0.5:30)
пока выражение возвращает числовой вектор или многомерный массив. При клике Apply или OK объект выполняет выражение и использует результат, чтобы задать значение этого свойства.
Когда вы задаете Data type auto
, чтобы задать Value, используйте типизированное выражение, такое как single([1 2 3])
или использовать fi
(Fixed-Point Designer) конструктор для встраивания fi
объект.
Когда вы задаете данные таблицы с тремя или более размерностями, Value отображает данные как выражение, которое содержит вызов reshape
функция. Чтобы изменить значения в данных, измените первый аргумент reshape
вызов, который содержит все значения в сериализованном векторе. Когда вы добавляете или удаляете элементы вдоль размерности, необходимо также исправить аргумент, который представляет длину изменённой размерности.
Вы можете редактировать эти данные с помощью более интуитивно понятного интерфейса в блоке интерполяционной таблицы. См. «Импорт данных интерполяционной таблицы из MATLAB».
Тип данных табличных данных. Настройкой по умолчанию является auto
, что означает, что данные таблицы получают тип данных от значения, заданного в Value. Если вы используете нетиповое выражение, такое как [1 2 3]
чтобы задать Value, данные таблицы используют тип данных double
. Если вы задаете типизированное выражение, такое как single([1 2 3])
или fi
объект, данные таблицы используют тип данных, заданный выражением или объектом. Также поддерживаются перечисленные типы данных.
Можно явным образом задать целочисленный тип данных, половинный тип данных, тип данных с плавающей точкой, тип данных с фиксированной точкой или выражение типа данных, такое как имя Simulink.AliasType
объект.
Для получения дополнительной информации о типах данных в Simulink®, см. Типы данных, поддерживаемые Simulink. Чтобы решить, как управлять типами данных таблицы и данных точек по оси Х в Simulink.LookupTable
и Simulink.Breakpoint
объекты, см. «Типы управляющих данных объектов интерполяционной таблицы (Simulink Coder)».
Размерности данных интерполяционной таблицы.
Чтобы использовать символические размерности, задайте вектор символов. Смотрите Реализуйте Варианты Размерности для Размеров Массивов в Сгенерированном Коде (Embedded Coder).
Минимальное значение элементов в данных таблицы. Значение по умолчанию пустое, []
. Можно задать числовое, действительное значение.
Для получения дополнительной информации о том, как Simulink использует это свойство, смотрите Задайте Минимальное и Максимальное Значения для Параметров блоков.
Максимальное значение элементов в данных таблицы. Значение по умолчанию пустое, []
. Можно задать числовое, действительное значение.
Для получения дополнительной информации о том, как Simulink использует это свойство, смотрите Задайте Минимальное и Максимальное Значения для Параметров блоков.
Для Simulink.LookupTable
объекты с типом данных с фиксированной точкой, минимальным значением элементов в данных таблицы, заданным как сохраненное целое число. Значение определяется из реальной Min значений. Это свойство доступно только в диалоговом окне свойств.
Для Simulink.LookupTable
объекты с типом данных с фиксированной точкой, максимальным значением элементов в данных таблицы, заданным как сохраненное целое число. Значение определяется из реальной Max значений. Это свойство доступно только в диалоговом окне свойств.
Физические единицы измерения элементов в интерполяционной таблице. Вы можете задать текст, такой как degC
. См. Спецификацию единиц измерения в моделях Simulink.
Имя поля структуры в сгенерированном коде. Это поле сохраняет данные таблицы, если вы конфигурируете Simulink.LookupTable
объект, который появится в сгенерированном коде как структура. Значение по умолчанию Table
. Чтобы изменить имя поля, укажите текст.
Описание интерполяционной таблицы. Вы можете задать текст, такой как This lookup table describes the action of a pump
.
Информация о наборе точек по оси Х. Каждая строка является одним набором точек по оси Х. Чтобы сконфигурировать дополнительные наборы точек по оси Х, задайте целое значение в Number of table dimensions поле.
Для наборов точек по оси Х можно сконфигурировать следующие характеристики:
Источник информации о наборах точек по оси Х, заданный как Explicit values
(по умолчанию), Reference
, или Even spacing
.
Для хранения всех данных таблицы и набора точек по оси Х в Simulink.LookupTable
объект, установите Specification равным Explicit values
.
The Simulink.LookupTable
объект появляется в сгенерированном коде как одна структурная переменная.
Хранение данных таблицы в Simulink.LookupTable
объект и сохраните данные набора точек по оси Х в Simulink.Breakpoint
объекты, установите Specification равным Reference
.
The Simulink.LookupTable
объект появляется в сгенерированном коде как отдельная переменная массива, содержащая данные таблицы. Каждый Simulink.Breakpoint
объект появляется как отдельный массив или структурная переменная, которая содержит данные набора точек по оси Х.
Для хранения данных таблицы и равномерно разнесенных точек по оси Х в Simulink.LookupTable
объект, установите Specification равным Even spacing
. Используйте параметры First point и Spacing, чтобы сгенерировать набор равномерно расположенных точек останова.
Примечание
Когда Specification установлено на Explicit values
или Even spacing
можно изменить порядок настраиваемого размера, точек по оси Х и записей таблицы в объектной структуре интерполяционной таблицы.
Спецификация, позволяющая настраивать эффективный размер таблицы в сгенерированном коде. В коде структура, которая соответствует объекту, имеет дополнительное поле для каждого вектора точки останова. Каждое дополнительное поле сохраняет длину соответствующего вектора точек по оси Х. Можно изменить значение каждого поля, чтобы настроить эффективный размер таблицы.
Это свойство появляется только, если для Specification задано значение Explicit values
или Even spacing
.
Примечание
Если вы храните данные точек по оси Х в Simulink.Breakpoint
объекты путем установки Specification на Reference
, чтобы включить настройку размера таблицы в сгенерированном коде, используйте свойство Support tunable size каждого Simulink.Breakpoint
объект.
Данные для набора точек по оси Х. Задайте числовой вектор с как минимум двумя элементами.
Примечание
Это свойство появляется только в том случае, если Breakpoints specification
установлено в Even spacing
или Reference
. Данные Value набора точек по оси Х совпадают с содержимым табличного интерфейса, видимого в нижней части диалогового окна, когда для свойства Breakpoints specification задано значение Explicit
. Для получения дополнительной информации об этой табличной области смотрите View Simulink.LookupTable Object Data Using the Property Dialog Box Tabular Interface.
Можно также использовать выражение с математическими операторами, такими как sin(1:0.5:30)
пока выражение возвращает числовой вектор. При клике Apply или OK объект выполняет выражение и использует результат, чтобы задать значение этого свойства.
Когда вы задаете Data type auto
, чтобы задать Value, используйте типизированное выражение, такое как single([1 2 3])
или использовать fi
(Fixed-Point Designer) конструктор для встраивания fi
объект.
Вы можете редактировать эти данные с помощью более интуитивно понятного интерфейса в блоке интерполяционной таблицы. См. «Импорт данных интерполяционной таблицы из MATLAB».
Тип данных набора точек по оси Х. Настройкой по умолчанию является auto
, что означает, что набор точек по оси Х получает тип данных от значения, заданного в Value. Если вы используете нетиповое выражение, такое как [1 2 3]
чтобы задать Value, данные точек по оси Х используют тип данных double
. Если вы задаете типизированное выражение, такое как single([1 2 3])
или fi
объект, данные точек по оси Х используют тип данных, заданный выражением или объектом.
Можно явным образом задать целочисленный тип данных, тип данных с плавающей точкой, тип данных с фиксированной точкой или выражение типа данных, такое как имя Simulink.AliasType
объект.
Для получения дополнительной информации о типах данных в Simulink, см. Типы данных, поддерживаемые Simulink. Чтобы решить, как управлять типами данных таблицы и данных точек по оси Х в Simulink.LookupTable
и Simulink.Breakpoint
объекты, см. «Типы управляющих данных объектов интерполяционной таблицы (Simulink Coder)».
Размерности набора точек останова.
Чтобы использовать символические размерности, задайте вектор символов. Смотрите Реализуйте Варианты Размерности для Размеров Массивов в Сгенерированном Коде (Embedded Coder).
Минимальное значение элементов в наборе точек по оси Х. Значение по умолчанию пустое, []
. Можно задать числовое, действительное значение.
Для получения дополнительной информации о том, как Simulink использует это свойство, смотрите Задайте Минимальное и Максимальное Значения для Параметров блоков.
Максимальное значение элементов в наборе точек по оси Х. Значение по умолчанию пустое, []
. Можно задать числовое, действительное значение.
Для получения дополнительной информации о том, как Simulink использует это свойство, смотрите Задайте Минимальное и Максимальное Значения для Параметров блоков.
Физическая единица измерения элементов в наборе точек по оси Х. Вы можете задать текст, такой как degF
. См. Спецификацию единиц измерения в моделях Simulink.
Имя поля структуры в сгенерированном коде. В этом поле хранятся данные набора точек по оси Х. Значение по умолчанию BP1
для первого набора точек по оси Х и BP2
для второго набора. Чтобы изменить имя поля, укажите текст.
Имя поля структуры в сгенерированном коде. В этом поле сохранена длина (количество элементов) набора точек по оси Х, который используется алгоритмом сгенерированного кода для определения размера таблицы. Чтобы настроить эффективный размер таблицы во время выполнения кода, измените значение этого поля структуры в памяти. Имя по умолчанию N1
для первого набора точек по оси Х и N2
для второго набора. Чтобы изменить имя поля, укажите текст.
Этот столбец появляется только при выборе Support tunable size.
Описание набора точек по оси Х. Вы можете задать текст, такой как This breakpoint set represents the pressure input
.
Первая точка равномерно разнесенных данных точек по оси Х. Этот параметр доступен, когда Specification установлено на Even spacing
.
Интервал между точками в равномерно разнесенных данных точек по оси Х Этот параметр доступен, когда Specification установлено на Even spacing
.
Имя Simulink.Breakpoint
объект, который хранит информацию для этого набора точек по оси Х.
Этот столбец появляется только в том случае, если для параметра Specification задано значение Reference
.
Имя Simulink.Breakpoint
объект, который хранит информацию для первой точки. Этот параметр доступен, когда Specification установлено на Even spacing
.
Имя Simulink.Breakpoint
объект, который хранит информацию для интервала. Этот параметр доступен, когда Specification установлено на Even spacing
.
Класс памяти структурной переменной (если задано Specification Explicit values
или Even spacing
) или переменная массива (Reference
) в сгенерированном коде. Переменная хранит данные таблицы и, если переменная является структурой, данные набора точек по оси Х. Настройкой по умолчанию является Auto
.
Для получения дополнительной информации о классах памяти смотрите Строение Генерации кода C для Элементов Интерфейса Модели (Simulink Coder).
Если у вас есть Embedded Coder®можно выбрать пользовательский класс памяти. Для получения дополнительной информации о пользовательских классах памяти смотрите Организовать данные параметра в структуру при помощи класса Struct Storage Class (Embedded Coder).
Альтернативное имя для структурной переменной (если вы задаете Specification равным Explicit values
или Even spacing
) или переменная массива (Reference
) в сгенерированном коде. Значение по умолчанию пусто, и в этом случае сгенерированный код использует имя Simulink.LookupTable
объект как имя структуры или переменной массива. Чтобы задать идентификатор, задайте текст.
Чтобы включить это свойство, установите для Data definition: Storage class значение, отличное от Auto
.
Контур выравнивания данных в сгенерированном коде. Начальный адрес памяти для данных, выделенных для структуры или переменной массива, является кратным заданному значению. Значение по умолчанию -1
, что позволяет генератору кода определить оптимальное выравнивание на основе использования.
Задайте положительное целое число, которое является степенью 2, не превышающей 128. Дополнительные сведения об использовании выравнивания данных для замены кода см. в разделе Выравнивание данных для замены кода (Embedded Coder).
Имя типа структуры, используемый структурной переменной в сгенерированном коде. Значение по умолчанию пустое. Задайте текст.
Это свойство появляется только, если для Specification задано значение Explicit values
или Even spacing
.
Возможности типа структуры (импортирована из пользовательского кода или экспортирована из сгенерированного кода). Значение по умолчанию Auto
. Когда вы выбираете Auto
:
Если вы не задаете значение в Struct Type definition: Header file поле, сгенерированный код экспортирует определение типа структуры в файл
. model
_types.h
- имя модели.model
Если вы задаете значение в Struct Type definition: Header file поле, например myHdr.h
сгенерированный код импортирует определение типа структуры из myHdr.h
.
Чтобы явным образом задать возможности данных:
Чтобы импортировать определение типа структуры в сгенерированный код из пользовательского кода, выберите Imported
.
Чтобы экспортировать определение типа структуры из сгенерированного кода, выберите Exported
.
Если вы не задаете значение в Struct Type definition: Header file поле, сгенерированный код импортирует или экспортирует определение типа из или в
. StructName
.h
- имя, заданное с помощью Struct Type definition: Name свойств.StructName
Это свойство появляется только, если для Specification задано значение Explicit values
или Even spacing
.
Имя файла заголовка, содержащего определение типа структуры. Можно импортировать определение из созданного файла заголовка или экспортировать определение в сгенерированный файл заголовка. Чтобы контролировать возможности типа структуры, измените настройку свойства Struct Type definition: Data scope.
Это свойство появляется только, если для Specification задано значение Explicit values
или Even spacing
.
Информация для данных таблицы и точек по оси Х. Можно ввести выражение MATLAB в связанное текстовое поле или добавить данные непосредственно в сопроводительную таблицу. Выберите требуемый тип данных:
Table
- Данные таблицы. Задайте числовой вектор или многомерный массив с по крайней мере двумя элементами.
Можно также использовать выражение с математическими операторами, такими как sin(1:0.5:30)
пока выражение возвращает числовой вектор или многомерный массив. Когда вы нажимаете Enter, объект выполняет выражение и использует результат, чтобы задать значение этого свойства.
Когда вы задаете данные таблицы с тремя или более размерностями, таблица отображает данные как выражение, которое содержит вызов reshape
функция. Чтобы изменить значения в данных, измените первый аргумент reshape
вызов, который содержит все значения в сериализованном векторе. Когда вы добавляете или удаляете элементы вдоль размерности, необходимо также исправить аргумент, который представляет длину изменённой размерности.
Вы можете редактировать эти данные с помощью более интуитивно понятного интерфейса в блоке интерполяционной таблицы. См. «Импорт данных интерполяционной таблицы из MATLAB».
BP
N - данные для набора точек по оси Х.
Задайте числовой вектор с как минимум двумя элементами.
Можно также использовать выражение с математическими операторами, такими как sin(1:0.5:30)
пока выражение возвращает числовой вектор. Когда вы нажимаете Enter, объект выполняет выражение и использует результат, чтобы задать значение этого свойства.
Вы можете редактировать эти данные с помощью более интуитивно понятного интерфейса в блоке интерполяционной таблицы. См. «Импорт данных интерполяционной таблицы из MATLAB».
Ввод или манипуляция данными в таблице проста и интуитивно понятна. Как Microsoft® Excel® электронные таблицы, можно работать с таблицей с такими операциями, как:
Выберите элементы таблицы
Используйте стандартные горячие клавиши, такие как:
Копировать - Ctrl+C
Вставка - Ctrl+V
Отменить - Ctrl+Z
Удалить
Редо - Shift+Ctrl+Z
Указатель. Чтобы узнать, как классы handle влияют на операции копирования, см. раздел «Копирование объектов».
Создайте Simulink.LookupTable
объект с именем LUTObj
.
LUTObj = Simulink.LookupTable;
Задайте данные таблицы.
LUTObj.Table.Value = [1.1 2.2 3.3 4.4 5.5];
Укажите данные набора точек по оси Х.
LUTObj.Breakpoints(1).Value = [-2 -1 0 1 2];
Укажите имя для типа структуры в сгенерированном коде.
LUTObj.StructTypeInfo.Name = 'myLUTStruct';
Можно использовать LUTObj
в 1-D Lookup Table диалогового окна блока. В блоке установите Data specification равным Lookup table object
и Name к LUTObj
.
Чтобы просмотреть данные, используйте диалоговое окно свойства, как описано в View Simulink.LookupTable Object Data Using the Property Dialog Box Tabular Interface.
Создайте Simulink.LookupTable
объект с именем LUTObj
.
LUTObj = Simulink.LookupTable;
Задайте данные таблицы.
LUTObj.Table.Value = [1.1 2.2 3.3 4.4 5.5; ...
6.6 7.7 8.8 9.9 10.1];
Укажите данные набора точек по оси Х. В Breakpoints
свойство, используйте индекс вектора 2
для установки значений во втором наборе точек по оси Х.
LUTObj.Breakpoints(1).Value = [-1 1]; LUTObj.Breakpoints(2).Value = [-2 -1 0 1 2];
LUTObj
создает Simulink.lookuptable.Breakpoint
объект как второй векторный элемент в значении Breakpoints
свойство. Кроме Value
свойство, новый объект имеет значения свойств по умолчанию.
Укажите имя для типа структуры в сгенерированном коде.
LUTObj.StructTypeInfo.Name = 'myLUTStruct';
Можно использовать LUTObj
в 2-D Lookup Table диалогового окна блока.
Чтобы просмотреть данные, используйте диалоговое окно свойства, как описано в View Simulink.LookupTable Object Data Using the Property Dialog Box Tabular Interface.
Чтобы равномерно разместить каждое второе значение, начиная с 1, используйте объект Breakpoint.
Создайте 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]
Установите четные интервалы между свойствами точек по оси Х.
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]
Получите свойства точки останова.
LUTObj.Breakpoints(1)
ans = Evenspacing with properties: FirstPoint: 0 Spacing: 1 DataType: 'auto' Min: [] Max: [] Unit: '' FirstPointName: 'BPFirstPoint1' SpacingName: 'BPSpacing1' TunableSizeName: 'N1' Description: ''
Чтобы задать первое свойство точки, используйте объект Breakpoint FirstPoint
свойство.
LUTObj.Breakpoints(1).FirstPoint=1
Чтобы задать свойство интервала, используйте объект Breakpoint.
LUTObj.Breakpoints(1).Spacing=2
Получите свойства точки останова.
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
.
LUTObj.StructTypeInfo.Name = 'LUTStructType'; LUTObj.StructTypeInfo.DataScope = 'Exported'; LUTObj.StructTypeInfo.HeaderFileName = 'myLUTHdr.h';
В блоке n-D Интерполяционная таблица в модели установите спецификацию Data на Lookup table object
и имя для LUTObj
.
load_system('myModel_LUTObj') set_param('myModel_LUTObj/Lookup Table','DataSpecification','Lookup table object',... 'LookupTableObject','LUTObj')
Сгенерируйте код из модели.
slbuild('myModel_LUTObj')
### Starting build procedure for: myModel_LUTObj ### Generated code for 'myModel_LUTObj' is up to date because no structural, parameter or code replacement library changes were found. ### Successful completion of code generation for: myModel_LUTObj Build Summary 0 of 1 models built (1 models already up to date) Build duration: 0h 0m 2.141s
Сгенерированный код определяет тип структуры LUTStructType
в сгенерированном заголовочном файле myLUTHdr.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, который требует Embedded Coder ®.
Исследуйте внешний код
В текущей папке скопируйте эти определения макросов в заголовочный файл с именем ex_myHdr_LUT.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
.
#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 Интерполяционная таблица. В диалоговом окне Блок Интерполяционная таблица на вкладке Таблица и Точки по оси Х установите значение Число размеров таблицы 2
.
open_system('ex_LUTObj')
Создание Simulink.LookupTable
Объект
На панели иерархии модели Model Explorer выберите Базовое Рабочее Пространство.
На панели инструментов нажмите кнопку Add Simulink LookupTable. A Simulink.LookupTable
объект с именем Object
появляется в базовом рабочем пространстве.
На панели «Содержимое» (средняя панель) переименуйте объект в LUTObj
.
Кроме того, создайте объект в командной строке:
LUTObj = Simulink.LookupTable;
Сконфигурируйте Simulink.LookupTable
Объект
На панели «Содержимое» выберите новый объект LUTObj
. Диалоговое окно свойств появляется на панели Диалоговое окно (правая панель).
Установите Количество размерностей таблицы равным 2
.
В разделе « Таблице» установите значение [3 4; 2 1]
.
В первой строке в разделе «Точки по оси Х» установите значение [1 2]
.
Во второй строке в разделе «Точки по оси Х» установите значение [3 4]
. Нажмите Применить.
В разделе «Определение типа структуры» установите значение «Область данных» Imported
. Установите заголовочный файл на ex_myHdr_LUT.h
. Установите имя в LUTObj_Type
.
В диалоговом окне блока Интерполяционная таблица установите для спецификации данных значение Lookup table object
. Установите имя в LUTObj
. Нажмите Применить.
Кроме того, чтобы сконфигурировать объект и блоки, используйте следующие команды:
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
объекты как макросы, задающие длины размерностей. Выберите параметр конфигурации Allow symbolic dimension specification.
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')
Сгенерируйте код из модели.
slbuild('ex_LUTObj')
### Starting build procedure for: ex_LUTObj ### Successful completion of build procedure for: ex_LUTObj Build Summary Top model targets built: Model Action Rebuild Reason ========================================================================================== ex_LUTObj Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 18.541s
В отчете о генерации кода просмотрите сгенерированный файл ex_LUTObj.h
. Файл импортирует определения макросов и типа структуры путем включения вашего файла заголовка ex_myHdr_LUT.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
таким образом, функция поиска может проходить по строкам и столбцам данных таблицы, которые появляются в сгенерированном коде как сериализованный 1-D массив.
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.Breakpoint
объекты как специфичные для экземпляра данные параметра для переиспользуемых компонентов. Для примера нельзя использовать один из следующих объектов как:
Аргумент модели в рабочем пространстве модели или значение аргумента модели в блоке Model.
Значение параметра маски на блоке CodeReuse Subsystem.
Значение параметра маски в подсистеме, которую вы повторно используете, создав пользовательскую библиотеку.
Однако можно использовать автономные Simulink.LookupTable
объекты, которые не относятся к Simulink.Breakpoint
объекты, этими способами.
Когда блоки в подсистеме используют Simulink.LookupTable
или Simulink.Breakpoint
объекты, вы не можете задать переопределение типа данных только в подсистеме. Вместо этого установите переопределение типа данных на всей модели.
Simulink.Breakpoint
| Simulink.lookuptable.Breakpoint
| Simulink.lookuptable.Evenspacing
| Simulink.lookuptable.StructTypeInfo
| Simulink.lookuptable.Table
| Simulink.Parameter