从 MATLAB 中导入查找表数据
您可以通过在对话框的表和断点选项卡上引用 MATLAB 工作区中变量的表和断点数据,以导入这些数据。下面的示例说明如何从 MATLAB 工作区中导入标准格式与非标准格式的数据,以及如何将数据导出到工作区中。
导入标准格式的查找表数据
假定您在 n-D Lookup Table 模块中指定一个三维查找表。
创建工作区变量,以用作查找表的断点和表数据。
table3d_map = zeros(2,4,3); table3d_map(:,:,1) = [ 1 2 3 4; 5 6 7 8]; table3d_map(:,:,2) = [ 11 12 13 14; 15 16 17 18]; table3d_map(:,:,3) = [ 111 112 113 114; 115 116 117 118]; bp3d_z =[ 0 10 20]; bp3d_x =[ 0 10 20 30]; bp3d_y =[ 400 6400];
表数据: table3d_map
断点 1: bp3d_y
断点 2: bp3d_x
断点 3: bp3d_z
点击编辑表和断点以打开查找表编辑器,并显示工作区变量中的数据。
传播标准格式的查找表数据
当您更改查找表数据之后,可以使用文件 > 更新模块数据,将所做的更改传播回从中导入数据的 MATLAB 工作区变量。
您还可以使用查找表编辑器编辑 Simulink.LookupTable
的表数据和断点向量以及 Simulink.Breakpoint
对象的断点向量,并将更改传播回该对象。
假设您更改了在导入标准格式的查找表数据中从 MATLAB 工作区变量中导入的查找表变量。例如,将 (1,1,1) 中的数据的值从 1
更改为 33
。要将此更改传播回工作区中的 table3d_map
,请在查找表编辑器工具条中,点击应用。
导入非标准格式的查找表数据
假定您在 n-D Lookup Table 模块中指定一个三维查找表。创建工作区变量,以用作查找表的断点和表数据。表数据的变量 table3d_map_custom
是一个二维矩阵。
table3d_map_custom = zeros(6,4); table3d_map_custom = [ 1 2 3 4; 5 6 7 8; 11 12 13 14; 15 16 17 18; 111 112 113 114; 115 116 117 118]; bp3d_z =[ 0 10 20]; bp3d_x =[ 0 10 20 30]; bp3d_y =[ 400 6400];
reshape
命令,将 table3d_map_custom
转换为三维矩阵作为表数据输入。
表数据:
reshape(table3d_map_custom,[2,4,3])
断点 1:
bp3d_y
断点 2:
bp3d_x
断点 3:
bp3d_z
点击编辑表和断点以打开查找表编辑器,并显示工作区变量中的数据。
在查找表编辑器中将 1 更改为 33。查找表编辑器通过维护表副本来记录您所做的更改。要从 MATLAB® 工作区还原变量值,请在查找表编辑器工具条中,点击重新加载。要使用编辑后的数据更新 MATLAB 工作区变量,请在查找表编辑器工具条中,点击应用。您不能将更改传播到包含 n-D Lookup Table 模块的非标准表数据的工作区变量 table3d_map_custom
。要传播更改,必须注册一个驻留在 MATLAB 搜索路径中的自定义函数。有关详细信息,请参阅传播非标准格式的查找表数据。
传播非标准格式的查找表数据
此示例说明如何将来自查找表编辑器的更改传播到非标准格式的工作区变量。假设在导入非标准格式的查找表数据中,您的 Simulink® 模型有一个三维查找表,它从二维工作区变量 table3d_map_custom
中获取表数据。在查找表编辑器中更新查找表,然后使用自定义函数将这些更改传播回 table3d_map_custom
。
创建名为
sl_customization.m
并包含以下内容的文件:function sl_customization(cm) cm.LookupTableEditorCustomizer.getTableConvertToCustomInfoFcnHandle{end+1} = ... @myGetTableConvertInfoFcn; end
在此函数中:
参数
cm
是自定义管理器对象的句柄。句柄
@myGetTableConvertInfoFcn
会添加到cm.LookupTableEditorCustomizer.getTableConvertToCustomInfoFcnHandle
的元胞数组中的函数句柄列表中。您可以使用其句柄已添加到该元胞数组中的函数的任何字母数字形式的名称。
在该文件中,定义
myGetTableConvertInfoFcn
函数。function blkInfo = myGetTableConvertInfoFcn(blk,tableStr) blkInfo.allowTableConvertLocal = true; blkInfo.tableWorkSpaceVarName = 'table3d_map_custom'; blkInfo.tableConvertFcnHandle = @myConvertTableFcn; end
myGetTableConvertInfoFcn
函数返回包含三个字段的blkInfo
对象。allowTableConvertLocal
- 允许为模块转换表数据。tableWorkSpaceVarName
- 指定具有非标准表格式的工作区变量的名称。tableConvertFcnHandle
- 指定转换函数的句柄。
当
allowTableConvertLocal
设置为true
时,该模块的表数据转换为名称与tableWorkSpaceVarName
匹配的工作区变量的非标准格式。转换函数对应于tableConvertFcnHandle
指定的句柄。您可以为转换函数使用任何字母数字形式的名称。在该文件中,定义
myConvertTableFcn
函数。此函数将大小为行 * 列 * 高的三维查找表转换为大小为 (行*高) * 列的二维变量。% Converts 3-dimensional lookup table from Simulink format to % nonstandard format used in workspace variable function cMap = myConvertTableFcn(data) % Determine the row and column number of the 3D table data mapDim = size(data); numCol = mapDim(2); numRow = mapDim(1)*mapDim(3); cMap = zeros(numRow, numCol); % Transform data back to a 2-dimensional matrix cMap = reshape(data,[numRow,numCol]); end
将
sl_customization.m
放置到 MATLAB 搜索路径中。搜索路径中可以有多个名为sl_customization.m
的文件。有关详细信息,请参阅具有多个自定义函数时的行为。在 MATLAB 命令提示符下刷新 Simulink 自定义内容。
sl_refresh_customizations
为您的查找表模块打开查找表编辑器,然后选择文件 > 更新模块数据。点击是以覆盖工作区变量
table3d_map_custom
。在基础工作区中检查
table3d_map_custom
的值。table3d_map_custom = 33 2 3 4 5 6 7 8 11 12 13 14 15 16 17 18 111 112 113 114 115 116 117 118
查找表编辑器中的更改已传播到工作区变量。
注意
如果您不覆盖工作区变量 table3d_map_custom
,系统会提示您将其替换为数值数据。点击是将表数据字段中的表达式替换为数值数据。如果您不希望在查找表编辑器中对表数据所做的更改显示在模块对话框中,请点击否。
具有多个自定义函数时的行为
在 MATLAB 会话启动时,Simulink 会加载路径中的每个 sl_customization.m
自定义文件并执行 sl_customization
函数。执行每个函数时会为该会话创建自定义内容。
当您在查找表编辑器中选择文件 > 更新模块数据时,编辑器会检查 cm.LookupTableEditorCustomizer.getTableConvertToCustomInfoFcnHandle
的元胞数组中的函数句柄列表。如果该元胞数组中包含一个或多个函数句柄,将由 allowTableConvertLocal
属性决定在查找表编辑器中所做的更改是否可以传播。
如果此属性值设置为
true
,则表数据转换为工作区变量中的非标准格式。如果此属性值设置为
false
,则表数据不会转换为工作区变量中的非标准格式。如果此属性值设置为
true
而另一个自定义函数将其指定为false
,查找表编辑器将报错。