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

'To Workspace' Block mit Struktur als Variablenname

 

Anus+
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 28.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.09.2007, 22:06     Titel: 'To Workspace' Block mit Struktur als Variablenname
  Antworten mit Zitat      
Guten wach! Smile

Ich rufe mein Simulink-Modell über sim() aus Matlab heraus auf, Paramter übergebe ich über den Matlab Workspace und diese werden in Simulink über "From Workspace", etc. eingelesen.

Nun möchte ich auch Werte aus Simulink zurückführen, und zwar in eine Struktur.

Vereinfacht dargestellt habe ich eine Struktur in Matlab die folgendermaßen aussieht:

Code:
simParams.param1 = x, y, z;
simParams.param2 = x, y, z;
...


Kein Problem, ich kann die Variablennamen simParams.param1 etc. problemlos überall einfügen.

Möchte ich nun aber einen Wert mittels des "To Workspace"-Blocks aus SimuLink in den Matlab-Workspace schreiben, quittiert er den Versuch der Eingabe von 'simRetParams.param1' mit einer Fehlermeldung.

Ich kann mir kaum vorstellen, dass dies nicht möglich ist. Evtl. muss ich den Variablennamen lediglich anders schreiben (womöglich wg. dem "." im Namen - aber der muss ja sein, es handelt sich um eine Struktur), aber ich bin noch nirgendwo fündig geworden wie ich das bewerkstelligen kann.

Hat jemand Rat parat? Bin für jede Hilfe dankbar!

Ich verwende Matlab 7.1 mit SimuLink 6 soweit ich das in erinnerung habe.


Gruß, Anus+
Private Nachricht senden Benutzer-Profile anzeigen


Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 21.02.2008, 17:04     Titel:
  Antworten mit Zitat      
Hallo,

nicht wirklich. Der ToWorkspace Block kann tatsächlich nur in Variablen schreiben (deshalb z.B. lässt er auch nur feste Namen zu, nicht wie die meisten anderen Blöcke auch Variablen (also Variablen, die den Namen der zu schreibenden Variable tragen würden)).
Da Du aber sowieso die Simulation über sim startest, könntest Du das Speichern in die Struktur im Nachhinein selber machen...

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
mojojo
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 25.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.03.2008, 18:09     Titel:
  Antworten mit Zitat      
Hallo,

möchte den Beitrag nochmal hochziehen, weil ich das gleiche Problem habe. Außerdem würde ich mir gerne noch eine Erweiterung wünschen, die der "To Workspace"-Block nicht bietet.

Und zwar habe ich sämtliche Zustandsgrößen meines Modells in einem Bus zusammengeführt, diesen Bus kann ich zwar über to Workspace in ein Structure speichern, aber leider nur die Werte, nicht jedoch die Namen der Variablen, die ja im Bus definiert sind.

Hat jemand dafür vielleicht eine selbstprogrammierte Lösung?

Hintergrund ist, dass ich die Simulationsergebnisse über ein Gui auswerten möchte, das sämtliche Zustandsgrößen auflistet und man dann bestimmte Größen zum Plotten auswählen kann.

Wäre super, wenn da jemand weiter weiß.

Beste Grüße
mojojo
_________________

Das Chaos beherrscht die Ordnung,
weil es besser organisiert ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Tim
Forum-Century

Forum-Century



Beiträge: 140
Anmeldedatum: 03.11.07
Wohnort: Stuttgart
Version: 2011b+aktuellstes Release
     Beitrag Verfasst am: 31.03.2008, 20:35     Titel:
  Antworten mit Zitat      
Hmmmm, das resultierende Signal sollte also schon auch eine Struktur sein? Also Aufbau a la:

simout.signal1
simout.signal2
etc.

Oder würde es auch reichen wenn nachher nur

signal1
signal2
etc.

im Workspace stehen würden?

Zu ersterem könnte man eine StopFcn-Callback schreiben (wäre imho aber nicht sonderlich sauber). Diese würde Anhand des "ToWorkspace"-Blocks herausfinden welche Signale (bzw. deren Namen) auf dem bus liegen und die (nichtbenamte) Struktur zu schönifizieren.
Zu letzterem könnte man mit ein wenig Aufwand einen allgemeingültigen (gemaskten) Block bauen der aus n-"ToWorkspace"-Blöcken besteht, wobei n die Zahl der Signale auf dem Bus ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
mojojo
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 25.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.04.2008, 09:51     Titel:
  Antworten mit Zitat      
Hallo Tim,

schon mal danke für deine Antwort. Schöner wäre ein Struct, ich käme aber auch mit vielen Einzelvariablen klar. Wichtig ist mir, dass ich nichts an der Struktur verändern muss (z.B. für jedes neue Signal einen neuen To-Workspace block integrieren), sondern dass es reicht ein benamtes Signal auf den Bus zu legen, damit es in der Ausgabe vorhanden ist.

