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

Variable x Outputparamter yout zuweisen funktioniert nicht

 

ds1993
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 16.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.08.2018, 11:51     Titel: Variable x Outputparamter yout zuweisen funktioniert nicht
  Antworten mit Zitat      
Hallo liebe Forenkollegen,

und zwar habe ich folgendes Problem: Ich möchte meinem Simulink Eingangswert (Constant Block) den Outputwert (simout) zuweisen. Was genau muss ich im Skript ändern?

Code:

load_system('model_ds');

x = 1;

for i = 0.0:0.1:1.0

set_param('model_ds/Constant','Value','x')  

set_param('model_ds','SimulationCommand','Start')

clear('x');

Value.x = yout{1};
     
end


plot(simout);
 


___________________________________________________________________________________

Vorab schon vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen


J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 21.08.2018, 14:20     Titel:
  Antworten mit Zitat      
Hi,

stelle die Configuration Parameter um, so dass du für "Stop time" eine Variable (hier "end_time") einstellst. Stell außerdem einen Fixed-step solver ein und füge einen step- Variabel (hier "step_time") ein.

Dann kannst du deine Schleife wie folgt umbauen:
Code:

x = 1;

end_time = 0;
step_time = 1;

for i=1:0.1:2.0
    set_param('model_ds/Constant','Value','x')    
    simuout = sim('model_ds','SaveOutput','on','SaveFormat', 'Dataset');
    x = simuout.data.Data;
end
 


Über die Einstellung der Solver wird sichergestellt, dass wirklich nur ein Simulationsdurchgang ausgeführt wird. Bei deiner Variante werden nämlich die Einstellungen aus Simulink verwendet (10 Sekunden, variable-step), außer du hast die umgestellt.

Ich würde außerdem dem Constant-Block in Simulink direkt die Variable "x" zuweisen, dann brauchst du das nicht immer mit set_param übergeben.

Grüße
Jonas

PS: Bitte keine Doppel-Posts erstellen. Kannst ja jetzt deinen anderen als "beantwortet" schließen.
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) 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: 21.08.2018, 14:27     Titel:
  Antworten mit Zitat      
Hallo Jonas,

danke ich probiere es mal aus. In den Simulink Konfigarationseinstellungen, hatte ich bereits Fixed Step (size 0.1) und 1.0 sekunden Simulationsdauer eingestellt. Benötige ich step time dann noch und was hat es nochmal mit endtime = 0 auf sich?





Viele Grüße

Zuletzt bearbeitet von ds1993 am 21.08.2018, 14:39, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 21.08.2018, 14:31     Titel:
  Antworten mit Zitat      
Zitat:
hatte ich bereits Fixed Step (size 0.1) und 1.0 sekunden Simulationsdauer eingestellt


Bei diesen Einstellungen simuliert er aber für jeden Schleifendurchgang 11 Schritte:
- i = 1
- Parameter wird gesetzt
- Simulation wird gestartet
- Simulation läuft die Schritte 0, 0.1, 0.2, 0.3, ... , 1.0 durch (also 11 Schritte)
- Du erhälst als Rückgabe eine timeseries die 11 Schritte lang ist -> wenn du x neu setzen willst muss du jetzt sagen welchen dieser 11 Werte x annehmen soll.
- i = 2
- Parameter wird gesetzt
...

Mit der end time = 0 stellst du sicher, dass bei jedem Simulationsaufruf nur ein Schritt durchlaufen wird, nämlich für t = 0.

Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 21.08.2018, 14:40     Titel:
  Antworten mit Zitat      
Unter simuout findest du alle deine Ausgänge aus Simulink. Über
Code:

simuout.yout
 

kannst du auch auf yout zugreifen.

In welchem Zusammenhang tritt der Fehler auf? Also auf was bezieht der sich genau?

Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) 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: 21.08.2018, 14:42     Titel:
  Antworten mit Zitat      
Alles klar, das ist einleuchtend danke. Step time = 1.0 benötige ich auch wenn ich Stop time 1.0 eingestellt habe?

Mir wird jetzt bei deiner Version folgender Fehler bei x = simuout.data.Data; angezeigt:

Dot indexing is not supported for variables of this type.

Ich habe noch einen ,,simout block" mit Variable ,,yout". Denn simout sind doch 2 Parameter bzw. ein 2x1 Array (Zeit und der entsprechende Wert).

Code sieht nun wie folgt aus:

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');

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

x = simuout.yout;
   
       
end

plot(simout);

 


Danke für die Hilfsbereitschaft!
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 21.08.2018, 14:46     Titel:
  Antworten mit Zitat      
Zitat:
Alles klar, das ist einleuchtend danke. Step time = 1.0 benötige ich auch wenn ich Stop time 1.0 eingestellt habe?


Dann werden auch 2 Durchgänge simuliert -> 0 und 1
Die Stop time musst du auf 0 stellen, wenn du nur einen Durchgang simulieren möchtest.

Wegen yout hab' ich dir ja oben schon geantwortet, oder was willst du damit sagen/fragen?
Zitat:
Denn simout sind doch 2 Parameter bzw. ein 2x1 Array (Zeit und der entsprechende Wert)

Ja, und über simuout.DEIN_OUTPUT_VARIABLENNAME.Data(n) (siehe Code oben - Output-Variablenname: "data") greifst du auf den n-ten Wert der timeserie zu. Da, bei nur einem Simulationsdurchgang aber nur ein Wert vorhanden ist, kannst du die Klammer hinter "Data" weglassen. Ansonsten musst da halt die Zahl reinschreiben aus welchem Simulationsdurchgang auch immer du den Wert möchtest.
In deinem Fall schreibst du mit
Code:
x = simuout.yout;

die komplette timeseries in x -> das geht natürlich nicht. Richtig wäre hier:
Code:
x = simuout.yout.Data(1);

Oder eben ohne Klammer bei nur einem Durchlauf. Oder eine andere Zahl in der Klammer, falls der Wert aus einem anderen Durchlauf gewünscht ist.


Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) 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: 21.08.2018, 15:05     Titel:
  Antworten mit Zitat      
Okay ich habe es besser verstanden, danke.

Mir wird jetzt folgender Fehler 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');

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

x = simuout.yout.Data(1);
   
       
end

plot(simout);


 


Kurze Frage muss es nicht simout statt simuout heißen? Und saveformat bei simout als timeseries oder Array bzw. Struct?

Viele Grüße
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.