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

Kein Zugriff auf Workspace

 

Driss
Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.09.2013, 00:13     Titel: Kein Zugriff auf Workspace
  Antworten mit Zitat      
Hallo

ich bin ein Anfänger, was gui angeht, und ich habe nun ein Gui als Control desk gebaut, wo ich zum Beispiel Simulationsmodell starten, stopen und aktueller Stand abfragen usw. kann. Ich habe ein Button erstellt, wo ich das Modell initialisiere, und wenn ich den Button anklicke läuft soweit alles ok aber wenn ich das Modell simuliere, bekomme ich einen Fehler, dass ein paar prameter nicht defeniert sind. Danach habe ich gemerkt, dass diese Parameter gar nicht im Workspace liegen!!.

Nun weiss ich nicht, wie ich diese Parameter in Workspace laden soll?

Könnt mir bitte helfen?

Danke


Driss
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: 28.09.2013, 01:12     Titel: Re: Kein Zugriff auf Workspace
  Antworten mit Zitat      
Hallo Driss,

Die Erklärung ist noch vage. In welchen Workspace möchtest Du die Variablenerstellen? Jede Funktion hat ja ihren eigenen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.09.2013, 08:29     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich meine Matlab Workspace (haupt workspace). Denn ich kann mir über gui auch bestimte Parameter in Workspace abfragen und editieren mit:

evalin.

In meinem Fall habe ich ein Modell, welches ich durch fünf verschiedene initialisierungsdateien über gui bedaten und starten möchte. Und wenn ich eines davon selektiere, wird ein m-file durch run funktion ausgeführt und dabei landet nur ein Teil der Parameter in Matlab Workspace und wenn ich das Modell starte bekomme ich natürlich Fehler, dass der Rest der Modell-Parameter undefeniert sind.

Ich hatte es versucht durch global aber es sind viele Parameter.

Die Frage ist, wie kann ich aus der gui aus ein m-file ausführe so dass, alle Variablen in haupt Workspace landen?


Danke im Voraus

Driss
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: 28.09.2013, 09:58     Titel:
  Antworten mit Zitat      
Hallo,

Variablen in den Base Workspace zu laden ist generell keine gute Idee. Mit evalin zu arbeiten noch weniger, siehe z.B. hier
http://blogs.mathworks.com/loren/2005/12/28/evading-eval/

Zum Verwalten der Daten innerhalb einer GUI siehe
http://www.mathworks.com/help/matla.....-data-in-a-guide-gui.html
Wenn es um viele Variablen geht, kann es sinnvoll sein, sie in einer Struktur anzuordnen.

Im Zusammenhang mit Simulink ist dann vielleicht noch interessant, die Parameter aus dem richtigen Workspace zu ziehen. Dabei hilft die Option 'SrcWorkspace' für den sim-Befehl.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2013, 10:30     Titel:
  Antworten mit Zitat      
[/code]Hallo Harald,

erstmal danke für die schnelle Antwort.

Ja es ist richtig, ich möchte auch das Modell aus der Gui steuern.

Bis jetzt konnte es tun durch:
Code:
set_param('Modell_3113','SimulationCommand','start');

