2016-07-30 4 views
1

Ich bin in einem Fehler der Timer-Funktion stecken. Obwohl ich versucht habe zu suchen, finde ich keine Antwort.Ein Fehler in der Timer-Funktion (MATLAB R2014a)

function figure1_CreateFcn(hObject, eventdata, handles) 
global t 
t = timer('ExecutionMode', 'fixedRate', 'StartDelay',1, 'Period',1,'TasksToExecute',150); 
t.TimerFcn = {@my_callback_fcn}; 

Der Fehler ich habe ist:

Error while evaluating TimerFcn for timer 'timer-1'
Too many input arguments.

Meine MATLAB Version R2014a ist. Die start Funktion heißt pushbutton2_Callback Funktion.
Ich habe versucht, Period zu 1.0, TasksToExecute zu inf oder TimerFcn im Anruf zu timer zu ändern. Es hilft nicht.

Gibt es jemanden, der mir helfen kann?

+0

die erste Zeile des 'my_callback_fcn' (der Prototyp von Matt oben gefragt) sollte mindestens zwei Eingangsgrößen (der Griff des anrufenden Objekts und die Ereignisdaten), auch wenn Sie benutze sie nicht. Also sollte es so aussehen: 'function my_callback_fcn (hobj, evt)', oder wenn du diese Variablen wirklich nicht verwendest, kannst du Matlab sagen, sie zu ignorieren 'function my_callback_fcn (~, ~)' – Hoki

+0

@Hoki Hallo! Meine Rückruffunktion ist die Funktion * my_callback_fcn (handles, ~) *. Der Fehler wird ** Der Name 'edit1' ist keine zugängliche Eigenschaft für eine Instanz der Klasse 'Timer-Objekte'. ** –

Antwort

0

Der Fehler wird verursacht, weil die von Ihnen bereitgestellte Rückruffunktion my_callback_fcn nicht über zwei Eingabeargumente verfügt. Sie haben zwei Möglichkeiten, um das zu lösen. Nur tun ein von ihnen:

  1. eine anonyme Funktion mit zwei Eingabeargumente erstellen, wenn Sie den Timer-Rückruf zuweisen:

    t.TimerFcn = {@(obj,event)my_callback_fcn}; 
    
  2. Fügen Sie zwei Eingabeargumente zu my_callback_fcn so Ihre erste Zeile, dass Funktion wie folgt aussieht:

    function my_callback_fcn(obj,event) 
    

Sie können die Argumente mit ~ ignorieren, wenn Sie sie nicht in der Funktion benötigen. So Ihr Code von der Frage könnte wie folgt aussehen:

t = timer('ExecutionMode', 'fixedRate', 'StartDelay',1, 'Period',1, 'TasksToExecute',150); 
t.TimerFcn = {@(~,~)my_callback_fcn}; 

Here sind einige weitere Informationen über Timer Callback-Funktionen.


zu adressieren this Kommentar und that ein:

nicht beide Lösungen zur gleichen Zeit anwenden Versuchen Sie denn dann werden Sie zwei Argumente an die Funktion Prototyp hinzufügen und dann nicht tun stelle es zur Verfügung. Das Ergebnis wäre folgender Fehler:

Sie müssen nur Lösung 2 nach dem Prototyp, den Sie in Ihrem Kommentar gepostet haben, tun. Hier ist ein funktionierendes Demo:

function timertest 
t = timer('ExecutionMode', 'fixedRate', 'StartDelay',1, 'Period',1, 'TasksToExecute',150); 
t.TimerFcn = {@my_callback_fcn}; 
start(t); pause on; pause; stop(t); delete(t); 

function my_callback_fcn(handles,~) 
handles; 
disp('xy'); 
+0

Hallo ~ Vielen Dank für Ihre Hilfe! Ich versuche und die Fehlerinformation ist * Nicht genug Input-Argumente. * Und ich versuche, was Hoki sagte die Fehlerinformationen wird * Der Name 'edit1' ist keine zugängliche Eigenschaft für eine Instanz von Klasse 'Timer-Objekte'. * Es ist so komisch, weil edit1 nichts mit dem Zeitobjekt zu tun hat. –

+0

Es tut mir leid, dass ich nicht Code in den Kommentar eingeben kann. –

+0

@standerQiu Hast du beide Möglichkeiten gleichzeitig angewendet ? Dies wird nicht funktionieren, weil Sie dann versuchen, die Funktion ohne Argumente (Lösung 1) aufzurufen, wenn sie zwei benötigt (die, die Sie hinzufügen würden, indem Sie Lösung 2 ausführen). Um Code in Kommentaren zu formatieren, schließen Sie ihn mit einem Häkchen ein. [Hier] (http://meta.stackexchange.com/a/24794/298845) gibt mehr Informationen dazu. – Matt