Main Content

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];
打开 n-D Lookup Table 模块对话框,然后在“表和断点”选项卡上输入以下参数:

  • 表数据: 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];
打开 n-D Lookup Table 模块对话框,然后在“表和断点”选项卡中输入以下参数:使用 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

  1. 创建名为 sl_customization.m 并包含以下内容的文件:

    function sl_customization(cm)
    cm.LookupTableEditorCustomizer.getTableConvertToCustomInfoFcnHandle{end+1} = ...
    @myGetTableConvertInfoFcn;
    end

    在此函数中:

    • 参量 cm 是自定义管理器对象的句柄。

    • 句柄 @myGetTableConvertInfoFcn 会添加到 cm.LookupTableEditorCustomizer.getTableConvertToCustomInfoFcnHandle 的元胞数组中的函数句柄列表中。您可以使用其句柄已添加到该元胞数组中的函数的任何字母数字形式的名称。

  2. 在该文件中,定义 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 指定的句柄。您可以为转换函数使用任何字母数字形式的名称。

  3. 在该文件中,定义 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
  4. sl_customization.m 放置到 MATLAB 搜索路径中。搜索路径中可以有多个名为 sl_customization.m 的文件。有关详细信息,请参阅具有多个自定义函数时的行为

  5. 在 MATLAB 命令提示符下刷新 Simulink 自定义内容。

    sl_refresh_customizations
  6. 为您的查找表模块打开查找表编辑器,然后选择文件 > 更新模块数据。点击以覆盖工作区变量 table3d_map_custom

  7. 在基础工作区中检查 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,查找表编辑器将报错。

相关主题