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

dynamisches m-file in gui wird nicht aufgerufen

 

draussen
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 03.08.2011, 20:14     Titel: dynamisches m-file in gui wird nicht aufgerufen
  Antworten mit Zitat      
Hallo,

ich habe ein Problem (wie sollte es anders sein Very Happy).

Folgendes: ich habe in einer gui die Möglichkeit über ein editierbares Textfeld den quellcode für ein (oder mehrere) m-file (s) zu implementieren die alle eine Funktion beinhalten. Die m-files werden bei Betätigen eines buttons gespeichert:

Code:


for i=1:size(handles.anyc,1)

            fid = fopen([handles.anyc{i,1} '.m'],'w');
            fprintf(fid,sprintf('function out=%s(varargin)\n',handles.anyc{i,1}));

            for k=1:length(handles.anyc{i,4})%ingoing variables
                fprintf(fid,sprintf('%s=varargin{:}{%d}{:};\n',handles.anyc{i,4}{k},k));
            end

            for k=1:size(handles.anyc{i,2},1)
                 fprintf(fid,[handles.anyc{i,2}{k} '\n']);
            end

            for k=1:length(handles.anyc{i,3})%outgoing variables
                fprintf(fid,sprintf('out{%d}={%s};\n',k,handles.anyc{i,3}{k}));
            end

            fclose(fid);
           
           a=dir;
            while ~ismember([handles.anyc{i,1} '.m'],vertcat({a.name}));
              pause(2);
              a=dir;
            end

            handles.h(i)={str2func(handles.anyc{i,1})};%function handle for  the just created function m file

    end
 


Das klappt soweit auch. Wie man sieht hab ich sogar eine while-Schleife eingebaut um zu checken, dass die m-files auch wirklich gespeichert sind.

Jetzt soll in der gleichen gui bei Drücken eines anderen Buttons die Ausführung erfolgen.

Code:

anycout=handles.h{i}(varargin);
 

"varargin" wird vorher noch definiert.

UND DAS IST DAS PROBLEM:

Beim ersten Durchlauf wird kein m-file gefunden.
Erst wenn ich ...

das ganze im debug-mode betreibe
oder
die gui nach der Erstellung der m-files komplett schließe und neu starte

funzt das wie erwartet.

Ihr könnt Euch sicherlich denken dass das ganz schön nervt immer wieder die gui neu starten zu müssen...

Über Antworten würde ich mich freuen


MfG
_________________

Der Einäugige ist unter den Blinden der König!!!
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.08.2011, 22:59     Titel: Re: dynamisches m-file in gui wird nicht aufgerufen
  Antworten mit Zitat      
Hallo draussen,

Ich habe eine ähnliche Frage heute schon einmal beantwortet: http://www.mathworks.com/matlabcent.....e-result-of-a-computation

Dynamisch erzeugte M-files sind in MATLAB nicht effizient. Ich würde empfehlen eine andere Method zu suchen, z.B. nur die Parameter der Funktion dynamisch zu erzeugen, aber bei einem nicht-veränderlichen M-File zu bleiben.
Aber das eigentliche Problem ist es, das M-Files während des Programmablaufs nicht nachgeladen werden. Dazu muss man sie zuerst per "clear <FuncName>" aus dem Speicher löschen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.08.2011, 23:04     Titel:
  Antworten mit Zitat      
Hallo draussen,

Noch eine Anmerkung:
Zitat:
Code:
while ~ismember([handles.anyc{i,1} '.m'],vertcat({a.name}));

Das "vertcat" ist hier überflüssig. Aber nach der CLEAR-Methode ist die Schleife nicht mehr nötig.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
draussen
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 04.08.2011, 08:18     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke schonmal für die Antwort und den Link.
In meinen guis nutze ich auch
Code:


Um festgelegte Berechnungen, bei denen nur die Parameter variieren durchzuführen.
Insgesamt handelt es sich um ein gui-Paket zum Einlesen und manigfaltigen Auswerten von Versuchsdaten.
Die m-file Erzeugung bietet dem User die Möglichkeit eigene "komplexere" Ausgabewerte zu generieren indem er alle Programmierregister ziehen kann. Am wichtigsten ist dabei die Verwendung von Schleifen.
Das habe ich mit
Code:

