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

Fehlermeldung beim Aufrufen von Simulink Output

 

ds1993
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 16.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2018, 12:49     Titel: Fehlermeldung beim Aufrufen von Simulink Output
  Antworten mit Zitat      
Hallo liebe Forenmitglieder, ich bekomme beim Ausführen meines Skriptes folgende Fehlermeldung angezeigt: No appropriate method, property, or field 'Data' for class 'Simulink.SimulationData.Dataset'.

Code:

load_system('model_ds');

x = 1;

end_time = 0;
step_time = 1;

for i = 0:0.1:1
   
set_param('model_ds/Constant','Value','x');

simOut = sim('model_ds','SaveOutput','on','SaveFormat', 'Dataset');

x = simOut.yout.Data;
   
       
end

plot(simout);
 


___________________________________________________________________________________

Ich hoffe ihr könnt mir bei der Lösung des Problems behilflich sein, danke. Smile

Zuletzt bearbeitet von ds1993 am 27.08.2018, 13:12, insgesamt einmal bearbeitet
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: 27.08.2018, 13:10     Titel:
  Antworten mit Zitat      
Hallo,

ohne dein Modell ist das ein Stück weit ein Ratespiel. Ich habe es mal mit einem anderen Modell versucht, und da ging:

Code:
ds = simOut.yout{1}.Values.Data


Wenn du nicht weiterkommst, hänge doch bitte mal dein Modell an.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
ds1993
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 16.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2018, 13:16     Titel:
  Antworten mit Zitat      
Hallo Harald, anbei das Modell. Ist nur ein Beispielmodell. Es geht mir darum ein funktionierendes Matlab Skript zu haben, welches mir erlaubt den Simulink Output für jeden Zeitschritt als neuen Input festzulegen.

model_ds.slx
 Beschreibung:

Download
 Dateiname:  model_ds.slx
 Dateigröße:  21.09 KB
 Heruntergeladen:  337 mal
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: 27.08.2018, 13:26     Titel:
  Antworten mit Zitat      
Hallo,

hast du denn den Vorschlag ausprobiert? Bei mir funktioniert er auch mit deinem Modell.

Falls das bei dir nicht klappt, welches Release verwendest du?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
ds1993
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 16.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2018, 13:35     Titel:
  Antworten mit Zitat      
Hallo Harald,
ja ich habe den Code folgendermaßen angepasst:

Code:

load_system('model_ds');

x = 1;

end_time = 0;
step_time = 1;

for i = 0:0.1:1
   
set_param('model_ds/Constant','Value','x');

simOut = sim('model_ds','SaveOutput','on','SaveFormat', 'Dataset');

x = simOut.yout{1}.Values.Data;
   
       
end

plot(simout);

 


___________________________________________________________________________________

Skript läuft auch soweit, allerdings wird mir die Meldung angezeigt, dass ca. 15.000 Signale visualisiert werden müssten und dies mehrere Stunden in Anspruch nähme.

Sorry für die Frage, aber was genau meinst du mit Release? Das saveformat bei simout als Timeseries, Array oder Struct?
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: 27.08.2018, 13:47     Titel:
  Antworten mit Zitat      
Hallo,

ein Problem ist, dass der Constant-Block am Anfang eine Zahl ist und der Output ist eni Vektor. Für den nächsten Schritt setzt du dessen Wert auf diesen Vektor und der Output ist eine Matrix. Für den nächsten Schritt setzt du dessen Wert auf diese Matrix und der Output ist ein 3D-Array etc.

Code:

erzeugt bei mir die verständliche Fehlermeldung
Data must be numeric, datetime, duration or an array convertible to double.

Wenn du was plotten willst, musst du dir die Information aus simOut herausholen - genauso wie du es schon in der Schleife machst.

Zitat:
Sorry für die Frage, aber was genau meinst du mit Release

Das Release oder die Version von MATLAB, also z.B. das aktuelle Release ist R2018a.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
ds1993
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 16.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2018, 13:51     Titel:
  Antworten mit Zitat      
Achso, ja ich nutze die aktuelle Version R2018a.
Wie ließe sich das Problem denn elegant lösen, anderes saveformat wählen als timeseries?

Ich möchte am Ende für jeden Zeitschritt (0, 0.1 ... 1) die entsprechenden Outputwerte graphisch dargestellt haben.
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: 27.08.2018, 13:57     Titel:
  Antworten mit Zitat      
Hallo,

Wie gesagt:
Zitat:
Wenn du was plotten willst, musst du dir die Information aus simOut herausholen - genauso wie du es schon in der Schleife machst.

Du könntest z.B. x plotten (und das dann wohl auch in der Schleife). Davor solltest du dir aber über die ständig wachsenden x Gedanken machen, siehe vorheriger Beitrag.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
ds1993
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 16.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2018, 14:01     Titel:
  Antworten mit Zitat      
Hallo Harald,

wenn ich x in der Schleife plotte, habe ich doch viele einzelne Plots statt einen.
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: 27.08.2018, 14:06     Titel:
  Antworten mit Zitat      
Hallo,

wie wäre es mit hold on ?
Ansonsten müsstest du die Ergebnisse zusammenfassen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
ds1993
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 16.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2018, 14:43     Titel:
  Antworten mit Zitat      
Mit plot(x); hold on; innerhalb der Schleife müsste es eigentlich funktionieren.

Sollte ich als Input Block statt constant besser simin verwenden?
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: 27.08.2018, 14:55     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Sollte ich als Input Block statt constant besser simin verwenden?

Musst du wissen. Wenn ich dich richtig verstanden habe, willst du ja mit dem Endwert weiterarbeiten. Momentan sind es aber halt alle Werte.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
ds1993
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 16.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2018, 15:04     Titel:
  Antworten mit Zitat      
Ja genau ich möchte nur mit Output Wert des jeweiligen Zeitschrittes weiterarbeiten.
Bspw. bei y=0 ist der x= 1 und y=2. Bei t = 0.1 ist dann x = 2 und y = 4. Bei t = 0.2 ist x = 4 usw.
Und dann am Ende alle Outputwerte für t = 0 bis t= 1 plotten. Ich bin noch relativ unerfahren was den Umgang mit Matlab betrifft und stehe deswegen bisschen auf dem Schlauch, sorry.
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: 27.08.2018, 15:13     Titel:
  Antworten mit Zitat      
Hallo,

dann versuch's mal mit
Code:
x = simOut.yout{1}.Values.Data(end);


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
ds1993
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 16.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2018, 15:40     Titel:
  Antworten mit Zitat      
Hallo,

Code lautet nun wie folgt:

Code:

load_system('model_ds');

x = 1;

end_time = 0;
step_time = 1;

for i = 0:0.1:1
   
set_param('model_ds/Constant','Value','x');

simOut = sim('model_ds','SaveOutput','on','SaveFormat', 'Dataset');

x = simOut.yout{1}.Values.Data(end);

plot(tout,yout);

hold on;
       
end
 


Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.