Main Content

设置模块参数值

模块的数值参数决定它们计算输出值的方式。要控制模块执行的计算,您可以指定参数值。例如,Gain 模块有一个增益参数,Transfer Fcn 模块有多个表示传递函数系数的参数。

您可以使用数字、变量和表达式设置模块参数值。请基于您的建模目的选择一种方式。例如,您可以:

  • 通过创建变量在模块和模型之间共享参数值。

  • 通过创建参数对象来控制参数特征,如数据类型和维度。

  • 使用数学表达式以代码的形式为算法建模。

使用模型数据编辑器(在建模选项卡上点击模型数据编辑器)中的参数选项卡、属性检查器(在建模选项卡上的设计下点击属性检查器)或“模块”对话框,设置模块参数。有关详细信息,请参阅Add Blocks to Models。要设置模块采样时间,请参阅指定采样时间

提示

您可以使用模型资源管理器一次对许多模块参数值进行批量更改。有关详细信息,请参阅模型资源管理器

以编程方式访问参数值

要以编程方式访问模块参数值,请使用 get_paramset_param 函数。您可以使用此方法:

  • 以编程方式构建模型。

  • 以编程方式进行模型仿真时,在仿真运行期间调整参数值。

要使用脚本在仿真运行之间扫描参数值,请使用 Simulink.SimulationInput 对象,而不是 get_paramset_param 函数。请参阅优化、估计和扫描模块参数值

假设您创建一个名为 myModel 的模型,其中包含一个名为 My ConstantConstant 模块。接下来,您使用模块对话框将常量值参数设置为 15。要以编程方式返回参数值,请使用 get_param 函数。您指定模块路径和等效的编程参数名称 Value

paramValue = get_param('myModel/My Constant','Value')
paramValue =

15

要以编程方式更改此值(例如,更改为 25),请使用 set_param 函数。使用字符向量 '25' 作为该函数的输入。

set_param('myModel/My Constant','Value','25')

有关编程模块参数和属性的详细信息,请参阅Programmatically Specify Block Parameters and Properties

有关编程仿真的详细信息,请参阅以编程方式运行仿真

要避免使用 get_paramset_param 函数,可以使用 MATLAB® 变量或 Simulink.Parameter 对象的名称作为参数值,然后在命令提示符下更改该变量或对象的值。请参阅通过创建变量来共享和重用模块参数值

指定参数值

目的模块参数值描述

将参数值存储在模型文件中。

2.3

[1.2 2.3 4.5; 7.9 8.7 6.5]

2 + 3i

字面数值。指定标量、向量、矩阵或多维数组。使用 i 指定复数值。

  • 访问参数值而无需定位或识别模型中的模块。

  • 更改参数值而无需修改模型文件。

  • 在模块之间或模型之间共享参数值。

  • 在扫描或调优参数值时通过特定名称来标识参数。

myVar

存在于工作区中的 MATLAB 变量。

有关详细信息,请参阅 通过创建变量来共享和重用模块参数值

  • 避免工作区变量之间发生名称冲突。

  • 使用层次结构和有意义的名称组织参数值。

  • 减少模型使用的工作区变量数。

myParam.a.SpeedVect

参数结构体的字段。

有关详细信息,请参阅 在结构体中组织相关的模块参数定义

使用矩阵或数组变量的一部分。例如,设置 n-D Lookup Table 模块的参数。

myMatrixParam(:,2)

索引操作。

  • 独立于参数值来定义参数特征,如数据类型、复/实性、单位、允许使用的值范围和维度。

  • 定义带有自定义说明文档的系统常量。

  • 在生成的代码中创建可调参数。

  • 将变量的值设置为涉及常量和其他变量的数学表达式。

myParam

参数对象。

有关详细信息,请参阅 使用参数对象

  • 将参数值表示为已知物理常数之间的数学关系,而不是表示为不可识别的文本数字。

  • 减少模型中的模块填充。

  • 通过使用代码(而不是模块)对模糊或平凡计算进行建模。

  • 使用 MATLAB 运算符和函数执行计算。

  • 编写计算参数值的自定义 MATLAB 函数。

