Verfasst am: 29.03.2012, 09:05
Titel: Übergabe von Parametern
Hallo zusammen,
da ich noch ein relativer Neuling bin, was Programmierung angeht, hab ich mal eine Frage an euch.
Ich bin nun schon seit Tagen dabei ein Programm (bzw. mehrere m-files die ineinander verschachtelt sind) zu schreiben, dass zunächst verschiedene Werte einlist, dann weiter verarbeitet und visualisiert.
Abschließend soll eine Abfrage über ein GUI kommen, ob die Werte korrekt sind. Falls man den Nein-Button betätigt, bricht das Programm ab (das ist soweit auch kein Problem) und falls der Ja-Button gedrückt wird, soll das nächste m-file aufgerufen werden. Und genau da liegt das Problem.
Wenn ich Funktionen verwende (was ich eigentlich am liebsten machen würde), dann geht alles super, bis ich den Ja-Button verwende. Da wird immer angezeigt, dass er die Variablen die sich in der Funktion befinden nicht erkennt.
Zur Übersicht hier mal die Dateien:
das GUI wird über ein m-File mit
Code:
% Prüfen, ob alle Daten richtig sind
xxx(noe, number, type, length, ri, ra, rho, G)
functionvarargout = xxx(varargin) % XXX MATLAB code for xxx.fig % XXX, by itself, creates a new XXX or raises the existing % singleton*.
%
% H = XXX returns the handle to a new XXX or the handle to % the existing singleton*.
%
% XXX('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in XXX.M with the given input arguments.
%
% XXX('Property','Value',...) creates a new XXX or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before xxx_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to xxx_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help xxx
% Last Modified by GUIDE v2.5 29-Mar-2012 08:22:03
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @xxx_OpeningFcn, ...
'gui_OutputFcn', @xxx_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
ifnargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
% --- Executes just before xxx is made visible. function xxx_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to xxx (see VARARGIN)
% Choose default command line output for xxx
handles.output = hObject;
% im Textfeld den String ersetzen set(handles.text1, 'String', 'Are the input data correct?');
% auf ersten Button den String ersetzen set(handles.pushbutton1, 'String', 'No!');
% auf zweiten Button den String ersetzen set(handles.pushbutton2, 'String', 'Yes!');
% Update handles structure
% UIWAIT makes xxx wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. functionvarargout = xxx_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure varargout{1} = handles.output;
% --- 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)
disp('The input data are not correct - Programme demolition.') closeall; % Alle Fenster werden geschlossen
% --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
disp('The input data are correct.') closeall; % Alle Fenster werden geschlossen
% Berechnung der einzelnen Steifigkeiten und Trägheitsmomente
calculation_theta_s (noe, number, type, length, ri, ra, rho, G)
Kann mir da jemand weiterhelfen? Hab schon super viele Seiten im Internet und Büchern gelesen, aber leider nichts passendes gefunden.
Ach so, noch eine Anmerkung:
Schreibe ich alle Programme als Skripte so springt das Programm nach Betätigung des Ja-Buttons auch in das nächste Skript. Muss nur vorher die Variabelen (noe, number, type, length, ri, ra, rho, G) mit evalin aus dem Workspace laden.
Allerdings werden die neu erstellten Variablen "Theta" und "S" in der Funktion "calculation_theta_s", dann nicht mehr im Workspace geladen. Warum ist das so?
wie ich bereits sagte. jede funktion hat ihren eigenen workspace. und du kannst die variable nur übergeben wenn sie bekannt ist. deine gui hat auch ihren eignene workspace. du kannst ja mal den debugger vor den aufruf der funktion setzen. dann sihst du ja welche variablen bekannt sind.
Aber warum ist die Frage? eigentlich hab ich sie doch an xxx weitergegeben!
den Grund hat winkow bereits genannt. Du hast die Variablen zwar an die GUI an sich übergeben. Das bedeutet aber lediglich, dass die Daten in der OpeningFcn der GUI in varargin verfügbar sind; dort musst du sie selbst weiterverarbeiten.
Zur Frage, wie die Daten weiter verwaltet werden können, helfen diverse Threads, in denen es in irgendeiner Form um guidata, userdata oder setappdata geht.
Der Einfachheit halber würde ich die Variablen in einer Struktur zusammenfassen.
Zitat:
Und wieso haben alle einen anderen Workspace? Das versteh ich nicht. Alle Funktionen sind in dem gleichen Ordner abgespeichert.
Um modulares Programmieren zu ermöglichen. Man stelle sich vor, dass du für ein Programm 100 Unterprogramme hast und nie denselben Variablennamen zwei Mal in einem unterschiedlichen Zusammenhang verwenden dürftest, ohne dass das eine das andere überschreibt.
Grüße,
Harald
Lina_
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 29.03.2012, 10:20
Titel:
Vielen Dank für eure Antworten!
hmm so ganz ist es mir zwar noch nicht klar, aber ich werde es mal versuchen die Daten mit varargin weiter zu verarbeiten!
LG Lina
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.