Main Content

将总线信号连接到 MATLAB Function 模块

MATLAB Function 模块中的结构体

此示例说明如何在 MATLAB Function 模块中使用结构体来读取和写入 Simulink® 总线信号。

在此模型中,MATLAB Function 模块在输入端口 1 处接收使用结构体 inbus 的总线信号。该模块输出两个总线信号:输出端口 1 处的结构体 outbus 和输出端口 2 处的结构体 outbus1。输入信号来自 Bus Creator 模块 MainBusCreator,它捆绑信号 ele1ele2ele3。信号 ele3 是另一个 Bus Creator 模块 SubBusCreator 的输出,它捆绑信号 a1a2。结构体 outbusoutbus1 连接到 Bus Selector 模块,这些模块又连接到 Display 模块。

要浏览 MATLAB 函数 fcn,请双击 MATLAB Function 模块。请注意,代码使用 struct 函数隐式定义局部结构体变量 mystruct,并使用此局部结构体变量初始化第一个输出 outbus 的值。它将第二个输出 outbus1 初始化为结构体 inbus 的字段 ele3 的值。

示例中的结构体定义

以下是示例中 MATLAB Function 模块中结构体的定义,它们出现在符号窗格和属性检查器中:

This image shows the definitions of the structures in the MATLAB Function block in the example, as they appear in the Symbols pane and the Property Inspector.

总线对象定义结构体输入和输出

每个结构体输入和输出必须由基础工作区中的 Simulink.Bus 对象定义。请参阅在 MATLAB Function 模块中创建结构体。这意味着结构体与总线对象具有相同的属性,包括字段的数量、名称、类型和顺序。在此示例中,以下总线对象定义结构体输入和输出:

This image shows the display of the bus object properties.

Simulink.Bus 对象 MainBus 定义结构体输入 inbus 和结构体输出 outbusSimulink.Bus 对象 SubBus 定义结构体输出 outbus1。基于这些定义,inbusoutbus 具有与 MainBus 相同的属性,因此,在引用其字段时使用与 MainBus 中字段相同的名称(使用圆点表示法,请参阅Index Substructures and Fields)。同样,outbus1 在引用其字段时使用与 SubBus 中的字段相同的名称。以下是此示例中每个结构体的字段引用:

结构体第一个字段第二个字段第三个字段
inbusinbus.ele1inbus.ele2inbus.ele3
outbusoutbus.ele1outbus.ele2outbus.ele3
outbus1outbus1.a1outbus1.a2

将来自数据存储内存的总线写入 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;

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

相关主题