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 in GUI- Fehler b. Definition der TimerFunc

 

Marfiosie
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 18.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2017, 22:14     Titel: Timer in GUI- Fehler b. Definition der TimerFunc
  Antworten mit Zitat      
Hallo,

ich dachte eigentlich ich wäre mit meinem kleinen Programm schon so gut wie fertig, aber irgendwie krieg ich die Verwendung des Timers nicht gebacken, vielleicht weiß jemand Rat.

Hintergrund:
In meiner GUI möchte ich regelmäßig Daten zwischen meinem in MATLAB erstellten Controll Panal und einem Microcontroller synchronisieren. Die Funtkionen dazu habe ich bereits fertig und getestet- nur deren regelmäßiger Aufruf macht mir Probleme:

Problem:
Anscheinend kann, evtl. syntaxbedingt, MATLAB meinen Timer Callback nicht finden:
Code:
Error while evaluating TimerFcn for timer 'timer-14'

Undefined function or variable 'set_new_status'.


Hier mal der aufs wesentliche reduzierte Code:
Figure createfcn:
Code:

function figure1_CreateFcn(hObject, eventdata, handles)
    ...
   
    global refr_timer
    global plot_values
    plot_values=zeros(2,8);
    refr_timer=timer('ExecutionMode', 'FixedRate', 'Period', 1.5,
    'TimerFcn',{@set_new_status});

function set_new_status()  
    handles=guidata(handles.figure1);
   
     ...
 


Gesartet wird der Timer erst später, wenn die Serielle Verbindung erfolgreich hergestellt wurde. Kann mir jemand einen Tip geben woran es hängt. Die Timer sind für mich noch recht neu und irgendwie komm ich nicht drauf.

DANKE und viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Marfiosie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 18.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2017, 22:35     Titel:
  Antworten mit Zitat      
Okay, ich bin nun selber auf den Fehler gestoßen. Als Callback muss die TimerFcn lauten:

Code:

function set_new_status(hObject, eventData, handles)  
...


EDIT:
Leider hat sich gleich ein neues Problem ergeben Sad : Nach dem Start des Timers wird die gewünschte Funktion einmal wie erwartet aufgerufen. Nachdem der Intervall verstrichen ist und der Aufruf zum zweiten mal stattfinden sollte erscheint folgende Fehlermeldung:
Code:
Error while evaluating TimerFcn for timer 'timer-22'

Error: Expression or statement is incomplete or incorrect.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.01.2017, 11:36     Titel:
  Antworten mit Zitat      
Hallo Marfiosie,

Wenn Du den Callback so definierst:
Code:
... 'TimerFcn',{@set_new_status}, ...

(Hier sind die geschweiften Klammern überflüssig)
muss die Funktions-Definition so aussehen:
Code:
function set_new_status(ObjectH, EventData)

Für
Code:
function set_new_status(ObjectH, EventData, handles)

ist dies erforderlich:
Code:
... 'TimerFcn',{@set_new_status, handles}, ...

Die "handles" kannst Du aber besser innerhalb der Funktion per
Code:
handles = guidata(ObjectH)

bekommen.

Es ist verblüffend, dass der Code bei dieser Meldung einmal läuft. Hast Du ihn vielleicht während des Programm-Ablaufs modifiziert?
Öffne den Code des Timer-Callbacks und suche im Editor nach Warnmeldungen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Marfiosie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 18.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2017, 13:27     Titel:
  Antworten mit Zitat      
Zitat:
Die "handles" kannst Du aber besser innerhalb der Funktion per
Code:
handles = guidata(ObjectH)
Funktion ohne Link?

bekommen.


Ah Danke, das kannte ich noch nicht. Supi. Ein Fehhler den ich gemacht habe, war wohl den Timer in der ceatefunction der GUI zu erstellen, wo er irgendwie noch nicht so richtig an die handles rankommt. Hab ihn jetzt "ausgesourct" Very Happy

Mein Controll Panal funktioniert jetzt und ich bekomme Live- Daten rein und kann auch Prozesswerte an den Microcontroller übergeben. Leider speielt mir die serielle Kommunikation einen blöden Streich:

Solange ich mich mit dem Arduino verbinde und nur in der einen Richtung Daten empfange läuft alles bestens. Wenn ich allerdings in der anderen Richtung einmal ein serielles Signal ('k40') sende, wird dieses zwar noch empfangen und richtig interpretiert, aber die ganze folgende Kommunikation driftet extrem auseinander(als würde man youtube mit 56k Modem streamen :/ ).

Jede Sekunde sendet Matlab ein Befehl zum Arduino, was darauf Daten in Form einer 5x5 Matrix sendet, welche Matlab wiederum mit einem anderen Befehl bestätigt. Hab das Delay des Arduino schon varriert und die Frequenz des Timers in Matlab auch, aber das Problem besteht noch immer. Ist vielleicht jemand schon mal was ähnliches passiert?
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.