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

handles in Funktion speichern geht nicht. BytesAvailableFcn

 

Alex__Matlab
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 14.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2015, 16:52     Titel: handles in Funktion speichern geht nicht. BytesAvailableFcn
  Antworten mit Zitat      
Hallo,

ich habe ein GUI "beispielGUI" mit Guide erstellt. Die GUI liest Daten von einem Arduino und visualisiert diese. Mit der BytesAvailableFcn wird durch den Dateninput eine Funktion "schleife" ausgeführt. In dieser Funktion möchte ich Daten in den struct handles speichern. In diesem Fall zum Testen einen Zähler.
Dies funktionier nicht. Bei jedem Aufruf der Funktion wird der alter Wert handles.zaehler = 0 gelesen.

Hab das Forum und das Internet durchstöbert, aber nur Lösungen dazu finden können wie man handles an die Funktionen übergibt. Das klappt bei mir.

Die relevanten Teile meines Codes habe ich hier gepostet.

In der OpeningFcn wird die Variable inialisiert und die BytesAvailableFcn definiert
Code:

function beispielGUI_OpeningFcn(hObject, eventdata, handles, varargin)
handles.zaehler = 0;

handles.s = serial ('COM6');
handles.s.BaudRate = 9600;
handles.s.InputBufferSize = 512;
handles.s.BytesAvailableFcnMode = 'Terminator';
handles.s.Terminator = 'LF';
handles.s.BytesAvailableFcn = {@schleife, hObject, handles};
;



Die Funktion Schleife sieht folgendermaßen aus
Code:
function schleife(serial_port_object, eventdata, hObject, handles)
handles.zaehler = handles.zaehler + 1;
guidata(hObject, handles);  
 


Errormeldungen bekomme ich nicht.

Würde mich freuen, wenn mir jemand weiterhelfen könnte.

Gruß
Alex
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.07.2015, 18:18     Titel:
  Antworten mit Zitat      
Hallo,

wo genau wird handles.zaehler denn abgefragt? Meine Vermutung ist, dass du die handles-Variable zwar in der GUI aktualisierst, dir aber nicht die aktualisierte Version zurückholst.

Ein reproduzierbares Beispiel wäre hilfreich.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Alex__Matlab
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 14.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2015, 19:48     Titel:
  Antworten mit Zitat      
Hallo Harald,

ein reproduzierbares Beispiel ist schwierig, da du dazu einen Arduino braucht der Daten schickt.

Jedes Mal wenn Daten gelesen werden, wird meine Funktion schleife durchlaufen. Und hier wird handles.zaehler erst aufgerufen und dann mit einem neuen Wert besetzt.

Code:
handles.zaehler = handles.zaehler + 1;

Das Problem ist das jedes Mal handles.zaehle = 0 eingelesen wird und nicht der neue Wert. Beim 2. Aufruf der Schleife also z.B. handles.zaehle = 1

Grüße
Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.07.2015, 19:54     Titel:
  Antworten mit Zitat      
Hallo,

meine Vermutung habe ich dir ja schon geschrieben.

Was ich versuchen würde:
Code:
handles.s.BytesAvailableFcn = {@schleife, hObject}


und
Code:
function schleife(serial_port_object, eventdata, hObject)
handles = guidata(hObject);
handles.zaehler = handles.zaehler + 1;
guidata(hObject, handles);


Natürlich mangels Reproduzierbarkeit nur eine Trockenübung.

Wenn du das aber z.B. mit Timern versuchst, sollte es genau auf das gleiche herauskommen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Alex__Matlab
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 14.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2015, 20:28     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine schnelle Antwort. So funktioniert es.

Ich verstehe nur nicht genau was der Unterschied zwischen deinem Code und meinem ist. Wenn ich die handles in der BytesAvailableFcn übergebe und in der Funktion schleife übergebe müssten sie doch auch aktualisiert sein?

Ich habe erst vor 2 Wochen mit Matlab angefangen, daher sind mir viele Sachen noch nicht klar.

Grüße
Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.07.2015, 21:05     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Wenn ich die handles in der BytesAvailableFcn übergebe und in der Funktion schleife übergebe müssten sie doch auch aktualisiert sein?

Nein, da handles letztlich auch nur eine lokale Variable ist.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Alex__Matlab
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 14.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2015, 22:12     Titel:
  Antworten mit Zitat      
Hallo Harald,

das muss ich mir nochmal anschauen um das im Detail zu verstehen.

Danke, dass du mir so schnell geholfen hast.

Gruß
Alex
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.