mikrocontroller.net

Forum: PC-Programmierung Matlab BytesAvailableFcnMode rs232 callback Variablen Zugriff


Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
keine Ahnung ob mir hier vielleicht einer helfen kann...
Ich möchte die RS232 Schnittstelle auslesen. Dazu benutze ich eine 
callback function. In dieser möchte ich jetzt Daten auslesen und über 
den Workspace in meiner Haupt *.m Datei bearbeiten.
In der callback Funktion kommen die Daten richtig an.
In der Haupt *.m Datei bekomme ich die Daten aber nicht.

Hier mal der Code Haupt *.m:

handles.x=0;

% open serial port
s = serial('/dev/ttyUSB0');
set(s,'BaudRate',9600,'Parity', 'even','Databits', 8, 'StopBits', 1);

s.Terminator = 'LF';          
s.BytesAvailableFcnMode = 'terminator';
s.BytesAvailableFcn =@serialGetData;

fopen(s);

cnt=0;
while cnt<200
    display(handles.x);    
    pause(0.01)
    cnt=cnt+1;    
end

fclose(s);
clear s; 


Und das callback m-file

function serialGetData (s,event)

      try
        w=str2double(fscanf(s));        
        handles.x=(w<1024)*w;
      end
end 

Wie bekomme ich die Daten aus der callback Funktion ??

Danke schonmal für Jede Idee

Autor: Arne P. (melchi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst deine Variable einfach auf global setzen.

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja cool, danke.
Das geht schonmal. Aber warum geht das mit handles nicht?
Ist das nicht genau für sowas?

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, seltsam,
eben gings, jetzt nicht mehr ^^

Autor: Arne P. (melchi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Ich verwende handles meist in zusammenhang mit Oberflächen. Müsstest du 
aber auch bei dir einsetzen können.

Hab gerade kein Matlab zur Hand aber wenn ich mich richtig erinnere dann 
war das so.
set(handle, 'key', Value)
und
get(handle, 'key')

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel Platte wrote:

> Ist das nicht genau für sowas?

natürlich, aber woher soll deine callback-Funktion wissen, was der Sinn 
dieser ominösen handles-structure ist? wenn du dir mal eine GUI 
anschaust, die so eine handles-Variable benutzt, wird am Ende jeder 
Funktion ein mal guidata(..) aufgerufen, eben damit handles auc 
außerhalb der aktuellen Funktion geupdatet wird...

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja macht alles Sinn...
Nebenbei, wenn man globale Variablen in Matlab nutzt, müssen die in 
allen Workspaces bekannt gemacht werden.

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel Platte wrote:

> Nebenbei, wenn man globale Variablen in Matlab nutzt, müssen die in
> allen Workspaces bekannt gemacht werden.

globale Variable sollte man in Matlab eh vermeiden, lieber appdata 
benutzen

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt noch die Möglichkeit, für die Callback-Funktion zusätzliche 
Variablen zu übergeben.

Dazu muss muss der function-handler geändert werden von

s.BytesAvailableFcn =@serialGetData;

zu

s.BytesAvailableFcn = {@serialGetData, handles};

wobei die handles natürlich verfügbar sein müssen... Es geht natürlich 
auch mit jeder anderen Variable zu überegeben


dann noch den funktionskopf für den callback ändern

von

function serialGetData (s,event)

zu

function serialGetData (s,event, handles)


Das ganze ist auch irgendwo in der matlab-hilfe beschrieben
Gruß Christian

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

genau so wie in der Hilfe von Matlab beschrieben, hatte ich es probiert.
Hatte alles mögliche versucht, aber hatte nie Zugriff auf die Variablen.
Keine Ahnung woran das liegt. Ich glaube das Problem ist der 
Rückgabewert.

Danke auf jeden Fall

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.