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

Matlab GUI getting started

 

Harald
Forum-Meister

Forum-Meister


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

Zitat:
und das Matlab-Skript soll dann mit Hilfe eines Buttons ausgeführt werden.

Ist es wirklich ein Skript oder eine Funktion? Ich würde wie gesagt eine Funktion empfehlen.

Zitat:
Ist dann der Code so richtig:

Nein, uigetfile ist für die Ausführung einer vorher festgelegten Datei nicht sinnvoll.

Sollte es sich tatsächlich um ein Skript handeln
Code:
a = app.val1.Value    (Name des Eingabefelds = val1)
b = app.val2.Value    (Name des Eingabefelds = val2)

Kraftstoffverbrauch % in dem Skript wird eine Variable c erstellt.

app.result.Value = c;


Für Funktionen siehe vorheriger Kommentar.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen


SparX
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2018, 14:02     Titel:
  Antworten mit Zitat      
Hallo,

ich habe jetzt als Callback-Code folgendes geschrieben:

Code:
% Callback function
        function ButtonPushed(app, event)
            c_W = app.c_W_Wert.Value;
            A = app.Querschnittsflaeche.Value;
            ro_L = app.ro_L.Value;
            f0 = app.f0.Value;
            K = app.K.Value;
            lambda_K = app.lambda_K.Value;
            eta_Triebstrang = app.eta_Triebstrang.Value;
            i_Achse = app.i_Achse.Value;
            r_dyn = app.r_dyn.Value;
            e_Masse = app.eMasse.Value;
            m_DIN = app.m_DIN.Value;
            m_zul = app.m_zul.Value;
            ro_K = app.ro_K.Value;
            g_Erde = app.g_Erde.Value;
            V_H = app.V_H.Value;
            alpha = app.alpha.Value;
            v_wind = app.v_wind:Value;
           
Kraftstoffverbrauch_GUI     % Matlab-Skript, das alle Funktionen ausführt

app.Result.Value = P_ges_NEFZ;


Dies soll mir beispielhaft die gesamte Leistung des NEFZ-Zyklusses berechnen. Die ensprechende Zeile in Matlab lautet:

Code:
P_ges_NEFZ = sum(P_Bedarf_NEFZ)*t_NEFZ(1184)/3600


Passt das so von der Überlegung her? Ist es ein Problem, dass die Variablen für das Matlab-Skript und die Variablen, die in der App eingegeben werden gen gleichen Namen haben? Es wird mir nämlich immer für eine Zeile wie bspw.:

Code:
f0 = app.f0.Value;


vorgeschlagen sie in

Code:
app.f0 = app.f0.Value;


zu ändern. Aber dann könnte das Matlab-Skript nicht mehr darauf zugreifen oder?

Allerdings wird keine Berechnung durchgeführt, wenn ich dann auf den Start-Button drücke.

Werden dann Zwischenergebnisse nicht automatisch in Matlab berechnet?

Gruß

Zuletzt bearbeitet von SparX am 27.08.2018, 14:16, insgesamt einmal bearbeitet
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: 27.08.2018, 14:15     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ist es ein Problem, dass die Variablen für das Matlab-Skript und die Variablen, die in der App eingegeben werden gen gleichen Namen haben?

Das muss bei einem Skript so sein, damit das zugeordnet werden kann. Ich empfinde das als unübersichtlich und fehleranfällig, daher die Empfehlung eine Funktion zu verwenden.
Ungeschickt ist lediglich, die Komponenten in der App so zu benennen wie die Variablen. Daher kommt die Warnung.

Zitat:
Allerdings wird keine Berechnung durchgeführt, wenn ich dann auf den Start-Button drücke.

Ist ButtonPushed denn diesem Start-Button als Callback zugeordnet? Falls nicht, musst du das im Design View noch rechts unten setzen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
SparX
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2018, 14:40     Titel:
  Antworten mit Zitat      
Ja, der PushButton ist als Callback zugeordnet. Die Rechnung startet auch, keine Ahnung warum es das vorhin nicht getan hat. Allerdings kann Matlab die eine Variable, die ich in der App definiere nicht finden. Das schaue ich mir nochmal genauer an.

Das Problem tritt schon in der ersten Code-Zeile meines Skripts auf.

Code:
Undefined function or variable 'v_wind'.

Error in Kraftstoffverbrauch_GUI (line 12)
v_wind_NEFZ = meshgrid (v_wind,v_NEFZ_mean)


