主要内容

对于每个子系统

对输入信号或掩码参数的每个元素或子数组重复执行并连接结果的子系统

  • 库:
  • 万博1manbetxSimulink / Ports&Subsystems

    HDL编码器/端口和子系统

  • 对于每个子系统块

描述

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

子系统中的块集合表示应用于原始信号或掩码参数阵列的单个元素或子阵列的算法。的为每一个块允许您将子系统输入或掩码参数配置为元素或子数组,并将单个结果配置为输出信号。块的参数分区维度分区宽度分别指定分割输入信号或掩码参数阵列的尺寸和每个分割的宽度。要对行向量进行分区,请指定分区维度作为2.要分区列向量,请指定分区维度作为1.使用的参数分区抵消指定分区之间的间隙或重叠。指定一个迭代次数将处理限制为数据的子集。要了解块参数的更多信息,请参阅为每一个

在这个子系统中,每个有状态的块为它处理的每个元素或子数组维护独立的状态集。因此,这个子系统的操作在行为上类似于为原始输入信号或掩码参数数组中的每个元素复制该子系统的内容,然后使用该子系统的各自副本处理每个元素。

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

多核执行支持万博1manbetx

当您在Rapid Accelerator模式下模拟模型时,Simulink使用多核执行来更快地模拟for Eac万博1manbetxh子系统。万博1manbetxSimulink自动分析每个符合条件的For each子系统在Rapid Accelerator模式下运行的前两个时间步骤,以比较并行和串行执行时间。万博1manbetx然后,Simulink将For Each子系统指定为在模拟运行的后续时间步骤中并行、多核执行的子系统,如果这样做会加快执行时间的话。对于嵌套的For Each子系统,多核执行仅适用于顶层子系统。多核执行不适用于包含连续状态或函数来电者块。

要抑制给定for Each子系统的多核执行,请设置MultithreadedSim参数的为每一个块在子系统(不是对于每个子系统块本身)“关闭”

set_param (ForEachBlockName,'multithreadsim','关闭')

要抑制模型中所有for Each子系统的多核执行,请设置模型配置参数MultithreadedSim“关闭”

set_param (ModelName,'multithreadsim','关闭')

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

例如,看到为每个子系统使用多线程模拟

功能的支持万博1manbetx

对于每个子系统块同时支持C万博1manbetx-MEX s -函数和Level-2 MATLAB®s -函数,前提是s -函数支持使用以下技术之一的多个执行实例:万博1manbetx

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

  • 一个二级MATLAB s函数必须声明block.万博1manbetxsupportsmultipleexecinstances = true在设置方法中。

如果使用上述规格:

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

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

限制

对于每个子系统块具有下列限制和变通方法。

限制 解决方案

您无法直接记录总线或一系列总线信号,每个子系统。

使用以下方法之一:

  • 使用总线选择器块选择要记录的信号,并将这些信号标记为信号记录。

  • 将信号附加到Outport块,并在For Each子系统外部记录信号。

如果存在以下任一条件,则不能在For Each子系统中的引用模型中记录信号:

  • 对于每个子系统,在快速加速器模式下模拟模型。

  • For Each子系统本身位于由model块在Accelerator模式中引用的模型中。

对于第一个条件,请使用加速器模式。

对于第二种情况,使用普通或快速加速模式。

不能在For Each子系统中记录块的状态。

保存并恢复模拟状态。

您不能使用普通模式来为每个子系统模拟A内的模型块。

使用加速器或快速加速器模式。

如果它们的输入和输出信号是向量(1-D或2-D行或列向量),则具有相同内容的每个子系统生成可重用代码。对于N-D输入和输出信号,仅当信号被分区的维度是最高维度时,才会生成可重用代码。

对信号维数进行置换,将信号的划分维数和连接维数转换为n-D信号的最高非单次维数。

对于每个子系统Block不支持以下特性:万博1manbetx

  • 不能在For Each子系统中包含这些块或s -函数:

    • 数据存储内存数据存储读取, 或者数据存储写

    • 从工作空间块,如果输入是结构与时间它有一个空的时间场

    • 到工作空间到文件数据保存块

    • 跨越子系统边界的块

    • 参考模型,模拟模式设置为Normal

    • 影子港口

    • ERT S-functions

    有关支持每个子系统的块的完整列表,请键入万博1manbetxshowblockdatatypetable在MATLAB命令行。

  • 你不能使用这些类型的信号:

    • 在系统内部使用外部存储类的信号

    • 子系统输入和输出边界的帧信号

    • 适应信号

  • 在子系统内部创建一个线性化点

  • 传播子系统内的块的雅可比矩阵标志。你可以在MATLAB中用J.Mi.BlockAnalyticFlags.jacobian,在那里J是雅可比矩阵的对象。验证的雅可比矩阵的正确性对于每个子系统布洛克:

    • 看看For Each子系统雅可比矩阵的标签。如果它是“not_万博1manbetxsupported”,则雅可比矩阵是错误的。

    • 把每个块从对于每个子系统计算它的雅可比矩阵。如果任何块是" not_supported 万博1manbetx"或带有警告标记,则For Each子系统雅可比矩阵是不正确的。

  • 您无法执行这些类型的代码生成:

    • 代的一个万博1manbetx仿真软件编码器功能目标

    • 万博1manbetx仿真软件编码器在以下条件下的代码生成:

      • 州流®或者MATLAB函数块驻留在子系统中。

      • 这个块尝试访问子系统外部的全局数据,例如数据存储内存块或万博1manbetxsimulink.signal.的对象ExportedGlobal存储类。

    • PLC代码生成

港口

输入

全部展开

子系统块的信号输入,指定为标量、向量或矩阵。放置一个inport.块在一个子系统块将外部输入端口添加到块。端口标签匹配的名称inport.块。

使用inport.块接收来自本地环境的信号。

数据类型:一半|单身的||INT8.|int16|int32|int64|uint8|uint16|uint32|UINT64|布尔|固定点|枚举|公共汽车

输出

全部展开

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

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

数据类型:一半|单身的||INT8.|int16|int32|int64|uint8|uint16|uint32|UINT64|布尔|固定点|枚举|公共汽车

模型的例子

块特征

数据类型

布尔一个|公共汽车一个|一个|枚举一个|固定点一个|一半一个|整数一个|单身的一个

直接喂养

多维信号

有限的一个

适应信号

讨论二阶导数过零检测

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

扩展功能

介绍了R2010a