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

Simulink-Maske als GUI

 

Andrews
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 17.07.19
Wohnort: BS
Version: 18b
     Beitrag Verfasst am: 16.08.2019, 15:41     Titel: Simulink-Maske als GUI
  Antworten mit Zitat      
Guten Tag zusammen,

ich probiere mich gerade daran in Simulink eine kleine Benutzeroberfläche zu implementieren.
Dazu habe ich zunächst mein ganzes Modell zu einem Subsystem gemacht und dieses dann maskiert.

Da ich keinen vernünftigen Guide dafür gefunden habe, sondern mir die einzelnen Funktionen relativ zeitaufwendig zusammensuchen musste, liste ich meine bisherigen Erfolge kurz auf, bevor ich zu meinen Fragen komme.

Um eine Maske zu erstellen, wie sie im angehängten Bild GUI_Block_parameter.png zu sehen ist, genügt im Grunde die Anleitung Create a Simple Mask.
Um einige der Parameter im Modell vernünfig nutzen zu können, musste ich sie unter "Initialization commands" noch anpassen:
Code:
if cod == "Laden"
    CoD = 1;
elseif cod == "Entladen"
    CoD = -1;
end

i = zyklen;
soc = SOC/100;
 


Nachdem ich im Reiter "Icon & Ports" die Options "Run initialization" auf "On" und "Icon units" auf "Normalized" gestellt hatte, habe ich es außerdem geschafft meine gewählten Einstellungen auf der Oberfläche des Subsystemblocks anzeigen zu lassen und die Ports zu beschriften.
Code:
text(0.3,0.9,'Aktuelle Einstellungen:');
text(0.3,0.8,['Ladezustand SOC: ',num2str(SOC),' %']);
text(0.3,0.7,['Zellalter: ',num2str((zyklen-1)*200),' Zyklen']);
text(0.3,0.6,['Modus: ',cod]);
text(0.3,0.5,['C-Rate: ',num2str(CRate)]);

port_label('output',1,'U [V]');
port_label('output',2,'I [A]');
 

Da ich den Pfeil in der Ecke links-unten zu unauffällig finde, habe ich eine andere Möglichkeit gefunden das darunterliegende Modell anzuzeigen. Ich habe ein leeres Subsystem ohne Ports erstellt und dann unter Properties die Callback function "OpenFcn" erstellt. Dieses Subsystem lässt sich dann als Schaltfläche missbrauchen. (vgl. GUI_Modell_als_Subsystem.PNG)
Code:
open_system('modul3/Batteriemodell', 'tab');


Die Funktionen zum Parameter laden, Simulation starten und Simulation Data Inspector anzeigen habe ich ebenfalls gefunden und als Callback für die Buttons eingetragen:
Code:
load param.mat; %Parameter laden (war nicht so schwer)

Simulink.sdi.view %Simulation Data Inspector öffnen (options habe ich nicht gefunden)

simOut = sim('modul3','SimulationMode','normal','AbsTol','1e-5',...
            'SaveState','on','StateSaveName','xoutNew',...
            'SaveOutput','on','OutputSaveName','youtNew',...
            'SaveFormat', 'StructureWithTime'); %startet die Simulation
% Die Option 'Stoptime','1000' bestimmt außerdem die Simulationszeit

simOut.getSimulationMetadata.ModelInfo.SolverInfo %gibt Infos zum gewählten Solver im Command Window aus.
 


Soweit funktioniert es ganz gut.
Als nächstes möchte ich noch probieren über die Maske zu bestimmen, welche Signale gespeichert werden und hoffe die Befehle nutzen zu können, die ich unter Configure a Signal for Logging gefunden habe.

Nun aber zu dem was ich noch nicht geschafft habe:

1. Wenn ich die Simulation über die Maske starte, zeigen die Displays im Simulinkmodell nichts an und lässt sich nichts anklicken. Ich hätte gerne das gleiche Verhalten, wie wenn auf die grüne Run Schaltfläche gedrückt wird.

2. Ich habe es nicht geschafft, aus der Maske heraus Variablen in den Workspace zu schreiben. Die wäre ein Weg mein drittes Problem zu lösen.

3. Die in der Maske gewählte Simulationszeit wird in einer Variablen gespeichert. Diese Variable kann ich aber nicht in der "sim"-Funktion nutzen wenn ich die Simulation starte. Es wird angezeigt das die Variable nicht existiert.

Ich habe bereits gelesen, dass es ein extra Tool gibt um GUIs in Matlab zu erstellen, würde aber gerne direkt in Simulink bleiben.

Ich hoffe das meine Zusammenfassung irgendjemandem von Nutzen sein wird
und bedanke mich schon einmal für Lösungsansätze oder Anregungen zu meinen Problemen.

Viele Grüße
Andrews

GUI_Modell_als_Subsystem.PNG
 Beschreibung:

Download
 Dateiname:  GUI_Modell_als_Subsystem.PNG
 Dateigröße:  30.94 KB
 Heruntergeladen:  323 mal
GUI_Block_parameter.PNG
 Beschreibung:

Download
 Dateiname:  GUI_Block_parameter.PNG
 Dateigröße:  64.22 KB
 Heruntergeladen:  305 mal
Private Nachricht senden Benutzer-Profile anzeigen


Andrews
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 17.07.19
Wohnort: BS
Version: 18b
     Beitrag Verfasst am: 19.08.2019, 10:54     Titel: Lösungen gefunden
  Antworten mit Zitat      
Ich habe nach noch tiefergehender Recherche nun auch das ordnungsgemäße Starten der Simulation und das Schreiben in den Workspace implementieren können.

Für das Starten von Simulationen eignet sich set_param wesentlich besser als sim. Mehr zu dem Befehl auf www.ece.northwestern.edu
Code:

set_param('modul3', 'SimulationCommand', 'start')


Das Schreiben von Maskenparametern in den Workspace ist auf Umwegen wie folgt möglich. Hier geht der Dank an Guy Rouleau.
Code:

getMaskParam = get_param('modul3/Batteriemodell','MaskWSVariables');
getMaskValue = containers.Map({getMaskParam.Name}',{getMaskParam.Value}');
t = getMaskValue('time');
set_param('modul3', 'StopTime', 't');


Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Oscar

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2019, 10:34     Titel: global variable
  Antworten mit Zitat      
Hallo,

Ich denke die Variablen in Maske kann man durch das Stichwort "global" universall machen.

Da Simulink ein Produkt, der basiert auf Matlab entwickelt ist, hat jede Simulink Subsystem sowie Mask seinen eigenen Workspace, genau wie Local Functions.

Eine Architectur fuer Simulink model kann man durch Simulink Explorer visualisieren.

Oscar
 
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.