将总线连接到 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 端口连接到一个总线,outbus 和 outbus1 端口连接到输出总线。输入信号来自 Bus Creator 模块 MainBusCreator
,它捆绑信号 ele1
、ele2
和 ele3
。信号 ele3
是另一个 Bus Creator 模块 SubBusCreator
的输出,它捆绑信号 a1
和 a2
。outbus 和 outbus1 端口连接到 Bus Selector 模块,后者又连接到 Display 模块。
在 Simulink 中定义的 Simulink.Bus
对象
在此示例中,MATLAB Function 模块中的每个结构体必须对应一个 Simulink.Bus
对象。因此,该模块中的结构体与赋给它们的 Simulink.Bus
对象共享相同的属性,包括字段的数量、名称、类型和顺序。此模型定义两个 Simulink.Bus
对象,即 MainBus
和 SubBus
。加载模型会将总线加载到基础工作区中。您可以在类型编辑器中查看总线定义及其元素。在建模选项卡的设计部分中,点击类型编辑器。在类型编辑器中,将查看设置为 Value
。
该模型在 Bus Creator 模块中使用这些总线。MainBusCreator
输出一个与 MainBus
相同类型的总线,SubBusCreator
输出一个与 SubBus
相同类型的总线。
MATLAB Function 模块中的结构体定义
通过打开 MATLAB Function 模块,检查函数 fcn
。此代码使用 struct
函数定义局部变量 mystruct
,并使用此局部变量初始化第一个输出 outbus
的值。该函数将第二个输出 outbus1
初始化为 inbus
中 ele3
字段的值。
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;
您可以在符号窗格、属性检查器或模型资源管理器中调整数据存储内存变量的属性。