在输入信号或掩码参数的每个元素或子数组上重复执行并连接结果的子系统
金宝appSimulink / Ports &子系统
HDL编码器/端口和子系统
的每个子系统Block是一个子系统预先配置为创建子系统的起点的块,该子系统在模拟时间步期间在输入信号或掩码参数数组的每个元素或子数组上重复执行。
子系统内的块集表示应用于原始信号或掩码参数数组的单个元素或子数组的算法。的为每一个块允许您配置子系统输入或掩码参数到元素或子数组的分解,并配置各个结果到输出信号的连接。块参数分区维度而且分区宽度分别指定对输入信号或掩码参数数组进行切片的尺寸和每个切片的宽度。要对行向量进行分区,请指定分区维度作为2
.要对列向量进行分区,请指定分区维度作为1
.使用参数分区抵消指定分区之间的间隙或重叠。指定一个迭代次数将处理限制在数据的一个子集。要了解有关块参数的详细信息,请参见为每一个.
在这个子系统中,每个具有状态的块为它所处理的每个元素或子数组维护独立的状态集。因此,该子系统的操作在行为上类似于为原始输入信号或掩码参数数组中的每个元素复制子系统的内容,然后使用子系统各自的副本处理每个元素。
对于某些型号,每个子系统块还提高了代码的重用金宝app®编码器™生成的代码。考虑一个包含两个可重用对象的模型原子子系统块与相同的标量算法应用到信号的每个元素。如果这些子系统的输入信号尺寸不同,金宝app仿真软件编码器生成的代码包括两个不同的函数。你可以用两个相同的子系统替换这两个子系统每个子系统配置为使用相同算法处理各自输入的每个元素的块。在这种情况下,金宝app仿真软件编码器生成的代码由单个函数组成,该函数由输入信号元素的数量参数化。类的每个惟一实例调用此函数两次每个子系统块在模型中。对于每一种情况,输入信号元素都有不同的值。
在快速加速器模式下模拟模型时,Simulink使用多核执行来更快地模拟for Each子系统。金宝app金宝appSimulink自动配置每个子系统在快速加速器模式下运行的前两个时间步骤,以比较并行和串行执行时间。金宝app然后,Simulink在模拟运行的后续时间步骤中为并行多核执行指定For Each子系统,如果这样做可以加快执行时间的话。对于嵌套的For Each子系统,多核执行只适用于顶层子系统。多核执行不适用于包含连续状态或连续状态的For Each子系统函数调用者块。
要抑制给定for Each子系统的多核执行,请设置MultithreadedSim
参数。为每一个块(而不是每个子系统阻止自己)到“关闭”
.
set_param (ForEachBlockName、“MultithreadedSim”、“了”)
为了抑制模型中所有子系统的多核执行,设置模型配置参数MultithreadedSim
来“关闭”
.
set_param (ModelName、“MultithreadedSim”、“了”)
若要重新启用多核执行,请设置相关的MultithreadedSim
参数的默认值“汽车”
.
有关示例,请参见为每个子系统使用多线程仿真.
的每个子系统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函数执行方法从mdlStart
到mdlTerminate
对s函数处理的每个元素调用一次。因此,需要注意不要在重复调用时释放相同的内存mdlTerminate
.例如,考虑一个C-MEX s函数,它为内部的运行时参数分配内存mdlSetWorkWidths
.内存只需要释放一次mdlTerminate
.作为解决方案,在第一次调用后将指针设置为空mdlTerminate
.
的每个子系统Block有以下限制和变通方法。
限制 | 解决方案 |
---|---|
不能在For Each子系统中直接记录总线或总线信号数组。 |
使用以下方法中的一种:
|
如果存在以下任一条件,则不能在For Each子系统中的引用模型中记录信号:
|
对于第一种情况,使用加速模式。 对于第二种情况,使用正常或快速加速模式。 |
您不能在For Each子系统中记录块的状态。 |
保存并恢复模拟状态。 |
不能使用Normal模式来模拟For Each子系统中的Model块。 |
使用加速或快速加速模式。 |
如果两个for Each子系统的输入和输出信号是向量(1-D或2-D行或列向量),则为两个内容相同的for Each子系统生成可重用代码。对于n-D输入和输出信号,只有当信号被划分的维度是最高维度时,才会生成可重用代码。 |
排列信号维数,将划分维数和连接维数转换为n-D信号的最高非单维数。 |
的每个子系统Block不支持以下特性:金宝app
您不能在For Each子系统中包含这些块或s函数:
数据存储内存,数据存储读取,或数据存储写块
的从工作空间如果输入是a,则阻塞时间结构
它有一个空的时间字段
的到工作空间而且到文件数据保存块
转到而且从跨越子系统边界的块
参考模型,模拟模式设置为正常
影子港口
ERT S-functions
要获得支持For Each子系统的块的完整列表,请键入金宝appshowblockdatatypetable
在MATLAB命令行。
你不能使用这些类型的信号:
在系统内部使用外部存储类的信号
子系统输入和输出边界上的帧信号
适应信号
在子系统内部创建线性化点
为子系统内的块传播雅可比矩阵标志。你可以用MATLAB来检验这个条件J.Mi.BlockAnalyticFlags.jacobian
,在那里J
是雅可比矩阵。来验证雅可比矩阵的正确性每个子系统布洛克:
看看For Each Subsystem雅可比矩阵的标签。如果是的话“not_金宝appsupported”
,则雅可比矩阵不正确。
将每个方块移出每个子系统计算它的雅可比矩阵。如果任何块是“not_supported”或金宝app有警告标记,则For Each Subsystem雅可比矩阵是不正确的。
你不能执行这些类型的代码生成:
一代金宝app仿真软件编码器功能目标
金宝app仿真软件编码器以下两种情况下的代码生成:
一个Stateflow®或MATLAB函数块驻留在子系统中。
此块尝试访问子系统外部的全局数据,例如数据存储内存块或金宝app仿真软件。信号
的对象ExportedGlobal
存储类。
PLC代码生成