|
|
Übergabe eines Vektors von Simulink nach Matlab |
|
Steffie |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.11.2008, 19:15
Titel: Übergabe eines Vektors von Simulink nach Matlab
|
|
Hallo,
ich habe eine Simulation in Simulink erstellt und die auch ploten lassen, nun möchte ich den Maximalwert der Funktion in einem bestimmten Bereich ermitteln. Also will ich die Werte als einen Vektor (mit den x- & y-Werten) an den Workspace übergeben.
Ich hab es schonmal ganz vereinfacht mit einer normalen Sinus-Funktion versucht und dann den Block "to workspace" benutzt. Wenn ich dann die Variable aufrufe erhalte ich allerdings nur die y-Werte und nicht mit die x-Werte...ich brauch aber beides. Hat vielleicht einer eine Idee?
Vielen Dank schonmal.
|
|
|
|
|
Hans Dieter Normann |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.11.2008, 22:53
Titel:
|
|
Hi Steffi!
Die Programme (also Simulink und Matlab) kommunizieren mit der simin- bzw. simout Funktion via Structs.
Du hast ein x-Vektor (dies ist wohl deine Zeit!?) und einen y-Vektor.
Um die Werte in Simulink nutzen zu können musst du ein "Struct" erzeugen.
Dies machst du auf folgende Weise:
simin=struct('time',t,'signals',struct('values',in));
"t" ist in deinem Fall "x" und "in" ist in deinem Fall "y". "simin" ist der Name des Blockes, wenn du Ihn in Simulink umbenennen möchtest, musst du dies auch in Matlab tun!
Viele Grüße
|
|
|
Steffie |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.12.2008, 09:33
Titel:
|
|
Hallo Hans Dieter
ALso ich mag ja die beiden Vektoren aus Simulink raushaben und in Matlab nutzen. Ersetz ich dann einfach das simin mit simout?
Ich habs auch schon mit dem Block "Signal to Workspace" also yout probiert und da erhält man ja auch tout...ich weiß nur noch nicht genau ob ich das irgendwie nutzen kann, hatte dann leider gestern noch einen Fehler in der Simulation festgestellt, den ich bisher auch noch nicht beheben konnte.
|
|
|
paddy141 |
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 07.10.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.12.2008, 09:41
Titel:
|
|
Hi Steffi,
um dir vielleicht mal eine schnelle Lösung zu geben. Benutze im Simulink, die Block to Workspace und stell das save format auf array um.
Und als zweites aus Simulation => configurations parameter => Data import/expoort
bei save to worspace sollte ein häckchen bei time sind und eine variable eingetragen sein. Und unter save options sotte kein häckchen bei "limit data points to last" sein.
Nach der Simulation solltest du dann zwei Arrays im Matlab haben einmal das Array für die Zeit und einemal das Array von "to workspace".
Die Arrays sind gleich lang, und entsprechen jeweis Wertepaare.
Ist vielleicht ein wenig umständlich, aber es funktioniert.
Gruß
|
|
|
Steffie |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.12.2008, 10:21
Titel:
|
|
Hi Paddy,
ja so in etwa hab ich das schonmal probiert, aber ich weiß nicht ob das dann so geht mit den beiden Arrays.
Also mal ganz vereinfacht angenommen ich hab eine einfache Sinus-Funktion und lass mir jetzt die Werte an den Workspace übergeben. Nun möchte ich das Maximum der Sinusfunktion wissen, aber nicht von der kompletten Sinus-Funktion, sondern erst ab einer bestimmten Zeit. Nun ist die Frage, wie ich das mache..würde es gehen, wenn man einfach in den Configuration Parameters die Startzeit von 0 auf meinetwegen pi erhöht?
Ich hab schon meinen Übungsleiter gefragt und der meinte, dass das wohl nicht so einfach geht und ich einfach die Zeiten, die vor meiner ausgewählten Zeit liegt, verwerfen soll. Aber keine Ahnung wie das in dem Fall gehen soll, kenn mich mit Matlab auch noch nicht so gut aus.
|
|
|
paddy141 |
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 07.10.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.12.2008, 10:35
Titel:
|
|
Du willst jetzt also in deinem vereinfachten Beispiel die Maxima bzw. Minima der Sinuskurve "finden"? Mit Zeit und Wert des Max. bzw. Min.?
Nachdem du die Daten im Matlab hast musst du dir eine Funktion schreiben, die das Max. bzw. Min. findet.
Das Funktioniert nach dem Prinzip das du jeden einzelenen y Wert aus deinem Arry entnimmst und dann abfragst ob es größer oder kleiner dem vorhergehenden Wert ist! Damit müsstest du weiter kommen.
Aber ich versuche das in einer freien Minute mal zu programmieren. Aber vielleicht kommst du so schonmal ein bisschen weiter...
|
|
|
Steffie |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.12.2008, 10:40
Titel:
|
|
Ok ich habe nun die einzelnen Arrays in ein Struct umgewandelt und das dann wieder in ein array, so dass ich nun ein Array mit beiden Werten habe...also so:
y=struct('time',tout,'signals',simout);
y=struct2array(y);
max(y)
Ich denke damit sollte es funktionieren. Ich danke euch.
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|