nicht hinbekommen.

Deinen Vorschlag:
"clear <FuncName>"

werde ich gleich mal ausprobieren...

Danke nochmal

MfG

Georg
_________________

Der Einäugige ist unter den Blinden der König!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
draussen
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 04.08.2011, 09:05     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich kriegs irgendwie nicht hin und komme auch mit der Hilfe zum clear Befehl nicht weiter.

Gib mir mal einen Tipp wo der clear Befehl eingetragen werden muss und vor allem welches Argument mit function gemeint ist. Hab sowohl den Namen als auch den handle probiert. Hat aber alles nicht funktioniert.

Danke im Voraus

MfG

Georg
_________________

Der Einäugige ist unter den Blinden der König!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 04.08.2011, 09:29     Titel:
  Antworten mit Zitat      
Hallo

schaue dir den Befehl REHASH
Private Nachricht senden Benutzer-Profile anzeigen
 
draussen
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 04.08.2011, 09:50     Titel:
  Antworten mit Zitat      
Hallo denny,

danke für die Antwort.
Hab

Code:


Nach der Erstellung der mfiles durchgeführt. Hat aber auch nichts gebracht.

Habs auch mit

Code:


versucht.

Ging auch net.

MfG
_________________

Der Einäugige ist unter den Blinden der König!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 04.08.2011, 10:20     Titel:
  Antworten mit Zitat      
Hallo


Werden denn die erstellte m-Files überhaupt im Matlab-Suchpfad abgespeichert. Obwohl wenn du schreibst, dass nach dem Neustart des GUIs, werden die M-Files ja gefunden, also müssen diese im Suchpfad sein.

Versuch einfach nach der Erstellung der M-Files in der Konsole folgendes:
Code:

clear functions;
rehash
 
Private Nachricht senden Benutzer-Profile anzeigen
 
draussen
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 04.08.2011, 12:43     Titel:
  Antworten mit Zitat      
Hallo,

hab ich getestet (Wenn Du mit Konsole das m-file der gui meinst?!)
, ging auch nicht.


Wenn ich den button zur Erzeugung betätigt habe, sehe ich die entsprechenden m-files bereits in der current folder. Nur aufgerufen werden sie nicht wenn ich den "Berechnungsbutton" drücke.

Wenn ich so drüber nachdenke ist das ja eigentlich komisch. Wenn ich z.B. ein .mat erstelle ist das sofort und problemlos verfügbar.

Es hat also nur was mit den functions zu tun, oder?!

MfG

Georg
_________________

Der Einäugige ist unter den Blinden der König!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 04.08.2011, 12:48     Titel:
  Antworten mit Zitat      
Hallo mit der Konsole meine ich Matlab Command Window, wo man die Befehle direkt eingeben kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
draussen
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 04.08.2011, 12:53     Titel:
  Antworten mit Zitat      
Im Comand Window kann ich ja nichts eingeben wenn die gui noch läuft. Also eingeben schon, aber wird das ja nicht bearbeitet.

Ich hatte
Code:

clear functions
rehash
 


in die m-file der gui gepackt nachdem die dynamischen m-files erstellt worden sind.

MfG

Georg
_________________

Der Einäugige ist unter den Blinden der König!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 04.08.2011, 12:58     Titel:
  Antworten mit Zitat      
Läuft? Wenn du m-File erzeugt hast? Da sollte das Programm stoppen/pausieren. Nur dann kann den Cashe aktualisiert werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
draussen
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 04.08.2011, 13:02     Titel:
  Antworten mit Zitat      
HALT STOPP!!!

rehash funktioniert!!!!!!!!!!!!!!!!!!!!!!!

Ich muss mich ernsthaft entschuldigen. Im Eifer des Gefechts habe ich rehash an der falschen Stelle im code eingefügt.

Also 1000 Dank!!!!!

Oh mann, einmal mit Profis Embarassed !!!!!!!

Und nochmals danke...
_________________

Der Einäugige ist unter den Blinden der König!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
draussen
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 04.08.2011, 13:07     Titel:
  Antworten mit Zitat      
Als Nachtrag:

Code:

clear functions
 


ging nicht. Das hab ich extra nochmal geprüft.

MfG

Georg
_________________

Der Einäugige ist unter den Blinden der König!!!
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.