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

 

SparX
Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2018, 09:43     Titel: Matlab GUI getting started
  Antworten mit Zitat      
Hallo Matlab-Forum,

ich bin neu in der Welt der GUI-Entwicklung und muss für mein Projekt ein GUI programmieren.

Hierfür habe ich in den letzten Monaten ein Matlab-Skript entwickelt, das den Kraftstoffverbrauch für verschiedene Fahrzyklen berechnen kann. Für dieses Skript würde ich dazu gerne ein grafische Oberfläche erstellen.

Das Matlab-Skript besitzt dabei mehrere Eingabewerte und Auswahlmöglichkeiten zu Fahrzyklen und abhängigen Größen sowie die eigentlichen Berechnungen, die für den Verbrauch benötigt werden.

Ist es möglich den Code aus dem Matlab-Skript in ein GUI einfach zu übertragen? Bisher habe ich versucht ein paar Tutorials nachzuprogrammieren, aber bisher eher erfolglos, da ich mich nicht mit objektbezogener Programmierung auskenne.

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: 24.08.2018, 10:08     Titel:
  Antworten mit Zitat      
Hallo,

hast du dir mal das Tutorial von App Designer angesehen?
Code:
appdesigner

und dann Open --> Interactive Tutorial.

Bei konkreten Fragen kannst du dich ja melden.

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: 24.08.2018, 11:47     Titel:
  Antworten mit Zitat      
Hallo Harald,

die Frage ist, wie ich die einzelnen Objekte mit meinem Matlab-Code belegen kann. Das Tutorial ist zwar interessant, aber sehr kurz und hilft mir da nicht wirklich weiter. Ich kann das GUI zwar mit Objekten belegen wie es mir vorstelle, aber keine Funktionen zuordnen.

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: 24.08.2018, 12:08     Titel:
  Antworten mit Zitat      
Hallo,

es gibt an verschiedenen Stellen (im Design View rechts unten, im Code View links oben) die Möglichkeit, Callbacks für Objekte hinzuzufügen.

Auf Youtube:
https://www.youtube.com/watch?v=nQb0qBiDurU
https://www.youtube.com/watch?v=cl0AcnN3Bmk (ab Minute 36)

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, 08:48     Titel:
  Antworten mit Zitat      
Guten Morgen,

nachdem ich jetzt die ein paar weitere Tutorials gesehen habe, habe ich doch noch ein paar Fragen.

In allen Tutorials werden bisher nur einfache Zahlenbeispiele gezeigt, aber keine Rechnungen mit Vektoren. Können diese auch "so einfach" wie in Matlab ausgeführt werden?

Können for-Schleifen genauso programmiert werden wie in Matlab selbst?

Auch habe ich den import von Daten aus Excel-Tabellen noch nicht genau verstanden.

Kann ich meine gewünschten Variablen genau wie in Matlab über

Code:
a = uigetfile('Beispiel.xls', 'A1:A100');


bestimmen?

Grüße,
SparX

Zuletzt bearbeitet von SparX am 27.08.2018, 09:02, 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, 09:00     Titel:
  Antworten mit Zitat      
Hallo,

in den Callbacks kannst du "ganz normal" wie sonst auch in MATLAB arbeiten.

Wenn du schon Funktionen geschrieben hast, kannst du sie insbesondere auch aus App Designer heraus aufrufen.

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, 09:07     Titel:
  Antworten mit Zitat      
Hallo,

wäre das dann der richtige Weg?


Code:
methods (Access = private)
   
        function results = func(app)
           
% Simulation der Gangwechsel und Beschleunigungskräfte

v_NEFZ = uigetfile ("C:\Users\Documents\MATLAB\NEFZ.xlsx","A7:A1190");

k=1; % Startgang

for zaehler=1:length(v_NEFZ_mean) % Da v_NEFZ_mean + v_wind

n_NEFZ(zaehler)=round ((v_NEFZ_mean(zaehler)+v_wind_NEFZ(zaehler))*60*i_Achse*i_Getriebe(k))/(2*pi*r_dyn));
F_a_NEFZ(zaehler) = e_Masse(k).*m*a_NEFZ(zaehler) ; % Da e_Masse abhängig von eingelegtem Gang, muss lambda in dieser Schleife berechent werden!
       
    if n_NEFZ(zaehler) > 3000
         k = k + 1;
     elseif n_NEFZ(zaehler) < 1500 && k>1
         k = k - 1; % Hier kann i = 0 werden, Matlab kennt i(0) aber nicht!
     else n_NEFZ(zaehler) < 800
        k = k;
     end
end

% Antriebsleistungen der Fahrzyklen, bzw. Bedarfsleistungen

F_Bedarf_NEFZ = ((F_R_NEFZ)+(F_L_NEFZ)+(F_a_NEFZ)+(F_St_NEFZ)); % Kraft in [N]
P_Bedarf_NEFZ = (1/eta_Triebstrang)*(1/(1-lambda_K))*(F_Bedarf_NEFZ.*(v_NEFZ_mean+v_wind_NEFZ))/1000;

% Berechnung der Mitteldrücke

p_me_NEFZ = (P_Bedarf_NEFZ./n_NEFZ)*((1200)/(V_H));

        end
       
    end


Edit: Okay, das Definieren der Variable v_NEFZ scheint so wohl nicht zu funktionieren.

Gruß

Zuletzt bearbeitet von SparX am 27.08.2018, 09:20, 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, 09:16     Titel:
  Antworten mit Zitat      
Hallo,

insofern, dass du eine private Funktion hinzugefügt hast: ja.

Die Frage ist aber, wo Daten wie v_NEFZ_mean herkommen sollen.

Oft ist es so, dass die Daten über eine Schaltfläche geladen werden. Dann kannst du zusätzliche properties anlegen, so dass die Daten innerhalb der App gespeichert bleiben. Über app.<property> kannst du dann wieder an die Daten herankommen.

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, 09:33     Titel:
  Antworten mit Zitat      
Die Daten sollen aus einer externen Exceltabelle geladen werden, die NEFZ heißt.

Aus dieser Tabelle sollen dann verscheidene Vektoren als input erstellt werden. Allerdings kann ich bisher nicht die Reihen der Exceltabelle angeben, in denen sich die Daten befinden.

In Matlab geht das je ganz schnell über

Code:
v_NEFZ_mean = xlsread ("NEFZ.xls","A:1:A1000")


aber im App Designer gibt es wohl diese Funktion nicht. Gibt es etwas ähnliches?

Edit: Habe gerade gesehen, dass es den Befehl

Code:


gibt. Werde es mal damit probieren.

Edit2: Habe es bisher mal mit

Code:
Fahrzyklen_m = uigetfile('Fahrzyklen.m');
            Kraftstoffverbrauch_m = uigetfile ('Kraftstoffverbrauch.m');
            Regression_cW_Wert_m = uigetfile ('Regression_cW_Wert.m');
            Verbrauchskennfelder_m = uigetfile ('Verbrauchskennfelder_gesamt_richtige_Achsen.m');
            Fahrzyklen_mat = uigetfile ('Fahrzyklen.mat');
            Verbrauchskennfelder_mat = uigetfile ('Verbrauchskennfelder_ gesamt.mat');
            c_W_Wert_Polynome_mat = uigefile ('c_W_Wert_Polynome.mat');
 


probiert. Werden die benötigten Vektoren dann automatisch geladen?

Gruß

Zuletzt bearbeitet von SparX am 27.08.2018, 10:23, insgesamt 2-mal 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, 10:06     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
aber im App Designer gibt es wohl diese Funktion nicht.

Wie kommst du darauf? xlsread kannst du auch in App Designer verwenden.
In der Range ist allerdings ein : zuviel.

Die Idee von uigetfile ist, dass man interaktiv einen Dateinamen auswählt. Als Filter würde ich etwas wie '*.xlsx' angeben. Kompletter Dateiname ist unüblich.
Anschließend muss die Datei dann noch verarbeitet werden, z.B. mit xlsread.

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, 10:31     Titel:
  Antworten mit Zitat      
