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

axes(handle) funktioniert nicht.

 

Mircode
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 06.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2009, 16:54     Titel: axes(handle) funktioniert nicht.
  Antworten mit Zitat      
Hi @ all.

Ich benutze MATLAB 7.1 R14.

Ich habe ein(e) GUI erstellt, in der ich einen Plot darstellen möchte. Über Slider kann man Parameter ändern, die den Plot ändern sollen. Die Berechnung ist ziemlich aufwändig und ich möchte sie nicht bei jedem Slider-callback durchführen sondern nur 5x pro Sekunde. Also mache ich es mit einem Timer.

Beim Laden des/r GUI, passiert folgendes:
Code:

global DispGraphHandle;
DispGraphHandle = handles.disp_plot;
global GraphUpdateTimer;
GraphUpdateTimer=timer('TimerFcn',@GraphUpdate, 'Period', 0.2, 'ExecutionMode', 'fixedSpacing');
start(GraphUpdateTimer);
 


Die Timer-Callback-Funktion sieht so aus:

Code:

function GraphUpdate(obj, event, string_arg)
    global DispGraphHandle;
    disp('axes-handle (parent function) :'); disp(DispGraphHandle);
    [output] = externmfilefunction(stuff,DispGraphHandle);
 


In dem externen m-File soll der Plot durchgeführt werden:

Code:

    disp('current:'); disp(gca);
    disp('wanted:'); disp(plot_handle);

    axes(plot_handle);

    disp('current which should now be wanted:'); disp(gca);
    disp('again wanted:'); disp(plot_handle);
 


Beim ersten Timer-Event passiert das erwartete und erhoffte:

axes-handle (parent function) :
221.0052

current:
5.0054

wanted:
221.0052

current which should now be wanted:
221.0052

again wanted:
221.0052


Beim zweiten Aufruf jedoch:


axes-handle (parent function) :
221.0052

current:
258.0052

wanted:
221.0052

current which should now be wanted:
258.0052

again wanted:
221.0052


Wenn ich danach Lines und Texts male, werden die beim ersten Aufruf tatsächlich dorthin gemalt, wo ich sie haben will. Beim zweiten wird ein neues Figure-Fenster geöffnet.
Wenn ich allerdings

Code:


in dem externen m-File benutze, zeichnet er ins richtige Feld. Zugriff ist also prinzipiell gewährleistet, eigentlich Razz

Kann mir jemand sagen, warum der Axes-Befehl nicht so funktioniert, wie ich erhoffte? Noch cooler wäre natürlich eine Lösung.


Heißt es eigentlich die oder das GUI? Das Interface, aber alle sagen die...

Vielen Dank im Voraus!

MfG Mirko
Private Nachricht senden Benutzer-Profile anzeigen


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2009, 18:21     Titel:
  Antworten mit Zitat      
Ist vielleicht ein ähnliches Problem wie hier: http://www.gomatlab.de/gui-spez-axes-extern-verwalten-t5148.html?
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2009, 18:35     Titel:
  Antworten mit Zitat      
Ich hatte auch Problemem mit dem Plotten über einen Timer...
Schreib mel den plot-Befehl nicht mit
Code:
plot(handles.axes1,[x1 x2],[y1 y2]...)

sondern mit
Code:
plot([x1 x2],[y1 y2],'parent',handles.axes1);


Und bei mir wurde jedesmal, wenn ich sowas wie axes(handles.axes1,'ytick'....) im Code hatte, eine neues figure geöffnet. Also alles durch set(handles.axes1,'ytick'....) ersetzt und so klappt es bei mir nun


MfG
 
Mircode
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 06.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2009, 10:43     Titel:
  Antworten mit Zitat      
Hallo! Vielen Dank für die Antworten, hilft leider beides nicht.

@ Gast2

plot(handles.axes1,[x1 x2],[y1 y2]...) funktioniert ja eben komischerweise, wie ich bereits geschrieben hab.

Aber
axes(axes_handle)
plot([x1 x2],[y1 y2])
sollte ja das selbe machen, nur axes(axes_handle) funktioniert irgendwie nicht, wie man an den gca-Ausgaben sehen kann. Und ich möchte auch den text-Befehl benutzen, wo man parent nicht angeben kann sondern nur eine Ausgabe in das aktuelle axes-Objekt möglich ist.

MfG Mirko
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 09.03.2009, 11:38     Titel:
  Antworten mit Zitat      
Moin,

die beiden Zeilen sind aber nicht unbeding das gleiche, oder?
Code:
plot(handles.axes1,[x1 x2],[y1 y2]...);
% wenn das funktioniert, sollte auch dieses funktionieren:
axes(handles.axes1)
plot([x1 x2],[y1 y2])


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Mircode
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 06.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2009, 12:20     Titel:
  Antworten mit Zitat      
Na ich dachte eigentlich schon das sei das gleiche...
Aber das erste geht, das zweite nicht.

EDIT:

So, es geht noch weiter. Ich möchte bei Betätigen eines Buttons eine Simulink-Simulation aufrufen mit sim(). Darin sind embedded Matlab Blöcke, die in jedem Frame Plots zeichnen sollen und auch ein XY-Graph-Block.

Wenn ich aus dem MATLAB-Hauptfenster sim() benutze geht alles, aus dem GUI raus wird im ersten Frame der Plot mit ins XY-Graph-Fenster gemalt und dann gibt es folgenden Fehler:

Error in ==> sfunxy>mdlUpdate at 169
set(ud.XYAxes, ...

Error in ==> sfunxy at 33
sys = mdlUpdate(t,x,u,flag,ax,blockHandle,varargin{:});

??? Error using ==> sim
--> Error in 'impedancecontrol_GUI/XY Graph/sfunxy' while executing M-File S-function 'sfunxy', flag = 2 (update), at time 0. MATLAB error message:
Invalid handle object.
--> Error evaluating 'StopFcn' callback of XY scope. block (mask) 'impedancecontrol_GUI/XY Graph'. Invalid handle object.

Diesmal glaube ich fast, dass das Problem nicht an der Tastatur sitzt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Mircode
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 06.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.03.2009, 12:13     Titel:
  Antworten mit Zitat      
Ok, hab jetzt bei text einfach 'Parent' mit angegeben. Damit gehts. axes() funktioniert immer noch nicht.
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.