Пакет: 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
(значение по умолчанию) отображает это представление диалогового окна свойства.
Нижняя часть диалогового окна содержит значения данных точки останова и таблица. Для получения дополнительной информации об этой табличной области, Данных об Интерполяционной таблице вида на море. Содержимое этой таблицы эквивалентно свойству Value, видимо, когда свойство Breakpoints specification установлено в Even spacing
или Reference
.
Количество размерностей интерполяционной таблицы. Задайте целочисленное значение до 30
(включительно). Например, чтобы представлять 3D интерполяционную таблицу, задайте целочисленный 3
.
Информация для табличных данных. Можно сконфигурировать эти характеристики:
Табличные данные. Задайте числовой векторный или многомерный массив по крайней мере с двумя элементами.
Данные о таблице Value совпадают с содержимым табличного интерфейса, видимого в нижней части диалогового окна, когда свойство Breakpoints specification установлено в Explicit
. Для получения дополнительной информации об этой табличной области, Данных об Интерполяционной таблице вида на море.
Примечание
Это свойство появляется, только если 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
.
Simulink.LookupTable
объект появляется в сгенерированном коде как одна переменная структуры.
Хранить табличные данные в Simulink.LookupTable
возразите и храните данные о наборе точки останова в Simulink.Breakpoint
объекты, набор Specification к Reference
.
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
. Для получения дополнительной информации об этой табличной области, Данных об Интерполяционной таблице вида на море.
Можно также использовать выражение с математическими операторами, такими как 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 (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
Undo — 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
.
Чтобы просмотреть данные, используйте диалоговое окно свойства как описано в Данных об Интерполяционной таблице Представления.
Создайте 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.
Чтобы просмотреть данные, используйте диалоговое окно свойства как описано в Данных об Интерполяционной таблице Представления.
Чтобы равномерно расположить с интервалами каждое второе значение, запускающееся от 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 блоке Lookup Table в модели, спецификации Данных о наборе к 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 блока Lookup Table. В диалоговом окне блока Интерполяционной таблицы, на вкладке Table и Breakpoints, определенном Номере табличных размерностей к
2
.
open_system('ex_LUTObj')
Создайте Simulink.LookupTable
Объект
В панели Иерархии модели Model Explorer выберите 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
. Определите имя к LUTObj_Type
.
В диалоговом окне блока Интерполяционной таблицы, спецификации Данных о наборе к 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')
Сгенерируйте код из модели.
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 25.061s
В отчете генерации кода просмотрите сгенерированный файл 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
таким образом, функция поиска может пересечь строки и столбцы табличных данных, которые появляются в сгенерированном коде как сериализированный 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.Breakpoint
объекты как специфичные для экземпляра данные о параметре для допускающих повторное использование компонентов. Например, вы не можете использовать один из этих объектов как:
Аргумент модели в рабочем пространстве модели или значение аргумента модели в блоке Model.
Значение параметра маски на блоке CodeReuse Subsystem.
Значение параметра маски на подсистеме, которую вы снова используете путем создания пользовательской библиотеки.
Однако можно использовать автономный Simulink.LookupTable
объекты, которые не относятся к Simulink.Breakpoint
объекты, этими способами.
Когда блоки в подсистеме используют Simulink.LookupTable
или Simulink.Breakpoint
объекты, вы не можете установить переопределение типа данных только на подсистеме. Вместо этого переопределение типа данных набора на целой модели.
Simulink.lookuptable.Breakpoint
| Simulink.lookuptable.Evenspacing
| Simulink.lookuptable.StructTypeInfo
| Simulink.lookuptable.Table
| Simulink.Parameter
| Simulink.Breakpoint