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

Skript für verschiedene Input Dateien

 

dk545090
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2016, 15:50     Titel: Skript für verschiedene Input Dateien
  Antworten mit Zitat      
Liebe Forumsgemeinde,

ich bin mit der Erstellung von Skripten noch nicht ganz so vertrautr und dachte ihr könntet mir vllt helfen! ich habe folgendes Problem:

Ich habe einen Überordner, genannt "Simulation1". in diesem Ordner befinden sich Unterordner für verschiedene Windgeschwindígkeiten, z.B. genannt "Wind_V020". Wenn ich mein Modell exemplarisch für die Windgeschwindigkeit "Wind_V020" durchlaufen lasse, sieht der Vorgang wie folgt aus:

Zunächst öffne ich den "Current folder" --> Wind_V020. Dann öffne ich das Modell und klicke auf"run". Dann werde ich aufgefordert meine Input Datei ins "Command Window" einzugeben(die Input Datei befindet sich übrigens auch in meinem "Wind_V020" Ordner. Sobald ich die Eingabe mit Enter bestätige läuft die Simulation. Die Output Datei wird im gleichen "Wind_V020" Ordner gespeichert.

Nun möchte ich mein Modell für jede Windgeschwindigkeit der "Simulation1" berechnen, ohne jedesmal per Hand die erläuterten Schritte durchführen zu müssen.

Hat jemand eine Idee wie so ein Skript aussehen könnte? Ein Skript das die Output-Datei weiterhin im Ordner der Input Datei speichert, und nach Beendigung der Simulation für die erste Windgeschwindigkeit direkt die Simulation für die zweite Windgeschwindigkeit aus einem anderen Unterordner startet?

Vielen Dank schon einmal im Voraus!

David
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: 13.07.2016, 19:58     Titel:
  Antworten mit Zitat      
Hallo,

1. Cell Array der Ordner erstellen
2. Cell Array der Input-Dateinamen erstellen
3. for-Schleife drüber laufen lassen (man muss nicht ins Verzeichnis wechseln, sondern kann den kompletten Dateinamen angeben)

Ohne genauere Infos ist es schwierig, genauere Hilfestellung zu geben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
dk545090
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2016, 09:27     Titel:
  Antworten mit Zitat      
Habe 2 Bilder der Ordnerstruktur mit kurzer Erläuterung angehängt! Hilft dir das weiter?

Nachdem die Simulation abgeschlossen ist, soll der nächste Ordner "Wind_V024" zum Current folder gemacht werden, das Modell soll geöffnet werden und gestartet werden, und bei Aufforderung der Input Datei im Command Window soll die primary.fst gewählt werden. Dann beginnt das gleiche Prozedere von vorne, bis der Ordner Sim1 durchgelaufen ist.

Windordner.PNG
 Beschreibung:
Dies ist ein Beispiel für einen der Unterordner. Dieser muss der "Current folder" sein, damit das Modell die Input Datei aufrufen kann.

Download
 Dateiname:  Windordner.PNG
 Dateigröße:  15.31 KB
 Heruntergeladen:  412 mal
PFAD.PNG
 Beschreibung:
All diese Ordner beinhalten eine Input Datei "primary.fst" und ein Modell "NREL5MW_Baseline_06b_TMD.mdl", dass nach dem Öffnen und nach dem Starten dazu auffordert die primary.fst ins Command Window einzugeben.

Download
 Dateiname:  PFAD.PNG
 Dateigröße:  23.02 KB
 Heruntergeladen:  430 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
ro_mat
Forum-Century

Forum-Century


Beiträge: 158
Anmeldedatum: 20.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2016, 09:59     Titel:
  Antworten mit Zitat      
Hallo,

du kannst dir mal deine ganzen Wind-Ordner auflisten:

Code:

pfad = '..\Simulation1';   % Pfad wo der Überordner Simulation liegt
D = dir(pfad);                % Auslesen der Unterordner
D(1:2) = [];                   % Die ersten Zwei Zeilen enthalten nur Pfade
D = D([D.isdir]);            % Garantie das nur Ordner ausgewählt werden
 


Und nun mit einer Schleife alle einzeln durchgehen:

Code:

for i = 1:length(D)
   cd([pfad D(i).name]);   % Wechselt in den jeweiligen Unterordner
   % Eventuell auch cd([pfad '\' D(i).name]);
   ...
   ...
   Run-Befehl ausführen
end
 


Fertig Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
dk545090
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2016, 10:46     Titel:
  Antworten mit Zitat      
Ok super, das mit den Ordnern hat schonmal geklappt! Danke!

Wenn ich jetzt allerdings das Modell laufen lasse, "run", dann fragt Simulink ja jedesmal nach der primary.fst. Kann ich das auch automatisieren?
Private Nachricht senden Benutzer-Profile anzeigen
 
ro_mat
Forum-Century

Forum-Century


Beiträge: 158
Anmeldedatum: 20.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2016, 11:04     Titel:
  Antworten mit Zitat      
Hallo,

also du willst dass sobald du im Ordner bist ein Simulink-Modell geöffnet wird oder? Führst du dabei ein .m File aus oder .mdl?
Private Nachricht senden Benutzer-Profile anzeigen
 
dk545090
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2016, 11:10     Titel:
  Antworten mit Zitat      
genau, ich will, dass das Simulink Modell geöffnet wird, welches in dem Wind Ordner ist, der aktuell "Current Folder" ist. Sobald das Modell geöffnet ist, soll es laufen (run). Dann fordert es normalerweise die Eingabe des Namen der Input Datei (primary.fst) in den Workspace. Anstatt diese Eingabe manuell zu tätigen, soll das Modell automatisch primary.fst als input datei erkennen und die Simulation dann laufen lassen. Ich glaube letzteres kann ich aber über die Model Properties des Modellsüber InitFcn einstellen. Wichtig ist noch, dass das Öffnen des zweiten Unterordners, des zweiten Modells und damit der Beginn der zweiten Simulation erst beginnt, wenn die erste Simulation vollständig abgeschlossen ist! Eine Idee wie ich das umsetze?
Private Nachricht senden Benutzer-Profile anzeigen
 
dk545090
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2016, 11:29     Titel:
  Antworten mit Zitat      
Ok, also dass das Modell Input Datei automatisch einliest habe ich hinbekommen! jetzt sind nur noch die anderen beiden Fragen offen!
1) erster Durchlauf soll beendet sein, bevor die for-Schleife den Ordner wechselt und den zweiten Durchlauf startet!
2) Modell soll automatisch aus Unterordner Wind_0XX geöffnet werden und durchlaufen!

Danke schonmal!
Private Nachricht senden Benutzer-Profile anzeigen
 
ro_mat
Forum-Century

Forum-Century


Beiträge: 158
Anmeldedatum: 20.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2016, 11:50     Titel:
  Antworten mit Zitat      
Hallo,

damit habe ich mich auch noch nicht beschäftigt - der folgende Link soll dir dabei behilflich sein: http://de.mathworks.com/matlabcentr.....in-matlab-using-real-time

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
dk545090
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2016, 13:12     Titel:
  Antworten mit Zitat      
Ich versuche gerade den link zu verstehen. Vor allem Ihn mit den von dir gegebenen Informationen zu verknüpfen (was die Verzeichnisse angeht...) aber es will einfach nicht klappen! :-/
Private Nachricht senden Benutzer-Profile anzeigen
 
dk545090
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2016, 13:46     Titel:
  Antworten mit Zitat      
noch eine Sache, und zwar:

mein skript sieht mittlerweile so aus:


pfad = 'C:\Users\david.kolodziej\Desktop\Sim1';

D = dir(pfad);

D(1:2) = [];

D=D([D.isdir]);

for i = 1:length(D)

cd([pfad '\' D(i).name]);
sim('NREL5MW_Baseline_06b_TMD')

end

Für den ersten Windordner funktionier die Simulation, danach erhalte ich folgende Fehlermeldung:


Undefined function or variable 'pfad'.

Error in SimulinkRun1 (line 12)
cd([pfad '\' D(i).name]);

Woran könnte das liegen? Bei der ersten Rechnung erkennt Matlab den Pfad schließlich auch :-/ Anscheinend sind die VOR der for Schleife definierten Parameter nach der ersten Simulation nicht mehr im Workspace vorhanden...
Private Nachricht senden Benutzer-Profile anzeigen
 
dk545090
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2016, 14:32     Titel:
  Antworten mit Zitat      
Ok habe das Problem jetzt wie folgt gelöst:

%Pfad wo der Überordner der Simulation liegt
pfad = 'C:\Users\david.kolodziej\Desktop\Sim1';
%Auslesen der Unterordner
D = dir(pfad);
%Die ersten zwei Zeilen enthalten nur Pfade
D(1:2) = [];
%Garantie, dass mir Ordner ausgewählt werden
D=D([D.isdir]);

%Mit Schleife alle Ordner durchgehen
for i = 1:length(D)
%Pfad wo der Überordner der Simulation liegt
pfad = 'C:\Users\david.kolodziej\Desktop\Sim1';
%Auslesen der Unterordner
D = dir(pfad);
%Die ersten zwei Zeilen enthalten nur Pfade
D(1:2) = [];
%Garantie, dass mir Ordner ausgewählt werden
D=D([D.isdir]);
cd([pfad '\' D(i).name]);
%T = timer('TimerFcn',@init_sim); %initialize timer object
%start(T) %start timer object running
sim('NREL5MW_Baseline_06b_TMD')
end

meine Frage: gibt es eine schönere Möglichkeit das Skript zu schreiben?
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.