Beste Grüße
mojojo
_________________

Das Chaos beherrscht die Ordnung,
weil es besser organisiert ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
racer79
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 31.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.04.2008, 13:36     Titel:
  Antworten mit Zitat      
Der sim() command gibt doch die Werte von den Rootlevel Outputports zurueck (Left Side Argument). Das heisst du musst nur alle Variablen von interesse auf den Rootlevel bringen. Das geht zBsp mit From-Goto.
Private Nachricht senden Benutzer-Profile anzeigen
 
mojojo
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 25.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.04.2008, 15:06     Titel:
  Antworten mit Zitat      
Hallo Racer,

danke für deine Antwort. Mein Problem ist bzw. war es nicht die Werte auszulesen, sondern die im Modell zu den Signalen gehörenden Namen. Ich habe sämtliche Signale im Root auf einem Bus zusammengeführt.
Mein Wunsch war es, dem Bus zusätzliche Signale hinzuzufügen und diese dann gleich mit Namen in meiner Ausgabestructur wiederzufinden.

Ich habe das ganze Jetzt mal so gelöst, dass ich im "StopFcn" Callback eines "Bus Selector" Blocks, der mit meinem Hauptbus verbunden ist, eine Funktion aufrufe, die mit:
Code:

get_param(gcb,'InputSignals')
 

die Namen ausliest und aus der gespeicherten Struktur des "To Workspace"-Blockes und den ausgelesenen Namen eine neue Struktur bildet, in der ich meine Daten speichern kann.

Das funktioniert mittlerweile auch, würde es aber nicht als endgültig ellegante Lösung bezeichnen.
Wink

@ Tim. Mir ist es nicht gelungen die Signalnamen aus dem "To Workspace" auszulesen. Ich brauche immer einen "Bus Selector". Hast du vielleicht noch einen Vorschlag?

Beste Grüße
mojojo

PS: Bei Bedarf poste ich gerne auch den kompletten Quelltext. Ist aber nicht ganz trivial, da meine Lösung immer noch anwendungsbezogen ist und ich hier nicht das ganze Modell veröffentlichen kann.
_________________

Das Chaos beherrscht die Ordnung,
weil es besser organisiert ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Tim
Forum-Century

Forum-Century



Beiträge: 140
Anmeldedatum: 03.11.07
Wohnort: Stuttgart
Version: 2011b+aktuellstes Release
     Beitrag Verfasst am: 04.04.2008, 19:36     Titel:
  Antworten mit Zitat      
mojojo hat Folgendes geschrieben:
@ Tim. Mir ist es nicht gelungen die Signalnamen aus dem "To Workspace" auszulesen. Ich brauche immer einen "Bus Selector". Hast du vielleicht noch einen Vorschlag?

Mach das als StopFcn des ToWorkspace Blocks, darin dann (sinngemäß):
Code:
h_line = get_param(gcbh, 'LineHandles');
h_line = h_line.Inport; %wir haben ja per Definition nur einen Inport
h_src = get_param(h_line, 'SrcBlockHandle');
signals = get_param(h_src,'InputSignalNames');
 

...

edit: Wenn du allerdings Busse als Signale in einem Bus hast, dann geht es nur so natürlich auch nicht mehr.
Private Nachricht senden Benutzer-Profile anzeigen
 
tigger007
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 13.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.11.2009, 20:53     Titel:
  Antworten mit Zitat      
genau das gleiche suche ich auch ^^

signal.y.signal1
signal.y.signal2
signal.y.signal3...

geht das jetzt irgendwie?
Private Nachricht senden Benutzer-Profile anzeigen
 
genuile
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 26.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2013, 16:08     Titel:
  Antworten mit Zitat      
Ich weiß, Thread ist schon sehr alt. Aber ich antworte für andere, die diese Frage evtl. noch haben (werden). Bin nämlich selber durch diese Problematik auf diesen Thread gestoßen.

Ab Matlab R2012a gibt es dieses Problem nicht mehr, da der "To Workspace" Block standardmäßig in den "Timeseries" Format speichert. Busse inkl. der Signalnamen werden dort als Structure gespeichert, wobei auch jeweils die Zeit dazugespeichert wird.

Vor R2012a gibt es diese Möglichkeiten:
http://www.mathworks.de/support/sol.....=ML&solution=1-E24ODG
Private Nachricht senden Benutzer-Profile anzeigen
 
krza

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2017, 07:29     Titel: Auch mit 2014b noch nicht möglich.
  Antworten mit Zitat      
Also ich arbeite gerade mit 2014b und habe immernoch das gleiche Problem. Es scheint also nicht so zu sein, dass sich ab 2012a diesbezüglich etwas geändert hätte.
 
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.