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

Auf externes Programm warten

 

schlierfmi
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 14.03.12
Wohnort: München
Version: R2011a
     Beitrag Verfasst am: 03.11.2012, 00:20     Titel: Auf externes Programm warten
  Antworten mit Zitat      
Hallo liebe Matlab-Gemeinde,

ich versuche schon seit ein paar Tagen ein bestehendes Programm zu verbessern.
Bisher: Mein (mit Hilfe von GUIDE programmiertes) Matlabprogramm steuert ein Berechnungsprogramm (läuft in MS-Dos) an. Bestimmte Zeilen des Outputs (ein .txt file) werden von meinem Programm ausgelesen und kommen in den Input für das externe Programm für die nächste Schleife. So wird das Ergebnis immer besser angenähert. Das Matlabprogramm füttert sozusagen das externe Programm(das nur rechnet) mit den Daten.
Der Benutzer gibt die Anzahl der Iterationsschritte vor. Momentan wartet mein Programm einfach 10 Sekunden
Code:
bis eine Schleife durchgerechnet wurde und die nächste startet.

Was ich ändern möchte: Dieses angesteuerte Programm, benötigt eigentlich nur ca.5 Sekunden (Je nach Rechenleistung) bis es fertig ist (bis sich MS-Dos-Fenster schließt).
Mein Ziel wäre nun, dass mein Programm nicht eine ungefähre Zeitangabe abwartet sondern auf das MS-Dos-Programm wartet und am besten noch eine Waitbar dazu ausgibt.

Mit welchem Befehl am besten? Waitfor?WaitForSingleObject?
mit Dos-Befehl habe ich es schon versucht (
http://www.gomatlab.de/dosstart-wai.....25961,highlight,wait.html)
Anmerkung: Das Berechnungsprogramm lässt sich mit diesem Befehl nicht ansteuern. Wenn man erst in das Verzeichnis navigiert und dann die exe ausführt funktioniert es seltsamerweise. Dann müsste ich aber zwei hintereinanderliegende Befehle in einem Commandwindow ausführen-->nur 1x "dos"-Befehl?


Vielen Dank schon mal

Grüße!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.11.2012, 09:34     Titel:
  Antworten mit Zitat      
Hallo,

funktioniert es, wenn du in MATLAB zunächst mit CD in das Verzeichnis wechselst und dann den DOS-Befehl ausführst?

Den waitbar halte ich für schwierig umzusetzen, da du dann ja eben nicht auf die Beendigung der Ausführung der EXE wartest.

Ich sehe noch eine andere Möglichkeit: falls du warten musst, bis die EXE eine Datei geschrieben hat, könntest du mit
Code:

abfragen, ob es die Datei schon gibt.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 14.03.12
Wohnort: München
Version: R2011a
     Beitrag Verfasst am: 03.11.2012, 10:46     Titel:
  Antworten mit Zitat      
Danke Harald!

Code:
ist eine super Idee! Smile

Die waitbar könnte man darauf beschränken, dass einfach nur eine Ladebalken ohne bestimmte Eichung hin und her fährt, nur um zu zeigen,dass im Hintergrund gerade was läuft.
Diesen Wartescreen könnte man dann abbrechen sobald die xyz.txt Datei existiert.
Gibt es so einen Wartescreen? Wie setze ich das am besten um?

Ich denke eine While exist- Schleife wäre besser geeignet für die Umsetzung.

Gibt es sowas wie While not exist ?

Dann wäre möglich

- while not exist ('xyz.txt')
waitscreen %%oder etwas in der Art
end
- weiter mit dem Auslesen der Daten...


Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.11.2012, 10:55     Titel:
  Antworten mit Zitat      
Hallo,

freilich gibt's das ;)

Code:
msgbox('Bitte warten, bis Daten geladen sind. Das dauert ca. 5 Sekunden')
while ~exist('datei.txt', 'file')
pause(0.2)
end


Wenn du gerne einen Fortschrittsbalken haben willst:
Code:


Wobei ich immer finde, dass man bei solchen Fortschrittsbalken schon ziemlich genau wissen sollte, wie lange das noch dauert. Nichts finde ich nerviger als ein Fortschrittsbalken, der ewig bei 99% hängt. Aber das ist meine persönliche Meinung :)

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 14.03.12
Wohnort: München
Version: R2011a
     Beitrag Verfasst am: 03.11.2012, 12:00     Titel:
  Antworten mit Zitat      
Hallo, ich habe noch Probleme mit der while-schleife:
Habe jetzt ein wenig rumprobiert, irgendwie wird die Meldung immer angezeigt, egal ob die Datei schon existiert oder nicht?

ich habe statt einem festen Dateinamen einen Verzeichnispfad:

Code:
while ~exist(pfad, 'file')
msgbox('Bitte warten, bis Daten geladen sind. Das dauert ca. 5 Sekunden')
pause(0.1)
end
 


Ein weiterer Wunsch wäre, dass die Box von selbst verschwindet. Momentan klickt der Benutzer sie weg und die Box erscheint nicht wieder obwohl die while-Bedingung, dass die Datei schon exisitiert nicht erfüllt ist Confused

Viele Dank, Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.11.2012, 15:17     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Habe jetzt ein wenig rumprobiert, irgendwie wird die Meldung immer angezeigt, egal ob die Datei schon existiert oder nicht?

Kann es sein, dass die Datei noch vom vorherigen Durchlauf existiert?

Zitat:
ich habe statt einem festen Dateinamen einen Verzeichnispfad:

Ein Verzeichnispfad inkl. Dateiname (wie C:\work\test.txt) oder wirklich nur das Verzeichnis (wie C:\work)? Im letzteren Fall solltest du exist mit Option 'dir' verwenden.

Zitat:
Ein weiterer Wunsch wäre, dass die Box von selbst verschwindet.

Handle zurückgeben und mit close schließen

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 14.03.12
Wohnort: München
Version: R2011a
     Beitrag Verfasst am: 03.11.2012, 15:25     Titel:
  Antworten mit Zitat      
Danke Harald,

zum 1.Punkt: Zunächst war das der Grund aber nach ein paar Fehlversuchen habe ich die Datei immer gleich wieder gelöscht

zum 2. Punkt: Es handelt sich um einen vollständigen Pfad inkl. Dateiname

Aber ich habe das Gefühl, dass ich mich selbst noch ein wenig in diese Punkte einarbeiten muss.

zum 3. Punkt: Könntest du mir kurz erklären was du unter "Handle zurückgeben und mit close schließen" meinst?
Das würde mir schon mal sehr weiterhelfen

Grüße und Dank
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.11.2012, 16:52     Titel:
  Antworten mit Zitat      
Hallo,

zu der Rückfrage:

Code:


und später

Code:


Grüße,
Harald
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 - 2025 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.