|
|
Unterbrechen der m-file-Berechnung mit pushbutton |
|
Holla84 |
Forum-Anfänger
|
|
Beiträge: 19
|
|
|
|
Anmeldedatum: 18.06.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.07.2010, 10:01
Titel: Unterbrechen der m-file-Berechnung mit pushbutton
|
|
Guten Tag,
würde gerne über eine GUI die Berechnung meines M-file per pushbutton unterbrechen und oder pausieren lassen.
Hab komischerweise noch nicht den richtigen Befehl gefunden, ihr könnt mir sicherlich helfen.
|
|
|
|
|
josekamara |
Forum-Meister
|
|
Beiträge: 529
|
|
|
|
Anmeldedatum: 26.04.08
|
|
|
|
Wohnort: München
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.07.2010, 10:37
Titel:
|
|
Mit
würde es gehen.
_________________
Simulation
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 12.07.2010, 10:38
Titel:
|
|
Hallo Holla,
ein Fall für die FAQs.
Du kannst eine Figure mit einem Button öffnen und per Callback irgendwo irgendeinen Flag setzen, den Dein M-File regelmäßig (aber nicht zu oft) abfragen muss. Um die Events bearbeiten zu lassen, braucht Dein M-File noch ein DRAWNOW. Bsp:
Statt die Existenz der Figure abzufragen, kannst Du auch per "SETAPPDATA(0, 'UserRequestedStopping', 1)", "set(FigH, 'UserData', 1)", das setzen einer globalen Variable, etc. dem M-File mitteilen, dass es stoppen soll.
Im FileExchange auf der Matlab-Seite findest Du ein paar Progressbars mit Stop-Button, bei denen Du den Callback frei definieren kannst.
Viel Erfolg, Jan
|
|
|
Holla84 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 19
|
|
|
|
Anmeldedatum: 18.06.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.07.2010, 08:43
Titel:
|
|
Mit
klappt es schon aber dann ist die Berechnung ja nur unterbrochen und nicht gestoppt. Aus dem keyboardmodus komm ich dann auch nur raus wenn ich mit
zurück zur Berechnung gehe.
Es muss doch einen Befehl geben der es ermöglicht die Berechnung einfach zu stoppen.
Mit
klappt es nur in Schleifen.
schließt direkt MATLAB
und mit
wird ja auch nichts gstoppt.
Es soll einfach das Mfile gestoppt werden und der Use wird zurück ins Commandwindow versetzt. Sollte eigentlich nicht soo schwer sein, wahrscheinlich mal wieder ein einfacher Befehl [/code]
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 14.07.2010, 09:42
Titel:
|
|
Hallo
Die Tastenkombination Strg+C bricht die Berechnung in der Script ab. Der Fokus muss aber auf Matlab Konsole befinden, damit es funktioniert.
|
|
|
Holla84 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 19
|
|
|
|
Anmeldedatum: 18.06.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.07.2010, 10:11
Titel:
|
|
Das weiß ich wohl, möchte aber gerne die Möglichkeit schaffen, dass User die im Umgang mit MATLAB nicht so firm sind einfach einen Button drücken um die Berechnung zu stoppen. Trotzdem Danke
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 14.07.2010, 11:00
Titel:
|
|
Also es gibt keinen speziellen Befehl, der einfach einen Script auf beliebigen Stelle unterbricht.
Vielleicht ist es über Timer realisierbar, obwohl das sind auch Zyklen
und du hast ja kein Zyklus, sondern willst beliebige Berechnung einfach abbrechen.
Listener wäre hier wohl die Lösung, da aber Matlab keine Listener hat, denke dass ist mit Matlab Mitteln unmöglich.
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 14.07.2010, 22:30
Titel:
|
|
Hallo Denny,
man kann schon einiges in Matlab programmieren, was einem Listener entspricht. Der "event.listener" z.B.
Das Problem ist eher, dass man einen laufenden Thread (hier mit den Berechnungen) nicht ohne weiteres stoppen kann. Das erlaubt schon das Betriebssystem nicht!
Deshalb ist es notwendig, längere Berechnungen in kleiner Häppchen aufzuteilen, so dass man am Ende eines Blocks bequem irgendeinen Flag abfragen kann, wie in meinem Code-Beispiel bereits erwähnt.
Wenn man nach KEYBOARD einen Programmteil verlassen möchte, empfiehlt sich noch ERROR. Wenn man den Code-Teil in einen TRY-CATCH Block eingekapselt hat, kann man dort im CATCH Teil noch eine genauere Fehler-Behandlung ausführen oder das Programm ohne Meldungen verlassen.
Gruss Jan
|
|
|
Holla84 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 19
|
|
|
|
Anmeldedatum: 18.06.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.07.2010, 08:42
Titel:
|
|
Wundert mich ehrlich gesagt ein bisschen das es dafür keinen Befehl gibt.
Habe es jetzt etwas unelegant mit
so findet das Programm die handles nicht mehr und bricht ab. Naja nicht schön aber selten....
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 15.07.2010, 08:47
Titel:
|
|
Hallo Jan,
stimmt, da habe ich Listener Einführung verschlafen, nicht desto trotz
Funktionsweise ist in Vergleich zu JAVA ist doch ziemlich eingeschränkt.
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 15.07.2010, 09:01
Titel:
|
|
Hallo Denny,
nun sind ja inzwischen alle Grafik-Objekt in Matlab in Java implementiert, so dass man leicht echte Java-Event-Listener anhängen kann.
Der bisher merkwürdigste Wunsch eines Users war ein Listener, der aktiviert wird, wenn ein Benutzer das Editor-Fenster aktiviert:
Schräg war auch die Frage, wie man den Tasten-Druck Listener für das CommandWindow umbiegt, so dass statt der gedrückten Taste ein andere Buchstabe erscheint. Wie nüztlich :-)
Den Code poste ich mal nicht, weil man im Notfall seine Matlab-Session nicht mehr richtig schließen kann. Das wäre dann ein "bitte starten sie diese Mal-ware von Hand"-Virus...
Gruß, Jan
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 15.07.2010, 22:25
Titel:
|
|
Hallo Jan
Ja, das weiß ich , dass Graphik-Objekte bei Matlab in Java implementiert sind.
Für mich ist der Weg noch viel zu komplex und nicht immer nachvollziehbar. Aber ich muss mich vielleicht einfach wieder mit Java beschäftigen. Ich bin in letzten 5 Jahren nur mit Matlab gearbeitet. Dass ist Menge Zeit vergangen wo ich letztes Mal mit Java gearbeitet habe.
Man kann zwar Java auf diese Objekte mit Java zugreifen, man kann aber nie sicher sein, dass es in nächster Version noch funktioniert.
Apropos in R2010b kommt schon die Warnung,
Zitat: |
Warning: Possible deprecated use of set on a Java callback.
|
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 15.07.2010, 23:54
Titel:
|
|
Hallo Denny,
Zitat: |
Für mich ist der Weg noch viel zu komplex und nicht immer nachvollziehbar.
...
Man kann zwar Java auf diese Objekte mit Java zugreifen, man kann aber nie sicher sein, dass es in nächster Version noch funktioniert. |
Da hast Du allerdings recht. Man kann sich nicht mal sicher sein, ob es mit der jetzigen Version klappt, falls man ein automatisches Update des JRE runterlädt. Es gab mal Probleme mit weißer Schrift auf weißem Grund in allen Matlab-Fenstern unter MacOS-X nach einem Java-Update.
Einen Callback from "WindowGainFocus" auf "WindowGainedFocus" umzubenennen finde ich herzhaft geckig, da es ohne Mehrwert die Benutzbarkeit einschränkt. Deswegen schlage ich vor:
"Es gibt keine benutzerfreundliche und versions-sichere Listener in Matlab."
Gruß, Jan
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 16.07.2010, 07:59
Titel:
|
|
Jan S hat Folgendes geschrieben: |
Hallo Denny,
Deswegen schlage ich vor:
"Es gibt keine benutzerfreundliche und versions-sichere Listener in Matlab."
Gruß, Jan |
Da bin ich mit dir voll einverstanden
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|