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

Realtime Plot in GUI

 

Harald
Forum-Meister

Forum-Meister


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

mach mal
Code:

und lass das dann nochmal laufen.

Welche Dimensionen haben XData und YData dann?
Welche Dimensionen hat guiplot?
Was ist die Rückgabe von
Code:
get(guiplot, 'type')

?

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


David1988

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2014, 10:46     Titel:
  Antworten mit Zitat      
Hallo,

ich hab jetzt folgendes versucht:

@Phil1988:

Ich habe Matlab mal neugestartet und die Simulation per GUI laufen lassen. Die Fehlermeldung erscheint jetzt nicht mehr! Soweit, so gut... Smile Allerdings startet die Simulation des Modells und beendet sich einfach von selbst bei einer Simulationszeit von 0,7s (StopTime sind bspw. 10s) ohne Angabe von Fehlern/Gründen oder ähnliches.

Dann ist mir aufgefallen, dass ich ein Modell mit dem Format .mdl laufen lasse. Da ich aber mittlerweile Matlab R2013a nutze und dort die Modelle das Format .slx verwenden, habe ich per copy and paste mein Modell ins .slx Format "konvertiert". Anschließend habe ich das Modell neu simulieren lassen und krieg jetzt nach oben genannter Zeit diese Fehlermeldung des Real-Time Synchronization Blocks:

Code:

Error reported by S-function 'rtwinsync' in 'Dreitanksystem/Real-Time Synchronization':
Maximum missed ticks count exceeded
 


Weiterhin wird also nur 1 Punkt gezeichnet, mehr nicht...

@ Harald:

Wie oben schon beschrieben, gibt es diese Fehlermeldung jetzt nicht mehr, dafür eine andere... Dementsprechend funktioniert dein Lösungsansatz hier nicht mehr, trotzdem schon mal danke dafür Smile

@ Sp0b1e

Wie kann ich denn Werte in einem axes-Block in der GUI mittels dem set-Befehl darstellen lassen? Ich hab da jetzt keine Vorstellung oder Ideen, wie das funktionieren könnte.

Edit: Kleines Update von mir nochmal Wink

Stand der Dinge ist jetzt, dass ich die oben genannte Fehlermeldung aushebeln konnte, indem ich die "Missed Ticks" des Real-Time Synchronization Blocks hochgesetzt habe! Je kleiner meine "Max Step Size" des Systems ist, desto höher muss ich den Wert der "Missed Ticks" setzen... Gibts da noch eine bessere Variante?

Jetzt wird in meiner axes kontinuierlich ein Punkt mit zunehmender Zeit gemalt. Ich hätte allerdings eine komplette Linie... wie würde das da aussehen?

Damit ihr versteht, was ich vor habe und wie ich was gemacht habe, habe ich schnell eine Art Minimalbeispiel erstellt, wo ihr euch schnell zurechtfinden solltet . Wink Es mag vielleicht nicht optimal sein, aber bisher sieht das für meine Begriffe sehr gut aus Smile

Vielen vielen Dank für eure bisherige Hilfe Very Happy

Grüße,
David

updategui.m
 Beschreibung:
updategui

Download
 Dateiname:  updategui.m
 Dateigröße:  733 Bytes
 Heruntergeladen:  516 mal
DTS.slx
 Beschreibung:
Simulink-Modell

Download
 Dateiname:  DTS.slx
 Dateigröße:  17.79 KB
 Heruntergeladen:  432 mal
DTS_GUI.m
 Beschreibung:
GUI m-File

Download
 Dateiname:  DTS_GUI.m
 Dateigröße:  3.34 KB
 Heruntergeladen:  523 mal
DTS_GUI.fig
 Beschreibung:
GUI-Oberfläche

Download
 Dateiname:  DTS_GUI.fig
 Dateigröße:  3.93 KB
 Heruntergeladen:  478 mal
 
Harald
Forum-Meister

Forum-Meister


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

im Anhang eine angepasste updategui.m

Beim ersten Mal wird ein Plot generiert und das Handle gespeichert, bei den folgenden Aufrufen die bisherigen Daten ausgelesen und dann aktualisiert.

Grüße,
Harald

updategui.m
 Beschreibung:

Download
 Dateiname:  updategui.m
 Dateigröße:  1.01 KB
 Heruntergeladen:  503 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
David1988

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2014, 14:21     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für diese Lösung. Das funktioniert so weit super! Smile Aber wie ist es denn jetzt, wenn ich mehrere axes in einer GUI habe? Ich habe testweise eine weitere axes in die GUI gebaut, diese aber nirgendwo angesprochen. Sie ist sozusagen einfach nur da. Dann funktioniert die Skalierung der Achsen, die du eingebaut hast, nicht mehr... genauso wenig wie das Gitternetz, was ich selbstständig noch hinzugefügt habe...

