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

Callback-Funktion aufrufen

 

Blackfish84
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 30.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2009, 15:13     Titel: Callback-Funktion aufrufen
  Antworten mit Zitat      
Hallo ich benutze GUIDE um etwas schneller voran zu kommen. Allerdings habe ich nun folgendes Problem, ich bekomme einfach nicht die Callbackfunktion aufgerufen! Woran liegt das?

Code:
function pushbutton1_Callback(hObject, eventdata, handles)
set(pushbutton1,'Callback',{@cPb1, 22});
                           
function cPb1(hObject,eventdata,data) %die Variablen in der KLammer immer verwenden
k=data;                          
k_neu = num2str(k);
set(handles.static_text_test,'String',k_neu);




Gruß
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 04.05.2009, 16:03     Titel:
  Antworten mit Zitat      
Moin,

wird dir denn ein Fehler ausgegeben, oder was passiert?!

Wenn du mit GUIDE arbeitest, kannst du die Callback auch im PropertyInspector setzen.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Blackfish84
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 30.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2009, 18:28     Titel:
  Antworten mit Zitat      
Es passiert einfach nichts! Mache ich irgendetwas falsch wenn ich schreibe:

Code:

function pb_connectrs232_Callback(hObject, eventdata, handles)
@openport;

function ser_obj = openport()

if length (instrfind) > 0 %noch geöffnete Ports schließen
   fclose (instrfind);
end

ser_obj = serial('COM5',...
           'BaudRate', 115200,...
           'Parity', 'none',...
           'DataBits', 8,...
           'StopBits', 1,...
           'InputBufferSize', 1024,...
           'OutputBufferSize', 1024,...
           'Timeout', 2);
       
ser_obj.BytesAvailableFcnCount = 40;          
ser_obj.BytesAvailableFcnMode = 'byte';
%ser_obj.BytesAvailableFcn = @PortEvent;


fopen(ser_obj);
disp ('COM-Port erfolgeich geöffnet');
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2009, 18:40     Titel:
  Antworten mit Zitat      
Servus Blackfish

Probier mal

Code:
function pb_connectrs232_Callback(hObject, eventdata, handles)
obj = openport;
 

Die Funktion "openport" erzeugt Output, denn Du nicht abrufst. Und wenn die Funktion "openport" im selben .m file wie pb_connectrs232_Callback steht, benötigst Du auch kein @.


Wenn das nicht funktioniert, würde ich noch die runden Klammern bei
Code:
function ser_obj = openport()

entfernen.

Ich hoffe das klappt

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Blackfish84
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 30.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2009, 19:00     Titel: DANKE!
  Antworten mit Zitat      
Danke es hat geklappt!!!
Jetzt hätte ich aber noch eine Frage Smile
Und zwar habe ich jetzt den Code soweit abgeändert, dass man sich über ein Pop-Up-Menü den COM-Port auswählen kann doch irgendwie klappt das mit der Übergabe der Werte nicht so richtig:
Code:

function pb_connectrs232_Callback(hObject, eventdata, handles)
openport; % Aufrufen der Funktion openport()

function ser_obj = openport()

selected_string = get(handles.popm_comportauswahl,'String'); % -> ich glaube hier liegt was im argen !!!

if length (instrfind) > 0 %noch geöffnete Ports schließen
   fclose (instrfind);
end

ser_obj = serial('COM5',...
           'BaudRate', 115200,...
           'Parity', 'none',...
           'DataBits', 8,...
           'StopBits', 1,...
           'Timeout', 2);
       
ser_obj.BytesAvailableFcnCount = 40;          
ser_obj.BytesAvailableFcnMode = 'byte';
%ser_obj.BytesAvailableFcn = @PortEvent;


fopen(ser_obj);
disp ('COM-Port erfolgeich geöffnet');


function popm_comportauswahl_Callback(hObject, eventdata, handles)
auswahl = get(hObject,'String'); %Auswahl des entsprechenden COM-Ports -> 'auswahl'
guidata(hObject, handles);
 


Zitat:
?? Error while evaluating uicontrol Callback

??? Undefined variable "handles" or class
"handles.popm_comportauswahl".

Error in ==> rs232>openport at 86
selected_string =
get(handles.popm_comportauswahl,'String');


Ich glaube ich habe das noch nicht so richtig verstanden mit den handles und callbacks Wink

Beste Grüße

Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2009, 19:07     Titel:
  Antworten mit Zitat      
Hallo Martin Wink

Das mit dem Popup musst Du so lösen

Code:

function popm_comportauswahl_Callback(hObject, eventdata, handles)
Inhalt = get(hObject,'String');
Wert = get(hObject,'Value');
Auswahl = Inhalt{Wert};


oder kürzer
Code:

function popm_comportauswahl_Callback(hObject, eventdata, handles)
Inhalt = get(hObject,'String');
Auswahl = Inhalt{get(hObject,'Value')};


lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2009, 19:11     Titel:
  Antworten mit Zitat      
Selbiges gilt natürlich für Deine, im argen liegenden, Zeile.

also

Code:
all_strings = get(handles.popm_comportauswahl,'String');
selected_string = all_strings{get(handles.popm_comportauswahl,'Value')}


Das hatte ich oben vergessen Confused
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2009, 19:13     Titel:
  Antworten mit Zitat      
Stop- total falsch

Ich denke in Zukunft erst nach bevor ich was poste!!!

Warte mal ein bisschen
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2009, 19:27     Titel:
  Antworten mit Zitat      
Also:

