主要内容

使用总线数组

建立一个使用总线数组的模型通常包括以下基本任务:

  1. 定义总线数组(参见从非虚拟总线创建总线数组).

  2. 添加一个子系统,用于在总线数组的每个元素上执行迭代处理。例如,使用a每个子系统块或迭代器块。连接总线数组连接块到迭代处理子系统。看到执行迭代处理

  3. 在迭代处理子系统中建模您的标量算法(例如,for Each子系统)。

    1. 在总线数组上操作(使用选择器而且赋值块)。

    2. 使用总线选择器而且总线分配块,用于从子系统内的非虚拟总线中选择元素或向其分配元素。

    看到将值赋给一个总线数组而且从总线数组中选择总线元素

  4. 可选地,导入或记录总线数据数组。看到导入总线数据数组而且客车日志阵列

生成的模型包括这些组件。

执行迭代处理

可以使用块对总线数组的总线数据执行迭代处理每个子系统块,While迭代器子系统块,或对于迭代器子系统块。你可以使用这些块中的一个来执行相同的处理:

  • 总线数组中的每个总线

  • 总线数组中选定的总线子集

将值赋给一个总线数组

为总线数组中的信号赋值,使用:

  1. 一个总线分配块为总线元素赋值

  2. 一个赋值块将总线分配给总线数组

使用一个赋值块为总线数组中的指定元素赋值。

例如,在sldemo_bus_arrays模型中,赋值Block将值赋给总线数组的第一个元素。

要在总线中分配总线元素,请使用总线分配块。的输入总线分配Block必须是总线。

分配到总线数组中

你可以使用总线分配块来分配或完全替换一个嵌套总线,该总线是一个总线数组。要为总线数组内的嵌套总线分配数据,或使用总线数组对某些元素进行部分分配,可以使用MATLAB函数块。

例如,假设你有这样的总线结构:

公共汽车有一个孩子们元素,它是子总线数组。这个例子展示了如何给element赋值c到element一个.的轮廓尺寸而且外港块使用公共汽车对象。为了定义赋值,本例使用了MATLAB函数块,因为你不能给元素赋值一个使用一个总线分配赋值块。

MATLAB函数Block使用下面的函数代码来赋值:

函数Y = fcn(u) Y = u;Y.c = false;Idx = 1:长度(y.s children)。A = int32(0 (5,1));结束

从总线数组中选择总线元素

要从一个总线数组中选择一个总线元素,使用a:

  1. 选择器块以在总线数组中选择适当的总线。

  2. 总线选择器块来选择总线中的总线元素。

使用一个选择器块来选择总线数组的元素。总线的输入数组可以有任何维度。总线的输出总线选择器块是从总线的输入数组中选择或重新排序的元素集合。

例如,sldemo_bus_arrays模型使用选择器块从总线数组中选择元素赋值而且每个子系统块输出。的块参数对话框选择器块,选择第一个元素:

要选择总线中的总线元素,请使用总线选择器块。的输入总线选择器Block必须是总线。

导入总线数据数组

使用根轮廓尺寸块导入(加载)MATLAB结构数组®timeseries对象用于总线数组。您可以将部分数据导入总线数组。

详细信息请参见导入总线数据数组

你不能使用从工作空间从文件块导入总线数组的数据。

客车日志阵列

要导出一个总线数组,请将信号标记为信号日志。有关更多信息,请参见从模拟保存运行时数据

请注意

金宝app®在快速加速模式下不记录参考模型内的信号。

若要访问总线数组中特定信号的信号日志数据,请在结构层次结构中导航并指定特定信号的索引。详细信息请参见访问总线信号记录数据阵列

属性时,根级总线输出不会被记录输出配置参数。使用标准信号记录,如中所述使用信号日志导出信号数据

不要直接从for Each子系统中为总线或总线阵列使用信号记录。或者使用总线选择器块,以选择要记录或添加的总线元素信号外港在子系统外阻塞,然后记录那个信号。详细信息请参见每个子系统的日志信号

初始化总线数组

要为总线数组中的每个单独信号指定唯一的初始值,可以使用初始条件结构数组。数组中的每个结构初始化一个总线。

下面是一个演示如何初始化总线数组的示例。假设您定义了总线类型MyData而且PressureBus

假设您设置了信号元素的数据类型温度int16,以及元素的数据类型s1而且s2

若要为总线数组指定初始条件,可以创建一个变量,其值为初始条件结构数组。

initValues(1)。温度= int16(5); initValues(1).pressure.s1 = 9.87; initValues(1).pressure.s2 = 8.71; initValues(2).temperature = int16(20); initValues(2).pressure.s1 = 10.21; initValues(2).pressure.s2 = 9.56; initValues(3).temperature = int16(35); initValues(3).pressure.s1 = 8.98; initValues(3).pressure.s2 = 9.17;

的变量initValues为由三个总线组成的数组的信号提供初始条件。你可以使用initValues要指定初始条件块的参数单位延迟

或者,您可以使用单个标量结构为数组中的所有总线指定相同的初始条件。

initStruct。温度= int16(15);initStruct.pressure。S1 = 10.32;initStruct.pressure。S2 = 9.46;

如果你指定initStruct初始条件参数,数组中的每个总线使用相同的初始值,15,表示信号元素温度.类似地,总线使用初始值10.32对于元素pressure.s1还有价值9.46对于元素pressure.s2

要为使用大量信号元素层次结构的总线创建结构数组,请考虑使用该函数金宝appSimulink.Bus.createMATLABStruct

这个例子展示了如何初始化嵌套的总线数组。为包含嵌套总线数组的复杂信号层次结构创建初始条件结构。

  1. 在总线编辑器中,创建公共汽车对象MyData而且PressureBus

  2. 在层次结构窗格中,选择总线元素压力.设置财产3 [1]

  3. 使用函数创建一个包含四个初始化结构的数组金宝appSimulink.Bus.createMATLABStruct.将数组存储在变量中initStruct.将所有信号初始化为地值,0

    initStruct 金宝app= Simulink.Bus.createMATLABStruct (“MyData”[], [1 - 4]);

  4. 在基本工作空间中,双击变量initStruct在变量编辑器中查看。

    数组中的四个结构都有字段温度而且压力

  5. 检查压力,双击其中一个字段。

    这四个的值压力Fields是一个包含三个子结构的数组。每个子结构都有字段s1而且s2

  6. 要为总线数组中的信号提供唯一的初始化值,可以使用变量编辑器手动指定这些值。

    或者,您也可以编写一个脚本。例如,访问字段s1第二个子结构压力的第三个结构initStruct,使用以下代码:

    initStruct (3) .pressure(2)。S1 = 15.35;

结构参数要求

要初始化一个带有结构参数的总线数组,你可以使用:

  • 数量0.在这种情况下,总线数组中的所有单独信号都使用初始值0

  • 一个标量结构体它表示与总线类型相同的字段和字段名层次结构。在本例中,标量结构展开以初始化总线数组中的每个单独信号。

  • 一种结构数组,为总线数组中的每个单独信号指定初始值。

    如果使用结构的数组,则数组中的所有结构必须具有相同的字段层次结构。层次结构中的每个字段必须在数组中具有相同的特征:

    • 字段名

    • 数值型数据类型,例如int32

    • 复杂性

你不能使用部分结构。

代码生成

总线数组的代码生成将生成具有特定格式的结构。看到总线数组的代码生成

相关的话题