2017-06-12 112 views
1

我通常使用Python进行编程,但对于任务,我正在使用Simulink。我想知道为什么上面的elseif阶梯不会随着时间的推移而增加变量[IP3]。我认为它应该做的是返回0.01,直到t = 500,然后是0.03,直到t = 1000,然后是0.1直到1500,1直到2000,以及从那时起10。对旧图像btw道歉,我更新了平均时间的变量。随着时间的推移增量变量

Incremental increase of variable over time

+0

好像它会一直与简单[工序功能]来设计它(https://www.mathworks.com/help/simulink/slref/step.html)和[MAX](HTTPS:// WWW .mathworks.com /帮助/ SIMULINK/slref/minmax.html)块。 – gnovice

回答

1

在Simulink模型中,你表现,elseif部分将不会执行,因为:

  • 如果u1>0满足,没有其他条件进行检查,因此它总是会被返回0.01全部为u1>0
  • u1<=0,所有的条件,将被检查,但他们没有 将得到满足。 (u1可能永远不会小于零,因为u1是时间)。

此行为是在每一个编程语言相同。


修复您的If-elseif声明:

您需要添加这在If block

  1. If expression (e.g. u1 ~= 0),这样写:

    u1>0 & u1<=500 
    
  2. Elseif expressions (comma-separated list, e.g. u2 ~= 0, u3(2) < u2):,这样写:

    u1>500 & u1<=1000, u1>1000 & u1<=1500, u1>1500 & u1<=2000, u1>2000 
    

由于u1是在您的情况时间,这不能为负数,您可能还需要使用else部分。因此,而不是最后一步,你也可以这样做:

Elseif expressions (comma-separated list, e.g. u2 ~= 0, u3(2) < u2):,这样写:

u1>500 & u1<=1000, u1>1000 & u1<=1500, u1>1500 & u1<=2000 

,并连接这是之前的u1>2000输出连接else部分的输出。

相关问题