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

COM Daten im Textfeld von GUI ausgeben

 

Trifu
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 05.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2011, 11:55     Titel: COM Daten im Textfeld von GUI ausgeben
  Antworten mit Zitat      
Hallo,

ich habe ein kleines Problem bei der Programmierung eines GUI. Wäre super wenn mir jemand helfen könnte...

Also zum Problem:
Ich öffne im GUI eine serielle Schnittstelle und lasse diese eine Funktion aufrufen, wenn Daten da sind.
--> s1.BytesAvailableFcn =@serialGetData;

Nun werden diese Daten brav von der Funktion eingelesen und im Command Window dargestellt.

Code:

function serialGetData(s, eventdata, handles)

 data_dummy = fgetl(s);                                     % Daten werden gelesen
 
 fprintf(' %s\n ', data_dummy);
 


Ich würde aber auch gerne diese Daten in einem Text-Feld von der GUI darstellen. Also z.B.:

Code:

function serialGetData(s, eventdata, handles)
 
 data_dummy = fgetl(s);                                     % Daten werden
gelesen
 set(handles.text1,'string',data_dummy);

 fprintf(' %s\n ', data_dummy);
 


Wobei text1 das text-Feld ist. Wenn ich aber das mache, dann meldet sich MATLAB und meint, dass das handle unbekannt ist.

Ich kenne mich mit GUIs nicht gut aus (arbeite erst seit ca. 1Woche damit)...
Würde aber gerne wissen, wie ich in solchen Unterfunktionen wie serialGetData, die einzelnen grafischen Elemente der GUI ansprechen kann. Denn die Textdarstellung ist nur mal ein Test. Zum Schluss sollen die Daten gezeichnet werden und das jedes Mal wenn ein neuer Wert dazu kommt ("quasi-echtzeit").

Vielen Dank im Voraus!!!!

Trifu
Private Nachricht senden Benutzer-Profile anzeigen


Martin1986
Forum-Century

Forum-Century


Beiträge: 121
Anmeldedatum: 20.06.11
Wohnort: ---
Version: Win 2016b Linux 2016b
     Beitrag Verfasst am: 02.07.2011, 17:10     Titel:
  Antworten mit Zitat      
hallo ich weiß zwar nicht wo du das ganze aufrufst
aber da die daten schon da sind Wink würde ich es zuerst mal drawnow() testen, wenn es dass immer noch nicht tut entweder guidata oder die handles auch als returnwert der function definieren Wink das sollte dann auf jedenfall gehen ich hoffe das hilft dir
Private Nachricht senden Benutzer-Profile anzeigen
 
Trifu
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 05.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2011, 14:49     Titel:
  Antworten mit Zitat      
Hallo,

vielen Dank für die Antwort. Doch leider hilft es mir nicht viel. Ich kann mit drawnow() nicht Daten sofort schreiben, wenn ich in meiner Unterfunktion (welche von der Seriellen aufgerufen wird) nicht auf das Text-Feld zugreifen kann.

Mein eigentliches Problem ist, dass ich nicht weiß, wie ich in dieser Unterfunktion die einzelnen Funktionen der GUI bzw. Ausgaben der GUI --> In diesem Fall das Text-Feld ("Edit Text") ansprechen kann...
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin1986
Forum-Century

Forum-Century


Beiträge: 121
Anmeldedatum: 20.06.11
Wohnort: ---
Version: Win 2016b Linux 2016b
     Beitrag Verfasst am: 03.07.2011, 16:22     Titel:
  Antworten mit Zitat      
