Matlab BytesAvailableFcnMode rs232 callback Variablen Zugriff

#1184681
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:
1
handles.x=0;
2

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

7
s.Terminator = 'LF';          
8
s.BytesAvailableFcnMode = 'terminator';
9
s.BytesAvailableFcn =@serialGetData;
10

11
fopen(s);
12

13
cnt=0;
14
while cnt<200
15
    display(handles.x);    
16
    pause(0.01)
17
    cnt=cnt+1;    
18
end
19

20
fclose(s);
21
clear s;


Und das callback m-file

1
function serialGetData (s,event)
2

3
      try
4
        w=str2double(fscanf(s));        
5
        handles.x=(w<1024)*w;
6
      end
7
end

Wie bekomme ich die Daten aus der callback Funktion ??

Danke schonmal für Jede Idee
#1185152
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...
Gast #1205872
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren