Forum: PC-Programmierung Matlab BytesAvailableFcnMode rs232 callback Variablen Zugriff


von Daniel R. (zerrome)


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

von Arne P. (melchi)


Lesenswert?

Du kannst deine Variable einfach auf global setzen.

von Daniel R. (zerrome)


Lesenswert?

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

von Daniel R. (zerrome)


Lesenswert?

Hm, seltsam,
eben gings, jetzt nicht mehr ^^

von Arne P. (melchi)


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')

von Justus S. (jussa)


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...

von Daniel R. (zerrome)


Lesenswert?

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

von Justus S. (jussa)


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

von Christian (Gast)


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

von Daniel R. (zerrome)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.