主要内容

对于每个子系统

将算法应用于输入信号或掩码参数的单个元素或子数组

  • 库:
  • 万博1manbetxSimulink /端口和子系统

    HDL编码器/端口和子系统

  • 对于每个子系统块

描述

对于每个子系统Block是一个子系统块,预先配置为创建子系统的起点,该子系统在模拟时间步中对输入信号或掩码参数数组的每个元素或子数组重复执行。

For Each Subsystem块图标,与For - Each子系统的内容一起显示,由For Each块、import块和Outport块组成。

请注意

使用局部求解器的模型不能放在里面对于每个子系统

子系统中的块集表示应用于原始信号或掩码参数数组的单个元素或子数组的算法。在子系统内部,每个具有状态的块为它所处理的每个元素或子数组维护独立的状态集。因此,该子系统的操作在行为上类似于为原始输入信号或掩码参数数组中的每个元素复制子系统的内容,然后使用其各自的子系统副本处理每个元素。当子系统中的块集处理元素或子数组时,子系统将结果连接起来形成输出信号。

配置子系统

对于每个子系统块包含为每一个块,它充当子系统的控制块。的参数为每一个块,以配置子系统输入或掩码参数的分解到元素或子数组中,并配置各个结果的连接到输出信号中。块参数分区维度而且分区宽度分别指定对输入信号或掩码参数数组进行切片的尺寸和每个切片的宽度。要划分行向量,请指定分区维度作为2。要划分列向量,请指定分区维度作为1。使用参数分区抵消指定分区之间的间隙或重叠。指定一个迭代次数将处理限制在数据的一个子集。要了解关于块参数的更多信息,请参见为每一个

分区输入信号到子系统

为for-each子系统中的每个迭代指定要分区的输入信号输入分区选项卡中的为每一个块。在指定要分区的信号时,请指定分区维度分区宽度,分区抵消参数。

分区掩码子系统参数

的掩码参数可以分区对于每个子系统块。对于在每次迭代中具有相同结构但参数值不同的系统,分区是有用的。在这种情况下,更改模型为每个参数划分额外的输入信号是很麻烦的。相反,向for-each子系统添加一个掩码参数。有关更多信息,请参见创建一个简单的蒙版。为分区选择掩码参数,请使用参数分区的TAB为每一个对话框。有关更多信息,请参见选择分区参数,下面。

连接输出

属性来定义要连接结果的维度连接尺寸输出连接选项卡。

每个子数组的块生成的结果沿着连接维度堆叠。默认情况下,维度1 (y使用-axis),这意味着结果是垂直堆叠的。但是,如果指定连接维度为2,则结果将沿着水平方向连接(x设在)。因此,如果这个过程生成行向量,那么连接的结果在第一种情况下是一个矩阵,在第二种情况下是一个行向量。

选择分区参数

在为分区选择输入信号或子系统掩码参数时,必须指定如何为每次迭代将其分解为元素或子数组。的整数值分区维度分区宽度,分区抵消参数。

举例来说,考虑一个输入信号矩阵一个形式:

3 × 3矩阵A显示所有9个元素,显示d1为垂直维度,d2为水平维度

标签d1而且d2分别定义维度1和维度2。的默认设置1对于分区尺寸和分区宽度和0为分区偏移量,然后Simulink万博1manbetx®垂直于分区尺寸1的切片,其宽度等于分区宽度,这是一个元素:

一个3 × 3矩阵A,包含所有9个元素,被划分成行

矩阵A分解成这三个行向量:

一个3 × 3矩阵A,分解成三个3元素行向量

如果你指定2作为划分维数,Simulink垂直于维2切片,形成三个列向量:万博1manbetx

一个3 × 3矩阵A,分解成三个3元素列向量

除了设置分区维度2,如果您设置分区宽度2分区抵消-1, 万博1manbetxSimulink使用两个重叠的3 × 2分区进行处理。

一个3 × 3矩阵A,分解成两个重叠的3 × 2矩阵

的示例使用分区抵消参数,打开模型slexForEachOverlapExample

默认情况下,处理输入信号或掩码参数的所有分区。要处理分区的子集,请输入要处理的分区数量作为迭代次数。在上面的矩阵例子中,如果分区抵消设置为0(默认值)和迭代次数设置为2,仅输入矩阵的前2行或列一个处理。

请注意

在Simulink中,只有信号被认为是一维的。万博1manbetx掩码参数是行或列向量,根据它们的方向而定。要对行向量进行分区,请沿列指定分区维数为2。要对列向量进行分区,请将分区维度指定为1。