5^3.2 - 1/3

myParam * myOtherparam + sin(0.78*pi)

myFun(15.23)

表达式或自定义函数。

有关详细信息,请参阅 使用数学表达式、MATLAB 函数和自定义函数

通过使用非 double 数据类型指定模块参数值。

15.23

single(15.23)

myParam

定型或非定型表达式、MATLAB 数值变量或参数对象。

有关控制参数数据类型的详细信息,请参阅Control Block Parameter Data Types

使用参数对象

参数对象是指 Simulink.Parameter 对象以及您创建的子类的对象。参数对象存在于工作区中,例如,在基础工作区或数据字典中。

您可以使用参数对象来定义系统常量。例如,使用参数对象表示地球的半径。使用对象的属性指定物理单位并说明值的用途。

创建参数对象,以便为模型的代码生成做好准备。您可以配置参数对象,作为生成代码中的可调全局变量。您还可以通过对象控制参数数据类型。

要在模型中创建并使用参数对象,请参阅数据对象。有关使用变量设置模块参数值的信息,请参阅通过创建变量来共享和重用模块参数值

使用数学表达式、MATLAB 函数和自定义函数

您可以为调用 MATLAB 函数和运算符(如 sinmax)的表达式设置模块参数值。还可以调用 MATLAB 路径上您自己编写的自定义函数。

假设您的模块算法中有一段代码使用变量来计算一个常量值,该值会在算法的其余部分中使用。您可以通过创建多个模块来执行计算。

更好的办法是创建一个 Constant 模块,它使用以 MATLAB 代码编写的表达式。这样不仅可以减小模块算法的规模,还可以提高可读性。

您可以使用一个表达式而不是多个模块为算法中的复杂部分建模。要处理现有信号,可在算法模块中使用数学表达式作为参数的值,例如 Gain 模块的增益参数。

使用表达式,还可以调用您的自定义函数以设置模块参数值。假设您编写了一个 MATLAB 函数,它可通过接受一个输入数字来计算一个控制算法的最佳 P、I 和 D 参数。

您可以通过使用该函数来设置参数值,对 PID Controller 模块进行参数化。

要充分利用表达式,请注意以下提示:

  • 如果使用变量和参数对象,则可以对变量和对象所代表的真实数量之间的代数关系进行显式建模。按照使用数学表达式设置变量值中所述在参数对象中使用表达式。

  • 在编辑模块参数值中的表达式时,要导航到有关某函数的文档,请使用参数值旁边的 按钮。您还可以导航到自定义函数的源代码。

其他建模目的注意事项

请根据您的建模目的选择设置模块参数值的方式。

目的功能或产品最佳做法
快速运行多个仿真。Simulink.SimulationInput 对象和 sim 函数使用变量或参数对象设置模块参数值。此方法可帮助您为参数指定有意义的名称,并避免不得不在模型中识别或定位模块。请参阅优化、估计和扫描模块参数值
在测试过程中扫描参数值。Simulink® Test™使用变量或参数对象设置模块参数值。使用迭代和参数覆盖运行多个测试。请参阅参数覆盖 (Simulink Test)测试迭代 (Simulink Test)
估计并优化参数值。Simulink Design Optimization™

使用变量或参数对象设置模块参数值。

要估计或优化使用非 double 数据类型的参数,请使用参数对象将值与数据类型相分离。

对于参数估计,请参阅Parameter Estimation (Simulink Design Optimization)。对于响应优化,请参阅Optimize Model Response (Simulink Design Optimization)

从模型中生成代码。通过 SIL/PIL 或外部模式仿真对外部程序进行仿真。Simulink Coder™

使用参数对象设置模块参数值。这种方式有助于您在生成的代码中声明和识别可调参数,还有助于您控制参数数据类型。请参阅在生成的代码中创建可调标定参数 (Simulink Coder)

当您使用表达式设置模块参数值时,避免使用导致生成的代码失去可调性的运算符和函数。请参阅Tunable Expression Limitations (Simulink Coder)

另请参阅

相关主题