Das was ich letzendlich erreichen will ist, dass in der GUI 3 Kurven parallel in je einer axes zeitgleich gemäß der Simulation gezeichnet werden... Meine Idee war, wenn es funktioniert in einem Minimalbeispiel eine Kurve kontinuierlich zeichnen zu lassen, dass dann einfach auf 3 axes zu erweitern, aber so einfach scheint das wohl nicht zu sein Confused Ist das überhaupt irgendwie möglich?

Nachdem ich den Start-Button das erste Mal betätigt habe, die Simulation abgeschlossen ist und ich den Button nochmals betätige soll der plot vorher resettet werden, sodass die Kurve neu gezeichnet wird. Ich habe das mithilfe des Befehls "cla" versucht, aber das funktioniert auch irgendwie nicht...

Danke nochmal für deine bisherige Hilfe Smile

Gruß,

David
 
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.02.2014, 14:24     Titel:
  Antworten mit Zitat      
Hallo,

wenn du mit mehreren Koordinatensystemen arbeitest, solltest du immer explizit angeben, was in welchem gemacht werden soll, also beispielsweise statt
Code:
dann etwas wie
Code:
plot(handles.axes1, x,y)


Ähnliche Möglichkeiten gibt es bei praktisch allen Graphikbefehlen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2014, 17:29     Titel:
  Antworten mit Zitat      
Alles klar, jetzt hab ichs Smile Vielen vielen dank für deine Hilfe Harald, du hast mir sehr weitergeholfen Wink

Gruß,

David
 
DAFeinfach
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 07.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2017, 16:37     Titel:
  Antworten mit Zitat      
Hallo Philp,

ich habe deine Dokumente bei Matalb2016a genutzt. Leider gibt es kein Graph bei axesplot. Gibt es noch einige Fehler bei dein Programm ? Kannst du mir helfen ?
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: 08.06.2017, 19:09     Titel:
  Antworten mit Zitat      
Hallo,

die Beiträge hier habe ich vor über 3 Jahren geschrieben.
Bitte poste genau, was du verwendest und welche Probleme dabei auftreten.

Zitat:
Gibt es noch einige Fehler bei dein Programm ?

Das kann man nicht ausschließen. Für den Fragesteller scheint es aber ja funktioniert zu haben. Du verwendest das also in irgendeiner Form anders als der Fragesteller. Inwiefern, kann ich nicht erahnen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DAFeinfach
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 07.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.06.2017, 20:26     Titel:
  Antworten mit Zitat      
Code:
function varargout = update_gui(varargin)

persistent plot_handle
%create a run time object that can return the value of the outport block's
%input and then put the value in a string
rto1 = get_param('Beispiel4_sim/simout','RuntimeObject');


% create str from rto1
str = num2str(rto1.InputPort(1).Data);

% get a handle to the GUI's 'edit_display' window
display = findobj('Tag','edit_display');

% update the gui
set(display,'string',str);

% get Data from Simulation
XData = get_param('Beispiel4_sim','SimulationTime');
YData = rto1.InputPort(1).Data;


% save Data to workspace
assignin('base','XData',XData)
assignin('base','YData',YData)


% real-time plot

if isempty(plot_handle) || ~ishandle(plot_handle)
    guiplot=findobj(0, 'Tag','axesplot');
    plot_handle = plot(guiplot, XData, YData);
else
    XData_old = get(plot_handle, 'XData');
    YData_old = get(plot_handle, 'YData');
    XData = [XData_old, XData];
    YData = [YData_old, YData];
    set(plot_handle, 'XData', XData)
    set(plot_handle, 'YData', YData)
    axis([0 20 0 10])
    drawnow
end
 


update_gui.m
 Beschreibung:
Hallo Harald,

mit die Code bei update_gui.m kann man bei erste Mal erfolgreich echtzeitfähig simulieren. Aber für das zweite Mal scheint Fehlermeldung bei Command Window wie Warning: Error occurred while evaluating listener callback.
??? Error using =

Download
 Dateiname:  update_gui.m
 Dateigröße:  1.08 KB
 Heruntergeladen:  364 mal
Beispiel4_sim.slx
 Beschreibung:

Download
 Dateiname:  Beispiel4_sim.slx
 Dateigröße:  16.96 KB
 Heruntergeladen:  343 mal
Beispiel4_gui.m
 Beschreibung:

Download
 Dateiname:  Beispiel4_gui.m
 Dateigröße:  7.11 KB
 Heruntergeladen:  373 mal
Beispiel4_gui.fig
 Beschreibung:

Download
 Dateiname:  Beispiel4_gui.fig
 Dateigröße:  23 KB
 Heruntergeladen:  377 mal
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: 08.06.2017, 22:09     Titel:
  Antworten mit Zitat      
Hallo,

Problem ist, dass die Tag-Eigenschaft irgendwo zurückgesetzt wird.
Schnelle Abhilfe:
Code:
guiplot=findobj(0, 'Type', 'axes');

in Zeile 31 von update_gui.

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