2017-06-12 4 views
1

私は通常Pythonでプログラミングしていますが、割り当てのために私はSimulinkを使用しています。私は上記のelseifラダーが時間の経過とともに変数[IP3]の増分を生成しないのはなぜだろうかと思います。私はそれが何をすべきかと思いますt = 500まで0.01を返すと、次にt = 1000まで0.03、そして次に1500まで、0.1から2000まで、そして10から戻ります。古い画像btwの謝罪、私は平均時間内に変数を更新しました。あなたが示したSimulinkモデルで時間の経過とともに変数のインクリメンタルな増加

Incremental increase of variable over time

+0

[ステップ関数](https://www.mathworks.com/help/simulink/slref/step.html)と[max](https:// www)で設計する方が簡単だったようです.mathworks.com/help/simulink/slref/minmax.html)ブロック。 – gnovice

答えて

1

、以来elseif部品が実行されることはありません:u1>0を満たしていれば、他の条件のいずれもがチェックされませんので、それは常に帰国されます

  • すべての場合は0.01です。
  • u1<=0の場合はすべての条件がチェックされますが、いずれも満足しない場合は となります。 (u1は時間であるため、u1はあなたのケースでは0より小さくなることはありません)。

この動作はすべてのプログラミング言語で同じです。


修正あなたの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は負にすることはできませんあなたの場合の時間です

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

ので、あなたも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部の出力を接続するので、代わりに最後のステップであなたもこれを行うことができます。

関連する問題