|
|
| Dirk 8051 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.07.2012, 11:33
Titel: Timer
|
 |
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
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 04.07.2012, 13:33
Titel: Re: Timer
|
 |
Hallo Dirk 8051,
Um ganz genau zu sein, ist da kein Unterschied: Beide geposteten Versionen funktionieren nicht. ;-)
Aber nach einer kleinen Umsortierung der Quotes:
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:
Hier wäre die functionHandle-Syntax ohne Not umfangreicher:
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
|
|
|
|
| Dirk 8051 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.07.2012, 14:15
Titel:
|
 |
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
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 05.07.2012, 13:29
Titel:
|
 |
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
|
|
|
|
|
|
|
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.
|
|