Main Content

get_param

获取参数名称和值

说明

示例

value = get_param(object,parameter) 为由 object 指定的目标对象返回指定参数 parameter 的值 value。目标对象可以是模型、子系统、库、模块、信号线、端口,或指定为路径或句柄的总线元素端口元素。

在调用此函数之前,请打开或加载相关的 Simulink® 模型、子系统或库。

示例

全部折叠

您可以使用具有以下输入参量的 get_param 函数来获取模块参数的值:

  • 模块句柄或包括模块名称的完整模块路径,例如 'myModel/mySubsystem/myblock'

  • 参数名称

在此示例中,您将获得由名为 Alpha-sensor Low-pass Filter 的 Transfer Function 模块指定的传递函数系数。

  • 该模块位于 slexAircraftExample 模型的 Controller 子系统中。

  • 传递函数分子的系数存储在 Numerator 参数中。传递函数分母的系数存储在 Denominator 参数中。

打开示例。然后,加载 slexAircraftExample 模型。

mdl = 'slexAircraftExample';
load_system(mdl)

获得传递函数系数。

path = [mdl,'/Controller/Alpha-sensor Low-pass Filter'];
num = get_param(path,'Numerator')
num = 
'[1]'
denom = get_param(path,'Denominator')
denom = 
'[Tal,1]'

当模块路径很长,并且您要获取多个参数时,可以考虑使用模块句柄。

您可以使用具有以下输入参量的 get_param 函数来获取模块参数的值:

  • 模块句柄或包括模块名称的完整模块路径,例如 'myModel/mySubsystem/myblock'

  • 参数名称

在此示例中,您将获得由名为 Alpha-sensor Low-pass Filter 的 Transfer Function 模块指定的传递函数系数。

  • 该模块位于 slexAircraftExample 模型的 Controller 子系统中。

  • 传递函数分子的系数存储在 Numerator 参数中。传递函数分母的系数存储在 Denominator 参数中。

打开示例。然后,使用 getSimulinkBlockHandle 函数获得模块句柄。要同时获取模块句柄和加载模型,请将 getSimulinkBlockHandle 函数的第二个参量指定为 true

path = 'slexAircraftExample/Controller/Alpha-sensor Low-pass Filter';
h = getSimulinkBlockHandle(path,true)
h = 489.0011

要获取参数值,请使用句柄指定模块。不要手动输入句柄的值。舍入导致 getSimulinkBlockHandle 函数在 MATLAB® 命令行窗口中输出的值可能与句柄值不匹配。在这种情况下,请将句柄赋给变量,然后使用变量名称来指定模块。在此示例中,值赋给名为 h 的变量。

num = get_param(h,'Numerator')
num = 
'[1]'
denom = get_param(h,'Denominator')
denom = 
'[Tal,1]'

您可以使用具有以下输入参量的 get_param 函数来获取模块参数的值:

  • 模块句柄或包括模块名称的完整模块路径,例如 'myModel/mySubsystem/myblock'

  • 参数名称

此示例说明如何获取参数名称。

假设您要获取 slexAircraftExample 模型中名为 Alpha-sensor Low-pass Filter 的 Transfer Function 模块的传递函数系数。为此,您必须获取存储传递函数系数的参数的名称。

打开示例。

获取名为 Alpha-sensor Low-pass Filter 的 Transfer Function 模块的句柄。要同时获取模块句柄和加载模型,请将 getSimulinkBlockHandle 函数的第二个参量指定为 true

path = 'slexAircraftExample/Controller/Alpha-sensor Low-pass Filter';
h = getSimulinkBlockHandle(path,true);

使用 get_param 函数获取名为 Alpha-sensor Low-pass Filter 的 Transfer Function 模块的所有模块参数的名称。

get_param(h,'DialogParameters')
ans = struct with fields:
                    Numerator: [1x1 struct]
                  Denominator: [1x1 struct]
          ParameterTunability: [1x1 struct]
            AbsoluteTolerance: [1x1 struct]
    ContinuousStateAttributes: [1x1 struct]

输出显示传递函数系数由 Numerator 参数和 Denominator 参数指定。使用这些参数名称可获取传递函数的分子和分母中的系数。

num = get_param(h,'Numerator');
denom = get_param(h,'Denominator')
denom = 
'[Tal,1]'

您可以使用具有以下输入参量的 get_param 函数来获取模块参数的值:

  • 模块句柄或包括模块名称的完整模块路径,例如 'myModel/mySubsystem/myblock'

  • 参数名称

此示例说明如何获取完整模块路径和名称。

获取路径和名称

假设您要获取 slexAircraftExample 模型中充当滤波器的所有 Transfer Function 模块的传递函数系数。为此,您必须获取模型中充当滤波器的所有 Transfer Function 模块的名称和路径。

打开示例。然后,加载 slexAircraftExample 模型。

mdl = 'slexAircraftExample';
load_system(mdl)

使用 find_system 函数获取 slexAircraftExample 模型中所有模块的路径。

paths = find_system(mdl,'Type','Block');

