WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Sprung, Rampe, Sinus zeitlich hintereinander!WelcheMGLkeiten

 

Waldemar
Forum-Century

Forum-Century


Beiträge: 100
Anmeldedatum: 14.10.11
Wohnort: Neuss
Version: R2011b
     Beitrag Verfasst am: 17.02.2013, 22:27     Titel: Sprung, Rampe, Sinus zeitlich hintereinander!WelcheMGLkeiten
  Antworten mit Zitat      
Hallo,

in der letzten Zeit war meine Aufgabe eine Reglung zu entwickeln usw.!
Nun soll ich die Funktionalität jener darstellen. Dafür soll ich in einem Simulink-Modell die Sollwerte variieren!
So sollen über der Zeit die Sollwerte Sprünge, Rampen sowie auch sinusförmige Verläufe inne haben.
Um jetzt nicht zwischen verschiedenen Quell-Blöcken hin- und herzuschalten, wäre es doch praktischer in einer eingebetteten Funktion einen Code zu schreiben, der Rampen, Sprünge und sinusförmige Verläufe simuliert.

Meine Frage (vielleicht hatte jemand bereits die gleiche Aufgabe und könnte mir viel Zeit ersparen):
Gibt es Funktionen, die Sprünge, Rampen und sinusförmige Verläufe über der Zeit wiedergeben können?

Werde mich morgen intensiv damit beschäftigen, dachte nur, da es, so denke ich, eine typische Abschlussaufgabe ist, dass bereits jemand ebenfalls über so etwas nachdenken musste und mir so ein wenig unter die Arme greifen könnte!
Denn wieso etwas vorhandenes auf's neue entwickeln! Wink

Falls jemand paar Tipps/ Erfahrungen für mich hätte, wäre ich sehr dankbar.

MfG, Waldemar
_________________

Im "ich brauch Hilfe"-Status
Private Nachricht senden Benutzer-Profile anzeigen


Waldemar
Themenstarter

Forum-Century

Forum-Century


Beiträge: 100
Anmeldedatum: 14.10.11
Wohnort: Neuss
Version: R2011b
     Beitrag Verfasst am: 18.02.2013, 11:50     Titel:
  Antworten mit Zitat      
Hallo,

also Rampen und Sinus kann mit persistenten Variablen und einer if-Abfrage prima simulieren (Beispiel sinus):

Code:

% (Diskretes System)
persistent Abtastintervall
persistent CA50_kminus1
if isempty(Abtastintervall)
      Abtastintervall = 1;
end
if isempty(CA50_kminus1)
    CA50_kminus1=zeros(1,1);
end
c = 1;
.
.
.

if....
.
.
.
elseif Abtastintervall>300 && Abtastintervall<=500
        CA50 = 4*sind(c)+CA50_kminus1;
        c = c+5;
.
.
.
end
Abtastintervall = Abtastintervall+1;
CA50_kminus1= CA50;


Aber wie kriege ich denn einen Sprung (siehe Regelungstechnik: (Einheits-)Sprung) hin, bei dem CA50 sozusagen in einem Abtastintervall 2 Werte annimmt?

Gibt es da eine Funktion?

MfG, Waldemar
_________________

Im "ich brauch Hilfe"-Status
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.02.2013, 12:49     Titel:
  Antworten mit Zitat      
Hallo,

wenn bei T ein Sprung sein soll:

Code:
if t < T
% vor Sprung
else
% nach Sprung
end


Wenn Nulldurchgangserkennung (zero crossing detection) aktiviert ist, sollte Simulink den Sprung automatisch erkennen und entsprechend aufllösen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Waldemar
Themenstarter

Forum-Century

Forum-Century


Beiträge: 100
Anmeldedatum: 14.10.11
Wohnort: Neuss
Version: R2011b
     Beitrag Verfasst am: 18.02.2013, 13:51     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine Antwort.

So habe ich es auch...was mich anfangs daran aber störte, war, anders als bei Bildern eines - anscheinend - idealisierten (Einheits-)Sprunges, dass die Verbindungslinie (grafisch betrachtet) beim Sprung nicht senkrecht nach oben ging, sondern eine leichte Schräge hatte.

Mittlerweile bin ich der Meinung, dass es beim einem diskreten System gar nicht anders zu machen ist.

Hier meine Lsg. außerhalb von Simulink:
Code:
simTime  = 70;
stepSize = 0.06;
AbtastI  = simTime/stepSize;
CA50min  = -10;
CA50max  = 10;

z        = 0.2;
a        = 0.2;
b        = 0.2;
c        = 1;
for i=1:AbtastI
   
    if i<=20
        CA50 = 6;
    elseif i>20 && i<=30
        CA50 = 7;
    elseif i>30 && i<=40
        CA50 = 9;
    elseif i>40 && i<=120
        CA50 = 9-z;
        z = z+0.2;
    elseif i>120 && i<=200
        CA50 = CA50time(120)+a;
        a = a+0.2;
    elseif i>200  && i<=250
        CA50 = CA50time(200);
    elseif i>250 && i<=290
        CA50 = CA50time(250)-b;
        b = b+0.2;
    elseif i>290 && i<=300
        CA50 = CA50time(290);
    elseif i>300
        CA50 = 4*sind(c)+CA50time(290);
        c = c+5;
    end
    CA50time(i,1)=CA50;
end


Nichts wahnsinnig schweres.

MfG, Waldemar
_________________

Im "ich brauch Hilfe"-Status
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.