habe zwei GUIs (leider noch mit GUIDE erstellt), die eine Gui ruft die andre auf und übergibt ihr einen struct. das funktioniert soweit, hab ich im Debug-Modus kontrolliert.
der struct wird in der zweiten GUI verändert.
Nur zurückgeben an die erste GUI krieg ich nicht hin. hab versucht in einem pushbuttonCallback den struct der ausgabevariablen zuzuweisen:
hab das auch schon mit runden Klammern probiert...
habe den ablauf wieder mit Debug verfolgt: erstens wird über die output_fcn nur ein gewisses handle.output ausgegeben, welches ein Handle zu sein scheint:
ahhhh, diese GUIs kosten mich noch den letzten Nerv!
also hab mir den link angeschaut, vielen Dank! bin auch halb schlau draus geworden, aber nur halb. wollte die Beispieldateien im Vergleich zu meinen eigenen Dateien debuggen - da liefert mir matlab jedesmal einen Fehler! obwohl dieses Color-Plot-Programm ausserhalb des debug-modus einwandfrei läuft... ??? hab noch Version 2006a... kanns daran liegen?
grundsätzlich zum Ablauf einer GUI: ist es immer so, daß zuerst openinFcn und anschließend gleich outputFcn ausgeführt werden? außer man fügt ein uiwait oder waitfor ein?
irgendwie hat meine GUI nachdem sie mittels eines Callbacks bereits geschlossen wurde (close-Befehl), nochmal versucht die OpeningFcn zu durchlaufen und jammert dann verständlicherweise, daß irgendwas mit den inputs nicht stimmt...
vllt sollte ich auch die zweite GUI nochmal neu schreiben, da wurde schon so viel verändert...
mag jemand sein Wissen mit mir teilen? wäre nett!
LG
leonidas
Zuckerfreak
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 18.01.2009, 20:50
Titel:
Servus,
ich kämpfe gerade damit Werte von einem GUI an ein anderes zu übergeben!
Eigentlich mach ich folgendes:
Mein Start-GUI (erstes GUI) liest, nach drücken des Startbuttons und auswählen eines Files, ein .txt File mit ~100 000 Werten in 2 Spalten (Zeit | Amplitude) aus und schreib die Werte in die Matrix "data". Über ein Button öffnet sich ein neues GUI, Verarbeitung-GUI (zweites GUI), in dem ich gerne wieder die Matrix "data" verwenden möchte.
Im Start-GUI kann ich die Matrix "data" z.B. als plot darstellen (also funktioniert das einlesen) aber ich bekomm es nicht gebacken im Verarbeitung-GUI "data" wieder zu verwenden... .
Ich hab mir schon einiges zu handles, guidata usw. auf englisch in der Hilfe durchgelese aber es klappt einfach nicht . Gibt es vielleicht ne deutsche Hilfeseite zu dem Thema? Würde mich wirklich über nen Link dazu freuen. Es mir im Forum zu erklären ist wohl zu kompliziert. Wenn jem. ein gaaanz einfaches Beispiel hat wie man einen Wert von einem GUI in einem anderen übergibt würde das vielleicht auch helfen.
Hi!
also deutschsprachig ist schwierig was zu finden, es gibt schon paar Bücher, aber bei solchen Details hören die dann meist schon auf...
hab mich auch durch die (engl) Matlab-Hilfe gequält. was ganz gut klappt, ist die Beispiel .m-files nachzuvollziehen.
also unter dem Link http://www.mathworks.com/support/so.....AR8.html?solution=1-1BAR8 ist ganz unten eine sehr einfache Methode beschrieben: Du speicherst Deine Matrix (in dem Beispiel wär das b) in einer sogenannten 'base' ab:
wobei GUI2 der Name der zweiten GUI ist (ohne .m und ohne Klammern, da Du nicht direkt was übergibst)
h ist das Handle zur GUI2, mit waitfor wartet die HauptGUI auf h, auf die zweite GUI also.
habe selber auch das mit varargin/varargout, also direkte Datenübergabe, versucht und dann sogar geschafft; kann Dir morgen bei Bedarf dieBeispieldatei senden.
: es lohnt sich schon mit handles zu arbeiten, man sollte die aber am besten mit dem eben erwähnten Befehl in jedem Callback, in dem handles verändert werden, speichern.
so hoffe das hilft weiter!!!
mfg
Zuckerfreak
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 24.01.2009, 16:36
Titel:
Hab gerade unter der Woche kaum Zeit . Deswegen muss ich am Wochenende ran
Jetzt habe ich mit handles angefangen und das hinbekommen:
handles =
figure1: 178.0112
bsp_fft: 28.0118
bsp_signal: 23.0118
pushbutton5: 22.0118
pushbutton4: 21.0118
text2: 20.0118
checkbox_mean_Signal: 19.0118
checkbox_Rohsignal: 18.0118
pushbutton_Start: 17.0118
pushbutton_Signal_auswaehlen: 16.0118
pushbutton1: 15.0123
Infobox: 179.0112
axesData: [131072x2 double]
output: 178.0112
Das sind mal alle handles in GUI1.
Jetzt würde ich gerne axes.Data in meinem zweite GUI (GUI2) verwenden. GUI2 wir über einen Button in GUI1 geöffnet und die Werte von axesData: [131072x2 double] sollen in ein Diagramm von GUI2 geschrieben werden. Dafür habe ich versucht in der OpeningFCN axes.data aufzurufen. Es kommt die Fehlermeldung: ??? Reference to non-existent field 'axesData'.. Ich hab ein wenig mit get und handles rumprobiert aber nischt!
Bitte: Kann mir jemand den Befehl nenne mit dem ich axes.Data in meinem zweiten GUI (GUI2) aufrufen kann?
Die GUIs habe ich mit guide und Version 7.5.0.342 (R2007b) erstellt
Also ich versuch immer noch eine Matrix von einem GUI (GUI1) an ein anderes GUI (Gui2) zu übergeben. Die Matrix wird durch knopfdrücken des Button "Start" in GUI1 erstellt und in handles.axesData gespeichert. Der Button "Gui2" in GUI1 ruft das zweite GUI, Gui2, auf. In Gui2 sollen durch drücken des Button "go" die Werte von handles.axesData geplottet werden ... Ich bekomm es nicht hin in Gui2 die in handles.axesData gspeicherten Werte aufzurufen
(Der Button "plot" in GUI1 ist nur da um zu sehen, ob die Werte auch in handles.axesData gespeichert werden)
Was muss ich machen oder was mach ich falsch?
Ich häng meinen Code einfach mal hier dran. Ist viel aber vielleicht ist es dann verständlicher ... Die Standardkommentare habe ich rausgelöscht, dafür eigene eingefügt.
PLZ help
THX Zuckerfreak
% Dieser Button speichert Werte in handles.axes.Data function Start_Callback(hObject, eventdata, handles)
handles.axesData = [1:100;rand(1,100)]';
guidata(hObject, handles);
% Dieser Button ruft Gui2 function Gui2_Callback(hObject, eventdata, handles)
h = Gui2;
waitfor (h); % Was bringt das?
% Mit diesem Button kann man überprüfen ob handles.axesData die Werte speichert function plot_Callback(hObject, eventdata, handles)
data= handles.axesData;
figure plot(data(:,1), data(:,2));
title('\bf gewähltes Signal') xlabel('Zeit [s]') ylabel('Amplitude')
also so wie Du das machst, kann es nicht funktionieren...
wenn Du mit handles.Axes in GUI2 argbeiten willst mußt Du diese auch übergeben.
das könnte so aussehen (GUI1):
jetzt solltest Du handles.Axes_geholt verwenden können... der Name ist egal, ich würd aber einen anderen als in GUI1 verwenden, deshalb damit Du nicht durcheinanderkommst zwischen den beiden GUIs.
Da ich auch ziemlich lang rumgekämpft hab mit diesem Thema, das aber schon wieder ein paar Wochen her ist, und ich nicht sicher bin, ob ich alles notwendige geschrieben hab sende ich Dir jetzt noch zwei einfache Beispiele mit.
GUIB.zip beschreibt die Möglichkeit mit handles-Übergabe...
das waitfor, das Du in Deinem Code verwendest, brauchst Du bei der anderen Methode, welche eigentlich einfacher ist:
diese ist in GUI1.zip beschrieben. Achte hierbei auf appdata und setdata...
hoffe das hilft weiter! bei Fragen einfach melden!
mfg leonidas
Sorry, wenn ich hier rumnerve und damit den Fred wieder hochhole, aber der Link http://www.mathworks.com/support/so.....AR8.html?solution=1-1BAR8 tuts nicht mehr.
Hat jemand den Inhalt der Seite gespeichert oder kennt jemand den jetzt aktuellen Link zu den Inhalten?
hab mal kurz geschaut, scheinbar gibts die Beispiele für die alten Versionen von Simulink nicht mehr...
hier findest Du die Bsp vom neuen Simulink: http://www.mathworks.com/access/hel.....ting_guis/f3-1001115.html
einfach mal probieren, mußt mal bissl durchblättern! glaube hab damals mit diesem Bsp gearbeitet... ganz unten von der Seite kann man sich den Quelcode downloaden.
im übrigen kannst ja auch die Beispiele die ich mal hochgeladen hab anschauen, da habe ich mein ganzes Wissen reingelegt
viel Erfolg!
leonidas
Einstellungen und Berechtigungen
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
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.