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

Timer

 

Dirk 8051

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2012, 11:33     Titel: Timer
  Antworten mit Zitat      
Hallo zusammen,
ich beschäftige mich erst seit kurzer Zeit mit Matlab und möchte nun mit hilfe des Timer's eine Funktion periodisch aufrufen.

Bei der Initialisierung des Timer's, verstehe ich noch nicht den Unterschied der folgenden Anweisungen:

t=timer('TimerFcn','@test',...
t=timer('TimerFcn',test',...

Also, einmal mit @ und einmal ohne @, wo genau ist da der Unterschied?

Freue mich auf eine Antwort,

gruß
Dirk


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.07.2012, 13:33     Titel: Re: Timer
  Antworten mit Zitat      
Hallo Dirk 8051,

Um ganz genau zu sein, ist da kein Unterschied: Beide geposteten Versionen funktionieren nicht. ;-)

Aber nach einer kleinen Umsortierung der Quotes:
Code:
t=timer('TimerFcn', @test,...
t=timer('TimerFcn', 'test',...

Ersteres ist ein "Functionhandle", zweiteres ein String. In der Dokumentation wird dies unter "functionhandle callbacks" ausführlich erklärt: http://www.mathworks.com/help/techd.....ating_plots/f7-55506.html.
Die Function-Handles sind deutich zu bevorzugen, während die Strings für die Rückwärtskompatibilität mit Matlab < 6 weiter möglich sind.

Für einfache Tests sind Strings ok:
Code:
t = timer('TimerFcn', 'disp(clock)', ...)

Hier wäre die functionHandle-Syntax ohne Not umfangreicher:
Code:
t = timer('TimerFcn', @myFunction, ...)

function myFunction(TimerH, EventData)
disp(clock)

Die Stringmethode hat aber den großen Nachteil, dass sie nicht debuggt werden kann - und jede Funktion mit mehr als 12 Buchstaben kann und wird Bugs enthalten. In der Funktion, die für die Functionhandle-Syntax erstellt wurde, kann man einfach z.B. einen Breakpoint setzen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Dirk 8051

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2012, 14:15     Titel:
  Antworten mit Zitat      
Hallo Jan,
erstmal vielen Dank für die Antwort.

Also mit der Variante:

t=timer('TimerFcn','test',....

wird ein String benutzt, den ich aber auch als Funktionsname für meine selbst geschriebene Funktion nutzen kann (ohne die "disp" Anweisung).

Somit ist der einzige unterschied, dass der Code mit dem Functionshandle umfangreicher ist und besser für die Fehlersuche geeignet ist.

Okay,
gruß Dirk
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 05.07.2012, 13:29     Titel:
  Antworten mit Zitat      
Hallo Dirk 8051,

Ja, das ist fast der ganze Unterschied.
Det String 'test' wird im BaseWorkspace ausgeführt. Die Funktion "test.m" muss dann also im PATH zu finden sein. Wenn Du dann im CommandWindow "test = 2" eingibst, wird danach nicht mehr die Funktion "test.m" ausgeführt, sondern "2" ausgegeben! das ganz recht verblüffend sein.

Ein FunctionHandle wird dagegen immer nur eine bestimmte Funktion aufgerufen, die zusätzlich auch eine Unterfunktion im M-File sein kann, in dem das GUI erstellt wird. Auf solche Unterfunktionen kann man ja von aussen nicht ohne weiteres zugreifen, per Functionhandle aber schon.

Gruß, Jan
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.