一个控制流分系统由控制流块启用时,在当前时间步骤执行一次或多次。控制流块实现的控制逻辑类似于编程语言的控制流语句(例如,if - then
,while-do
,开关
,为
).
您可以使用框图来建模控制流逻辑,等价于以下C编程语言语句:
为
if - else
开关
而
您可以使用以下块来执行条件控制流逻辑。
下面的图表示if - else
控制流。
构造一个if - else
控制流程图如下:
在If块参数对话框中,设置If块的输入。在内部,输入被指定为u1, u2,……,联合国
和用于构造输出条件。
在“If块参数”对话框中,设置If块的输出端口If -else条件。
在“If块参数”对话框中,设置“输出端口”。使用输入值U1, u2……,联合国
表示对话框中if、elseif和else条件字段的条件。其中,只有if字段是必需的。可以输入多个elseif条件,选中复选框启用else条件。
如果端口的大小写为真,则将if块上的每个if、elseif和else条件输出端口连接到要执行的子系统。
创建这些子系统动作子系统中的端口块。这将创建一个带有名为Action的端口的原子动作子系统,然后将其连接到If块上的条件。
一旦连接上,子系统就具有它所连接的条件的标识,并像已启用的子系统一样运行。
下面的图表示开关
控制流。
构造一个开关
控制流程如下:
Switch Case块的输入是开关
控制流程。这个值决定要执行的适当案例。该端口的非整数输入将被截断。
使用Switch Case块的参数对话框,将案例添加到Switch Case块。case可以是单值或多值。您还可以添加一个可选的默认大小写,如果没有其他大小写为真,则默认大小写为真。一旦添加,这些案例就会显示为Switch Case块上的输出端口。
将每个Switch Case块Case输出端口连接到Action子系统。
Switch case块的每个case输出都连接到一个子系统,如果端口的case为真,则执行该子系统。您可以通过在子系统中放置Action Port块来创建这些子系统。这将创建一个带有名为Action的端口的原子子系统,然后将其连接到Switch Case块上的条件。一旦连接,子系统就具有条件的标识,并像已启用的子系统一样运行。将为该案例执行的所有块编程放在这个子系统中。
实例的子系统执行后,将执行隐含的中断,该中断将退出开关
控制流程报表。万博1manbetx动态仿真模块®开关
控制流语句实现没有表现出C语言的“失败”行为开关
语句。
使用以下块执行而
而且为
循环。
C声明 | 等价的块 |
---|---|
|
|
|
|
|
下面的图表说明了一个而
循环。
在这个例子中,Simulink在每万博1manbetx个时间步骤中重复执行While子系统的内容,直到满足While迭代器块指定的条件。特别是,对于While迭代器块指定的循环的每次迭代,Simulink调用While子系统中所有块的更新和输出方法,其顺序与在非迭代原子子系统中调用方法的顺序相同。万博1manbetx
在执行While子系统的迭代过程中,模拟时间不会提前。然而,While子系统中的块将每次迭代视为一个时间步长。因此,在While子系统中,具有状态的块的输出(即其输出依赖于其先前输入的块)反映了其在前一次迭代中的输入值而
循环。输出是不在前面的模拟时间步骤中反映该块的输入。例如,While子系统中的单元延迟块输出其在前一次迭代中的输入值而
循环,而不是前一个模拟时间步长的值。
构造一个而
循环如下:
主机子系统标签变为虽然{…}
,表示它正在建模一个while循环。这些子系统就像被触发的子系统一样。这个子系统是块编程的宿主,您希望用While Iterator块进行迭代。
为While Iterator块的初始条件数据输入端口提供一个数据输入。
While迭代器块需要初始条件数据输入(有标记)集成电路
)的第一次迭代。这必须起源于While子系统之外。如果这个值非零,则进行第一次迭代。
其余迭代的条件传递给标记的数据输入端口气孔导度
.该端口的输入必须来自While子系统内部。
(可选)设置While Iterator块,通过其属性对话框输出其迭代器值。
第一次迭代的迭代器值为1,后续迭代的迭代器值加1。
(可选)将While Iterator块的迭代更改为
延伸的
通过其属性对话框。
这将主机子系统的标签更改为{…},
.与一个延伸的
迭代时,While迭代块不再有初始条件(IC)端口,因为子系统中的所有块都在条件端口(标记为气孔导度
)被选中。
在子系统中创建定义子系统输出的框图。
图表不能包含具有连续状态的块(例如,来自continuous块库的块)。所有块的采样时间必须继承(-1
)或常数(正)
.
有关更多信息,请参见而迭代器块。
下图表示a为
循环:
在这个例子中,Simulink在每万博1manbetx个时间步骤中多次执行For子系统的内容。For Iterator块的输入指定迭代次数。对于每一次迭代为
在循环中,S万博1manbetximulink调用For子系统中所有块的更新和输出方法的顺序与它调用方法的顺序相同,如果它们在一个非迭代的原子子系统中。
在For子系统的迭代执行期间,模拟时间不会提前。然而,For子系统中的块将每个迭代视为一个时间步长。因此,在For子系统中,具有状态的块的输出(即,其输出依赖于其先前输入的块)反映了其在前一次迭代中的输入值为
循环。输出是不在前面的模拟时间步骤中反映该块的输入。例如,For子系统中的单元延迟块输出其在上一个迭代中的输入值为
循环,而不是前一个模拟时间步长的值。
构造一个为
循环如下:
For Iterator块与Assignment块一起工作,可以为vector或matrix中的值重新赋值。下面的例子展示了For Iterator块的使用。注意传递的数据中的矩阵维数。
上面的示例使用For子系统输出输入2 × 5矩阵(2行,5列)的sin值赋值块。具体流程如下。
一个2乘5的矩阵输入到Selector块和Assignment块。
Selector块在For Iterator块的当前迭代值所指示的列值处从输入矩阵中剥离2 × 1矩阵。
对2 × 1矩阵求sin。
sin值2乘1矩阵被传递给赋值块。
赋值块将原始的2 × 5矩阵作为其输入之一,在迭代值指示的列位置将2 × 1矩阵赋回原始矩阵。
在上述示例中的assign块的属性对话框中为重新分配指定的行是[1,2]。因为在原始矩阵中只有两行,您也可以为行指定-1(即所有行)。
三角函数模块已经能够计算矩阵的正弦值。上面的例子只使用三角函数块作为一个例子,在赋值块和For Iterator块的协作下改变矩阵的每个元素。