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

load aus GUI

 

Kai_K
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 09.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2012, 19:53     Titel: load aus GUI
  Antworten mit Zitat      
Hallo zusammen,

habe schon im Inet und im Forum gesucht aber leider keine passende Antwort gefunden...

Ich möchte aus einer GUI (bei Knopfdruck) ein *.m Skript ausführen. Das Skript wird auch, bis auf die darin verwendeten "load" Befehle ausgeführt. (Workspace bleibt leer.)
Führe ich das entsprechende Skript jedoch über das Command Window aus werden die Daten in das Workspace geladen.

In der GUI rufe ich das Skript folgendermaßen auf:

Code:

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

Start_SIM;
 


Hat jemand eine Idee dazu?
Vielen Dank schon mal!

Viele Grüße,

Kai
Private Nachricht senden Benutzer-Profile anzeigen


marc-205
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 12.12.12
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 14.12.2012, 20:00     Titel:
  Antworten mit Zitat      
Das hängt glaube ich mit dem "quasi lokalen" Workspace deiner gui zusammen.
Vermutlich muss in die Outputfunction was geschrieben werden, dass die Daten in den Workspace schreibt/übernimmt. Aber dazu müsste dir einer der Experten was sagen... keine Ahnung wie das genau geht.
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: 14.12.2012, 21:11     Titel:
  Antworten mit Zitat      
Hallo,

wie schon vom Vorgänger vermutet: jeder Callback hat erstmal seinen eigenen Workspace. Was soll denn mit den geladenen Daten gemacht werden? Sollen sie anderen Callbacks zur Verfügung stehen?
Zum generellen Umgang mit Daten in GUIs siehe
http://www.mathworks.de/de/help/mat.....-data-in-a-guide-gui.html

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 09.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2012, 21:16     Titel:
  Antworten mit Zitat      
erst mal danke für die schnellen antworten!

werde mir deinen link jetzt mal ansehen.
aber vorab schon mal die frage: kann man die Daten in ein "globalen" workspace laden?

die gui soll mit klick auf den Knopf beendet sein.
es sollen die Datenbanken in den workspace geladen werden, dann laufen weitere skripte durch. Variablen werden den Werten in der Datenbank zuordnen und dann folgt eine Simulink simulation (mit Werten aus den zu ladenen Datenbanken)
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: 14.12.2012, 22:04     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
kann man die Daten in ein "globalen" workspace laden?

Können - ja. Ich vermute jedoch, dass du nicht den globalen, sondern den Base Workspace meinst? So oder so ist es keine gute Programmierpraxis.

Zitat:
die gui soll mit klick auf den Knopf beendet sein.

Was macht sie denn dann überhaupt? Um ein Skript auszuführen ist ja keine GUI nötig?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 09.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2012, 22:11     Titel:
  Antworten mit Zitat      
Ja, ich meine das Workspace das man ganz normal (also auch bei Simulink) benutzt.

Die GUI soll dafür sein, dass der Benutzer Werte eingeben kann mit welcher die Simulation durgeführt wird.

Am ende der SIM wird dann eine neue GUI geladen mit den Ausgabeparametern.

Was wäre denn bessere programmierpraxis? nur die einzelnen variablen deklarieren und weitergeben? nicht ganze datenbanken?
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: 14.12.2012, 23:43     Titel:
  Antworten mit Zitat      
Hallo,

bitte möglichst klar ausdrücken.

Zitat:
Ja, ich meine das Workspace das man ganz normal (also auch bei Simulink) benutzt.

Man kann für eine Simulink-Simulation auch "ganz normal" den momentanen Funktions-Workspace nutzen.
Zitat:

Die GUI soll dafür sein, dass der Benutzer Werte eingeben kann mit welcher die Simulation durgeführt wird.

Dann würde ich die Eingaben über die Output-Function zurückgeben.


Zitat:
Was wäre denn bessere programmierpraxis?

Output Function bzw. das, was im Link steht.

Zitat:
nicht ganze datenbanken?

Die meisten Menschen verstehen unter Datenbanken etwas wie Access, SQL, Oracle etc. Aber das meinst du wohl nicht?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 09.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2012, 08:25     Titel:
  Antworten mit Zitat      
Entschuldige bitte die schlechte Ausdrucksweise, ich bin (ein mit Matlab noch recht unerfahrener) Ingenieur, kein Informatiker Wink

Okay, ich versuche es noch mal verständlicher auszudrücken:

