通过定义参数变量在多个 MATLAB Function 模块中使用数据
如果您要在一个 MATLAB Function 模块的多个实例中访问相同的数据,请定义参数变量。您可以将参数变量赋值给工作区中的数据,或创建模块封装并将变量赋给封装参数。
将参数变量赋给工作区数据
MATLAB Function 模块参数变量从工作区变量或 Simulink.Parameter 对象中获取其值。在创建参数变量之前,必须在以下空间之一创建工作区变量或 Simulink.Parameter 对象:
Simulink® 模型工作区。
数据字典。有关详细信息,请参阅什么是数据字典?
MATLAB® 工作区。如果关闭 MATLAB,必须重新定义数据。
您可以直接在工作区中创建工作区变量或对象,将变量加载到 MAT 文件或 MATLAB 文件中,或使用自定义 MATLAB 代码创建变量。下表显示不同空间之间的差异:
| 数据存储空间 | 可见性 |
|---|---|
| 模型工作区 | 仅在模型范围内可见 |
| 数据字典 | 与指定的 Simulink 模型共享 |
| 基础工作区 | 适用于所有 Simulink 模型。 |
有关详细信息,请参阅确定在何处存储 Simulink 模型的变量和对象。
在创建工作区变量或对象后,您可以通过使用符号窗格和属性检查器 (自 R2022a 起)在 MATLAB Function 模块中创建参数变量:
打开该 MATLAB Function 模块。
在 MATLAB Function 模块编辑器的函数选项卡中,点击编辑数据。

在符号窗格中,点击创建数据按钮
。选择该变量并设置作用域属性。在类型列中,点击类型图标并选择参数数据。符号窗格指示变量的作用域设置为参数数据图标为
的参数。在名称列中,将参数变量的名称设置为工作区变量或
Simulink.Parameter对象的名称。
有关在 MATLAB Function 模块中定义变量的详细信息,请参阅Create and Define MATLAB Function Block Variables。
MATLAB Function 模块参数变量示例
此示例使用一个 MATLAB Function 模块,其中包含一个参数变量。在此示例中,基础工作区中的变量定义参数值的值。

MATLAB® 函数将参数变量 const 乘以 Sine Wave 模块信号的值。打开 MATLAB Function 模块可查看代码。
function y = fcn(u, const)
y = const*u;
当模型加载时,它通过运行 PreLoadFnc 回调来定义基础工作区变量 const。要查看回调,请在建模选项卡中,点击模型设置 > 模型属性。在“模型属性”窗口的回调选项卡中,点击 PreLoadFnc。

您可以通过在 MATLAB 命令行窗口中重新定义变量来调整变量。
在 MATLAB Function 模块的函数选项卡中,点击编辑数据。在符号窗格中,点击 const。属性检查器和符号窗格显示 const 是参数变量。

参数变量和工作区变量必须具有相同的名称。在此示例中,更改参数变量名称而不更改工作区变量名称会导致错误。
将参数变量赋给封装参数
通过创建模块封装并在封装中设置参数值,可以为 MATLAB Function 模块中的参数变量赋值。要将参数变量赋给封装参数,请执行以下操作:
打开该 MATLAB Function 模块。
在 MATLAB Function 模块编辑器的函数选项卡的准备部分中,点击编辑数据。
在符号窗格中,点击创建数据按钮
。选择该变量并设置作用域属性。在类型列中,点击类型图标并选择参数数据。
在名称列中,设置参数变量的名称并退出该模块。
在模型中,封装 MATLAB Function 模块。有关为模块创建封装的详细信息,请参阅封装基础知识。
在“封装编辑器”窗口的参数和对话框窗格中,添加参数并使用与参数变量相同的名称。
保存封装并退出“封装编辑器”窗口。
封装 MATLAB Function 模块参数变量示例
此示例使用封装来设置参数变量的值。

MATLAB 函数将参数变量 const 乘以 Sine Wave 模块信号的值。点击 MATLAB Function 模块上的箭头图标以查看代码。
function y = fcn(u, const)
y = const*u;
您可以通过双击 MATLAB Function 模块来调整 const 的值。

模块封装中定义了设置正弦波乘数参数,您可以在封装编辑器中编辑该参数。MATLAB Function 模块将 const 定义为在属性检查器中的作用域设置为 Parameter 的数据。当您在符号窗格中选择 const 时,可以在属性检查器中看到此属性。

参数变量和封装参数必须具有相同的名称。在此示例中,更改参数变量名称而不更改封装参数名称会导致错误。如果您使用的是不可调参数,请确保在属性检查器中清除了可调属性。
参数变量层次结构
定义参数变量时,Simulink 使用相同的符号解析规则搜索和选择变量赋值。请参阅符号解析。如果对模块可见的多个工作区中存在同名的变量,该模块将使用工作区层次结构中最靠近该模块的数据。如果 MATLAB Function 模块位于一个封装子系统中,该模块将使用该子系统工作区中的数据。否则,该模块将使用模型工作区中的数据,然后依次使用 MATLAB 基础工作区和关联的 Simulink 数据字典中的数据。