主要内容

Simulink.Bus.createMATLABStruct

创建与总线使用相同的层次结构和属性的 MATLAB 结构体

说明

S = Simulink.Bus.createMATLABStruct(busSource) 创建一个或多个 MATLAB® 结构体,这些结构体具有与 busSource 指定的总线相同的层次结构和属性。生成的结构体使用总线的接地值。使用此语法为多个总线端口创建初始化结构体。

示例

S = Simulink.Bus.createMATLABStruct(busSource,vals) 创建一个或多个使用由 vals 指定的值的结构体。

示例

S = Simulink.Bus.createMATLABStruct(busSource,vals,sdims) 创建一个或多个具有由 sdims 指定的维度的结构体。要为总线数组创建一个结构体,请使用 sdims

示例

S = Simulink.Bus.createMATLABStruct(busSource,vals,sdims,scope)scope 指定的数据字典中创建一个或多个结构体。

示例

全部折叠

打开并编译名为 BusInitialization 的示例模型。编译模型会更新线型,您可以使用线型来直观地标识总线。

mdl = "BusInitialization";
open_system(mdl)
set_param(mdl,SimulationCommand="Update")

BusInitialization model

模型中的预加载回调加载 Simulink.Bus 对象,如 TopBus。穿过 Unit Delay 模块的总线使用此总线对象。

创建一个与 TopBus 具有相同层次结构和属性的 MATLAB 结构体。将该结构体命名为 mstruct

mstruct = Simulink.Bus.createMATLABStruct("TopBus")
mstruct = struct with fields:
    A: [1×1 struct]
    B: 0
    C: [1×1 struct]

该函数将接地值 0 赋给结构体中的每个字段。

为与 TopBus.A.A1 对应的字段指定值 3

mstruct.A.A1 = 3;

对结构体中的其他字段继续指定值 0

要将 mstruct 指定为 Unit Delay 模块的初始条件结构体,请将初始条件模块参数设置为 mstruct

要在多个端口为总线创建初始化结构体,请将多个端口句柄与 Simulink.Bus.createMATLABStruct 函数结合使用。生成的结构体元胞数组使用接地值。

打开并编译名为 BusInitializationTwoPorts 的示例模型。

mdl = "BusInitializationTwoPorts";
open_system(mdl)
set_param(mdl,SimulationCommand="Update")

BusInitializationTwoPorts model

获取每个 Bus Creator 模块的输出端口的句柄。

bc1 = "BusInitializationTwoPorts/Bus Creator";
ph1 = get_param(bc1,"PortHandles");
out1 = ph1.Outport;

bc2 = "BusInitializationTwoPorts/Bus Creator1";
ph2 = get_param(bc2,"PortHandles");
out2 = ph2.Outport;

要为每个总线创建一个包含结构体的元胞数组,请为 Simulink.Bus.createMATLABStruct 函数提供端口句柄数组。

structs = Simulink.Bus.createMATLABStruct([out1 out2])
structs=2×1 cell array
    {1×1 struct}
    {1×1 struct}

基于与总线对应的端口创建一个 MATLAB 结构体。使用非完全结构体为连接该端口的总线中的部分总线元素指定值。

打开并编译名为 BusInitialization 的示例模型。编译模型会更新线型,您可以使用线型来直观地标识总线。

mdl = "BusInitialization";
open_system(mdl)
set_param(mdl,SimulationCommand="Update")

BusInitialization model

创建一个非完全结构体,它为总线层次结构中的部分元素指定值。在非完全结构体中,指定 Top.A.A1Top.B 元素的值。

pstruct = struct("A",struct("A1",4),"B",3)
pstruct = struct with fields:
    A: [1×1 struct]
    B: 3

要创建一个完全结构体,请使用 Simulink.Bus.createMATLABStruct 函数。

对于第一个输入参量,获取产生顶层总线的 Bus Creator 模块输出端口的句柄。

bctop = "BusInitialization/Bus Creator3";
ph = get_param(bctop,"PortHandles");
out = ph.Outport;

对于第二个输入参量,指定非完全结构体。非完全结构体覆盖 Top.A.A1Top.B 元素的接地值。

fstruct = Simulink.Bus.createMATLABStruct(out,pstruct)
fstruct = struct with fields:
    A: [1×1 struct]
    B: 3
    C: [1×1 struct]

为其信号元素使用 double 之外的数据类型的总线创建一个 MATLAB 结构体。使用非完全结构体为部分元素指定初始化值。当您创建非完全结构体时,使字段的数据类型与对应元素的数据类型相匹配。

打开并编译名为 BusInitialization 的示例模型。编译模型会更新线型,您可以使用线型来直观地标识总线。

mdl = "BusInitialization";
open_system(mdl)
set_param(mdl,SimulationCommand="Update")

BusInitialization model

创建一个非完全结构体,它为总线层次结构中的部分元素指定值。在非完全结构体中,指定元素 Top.BTop.C.C1 的值。

信号元素 Top.C.C1 使用数据类型 int16。要设置结构体的 C.C1 字段的值,请使用定型表达式。使表达式中使用的数据类型与模型中信号的数据类型相匹配。

pstruct = struct("B",3,"C",struct("C1",int16(5)));

要创建一个完全结构体,请使用 Simulink.Bus.createMATLABStruct 函数。

对于第一个输入参量,获取产生顶层总线的 Bus Creator 模块输出端口的端口句柄。

bctop = "BusInitialization/Bus Creator3";
ph = get_param(bctop,"PortHandles");
out = ph.Outport;

