Verfasst am: 04.05.2016, 07:34
Titel: Funktionsparameter an Funktion übergeben
Hallo zusammen,
ich habe folgende 2 Funktionen.
Mein Gui, das folgende Variablen ausspuckt:
Code:
% --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
handles=guidata(hObject);
Mein Problem ist nun, das die Variablen (Var01,Var02,...) von meinem GUI nicht an meine Interpol Funktion übergeben werden.
Ich rufe diese beiden Funktionen über eine dritte Funktion auf.
Es ist nicht ersichtlich, wie du die Funktion Interpol aufrufst - denn nur dann kann man sagen, ob du alle Variablen in den Funktionsaufruf eingefügt hast, oder nicht.
Grundsätzlich aber ist es nicht sehr übersichtlich, so eine lange variablenliste mit durchnummerierten Variablen zu haben. Hier rate ich dir je nach Datentyp zu einem Vektor [var01 ... var10], CellArray {...}, oder in einem Struct.
Ein Struct hat den Vorteil, dass du auch die Variable "Erweitert" mit unterbringen kannst und für den Funktionsaufruf nur noch:
Ja, den Workspace will ich auch gar nicht vollmüllen, ich habe diese Werte nur mit "assignin" in Workspace übertragen, da ich dachte es läge daran.
Ich rufe die Funktion mit folgender Funktion auf:
Code:
function Werteeinlesen(Erweitert,Var01,Var02,Var03,Var04,Var05,Var06,Var07,Var08,Var09,Var10)
callexcel;
waitfor(Regler);
interpol(Erweitert,Var01,Var02,Var03,Var04,Var05,Var06,Var07,Var08,Var09,Var10);
end
1. schau, dass du die Variablen zusammenfaßt und sinnigerweise gleich an die normalen handles anhängst - diese werden am Ende der Funktion sowieso zurückgespeichert.
In den Funktionen holst du dir dann nur die jeweils aktuellen handles und kannst mit den Daten arbeiten.
Code:
function pushbutton1_Callback(hObject, eventdata, handles)
handles=guidata(hObject); % <-- hier werden die handles geladen!
%...
handles.VarStr{1,1} = str2double(get(handles.Var11, 'string'));
handles.VarStr{end+1,1} = str2double(get(handles.Var22, 'string'));
% ...
deine Lösung scheint mir plausibel zu sein, ich bin gerade dabei es auszuprobieren.
Da ich das mit dem {1,1} nicht direkt verstanden habe, habe ich meine neue Variablen nacheinander in die handles geschrieben:
Code:
function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
handles=guidata(hObject);
Die durchnummerierten Variablen sind offensichtlich sehr häßlich. Das ist so unübersichtlich, dass ein Debuggen sehr erschwert wird.
Zudem sind die Inhalöte der Variablen "Var01" bis "Var10" alle identisch?!
Verwende lieber aussagekräftige Fieldnames wie "handles.Force = ...", "handles.Time = ...", oder ein Array:
Die Werte im Struct "handles" abzuspeichern, diesen Struct dann im Figrue-Objekt zu speichern und direkt danach das Figure Objekt zu löschen, ist sinnfrei:
Du müsstest
interpol
also innerhalb des Callbacks aufrufen, bevor Du alle Daten löschst.
Bisher rufst Du
interpol
ja immer noch ohne Input-Argumente auf und genau das sagt die Fehlermeldung ja auch bereits.
Funktionen benötigen Inputs. Was Du versuchst ist vergleich mit dem Aufruf der
sin
Funktion ohne ein Argument mit zu liefern. Das kann nicht funktionieren.
also habe es nun geschafft alle Variablen meinen Funktionen zu übergeben und erfolgreich damit zu arbeiten.
Das Gesamte Programm sieht nun wie folgt aus.
Ich habe eine Funktion "Interpolation" diese ruft die Funktion "Regler" auf.
in Regler werden meine Variablen definiert und die Funktion "Interpol" aufgerufen.
In "Interpol" wird interpoliert und meine Funktion "Datenschreiben" aufgerufen.
Nach Datenschreiben ist schluss.
Nun möchte ich, dass das ganze zwei mal gemacht wird.
Also grob gesagt, weiß ich das es "Regler" nur einmal durchläuft, da das GUI sich nur einmal öffnet.
Mit dem Breakpoints läuft das ganze halt einmal durch.
funktioniert !
Du bist einfach ein Killer Harald
Danke euch allen, nun läuft es, wie ich es mir Vorgestellt habe.
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.