当没有指定搜索深度时,find_system 函数从模型层次结构的指定级别以及指定级别包含的所有更低级别中查找所有模块。由于 slexAircraftExample 是模型层次结构的顶层,因此,该命令将返回模型层次结构中每个级别的所有模块。

如果您知道滤波器在哪个子系统中,则也可以使用 get_param 函数。get_param 函数只返回位于模型层次结构的指定级别的模块的路径,而不返回位于指定级别包含的任何子系统中的模块的路径。在此示例中,滤波器位于 Controller 子系统的顶层。

paths=get_param(mdl+'/Controller','blocks');

按关键字过滤路径和名称

slexAircraftExample 模型中,充当滤波器的 Transfer Function 模块在其模块名称中包含单词 filterFilter。一旦有了模块路径列表,就可以获取包含单词 filterFilter 的模块路径。

filterpaths = paths(contains(paths,{'Filter','filter'}));

获取模块参数值

使用模块名称可获取传递函数系数。例如,使用以下命令获取 Alpha-sensor Low-Pass 滤波器的传递函数系数。

num = get_param(filterpaths{1},'Numerator');
denom = get_param(filterpaths{1},'Denominator')
denom = 
'[Tal,1]'

获取 vdp 模型中的模块的类型列表。

打开示例。然后,加载 vdp 模型。

load_system('vdp')

获取 vdp 模型的模块路径和名称列表。

blockpaths = find_system('vdp','Type','Block');

对于 vdp 模型中的每个模块,获取 BlockType 参数的值。

blocktypes = get_param(blockpaths,'BlockType')
blocktypes = 12x1 cell
    {'CustomCallbackButton'}
    {'Constant'            }
    {'SubSystem'           }
    {'Product'             }
    {'Scope'               }
    {'Math'                }
    {'Sum'                 }
    {'Sum'                 }
    {'Integrator'          }
    {'Integrator'          }
    {'Outport'             }
    {'Outport'             }

您可以使用具有以下输入参量的 get_param 函数来获取模型参数的值:

  • 模型名称

  • 模型参数名称

IntegerOverflowMsg 参数的值指示模型如何处理整数溢出。该模型可以不输出任何消息、警告消息或错误消息。

假设您要比较两个模型的 IntegerOverflowMsg 参数的值。

打开示例。然后,加载 vdpf14 模型。

load_system({'vdp','f14'})

获取 vdpf14 模型的 IntegerOverflowMsg 参数的值。

vdpval = get_param('vdp','IntegerOverflowMsg');
f14val = get_param('f14','IntegerOverflowMsg');

当发生整数溢出时,vdp 模型输出警告,而 f14 模型不输出任何消息。

使用 strcmp 函数比较两个参数值。

strcmp(vdpval,f14val)
ans = logical
   0

strcmp 函数输出 0,这表明这两个模型的 IntegerOverflowMsg 参数的值不同。

您可以使用具有以下输入参量的 get_param 函数来获取模型参数的值:

  • 模型名称

  • 模型参数名称

假设您要比较两个模型的消息参数值,以确保在无消息、有警告消息和有错误消息的情况下处理的一致性。但是,您并不知道所有消息参数的名称。

打开示例。然后,加载 vdpf14 模型。

load_system({'vdp','f14'})

获取所有模型参数的列表。

params = get_param('vdp','ObjectParameters');

该函数返回一个结构体。创建一个包含模型参数名称的元胞数组。

names = fieldnames(params);

消息参数以缩写 Msg 结尾。获取包含缩写 Msg 的所有模型参数名称。

msgnames = names(contains(names,'Msg'));

比较 vdpf14 模型的消息参数值。输出具有不同值的参数的名称。

vdpval = cell(1,length(msgnames));
f14val = vdpval;

for i=1:length(msgnames)
    vdpVal{i} = get_param('vdp',msgnames{i});
    f14Val{i} = get_param('f14',msgnames{i});
    if(strcmp(vdpVal{i},f14Val{i})<1)
        disp(msgnames{i})
    end
end
IntegerOverflowMsg
IntegerSaturationMsg

两个消息参数具有不同的值。

要获取以下任何项的选项列表,请使用 get_param 函数和关键字 options

  • 模块参数

  • 模型参数

  • 对象属性,例如注释的水平对齐选项

此示例说明如何获取模块参数、封装参数和模型参数的选项列表。

获取模块参数的选项列表

打开示例。然后,加载 vdp 模型。

load_system('vdp')

获取 Square 模块的 Output signal type 参数的选项列表。

funcoptions = get_param('vdp/Square','options@OutputSignalType')
funcoptions = 1x3 cell
    {'auto'}    {'real'}    {'complex'}

获取封装子系统参数的选项列表

获取封装 Subsystem 模块 MuRead/Write permissions 参数的选项列表。

get_param('vdp/Mu','options@Permissions')
ans = 1x3 cell
    {'ReadWrite'}    {'ReadOnly'}    {'NoReadOrWrite'}

获取模型参数的选项列表

获取名为 AlgebraicLoopMsg 的模型参数的选项列表。

get_param('vdp','options@AlgebraicLoopMsg')
ans = 1x3 cell
    {'none'}    {'warning'}    {'error'}