Code:
function pb_connectrs232_Callback( hObject, eventdata, handles)
openport( handles);

function ser_obj = openport( handles)

all_strings     = get( handles.popm_comportauswahl, 'String');
selected_string = all_strings{ get( handles.popm_comportauswahl, 'Value')}

if length ( instrfind) > 0 %noch geöffnete Ports schließen
   fclose ( instrfind);
end

ser_obj = serial(selected_string,...
                 'BaudRate', 115200,...
                 'Parity', 'none',...
                 'DataBits', 8,...
                 'StopBits', 1,...
                 'Timeout', 2);
       
ser_obj.BytesAvailableFcnCount = 40;          
ser_obj.BytesAvailableFcnMode = 'byte';
%ser_obj.BytesAvailableFcn = @PortEvent;


fopen(ser_obj);
disp ('COM-Port erfolgreich geöffnet');

 


Da Du die Verbindung ohnehin mit dem Pushbutton erstellst, macht es keinen Sinn einen Callback für das popup_menue zu kreieren.

Aber jetzt- oder?

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Blackfish84
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 30.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2009, 20:48     Titel: Wow!
  Antworten mit Zitat      
Wow Danke!
Klappt echt super! Vielen Dank!
Ich hoffe ich kann Dir (oder der Community) auch mal so gut helfen!
Vielen Dank! Ich meld mich bestimmt noch mit der ein oder anderen Frage hier Wink

Gruß
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Blackfish84
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 30.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2009, 09:16     Titel: Neue Frage!
  Antworten mit Zitat      
Hallo, ich bin´s wieder Smile
Jetzt würde ich gerne nachdem ich mich mit der seriellen Schnittstelle verbunden habe, über seperate Buttons Werte über die RS232 schicken bzw. empfangen. Bisher passiert dies alles in einem (Verbindung zu RS232, Empfangen, Senden). Weiter unten im Quelltext habe ich es auch schon versucht bekomme allerdings die Fehlermeldung das der Funktion das Objekt 'ser_obj' keine bekannte Variable sei. Wie kann ich ein Objekt einer Funktion einer anderen zugänglich machen? Über 'global'? Muss ich ein 'handle' übergeben?

Code:

function pb_connectrs232_Callback( hObject, eventdata, handles)
openport(handles); %Auf Knopfdruck die Fkt. openport öffnen (Übergabewert: handles)

function ser_obj = openport(handles)
% Pop-Menü Auswahl
all_strings = get( handles.popm_comportauswahl, 'String');
Auswahl     = all_strings{ get( handles.popm_comportauswahl, 'Value')}


if length (instrfind) > 0 %noch geöffnete Ports schließen
    fclose (instrfind);
end

% Einstellen und Öffnen der seriellen Schnittstelle
global ser_obj;
ser_obj = serial(Auswahl,...
           'BaudRate', 115200,...
           'Parity', 'none',...
           'DataBits', 8,...
           'StopBits', 1,...
           'Timeout', 2);
       
ser_obj.BytesAvailableFcnCount = 1;          
ser_obj.BytesAvailableFcnMode = 'byte';
%ser_obj.BytesAvailableFcn = switchon;

%öffnen der seriellen schnittstelle
fopen(ser_obj);
disp ('COM-Port erfolgeich geöffnet');

%Ausgelesene Werte an den Workspace übergeben
out = fread(ser_obj, 40);
assignin('base','out',out);

%LED am 8051 anschalten
addr = [1];
fwrite(ser_obj,addr,'int');




function pb_ledon_Callback(hObject, eventdata, handles)
switchon();

function switchon()
addr = [1];
fwrite(ser_obj,addr,'int');
 


Vielen Dank im Voraus! Beste Grüße!
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 05.05.2009, 09:23     Titel:
  Antworten mit Zitat      
Moin,

am besten wäre es das Objekt als handle oder appdata für die komplette GUI zur Verfügung zu stellen - würde ich sagen.

Dann kannst du aus allen Funktionen darauf zugreifen.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2009, 09:29     Titel:
  Antworten mit Zitat      
Servus Martin

In
Code:
function pb_ledon_Callback(hObject, eventdata, handles)
switchon();

function switchon()
addr = [1];
fwrite(ser_obj,addr,'int');


ist nirgends die Rede von "ser_obj". Du versuchst aber in fwrite darauf zuzugreifen.


Eine Möglichkeit wäre das Serielle Objekt in
Code:
function pb_connectrs232_Callback( hObject, eventdata, handles)
openport(handles); %Auf Knopfdruck die Fkt. openport öffnen (Übergabewert: handles)
zu speichern

-> also
Code:
function pb_connectrs232_Callback( hObject, eventdata, handles)
handles.ser_obj = openport(handles); %Auf Knopfdruck die Fkt. openport öffnen (Übergabewert: handles)
guidata( hObject, handles)


Anschließend kannst Du in
Code:
function pb_ledon_Callback(hObject, eventdata, handles)
switchon(handles.ser_obj);

function switchon(ser_obj)
addr = [1];
fwrite(ser_obj,addr,'int');

darauf zugreifen

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Blackfish84
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 30.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2009, 09:39     Titel: Vielen Dank!
  Antworten mit Zitat      
Vielen Dank! Es klappt ganz wunderbar!
Sagt mal, seit ihr auch Studenten? Ich wundere mich, dass jemand um diese Zeit überhaupt online ist!

Grüße
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2009, 09:46     Titel:
  Antworten mit Zitat      
Ich für meinen Teil; Ja
Aber man könnte auch in der Arbeit online sein Wink

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.