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

GUI Variablenübergabe

 

MaKel89
Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2015, 17:24     Titel: GUI Variablenübergabe
  Antworten mit Zitat      
Hallöchen,

bin nicht sicher ob das hier oder in Matlab reingehört, beschäftigt sich quasi mit beidem.

Ich möchte in Matlab ein GUI erstellen, welches mir ein paar Eingaben ermöglicht, diese dann in bereits geschriebenen Skripten verarbeitet und die Ergebnisse davon in einer Simulink-Analyse nutzt.

Wenn ich das laufen lasse kriege ich einen Haufen an Fehlermeldungen der Form:

Undefined function or variable 'variablexyz'

Es scheint mir so, als könne Simulink nicht auf die generierten Variablen zugreifen.
Da ich nicht weiß, wie die interne Verwaltung der Variablen in einem GUI läuft (es wird offensichtlich nicht in den Workspace der Matlab-Session gespeichert), wollte ich mal nachfragen, ob hier jemand eine Lösung weiß.

Vielen Dank schonmal Smile
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.11.2015, 18:27     Titel:
  Antworten mit Zitat      
Hallo,

hast du denn mal mit dem Debugger geschaut, wo die Variablen sind?

Zur Verwaltung der Daten in einer GUI:
http://de.mathworks.com/help/matlab.....data-among-callbacks.html

Beim sim-Befehl würde ich die Option 'SrcWorkspace' auf 'current' setzen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2015, 21:29     Titel:
  Antworten mit Zitat      
Hi Harald,

danke schonmal. Wie funktioniert das mit dem Debugger?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.11.2015, 22:13     Titel:
  Antworten mit Zitat      
Hallo,

bitte bemühe doch auch Google oder die Forensuche, bevor du eine Frage stellst.
Dann findest du z.B. das:
http://de.mathworks.com/help/matlab.....process-and-features.html

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.11.2015, 12:58     Titel:
  Antworten mit Zitat      
Mahlzeit zusammen,

ich hab n paar Sachen ausprobiert, um meine Variablen aus dem GUI im Workspace verfügbar zu machen (also im base workspace). So wie ich es verstanden habe wird in Matlab zwischen dem Base und dem Caller workspace unterschieden. Wenn ich also eine Callback Funktion im GUI (z.B. über einen Button) aufrufe, kann diese nur mit Variablen innerhalb des Caller Workspace umgehen. Assignin hilft mir schon mal die Variablen im Base Workspace verfügbar zu machen. Kann mir jemand meine Gedanken dazu bestätigen oder berichtigen?
Ich hoffe ich liege richtig, mein Programm arbeitet schon mal insofern richtig, als dass es mir zumindest die Variable in den Base Workspace legt und die Simulation auch startet, aber....Very Happy

Ein Problem, auf das ich nun gestoßen bin sieht wie folgt aus:

Meine Skripte werden ausgewertet und die Variablen im Base Workspace hinterlegt. Die Simulation startet und läuft anscheinend auch bis zu einem bestimmten Punkt durch. An diesem Punkt sollte mit einem "To Workspace" Block etwas in den Workspace geschrieben werden. Diese Daten sollten nun von einem weiteren Skript eingelesen und geplottet werden.
Die Daten aus den "To Workspace" Blöcken sind nun aber nicht im Base Workspace verfügbar, ich vermute, weil sie in den Caller Workspace der Callback-Routine geschrieben werden, die die Simulation startet.

Wie kann ich diese nun abgreifen und im Base Workspace verfügbar machen?


edit: Hab grad überlegt, meine Simulation und die darauffolgende Auswertung mit Plot liegen in der gleichen Callback Funktion, werden also beide beim Drücken des gleichen Knopfes ausgelöst. Prinzipiell sollten dann die Simulink Variablen im Caller Workspace verfügbar sein und für das anschließende Skript bereitstehen. Mir scheint, ich habe doch noch nicht so ganz verstanden, was genau passiert.....Hilfe wäre super Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.11.2015, 17:47     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Assignin hilft mir schon mal die Variablen im Base Workspace verfügbar zu machen.

assignin ist generell keine gute Idee, da es schwer zu debuggen ist.

Ich persönlich nutze sim mit SrcWorkspace auf 'current' und lasse mir die Ergebnisse in Out-Ports zurückgeben. Dann ist alles da, wo es hingehört.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.11.2015, 17:48     Titel:
  Antworten mit Zitat      
"current" bedeutet doch aber dann, dass der aktuelle workspace derjenige der momentan aktiven callback-routine ist, richtig?
Private Nachricht senden Benutzer-Profile anzeigen
 
MaKel89
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.11.2015, 19:26     Titel:
  Antworten mit Zitat      
Hi Harald, ich rekapituliere noch mal und hoffe, dass du mir die richtige Richtung aufzeigen kannst.

