Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

Simulink.Bus.createMATLABStruct

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

说明

示例

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

示例

structs = Simulink.Bus.createMATLABStruct(buses,values) 创建一个或多个使用指定值的结构体。

示例

structs = Simulink.Bus.createMATLABStruct(buses,values,dims) 创建一个或多个具有指定维度的结构体。要为总线数组创建一个结构体,请使用 dims

structs = Simulink.Bus.createMATLABStruct(buses,values,dims,scope)scope 指定的数据字典中创建一个或多个结构体。

示例

全部折叠

打开并仿真模型 ex_bus_initial_conditions

open_system('ex_bus_initial_conditions')
sim('ex_bus_initial_conditions');

使用 ex_bus_initial_conditions 模型加载的总线对象 Top 创建一个 MATLAB 结构体。

mStruct = Simulink.Bus.createMATLABStruct('Top');

mStruct 结构体中与总线 A 的总线元素 A1 对应的字段设置值。

mStruct.A.A1 = 3;
mStruct.A
ans = 

  struct with fields:

    A1: 3
    A2: [5x1 int8]

Simulink 会将该结构体中的其他字段设置为对应的总线元素的接地值。

您可以使用 mStruct 作为 Unit Delay 模块的初始条件结构体。

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

打开并仿真模型 ex_bus_initial_conditions

open_system('ex_bus_initial_conditions')
sim('ex_bus_initial_conditions');

标签为 Constant5 的模块生成的 C1 信号元素使用数据类型 int16

查找生成 Top 总线信号的 Bus Creator 模块端口的端口句柄。

ph = get_param('ex_bus_initial_conditions/TopBus','PortHandles');

创建一个非完全结构体,它为 TopBus 模块创建的总线信号中的部分元素指定值。要设置 C.C1 字段的值,请使用类型化表达式。使表达式中使用的数据类型与模型中信号元素的数据类型 (int16) 相匹配。

PartialstructForK = struct('B',3,'C',struct('C1',int16(5)));

使用 TopBus 模块的端口句柄 (ph) 创建一个完全结构体。覆盖 C.C1B 元素的接地值。

outPort = ph.Outport;
mStruct = Simulink.Bus.createMATLABStruct(outPort,PartialstructForK);

输出结构体中的字段 C.C1 继续使用数据类型 int16

打开并仿真模型 ex_bus_initial_conditions

open_system('ex_bus_initial_conditions')
sim('ex_bus_initial_conditions');

创建一个非完全结构体,其中包含 TopBus 模块创建的总线中的部分总线元素。

PartialStructForK = struct('A',struct('A1',4),'B',3)
PartialStructForK = 

  struct with fields:

    A: [1x1 struct]
    B: 3

使用总线对象 Top、非完全结构体以及生成的结构体的维度创建一个 MATLAB 结构体。

structFromBus = Simulink.Bus.createMATLABStruct...
     ('Top',PartialStructForK,[2 3])
structFromBus = 

  2x3 struct array with fields:

    A
    B
    C

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

打开并仿真模型 ex_two_outports_create_struct

open_system('ex_two_outports_create_struct')
sim('ex_two_outports_create_struct');

查找 Bus Creator 模块 Bus1Bus2 的端口句柄。

ph_1 = get_param...
     ('ex_two_outports_create_struct/Bus Creator','PortHandles');
ph_2 = get_param...
     ('ex_two_outports_create_struct/Bus Creator1','PortHandles');

使用端口句柄数组创建一个 MATLAB® 结构体。

mStruct = Simulink.Bus.createMATLABStruct([ph_1.Outport ph_2.Outport])
mStruct =

  2x1 cell array

    {1x1 struct}
    {1x1 struct}

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

打开并仿真模型 ex_bus_initial_conditions

open_system('ex_bus_initial_conditions')
sim('ex_bus_initial_conditions');

查找生成 Top 总线信号的 Bus Creator 模块端口的端口句柄。Outport 句柄就是您需要的句柄。

ph = get_param('ex_bus_initial_conditions/TopBus','PortHandles')
ph = 

  struct with fields:

      Inport: [29.0023 31.0023 43.0023]
     Outport: 44.0023
      Enable: []
     Trigger: []
       State: []
       LConn: []
       RConn: []
    Ifaction: []
       Reset: []

创建一个非完全结构体,其中包含 TopBus 模块创建的总线信号。您可以使用非完全结构体为部分总线元素指定值。

PartialstructForK = struct('A',struct('A1',4),'B',3)
PartialstructForK = 

  struct with fields:

    A: [1x1 struct]
    B: 3

由结构体字段 Top.BTop.A 表示的总线元素在总线层次结构中位于同一级别。您可以使用此非完全结构体覆盖 BA 总线信号元素的接地值。

基于总线对象或总线端口创建结构体时,您可以使用非完全结构体作为可选参数。

使用 TopBus 模块的端口句柄 (ph) 创建一个 MATLAB 结构体。覆盖 A.A1B 总线元素的接地值。

outPort = ph.Outport;
mStruct = Simulink.Bus.createMATLABStruct(outPort,PartialstructForK)
mStruct = 

  struct with fields:

    A: [1x1 struct]
    B: 3
    C: [1x1 struct]

输入参数

全部折叠

总线信息的来源,指定为 Bus 对象名称、端口句柄、Bus 对象名称元胞数组或端口句柄数组。

  • 如果使用 Bus 对象名称,则 Bus 对象必须位于 MATLAB 基础工作区或模型使用的数据字典中。Bus 对象名称的数据类型是 charstring

  • 如果您使用端口句柄,则在您使用此函数之前,必须成功编译模型。端口句柄的数据类型是 double

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

  • 如果您使用 dims 参数,则对于 buses 参数,请使用 Bus 对象或 Bus 对象的元胞数组。

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

示例: struct = Simulink.Bus.createMATLABStruct('BusObject')

示例: structs = Simulink.Bus.createMATLABStruct({'BusObject','BusObject1'})

示例: struct = Simulink.Bus.createMATLABStruct(portHandle)

示例: structs = Simulink.Bus.createMATLABStruct([portHandle,portHandle1])

数据类型: double | char | string | struct | cell

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

有关创建非完全结构体的信息,请参阅创建用于初始化的非完全结构体

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

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

数据类型: struct | cell

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

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

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

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

数据类型: double | cell

数据字典,指定为 Simulink.data.Dictionary 对象。在使用此参数之前,请使用 Simulink.data.dictionary.createSimulink.data.dictionary.open 等函数通过 Simulink.data.Dictionary 对象来表示字典。

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

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

输出参数

全部折叠

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

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

  • 如果只指定 buses 参数,则维度为 1。

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

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

提示

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

    vdp([],[],[],'compile')

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

    vdp([],[],[],'term')
  • 您可以通过以下方法之一,使用总线编辑器调用 Simulink.Bus.createMATLABStruct 函数:

    • 选择 File > Create a MATLAB structure 菜单项。

    • 选择您要为其创建完整 MATLAB 结构体的 Bus 对象。然后,在工具栏上点击 Create a MATLAB structure 按钮

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

  • 您可以使用 Simulink.Bus.createMATLABStruct 函数指定引用模型的输出初始值。有关详细信息,请参阅通过模型引用管理数据的详细工作流示例中的“引用模型:为总线输出设置初始值”部分。

在 R2010a 中推出