Main Content

将总线连接到 MATLAB Function 模块

MATLAB Function 可以检索和输出 Simulink® 总线。当您将总线连接到 MATLAB Function 模块时,该模块会将该信号与一个结构体相关联。有关在 MATLAB Function 模块中创建结构体的详细信息,请参阅在 MATLAB Function 模块中创建结构体。您还可以从 Data Store Memory 模块中检索总线数据。有关使用总线和 Data Store Memory 模块的详细信息,请参阅包含总线和总线数组的数据存储

注意

MATLAB Function 模块将输入虚拟总线转换为非虚拟总线,并且仅输出非虚拟总线。

使用 MATLAB Function 模块读写总线

此示例使用 MATLAB Function 模块中的结构体来读写 Simulink 总线。

打开 emldemo_bus_struct 模型。MATLAB Function 模块的 inbus 端口连接到一个总线,outbusoutbus1 端口连接到输出总线。输入信号来自 Bus Creator 模块 MainBusCreator,它捆绑信号 ele1ele2ele3。信号 ele3 是另一个 Bus Creator 模块 SubBusCreator 的输出,它捆绑信号 a1a2outbusoutbus1 端口连接到 Bus Selector 模块,后者又连接到 Display 模块。

在 Simulink 中定义的 Simulink.Bus 对象

在此示例中,MATLAB Function 模块中的每个结构体必须对应一个 Simulink.Bus 对象。因此,该模块中的结构体与赋给它们的 Simulink.Bus 对象共享相同的属性,包括字段的数量、名称、类型和顺序。此模型定义两个 Simulink.Bus 对象,即 MainBusSubBus。加载模型会将总线加载到基础工作区中。您可以在类型编辑器中查看总线定义及其元素。在建模选项卡的设计部分中,点击类型编辑器。在类型编辑器中,将查看设置为 Value

该模型在 Bus Creator 模块中使用这些总线。MainBusCreator 输出一个与 MainBus 相同类型的总线,SubBusCreator 输出一个与 SubBus 相同类型的总线。

MATLAB Function 模块中的结构体定义

通过打开 MATLAB Function 模块,检查函数 fcn。此代码使用 struct 函数定义局部变量 mystruct,并使用此局部变量初始化第一个输出 outbus 的值。该函数将第二个输出 outbus1 初始化为 inbusele3 字段的值。

function [outbus, outbus1] = fcn(inbus)
substruct.a1 = inbus.ele3.a1;
substruct.a2 = int8([1 2;3 4]);
mystruct = struct('ele1',20.5, 'ele2', single(100), 'ele3', substruct);
outbus = mystruct;
outbus.ele3.a2 = 2*(substruct.a2);
outbus1 = inbus.ele3;

查看 MATLAB Function 模块中结构体的定义。在函数选项卡中,点击编辑数据。点击一个变量以在属性检查器中查看其属性。在此示例中,inbus 继承其类型,因此符号窗格不显示 inbus 的结构体元素。相反,输出变量的类型属性设置为总线,符号窗格显示与每个变量相关联的总线元素。展开符号窗格中的输出结构体列表以查看字段。

将来自数据存储内存的总线写入 MATLAB Function 模块

此示例说明如何使用存储在数据存储中的总线数据作为 MATLAB Function 模块的输入。

在 Data Store Memory 模块中捕获总线数据

在此示例中,Bus Creator 模块 MainBusCreator 创建一个名为 MainBus 的总线,因为输出数据类型参数的值是 Bus: MainBus。然后,Data Store Write 模块使用数据存储名称参数将总线数据写入名为 inbus 的数据存储。

为了存储来自 Data Store Write 模块的总线数据,该模型包括一个 Data Store Memory 模块。在 Data Store Memory 模块中,数据存储名称参数的值是 inbus,即 Data Store Write 模块定义的数据存储的名称。数据类型参数的值是 Bus: MainBus,即 MainBusCreator 模块指定的数据类型。

定义 Data Store Memory 变量

为了捕获变量中的数据存储,MATLAB Function 模块使用作用域属性设置为 Data Store Memory 的变量。然后,该函数将该变量定义为全局变量,其数据存储的名称为 inbus。双击 MATLAB Function 模块以检查代码。

function [outbus, outbus1] = fcn
global inbus;
substruct.a1 = inbus.ele3.a1;
substruct.a2 = int8([1 2;3 4]);
mystruct = struct('ele1',20.5, 'ele2', single(100), 'ele3', substruct);
outbus = mystruct;
outbus.ele3.a2 = 2*(substruct.a2);
outbus1 = inbus.ele3;

您可以在符号窗格、属性检查器或模型资源管理器中调整数据存储内存变量的属性。

相关主题