also ich habe mal ein kleines Beispiel gemacht
GUI 1 Knopf (Tester) und eine Edit Ausgabe
Code:
function tester_Callback(hObject, eventdata, handles)
% hObject    handle to tester (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
handles=testfun(handles);


function Ausgabe_Callback(hObject, eventdata, handles)
% hObject    handle to Ausgabe (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of Ausgabe as text
%        str2double(get(hObject,'String')) returns contents of Ausgabe as a double


% --- Executes during object creation, after setting all properties.
function Ausgabe_CreateFcn(hObject, eventdata, handles)
% hObject    handle to Ausgabe (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


function [handles]=testfun(handles)
set(handles.Ausgabe, 'String', 'Test');

hier mal interessante teil.... so funktioniert das Wink siehe Bilder vll hilft dir das mehr Wink

tester.m
 Beschreibung:
gesamter GUI-Code

Download
 Dateiname:  tester.m
 Dateigröße:  3.97 KB
 Heruntergeladen:  368 mal
tester_nachher.png
 Beschreibung:

Download
 Dateiname:  tester_nachher.png
 Dateigröße:  7.33 KB
 Heruntergeladen:  552 mal
tester_vorher.png
 Beschreibung:

Download
 Dateiname:  tester_vorher.png
 Dateigröße:  7.68 KB
 Heruntergeladen:  538 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Trifu
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 05.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2011, 16:58     Titel:
  Antworten mit Zitat      
Hallo,

also das mit den handles als Rückgabewert geht schon mal in die Richtung. Aber ich weiß, nicht wie ich das in meinem bestimmten Fall anwenden soll.

Hier mal mein Code + fig. Die Stelle an der ich eine Ausgabe im Text-Feld machen mag ist markiert.
Vielleicht versteht man dann mein Problem besser...

Vielen Dank für die Hilfe bis jetzt...

LG Trifu

com_to_matlab_2011_07_03.m
 Beschreibung:

Download
 Dateiname:  com_to_matlab_2011_07_03.m
 Dateigröße:  5.9 KB
 Heruntergeladen:  423 mal
com_to_matlab_2011_07_03.fig
 Beschreibung:

Download
 Dateiname:  com_to_matlab_2011_07_03.fig
 Dateigröße:  2.25 KB
 Heruntergeladen:  349 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin1986
Forum-Century

Forum-Century


Beiträge: 121
Anmeldedatum: 20.06.11
Wohnort: ---
Version: Win 2016b Linux 2016b
     Beitrag Verfasst am: 03.07.2011, 17:26     Titel:
  Antworten mit Zitat      
also macht die sache etwas hässlich laut der Matlabhilfe ich zitiere
Code:

time = datestr(now,0);
s.BytesAvailableFcnMode = 'terminator';
s.BytesAvailableFcn = {@mycallback,time};
Alternatively, you can specify the callback function as a string in the cell array.

s.BytesAvailableFcn = {'mycallback',time};
The corresponding function header is:

function mycallback(obj,event,time)
 


müsste das ganze also in etwas so aussehen
Code:

function serialGetData(s, eventdata,hObject, handles)
 set(handles.ausgabe,'string', '- serialGetData - ');    %%<<<--------------- FUNKTIONIERT NICHT!!!
 
 data_dummy = fgetl(s);                                     % Daten werden gelesen
 
 fprintf(' %s\n ', data_dummy);
guidata(hObject, handles);
 

und der call dann
Code:

s1.BytesAvailableFcn ={@serialGetData,hObject, handles};
 


ich kann das ohne comport leider nicht testen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Trifu
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 05.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2011, 17:44     Titel:
  Antworten mit Zitat      
Ja super!!!!

Ich habs ausprobiert und es funktioniert!!!
Vielen Dank!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin1986
Forum-Century

Forum-Century


Beiträge: 121
Anmeldedatum: 20.06.11
Wohnort: ---
Version: Win 2016b Linux 2016b
     Beitrag Verfasst am: 03.07.2011, 17:46     Titel:
  Antworten mit Zitat      
gerne doch freut mich das ich helfen konnte XD
Private Nachricht senden Benutzer-Profile anzeigen
 
space
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 12.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2011, 08:59     Titel:
  Antworten mit Zitat      
Hi Trifu,

ich habe das gleiche Problem und habe hier auch schön mitgelesen. Aber sorry, ich verstehs nicht und bei mir klappt es auch nicht...

könntest du deinen Code hier nochmal reinstellen?

Wäre super!

Danke im Vorraus.
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin1986
Forum-Century

Forum-Century


Beiträge: 121
Anmeldedatum: 20.06.11
Wohnort: ---
Version: Win 2016b Linux 2016b
     Beitrag Verfasst am: 08.07.2011, 09:42     Titel:
  Antworten mit Zitat      
Hallo, was genau geht den nicht?
Dann könnte man dir sicher schnell helfen Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
space
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 12.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2011, 22:53     Titel:
  Antworten mit Zitat      
Das mit dem Com-> Textfeld klappt mitlerweile, denke ich:


Code:

function serialGetData(s, eventdata,hObject, handles)
  set(handles.ausgabe,'string', '- serialGetData - ');    
   
 antwort = fgets(s);                                    
   
 fprintf(' %s\n ', antwort);
guidata(hObject, handles);
 


Mit dem Call:
Code:

s.BytesAvailableFcn ={@serialGetData,hObject, handles};
 


Leider überschreibt mir die Funktion immer mein Textfeld komplett, kann man das irgendwie so machen, dass die neue Antwort an den bestehenden Text angefügt wird? Somit würde sich eine Art Doku. der Rückgaben ergeben!

Hat da jemand einen Tipp, wie ich meinen Code umschreiben muss, dass das klappt!

Bin für alle Vorschläge sehr dankbar!

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin1986
Forum-Century

Forum-Century


Beiträge: 121
Anmeldedatum: 20.06.11
Wohnort: ---
Version: Win 2016b Linux 2016b
     Beitrag Verfasst am: 14.07.2011, 07:46     Titel:
  Antworten mit Zitat      
Dann musst du vor dem
Code:
set(handles.text1,'string',data_dummy);
 

erstmal noch das holen was in dem edit steht also
Code:

helper=get(handles.text1,'string');
 

dann musst die helper und dein Daten noch zusammenführen zum Beispiel
Code:

set(handles.text1,'string',[helper, data_dummy]);
 

wie du es zusammenfügst, hängt davon ab wie du es dargestellt haben magst, da würde ich mal rumspielen Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
space
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 12.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2011, 07:55     Titel:
  Antworten mit Zitat      
Hi Martin,

danke für die Antwort, muss ich testen.

Code:

function serialGetData(s, eventdata,hObject, handles)
  istText = get(handles.ausgabe,'string');    
   
 aktAntwort = fgets(s);                                    
 
  set(handles.ausgabe,'String', [istText,aktAntwort]);

 guidata(hObject, handles);

 


den fprintf-Befehl brauche ich doch eigentlich nicht, oder??
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin1986
Forum-Century

Forum-Century


Beiträge: 121
Anmeldedatum: 20.06.11
Wohnort: ---
Version: Win 2016b Linux 2016b
     Beitrag Verfasst am: 14.07.2011, 08:05     Titel:
  Antworten mit Zitat      
nein den hatte Trifu nur test zwecken genutzt....
sollte also funktionieren
Private Nachricht senden Benutzer-Profile anzeigen
 
space
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 12.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2011, 09:24     Titel:
  Antworten mit Zitat      
Alles klar,

dann teste ich das nachher mal und melde mich wieder, falls es so (wie oben) nicht klappt!

Gruß
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 - 2025 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.