Als ich die Befehle aus Matlab 1:1 kopiert habe, zeigte mir die App an, dass bspw. die Geschwindigkeit v_NEFZ nicht definiert wäre. Daher ging ich davon aus, dass xlsread nicht funktioniert.

An sich möchte ich auch nicht irgendwelche Files reinladen, sondern die von mir erstellten. Daher habe ich die Namen komplett angegeben.

Allgemein komme ich auch nicht mit den Befehlen klar. Ich kann z.B. mir auch keinen plot erstellen, den ich mit dem Drücken eines Buttons erst erstellen möchte, da ich die zusammenhänge der Befehle innerhalb des App Designers noch nicht verstehe.

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, 10:46     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Als ich die Befehle aus Matlab 1:1 kopiert habe, zeigte mir die App an, dass bspw. die Geschwindigkeit v_NEFZ nicht definiert wäre.

Wie gesagt:
Zitat:
Dann kannst du zusätzliche properties anlegen, so dass die Daten innerhalb der App gespeichert bleiben. Über app.<property> kannst du dann wieder an die Daten herankommen.


Zitat:
An sich möchte ich auch nicht irgendwelche Files reinladen, sondern die von mir erstellten. Daher habe ich die Namen komplett angegeben.

.m-Dateien solltest du aber nicht "reinladen", sondern ausführen.

Zitat:
Ich kann z.B. mir auch keinen plot erstellen

Geht wie in MATLAB auch. Du musst nur als erstes Argument ein axes angeben, z.B. app.UIAxes1

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, 11:20     Titel:
  Antworten mit Zitat      
Also reicht es nachdem ich die input-Variablen in der App über eine Eingabe definiert habe das .m-File auszuführen?

Muss dann das .m-File dann in die Funktion eines Buttons integriert werden oder an eine andere Stelle.

Das hat mir bisher sehr geholfen. Ich hatte die Befürchtung, dass ich alles nochmal komplett neu programmieren müsste.

Benötigt man dann für das Ausführen des .m-Files einen neuen Befehl? Ist es dann wichtig wann die Eingabe erfolgt? Im Matlab-Skript müssen die Variablen ja vor den Gleichungen definiert werden.

Gruß

Zuletzt bearbeitet von SparX am 27.08.2018, 11:32, 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, 11:31     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Also reicht es nachdem ich die input-Variablen in der App über eine Eingabe definiert habe das .m-File auszuführen?

Die Frage ist, was du mit input-Variablen und Eingabe meinst. Die Callbacks haben getrennte Arbeitsbereiche. Wie du damit umgehen kannst, siehe vorherige Antwort.

Zitat:
Muss dann das .m-File dann in die Funktion eines Buttons integriert werden oder an eine andere Stelle.

Ich würde .m-Dateien nicht integrieren, sondern aufrufen. Wenn eine Funktion als Reaktion auf das Drücken eines Buttons ausgeführt werden soll, dann musst du sie im Callback dieses Buttons aufrufen.

Zitat:
Benötigt man dann für das Ausführen des .m-Files einen neuen Befehl?

Nein. Du kannst Skripte oder Funktionen genauso aufrufen wie z.B. vom Command Window. Ich würde Funktionen bevorzugen, weil dort die Schnittstelle (Ein- und Ausgabeargumente) klar definiert ist. Beim Funktionsaufruf musst du dann die benötigten Inputs an die Funktion übergeben und die benötigten Outputs zurückholen, also z.B.
Code:
[a,b] = myfun(c, d)

Wenn a - d Eigenschaften der App sind, dann
Code:
[app.a,app.b] = myfun(app.c, app.d)


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, 12:41     Titel:
  Antworten mit Zitat      
Okay, nehmen wir an ich habe 2 Eingabefelder, die mit zahlenwerten belegt werden müssen und das Matlab-Skript soll dann mit Hilfe eines Buttons ausgeführt werden.

Ist dann der Code so richtig:

Code:
a = app.val1.Value    (Name des Eingabefelds = val1)
b = app.val2.Value    (Name des Eingabefelds = val2)

app.result.Value = uigetfile ('Kraftstoffverbrauch.m');


Greift dann das kraftstoffverbrauch-Skript so direkt auf die Eingaben a und b zu?

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