2017-06-12 6 views
1

Ich programmiere in der Regel in Python, aber für eine Zuordnung, ich bin mit Simulink. Ich wundere mich, warum die oben genannte Leiter elseif keine schrittweise Erhöhung der Variablen [IP3] im Laufe der Zeit generiert. Was ich denke, es sollte tun, ist 0,01 bis t = 500 zurück, dann 0,03 bis t = 1000, dann 0,1 bis 1500, 1 bis 2000 und 10 von da an. Entschuldigung für das ältere Bild btw, habe ich die Variablen in der Zwischenzeit aktualisiert.inkrementelle Erhöhung einer Variablen über die Zeit

Incremental increase of variable over time

+0

Scheint so, als wäre es einfacher gewesen, es mit [step functions] (https://www.mathworks.com/help/simulink/slref/step.html) und einem [max] (https: // www .mathworks.com/help/simulink/slref/minmax.html). – gnovice

Antwort

1

Im Simulink-Modell, das Sie zeigte, wird elseif Teile nie seit ausführen:

  • wenn u1>0 erfüllt ist, keine der anderen Bedingungen und somit überprüft werden, es immer zurückkehren werden 0.01 für alle u1>0.
  • Und wenn u1<=0, alle Bedingungen geprüft werden, aber keiner von ihnen wird zufrieden sein. (u1 kann nie kleiner als Null ist in Ihrem Fall als u1 Zeit ist).

Dieses Verhalten ist in jeder Programmiersprache gleich.


Fixing Ihre If-elseif Statements:

Sie müssen dies in der If block hinzuzufügen:

  1. Unter If expression (e.g. u1 ~= 0), schreibe dies:

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

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

Seit u1 Zeit in Ihrem Fall ist, die nicht negativ sein können, können Sie wollen auch den else Teil verwenden. Anstatt also den letzten Schritt können Sie auch dies tun:

Unter Elseif expressions (comma-separated list, e.g. u2 ~= 0, u3(2) < u2):, schreibe dies:

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

und verbinden Sie den Ausgang des else Teil, der mit dem Ausgang des u1>2000 vor verbunden war.

Verwandte Themen