Simulink.LookupTable 类
包: Simulink
超类:
存储和共享查找表和断点数据,为 ASAP2 和 AUTOSAR 代码生成配置数据
描述
Simulink.LookupTable
类的对象存储查找表和断点数据。您可以在查找表模块(如 n-D Lookup Table 模块)中使用该数据。通过该对象,可以为表和断点集指定数据类型和代码生成设置。
在将所有表和断点集数据存储在单个 Simulink.LookupTable
对象中时,在生成的代码中,所有这些数据都会出现在一个单独的结构体中。要配置 STD_AXIS 代码生成以进行标定,请使用此方法。
要在多个查找表之间共享断点(例如用于生成 COM_AXIS 代码),请在一个或多个 Prelookup 模块中使用 Simulink.Breakpoint
对象。在 Interpolation Using Prelookup 模块中使用 Simulink.LookupTable
对象。然后,配置查找表对象以引用断点对象。有关详细信息,请参阅为查找表打包共享断点和表数据。
要从 Simulink.LookupTable
进行子类化并从此基类继承,请键入以下语法作为类定义文件的第一行,其中 myLookuptable 是新类的名称:
classdef myLookuptable < Simulink.LookupTable
有关子类化的示例,请参阅定义数据类。
如果向子类添加属性,可以通过在 MATLAB® 命令行中显示子类对象来查看它们。在属性对话框中,这些属性显示在一个新选项卡中。
构造
LUTObj = Simulink.LookupTable
返回具有默认属性值的 Simulink.LookupTable
对象 LUTObj
。
要使用模型资源管理器创建 Simulink.LookupTable
对象,请使用工具栏上的按钮 。对象的默认名称是
Object
。
“属性”对话框
将断点设定设置为“显式值
”(默认值)显示属性对话框的以下视图。
对话框底部包含表和断点数据值。有关此表区域的详细信息,请参阅Edit Lookup Table Data with Lookup Table Spreadsheet。此表的内容等效于值属性,当断点设定属性设置为“等间距
”或“引用
”时可见。
表和断点
- 表维数
查找表的维数。指定最大为
30
(含该值)的整数值。例如,要表示三维查找表,请指定整数3
。- , 断点设定
断点集信息来源,指定为“
显式值
”(默认值)、“引用
”或“等间距
”。要将所有表和断点集数据存储在
Simulink.LookupTable
对象中,请将断点设定设置为“显式值
”。Simulink.LookupTable
对象作为单个结构体变量显示在生成的代码中。要将表数据存储在
Simulink.LookupTable
对象中并将断点集数据存储在Simulink.Breakpoint
对象中,请将断点设定设置为“引用
”。Simulink.LookupTable
对象作为包含表数据的单独数组变量显示在生成的代码中。每个Simulink.Breakpoint
对象都显示为包含断点集数据的单独数组或结构体变量。要将表数据和等间距断点存储在
Simulink.LookupTable
对象中,请将断点设定设置为“等间距
”。使用第一个点和间距参数生成一组等间距断点。
注意
当断点设定设置为“
显式值
”或“等间距
”时,可以更改查找表对象生成的结构体中可调大小、断点和表条目的顺序。- 表
表数据的信息。您可以配置下列特性:
- 值
表数据。指定至少具有两个元素的数值向量或多维数组。
当断点设定属性设置为“
显式值
”时,值表数据与对话框底部可见的表格接口的内容相同。有关此表区域的详细信息,请参阅Edit Lookup Table Data with Lookup Table Spreadsheet。注意
仅当断点设定设置为“
等间距
”或“引用
”时,此属性才会出现。只要表达式返回数值向量或多维数组,您还可以使用包含数学运算符的表达式,如
sin(1:0.5:30)
。当您点击应用或确定时,对象执行表达式并使用结果设置此属性的值。当您将数据类型设置为
auto
时,要设置值,请使用类型化表达式(如single([1 2 3])
)或者使用fi
(Fixed-Point Designer) 构造函数来嵌入fi
对象。当您指定具有三个或更多维度的表数据时,值将数据显示为包含对
reshape
函数的调用的表达式。要编辑该数据中的值,请修改reshape
调用的第一个参数,该参数将所有值包含在一个串行化向量中。当沿某个维度添加或删除元素时,还必须更正表示修改后的维度的长度的参数。您可以通过在查找表模块中使用更直观的界面来编辑此数据。请参阅从 MATLAB 中导入查找表数据。
- 数据类型
表数据的数据类型。默认设置是“
自动
”,这意味着表数据将从您在值中指定的值获取数据类型。如果使用非类型化表达式(如[1 2 3]
)来设置值,则表数据使用数据类型double
。如果您指定类型化表达式(如single([1 2 3])
)或fi
对象,则表数据将使用由该表达式或对象指定的数据类型。也支持枚举数据类型。您可以显式指定整数数据类型、半精度数据类型、浮点数据类型、定点数据类型或数据类型表达式,例如
Simulink.AliasType
对象的名称。有关 Simulink® 中数据类型的详细信息,请参阅 Simulink 支持的数据类型。要决定如何控制
Simulink.LookupTable
和Simulink.Breakpoint
对象中表和断点数据的数据类型,请参阅Control Data Types of Lookup Table Objects (Simulink Coder)。- 维度
查找表数据的维度长度。
要使用符号维度,请指定字符向量。请参阅Implement Symbolic Dimensions for Array Sizes in Generated Code (Embedded Coder)。
- 最小值
表数据中元素的最小值。默认值为空,即
[]
。您可以指定实数数值。有关 Simulink 如何使用此属性的详细信息,请参阅指定模块参数的最小值和最大值。
- 最大值
表数据中元素的最大值。默认值为空,即
[]
。您可以指定实数数值。有关 Simulink 如何使用此属性的详细信息,请参阅指定模块参数的最小值和最大值。
- 存储的整数最小值
对于具有定点数据类型的
Simulink.LookupTable
对象,它是表数据中元素的最小值,指定为存储的整数值。该值派生自真实值最小。此属性仅在属性对话框中可用。- 存储的整数最大值
对于具有定点数据类型的
Simulink.LookupTable
对象,它是表数据中元素的最大值,指定为存储的整数值。该值派生自真实值最大。此属性仅在属性对话框中可用。- 单位
查找表中元素的物理单位。您可以指定文本,如
degC
。请参阅 Simulink 模型中的单位指定。- 字段名称
生成的代码中结构体字段的名称。如果将
Simulink.LookupTable
对象配置为以结构体形式显示在生成的代码中,则此字段存储表数据。默认值为Table
。要更改字段名称,请指定文本。- 描述
查找表的描述。您可以指定文本,如
This lookup table describes the action of a pump
。
- 断点
断点集信息。每行都是一个断点集。要配置更多断点集,请在表维数框中指定整数值。
对于断点集,您可以配置下列特性:
- 值
断点集的数据。指定至少具有二个元素的数值向量。
注意
仅当“
断点设定
”设置为“等间距
”或“引用
”时,此属性才会出现。当断点设定属性设置为“显式值
”时,值断点集数据与对话框底部可见的表格接口的内容相同。有关此表区域的详细信息,请参阅Edit Lookup Table Data with Lookup Table Spreadsheet。只要表达式返回数值向量,您还可以使用包含数学运算符的表达式,如
sin(1:0.5:30)
。当您点击应用或确定时,对象执行表达式并使用结果设置此属性的值。当您将数据类型设置为
auto
时,要设置值,请使用类型化表达式(如single([1 2 3])
)或者使用fi
(Fixed-Point Designer) 构造函数来嵌入fi
对象。您可以通过在查找表模块中使用更直观的界面来编辑此数据。请参阅从 MATLAB 中导入查找表数据。
- 数据类型
断点集的数据类型。默认设置是
auto
,这意味着断点集从您在值中指定的值获取数据类型。如果使用非类型化表达式(如[1 2 3]
)来设置值,则断点数据使用数据类型double
。如果您指定类型化表达式(如single([1 2 3])
)或fi
对象,则断点数据将使用由该表达式或对象指定的数据类型。您可以显式指定整数数据类型、浮点数据类型、定点数据类型或数据类型表达式,例如
Simulink.AliasType
对象的名称。有关 Simulink 中数据类型的详细信息,请参阅 Simulink 支持的数据类型。要决定如何控制
Simulink.LookupTable
和Simulink.Breakpoint
对象中表和断点数据的数据类型,请参阅Control Data Types of Lookup Table Objects (Simulink Coder)。- 维度
断点集的维度长度。
要使用符号维度,请指定字符向量。请参阅Implement Symbolic Dimensions for Array Sizes in Generated Code (Embedded Coder)。
- 最小值
断点集中元素的最小值。默认值为空,即
[]
。您可以指定实数数值。有关 Simulink 如何使用此属性的详细信息,请参阅指定模块参数的最小值和最大值。
- 最大值
断点集中元素的最大值。默认值为空,即
[]
。您可以指定实数数值。有关 Simulink 如何使用此属性的详细信息,请参阅指定模块参数的最小值和最大值。
- 单位
断点集中元素的物理单位。您可以指定文本,如
degF
。请参阅 Simulink 模型中的单位指定。- 字段名称
生成的代码中结构体字段的名称。此字段存储断点集数据。对于第一个断点集,默认值为
BP1
;对于第二个断点集,默认值为BP2
。要更改字段名称,请指定文本。- 可调大小名称
生成的代码中结构体字段的名称。此字段存储断点集的长度(元素的数量),生成的代码算法用它来确定表的大小。要在代码执行期间调整表的有效大小,请更改内存中此结构体字段的值。对于第一个断点集,默认名称为
N1
;对于第二个断点集,默认名称为N2
。要更改字段名称,请指定文本。此列仅在您选择支持可调大小时才会显示。
- 描述
断点集的描述。您可以指定文本,如
This breakpoint set represents the pressure input
。- 第一个点
等间距断点数据中的第一个点。当断点设定设置为“
等间距
”时,此参数可用。- 间距
等间距断点数据中各点之间的间距。当断点设定设置为“
等间距
”时,此参数可用。- 名称
存储此断点集信息的
Simulink.Breakpoint
对象的名称。仅当断点设定设置为“
引用
”时,此列才会出现。- 第一个点名称
存储第一个点的信息的
Simulink.Breakpoint
对象的名称。当断点设定设置为“等间距
”时,此参数可用。- 间距名称
存储间距信息的
Simulink.Breakpoint
对象的名称。当断点设定设置为“等间距
”时,此参数可用。
- 表和断点值编辑区域
表和断点数据的信息。您可以在相关联的文本框中输入 MATLAB 表达式,或直接在附带的表中添加数据。选择所需的数据类型:
选择表元素
使用标准键盘快捷方式,例如:
复制 - Ctrl+C
粘贴 - Ctrl+V
撤消 - Ctrl+Z
删除
重做 - Shift+Ctrl+Z
在表中输入或操作数据既简单又直观。像 Microsoft® Excel® 电子表格一样,您可以使用表进行以下操作:
“
表
” - 表数据。指定至少具有两个元素的数值向量或多维数组。只要表达式返回数值向量或多维数组,您还可以使用包含数学运算符的表达式,如
sin(1:0.5:30)
。当您按 Enter 键时,对象执行表达式并使用结果设置此属性的值。当您指定具有三个或更多维度的表数据时,表将数据显示为包含对
reshape
函数的调用的表达式。要编辑该数据中的值,请修改reshape
调用的第一个参数,该参数将所有值包含在一个串行化向量中。当沿某个维度添加或删除元素时,还必须更正表示修改后的维度的长度的参数。您可以在查找表模块中使用更直观的界面来编辑此数据。请参阅从 MATLAB 中导入查找表数据。
“
BP
”N - 断点集的数据。指定至少具有二个元素的数值向量。
只要表达式返回数值向量,您还可以使用包含数学运算符的表达式,如
sin(1:0.5:30)
。当您按 Enter 键时,对象执行表达式并使用结果设置此属性的值。您可以通过在查找表模块中使用更直观的界面来编辑此数据。请参阅从 MATLAB 中导入查找表数据。
代码生成
- 数据定义:存储类
生成的代码中结构体变量(端点设定设置为“
显式值
”或“等间距
”时)或数组变量(设置为“引用
”时)的存储类。变量存储表数据,如果变量是结构体,则存储断点集数据。默认设置是“自动
”。有关存储类的详细信息,请参阅模型接口元素的 C 代码生成配置 (Simulink Coder)。
如果您有 Embedded Coder®,则可以选择自定义存储类。有关自定义存储类的信息,请参阅使用 Struct 存储类将参数数据组织为结构体 (Embedded Coder)。
- 数据定义:标识符
生成的代码中结构体变量(断点设定设置为“
显式值
”或“等间距
”时)或数组变量(设置为“引用
”时)的替代名称。默认值为空,在这种情况下,生成的代码使用Simulink.LookupTable
对象的名称作为结构体或数组变量的名称。要设置标识符,请指定文本。要启用此属性,请将数据定义:存储类设置为“
自动
”以外的其他选项。- 数据定义:对齐
生成的代码中的数据对齐边界。为结构体或数组变量分配的数据的起始内存地址是您指定的值的倍数。默认值为
-1
,它允许代码生成器根据使用情况确定最佳对齐。指定不超过 128 并且是 2 的幂的正整数。有关使用数据对齐进行代码替换的详细信息,请参阅Data Alignment for Code Replacement (Embedded Coder)。
- 结构体类型定义:名称
结构体变量在生成的代码中使用的结构体类型的名称。默认值为空。请指定文本。
仅当断点设定设置为“
显式值
”或“等间距
”时,此属性才会出现。- 结构体类型定义:数据作用域
结构体类型定义的范围(从您的自定义代码导入或从生成的代码导出)。默认值为“
自动
”。当您选择“自动
”时:如果您没有在结构体类型定义:头文件框中指定值,则生成的代码将结构体类型定义导出到文件
。model
_types.h
是模型的名称。model
如果您在结构体类型定义:头文件框中指定值(如
myHdr.h
),则生成的代码从myHdr.h
中导入结构体类型定义。
要显式指定数据范围,请执行下列操作:
要将结构体类型定义从自定义代码导入生成的代码中,请选择“
已导入
”。要从生成的代码中导出结构体类型定义,请选择“
已导出
”。
将结构体类型定义的数据作用域设置为“
已导入
”或“已导出
”以避免潜在的 MISRA C:2012 违规。如果您没有在结构体类型定义:头文件框中指定值,则生成的代码将从
导入或向其导出类型定义。StructName
.h
是您使用属性结构体类型定义:名称指定的名称。StructName
仅当断点设定设置为“
显式值
”或“等间距
”时,此属性才会出现。- 结构体类型定义:头文件
包含结构体类型定义的头文件的名称。您可以从创建的头文件导入定义,或者将定义导出到生成的头文件中。要控制结构体类型的范围,请调整结构体类型定义:数据作用域属性的设置。
仅当断点设定设置为“
显式值
”或“等间距
”时,此属性才会出现。
高级
- 支持可调大小
指定在生成的代码中支持调整表的有效大小。在代码中,表示对象的结构体会针对每个断点向量增加一个字段。每个增加的字段存储对应断点向量的长度。您可以更改每个字段的值以调整表的有效大小。有关断点和表大小的详细信息,请参阅Breakpoint and Table Size Features in Lookup Tables。
仅当断点设定设置为“
显式值
”或“等间距
”时,此属性才会出现。选择允许此类型的多个实例具有不同表和断点大小会自动选择此属性。注意
如果通过将断点设定设置为“
引用
”在Simulink.Breakpoint
对象中存储断点数据,则要支持在生成的代码中调整表大小,请使用每个Simulink.Breakpoint
对象的支持可调大小属性。- 允许此类型的多个实例具有不同表和断点大小
指定将查找表对象配置为支持具有相同结构体类型的不同大小的表和断点。例如,假设两个一维查找表对象按如下所示配置,并且它们具有相同的结构体类型名称。
具有大小为 [1×4] 的表和断点的查找表
具有大小为 [1×6] 的表和断点的查找表
对于一个具有包含这些对象的两个模块的模型,要使该模型能够进行仿真,请选中允许此类型的多个实例具有不同表和断点大小复选框。对于使用 Simulink Coder™ 的代码生成,软件为这两个对象生成具有指针类型成员字段的一个通用结构体类型,以表示表和断点数据。
仅当断点设定设置为“
显式值
”或“等间距
”时,此属性才会出现。有关断点和表大小的详细信息,请参阅Breakpoint and Table Size Features in Lookup Tables。
属性
复制语义
句柄。要了解句柄类如何影响复制操作,请参阅复制对象。
示例
表示一维查找表
创建名为
LUTObj
的Simulink.LookupTable
对象。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';
您可以在 1-D Lookup Table 模块对话框中使用 LUTObj
。在该模块中,将数据设定设置为“查找表对象
”,并将名称设置为 LUTObj
。
要查看数据,请使用Edit Lookup Table Data with Lookup Table Spreadsheet中所述的属性对话框。
表示二维查找表
创建名为
LUTObj
的Simulink.LookupTable
对象。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';
您可以在 2-D Lookup Table 模块对话框中使用 LUTObj
。
要查看数据,请使用Edit Lookup Table Data with Lookup Table Spreadsheet中所述的属性对话框。
建立一个首值为 1 且所有值均匀间隔的第二断点集
要建立一个首值为 1 且所有值均匀间隔的第二断点集,请使用 Breakpoint 对象。
创建名为
LUTObj
的Simulink.LookupTable
对象。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: ''
控制查找表和断点集的代码生成
创建名为 LUTObj
的 Simulink.LookupTable
对象。
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
生成的代码在生成的头文件 myLUTHdr.h
中定义结构体类型 LUTStructType
。
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
限制
当子系统中的模块使用 Simulink.LookupTable
或 Simulink.Breakpoint
对象时,不能仅对子系统设置数据类型覆盖。此时,请对整个模型设置数据类型覆盖。