Verfasst am: 23.03.2012, 10:36
Titel: Fehler bei Grafikübergabe von Skript zu GUI
Hallo Leute,
schreibe mein erstes GUI mit dem Guide.
Es werden Werte vom GUI (ein paar fixe und ein paar die selbst eingegeben werden) an ein Skript übergeben.
Code:
% --- Executes on button press in Berechnung. function Berechnung_Callback(hObject, eventdata, handles) % hObject handle to Berechnung (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
Im Skript werden damit Berechnungen durchgeführt. Es sollen nun die Ergebnisse, 2 Grafiken (Axes) und 2 Werte (fres1, und fres2), in die GUI vom Skript zurück übergeben werden.
% Plot Übertragungsfunktionen (lin) und Systemantwort
sv = findobj(KH2_GUI,'Type','axes','Tag','sv');
axes(sv) zoom on
plot(t,abs(h),'r','LineWidth',2);
hold on;
plot(t,y,'--','LineWidth',0.5) hold off;
xlabel('t/sec');
grid on;
legend('Frequenzgang','Systemantwort nach Frequenz-Sweep Anregung');
1) Die Grafiken werden nach Ausführung der GUI zwar in den Axes übertragen und angezeigt, aber wenn ich mehrere Durchläufe nacheinander durchführen möchte, bekomme ich IMMER bei dem 3ten Durchlauf folgende Fehlermeldung. Kann mir das nicht erklären warum es bei den ersten 2 Durchläufen funktioniert und dann nicht mehr?
2) Der Wert für fres1 wird ganz normal zurückgegeben und in der GUI angezeigt, aber der Wert für fres2 nicht. Müsste aber doch gleich funktionieren, oder?
Habe die Dateien angefügt. Dass es wahrscheinlich nicht sauber programmiert ist, ist mir bewußt. Vielleicht könnt ihr mir weiter helfen.
habe den Aufruf entschachtelt. Daran ist es aber vorerst mal nicht gelegen.
Das erste Problem mit der Fehlermeldung bei axes(sv) ist erstmal gelöst. Anscheinend hat das Programm hier Probleme mit den hold on und hold off befehlen gehabt. Jedenfalls wenn ich den hold off Befehl weglasse, kann das Programm nun beliebig oft hintereinander durchgeführt werden. Damit er mir dann aber nicht die Grafen immer übereinander zeichnet habe ich in der Callback Function ein cla eingefügt. Somit werden die vorigen axes vor einer neuen Darstellung immer gelöscht.
Code:
% --- Executes on button press in Berechnung. function Berechnung_Callback(hObject, eventdata, handles) % hObject handle to Berechnung (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
Das 2te Problem hab ich noch nicht lösen können. Weiterhin bekomme ich vom Skript nur fres1 als Rückgabewert und fres2 nicht. Es existieren aber beide Variablen im Skript. Habe auch mit dem Debugger nichts finden können.
Mit diesem Befehl möchte ich einfach zwei berechnete Werte aus dem aufgerufenem Skript (TF_KH2_GUI.m) wieder zurück in das GUI übergeben. Diese Werte sollen in einem Static Text Feld in der .fig angezeigt werden. [nicht vom GUI im Dateinamen verwirren lassen, ist kein Skript zu einem GUI, sondern diese wird vom GUI aufgerufen]
Sorry dass ich den geschlossenen Beutrag wieder eröffne, aber mir ist noch ein Problem untergekommen, wo ich einfach nicht drauf komme.
Ich habe in meinem GUI ja mehrere Edit Felder. Diese sollen vom User auch alle ausgefüllt werden, deswegen möchte ich eine Abfrage machen, ob ein Edit Feld leer geblieben ist und dann eine Fehlermeldung rausschicken.
Für ein einzelnes Edit Feld habe ich dass in der Callback Funktion des Push Buttons so realisiert:
Code:
ifisempty(get(handles.m_K,'String')) errordlg('Alle Felder müssen ausgefüllt werden!', 'Error') end
Wenn hier das erste Feld (handles.m_K) leer ist bricht er wieder normal nach der Ausführung mit der Error Meldung ab, aber wenn das erste befüllt ist und zB das zweite Feld (handles.m_A) erst leer ist, gibt es nur folgende Matlab-Error Meldung:
hast. Wenn ja: schlechte Idee, weil du damit das Handle auf das Textfeld überschrieben hast, also umbenennen.
errordlg bricht meines Wissens übrigens nicht ab, sondern führt die Codeausführung weiter.
Ja du hattest recht. Das wars, jetzt funktionierts.
errordlg bricht nicht ab. Zusätzliches return einfügen, dann gehts.
Harald hat Folgendes geschrieben:
Ich würde die Abfragen im übrigen mit && kombinieren.
Ja, hab die Abfragen mit || kombiniert. Meldung soll ja schon kommen, auch wenn nur ein Feld leer bleibt.
Danke!
lg
hosti
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.