代码重用支持万博1manbetx

对于某些型号,对于每个子系统块改进了中的代码重用万博1manbetx仿真软件编码器™生成的代码。考虑一个包含两个可重用的模型原子子系统块与相同的标量算法应用到信号的每个元素。如果这些子系统的输入信号尺寸不同,万博1manbetx仿真软件编码器生成的代码包含两个不同的函数。您可以用两个相同的子系统替换这两个子系统对于每个子系统配置为使用相同算法处理各自输入的每个元素的块。在这种情况下,万博1manbetx仿真软件编码器生成的代码由一个由输入信号元素数量参数化的函数组成。类的每个惟一实例调用此函数两次对于每个子系统块。对于每一种情况,输入信号元素都有不同的值。

多核执行支持万博1manbetx

当您在快速加速模式下模拟模型时,Simulink使用多核执行来更快地模拟每个子系统。万博1manbetx万博1manbetxSimulink自动配置每个子系统的前两个时间步,它在快速加速模式下运行,以比较并行和串行执行时间。万博1manbetx然后,如果这样做可以加快执行时间,Simulink会在模拟运行的后续时间步骤中为每个子系统指定并行多核执行。对于嵌套的For -each子系统,多核执行只应用于顶级子系统。多核执行并不适用于包含连续状态或函数调用者块。

要抑制给定的for-each子系统的多核执行,请设置MultithreadedSim参数为每一个块内的“关闭”

set_param (ForEachBlockName、“MultithreadedSim”、“了”)

的参数为每一个块,而不是对于每个子系统块本身。要抑制模型中每个子系统的多核执行,请设置MultithreadedSim参数的模型“关闭”

set_param (ModelName、“MultithreadedSim”、“了”)

若要重新启用多核执行,请设置相关的MultithreadedSim参数设置为其默认值“汽车”

示例请参见各子系统的多线程仿真

请注意

如果以快速加速模式模拟模型或从模型生成代码,并且在for-each子系统中分区掩码参数,则for-each子系统中引用分区参数的任何表达式都必须是可调表达式。看到可调表达式的限制(万博1manbetx仿真软件编码器)

功能的支持万博1manbetx

对于每个子系统block支万博1manbetx持C-MEX s函数和Level-2 MATLAB®S-function,只要S-function支持使用以下技术之一的多个执行实例:万博1manbetx

  • C-MEX s函数必须声明ss万博1manbetxSupportsMultipleExecInstances(年代,真的)mdlSetWorkWidths方法。

  • 二级MATLAB s函数必须声明块。万博1manbetxSupportsMultipleExecInstances = true在setup方法中。

如果您使用这些规格:

  • 不要使用全局或持久变量或在s函数的用户数据中缓存运行时数据,如DWork和块I/O。

  • 在一个对于每个子系统块,每个s函数的执行方法从mdlStartmdlTerminate对于s函数处理的每个元素调用一次。因此,您必须确保在重复调用时不释放相同的内存mdlTerminate。例如,考虑一个C-MEX s函数,它为内部的运行时参数分配内存mdlSetWorkWidths。内存只需要释放一次mdlTerminate。作为一种解决方案,在第一次调用后将指针设置为空mdlTerminate

限制

有关限制的信息对于每个子系统块,看For-Each子系统的局限性

港口

输入

全部展开

信号输入子系统块,指定为标量、向量或矩阵。放置一个轮廓尺寸阻塞在子系统块向该块添加外部输入端口。端口标签与端口的名称相匹配轮廓尺寸块。

使用轮廓尺寸块从本地环境接收信号。

数据类型:一半|||int8|int16|int32|int64|uint8|uint16|uint32|uint64|布尔|不动点|枚举|公共汽车

输出

全部展开

信号输出子系统块,作为标量、向量或矩阵返回。放置一个外港阻塞在子系统块向该块添加一个外部输出端口。端口标签与端口的名称相匹配外港块。

使用外港块向本地环境发送信号。

数据类型:一半|||int8|int16|int32|int64|uint8|uint16|uint32|uint64|布尔|不动点|枚举|公共汽车

块特征

数据类型

布尔一个|公共汽车一个|一个|枚举一个|不动点一个|一半一个|整数一个|一个

直接引线

没有

多维信号

是的一个

适应信号

没有

讨论二阶导数过零检测

没有

一个实际的数据类型或功能支持取决于块实现。万博1manbetx

扩展功能

版本历史

在R2010a中介绍