获取注释的选项列表

vdp 模型中查找注释。

h = find_system(gcs,'FindAll','on','Type','annotation');

输出与矩阵 h 中的句柄对应的注释文本。

get_param(h,'PlainText')
ans = 3x1 cell
    {'Copyright 2004-2022 The MathWorks, Inc.'}
    {'Van der Pol Equation'                   }
    {'x'' - µ(1-x^2) x' + x = 0'              }

获取标题注释 'Van der Pol Equation' 的水平对齐的选项列表。

get_param(h(2),'options@HorizontalAlignment')
ans = 1x3 cell
    {'left'}    {'center'}    {'right'}

您可以使用带关键字 valueget_param 函数来访问封装模块参数的值。

打开示例。然后,打开 vdp 模型。

open_system('vdp')

获取封装 Subsystem 模块 Mugain 参数的值。

get_param('vdp/Mu','value@gain')
ans = 1

在模型中,双击模块。

在封装上,移动用于更改 gain 参数的滑块。

再次获取 gain 参数的值。

get_param('vdp/Mu','value@gain')
ans = 1

获取全局参数的名称和值。

获取全局参数名称的列表

通过找出 Simulink® 根参数与模型参数名称之间的区别,获取全局参数名称的列表。

打开示例。然后,加载 vdp 模型。

load_system('vdp')

获取所有模型参数的名称。

modelparamnames = fieldnames(get_param('vdp','ObjectParameters'));

获取 Simulink 根参数名称的列表。

rootparamnames = fieldnames(get_param(0,'ObjectParameters'));

通过查看根参数名称列表和模型参数名称列表之间的差异来获取全局参数的名称。

globalparamnames = setdiff(rootparamnames,modelparamnames);

获取全局参数值

获取全局参数的值。

globalparamval = get_param(0,'CurrentSystem')
globalparamval = 
'vdp'

输入参数

全部折叠

对象或根的名称、路径或句柄,指定为字符向量、字符向量元胞数组、字符串数组、数值标量或 0

如何指定目标对象取决于其类型。

  • 模型 - 模型名称或句柄。

  • 子系统 - 系统名称或句柄。

  • 库 - 库名称或句柄。

  • 模块 - 模块路径或句柄。

  • 信号线 - 信号线句柄。

  • 端口 - 端口句柄。

  • 总线元素端口元素 - 具有元素标签的模型组件的模块路径。元素可以是端口的任何元素,例如顶层总线、嵌套总线、信号或消息。

要用一个公共参数指定多个对象,请使用字符向量元胞数组、字符串数组或句柄数组。所有指定的对象都必须具有指定的参数,否则该函数将返回错误。

指定 0 以获取根参数名称,包括当前 Simulink 会话的全局参数和模型参数。

  • 全局参数包括编辑器预设项和 Simulink Coder™ 参数。

  • 模型参数包括配置参数、Simulink Coder 参数和 Simulink Code Inspector™ 参数。

示例: 'vdp/Mu'

示例: 'mymodel/Subsystem1/Out1.nonsinusoidal.saw'

提示

  • 如果对同一模块多次调用 get_param,请用数值句柄指定该模块。这种方法比对 get_param 使用完整模块路径更高效。使用 getSimulinkBlockHandle 获取模块句柄。

  • 不要尝试手动指定句柄的数字,例如 5.007,因为您通常需要指定的位数多于 MATLAB® 显示的位数。要将句柄赋给变量并使用该变量名称。

数据类型: char | string | double

参数、属性或特性名称,指定为字符向量或字符串标量。有些名称区分大小写。

下表显示特例。

指定的参数结果
'ObjectParameters'

结构体数组中作为单独字段的指定对象的参数名称。

'DialogParameters'

结构体数组中作为单独字段的模块对话框参数名称。如果模块有封装,则函数返回封装参数。

有关参数、属性或特性的信息,请参阅对应参考页上的编程使用信息。例如:

示例: 'ObjectParameters'

示例: 'Solver'

示例: 'SimulationCommand'

示例: 'Position'

示例: 'NameLocation'

数据类型: char | string

输出参量

全部折叠

参数值,以参数类型确定的格式返回。如果您指定多个对象,则输出是元胞数组。

下表显示特例。

指定的参数结果
'ObjectParameters'

结构体数组中作为单独字段的指定对象的参数名称。

'DialogParameters'

结构体数组中作为单独字段的模块对话框参数名称。如果模块有封装,则函数返回封装参数。

如果您通过指定 get_param(0,'ObjectParameters') 来获取根参数,则输出 value 是一个结构体数组,根参数名称在结构体中为单独的字段。每个参数字段都是一个结构体,其中包含以下字段:

  • 类型 - 参数类型值包括 'boolean''string''int''real''point''rectangle''matrix''enum''ports''list'

  • 枚举 - 枚举字符向量值的元胞数组,仅适用于 'enum' 参数类型。

  • 属性 - 定义参数属性的字符向量元胞数组。值包括 'read-write''read-only''read-only-if-compiled''write-only''dont-eval' 'always-save''never-save''nondirty''simulation'

版本历史记录

在 R2006a 之前推出