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

Simulink Output als struktur speichern mit a = sim(b)?

 

felix
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 16.01.14
Wohnort: ---
Version: 2014a
     Beitrag Verfasst am: 16.01.2014, 17:15     Titel: Simulink Output als struktur speichern mit a = sim(b)?
  Antworten mit Zitat      
Hallo zusammen,
ich habe mich hier schon fleissig durchgeklickt, habe auch schon teilweise eine Lösung gefunden. Leider aber nur teilweise.

Ich möchte mittels parfor mehrere Simulink Simulationen gleichzeitig laufen lassen. Die Simulationen brauchen jeweils eine gute halbe Stunde. Deswegen ist es mir nicht so wichtig, dass alles um die Simulationen mit optimaler Performance läuft.
Ich rufe die Simulation folgendermaßen auf:
Code:

%Dateiname der Simulation
    NameSim = ['simulation1.slx'];

    % Dieser Teil läuft automatisch
    NameSimOhneEndung = strsplit(NameSim,'.');
    NameSimOhneEndung = NameSimOhneEndung{1};

% Parameter die variiert werden sollen:
   
    % Datum
    % Liste der zu berechnenden Daten [Monat1 Tag1; Monat2 Tag2; ...]
    DatumSkript = [1 1; 2 1; 3 1;4 1;5 1;6 1; 7 1; 8 1; 9 1; 10 1;11 1; 12 1;];
   
matlabpool;

Anzahl = length(DatumSkript(:,1));

disp([num2str(Anzahl) ' Simulationen werden durchgeführt']);
parfor i = 1:Anzahl;
    tic;
    load_system(NameSim);
    set_param([num2str(NameSimOhneEndung) '/Wetter_aus_Funktion'],'VariableName',['Wetter_fuer_Datum([' num2str(DatumSkript(i,1)) ' ' num2str(DatumSkript(i,2)) '],8)'])
   
    Ergebnis{i} = sim(NameSim);
    Ergebnis{i}.datum = DatumSkript(i,:);

    toc;
   
end
matlabpool close;
 


Wenn ich den Code so ausführe, bekomme ich in Ergebnis{i} lediglich die Zeitwerte angezeigt.
Wenn ich stattdessen
Code:
[Zeit{i},~,Ergebnis{i}] = sim(NameSim);
schreibe, bekomme ich die Zeitwerte und die Ausgangswerte ausgegeben. Die Ausgabewerte werden alle in ein Array geschrieben und das ganze wird sehr unübersichtlich.
Wenn ich in Simulink auf den "Play-Button" drücke oder einfach
Code:
schreibe bekomme ich ein tout und ein yout und im yout stehen alle Outputs schön übersichtlich in einer Struktur.

Gibt es eine Möglichkeit die Simulation über einen Befehl wie a = sim(b) zu starten und a als eine Struktur mit Zeit UND Funktionswerten zu erhalten?
Schöne Grüße,
Felix
Private Nachricht senden Benutzer-Profile anzeigen


felix
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 16.01.14
Wohnort: ---
Version: 2014a
     Beitrag Verfasst am: 23.01.2014, 13:16     Titel:
  Antworten mit Zitat      
Leider hielten sich die Antworten bis jetzt in Grenzen. Ich hatte auf eine einfache Lösung gehofft, die ich einfach nur nicht gefunden habe. Hier ist mein Lösungsansatz:

Code:

tic;
matlabpool;
Anzahl_Simulationen = 20;
parfor i=1:Anzahl_Simulationen
    load_system('einfaches_modell_mit_3_Out');
    set_param('einfaches_modell_mit_3_Out/index','value',num2str(i));
[time{i},~,signals{i}] = sim('einfaches_modell_mit_3_Out');

end
matlabpool close;


%Erzeugen der Struktur
sim('einfaches_modell_mit_3_Out');

% Arrays von parfor in Struktur umschreiben
for j = 1:Anzahl_Simulationen    
    for i = 1:length(yout.signals)
        Ergebnis{j}.signals(i).blockName = yout.signals(i).blockName;
        Ergebnis{j}.signals(i).dimensions = yout.signals(i).dimensions;
        Ergebnis{j}.signals(i).values = signals{j}(:,1:Ergebnis{j}.signals(i).dimensions);
        signals{j} = signals{j}(:,1+Ergebnis{j}.signals(i).dimensions:end);
        Ergebnis{j}.time = time{j};
    end
end
clear i j Anzahl_Simulationen yout tout signals time;

toc;
 


Ich lasse die Simulation einmal ausserhalb des parfor-loops laufen und benutze die erzeugte Struktur, um die Dimensionen und Benennungen der einzelnen Outputports zu erhalten. Damit zerlege ich das Array, welches ich im parfor erzeugen kann und speichere dies in der Struktur Ergebnis.
Die Lösung ist noch nicht perfekt ausgearbeitet. Man kann sie hinsichtlich Geschwindigkeit sicher noch optimieren.
Ich hoffe irgendjemandem damit irgendwann mal weiterhelfen zu können Smile

einfaches_modell_mit_3_Out.slx
 Beschreibung:
Simulink Simulation zum Skript.

Download
 Dateiname:  einfaches_modell_mit_3_Out.slx
 Dateigröße:  11.17 KB
 Heruntergeladen:  288 mal
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.