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

Problem mit evalin bei mehreren GUIs

 

Robert
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 14.11.08
Wohnort: Istanbul
Version: 2010b
     Beitrag Verfasst am: 07.04.2010, 14:43     Titel: Problem mit evalin bei mehreren GUIs
  Antworten mit Zitat      
Hallo miteinander,

ich habe nun schon seit mehreren Stunden ein (anfangs) seltsames Problem auf dessen Ursache ich nun wahrscheinlich gestoßen bin. --> Der Eintrag hier soll der Verifizierung meiner Theorie dienen.

Ich habe ein Programm mit mehreren GUIs. Zwischen diesen GUIs werden mehrere Variablen ausgetauscht. Dazu schreibe ich in der ersten Oberfläche beispielsweise
Code:

assignin('base','P_rated',P_rated)
 

und in der zweiten dann
Code:

P_rated = evalin('base', 'P_rated');
 


Danach verändere ich in der zweiten GUI den Wert der Variablen P_rated. Wechsle ich nachher zurück in die erste GUI, steht in der Variablen P_rated ebenfalls der veränderte Wert, was ich aber nicht will Smile
Meine Vermutung ist also, dass bei Aufruf von evalin, die damit erzeugte (hier überschriebene) Variable in allen GUIs zur Verfügung steht. Stimmt das? Bisher dachte ich, dass die Variable nur im jeweiligen Fenster zur Verfügung steht.

LG
Robert
Private Nachricht senden Benutzer-Profile anzeigen


Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2010, 15:00     Titel:
  Antworten mit Zitat      
Zur Umsetzung der Kommunikation zwischen den GUIs würde ich folgende Zeilen empfehlen:

Code:

% Schreibende GUI
setappdata(h,'name',value);
% Auslesende GUI
value = getappdata(h,name);
% oder im Paket
values = getappdata(h);
 


Zu deinem Phänomen...da nicht globale Variablen ja nicht mal in einer anderen Funktion bekannt sind geschweige denn andern GUIs... ...dann würde evalin ja eine globale Variable erschaffen...das kann ich nicht recht glauben und hätte gerne Details...
Private Nachricht senden Benutzer-Profile anzeigen
 
Robert
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 14.11.08
Wohnort: Istanbul
Version: 2010b
     Beitrag Verfasst am: 11.04.2010, 11:22     Titel:
  Antworten mit Zitat      
Hallo Zenon,

danke für deine Antwort. Ich werde die Kommunikation in Zukunft so handhaben, wie du mir geschrieben hast.
Für das vorhandene Programm habe ich eine Notlösung (teilweise Umbennung der Variablen) gemacht, es wäre viel zu Aufwand das auf die neuen Befehle umzustellen (es sind insgesamt 6 GUIs).
Das Problem mit der GUI-übergreifenden Globalität hatte ich dann an anderer Stelle auch noch.
Habe das Problem mal nachprogrammiert, so dass du es mal begutachten kannst. Dabei gehst du wie folgt vor: Starten von Figure1. "bla bla bla" in Edit-Feld schreiben, auf "Variable setzen" klicken. Dann rechts unten auf "zum anderen Fenster wechseln" klicken.
In Figure 2 auf "Anzeige aktualisieren" klicken. Dann sollte im Static-Text-Feld "bla bla bla" aus Figure 1 stehen.
Jetzt kommt der interessante Teil: Nun änderst du den Inhalt der Variablen, indem du in das Edit-Feld was neues schreibst und mit "Variable setzen" bestätigst.
Wenn du jetzt wieder auf Figure1 wechselst und NUR auf "Anzeige aktualisieren" klickst, sollte im Static-Text-Feld der neue Wert stehen.

So und jetzt schaust du dir die fünf Zeilen Code an und siehst das Prblem, das ich oben geschildert habe...

Hoffe, dass ich mich verständlich ausgedrückt habe Smile

Beste Grüße
Robert

Evalin Problem.zip
 Beschreibung:

Download
 Dateiname:  Evalin Problem.zip
 Dateigröße:  8.89 KB
 Heruntergeladen:  470 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2010, 11:48     Titel:
  Antworten mit Zitat      
Hallo

Dein "Problem" kommt daher, dass Du Variable als global definiert hast (es hat nichts mit dem evalin Befehl zu tun).

Durch
Code:

Variable = evalin('base','Variable');
 

überschreibst Du Dir die globale Variable Variable und dadurch wird die Änderung natürlich auch in Figure1 sichtbar.

Ich würde auf jeden Fall für die Kommunikation werder globale Variablen noch assignin/evalin verwenden, sondern wie zenon geschrieben hat setappdata/getappdata oder auch guidata.

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
Robert
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 14.11.08
Wohnort: Istanbul
Version: 2010b
     Beitrag Verfasst am: 12.04.2010, 12:43     Titel:
  Antworten mit Zitat      
Ok! Als ich das Beispiel programmiert habe, habe ich mir das fast schon gedacht.
Danke für eure Antworten!
Thema ist damit durch Wink

Gruß
Robert
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.