Also wenn ich nicht assignin() benutze, den Workspace der sim-Funktion aber auf current setze, sollte ja prinzipiell für die sim-Funktion alles verfügbar sein, was ich innerhalb der Callback-Routine für meinen Push-Button ausführe.

Innerhalb dieser hole ich mir die Werte, die ich für die Simulation brauche über die handles von Eingabefeldern meines GUI, in die ich die Werte eintrage. Das scheint auch soweit zu funktionieren. Eine Variable liegt aber in einer anderen Callback-Routine und ich finde nicht die richtige Möglichkeit diese abzugreifen und in der Simulation in Simulink verfügbar zu machen...Sad

edit: ok, auch das habe ich in den griff bekommen, indem ich die variable in der handles-struct hinterlege und in der anderen callback-routine aufrufe. das funktioniert.

jetzt verbleibt nun mein allerletztes problem: ich möchte die daten aus der simulation in der gleichen callback-routine für einen plot verwenden. ich bekomme aber die fehlermeldung, dass die structvariablen (ich lasse sie in der simulation über "to workspace"-blöcke laufen) unbekannt sind. da fehlt mir offenbar noch ein kniff, um diese verfügbar zu machen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.11.2015, 20:48     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
ich bekomme aber die fehlermeldung, dass die structvariablen (ich lasse sie in der simulation über "to workspace"-blöcke laufen) unbekannt sind.

Dann verwende bitte den Debugger, um herauszufinden, wo die Daten sind.
Oder nutze, wie von mir empfohlen, Out-Blöcke.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.11.2015, 21:28     Titel:
  Antworten mit Zitat      
mit out-blöcken habe ich es auch schon versucht, die fehlermeldung bleibt aber dieselbe.

habe im debug-modus jetzt mal bis zur simulation laufen lassen. bis dahin läuft alles durch und ich bekomme ein objekt "ans" welches mir als 1x1 simulationoutput dargestellt wird.

wenn ich mir das aber öffne, ist es leer, nix drin. das wundert mich schon sehr, da ich aus redundanzzwecken sowohl to workspace als auch out-blöcke verwendet habe, und die simulation ohne probleme durchläuft.

wie kann ich den fehler weiter eingrenzen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.11.2015, 21:39     Titel:
  Antworten mit Zitat      
Hallo,

welches Release verwendest du?
Wie rufst du sim auf?
Es wäre hilfreich, wenn du dein Modell und die GUI zur Verfügung stellst.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.11.2015, 21:44     Titel:
  Antworten mit Zitat      
meine Version ist R2015b

ich kann die files meiner simulation und meines GUI anhängen, weiß nur nicht ob das viel bringt.

das GUI greift auf Messdaten und weitere Unterprogramme zurück, die ich nicht einfach weitergeben darf...

GUI.m
 Beschreibung:

Download
 Dateiname:  GUI.m
 Dateigröße:  7.74 KB
 Heruntergeladen:  477 mal
Behaelter_dynamischAN_Ausschleusensignaltest29052015.slx
 Beschreibung:

Download
 Dateiname:  Behaelter_dynamischAN_Ausschleusensignaltest29052015.slx
 Dateigröße:  38.96 KB
 Heruntergeladen:  420 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.11.2015, 22:36     Titel:
  Antworten mit Zitat      
Hallo,

die zugehörige .fig fehlt. Statt der echten Daten kannst du Testdaten zur Verfügung stellen, mit denen das Verhalten auftritt.
Du solltest dir das Ergebnis von sim in eine Variable zurückgeben lassen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2015, 08:35     Titel:
  Antworten mit Zitat      
Guten Morgen,

anbei sind jetzt die nötigen Dateien.

Das Excel File wird über den entsprechenden Button ausgewählt. Die Werte, die ich verwende sind der Reihe nach: 25,40,20,50 für die Eingabefelder.

Tests.rar
 Beschreibung:

Download
 Dateiname:  Tests.rar
 Dateigröße:  333.16 KB
 Heruntergeladen:  437 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
MaKel89
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2015, 21:50     Titel:
  Antworten mit Zitat      
Also ich bins nochmal. Ich hab nochmal ein ganz einfaches GUI erstellt, um das ganze zu testen. Ich kriege auch hier nur ein leeres SimulationOutput Objekt. Entweder mein Matlab mag mich nicht oder ich hab grundlegend einen bestimmten Zusammenhang nicht verstanden, ich verzweifel hier...

Irgendwo ist der Wurm drin. Über jeden Ratschlag wäre ich echt mega froh.
Confused

Test.m
 Beschreibung:

Download
 Dateiname:  Test.m
 Dateigröße:  4.18 KB
 Heruntergeladen:  445 mal
Test.fig
 Beschreibung:

Download
 Dateiname:  Test.fig
 Dateigröße:  19.12 KB
 Heruntergeladen:  432 mal
sinusfunktion.slx
 Beschreibung:

Download
 Dateiname:  sinusfunktion.slx
 Dateigröße:  16.63 KB
 Heruntergeladen:  435 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.