将总线信号连接到 MATLAB Function 模块
MATLAB Function 模块中的结构体
此示例说明如何在 MATLAB Function 模块中使用结构体来读取和写入 Simulink® 总线信号。
在此模型中,MATLAB Function 模块在输入端口 1 处接收使用结构体 inbus
的总线信号。该模块输出两个总线信号:输出端口 1 处的结构体 outbus
和输出端口 2 处的结构体 outbus1
。输入信号来自 Bus Creator 模块 MainBusCreator
,它捆绑信号 ele1
、ele2
和 ele3
。信号 ele3
是另一个 Bus Creator 模块 SubBusCreator
的输出,它捆绑信号 a1
和 a2
。结构体 outbus
和 outbus1
连接到 Bus Selector 模块,这些模块又连接到 Display 模块。
要浏览 MATLAB 函数 fcn
,请双击 MATLAB Function 模块。请注意,代码使用 struct
函数隐式定义局部结构体变量 mystruct
,并使用此局部结构体变量初始化第一个输出 outbus
的值。它将第二个输出 outbus1
初始化为结构体 inbus
的字段 ele3
的值。
示例中的结构体定义
以下是示例中 MATLAB Function 模块中结构体的定义,它们出现在符号窗格和属性检查器中:
总线对象定义结构体输入和输出
每个结构体输入和输出必须由基础工作区中的 Simulink.Bus
对象定义。请参阅在 MATLAB Function 模块中创建结构体。这意味着结构体与总线对象具有相同的属性,包括字段的数量、名称、类型和顺序。在此示例中,以下总线对象定义结构体输入和输出:
Simulink.Bus
对象 MainBus
定义结构体输入 inbus
和结构体输出 outbus
。Simulink.Bus
对象 SubBus
定义结构体输出 outbus1
。基于这些定义,inbus
和 outbus
具有与 MainBus
相同的属性,因此,在引用其字段时使用与 MainBus
中字段相同的名称(使用圆点表示法,请参阅Index Substructures and Fields)。同样,outbus1
在引用其字段时使用与 SubBus
中的字段相同的名称。以下是此示例中每个结构体的字段引用:
结构体 | 第一个字段 | 第二个字段 | 第三个字段 |
---|---|---|---|
inbus | inbus.ele1 | inbus.ele2 | inbus.ele3 |
outbus | outbus.ele1 | outbus.ele2 | outbus.ele3 |
outbus1 | outbus1.a1 | outbus1.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;
您可以在符号窗格、属性检查器或模型资源管理器中调整数据存储内存变量的属性。