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

Gültigkeit von Variablen in GUIs

 

Tobser92
Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2018, 07:39     Titel: Gültigkeit von Variablen in GUIs
  Antworten mit Zitat      
Hi Leute,

ich arbeite grad an einer GUI für einen Simulationsversuch. Dabei soll via Button-Klick mit dem Befehl simulate ein Simulink-Modell simuliert werden. Die Ergebnisse sollen in Diagrammen geplottet werden.

Bei dem Modell handelt es sich um einen Regelkreis mit einem Fuzzy-Regler. Über die Blöcke toworkspace sollen die Signalverläufe aus dem Modell geführt und geplottet werden.

Vor dem Simulieren lade ich die FIS-Strukturen aus den FIS-Files.

Nun erhalte ich beim Klicken auf den Button die Fehlermeldung, dass die Variable, in der ich die FIS-Struktur abspeichere, nicht definiert wurde.

Wenn ich jedoch vor dem Starten der GUI die FIS-Strukturen mit readfis lade, funktioniert alles wie gewollt.

Hat das was mit dem Gültigkeitsbereich der Variablen zu tun? Wie sieht das aus, wenn ich über die GUI dem Simulink-Modell Variablen übergeben will?

Hier mal der Code aus der Callback-Funktion des Buttons:
Code:

cd 'C:\...\GUI';
lageregler=readfis('invrotpen_Fuzzy3.5_Lage.fis');
balanceregler=readfis('invrotpen_Fuzzy3.5_Balance.fis');
simulate=sim('GUIModell');

axes(handles.axes2);
plot(theta)
axes(handles.axes5);
plot(thetadot)
axes(handles.axes4);
plot(alphadot)
axes(handles.axes1);
plot(alfa)
axes(handles.axes3);
plot(alphast)
axes(handles.axes6);
plot(m)
 


Kann mir jemand weiterhelfen?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.04.2018, 09:04     Titel:
  Antworten mit Zitat      
Hallo,

was Variablen in GUIs (und das Teilen von Variablen) angeht, siehe hier:
https://de.mathworks.com/help/matla.....data-among-callbacks.html

Das Problem könnte hier aber auch sein, dass Simulink im falschen Workspace nach den Variablen sucht. In der Regel hilft dann
Code:
simulate=sim('GUIModell', 'SrcWorkspace','current');


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2018, 18:52     Titel:
  Antworten mit Zitat      
Ja, es lag am Workspace, ich hab mit dem assignin-Befehl in einem andren Workspace gespeichert.

Hier mal der Code:
Code:
assignin('base', 'balanceregler', balanceregler);


Nun hab ich noch ein weiteres Problem. Ich möchte die Werte aus den Edit Text Boxen dem Simulink-Modell übergeben.

Zunächst hab ich den Wert aus den Textboxen ausgelesen mit
Code:
get(handles.editmp, 'String')


Wie kann ich jetzt nun die Parameter dem Simulinkmodell übergeben?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

was bedeutet hier übergeben? Insbesondere: wo soll die Einstellung in Simulink verwendet werden?
Falls die Einstellung als Parameter in einem Block eingetragen ist, muss sie nur im richtigen Workspace liegen.

assignin macht es generell schwierig zu debuggen. Ich würde eine der anderen Möglichkeiten, z.B. Application Data, verwenden, und bei sim den momentanen Workspace als Source Workspace angeben - beides siehe vorheriger Kommentar.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2018, 21:44     Titel:
  Antworten mit Zitat      
Also das Auslesen der Daten aus den EditTextBoxen klappt problemlos. Nun ist die Frage, wie ich diese meinem Simulink-Modell übergeben kann.

Eine Idee bestand darin, die die Parameter in ein .mat file zu speichern (klappt auch problemlos) und diese im Modell mit from file reinlade, leider funktioniert das nicht

Um das Problem etwas zu konkretisieren:
Ich habe 6 Parameter aus der GUI. Im Modell sollen diese einer MatLab-Function übergeben werden.

Jemand eine Idee?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Du brauchst (wie gesagt) nichts zu übergeben, sondern die Daten müssen "nur" im Workspace liegen.

Zitat:
und diese im Modell mit from file reinlade, leider funktioniert das nicht

Und was funktioniert daran nicht?

Zitat:
Im Modell sollen diese einer MatLab-Function übergeben werden.

Dann in die MATLAB-Function gehen und dort die Parameter über "Edit Data" als solche definieren.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2018, 22:00     Titel:
  Antworten mit Zitat      
Ich hab das leider noch nicht ganz verstanden. Ich hab was gelesen, dass man Daten als Application data, GUI data oder User data speichern kann und mit den jeweiligen set und get-Funktionen arbeiten kann. Aber wie genau funktioniert das? Was gibt es denn diesbezüglich überhaupt an Möglichkeiten Daten abzulegen/zu speichern?

Und wie kann ich dem sim-Befehl den aktuellen Workspace als source workspace angeben?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Aber wie genau funktioniert das?

So wie im Link angegeben, z.B. Application Data
Code:
setappdata(handles.figure1,'var', wert); % Setzen
% und später
wert = getappdata(handles.figure1,'var'); % Abfragen


Zitat:
Was gibt es denn diesbezüglich überhaupt an Möglichkeiten Daten abzulegen/zu speichern?

Im Link sind alle Möglichkeiten dargestellt, die es bei GUIDE gibt. App Designer (ab R2016a) ist moderner und erleichtert das Verwalten eigener Daten beträchtlich.

Zitat:
Und wie kann ich dem sim-Befehl den aktuellen Workspace als source workspace angeben?

Das habe ich im Kommentar von 09:04 geschrieben.

Grüße,
Harald
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.