Main Content

set_param

设置 Simulink 参数值

说明

示例

set_param(object,parameter1,value1,...,parameterN,valueN) 将指定的 Simulink® 参数 parameter 设置为由 object 指定的目标对象的指定值 value。目标对象可以是模型、子系统、库、模块、信号线、端口或总线元素端口元素。

要为目标对象设置多个参数值,请使用多个名称-值参量调用 set_param 函数一次,而不是为每个参数单独调用该函数。用一次函数调用设置多个参数的方法很高效,因为一次调用只计算一次参数。如果任何参数名称或值无效,则函数不会设置任何参数。

示例

全部折叠

您可以使用具有以下输入参量的 set_param 函数来设置模块参数的值:

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

  • 参数名称

  • 要赋给参数的新值

有关如何获取模块路径的信息,请参阅获取模块路径和名称

有关如何获取参数名称的信息,请参阅获取模块参数名称

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

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

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

  • 要赋给分子的新值是 1.2。要赋给分母的新值是 [0.8*Tal,1],其中 Tal 是变量。

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

mdl = 'slexAircraftExample';
load_system(mdl)

设置传递函数系数。

path = [mdl,'/Controller/Alpha-sensor Low-pass Filter'];
set_param(path,'Numerator','1.2','Denominator','[0.8*Tal,1]');

要检查 NumeratorDenominator 参数的值,请使用 get_param 函数。

num = get_param(path,'Numerator')
num = 
'1.2'
denom = get_param(path,'Denominator')
denom = 
'[0.8*Tal,1]'

当模块路径很长并且您要设置多个参数时,请考虑使用模块句柄。

您可以使用具有以下输入参量的 set_param 函数来设置模块参数的值:

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

  • 参数名称

  • 要赋给参数的新值

有关如何获取模块路径的信息,请参阅获取模块路径和名称

有关如何获取参数名称的信息,请参阅获取模块参数名称

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

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

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

  • 要赋给分子的新值是 1.2。要赋给分母的新值是 [0.8*Tal,1],其中 Tal 是变量。

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

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

要设置参数值,请使用句柄指定模块。句柄包含双精度值。不要尝试手动输入句柄的数字,因为需要指定的位数可能多于 MATLAB® 显示的位数。而要将该句柄赋给变量,并使用该变量名称指定模块。

set_param(h,'Numerator','1.2','Denominator','[0.8*Tal,1]');

您可以使用具有以下输入参量的 set_param 函数来设置模型参数的值:

  • 模型名称

  • 参数名称

  • 要赋给参数的新值

有关如何获取模型参数名称的信息,请参阅获取模型参数名称

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

load_system('f14')

f14 模型的求解器设置为 ode15s,并将停止时间设置为 3000 秒。

set_param('f14','Solver','ode15s','StopTime','3000')

要检查 SolverStopTime 参数的值,请使用 get_param 函数。

solver = get_param('f14','Solver')
solver = 
'ode15s'
stoptime = get_param('f14','StopTime')
stoptime = 
'3000'

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

open_system('f14')

获取名为 Pilot 的 Signal Generator 模块的句柄。

h = getSimulinkBlockHandle('f14/Pilot');

获取模块的位置。

pos = get_param(h,'Position')
pos = 1×4

    15    18    55    42

该函数返回模块位置,指定为以像素度量的坐标向量:[left top right bottom]

右移模块。

pos = [pos(1)+20 pos(2) pos(3)+20 pos(4)];
set_param(h,'Position',pos);

上移模块。

pos = [pos(1) pos(2)-20 pos(3) pos(4)-20];
set_param(h,'Position',pos);

水平拉伸模块。

pos = [pos(1)/4 pos(2) pos(3) pos(4)];
set_param(h,'Position',pos);

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

open_system('f14')

该模型有一个名为 Pilot 的 Signal Generator 模块。将模块名称移至模块的顶部。

set_param('f14/Pilot','NameLocation','top')

输入参数

全部折叠

对象的名称、路径或句柄,指定为字符向量、字符串标量或数值标量。

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

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

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

  • 库 - 库名称或句柄。

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

  • 信号线 - 信号线句柄。

  • 端口 - 端口句柄。

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

示例: 'vdp/Mu'

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

提示

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

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

数据类型: char | string | double

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

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

要获取目标对象的所有参数,请使用带 'ObjectParameters' 选项的 get_param 函数。某些返回的参数可能仅供内部使用。

示例: 'Solver'

示例: 'SimulationCommand'

示例: 'Position'

示例: 'NameLocation'

数据类型: char | string

参数值,指定为参数类型决定的格式。一些参数值区分大小写。值通常是字符向量或字符串标量,但也可以是数值标量、数组和其他类型。

许多模块参数值指定为字符向量或字符串标量。但 Position(它指定为向量)和 UserData(它可以是任何数据类型)是两个例外。

限制

  • 如果您使用 matlab -nodisplay 启动会话,则不能使用 set_param 运行仿真。-nodisplay 模式不支持使用 set_param 进行仿真。改用 sim 函数。

  • 当使用 set_param 函数重命名模块或信号时,以下名称无效:空名称、仅包含换行符的名称以及以 / 开头或结尾的名称。

提示

在 MATLAB 工作区中设置参数后,要查看模型中的变化,请更新图形。

set_param(model,'SimulationCommand','Update')

版本历史记录

在 R2006a 之前推出