MATLAB的Simulink的While子系统(动作子系统) 您所在的位置:网站首页 甄嬛传高清全集免费版在线观看西瓜 MATLAB的Simulink的While子系统(动作子系统)

MATLAB的Simulink的While子系统(动作子系统)

2023-04-14 00:16| 来源: 网络整理| 查看: 265

可以用Simuklink 中 Ports &. Subsystems模块库的 While子系统创建类似C语言的循环控制流语句。子系统图标如图所示。

While Iterator 子系统

子系统内容

1.While子系统执行流程过程

在 Simulink 的 While控制流语句中, Simulink在每个采样时刻都要反复执行While子系统中的内容,即原子子系统中的内容,直到满足While Iterator模块指定的条件。而且,对于每一次While Iterator模块的迭代,While子系统中所有模块的更新方法和输出方法都会被执行一次。

Simulink在每个步长内执行 While子系统的迭代过程中,仿真时间并不会增加。但是,While子系统中的所有模块会把每个迭代作为一个采样时间进行处理,因此在While循环中,带有状态的模块的输出取决于上一时刻的输入,这种模块的输出反映了在While循环中一次迭代的输入值,而不是上一个仿真时间步的输入值。例如,假设在 While子系统中有一个Unit Delay模块,该模块输出的是在while循环中上一次迭代的输入值,而不是上一个仿真时间步的输入值。

可以用While Iterator模块执行类似C语言的while或do-while循环,它是While子系统内部的控制器模块,在 while loop type设置不同选项时端口输入个数不同,框图如图所示。通过While Iterator模块对话框中的 While loop type可以选择不同的循环类型,如图所示。

(1)do-while

在这个循环模式下,While Iterator模块只有一个输入,即 while条件输人,它必须存在于While子系统内。在每个采样时间内,While Iterator模块会执行一次子系统内的所有模块,然后检查while条件输人是否为真,如果输入为真,则 While Iterator模块再执行一次子系统内的所有模块,只要 while条件输入为真,而且循环次数小于或等于While Iterator模块对话框中的 Maximum number of iterations参数值时,这个循环执行过程会一直继续。

(2) while

在这个循环模式下,While Iterator模块有⒉个输入: while条件输入和初始条件(IC)输入。初始条件信号必须在 While子系统外提供在仿真时间开始时,如果IC输入为真,那么While Iterator模块会执行一次子系统内的所有模块,然后检查 while条件输入是否为真,如果输入为真,则While Iterator模块会再执行一次子系统内的所有模块,只要 while条件输入为真,而且循环次数小于或等于While Iterator模块对话框中的Maximum number of iterations参数值时,这个执行过程会一直继续下去。如果在仿真时间开始时IC输入为假,那么在该采样时间内 While Iterator模块不执行子系统中的内容。

当把 While Iterator模块放置到子系统中时,在给定条件为真的情况下,While Iterator模块会在当前采样时间反复执行子系统中的内容。如果子系统不是原子子系统,那么把 While Iterator模块放置到子系统中会使该子系统自动成为原子子系统。

2.实例

现举例说明while子系统具体用法:设置While loop type为 while时,为了使第一次可以进人while执行,使输入IC为真,子系统每个采样步长内完成特定迭代次数,模型如图所示。

While iterator内部累加值每迭代一次加一,每次迭代求和运算将while iterator 内部累加值进行累加,当此累加值小于等于100时,循环执行,当条件不满足时退出 while语句,从零开始一直到N的整数进行累加示波器最终输出当累加结果刚大于等于100 时N的值。注意While子系统中的所有模块会把多个迭代在一个采样步长内进行处理,例如单位延时的输出是上一次迭代输入值而不是上一个采样步长的输入值。模型如图所示。

单位延时模块的输出是上一次迭代的输入值,不是上一个采样步长的输入值 第1次 IC满足真,循环执行一次 out1输出1 Unit Delay 输出0 累加条件输出 0 + 1 = 1 第2次 当 Unit Delay输出小于等于100时,循环条件成立,并且此时的循环次 数小于设定的最大循环次数,循环执行一次 out1输出2 Unit Delay 输出0+1(上一次迭代时的 输入值) 累加条件输出 0 + 1 +2= 3 第3次 out1输出3 Unit Delay 输出0+1+2 累加条件输出0+1+2+3=6 第4次 out1输出4 Unit Delay 输出0+1+2+3 累加条件输出0+1+2+3+4=10 ... 第13次 out1输出13 Unit Delay 输出0+1+2+3+...+12+13 =91 第14次 out1输出14 Unit Delay 输出0+1+2+3+...+12+13+14 =105 此时的累加值大于100,不满足循环条件,结束while循环。

当number of iterators达到1000时也可以退出while语句,这个参数就是为了避免无限循环。双击 While Iterator模块,打开其参数对话框如图所示。

上述模型等价于以下程序

clc; clear all; close all; max_sum = 100; max_iterations = 1000; sum = 0; iteration_number=0; cond = (max_sum >0); while(cond~=0) iteration_number = iteration_number + 1; sum = sum + iteration_number; if(sum>max_sum || iteration_number > max_iterations) cond = 0; end end sum iteration_number

程序运行结果

sum = 105 iteration_number = 14

探究运行过程,将仿真设置为固定步长,采样时间设置为1s。

示波器输出

参考内容

[1] 孙忠潇.Simulink仿真及代码生成技术入门到精通[M].北京:北京航空航天大学出版社,2015.

本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。

作 者 | 郭志龙编 辑 | 郭志龙校 对 | 郭志龙



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有