Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
Entwicklungsingenieur (m/w) für modellbasierte Softwareentwicklung
Modellbasierte Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Softwareentwickler (m/w) für automatische Codegenerierung
Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink im Bereich Fahrwerkregelsysteme
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Softwareentwickler Automotive Getriebesteuerungen (m/w)
Umsetzung der Softwarefunktionalität modellbasiert nach Spezifikation
MBtech Group GmbH & Co. KGaA - Sindelfingen

Ingenieur (w/m) modellbasierte Entwicklung/Embedded Programmierung
Organisation und Durchführung von Projekten zur Integration von TargetLink
dSPACE GmbH - Böblingen (bei Stuttgart)

Embedded Software- Entwickler (m/w) - Hardwarenahe Software für innovative Steuerungssysteme
Design, Implementierung und Test von Embedded Software
DR. JOHANNES HEIDENHAIN GmbH - Traunreut (Raum Rosenheim)

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

BytesAvailable leert Buffer nicht komplett

 

alex257
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 22.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.02.2016, 11:53     Titel: BytesAvailable leert Buffer nicht komplett
  Antworten mit Zitat      
Hallo Zusammen,

ich habe eine GUI programmiert die Daten von einem Arduino liest, der per USB angeschlossen ist. Der Arduino sendet immer 8 Bytes - Datenpakete.

Sobald mindestens 8 Bytes im Buffer vorhanden sind, werden 8 Bytes aus dem Buffer gelesen.
Das funktioniert auch meistens. Aber manchmal, wenn viele Daten in kurzer Zeit vom Arduino gesendet werden, bleiben Daten im Buffer übrig.

Konfiguriert habe ich die BytesAvailableFcn so:
Code:
     
handles.serialIn = serial(COM3,'BaudRate',115200, 'Terminator','LF');
set(handles.serialIn,'BytesAvailableFcnMode','byte');
set(handles.serialIn,'BytesAvailableFcnCount',8);
fopen(handles.serialIn);
set(handles.serialIn,'BytesAvailableFcn', {@mycallback,hObject});



in der Funktion mycallback werden die Daten gelesen. Die 8 Bytes beginnen mit "35" und hören mit "10" auf.

Code:

function mycallback(obj,event,hObject)
inByte = zeros(1 ,8);
inByte(1) = fread(obj,1,'char');
if inByte(1) == 35  %Kontrolle ob Startzeichen eingelesen wurde
inByte(2:8) = fread(obj,7,'char');
if inByte(8) == 10  %Kontrolle ob eingelesene Werte mit Endzeichen aufhören

%% hier werden die Daten verarbeitet .... %%

end
end
 



Wenn viele Daten vom Arduino gesendet werden, sind manchmal noch Daten im Buffer vorhanden und die Funktion mycallback wird trotzdem nicht aufgerufen. Wenn ich manuell mit fread den Buffer auslese, werden noch Daten empfangen (mehr als 8 Byte)

Ich verstehe nicht, weshalb die Funktion mycallback nicht aufgerufen wird.

Wäre super wenn mir hier jemand nen Tipp geben kann, woran es liegen könnte.

Viele Grüße
Alex
Private Nachricht senden Benutzer-Profile anzeigen


alex257
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 22.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2016, 10:04     Titel:
  Antworten mit Zitat      
irgendjemand eine Idee, warum nicht alle Bytes mit der BytesAvailableFcn ausgelesen werden?

Bin über jede Hilfe dankbar.

Gruß
Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 10.481
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.02.2016, 11:17     Titel:
  Antworten mit Zitat      
Hallo alex257,

Möglicherweise werden während der Abarbeitung der BytesAvailableFcn neue Daten gesendet. Die sind dann natürlich noch im Buffer.
Ich habe aber keine Erfahrung damit, wie man das abfängt. Vielleicht hilft es die BytesAvailableFcnMode auf 'byte' zu setzen?

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 22.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2016, 11:41     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke für deine Antwort.

Der BytesAvailableFcnMode ist bereits auf 'byte' gesetzt. Es kann sehr gut sein, dass während der Abarbeitung der BytesAvailableFcn neue Daten gesendet werden. Sollte die BytesAvailableFcn dann nicht erneut ausgelöst werden? Oder wird die BytesAvailableFcn nur ausgelöst wenn neue Daten in den Buffer geladen werden?

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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.