Verfasst am: 14.11.2012, 17:22
Titel: Schleifen an Zeit koppeln?
Hallo,
vielleicht hat jemand einige Tipps für mich, die mit beim folgenden Problem helfen:
ich habe eine Funktion (embedded MATLAB function) in SIMULINK eingefügt.
In der Funktion möchte ich Matrixeinträge über der Zeit variieren.
Dafür habe ich bislang folgenden Code:
Die Eingangsgrößen kommen aus "Constant"-Blöcken, die den Endwert an die Funktion weitergegeben. Mein Simunlink-Modell läuft 15sec.!
Ich möchte die Einträge (am Beispiel von B11) für die ersten 5sec. stufenweise in Richtung des Endwertes steigern.
B11_1 soll von 0sec-1sec gelten, B11_2 für 1sec-2sec, ...usw.
Bvari soll, wenn sich die Einträge (erstmal nur wenn B11_i sich ändert) ändern, innerhalb des Simulink-Modells an eine andere in Simulink eingebettete Funktion weitergeleitet werden.
Wie kann ich den meine Funktion an die Zeit koppeln?
Wäre super, wenn jemand eine Idee hätte.
MfG, Waldemar
PS: Arbeite seit kurzem erst mit Simulink.
PPS: Nehme B11_i als Ausgangsgröße hinzu, um zu sehen wie der Zeitverlauf ist. (siehe Anhang: Screenshot vom relevanten Ausschnitt meines Simulink-Modells
Nimm den Block "Clock" (gibt die Simulationszeit aus) und gib ihn in ein Eingang im embedded Matlab Block. Hier kannst du dann ungefähr so dein Ziel erreichen:
Das ist "pseudo code", hab jetzt nicht probiert. Es geht auch anders aber hier ist es sofort ersichtlich wie es geht. Falls es nicht klappt, kannst du ja nochmal fragen.
danke für deinen Tipp!
Habe es anfangs auch so probiert, aber Fehler bzgl. unterschiedlicher Abtastzeitpunkte "sample time" bekommen (siehe Anhang)?
War damit dann erstmal überfordert, so dass ich einen anderen Weg eingeschlagen habe, denn ich, zumindest dachte ich, ansatzweise besser nachvollziehen kann.
Mein Ansatz sieht folgendermaßen aus:
Bei meinem Lösungsweg gehe ich davon aus, dass alle eingebetteten Funktion, usw. im Simulink-Modell entsprechend der Abtastzeit angeregt werden. (Richtig?)
Bei 15sec. Gesamtzeit und 0.001 sample time gehe ich von 15000 Abtastzeitpunkte aus!!
Damit sich in jeder Abtastzeit die B-Matrix verändert, habe ich folgenden Code geschrieben:
Und schon wieder blieben meine Ausgänge über der gesamten Simulationszeit konstant!!
Hab dann mal die Semikolons entfernt und gesehen, dass sich die Matrizen und B11_i zwar ändern, aber viel zu schnell bzw. nicht wie ich es beabsichtigt habe.
Denn es sieht so aus, als die komplette Schleife je Abtastzeitpunkt durchfahren wird!!!!!
Deswegen sind die Ausgangsgrößen (B-Matrix und B11_i) im Display und im Scope stets konstant.
Hast du oder jemand anderes vielleicht zu einem der beiden Probleme eine Idee?
Ja das stimmt: alles was im embedded matlab block ist, wird pro Zeitschritt komplett abgearbeitet.
Das mit der Samplezeit wollte ich eigentlich schon am Anfang fragen (ob konstan bzw. für alle Modelle gleich....anscheinend nicht). Die Samplezeit Probleme kannst du mit Rate transition blocks beheben.
Aber beim aktuellen Code zu bleiben Versuche mal folgendes:
Hat super geklappt und ich habe dabei auch ziemlich dazu gelernt!!!
Vielen Dank!!!!!!
Mega freundlich von dir!
MfG, Waldemar
_________________
Im "ich brauch Hilfe"-Status
Einstellungen und Berechtigungen
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
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.