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

m-File in GUI aufrufen

 

legacys01
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 14.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.12.2017, 05:44     Titel: m-File in GUI aufrufen
  Antworten mit Zitat      
Hallo Zusammen,

durch ein GUI wird eine xls Datei via Button eingelesen und in einem Graphik dargesellt.
durch einen zweiten Button soll ein existierende File Master.m aufgerufen werden, die die Daten in der Excel datei verarbeitet.

Master:
Code:

function Master()
B = deleteouts(xlsxr,0.05,1);
isn = isnan(B);
inum = find(~isn);
inan = find(isn);
comp = bsxfun(@lt,inan.',inum);
[~, upper] = max(comp); maximum)
B(isn) = (B(inum(upper))+B(inum(upper-1)))/2;
xlswrite(xlsxr,B,'Tabelle1','B1');
xlswrite('NewGeneratedData.xlsx',B,'Tabelle1')
 


das GUI-CODE:

Code:

function varargout = Filter(varargin)
% FILTER MATLAB code for Filter.fig
%      FILTER, by itself, creates a new FILTER or raises the existing
%      singleton*.
%
%      H = FILTER returns the handle to a new FILTER or the handle to
%      the existing singleton*.
%
%      FILTER('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in FILTER.M with the given input arguments.
%
%      FILTER('Property','Value',...) creates a new FILTER or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before Filter_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to Filter_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 Filter

% Last Modified by GUIDE v2.5 31-Dec-2017 03:41:37

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Filter_OpeningFcn, ...
                   'gui_OutputFcn',  @Filter_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 Filter is made visible.
function Filter_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 Filter (see VARARGIN)

% Choose default command line output for Filter
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

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


% --- Outputs from this function are returned to the command line.
function varargout = Filter_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 DateiEinlesen.
function DateiEinlesen_Callback(hObject, eventdata, handles)
% hObject    handle to DateiEinlesen (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
[Filename,Pathname]=uigetfile({'*.xlsx';'*.xls'},'File selector');
Fullpathname=strcat(Pathname,Filename);
xlsxr=xlsread(Fullpathname);
set(handles.Dateipfad,'String',Fullpathname);
axes(handles.Ploting);
plot(xlsxr);

% --- Executes on button press in filter.
function filter_Callback(hObject, eventdata, handles)
% hObject    handle to filter (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%Fullpathname=strcat(Pathname,Filename);

Master
%%%%%% HIER WEISS ICH NICHT WIE ICH DIE Master.m RICHTIG EINBINDE%%%%
 


das ist mein erste GUI und hoffe auf eure Unterstützung.

vielen Dank

Grüße

Legacys
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.434
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.12.2017, 11:26     Titel:
  Antworten mit Zitat      
Hallo,

du musst xlsxr in der GUI abspeichern, wenn du es weiterverwenden willst. Verschiedene Ansätze siehe hier, mein bevorzugter ist application data.
https://www.mathworks.com/help/matl.....data-among-callbacks.html

Seit R2016a gibt es in MATLAB den App Designer als Nachfolger von GUIDE. Dort ist das Verwalten von Daten wesentlich angenehmer.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
legacys01
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 14.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.12.2017, 18:45     Titel:
  Antworten mit Zitat      
Hallo Harald,

nochmals vielen Dank für deine Rückmeldung.
könntest du mir vllt mit ein paar Codezeilen unterstützen zb. bezüglich der Application Data.
ich tue mich ein bisschen schwer es zu verstehen, wie ich zb. der Inhalt des xlsxr nach dem Drucken auf den Button1 (also aus den folgenden CODEBEREICH) :

Code:

% --- Executes on button press in DateiEinlesen.
function DateiEinlesen_Callback(hObject, eventdata, handles)
% hObject    handle to DateiEinlesen (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
[Filename,Pathname]=uigetfile({'*.xlsx';'*.xls'},'File selector');
Fullpathname=strcat(Pathname,Filename);
xlsxr=xlsread(Fullpathname);
set(handles.Dateipfad,'String',Fullpathname);
axes(handles.Ploting);
plot(xlsxr);
 


zu den Codebereich mit dem zweitem Button wo die verarbeitung stattfindet (also Button2):

Code:

% --- Executes on button press in filter.
function filter_Callback(hObject, eventdata, handles)
% hObject    handle to filter (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

Master

 



vielen Dank und einen guten Rutsch wünsche ich
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.434
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.01.2018, 11:50     Titel:
  Antworten mit Zitat      
Hallo,

gutes neues Jahr!

In der ersten Funktion:
Code:
setappdata(handles.figure1, 'mydata', xlsxr);


In der zweiten Funktion:
Code:
xlsxr = setappdata(handles.figure1, 'mydata');


Dann musst du xlsxr als Eingabeargument an Master übergeben.

Wenn du neu mit dem Erstellen von Oberflächen anfängst, eine ausreichend aktuelle Version von MATLAB hast, nicht mit bestehenden GUIDE-Oberflächen arbeiten musst, würde ich wie gesagt generell App Designer empfehlen. Aus der Doku dazu:
Zitat:
This approach is appropriate for building most apps that do not require polar plots, subplots, or graphics interactions such as mouse and key-press customizations.

https://www.mathworks.com/help/matlab/gui-development.html

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
legacys01
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 14.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.01.2018, 23:31     Titel: m-File in GUI aufrufen
  Antworten mit Zitat      
Hallo Harald und Frohes neues Jahr,

leider hat diese Aufgabe eine gewisse Dringlichkeit. deswegen kann ich mich schlecht so schnell ins neue App Designer einarbeiten.

daher noch die Bitte ob du mir weiterhelfen kannst im Bezug auf die Übergabe der xlsrx ins Master.

bis jetzt habe ich die deine Zeilen so eingefügt:

fürs erste Button:

Code:

% --- Executes on button press in DateiEinlesen.
function DateiEinlesen_Callback(hObject, eventdata, handles)
% hObject    handle to DateiEinlesen (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
[Filename,Pathname]=uigetfile({'*.xlsx';'*.xls'},'File selector');
Fullpathname=strcat(Pathname,Filename);
xlsxr=xlsread(Fullpathname);
set(handles.Dateipfad,'String',Fullpathname);
axes(handles.Ploting);
plot(xlsxr);
setappdata(handles.DateiEinlesen, 'mydata', xlsxr);
 


und das zweite Button:
Code:

% --- Executes on button press in filter.
function filter_Callback(hObject, eventdata, handles)
% hObject    handle to filter (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%Fullpathname=strcat(Pathname,Filename);
xlsxr = getappdata(handles.DateiEinlesen, 'mydata');
Master
 


muss die Übergabe innerhalb von Master stattfinden?
bis jetzt sieht Master wie folgt aus:

Code:

function Master()

B = deleteoutliers(xlsxr,0.05,1);
isn = isnan(B); %// determine which values are NaN
inum = find(~isn); %// indices of numbers
inan = find(isn); %// indices of NaNs
comp = bsxfun(@lt,inan.',inum); %'// for each (number,NaN): 1 if NaN precedes num
[~, upper] = max(comp); %// next number to each NaN (max finds *first* maximum)
B(isn) = (B(inum(upper))+B(inum(upper-1)))/2; %// fill with average
xlswrite(xlsxr,B,'Tabelle1','B1');
xlswrite('NewGeneratedData.xlsx',B,'Tabelle1')
 


wie du dir denken kannst habe ich folgende Fehlermeldung weil die Übergabe der Argument nicht stattgefunden hat.
Code:


>> Filter
Undefined function or variable 'xlsxr'.

Error in Master (line 3)
B = deleteoutliers(xlsxr,0.05,1);

Error in Filter>filter_Callback (line 96)
Master

Error in gui_mainfcn (line 95)
        feval(varargin{:});

Error in Filter (line 42)
    gui_mainfcn(gui_State, varargin{:});

Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)Filter('filter_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback
 



vielen Dank für deine super Unterstützung

Grüße

Legacys
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.434
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.01.2018, 23:59     Titel:
  Antworten mit Zitat      
Hallo,

wie gesagt:
Zitat:
Dann musst du xlsxr als Eingabeargument an Master übergeben.


Also die Kopfzeile von Master.m abändern zu:
Code:

und den Funktionsaufruf zu:
Code:
Master(xlsxr)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
legacys01
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 14.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.01.2018, 23:18     Titel: m-File in GUI aufrufen
  Antworten mit Zitat      
Hallo Harald,

ich danke dir vielmals für deine Hilfe.
es hat geklappt.
nur noch eine kleinigkeit.
ich plote die zwei Daten, jedoch wird die 1 legende immer von der zweiten überschrieben.
wie kann ich es lösen, dass es die zwei legende zu den zwei kurven angezeigt?

Code:

function DateiEinlesen_Callback(hObject, eventdata, handles)
% hObject    handle to DateiEinlesen (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
[Filename,Pathname]=uigetfile({'*.xlsx';'*.xls'},'File selector');
Fullpathname=strcat(Pathname,Filename);
xlsxr=xlsread(Fullpathname);
set(handles.Dateipfad,'String',Fullpathname);
axes(handles.Ploting);
plot(xlsxr,'b');
legend('ungefiltert','Location','northEastOutside');
hold on
setappdata(handles.DateiEinlesen, 'mydata', xlsxr);


% --- Executes on button press in filter.
function filter_Callback(hObject, eventdata, handles)
% hObject    handle to filter (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%Fullpathname=strcat(Pathname,Filename);
xlsxr = getappdata(handles.DateiEinlesen, 'mydata');
Master(xlsxr)
axes(handles.Ploting);
new=xlsread('D:\NewGeneratedData.xlsx');
plot(new,'r');
hold on;
legend('gefiltert','Location','southEastOutside');

 


viele Grüße und nochmals vielen Dank

Legacys
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.434
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.01.2018, 00:46     Titel:
  Antworten mit Zitat      
Hallo,

Code:
plot(..., 'DisplayName', 'ungefiltert')

und dann
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
legacys01
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 14.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2018, 21:00     Titel: m-File in GUI aufrufen
  Antworten mit Zitat      
Hallo Harald,

funktioniert ganz wunderbar.
nochmals vielen Dank für deine professionelle Hilfe.

viele Grüße
Legacys
Private Nachricht senden Benutzer-Profile anzeigen
 
legacys01
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 14.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2018, 21:00     Titel:
  Antworten mit Zitat      
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 2024 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.