bzw. zum Stoppen durch:
set_param('Modell_3113','SimulationCommand','stopp);
 


Allerdings, ich musste das Modell über Commandwindow initialisieren und nicht über Gui damit die Parameter im Hauptworkpace landen.

Jetzt habe ich es versucht über 'SrcWorkspace'
Code:
sim('Modell_3113','SrcWorkspace','Current')
 


Aber ich muss das Modell noch mal initialisieren durch Ausführen des Inifiles. Obwohl ich das vorher durch einen anderen Button tun.

Da ich das Modell mit 3 varianten simulieren kann, habe ich für jede Variante ein Button erstellt und dem entsprechend wird die Inifile ausgeführt. Die Frage ist warum soll ich den Inifile beim simulieren noch mal ausführen?


Mit den Funktionen getappdata /setappdata habe ich das Problen, wie diese Parameter innerhlb der gui managen kann.

Die Idee ist, dass ich alle Modellparameter, die in gui bei Variantenauswal landen zu einem Variablen zuordne und dieser dann mit setappdata bein starten der Simulation wieden aufrufe.

Aber ich weiss es nicht wie? .

Wie kann ich alle Inifies zu einem Variablen zuordnen?


Ergendwas mache ich falsch oder?
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: 29.09.2013, 17:02     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Aber ich muss das Modell noch mal initialisieren durch Ausführen des Inifiles. Obwohl ich das vorher durch einen anderen Button tun.

Warum musst du nochmal initialisieren? Wenn mit einem anderen Button initialisiert wird, werden eventuelle Variablen eben nur in diesem Callback angelegt und sind damit nur dort verfügbar.

Zitat:
Mit den Funktionen getappdata /setappdata habe ich das Problen, wie diese Parameter innerhlb der gui managen kann.

Die Idee ist, dass ich alle Modellparameter, die in gui bei Variantenauswal landen zu einem Variablen zuordne und dieser dann mit setappdata bein starten der Simulation wieden aufrufe.

Aber ich weiss es nicht wie? .

Wie kann ich alle Inifies zu einem Variablen zuordnen?

Die Fragen bitte konkretisieren bzw. anhand eines Code-Beispiels erläutern.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2013, 21:04     Titel:
  Antworten mit Zitat      
Hallo,

Zur Erklärung was ich mit der Gui vorhabe.

Fall1: Mein Modell besteht aus zwei Teilen. Ein Teil hat drei mechanische Komponenten und der andere hat drei hydraulische Komponenten.

Fall2: Das Modell kann für drei verschiedene Fahrzeuge simuliert werden.

Zu Fall1: In der Gui habe ich für jeden Teil bestimmte Parameter definiert, wo ich durch einen Klick auf Button ihre Werte angezeigt werden. Übrigens das klappt bis jetzt allerdings die Werte werden aus dem Haupt Workspace abgefragt.


zu 2: Damit ich die Werte für 1: abfragen kann, muss ich erst mal das Modell initialisieren. Dies tue ich über drei anderen Buttons. Jeder Button steht für ein Fahrzeugtype.

So jetzt zur Anwendung: Erstens ein Button von den drei anklicken um den Fahrzeugtype auszuwählen(das mache ich mit 2:). Somit wir das Modell durch den Befehl run xxxx initialisiert.

Das heißt die Modellparameter sind nur innerhalb dieser Funktion abfragbar.

Jetzt will der Anwender die Parameter(Fall 1) abfragen, und das geht durch anklicken auf einem Button.

Die Parameter sind innerhalb dieser Callback nicht verfügbar!

Das will ich über getappdata /setappdata ermöglichen.

wie soll ich das machen?

Ich muss innerhalb der Callback(Fall 2:) die Modellparameter zu einem Variablen zuordnen.

setappdata(handles.pushbutton1);

und in (Fall1:) über
J = getappdata(handles.pushbutton1);

die Modellparameter verfügbar machen

Hier ist mein Problem.


Ich hoffe dass, das Problem erkennbar geworden ist.

Danke
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: 30.09.2013, 16:02     Titel:
  Antworten mit Zitat      
Hallo Driss,

Ich verstehe das Problem immer noch nicht so richtig.
Du kannst statt SETAPPDATA und GETAPPDATA auch die einfachere Funktion GUIDATA benutzen, mit dem der "handles" Struct üblicherweise geupdated wird.
Code:
handles.YourParameter = rand(2,2);
guidata(hObject, handles);

% Und in den anderen Callbacks dann:
handles = guidata(hObject);  % Falls notwendig

Gruß, Jan
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: 30.09.2013, 21:28     Titel:
  Antworten mit Zitat      
Hallo,

@ Jan: man kann sicher darüber streiten, ob nun guidata oder setappdata/getappdata einfacher sind. Ich meine, dass setappdata/getappdata vor allem sicherer sind, da ich es schon allzu oft gesehen habe, dass sich Leute mit guidata versehentlich die Handles zu den GUI-Objekten überschreiben.

@ Driss:
Schau dir doch mal die Doku zu setappdata/getappdata an.
Die einzige dokumentierte Syntax ist:
Code:


Das entsprechende Gegenstück dann:
Code:
value = getappdata(h,'name')


Grüße,
Harald
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: 30.09.2013, 23:56     Titel:
  Antworten mit Zitat      
Hallo Harald,

Ich streite mich sicher nicht über GUIDATA. Es ist praktisch, alle Daten eines Figure-Objektes gebündelt in einer Variablen zu haben, aber dadurch steigt natürlich die Gefahr des irrtümlichen Überschreibens.
Ich erstelle meine GUIs ohne GUIDE und bevorzuge SETAPPDATA und die Benutzung der UserData.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.10.2013, 14:47     Titel:
  Antworten mit Zitat      
Hallo Zusammen,

das Problem besteht weiterhin!

Wenn ich auf ein Radio Button klicke, wird das Modell für Variante A ausgeführt.
Code:
run ('Vehicle_Init_files\VarianteA);

guidata(hObject,handles);


Es wird ja der m-file problemlos ausgeführt.

Nun klicke ich auf einen Push Button, wo ich mir ein paar Werte für bestimmte Parmeter anzeige.

Code:

handles = guidata(hObject);


Nun wie kann ich auf die richtigen Werte der Parameter zugreifen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Driss
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.10.2013, 14:53     Titel:
  Antworten mit Zitat      
Hallo Zusammen,

das Problem besteht weiterhin!

Wenn ich auf ein Radio Button klicke, wird das Modell für Variante A ausgeführt.
Code:
run ('Vehicle_Init_files\VarianteA);

guidata(hObject,handles);


Es wird ja der m-file problemlos ausgeführt.

Nun klicke ich auf einen Push Button, wo ich mir ein paar Werte für bestimmte Parmeter anzeigen möchte.

Code:
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)



handles = guidata(hObject);


Nun wie kann ich auf die richtigen Werte der Parameter zugreifen?[/code]
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.