主要内容

每个子系统

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

  • 库:
  • 金宝appSimulink / Ports &子系统

    HDL编码器/端口和子系统

  • 对于每个子系统块

描述

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

For Each子系统块图标,显示在For Each子系统的内容旁边,由For Each块、Inport块和Outport块组成。

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

配置子系统

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

分区子系统的输入信号

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

分区掩码子系统参数

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

连接输出

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

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

选择分区参数

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

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

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

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

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

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

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

如果你指定2作为划分维度,Simulink垂直于维度2进行切片,形成三个列向量:金宝app

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

除了设置分区维度2,如果你设置分区宽度2分区抵消-1, 金宝appSimulink使用两个重叠的3 × 2分区进行处理。

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

的例子分区抵消参数,打开模型slexForEachOverlapExample

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

请注意

在Simulink中,只有信号被认为是一维的。金宝app掩码参数是行向量或列向量,取决于它们的方向。若要对行向量进行分区,请沿列将分区维数指定为2。若要对列向量进行分区,请将分区维数沿行指定为1。

代码重用支持金宝app

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

多核执行支持金宝app

在快速加速模式下模拟模型时,Simulink使用多核执行来更快地模拟for Each子系统。金宝app金宝appSimulink自动配置每个子系统的前两个时间步骤,它以快速加速模式运行,以比较并行和串行执行时间。金宝app然后,Simulink在模拟运行的后续时间步骤中为并行多核执行指定For Each子系统,如果这样做可以加快执行时间的话。对于嵌套的For Each子系统,多核执行只适用于顶层子系统。多核执行不适用于包含连续状态或连续状态的For Each子系统函数调用者块。

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

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

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

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

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

有关示例,请参见为每个子系统使用多线程仿真

请注意

如果以快速加速模式模拟模型,或者从模型生成代码,并且在For Each子系统中划分掩码参数,那么For Each子系统中引用分区参数的任何表达式都必须是可调表达式。看到可调表达式限制(金宝app仿真软件编码器)

功能的支持金宝app

每个子系统block同金宝app时支持C-MEX s函数和Level-2 MATLAB®s函数,前提是s函数支持使用以下技术之一的多个执行实例:金宝app

  • C-MEX s函数必须声明ss金宝appSupportsMultipleExecInstances(年代,真的)mdlSetWorkWidths方法。

  • 二级MATLAB s函数必须声明块。金宝appsupportmultipleexecinstances = true在setup方法中。

如果你使用这些规格:

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

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

限制

有关的限制的信息每个子系统块,看每个子系统的限制

港口

输入

全部展开

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

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

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

输出

全部展开

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

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

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

块特征

数据类型

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

直接引线

没有

多维信号

有限的一个

适应信号

没有

讨论二阶导数过零检测

没有

一个实际的数据类型或功能支持取决于块实现。金宝app

扩展功能

在R2010a中引入