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

TimerFcn hObject

 

Janika
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 24.05.11
Wohnort: Süddeutschland
Version: R2010a
     Beitrag Verfasst am: 25.05.2011, 09:44     Titel: TimerFcn hObject
  Antworten mit Zitat      
Hallo zusammen.

Ich habe folgendes Problem:

Ich habe eine GUI mit einem Button, dessen Callbackfunktion ein m-File aufruft. Nun soll dieses Skript auch als TimerFcn aufgerufen werden. Das Problem welches ich jetzt habe, ist, dass das Skript mit hObject auch auf die GUI zugreift. Dieses hObject ist aber beim Timer-Aufruf unbekannt.
Ich habe schon folgende Lösungversuche ausprobiert und weiß jetzt irgendwie nicht mehr weiter.

Lösung1:
Code:
updateTimer = timer('TimerFcn','updateSkript',...);
%
%updateSkript in einem separaten m-file

Hierbei tritt ein Laufzeit-fehler auf: undefined function or variable 'hObj'

Lösung2:
Code:
updateTimer = timer('TimerFcn',@updateSkript,...);
%
%function updateSkript(hObj,ev) in separatem m-File

Fehler vor Ausführung: input argument hObj is undefined

Lösung 3:
Code:
updateTimer = timer('TimerFcn',{@updateSkript,hObject},...);
%
% function updateSkript(hObj,ev, hRoot) in separaten m-File
% Abfrage ob Event.Type == 'TimerFcn'

Funktioniert (noch) nicht, da die Event-Abfrage, bei normalem Aufruf von UpdateSkript leer ist. Wenn ich nach if event abfrage, kommt wiederrum bei Aufruf aus der Timer-Routine ein Fehler.


Ich hoffe mein Problem ist verständlich geworden und ich bekomme irgendwelche Tipps, wie ich weitermachen könnte.

Danke schon mal und Gruß, Janika
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.05.2011, 10:07     Titel:
  Antworten mit Zitat      
Hallo

Wo definierst du denn deine Timer-Funktion?
Wie wird hObject in Script verwendet, denn hObject ist in Prinzip der Auslöser des Events?
Ist es notwendig um handles zu bekommen, dann kann man z.B. einfach stattdessen das Handle deines GUI übergeben.
Private Nachricht senden Benutzer-Profile anzeigen
 
Janika
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 24.05.11
Wohnort: Süddeutschland
Version: R2010a
     Beitrag Verfasst am: 25.05.2011, 10:20     Titel:
  Antworten mit Zitat      
Der Timer wird in meiner OpeningFcn meines Programm definiert. Die TimerFcn, d.h. das Skript oder Funktion UpdateSkript befindet sich in einer seperaten Datei.

HObject brauche ich in meinem Skript um an die handles zu kommen. Richtig! Das würde bedeuten, dass ich diese als zusätzliches Argument an die Funktion übergebe?So?
Code:
updateTimer = timer('TimerFcn',{@UpdateSkript,handles},...)


Würde aber auch bedeuten, dass ich die Veränderungen nicht speichern kann, oder?!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.05.2011, 11:04     Titel:
  Antworten mit Zitat      
Hallo

Du brauchst nicht das ganze Handles zu übergeben, sondern nur das Handle deines Fensters/Hauptgui, wo du deine handles abspeicherst
schaue dir in OpeningFcn wohin GUIDATA die handles abspeichert.
Das kannst als hObject an deinem Script übergeben.

Code:

updateTimer = timer('TimerFcn',{@UpdateSkript, handles.meinefigure},...)

 


Veränderungen kannst du schon speichern, dazu brauchst du bloß deine Haupgui
Code:

guidata(handles.meinefigure,handles)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Janika
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 24.05.11
Wohnort: Süddeutschland
Version: R2010a
     Beitrag Verfasst am: 25.05.2011, 14:12     Titel:
  Antworten mit Zitat      
Hab die Vorschläge so umgesetzt. Vielen Dank.

Mein Update funktioniert nun auch ganz gut, wenn ich die Updatefunktion aus der Timerroutine aufrufe. Führe ich aber nun ein manuelles Update aus tut sich gar nichts, kein Fehler, aber auch keine Funktion!

Mein Aufruf von meinem manuellen Updatebutton sieht folgendermaßen aus:
Code:
function update_Callback(hObject, eventdata, handles)
 handles = guidata(hObject);
 updateSkript(hObject,eventdata,handles.figure1);
 guidata(hObject,handles);


Übergebe ich hier den falschen handle?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.05.2011, 15:57     Titel:
  Antworten mit Zitat      
Hallo

vermutlich änderst du etwas in UpdateScript, und die Änderungen speicherst du in handles zurück. Ich denke, dass du höchstwahrscheinlich in Callback deine handles überschreibst.

Es ist so, wenn du handles irgendwo, speicherst, dann musst du in anderen Funktion deine handles ja wieder aktualisieren

Hier ist wahrschienlich besser Abspeichern zu unterlassen, da du ja nichts änderst:
Code:

function update_Callback(hObject, eventdata, handles)
 handles = guidata(hObject);
 updateSkript(hObject,eventdata,handles.figure1);
 % kommentiere einfach diese Zeile aus und schaue was passiert
 % guidata(hObject,handles);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Janika
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 24.05.11
Wohnort: Süddeutschland
Version: R2010a
     Beitrag Verfasst am: 26.05.2011, 09:00     Titel:
  Antworten mit Zitat      
Wunderbar! Hat nun funktioniert!! Very Happy

Vielen, vielen Dank! JANIKA
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.