1. PltBacRes.m starten (GUI öffnet sich)
2. In der GUI auf Plot-Button drücken (In der dort vorhanden axes erscheint jetzt ein Sinus)
3. Save-Graph Button drücken (hier sollte eigentlich dieser Sinus gespeichert werden können)
____________________________________________________________
Der nicht funktionierende Code befindet sich in der PltBacResAct.m in Zeile 48-62 (Das ist das worüber wir auf Seite 1 diskutiert haben)
der einfachste Weg:
die Figure mit GUIDE öffnen,
das Koordinatensystem doppelklicken,
die Eigenschaft 'NextPlot' auf 'replacechildren' stellen.
Hintergrund:
bei deinem plot-Befehl werden bisher alle Eigenschaften des Koordinatensystems, also auch die Tag-Eigenschaft, zurückgesetzt. Damit ist es schwierig, das Koordinatensystem zu "finden". Das wird durch obiges verhindert.
Also das was du vorgeschlagen hast funktioniert für den Fall das ich die GUI nicht über eine andere aufrufe.
Sobald ich die GUI über eine andere GUI (bzw. GUI1->GUI2->GUI3) aufrufe bekomme ich folgenden Fehler:
__________________________________________
Error using copyobj
Invalid child handle argument
Error in PltBacResAct>SaveGraphButton (line 5196)
copyobj(allchild(FindAxes),f_copy);
Error in PltBacResAct (line 108)
SaveGraphButton
Error while evaluating uicontrol Callback
__________________________________________
Wahrscheinlich bin ich grad zu blöd die GUI-handles zu übergeben oder ?
Sobald ich einmal die Kenngröße (In der GUI mit dem PLOT) ändere und dann plotten will verliert er "unterwegs" die handles wieder. Sorry aber irgendwie Blicke ich da anscheinend nicht so ganz durch.
das Thema hatten wir doch schon.
Mit dieser Zeile rufst du den Öffnungscode der GUI von vorne auf. Ich meine jedoch, das Handle auf die GUI (meist handles.figure1) zu übergeben, um dann mit guidata wieder an die Handles heranzukommen.
Gibt es irgendwie eine begrenzung o.Ä. wie oft ich auf einen 'Tag' in einer GUI zugreifen kann ?
Hab das Ganze auf einer andere Art zu lösen, nur so zum probieren...
Es funktioniert auch, zumindest die ersten 2 mal.
Sprich, ich plotte einmal und dann kann ich es speichern, plotte das zweite mal ich kann es speichern, plotte ich aber jetzt ein drittes mal kann ich es nicht mehr speichern bzw. die jpg is leer.
Hab es mal mit debuggen versucht und jedes mal geschaut was unter:
für FindAxes gespeichert wird.
Beim 1. mal findet er die axes1 und hat den Inhalt 170
Beim 2. mal findet er die axes1 und hat den Inhalt 170
Beim 3. mal findet er die axes1 nicht und hat den Inhalt [].
Habe es jetzt mal mit einem Toggle Button versucht dieser gibt mir eine 1 oder 0 wenn der user den Plot speichern will oder nicht.
Und auch alles in die selbe Funktion. Für jeden Plot habe ich jetzt im Prinzip die ganze save Geschichte drin.
Gibt es irgendwie eine begrenzung o.Ä. wie oft ich auf einen 'Tag' in einer GUI zugreifen kann ?
Kann ich mir nicht vorstellen.
Zitat:
Beim 1. mal findet er die axes1 und hat den Inhalt 170
Beim 2. mal findet er die axes1 und hat den Inhalt 170
Beim 3. mal findet er die axes1 nicht und hat den Inhalt [].
Wird zwischen 2. und 3. Mal genau dasselbe gemacht wie zwischen 1. und 2. Mal?
Geh mal mit dem Debugger wirklich schrittweise durch und schaue genau, wann das Koordinatensystem nicht mehr gefunden wird.
Hab es jetzt nochmal untersucht.
Leider ist nichts festzustellen...Außer das sich der Wert von FindAxes bei jedem Neustart des codes verändert. Ist das normal ? Also er bleibt zwar konstant solange ich das Programm nicht schließe.
Egal welche Variablen ich zum Plotten nehme der Vorgang bleibt immer gleich.
Der Vorgang sieht wie folgt aus:
1.Daten der ausgewählten Variable holen
2.Finde das Koordinatensystem
3.Plotten
4.Speichern des Plots vom gefundenen Koordinatensystems
5. Funktion ist zu Ende Alle Daten aus dem Workspace werden gelöscht
Das geht genau für zwei mal Plotten und Speichern und dann beim dritten mal findet er die axes nicht mehr.
_______________________________________________________________
UPDATE:
Hab jetzt mein Minimalbeispiel so umgebaut das es so aussieht (zumindest von den funktionen des anderen) wie der eigentliche Code und hier funktioniert alles einbahnfrei. Ich kann es mir einfach nicht erklären.
Das einzige was ich in meinem eigentlich Code anders mache ist das ich eine Mat-File lade und die Daten dort raushole, Das kann aber kein Einfluss auf die GUI haben oder nicht ?! Ich blick da einfach nicht mehr durch.
Funktioniert wie vorher nur das ich jetzt noch die Radio-Buttons.
-Frequency
-Vline(rms)
-Efficiency
aktiviert habe jedes plottet ein Sinus in einer anderen Farbe.
(Nebenbemerkung: Das Minimalbeispiel wurde auf einem Mac programmiert und getestet, ich weiß nicht ob das eine Rolle in diesem Fall spielt)
Und hier nochmal das Minimalbeispiel mit toggle button anstatt Pushbutton.
Mit togglebutton (SAVE-GRAPH) lässt sich das speichern aktivieren bzw. deaktivieren. Default Zustand ist Speichern.
Wenn man jetzt auf Plot drückt und das speichern aktiviert ist dann kommt direkt nach dem Plot ein dlginput fenster für das Speichern.
Aber auch das funktioniert nur im Minibeispiel ohne das Laden und Verarbeiten der Mat-File.
Außer das sich der Wert von FindAxes bei jedem Neustart des codes verändert. Ist das normal ?
Ja.
Zitat:
Das geht genau für zwei mal Plotten und Speichern und dann beim dritten mal findet er die axes nicht mehr.
Kann ich so nicht reproduzieren.
Zitat:
Hab jetzt mein Minimalbeispiel so umgebaut das es so aussieht (zumindest von den funktionen des anderen) wie der eigentliche Code und hier funktioniert alles einbahnfrei. Ich kann es mir einfach nicht erklären.
Irgendetwas dürfte anders sein.
Zitat:
Das einzige was ich in meinem eigentlich Code anders mache ist das ich eine Mat-File lade und die Daten dort raushole, Das kann aber kein Einfluss auf die GUI haben oder nicht ?!
Das an sich sollte keinen Einfluss darauf haben.
Teste es doch so, dass du in deinem tatsächlichen Code das Laden der Daten durch das Erstellen einer Zufallsmatrix o.ä. ersetzt - dann wirst du's ja sehen.
Damit du mal den Fehler reproduzieren kannst lad ich jetzt mal meinen vollständigen Code hoch.
Einmal die Version mit dem Push-Button:
Hier tritt der Fehler auf das ich nur einmal einen Plot speichern kann und dann findet er die Axes nicht mehr und speichert leere Bilder.
Und dann die Version mit dem Toggle-Button.
Hier tritt der Fehler auf das erster Plot gespeichert wird zweiter auch noch gespeichert wird und wenn man dann weiter machen will werden nur noch leere Bilder gespeichert.
Ist jetzt leider sehr viel Code enthalten, sorry. Hoffe du kannst dich trotzdem mal durchwühlen. Im Grundegenommen ist alles wie in den "Minimalbeispielen" nur das hier noch die Matrix mit allen Simulationsdaten verarbeitet wird.
Hinweis:
In der PltBacSetUp.mat sind zwei Pfade gespeichert, die musst du vorher anpassen.
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
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.