对于第二个输入参量,指定非完全结构体。非完全结构体覆盖 Top.C.C1Top.B 元素的接地值。

fstruct = Simulink.Bus.createMATLABStruct(out,pstruct);

检查 fstruct.C.C1 的值。

fstruct.C.C1
ans = int16

5

此字段使用数据类型 int16

打开并编译名为 BusInitialization 的示例模型。编译模型会更新线型,您可以使用线型来直观地标识总线。

mdl = "BusInitialization";
open_system(mdl)
set_param(mdl,SimulationCommand="Update")

BusInitialization model

模型中的预加载回调加载 Simulink.Bus 对象,如 TopBus。穿过 Unit Delay 模块的总线使用此总线对象。

为顶层总线中的部分总线元素创建一个非完全结构体。

pstruct = struct("A",struct("A1",4),"B",3)  
pstruct = struct with fields:
    A: [1×1 struct]
    B: 3

使用名为 TopBusSimulink.Bus 对象、名为 pstruct 的非完全结构体以及生成的结构体的维度创建一个完全结构体。

fstruct = Simulink.Bus.createMATLABStruct("TopBus",...
    pstruct,[2 3])
fstruct=2×3 struct array with fields:
    A
    B
    C

输入参数

全部折叠

总线信息的来源,指定为 Simulink.Bus 对象名称、端口句柄(用引号引起来)、Simulink.Bus 对象名称元胞数组或端口句柄数组。

  • 如果您指定 Simulink.Bus 对象,该 Simulink.Bus 对象必须位于 MATLAB 基础工作区或模型使用的数据字典中。

  • 如果指定端口句柄,模型必须成功编译。

  • 对于总线数组,不能使用端口句柄。

  • 如果使用 sdims 参量,请将 busSource 指定为 Simulink.Bus 对象或 Simulink.Bus 对象的元胞数组。

如果指定 Simulink.Bus 对象名称的元胞数组或端口句柄的数组,则只需一次 Simulink.Bus.createMATLABStruct 调用即可创建多个结构体,性能优于使用单独的 Simulink.Bus.createMATLABStruct 调用来创建结构体。

示例: S = Simulink.Bus.createMATLABStruct('BusObject') 通过 Simulink.Bus 对象名称指定一个总线信源。

示例: S = Simulink.Bus.createMATLABStruct({'BusObject','BusObject1'}) 通过由 Simulink.Bus 对象名称组成的元胞数组指定多个总线信源。

示例: S = Simulink.Bus.createMATLABStruct(ph) 通过端口句柄指定一个总线信源。

示例: S = Simulink.Bus.createMATLABStruct([ph,ph1]) 通过端口句柄数组指定多个总线信源。

生成的结构体中元素子集的值,指定为空矩阵 ([])、非完全结构体或元胞数组。对于每个指定的总线信息的来源,元胞数组必须包含一个非完全结构体或空矩阵。

有关创建非完全结构体的信息,请参阅Specify Initial Conditions for Bus Elements

要使用接地值,请为空矩阵。

示例: S = Simulink.Bus.createMATLABStruct('BusObject',PartialStruct)

数据类型: struct | cell

生成的结构体的维度,指定为向量。

每个维度元素都必须是大于或等于 1 的整数。如果为 vals 参量指定非完全结构体,则每个维度元素必须大于或等于其在非完全结构体中的对应维度元素。

示例: S = Simulink.Bus.createMATLABStruct('BusObject',PartialStruct,[2 3])

示例: S = Simulink.Bus.createMATLABStruct({'Bus','Bus1','Bus2'},{[],[],[]},{1,2,3})

数据类型: double | cell

要包含 MATLAB 结构体的数据字典,指定为 Simulink.data.Dictionary 对象。在使用此参量之前,请使用 Simulink.data.dictionary.createSimulink.data.dictionary.open 等函数通过 Simulink.data.Dictionary 对象来表示字典。

如果 scope 为空,则该函数使用 MATLAB 基础工作区作为 Bus 对象的信源。

示例: S = Simulink.Bus.createMATLABStruct({'Bus','Bus1','Bus2'},{[],[],[]},{1,1,1},dataDictionaryObject)

输出参量

全部折叠

与总线具有相同信号层次结构和属性的结构体,以 MATLAB 结构体或 MATLAB 结构体元胞数组形式返回。

结构体维度取决于您指定的输入参量:

  • 如果只指定 busSource 参量,则维度为 1。

  • 如果您还指定 vals 参量,则维度与 vals 的维度相匹配。

  • 如果您指定 sdims 参量,则维度与 sdims 的维度相匹配。

提示

  • 如果您对同一个模型重复使用 Simulink.Bus.createMATLABStruct 函数(例如,在脚本中的循环中),可以通过避免多次编译模型来提高性能。要提高速度,请在多次使用该函数之前对模型进行编译。例如,要编译名为 mymodel 的模型,请使用以下命令。

    mymodel([],[],[],'compile')

    在您创建 MATLAB 结构体后,使用以下命令终止编译。

    mymodel([],[],[],'term')
  • 类型编辑器可以调用 Simulink.Bus.createMATLABStruct 函数。在类型编辑器中,右键点击您要为其创建 MATLAB 结构体的 Simulink.Bus 对象。然后,点击创建 MATLAB 结构体

    您可以在 MATLAB 编辑器中编辑 MATLAB 结构体。要在此结构体中创建或更新值,请评估代码。

  • 您可以使用 Simulink.Bus.createMATLABStruct 函数指定引用模型的输出初始值。

版本历史记录

在 R2010a 中推出