之前在湖里发问如何使用simulink中的while模块,可能研究的人少,没什么回应,自己研究了几天,得出一些结果,在这里跟大家分享一下,还望高手继续指教!
1.首先到while模块,其位置在Simulink->Port&Subsystems->While Iterator Subsystems
如下图所示:

下图为help文档里面的实例

在这个模块中,while模块首先判断2处IC输入是否为真,若为真就开始第一次执行内部的运算。
    标注4这个地方输出的结果是运行的次数,而不是运行的结果。
标注3处的Memory模块为数据暂存模块,这里需要设置一个初值,因为第一次运行时并没有数据暂存。
接着就把次数与暂存模块的数值相加后跟6处的ln1(也即1处的ln1,其值为100)相比较,如
果小于等于ln1则cond处值为1,就可以进行下一次的循环。
这个while模块的输出值是循环次数,利用循环次数来实现自加运算。
刚开始以为其是输出值,后来挨个加to workspace  模块挨个看其输出值才发现自己理解的不对。
下面是我按照自己的需求搭建的一个模块!
里面加的很多To Workspace模块,是为了看清楚各个部分数据的输出,可以删去。
下图为while模块

首先判断5>2是否为真,当然为真,所以开始执行while模块。
下图为将A模块展开后的内容
 
这里B模块为Enabled Subsystem ,即当输入为真时就执行这个模块,这里其输入的为while模块的运行次数,第一次输入为1,第二次为2,都是真,所以就开始执行Enabled Subsystem模块, 这里给Enabled Subsystem模块有一个固定值输入。
下图为将B模块展开
 
Enabled Subsystem模块中是一个简单的加法运算,这里使用Memory模块的用意是实现输入变量的增加,要不然会进入死循环。
另一个避免死循环的方法是设置while模块的最大循环次数。
如在B中,ln1的输入为2,memory模块的初始值为0,第一次运算Enabled Subsystem模块输出为2+3+0=5,
第二次时memory值就为2,此时Enabled Subsystem输出为2+2+3=7;
第三次时memory值就为4,此时Enabled Subsystem输出为2+4+3=9,依次循环。
每次Enabled Subsystem的输出值都要跟图A中的while模块的ln1比较,若小于等于就进行下一次循环,反之就推出循环。
这里我将while模块的输出做了改变,不在输出其循环次数,而是输出运算结果。
在输出前加buffer模块的目的是输出最后一个值,要不然会输出一个数组,
即要是循环7次退出,那么其输出就是7个数,加上buffer后就输出最后一次产生的数据。

在这里我本来的用意是想Enabled Subsystem模块的输入由外部导入,即用From,Go模块,但是发现不行,不知道是否有其它方法可以实现外部数据导入while模块。
另外while模块好像只能输入单个数据,而不能输入数组,实现不了原先设想的功能,跟m文件的while还是有很大的差别,也有可能是我没有钻研透这个模块,最后还是用if-else模块来实现循环。
>while语句里的if

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。