mir bereitet mein zweiter Push-Button (Tag: SaveCurve) im GUI Probleme.
Der erste Button funktioniert ohne Probleme. Der zweite wird etwas weiter unten im Code mit dem von GUIDE erstellten Code initialisert. Das Programm läuft bis zum Button problemlos, beim Betätigen des Buttons erscheinen folgende Fehlermeldungen:
GUIDE versucht eine Funktion SaveCurve_Callback aufzurufen. Dabei scheint etwas schiefzugehen. Was schiefgeht, sollte über deinen kopierten Fehlermeldungen stehen. Das entscheidende fehlt also wohl leider.
Für den Anfang: existiert denn eine Funktion diesen Namens?
function SaveCurve_Callback(hObject, eventdata, handles) % hObject handle to SaveCurve (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
TargetSR = str2num(get(handles.TargetSR,'string'));
assignin('base','TargetSR',TargetSR);
Die Variable TargetSR wird richtig eingelesen und erscheint auch im Workspace. Wenn man allerdings irgedwas mit ihr anstellen will, kommts zu Fehlern...
Wenn ich mitten im Code die Funktion aufruf, muss ich dann nochmal neu initialisieren?
dann solltest du vor allem die eigentliche Fehlermeldung und den relevanten Code posten. Wie gesagt, der entscheidende Teil der Fehlermeldung sollte über dem von dir genannten Teil stehen.
in meinem ersten Post war die Fehlermeldung, die in der Command-Line erschien.
Ich hab jetzt nach dem Einlesen des Wertes TargetSR nochmal eine Abfrage reingebaut, ob der einen zulässigen Wert überschreitet.
TargetSR wird richtig eingelesen und erscheint auch als double-Wert im Workspace. Sobald man ihn allerdings verwenden will, kommt der Fehler.
Hier die komplette Fehlermeldung, die in der Command-Line erscheint:
Code:
Error in GUI>CreateSRCYC_Callback (line470) if(TargetSR > YMax)
Hier ist der Code, der mit dem Feld zur Eingabe des Wertes und dem Button zusammenhängt:
Code:
function TargetSR_Callback(hObject, eventdata, handles) % hObject handle to TargetSR (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 TargetSR as text % str2double(get(hObject,'String')) returns contents of TargetSR as a double
% --- Executes during object creation, after setting all properties. function TargetSR_CreateFcn(hObject, eventdata, handles) % hObject handle to TargetSR (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. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in CreateSRCYC. function CreateSRCYC_Callback(hObject, eventdata, handles) % hObject handle to CreateSRCYC (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
TargetSR = str2num(get(handles.TargetSR,'string'));
assignin('base','TargetSR',TargetSR);
%TargetSR = double(TargetSR);
if(TargetSR > YMax) fprintf('Die gewünschte Dehnrate überschreitet den vorhandenen Dehnratenbereich!');
return;
elseif(TargetSR < YMin) fprintf('Die gewünschte Dehnrate unterschreitet den vorhandenen Dehnratenbereich!');
return;
end end
Sie sollte unmittelbar vor der anderen Fehlermeldung stehen. Ggf. musst du hochscrollen. Ich würde etwas wie Undefined function or variable Ymax erwarten.
Zitat:
YMax wir vorher im Code definiert? Kann ich da nicht drauf zugreifen?
Nicht, wenn es in einer anderen Unterfunktion definiert wird. Jede (Unter-)Funktion hat einen eigenen Workspace. Man muss also neu definieren oder dafür sorgen, dass die Daten verfügbar sind, siehe
http://www.mathworks.com/help/matla.....-data-in-a-guide-gui.html
Zitat:
Des assignin hab ich reingemacht, um zu schauen, ob TargetSR richtig eingelesen wird.
Einen Haltepunkt zu setzen wäre wohl einfacher. Dann würdest du zudem sehen, ob Ymax verfügbar ist oder nicht.
ich hab nochmal geschaut, mehr steht da wirklich nicht...
Hab nen Haltepunkt gesetzt und geschaut, YMin und YMax sind nicht da...
Da ich der zweiten Funktion mehr Variablen übergeben muss, will ich die Variablen mit setappdata übergeben, da guidata und userdata auf eine Variable limitiert sind.
Dann müsste der Code in meiner ersten Funktion, in der YMin definiert wird, doch folgendermaßen lauten:
wenn das Handle zur Figure handles.figure1 ist, würde ich das so lassen. Wenn Daten zu einem bestimmten GUI-Element gehören, kann man sie aber genausogut diesem Element zuordnen.
Grüße,
Harald
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.