While Iterator Subsystem
当逻辑表达式为 true 时,在仿真时间步中重复执行子系统
库:
Simulink /
Ports & Subsystems
描述
While Iterator Subsystem 模块是一个预先配置的 Subsystem 模块,可以作为一个起点,用于创建在仿真时间步期间逻辑条件为 true 时对输入信号的每个元素或子数组重复执行的子系统。其执行由子系统内部的 While Iterator 模块控制。有关示例,请参阅ex_while_iterator_block。
注意
要在模型的仿真停止时间之前中断循环并手动终止仿真,请按 Ctrl + C。

使用 While Iterator Subsystem 模块可以建模:
等效于程序中的
while或do-while循环的模块图。在多次迭代后收敛于更精确解的迭代算法。
当使用简化的初始化模式时,如果您在 While Iterator Subsystem 模块中放置需要经过一段时间才能得到结果的模块(例如 Discrete-Time Integrator 模块),Simulink® 会显示错误。
如果 While Iterator Subsystem 模块的输出信号是函数调用信号,则在您仿真模型或更新图时,Simulink 会显示错误。
示例
Parallel Channel Power Allocation
A potential use of the Find Nonzero Elements block. This block outputs a variable-size signal containing the indices of the nonzero values of the input.
端口
输入
在子系统模块中放置一个 Inport 模块会向该模块添加一个外部输入端口。端口标签与 Inport 模块的名称相匹配。
使用 Inport 模块可以从局部环境中获取信号。
数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus
将连接到 Input 模块的 While Iterator 模块置于 Subsystem 模块时,该外部输入端口将添加到子系统模块中。
数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point
输出
在子系统模块中放置一个 Outport 模块会添加该模块的输出端口。子系统模块上的端口标签是 Outport 模块的名称。
使用 Outport 模块可以向局部环境发送信号。
数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus
参数
要以交互方式编辑模块参数,请使用属性检查器。在 Simulink 工具条中,在仿真选项卡的准备库中,选择属性检查器。
常设
选择如何在 Subsystem 模块图标上显示端口标签。
无 - 不显示端口标签。
FromPortIcon - 如果对应的端口图标显示了信号名称,则在 Subsystem 模块上显示信号名称。否则,如果模块名称是默认名称,则显示端口模块名称或端口号。
FromPortBlockName - 在 Subsystem 模块上显示对应端口模块的名称。
SignalName - 如果连接到端口的信号已命名,则会在 Subsystem 模块上显示信号的名称。否则,显示相应端口模块的名称。
有关 Subsystem 模块上的端口标签编辑,请参阅编辑子系统模块上的端口标签。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | ShowPortLabels |
| 值: | 'FromPortIcon' (默认) | 'FromPortBlockName' | 'SignalName' | 'none' |
控制用户对子系统内容的访问。
ReadWrite - 允许打开和修改子系统内容。
ReadOnly - 允许打开但不允许修改子系统。如果子系统在模块库中,您可以创建和打开该子系统的链接,创建和修改子系统的本地副本,但不能更改权限或修改原始模块库实例的内容。
NoReadOrWrite - 禁止打开或修改子系统。如果子系统在模块库中,您可以在模型中创建该子系统的链接,但不能打开、修改、更改权限或创建子系统的本地副本。
如果您尝试查看其读取/写入权限参数设置为 NoReadOrWrite 的子系统的内容,将不会收到响应。例如,当您双击此类子系统时,软件不会打开该子系统,并且不显示任何消息。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | Permissions |
| 值: | 'ReadWrite' (默认) | 'ReadOnly' | 'NoReadOrWrite' |
输入软件执行子系统时,如果发生错误要调用的函数的名称。
该软件向函数传递两个参量:子系统的句柄以及指定错误类型的字符向量。如果未指定任何函数,当执行子系统导致错误时,软件将显示常规错误消息。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | ErrorFcn |
| 值: | '' (默认) | function name in quotes |
| 数据类型: | char | string |
全部 - 解析此子系统使用的所有工作区变量的名称,包括用来指定模块参数值和 Simulink 数据对象(例如,
Simulink.Signal对象)的工作区变量的名称。ExplicitOnly - 只解析用来指定模块参数值、数据存储内存(不存在模块)、信号以及标有“must resolve”状态的工作区变量的名称。
无 - 不解析任何工作区变量名称。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | PermitHierarchicalResolution |
| 值: | 'All' (默认) | 'ExplicitOnly' | 'None' |
选中此参数可显示重新初始化事件端口。清除此参数可删除这些端口。
依赖关系
要启用此参数,请选择视为原子单元。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | ShowSubsystemReinitializePorts |
| 值: | 'off' (默认) | 'on' |
代码生成
设置“代码生成”选项卡上的参数需要具有 Simulink Coder™ 或 Embedded Coder® 许可证。
选择要为原子(非虚拟)子系统生成的代码格式。
自动 - 软件将根据模型中存在的子系统的类型和实例数为您选择最佳格式。
内联 - 软件无条件内联子系统。
不可重用函数 - 如果将文件名选项设置为自动,则软件会将单独函数打包到模型文件中。如果使用不同的文件名将文件名选项设置为使用子系统名称、使用函数名称或用户指定,则软件将单独函数分别打包到独立的文件中。
采用此设置的子系统生成的函数可能有参量,具体取决于 函数接口 参数设置。您可以使用参数 函数名称 和 文件名(无扩展名) 分别为生成的函数和文件命名。这些函数不可重入。
可重用函数 - 当模型中包含子系统的多个实例时,软件可以生成带参量的函数,该函数将允许重用子系统的代码。
此选项还可生成带参量的函数,允许在为模型引用层次结构(其中引用的模型包含子系统的多个实例)生成的代码中重用子系统代码。在这种情况下,子系统必须是模块库中的子系统。
有关详细信息,请参阅:
Generate Inlined Subsystem Code (Simulink Coder)
将子系统代码生成为单独的函数和文件 (Simulink Coder)
Generate Reusable Code from Library Subsystems Shared Across Models (Simulink Coder)
默认值取决于模块配置。例如,Subsystem 模块的默认值为自动。CodeReuseSubsystem 模块的默认值为可重用函数。
提示
如果您希望子系统的多个实例表示为一个可重用函数,可以为每个子系统指定自动或可重用函数。最好是使用其中一个,因为使用两个将生成两个可重用函数,每个指定一个函数。仅当可以重用时,这些选项的结果才会有区别。选择自动则不允许控制子系统代码的函数或文件名。
可重用函数和自动选项都尝试确定是否存在子系统的多个实例,以及是否可以重用代码。者两个选项的行为区别体现在不能重用时:
自动生成内联代码,或者在禁止内联的情况下为每个子系统实例生成一个单独的函数。
可重用函数为模型中的每个子系统实例生成一个单独的参量函数。
如果您在生成的代码处于源代码管理状态下时选择了可重用函数,请将文件名选项设置为使用子系统名称、使用函数名称或用户指定。否则,只要您修改模型,代码文件的名称就会改变,从而无法对文件进行源代码管理。
如果您选择除自动或内联以外的选项,并且使用模型配置参数状态,则代码生成器会生成单独的输出和更新方法。代码生成器不考虑为代码生成和仿真合并输出和更新方法设定。
依赖关系
此参数需要 Simulink Coder 许可证才能生成代码。
要启用此参数,请选择视为原子单元。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | RTWSystemCode |
| 值: | 'Auto' | 'Inline' | 'Nonreusable function' | 'Reusable function' |
选择软件如何命名它为子系统生成的函数。
如果您拥有 Embedded Coder 许可证,则可以使用“配置参数”对话框的代码生成 > 标识符窗格上的选项来控制函数名称。
自动 - 使用默认的命名约定
指定唯一的函数名称,其中model_subsystem()model是模型的名称,subsystem是子系统的名称,或者,在重用代码时,也可以是相同子系统的名称。如果您为函数打包参数选择了可重用函数,而模型引用层次结构中存在可重用子系统的多个实例,则要为子系统生成可重用代码,必须将函数名称选项设置为自动。
使用子系统名称 - 使用子系统名称作为函数名称。默认情况下,函数名称使用命名约定
。model_subsystem当子系统在模块库模块中而子系统参数 函数打包 设置为可重用函数时,如果您设置使用子系统名称选项,代码生成器将使用模块库模块的名称作为子系统函数名和文件名。
用户指定 - 启用函数名称字段。输入任何合法的 C 或 C++ 函数名,此名称必须唯一。
有关详细信息,请参阅将子系统代码生成为单独的函数和文件 (Simulink Coder)。
默认值取决于模块配置。例如,Subsystem 模块的默认值为自动。CodeReuseSubsystem 模块的默认值为使用子系统名称。
依赖关系
此参数要求具有 Simulink Coder 许可证。
要启用此参数,请将函数打包设置为不可重用函数或可重用函数。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | RTWFcnNameOpts |
| 值: | 'Auto' | 'Use subsystem name' | 'User specified' |
为子系统代码指定唯一的有效 C 或 C++ 函数名称。
如果您想为函数指定特定的名称,而不是让 Simulink Coder 代码生成器分配其自己自动生成的名称或者使用子系统名称,请使用此参数。有关详细信息,请参阅将子系统代码生成为单独的函数和文件 (Simulink Coder)。
依赖关系
此参数要求具有 Simulink Coder 许可证。
要启用此参数,请将函数名称选项设置为用户指定。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | RTWFcnName |
| 值: | '' (默认) | function name in quotes |
| 数据类型: | char | string |
选择软件如何命名它为子系统生成的函数的单独文件。
自动 - 根据子系统的配置以及子系统在模型中的实例数,自动将生成不同的结果。
如果代码生成器不为子系统生成单独的文件,将在从子系统的父级系统生成的代码模块内生成子系统代码。如果子系统的父级就是模型本身,将在
或model.c内生成子系统代码。model.cpp如果您为函数打包参数选择了可重用函数,而您生成的代码处于源代码管理状态下,请不要将文件名选项值指定为自动。这样可以防止由于不相关的模型修改而更改生成的文件名,而在使用源代码管理来管理配置时,文件名的改变会产生问题。
如果您为函数打包参数选择了可重用函数,而模型引用层次结构中存在可重用子系统的多个实例,则要为子系统生成可重用代码,必须将文件名选项设置为自动。
使用子系统名称 - 代码生成器将生成一个单独的文件,并使用子系统(或模块库模块)名称作为文件名。
当文件名选项设置为使用子系统名称时,如果模型中包含 Model 模块,或者正在为模型生成模型引用目标,则子系统文件名将被破坏。在这些情况下,子系统的文件名由子系统名称加上模型名称前缀构成。
使用函数名称 - 代码生成器使用函数名称选项指定的函数名称作为文件名。
用户指定 - 此选项将启用文件名(无扩展名) 文本输入字段。代码生成器将使用您输入的名称作为文件名。可以输入任何文件名,但不要带
.c或.cpp(或任何其他)扩展名。此文件名不必是唯一的。虽然子系统源文件名不需要唯一,但必须避免使用不唯一名称,否则会导致循环依赖关系。例如,
sys_a.h包括sys_b.h,sys_b.h包括sys_c.h,而sys_c.h包括sys_a.h。
默认值取决于模块配置。例如,Subsystem 模块的默认值为自动。CodeReuseSubsystem 模块的默认值为使用函数名称。
依赖关系
此参数要求具有 Simulink Coder 许可证。
要启用此参数,请将函数打包设置为不可重用函数或可重用函数。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | RTWFileNameOpts |
| 值: | 'Auto' | 'Use subsystem name' | 'Use function name' | 'User specified' |
您指定的文件名不必是唯一的。但是,避免使用非唯一名称,否则会导致循环依赖关系。例如,sys_a.h 包括 sys_b.h,sys_b.h 包括 sys_c.h,而 sys_c.h 包括 sys_a.h。
有关详细信息,请参阅将子系统代码生成为单独的函数和文件 (Simulink Coder)。
依赖关系
此参数要求具有 Simulink Coder 许可证。
要启用此参数,请将文件名选项设置为用户指定。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | RTWFileName |
| 值: | '' (默认) | filename in quotes |
| 数据类型: | char | string |
选择如何在生成的函数中使用参量。
void_void - 生成不带参量的函数,并将数据作为全局变量进行传递。例如:
void subsystem_function(void)
允许参量(优化) - 生成带参量的函数,而不是将数据作为全局变量进行传递。此规范可以减少全局 RAM。此选项可以减小代码大小、提高执行速度,并支持代码生成器应用更多的优化。例如:
void subsystem_function(real_T rtu_In1, real_T rtu_In2, real_T *rty_Out1)在某些情况下,当生成优化代码时,代码生成器可能不会生成具有参量的函数。
允许参量(匹配图形接口) - 生成一个函数接口,该接口与 Subsystem 图形模块接口匹配的参量。生成的函数接口是可预知的,并且不会更改。可预知的接口对于调试和测试代码以及与外部应用程序集成非常有用。例如,如果模型有两个 Inport 模块和两个 Outport 模块,则生成的函数接口是:
void subsystem_function(real_T rtu_In1, real_T rtu_In2, real_T *rty_Out1, real_T *rty_Out2)
有关详细信息,请参阅:
减少不可重用的子系统函数中的全局变量 (Embedded Coder)
Generate Predictable Function Interface to Match Graphical Block Interface (Embedded Coder)
为非虚拟子系统生成模块化函数代码 (Embedded Coder)
依赖关系
此参数需要 Embedded Coder 许可证和一个基于 ERT 的系统目标文件。
要启用此参数,请将函数打包设置为不可重用函数。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | FunctionInterfaceSpec |
| 值: | 'void_void' (默认) | 'Allow arguments (Optimized)' | 'Allow arguments (Match graphical interface)' |
生成其中原子子系统的内部数据与其父级模型分离且归子系统所有的子系统函数代码。
off- 不生成其中原子子系统的内部数据与其父级模型分离且归子系统所有的子系统函数代码。on- 生成其中原子子系统的内部数据与其父级模型分离且归子系统所有的子系统函数代码。子系统数据结构的声明独立于父模型数据结构。带单独数据的子系统具有其自己的模块 I/O 和DWork数据结构。因此,为子系统生成的代码更容易跟踪和检验。数据分离还可以减小整个模型的全局数据结构的最大大小,因为它们被拆分成多个数据结构。
有关如何为原子子系统生成模块化函数代码的详细信息,请参阅为非虚拟子系统生成模块化函数代码 (Embedded Coder)。
有关如何对原子子系统应用内存段的详细信息,请参阅Override Default Memory Placement for Subsystem Functions and Data (Embedded Coder)。
依赖关系
此参数需要 Embedded Coder 许可证和一个基于 ERT 的系统目标文件。
要启用此参数,请将函数打包设置为不可重用函数。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | FunctionWithSeparateData |
| 值: | 'off' (默认) | 'on' |
选择软件如何将内存段应用于子系统初始化和终止函数。
从模型继承 - 将根模型内存段应用于子系统函数代码。
默认 - 不将内存段应用于子系统的系统代码,覆盖任何模型级的设置。
将模型的某个内存段应用于子系统。
提示
可能的值根据您为模型配置设置的内存段数据包(如果有)而不同。请参阅Control Data and Function Placement in Memory by Inserting Pragmas (Embedded Coder)和模型配置参数:代码生成 (Simulink Coder)。
如果您没有为模型配置数据包,将只显示从模型继承。否则,列表中将包括默认以及模型包中的所有内存段。
这些选项对于为给定子系统覆盖模型内存段设置很有用。有关如何对原子子系统应用内存段的详细信息,请参阅Override Default Memory Placement for Subsystem Functions and Data (Embedded Coder)。
依赖关系
此参数需要 Embedded Coder 许可证和一个基于 ERT 的系统目标文件。
要启用此参数,请将函数打包设置为不可重用函数或可重用函数。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | RTWMemSecFuncInitTerm |
| 值: | 'Inherit from model' (默认) | 'Default' | model memory section in quotes |
选择 Embedded Coder 如何将内存段应用于子系统执行函数。
从模型继承 - 将根模型内存段应用于子系统函数代码。
默认 - 不将内存段应用于子系统的系统代码,覆盖任何模型级的设置。
将模型的某个内存段应用于子系统。
提示
可能的值根据您为模型配置设置的内存段数据包(如果有)而不同。请参阅Control Data and Function Placement in Memory by Inserting Pragmas (Embedded Coder)和模型配置参数:代码生成 (Simulink Coder)。
如果您没有为模型配置数据包,将只显示从模型继承。否则,列表中将包括默认以及模型包中的所有内存段。
这些选项对于为给定子系统覆盖模型内存段设置很有用。有关如何对原子子系统应用内存段的详细信息,请参阅Override Default Memory Placement for Subsystem Functions and Data (Embedded Coder)。
依赖关系
此参数需要 Embedded Coder 许可证和一个基于 ERT 的系统目标文件。
要启用此参数,请将函数打包设置为不可重用函数或可重用函数。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | RTWMemSecFuncExecute |
| 值: | 'Inherit from model' (默认) | 'Default' | model memory section in quotes |
选择软件如何将内存段应用于子系统常量。
从模型继承 - 将根模型内存段应用于子系统数据。
默认 - 不要将内存段应用于子系统数据,将覆盖任何模型级的设置。
将模型的某个内存段应用于子系统。
提示
您指定的内存段将应用于生成的代码中对应的全局数据结构。有关为原子子系统生成的全局数据结构的基本信息,请参阅Standard Data Structures (Simulink Coder)。
可能的值根据您为模型配置设置的内存段数据包(如果有)而不同。请参阅Control Data and Function Placement in Memory by Inserting Pragmas (Embedded Coder)。
如果您没有为模型配置数据包,将只显示从模型继承。否则,列表中将包括默认以及模型包中的所有内存段。
这些选项对于为给定子系统覆盖模型内存段设置很有用。有关如何对原子子系统应用内存段的详细信息,请参阅Override Default Memory Placement for Subsystem Functions and Data (Embedded Coder)。
依赖关系
此参数需要 Embedded Coder 许可证和一个基于 ERT 的系统目标文件。
要启用此参数,请将函数打包设置为不可重用函数,然后选择具有独立数据的函数参数。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | RTWMemSecDataConstants |
| 值: | 'Inherit from model' (默认) | 'Default' | model memory section in quotes |
选择软件如何将内存段应用于子系统内部数据。
从模型继承 - 将根模型内存段应用于子系统数据。
默认 - 不要将内存段应用于子系统数据,将覆盖任何模型级的设置。
将模型的某个内存段应用于子系统。
提示
您指定的内存段将应用于生成的代码中对应的全局数据结构。有关为原子子系统生成的全局数据结构的基本信息,请参阅Standard Data Structures (Simulink Coder)。
可能的值根据您为模型配置设置的内存段数据包(如果有)而不同。请参阅Control Data and Function Placement in Memory by Inserting Pragmas (Embedded Coder)。
如果您没有为模型配置数据包,将只显示从模型继承。否则,列表中将包括默认以及模型包中的所有内存段。
这些选项对于为给定子系统覆盖模型内存段设置很有用。有关如何对原子子系统应用内存段的详细信息,请参阅Override Default Memory Placement for Subsystem Functions and Data (Embedded Coder)。
依赖关系
此参数需要 Embedded Coder 许可证和一个基于 ERT 的系统目标文件。
要启用此参数,请将函数打包设置为不可重用函数,然后选择具有独立数据的函数参数。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | RTWMemSecDataInternal |
| 值: | 'Inherit from model' (默认) | 'Default' | model memory section in quotes |
选择软件如何将内存段应用于子系统参数。
从模型继承 - 将根模型内存段应用于子系统函数代码。
默认 - 不将内存段应用于子系统的系统代码,覆盖任何模型级的设置。
将模型的某个内存段应用于子系统。
提示
您指定的内存段将应用于生成的代码中对应的全局数据结构。有关为原子子系统生成的全局数据结构的基本信息,请参阅Standard Data Structures (Simulink Coder)。
可能的值根据您为模型配置设置的内存段数据包(如果有)而不同。请参阅Control Data and Function Placement in Memory by Inserting Pragmas (Embedded Coder)。
如果您没有为模型配置数据包,将只显示从模型继承。否则,列表中将包括默认以及模型包中的所有内存段。
这些选项对于为给定子系统覆盖模型内存段设置很有用。有关如何对原子子系统应用内存段的详细信息,请参阅Override Default Memory Placement for Subsystem Functions and Data (Embedded Coder)。
依赖关系
此参数需要 Embedded Coder 许可证和一个基于 ERT 的系统目标文件。
要启用此参数,请将函数打包设置为不可重用函数,然后选择具有独立数据的函数参数。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | RTWMemSecDataParameters |
| 值: | 'Inherit from model' (默认) | 'Default' | model memory section in quotes |
模块特性
扩展功能
实际代码生成支持取决于模块实现。
实际数据类型支持取决于模块实现。
版本历史记录
在 R2006a 之前推出现在,您可以在迭代子系统的特定迭代上暂停仿真,方法是将信号断点添加到由以下各项产生的信号中:
While Iterator Subsystem 模块内 While Iterator 模块的迭代序号输出端口
For Iterator Subsystem 模块内 For Iterator 模块的迭代器值输出端口
For Each Subsystem 模块内 For Each 模块的分区索引输出端口
在以前的版本中,您可以在这些位置添加断点,但断点不会暂停仿真,并且在模块图中显示为无效。
相同位置的端口值标签现在显示迭代序号。在以前的版本中,这些位置的端口值标签显示 inaccessible。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)

