主要内容

迭代执行子系统

一个逻辑上执行子系统方法启用时,块在当前时间步上运行一次或多次控制块.控制块实现的控制逻辑类似于编程语言语句(如if-then、switch、while、for)所表达的控制逻辑。

迭代器子系统是一种逻辑执行的子系统,它在一个时间步中执行一次或多次,以响应子系统块内部的控制块。

请注意

而迭代器子系统而且对迭代器子系统块不能包含具有连续状态的块(例如,来自连续块库的块)。子系统中所有块的采样时间必须被继承(-1)或常数(正)

具有While结构的模型

而迭代器子系统块是一个子系统块预先配置为创建子系统的起点,该子系统在模拟时间步中重复执行,而逻辑(布尔)表达式为真。

考虑下面的模型。要打开模型,请参见ex_while_iterator_block

一个输入的1真正的)而迭代器块激活子系统。在每个时间步中,将当前迭代数加到运行总数中,直到达到最大值。

模型中的结构可以用下面的伪代码表示。

maximum_sum = 10;金额= 0;IF (sum > maximum_sum OR iteration_number > maximum_iterations) THEN condition = 0 END WHILE

用While结构创建模型

要创建示例模型,请使用以下过程。

  1. 放置一个而迭代器子系统在Simulink中金宝app®编辑器。双击子系统块以显示其内容。

  2. 双击而迭代器块以打开其块参数对话框。设置最大迭代次数20.而且国家在开始重置.选择显示迭代数港口复选框。

  3. 添加内存关系操作符,总和块。如图所示连接块。为内存块,选择继承采样时间复选框。

    的输出的迭代数而迭代器块与前一个值相加,直到和大于或等于从的最大和轮廓尺寸块1。

  4. 导航到模型的顶层。

  5. 连接一个常数阻塞到输入端口2。此块提供初始逻辑条件而迭代器块。设置恒定值到任何非零的数。

    而迭代器块需要一个初始逻辑条件(已标记的输入端口集成电路)。这个信号使而迭代器子系统块,并且必须起源于子系统外部。如果该值非零,则进行第一次迭代。

  6. 第二个连接常数阻塞到输入端口1。该块为迭代算法提供最大值。算法将连续的整数相加,直到达到最大值。

  7. 连接一个显示阻塞到输出端口1。此块显示来自While Integrator块输出端口的迭代次数。

  8. 运行一个仿真。

    在单个时间步中,将前四个迭代数相加,得到总数(10).在第五次迭代中,和(15)大于最大和(10),迭代停止,块等待下一个时间步骤。

请注意

类的迭代执行期间模拟时间不会增加虽然迭代子系统块。然而,子系统中的块将每次迭代视为一个时间步。结果,在一个而迭代器子系统块,带有状态的块的输出(即,其输出依赖于其前一个输入的块),反映了其在上一个迭代中的输入值循环。输出是反映前一个模拟时间步的块输入。例如,While子系统中的单元延迟块输出其在上一个迭代中的输入值循环,而不是前一个模拟时间步的值。

模型与For结构

对迭代器子系统块是一个子系统块,预先配置为创建一个子系统的起点,该子系统在模拟时间步中重复执行指定次数的迭代。

考虑下面的模型。要打开模型,请参见ex_for_iterator_block

For Iterator块的输入指定迭代次数。在每个时间步中,当前的迭代数被加到的运行总数中5迭代。

模型中的结构可以用下面的伪代码表示。

Number_of_iterations = 5 sum = 0;iteration_number = 0 FOR iteration_number = 0 TO number_of_iterations iteration_number = iteration_number + 1 sum = sum + iteration_number END FOR

用For结构创建模型

要创建示例模型,请使用以下过程。

  1. 放置一个对迭代器子系统在Simulink Edi金宝apptor中。双击子系统块以显示其内容。

  2. 双击对迭代器块以打开其块参数对话框。集国家在开始重置而且迭代限制源外部

  3. 添加内存总和,外港块。如图所示连接块。为内存块,选择继承采样时间复选框。

    的输出的迭代数对迭代器块被添加到它之前的值,用于指定的迭代次数轮廓尺寸块1。

  4. 导航到模型的顶层。

  5. 连接一个常数阻塞到输入端口1。的迭代次数对迭代器块。设置恒定值5

  6. 连接显示块到输出端口1和2。这些块显示迭代的次数对积分器的输出端口和内存块。

  7. 运行一个仿真。

    在每个时间步中,将前5个迭代数相加,得到总数(15).

使用赋值块

For Iterator块与assign块很好地配合使用,可以为vector或matrix中的值重新赋值。下面的例子展示了For Iterator块的用法。注意传递的数据中的矩阵维度。

该示例使用For子系统输出输入2 × 5矩阵(2行5列)的正弦值赋值块。流程如下。

  • 一个2 × 5矩阵被输入到Selector块和assign块。

  • Selector块从输入矩阵中剥离出一个2 × 1的矩阵,其列值由For Iterator块的当前迭代值指示。

  • 取2 × 1矩阵的sin。

  • sin值2乘1的矩阵被传递给assign块。

  • assign块将原始的2 × 5矩阵作为其输入之一,将2 × 1矩阵赋值到迭代值指示的列位置的原始矩阵中。

    控件的参数对话框中为重赋值指定的行赋值示例中的块是[1,2]。因为原始矩阵中只有两行,您也可以为这些行(即所有行)指定-1。

    请注意

    三角函数块已经能够计算矩阵的正弦。该示例仅使用trigonomometric Function块作为示例,通过assign块和for Iterator块的协作来更改矩阵的每个元素。

模型的例子

另请参阅