Es besteht bereits ein "Programm" das aus mehreren GUIs besteht, in denen Verschiedene Werte eingegeben, oder ausgewählt werden können. Anhand dieser Auswahlen werden (teilweise schon in der GUI) Variablen Werte zu geordnet. --> Konzept.mat
Im Anschluss an die GUI möchte ich eine Simulation durchführen.
Diese benötigt Inititialisierungswerte. Die Werte kommen teilweise aus der GUI (Konzept.mat), teilweise aus einer anderen mat-Datei (Zyklen.mat)

Die Idee war: mit Betätigen des Knopfes wird über
sim 'mdl' die Simulation gestartet. Diese hat als Preloadfunktion eine m.Datei welche mittels load die beiden mat Dateien in den standard Workspace läd. Dann wird ein Skript aufgerufen mit dem die Simulations Variablen Werte zugeordnet bekommen.

Doch daran scheitert es bisher, die Daten aus den Ordnern werden nicht geladen. Und das Skript für die Initialisierung kann nur die Daten aus dem Workspace den Variablen zuordnen.

Auch wenn es jetzt nicht die schönste Lösung ist, am einfachsten wäre es für mich, wenn ich die beiden mat-Dateien aus der GUI in den standard Workspace laden kann.
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: 15.12.2012, 09:35     Titel:
  Antworten mit Zitat      
Hallo,

mit "Standard Workspace" meinst du den Base Workspace? Den, in dem man direkt vom Command Window aus arbeitet?

Wäre es nicht deutlich einfacher, den Workspace für Simulink auf den zu setzen, in dem du gerade bist?
Code:
sim(..., 'SrcWorkspace', 'current')


Ansonsten müsstest du mit eval/assignin oder global arbeiten.

Siehe auch eine Google-Suche nach 'running simulink from matlab gui'.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 09.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2012, 10:05     Titel:
  Antworten mit Zitat      
Hey, okay.
Also mit
Harald hat Folgendes geschrieben:

Code:
sim(..., 'SrcWorkspace', 'current')

Harald


läuft die Simulation jetzt schon mal durch! - Besten Dank dafür!

Jetzt steh ich allerdings vor der nächsten Hürde.
Nach Ende der Sim steht im Command Window meine Ergebnisdateien:

Simulink.SimulationOutput:
Daten 1:
Daten 2:
...
Use get to access a variable by name.

Ich bekomme es jedoch nicht hin zugriff auf diese zu bekommen.
Habe schon versucht als postskript save simdata.mat laufen zu lassen. In der Mat Datei werden mir auch alle Daten gespeichert, mit Ausnahme der Ergebnisse (also Daten 1, 2,... sind nicht in der Datei)
und
get Daten1, oder get Simulink.Daten 1 oder get Simulink.SimulationOutput.Daten 1 klappt leider auch nicht.

könntest du mir da bitte auch noch weiterhelfen?

Vielen Dank schon mal!

Grüße, Kai
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: 15.12.2012, 10:27     Titel:
  Antworten mit Zitat      
Hallo,

bitte den genauen sim-Aufruf posten. Du holst dir schon Rückgabeargumente zurück?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 09.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2012, 10:31     Titel:
  Antworten mit Zitat      
Code:

mdl = 'Konzeptauslegung_v14';
load_system(mdl)
        set_param(mdl, 'StartTime', '0.0')
    set_param(mdl, 'StopTime','1000')
      sim(mdl, 'SrcWorkspace', 'current')
   save simdata2.mat
 


In der Simulation selbst arbeite ich mit den "to Workspace" Blöcken.
Aber speziell zurück hole ich mir im Moment noch nichts.
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: 15.12.2012, 10:44     Titel:
  Antworten mit Zitat      
Hallo,

ich würde es mit simout = ... aufrufen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 09.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2012, 11:14     Titel:
  Antworten mit Zitat      
Besten Dank! Smile

mit

Code:
mdl = 'Konzeptauslegung_v14';
load_system(mdl)
    set_param(mdl, 'StartTime', '0.0')
    set_param(mdl, 'StopTime','1000')
    simOut  = sim(mdl, 'SrcWorkspace', 'current', 'SaveOutput','on','OutputSaveName','daten1','SaveOutput','on','OutputSaveName','daten2');
  daten1 = simOut.get('daten1');
  daten2= simOut.get('daten2');
save simdata3.mat


klappt es. So, jetzt mal sehen, wie ich dann mit dem Anschlussskript weiter mache...

wünsch dir noch ein schönes Wochenende,

Gruß, Kai
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.