WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Übergabe von Parametern

 

Lina_

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.03.2012, 09:05     Titel: Übergabe von Parametern
  Antworten mit Zitat      
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)
 

geladen.

Das GUI sieht folgendermaßen aus:
Code:

function varargout = 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',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- 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

guidata(hObject, handles);

% UIWAIT makes xxx wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = 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.')
close all;     % 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.')
close all;     % Alle Fenster werden geschlossen


% Berechnung der einzelnen Steifigkeiten und Trägheitsmomente
calculation_theta_s (noe, number, type, length, ri, ra, rho, G)
 

Im Gui hab ich eigentlich nur die Beschriftung der Buttons und des Textfeldes geändert und die Funktionen für die Buttons belegt.

Allerdings bekomm ich immer die Fehlermeldung:
Code:

??? Undefined function or variable 'noe'.
 


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?

Liebe Grüße
Lina


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 29.03.2012, 09:16     Titel:
  Antworten mit Zitat      
die funktionen haben alle ihren eigenen workspace und noe schient an der stelle nicht bekannt zu sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
Lina_

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.03.2012, 10:01     Titel:
  Antworten mit Zitat      
Hallo,

das ist klar, dass noe und auch die anderen Variablen nicht bekannt sind.
Aber warum ist die Frage? eigentlich hab ich sie doch an xxx weitergegeben!

Und wieso haben alle einen anderen Workspace? Das versteh ich nicht.
Alle Funktionen sind in dem gleichen Ordner abgespeichert.
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 29.03.2012, 10:13     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.03.2012, 10:15     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Lina_

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.03.2012, 10:20     Titel:
  Antworten mit Zitat      
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
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.