Matlab findet diese Variablen aber nicht und bringt mir einen Fehler wenn ich Run drücke. Die Variablen erscheinen in der Kommandozeile schon, und in der Kommandozeile kann ich sie auch verwenden, aber in der Funktion eben nicht. Weiß jemand warum das so ist? Und wie ich das beheben kann?
Vielen Dank schonmal.
Matlab findet diese Variablen aber nicht und bringt mir einen Fehler wenn ich Run drücke.
Wieso tippst Du "Run" und wo? Welchen Fehler bekommst Du? Der gepostet Code ist ziemlich abstrakt. Ein reales Code-Beispiel wäre hier sinnvoller.
Jede Funktion hat ihren eigenen Workspace, also einen Satz von Variablen, mit dem sie arbeiten kann. Die Variablen aus dem "Base"-Workspace sind von der Kommandozeile aus erreichbar. Aber wie sollen sie magisch in die Unterfunktion des GUIs gelangen?
Du musst also entweder von der Kommandozeile aus eine Funktion aufrufen und die Variablen als Inputs verwenden. Wenn es aber unbedingt ein Callback einer GUI sein muss, könntest Du auch per
evalin
Variablen aus dem Base-Workspace einlesen.
Gruß, Jan
sui83
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 03.08.2015, 23:45
Titel:
Hallo,
vielen Dank für den tipp mit evalin. Hat super funktioniert
Ich war gerade dabei es mit varargin zu versuchen, verstand aber die Matlab Hilfe auch nicht so richtig die es dazu gab. Aber jetzt funktioniert es super.
schön, dass es mit evalin funktioniert hat.
Nun ist es aber so, dass die Verwendung von evalin nach Möglichkeit vermieden werden sollte, da so die schöne Strukturierung der Workspaces ein Stück weit verloren geht. Stattdessen sollten Variablen immer übergeben werden. Mir ist erst mal nichts bekannt, wo dies absolut unmöglich ist.
und wie könnte ich die Variable übergeben? Das Problem ist das ganze Programm soll funktionieren wenn man bei der Skript Datei auf "run" drückt. Das Programm wird für den Kids Day geschrieben und ich kann von den kleinen nicht erwarten, dass Sie die Variable von der Kommandozeile in die GUI Funktion weitergeben.
Möglichkeiten wären:
1. Laden der Daten in der OpeningFcn
2. Button / Menü zum Laden der Daten in der GUI
3. auf das Dropdown unter "Run" klicken und dort bei 'type code to run' das gewünschte eingeben.
Falls die Daten immer dieselben sind, würde ich 1. verwenden.
Falls die Daten flexibel sein sollen, dann 2.
Die 3. Variante ist eher ein quick-and-dirty.
ja 1. wäre super. Das war das was ich auch unter Matlab help gefunden habe. Der befehl "varargin" in der opening funktion. Aber ich wurde nicht richtig schlau aus den Matlab Beispielen und wusste dann auch nicht mehr weiter.
Das war das was ich auch unter Matlab help gefunden habe. Der befehl "varargin" in der opening funktion. Aber ich wurde nicht richtig schlau aus den Matlab Beispielen und wusste dann auch nicht mehr weiter.
das ist schade. aber ohne den code ist schwer nachzuvollziehen was du versucht hast. aus welchem teil bist du denn nicht schlau geworden? schreib doch sonst mal eine kleine gui die nicht viel macht und an die man daten übergeben kann und poste dann den code wo was nicht läuft. etc. dann lässt sich bestimmt einfacher helfen.
grüße
_________________
wo genau liegt denn das Problem bei 1.?
Irgendwie musst du die Daten ja im Command Window erzeugt haben. Dann musst du doch eigentlich nur diese Schritte in die OpeningFcn kopieren und sicherstellen, dass die Daten in den anderen Teilen der GUI verfügbar sind, siehe
http://www.mathworks.com/help/matla.....data-among-callbacks.html
(meine bevorzugten Wege: "Store Data Using the guidata Function" oder "Store Data as Application Data")
Ich sehe da aber keinen Grund, varargin zu verwenden.
Ansonsten schließe ich mich Winkows Hinweisen vollkommen an.
also mein Problem ist folgendes. Ich habe eine Funktion die mir ein Zwölfeck in der pdetoolbox erzeugt. Führe ich diese Funktion aus öffnet sich die pdetoolbox und ein Zwölfeck erscheint an der Oberfläche.
In der pdetoolbox gibt es im menü den Befehl "Draw -> Export Geometrie Description, Set Formula, Labels", welchen man mit der Maus ausführen muss. Daraufhin werden 3 Matrizen in die Kommandozeile exportiert. Diese 3 Matrizen nennt Matlab immer gd, sf und ns, und diese 3 brauche ich nun in meiner GUI. Packe ich jetzt die Funktion die mir das Zwölfeck erstellt in die OpeningFunktion der GUI bringt mir das leider nichts, da diese Funktion ja nicht die 3 Matrizen ausgibt oder erstellt.
Bis jetzt habe ich auch noch nichts unter der Matlab Hilfe oder in Internet gefunden, ob es für dieses importieren auch einen Matlab Befehl gibt, denn falls es einen gäbe könnte ich die Zwölfeck Funktion und diesen Befehl in der OpeningFunktion aufrufen.
% Plotflags and user data strings: setappdata(pde_fig,'plotflags',[111111110001100001]);
setappdata(pde_fig,'colstring','');
setappdata(pde_fig,'arrowstring','');
setappdata(pde_fig,'deformstring','');
setappdata(pde_fig,'heightstring','');
Mein Ablauf sieht zurzeit so aus. "Run" klicken und obige Funktion ausführen, dann manuell mit Maus die 3 Matrizen exportieren und danach die 3 Matrizen von der Komanndozeile in die GUI übergeben.
soll denn pdemodel jedes Mal vor Öffnen der GUI ausgeführt werden? Ansonsten könnte man ja die drei Variablen in einer .mat-Datei abspeichern und laden.
ich habe es versucht aber irgenwie will es nicht. Hab die 3 Variablen unter "myvar" matfile gespeichert. Danach führe ich folgende Befehle aus in der OpeningFunktion der GUI.
Code:
function GUI_Simulation_Minimalflaechen_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 GUI_Simulation_Minimalflaechen (see VARARGIN)
% Choose default command line output for GUI_Simulation_Minimalflaechen
handles.output = hObject;
Aber der code bricht immer an der Stelle von "setformula = sf;" ab und ich weiß nicht warum. Was aber komisch ist, denn wenn ich die Befehle in der Kommandozeile eingebe funktioniert es.
das ist der Error den ich kriege. Aber wie gesagt an der Kommandozeile krieg ich den nicht. Ich hab auch schritt für schritt ausgeführt und wie gesagt bei "setformula = sf;" krieg ich auch die Fehlermeldung.
Code:
Error using stateflow\private\sflibrary
Too many output arguments.
Error in GUI_Simulation_Minimalflaechen>GUI_Simulation_Minimalflaechen_OpeningFcn (line76)
setformula = sf;
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.