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

Plots in GUI erstellen

 

PlooserX
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 03.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 14:13     Titel: Plots in GUI erstellen
  Antworten mit Zitat      
Moin,

ich habe die Aufgabe bekommen von einem vorhandenen und lauffähigen Programm eine GUI Oberfläche zu erstellen.
in dem Programm werden 2 Subplots in einem Figure erstellt.
Ich probieren jetzt schon seit längerem diese 2 Plots in meine Gui einzubauen. Nur leider gelingt es mir nicht, denn ich habe nur sehr wenig Ahnung von MatLab.
Das C# programmieren liegt mir irgendwie mehr.

Code:

    subplot (2,1,1)
    plot(importdaten(1:200,1), importdaten(1:200,3));
    title('Winkel')
    xlabel('Abtastzeit t [s]')
    ylabel('Auslenkung [V]')
    grid on;
    subplot (2,1,2)
    plot(importdaten(1:200,1), importdaten(1:200,5));
    title('Strom')
    xlabel('Abtastzeit t [s]')
    ylabel('Strom [A]')
    grid on;
    clearvars i puffer s str;
 


Das ist der Code. Wie bekomme ich nun diese beiden Plots in meine GUI/Axes rein(axes1,axes2)?
Dieser Code wird in einer anderen .m-Datei ausgeführt.
Die GUI heißt autotune.m.

Ich wäre euch sehr dankbar, wenn ihr mir da ein wenig helfen könntet.

Gruß PlooserX
Private Nachricht senden Benutzer-Profile anzeigen


PlooserX
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 03.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 16:09     Titel:
  Antworten mit Zitat      
sooo, ich hab es jetzt schon einmal ein wenig hinbekommen.
Und zwar mit dem Code hier:
Code:

    %% Daten plotten
    %figure();
    %subplot (2,1,1)
    h = findobj('tag', 'axes6');
    plot(h, importdaten(1:200,1), importdaten(1:200,3));
    title('Winkel')
    xlabel('Abtastzeit t [s]')
    ylabel('Auslenkung [V]')
    grid on;
   
    %subplot (2,1,2)
    i = findobj('tag', 'axes7');
    plot(i, importdaten(1:200,1), importdaten(1:200,5));
    title('Strom')
    xlabel('Abtastzeit t [s]')
    ylabel('Strom [A]')
    grid on;
    clearvars i puffer s str;
 


mein Problem ist jetzt allerdings noch, die erste Darstellung der Werte passt. Wenn ich in den selben 'axes' die Werte aktualisiere, bis zu 20 mal alle 3 sek., dann werden die 'axes' sehr groß.
Quasi ein Hintergrundbild der GUI.
Was kann man da tun???
Private Nachricht senden Benutzer-Profile anzeigen
 
Rek

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 18:27     Titel:
  Antworten mit Zitat      
du meinst woll "axis" also die Skalierung der zugehörigen Achsensysteme?
in dem Fall mal in der Hilfe nach axis-Befehlen suchen -> so was wie axis tight...etc
sollte dir da helfen...

mfg
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.06.2013, 07:25     Titel:
  Antworten mit Zitat      
Hallo PlooserX,

Zitat:
mein Problem ist jetzt allerdings noch, die erste Darstellung der Werte passt.

Diesen Satz verstehe ich nicht.

Zitat:
Wenn ich in den selben 'axes' die Werte aktualisiere, bis zu 20 mal alle 3 sek., dann werden die 'axes' sehr groß.
Quasi ein Hintergrundbild der GUI.

Wie aktualisierst Du die Werte? Kannst Du uns den entsprechenden code zeigen? Und was bedeutet "groß"?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
PlooserX
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 03.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2013, 10:30     Titel:
  Antworten mit Zitat      
Moin,

sorry das ich mich nicht mehr gemeldet habe. War leider eine Zeitlang verhindert und konnte nicht weiter machen.
Es hat sich aber dennoch etwas geändert.
Den anderen ganzen Code hier einzustellen ist ziemlich problematisch und würde auch nicht wirklich weiter helfen denk ich.
Was vllt noch helfen würde, ist:

Meine GUI greift auf eine .m Datei zu die sich import_1 nennt.
Dabei wird das erste mal eine Winkel und eine Stromkennlinie in die Graphen geschrieben. Hier erscheint auch eine Abfrage ob die Linien gut aussehen.

Code:
% Daten plotten

    r = findobj('tag', 'Winkel');
    set(gcf,'CurrentAxes',r);
    plot(r, importdaten(1:200,1), importdaten(1:200,3));
    title('Winkel')
    xlabel('Abtastzeit t [s]')
    ylabel('Auslenkung [V]')
    grid on;
   
    s = findobj('tag', 'Strom');
    set(gcf,'CurrentAxes',s);
    plot(s, importdaten(1:200,1), importdaten(1:200,5));
    title('Strom')
    xlabel('Abtastzeit t [s]')
    ylabel('Strom [A]')
    grid on;
    clearvars i puffer s str;


Die funktioniert inwzischen Problemlos.


Wenn die Abfrage mit OK bestätigt wurde, dann fängt eine Regelung an zu arbeiten und modifiziert diese Kurven.
Dies passiert allerdings aus einer 2. .m Datei (import_2)
und hier hackt es jetzt auch:

Code:
   %% Daten plotten

    plot(importdaten(1:200,1), importdaten(1:200,3));
    title('Winkel')
    xlabel('Abtastzeit t [s]')
    ylabel('Auslenkung [V]')
    grid on;
   
    plot(importdaten(1:200,1), importdaten(1:200,5));
    title('Strom')
    xlabel('Abtastzeit t [s]')
    ylabel('Strom [A]')
    grid on;
    clearvars i puffer s str;
 