Eigentlich müsste Matlab den Vektor v_wind_NEFZ erstellen können, da Matlab ja v_wind aus der App übergeben bekommt und v_NEFZ_mean aus einem vorherigen .mat-File ausliest. Bzw. ich habe ich gerade gesehen, dass die vorherigen .mat-Files nicht geladen werden, obwohl es der erse Befehl innerhalb des Matlab-Skripts ist.

Edit: Habe den Fehler gefunden. Als ich die Befehle "clear" und "clc" am Anfang des Skripts gelöscht habe, lief es ohne Probleme durch.


Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
SparX
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2018, 15:09     Titel:
  Antworten mit Zitat      
Eine (hoffentlich) vorerst letzte Frage:

Kann man innerhalb der App auch Vektoren definieren? Im Sinne von

Code:
a = [app.a1.Value;app.a2.Value;app.a3.Value]


Bei meinem letzten Versuch bekam ich eine Fehlermeldung durch den Gebrauch von eckigen Klammern.

Gruß
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: 27.08.2018, 15:31     Titel:
  Antworten mit Zitat      
Hallo,

prinzipiell ja. Welche Fehlermeldung hast du denn bekommen?

Es kann helfen, die drei Werte erst mal rauszuholen und sich im Debugging Modus Datentyp und Dimensionen anzusehen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
SparX
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2018, 09:38     Titel:
  Antworten mit Zitat      
Guten Morgen,

mittlerweile bekomme ich keine Fehlermeldung beim Erstellen eines Vektors, dafür aber einen anderen.

Gestern hat die Zeile

Code:
app.Result.Value = B_gesamt_NEFZ;


Noch ohne Probleme funktioniert, heute kommt die Fehlermeldung, dass ich das '=' durch ein '==' ersetzen soll. Wenn ich das mache, kommt eine weitere Fehlermeldung in einer automatisch erstellten Programmzeile:

Code:
% App initialization and construction
    methods (Access = private)


Hier soll laut Programm das '=' ebenfalls durch ein '==' ersetzt werden. Allerdings kann ich diese Code-Zeile auch nicht ändern.

Der Unterschied zu gestern ist nur, dass ich anstatt Vektoren, die ich vorher in meinem Matlab-Skript erstellt habe jetzt im App Designer erstellen lasse. Wenn ich die neuen Vektoren allerdings auskommentiere, startet die App jedoch wieder.

Die beiden Vektoren habe ich bisher über

