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

GUI soll m-file ausführen

 

fleischcracker
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 14.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2012, 09:25     Titel: GUI soll m-file ausführen
  Antworten mit Zitat      
Hallo Liebe community,

seit Tagen sitze ich an einigen Problemen und kann sie nicht lösen. Aus den diversen Forumbeiträgen wurde ich schlauer und konnte einige Probleme Lösuen, aber nicht alle. Hier mein Anliegen:

1) Ich habe eine GUI (prototyp) und mehrere m-files (m-filesind sind im extra Verzerzei: ('C:\Users\matlab\Documents\MATLAB\funktionen')) Nun habe ich mir in der GUI Buttons gebastelt mit dennen ich meine m-files ausführen möchte. Dabei soll das m-file mit den Workspacedaten ('base' -Workspcae) arbeiten.

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


Summe.m ist ein m-file zu testzwecken, ihr Inhalt ist folgender:

Code:
function[x] = Summe(a, b)

x = a+b;


Variablen a und b sind im base Workspace definiert.

beim Klicken auf den Button "Messung_Starten" kommt Fehler:
Code:
>> prototyp
Error using Summe (line 3)
Not enough input arguments.

..... usw-> lange Liste

Aber die Argumente a und b sind doch im Workcpace


Ich weiss nicht was ich falsch gemacht habe, bitte euch um HIlfe.

prototyp.m
 Beschreibung:

Download
 Dateiname:  prototyp.m
 Dateigröße:  6.61 KB
 Heruntergeladen:  394 mal
prototyp.fig
 Beschreibung:

Download
 Dateiname:  prototyp.fig
 Dateigröße:  5.32 KB
 Heruntergeladen:  404 mal
Summe.m
 Beschreibung:

Download
 Dateiname:  Summe.m
 Dateigröße:  37 Bytes
 Heruntergeladen:  385 mal
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: 26.07.2012, 09:34     Titel:
  Antworten mit Zitat      
Hallo,

Du rufst eine Funktion als Skript auf --> geht nicht.
Du bist in einem Workspace und möchtest Daten aus einem anderen Workspace verwenden --> schlechte Idee, weil unübersichtlich und fehleranfällig.

Auf folgender Seite werden verschiedene Ansätze dargestellt, wie man das vernünftig lösen kann.
http://www.mathworks.com/help/techd.....ating_guis/f5-998352.html
Am besten für deinen Zweck geeignet dürften die Ansätze unter "Application Data" und "GUI Data" sein. Beispiele finden sich weiter unten.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 14.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2012, 11:51     Titel:
  Antworten mit Zitat      
Danke Harald für die Info, ich möchte es mit "GUI Data" machen.
Ich versuche den handle der variable a dem base-Workspace zu entnehmen und ihn an Callback workspace weiter zu geben. (ich hoffe, dass ich es richtig verstanden habe)

Code:
% --- Executes on button press in Messung_starten.
function Messung_starten_Callback(hObject, eventdata, handles)
% hObject    handle to Messung_starten (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
handles.a=a;
handles.b=b;
guidata(hObject,handles);
 Summe(a,b)


irgendwas mache ich falsch, da haufen Fehler noch vorhanden sind.

ps: ist jetzt die Funktion "Summe.m" richtig eingebunden?
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: 26.07.2012, 11:54     Titel:
  Antworten mit Zitat      
Hallo,

das Problem ist aus meiner Sicht schon, dass die Daten überhaupt erst im Base Workspace gespeichert werden. Warum? Sie sollten von Anfang an z.B. in der Handles-Struktur abgelegt werden.

Befehle werden immer in dem Workspace ausgewertet, wo man sich befindet. Das Zugreifen auf den Base Workspace ist zwar über EVALIN und ähnliches möglich, aber nicht empfohlen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 14.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2012, 12:19     Titel:
  Antworten mit Zitat      
Dass die Daten zuerst im Base Workspace gespeichert werden, hat auch seinen Grund. Lange bevor mich GUI interessiert hat, habe ich einige Funktionen geschrieben. Alle Funktionen haben natürlich mit Base Workspace gearbeitet. Es hat sich im Nachinein herausgestellt, dass diese Funktionen zur einfacheren Handhabung mit GUI-Buttons verknümpft werden sollen. Und da sind wir schon bei meinen Problemen angekommen.

Zitat:
Sie sollten von Anfang an z.B. in der Handles-Struktur abgelegt werden.

Gern, ich habe meine Funktion Summe.m. Wie soll ich ihr sagen, dass sie die Ergebnisse im Handle ablegen soll?

Und wie kann in den Workspace von Callbackfunktionen eingesehen werden?

Verständisfrage: Gild die Hadlestruktur für die GUI und für das Base Workspace gleichzeitig?
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: 26.07.2012, 12:37     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Alle Funktionen haben natürlich mit Base Workspace gearbeitet.

Üblicherweise: jein. Funktionen haben ihren eigenen Workspace, in dem sie arbeiten. Die Ergebnisse werden in den Workspace abgelegt, aus dem die Funktion aufgerufen wurde. Das kann der Base Workspace sein, das kann aber auch der Workspace einer Teilfunktion einer GUI sein.

Typischerweise sollte das also so aussehen:
Code:
[summeErgebnis1, summeErgebnis2, ...] = summe(input1, input2, ...)
handles.ergebnis1 = summeErgebnis1;
handles.ergebnis2 = summeErgebnis2;
guidata(hObject, handles)

Somit werden die Ergebnisse des Funktionsaufrufs in der Handles-Struktur abgelegt und können bei Bedarf auch wieder von dort entnommen werden.

Zitat:
Und wie kann in den Workspace von Callbackfunktionen eingesehen werden?

Mit dem Debugger. Haltepunkt setzen und den Button drücken, zu dem der Callback gehört.

Zitat:
Gild die Hadlestruktur für die GUI und für das Base Workspace gleichzeitig?

Nein, die Handles-Struktur gilt ausschließlich für die GUI, mit der du gerade arbeitest. Natürlich kannst du diese Variable handles auch an ein externes Programm weitergeben; das ist aber dann nochmal was anderes.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 14.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2012, 13:26     Titel:
  Antworten mit Zitat      
Vielen Dank Harald.

Ich glaube, dass ich etwas überfordert bin. Verstehe ich das richtig, dass meine Summe.m Funkion folgender Maßen angepasst wird:

Code:

function[x] = Summe(a, b)

x = a+b;
[Summex] = Summe(a, b)
handles.x = Summex;
guidata(hObject, handles)



Schöne Grüße
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: 26.07.2012, 13:54     Titel:
  Antworten mit Zitat      
Hallo,

die Funktion summe.m braucht überhaupt nicht angepasst werden, lediglich ihr Aufruf.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 14.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2012, 14:42     Titel:
  Antworten mit Zitat      
Ok Harald, vielen dank!!!

So sieht es dann bei mir im GUI-Code aus:

Code:
% --- Executes just before prototyp is made visible.
function prototyp_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 prototyp (see VARARGIN)
addpath ('C:\Users\matlab\Documents\MATLAB\funktionen')

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

handles.a = 7;
handles.b = 8;

% Update handles structure
guidata(hObject, handles);

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

handles.x = Summe(handles.a,handles.b)
guidata(handles.figure1,handles);



Schöne Grüße
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 - 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.