Der Graph mit dem Winkel ändert sich garnicht nach dem allerersten Durchgang und der Graph mit dem Strom funktioniert problemlos.

Ich habe jetzt auch schon probiert in der import_2 den selben Code wie in der import_1 zu benutzen. Dann erhalte ich allerdings den Fehler, dass die Vectoren gleich lang sein müssen.
Darauf hin dachte ich mir ich lösch den Inhalt der Graphen, aber das funktionierte leider auch nicht.

Hat einer eine Idee wie ich jetzt die Kennlinien in der import_2 aktualisiere ohne wieder Probleme damit zu haben!?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.06.2013, 11:30     Titel:
  Antworten mit Zitat      
Hallo PlooserX,

Ich verstehe das Problem nicht.
So weit ich es sehe, läuft der gepostete Code, oder?
Bitte poste dann den Code, der nicht läuft und eine Kopie der vollständigen Fehlermeldung.
"dachte ich mir ich lösch den Inhalt der Graphen" und "funktioniert leider nicht" erlaubt es nicht, einen Verbesserungsvorschlag zu machen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
PlooserX
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 03.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2013, 11:39     Titel:
  Antworten mit Zitat      
Grundsätzlich läuft das ganze, korrekt.
Nur funktioniert das aktualisieren des Winkels im Graphen nicht!
Der Strom hingegen wird aktualisiert.

Meine Idee war es dann den selben Code von der Import_1 auch im Import_2 zu verwenden. Das funktioniert dann allerdings nicht mehr.

Code;
Code:

    % Daten plotten
    t = findobj('tag', 'Winkel');
    set(gcf,'CurrentAxes',t);
    plot(t, importdaten(1:200,1), importdaten(1:200,3));
    title('Winkel')
    xlabel('Abtastzeit t [s]')
    ylabel('Auslenkung [V]')
    grid on;

    u = findobj('tag', 'Strom');
    set(gcf,'CurrentAxes',u);
    plot(u, importdaten(1:200,1), importdaten(1:200,5));
    title('Strom')
    xlabel('Abtastzeit t [s]')
    ylabel('Strom [A]')
    grid on;
    clearvars i puffer s str;
 


Fehlermeldung;

Error using plot
Vectors must be the same lengths.

Error in import_cp10_2 (line 142)
plot(t, importdaten(1:200,1), importdaten(1:200,3));

Error in optfun (line 24)
[importdaten] = import_cp10_2(spiegel); % Wir überschreiben die
simulierten Daten...

Error in scanner_opt (line 30)
optfun(xpar); % Berechnet den ersten
Gütevektor. Achtung:

Error in Autotuner>btnTuneX_Callback (line 143)
[xparopt, PI, indopt, XPAR] = scanner_opt(optparnames, optparbounds, ndis, alg);

Error in gui_mainfcn (line 96)
feval(varargin{:});

Error in Autotuner (line 19)
gui_mainfcn(gui_State, varargin{:});

Error in @(hObject,eventdata)Autotuner('btnTuneX_Callback',hObject,eventdata,guidata(hObject))


Error while evaluating uicontrol Callback


MFG
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.06.2013, 12:31     Titel:
  Antworten mit Zitat      
Hallo PlooserX,

Bitte benutze den Debugger um herauszufinden, wo das Problem liegt. Du kannst einen Breakpoint in die entsprechende Zeile setzen und Dir den Inhalt von "t" anschauen: Entweder es wird kein oder mehrere Objekte mit dem Tag 'Winkel' gefunden. Wenn dann der Handle als erstes Input verwendet wird, kann Matlab es nicht von einem Daten-Vektor unterscheiden.

Es ist übrigens tückisch, all Grafik-Objekte nach einem bestimmten Tag zu durchsuchen. Erstens können das in einem komplexen GUI sehr viele Objekte sein, so dass die Suche lange dauert. Andererseits könnten auch mehrere GUIs gleichzeitig geöffnet sein, so dass die Suche nicht mehr eindeutig wird.
Besser wäre es also nur innerhalb der aktuellen Figure zu suchen oder noch besser sich den Handle gleich lokal zu speichern (guidata, set(figureH, 'UserData'), etc).

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
PlooserX
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 03.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2013, 14:03     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank für deine Bemühungen. Ich war in der zwischenzeit nicht ganz tatenlos und habe eine Lösung gefunden.

Und zwar hab ich in dem Code meiner GUI zwei Globale Variablen festgelegt:
Code:

  WINKEL = handles.Winkel;
  STROM = handles.Strom;


diese übergebe ich an beide .m files
der Code in beiden Files sieht dann so aus.

Code:

    % Daten plotten
    set(gcf,'CurrentAxes',WINKEL);
    plot(WINKEL, importdaten(1:200,1), importdaten(1:200,3));
    title('Winkel')
    xlabel('Abtastzeit t [s]')
    ylabel('Auslenkung [V]')
    grid on;
   
    set(gcf,'CurrentAxes',STROM);
    plot(STROM, importdaten(1:200,1), importdaten(1:200,5));
    title('Strom')
    xlabel('Abtastzeit t [s]')
    ylabel('Strom [A]')
    grid on;
    clearvars i puffer s str;
 


Das funktioniert anstandslos und macht mich ein wenig Glücklich nach dem ewigen rumprobiere.
Ich kann zwar nicht beurteilen ob das eine elegante Lösung ist, daber es funktioniert.

Vielen Dank nochmal!
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 - 2025 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.