Code:
i_Getriebe = [app.Gang1.Value;app.Gang2.Value;app.Gang3.Value;app.Gang4.Value;app.Gang5.Value;app.Gang6.Value;app.Gang7.Value;app.Gang8.Value];
e_Masse = [app.e.Value;app.e2.Value;app.e3.Value;app.e4.Value;app.e5.Value;app.e6.Value;app.e7.Value;app.e8.Value


erstellt.

Ich habe meine beiden Vektoren jetzt über

Code:
i_Getriebe=app.i_gesamt.Value;
i_Getriebe=str2double(strsplit(i_Getriebe,','));
e_Masse=app.e_gesamt.Value;
e_Masse=str2double(strsplit(e_Masse,','));


erstellt. Das Ergebnis sind liegende Vektoren. Diese werden in meinem Matlab-Skript nochmal zu stehenden Vektoren transformiert. Diese Vektoren haben auch die benötigte Länge. Jedoch tritt dann der Fehler

Code:

Unable to perform assignment because the indices on the left side are not compatible with the size of the right side.
Error in Kraftstoffverbrauch_GUI (line 212)
    t(zaehler) = find(xii==(n_NEFZ(zaehler)));


auf. Obwohl die Indizes eigentlich gleich sein müssten. Auch die Längen der erstellten Vektoren t und n_NEFZ sind gleich. Von daher weiß ich nicht wo dieser Fehler herkommt.

Gruß
SparX
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: 28.08.2018, 20:26     Titel:
  Antworten mit Zitat      
Hallo,

das ganze ist etwas schwer nachvollziehbar. Ein reproduzierbares Beispiel (App + Skript) wäre hilfreich.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
SparX
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2018, 10:27     Titel:
  Antworten mit Zitat      
Guten Morgen,

ich habe das "Problem" jetzt etws anders gelöst. Ich erstellte jetzt in meinem Matlab-Skript einen Vektor, der sich auch die Eingaben in der App bezieht. So läuft es ohne Probleme.

Ein neues Problem ist die Programmierung eines Check-Kästchens. Ich habe in meiner App mittlerweile mehrere Tabs, die unterschiedliche Funktionen beinhalten. Nun möchte ich in einem Tab ein Diagramm erstellen, das erst ausgeführt wird, wenn ein Button in einem anderen Tab gedrückt wird.

Bisher sieht mein Ansatz dazu so aus:

Code:
       % Button pushed function: Start
        function StartButtonPushed(app, event)
           
           
            % Funktionen der Fahrzyklen
          Check_NEFZ_ValueChanged(app,event)
          plot(app.Fahrzyklus_NEFZ,t_NEFZ,v_NEFZ_kmh);

% Value changed function: Check_NEFZ
        function Check_NEFZValueChanged(app, event)
            value = app.Check_NEFZ.Value;
           
            if value == 1
                Fahrzyklus_NEFZ_GUI
                t_NEFZ = t_NEFZ;
                v_NEFZ_kmh = v_NEFZ_kmh;
            else
                t_NEFZ = 0;
                v_NEFZ_kmh = 0;
            end
        end


Allerdings funktioniert der Check_NEFZ_ValueChanged, bzw. die Bedingung der Check-Box noch nicht.

Gruß
SparX
Private Nachricht senden Benutzer-Profile anzeigen
 
SparX
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2018, 13:37     Titel:
  Antworten mit Zitat      
Ich konnte das Problem durch eine einfache "if"-Schleife lösen.

Gibt es eine Möglichkeit die Eigenschaften der "Axis"-plots irgendwie zu ändern?

Ich würde gerne die Befehle

Code:
[C,h] = contour (xi,yi,Z_Diesel_mean,v5);
clabel(C,h)
xlabel ("Drehzahl [U/min]")
ylabel ("Mitteldruck [bar]")
legend ("Interpolierte Otto-Motoren")

hold on
plot(n_NEFZ,p_me_NEFZ,'o','MarkerEdgeColor','k',...
                'MarkerFaceColor','g',...
                'MarkerSize',10,'Linestyle','none')
hold off


in die Axis-Funktion einbinden.

Gruß
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: 29.08.2018, 17:59     Titel:
  Antworten mit Zitat      
Hallo,

als erstes Argument immer das Axes angeben, in dem du den Graphik-Befehl ausführen möchtest. Wenn du den Code in App Designer reinkopierst, bekommst du auch die entsprechenden Hinweise.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
SparX
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.08.2018, 09:28     Titel:
  Antworten mit Zitat      
Guten Morgen,

ich habe es mal an einem einfachen Beispiel probiert, das sich auf das MAatlab-Skript "Contour_Test_GUI" bezieht:

Code:
Contour_Test_GUI
            contour (app.UIAxes,x,y,Z);  
             hold (app.UIAxes)
            plot(app.UIAxes,x,y,'o','MarkerEdgeColor','k',...
                'MarkerFaceColor','g',...
                'MarkerSize',10,'Linestyle','none')
            h


Jedoch kann ich die contour-Linien nicht mit Werten beschriften.

Gibt es eine Möglichkeit, dass der Inhalt des App-Fensters immer zentriert wird? Ich habe das Problem, dass wenn ich das Fenster vergrößere die App nicht mehr zentral im Fenster sitzt. Leider kann man nicht nachträglich im Code ändern an welcher Stelle die verschiedenen Icons sitzen sollen.

Gruß,
SparX
Private Nachricht senden Benutzer-Profile anzeigen
 
SparX
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.08.2018, 11:35     Titel:
  Antworten mit Zitat      
SparX hat Folgendes geschrieben:
Guten Morgen,

ich habe es mal an einem einfachen Beispiel probiert, das sich auf das MAatlab-Skript "Contour_Test_GUI" bezieht:

Code:
Contour_Test_GUI
            contour (app.UIAxes,x,y,Z);  
             hold (app.UIAxes)
            plot(app.UIAxes,x,y,'o','MarkerEdgeColor','k',...
                'MarkerFaceColor','g',...
                'MarkerSize',10,'Linestyle','none')
            h


Jedoch kann ich die contour-Linien nicht mit Werten beschriften.

Gibt es eine Möglichkeit, dass der Inhalt des App-Fensters immer zentriert wird? Ich habe das Problem, dass wenn ich das Fenster vergrößere die App nicht mehr zentral im Fenster sitzt. Leider kann man nicht nachträglich im Code ändern an welcher Stelle die verschiedenen Icons sitzen sollen.

Gibt es weiterhin eine Möglichkeit durch einen Doppelklick auf das entstandene Diagramm dieses Diagramm groß in einem neuen Fenster zu öffnen?

Gruß,
SparX
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.