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

Anzahl der Aufrufe Zählen von Timerfunktion

 

torro
Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 10.01.19
Wohnort: Ingolstadt
Version: 2018b, 2015a
     Beitrag Verfasst am: 20.02.2019, 09:24     Titel: Anzahl der Aufrufe Zählen von Timerfunktion
  Antworten mit Zitat      
Hallo,
ich brauche nochmal eure Hilfe bezüglich der Timerfunktion.

Der Timerfunktion Aufruf funktioniert jetzt soweit.

Problem: Ich möchte die Anzahl der Aufrufe von Timerfunktion zählen.

Habe es mit dem Befehl probiert. Funktioniert aber nicht.

Code:

function GUIUpdate(hObject, eventdata, handles)

if ~ispfield(handles,'Anzahl')
handles.Anzahl = 5;
else
handles.Anzahl = handles.Anzahl + 10;
end
 
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: 20.02.2019, 10:39     Titel:
  Antworten mit Zitat      
Hallo,

bitte schreibe immer dazu, was nicht funktioniert.
Ein Problem könnte sein, dass die Aktualisierung der Handles-Struktur fehlt.
Code:
guidata(hObject, handles)


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
 
torro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 10.01.19
Wohnort: Ingolstadt
Version: 2018b, 2015a
     Beitrag Verfasst am: 20.02.2019, 12:27     Titel:
  Antworten mit Zitat      
Ich bekomme immer noch die Fehlermeldung:

Undefined function 'ispfield' for input arguments of type 'struct'.
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: 20.02.2019, 12:41     Titel:
  Antworten mit Zitat      
Hallo,

es gibt keine Funktion ispfield in MATLAB. Sollte das eine selbst geschriebene Funktion sein, dann wird sie nicht gefunden.
Wenn ich raten sollte, dann ist wohl die Funktion isfield gemeint. Du wirst aber im Zweifelsfall besser wissen, was du dir beim Verwenden der nicht existierenden Funktion ispfield gedacht hast als ich.

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
 
torro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 10.01.19
Wohnort: Ingolstadt
Version: 2018b, 2015a
     Beitrag Verfasst am: 20.02.2019, 12:47     Titel:
  Antworten mit Zitat      
Ohje da hab ich mich wohl verschrieben.
Ich meinte die isfield Funktion.

Möglicherweise ist isfield aber nicht die Funktion mit der ich zu meinem Ergebnis komme.

Ich möchte ja die Anzahl der Aufrufe meiner TimerFunktion zählen, welche jede Sekunde aufgerufen wird, um danach immer die aktuelle Temperatur zu plotten, um das Verhalten der aktuellen Temperatur zu zeigen.
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: 20.02.2019, 13:46     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich möchte ja die Anzahl der Aufrufe meiner TimerFunktion zählen

Dann stellt sich mir die Frage: warum fängst du bei 5 und nicht bei 1 zu zählen an, und warum erhöhst du um 10 und nicht um 1?

Zitat:
welche jede Sekunde aufgerufen wird, um danach immer die aktuelle Temperatur zu plotten, um das Verhalten der aktuellen Temperatur zu zeigen.

Hier ist mir der Zusammenhang zur Fragestellung nicht klar.

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
 
torro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 10.01.19
Wohnort: Ingolstadt
Version: 2018b, 2015a
     Beitrag Verfasst am: 20.02.2019, 14:33     Titel:
  Antworten mit Zitat      
Die 5 als Anfangswert habe ich nur zum testen verwendet, genauso die zahl 10. Damit kann man den Sprung im Diagramm besser erkennen.
Also von den Zahlen nicht irritieren lassen.


Meine Timer Funktion wird jede Sekunde aufgerufen .Siehe hier im Opening Funktion:
Code:

handles.timer = timer('ExecutionMode','fixedRate',...
                'Period',1.0,...
                'TimerFcn',{@GUIUpdate,handles});
start(handles.timer);

 





Mein Ziel ist es einen Temperatursensorwert in Èchtzeit`bzw jede Sekunde in einem Diagramm darzustellen.
Meine aktueller Code in Timer Funktion:
Code:

function GUIUpdate(hObject, eventdata, handles)


if ~isfield(handles,'Anzahl')
handles.Anzahl = 1;
else
handles.Anzahl = handles.Anzahl + 1;
end



   
   

    xlim(handles.axesTemp,[handles.Anzahl-2  handles.Anzahl+2]);
    ylim(handles.axesTemp,[ -1  100]);
   
    handles.plot = plot(handles.axesTemp, handles.Anzahl, handles.Temperatur, 'k.-');
    %guidata(hObject,handles)  
   
    pause(0.01)
 



Mein aktuelles Problem:

Der Wert im handles.Anzahl bleibt immer im y-wert bei 2. Funtion wird ausgeführt.

Wenn ich schreibe mit (hObject habe ich bei Timerfunktion hinzugefügt 'TimerFcn',{@GUIUpdate,hObject,handles}); Funktion wird hier nicht mehr ausgeführt wegen Fehlermeldung


guidata(hObject,handles)
gibt es eine Fehlermeldung
Too many input arguments.
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: 20.02.2019, 16:18     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Der Wert im handles.Anzahl bleibt immer im y-wert bei 2. Funtion wird ausgeführt.

Das verstehe ich sprachlich nicht. Ist das schon das Problem? Was soll passieren, und was passiert stattdessen?

Zitat:
Wenn ich schreibe mit (hObject habe ich bei Timerfunktion hinzugefügt 'TimerFcn',{@GUIUpdate,hObject,handles});

Auch das verstehe ich nicht recht. Zur Schnittstelle hattest du ja erst eine Frage? Es kann das ganze erleichtern, wenn du
Code:
guidata(handles.figure1, handles)

verwendest.

Generell würde ich eher setappdata verwenden um Daten in einer GUIDE-GUI zu verwalten, und eher App Designer als GUIDE.

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
 
torro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 10.01.19
Wohnort: Ingolstadt
Version: 2018b, 2015a
     Beitrag Verfasst am: 20.02.2019, 16:44     Titel:
  Antworten mit Zitat      
Aktuell:
Plottet nur einen x-Wert. d.h. die Grafik aktualisiert quasi den Temperaturwert (y-Wert) ständig (soll auch so sein). Der X-Wert ist aber immer der gleiche (dieser soll mit der Zeit immer zunehmen = also immer Größer werden)


Ziel soll es sein: Durch zählen der Aufrufe der Time Funktion die werte der x-Achse pro Zählvorgang um 1 zu erhöhen.

Damit ergibt sich ein Plot der die Temperatur(y-Wert) abhänig von der Zeit (x-Wert) anzeigt.


Eine Idee von mir wäre noch die x und y Werte in einen Vektor speichern und den plotten, aber ich weiß nicht wie das geht.


Appdesginer kann ich nicht verwenden, da ich in meinem GUI auch 3D Plotts habe und daher bekanntermaßen auf den GUI zurückgreifen muss.
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: 20.02.2019, 17:09     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Der X-Wert ist aber immer der gleiche (dieser soll mit der Zeit immer zunehmen = also immer Größer werden)

Hast du denn den guidata-Befehl eingefügt? Dann sollte das klappen.

Zitat:
Eine Idee von mir wäre noch die x und y Werte in einen Vektor speichern

Im Zweifelsfall auch an die Handles-Struktur anhängen.

Zitat:
Appdesginer kann ich nicht verwenden, da ich in meinem GUI auch 3D Plotts habe und daher bekanntermaßen auf den GUI zurückgreifen muss.

In R2018b eigentlich nicht mehr.
https://www.mathworks.com/help/rele.....p-designer.html#bu4x860-1Falls du ein älteres Release verwendest, das bitte angeben oder am besten ins Profil eintragen.

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
 
torro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 10.01.19
Wohnort: Ingolstadt
Version: 2018b, 2015a
     Beitrag Verfasst am: 27.02.2019, 09:39     Titel:
  Antworten mit Zitat      
Hallo,
konnte mich leider Krankheitsbedingt nicht melden.

Guiddata habe ich eingefügt. Jedoch ändert das nichts.


Bin ratlos




Das mit AppDesigner wusste ich nicht. Habe erst seit kurzem Matlab 2018b.
Private Nachricht senden Benutzer-Profile anzeigen
 
torro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 10.01.19
Wohnort: Ingolstadt
Version: 2018b, 2015a
     Beitrag Verfasst am: 27.02.2019, 11:30     Titel:
  Antworten mit Zitat      
Prinzipiell scheitere ich meiner Meinung nach am folgendem Problem:


Im Opening Funktion initialisiere ich meine Variable:
Code:

handles.Anzahl=0;
 


In meiner TimerFunktion zähle ich bei jedem Aufruf handles.Anzahl um 1 hoch, um bei meinem Plot pro Temperaturwert einen X-Wert zuzuweisen
Code:

handles.Anzahl = handles.Anzahl + 1;
 
    handles.plot = plot(handles.axesTemp, handles.Anzahl, handles.Temperatur, 'k.-');
    guidata(hObject,handles)  
    xlim(handles.axesTemp,[handles.Anzahl-2  handles.Anzahl+2]);
    ylim(handles.axesTemp,[ -1  100]);
   
    pause(0.01)
 
.




Beim ersten Durchgang wird handles.Anzahl auf 1 gesetzt. Bevor der 2 Durchgang startet wird aber handles.Anzahl wieder auf 0 gesetzt.


Wieso macht er das und wie kann ich das verhindern??


Ich brauche irgendeinen Counter oder ähnliches, der sich nicht bei jedem Timer Aufruf auf 0 setzt.
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.02.2019, 18:30     Titel:
  Antworten mit Zitat      
Hallo,

um das nachzuvollziehen, bräuchte ich ein reproduzierbares Beispiel (.m + .fig).

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
 
torro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 10.01.19
Wohnort: Ingolstadt
Version: 2018b, 2015a
     Beitrag Verfasst am: 28.02.2019, 15:32     Titel:
  Antworten mit Zitat      
Das geht leider nicht:

Man braucht einen Kontakt zum Temperatursensor.
Private Nachricht senden Benutzer-Profile anzeigen
 
torro
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 10.01.19
Wohnort: Ingolstadt
Version: 2018b, 2015a
     Beitrag Verfasst am: 01.03.2019, 09:14     Titel:
  Antworten mit Zitat      
Ich brauche einen Zähler, der die Aufrufe meiner Timer Funktion mitzählt.


habe es aktuelll so:

Opening Funktion:
Code:

setappdata( gcf, 'Zeitcounter',0);
handles.timer = timer('ExecutionMode','fixedRate',...
                'Period',0.5,...
                'TimerFcn',{@GUIUpdate,handles});
start(handles.timer);
 




Code:

function GUIUpdate(hObject, eventdata, handles)
 
Zeitcounter = getappdata( gcf, 'Zeitcounter'); % Zugriff
Zeitcounter = Zeitcounter +1; % Erhöhen um 1
setappdata( gcf, 'Zeitcounter', Zeitcounter); % Speichern

plot(handles.axes, Zeitcounter, Temperatur, '-k.');
hold on
pause(1)

 





Problem Matlab benötigt die ganze Rechenleistung für den Zeitcounter und plotten.
Dadurch können andere Funktionen im GUI nicht ausgeführt werden.

Matlab.PNG
 Beschreibung:
Pause Symbol geht nicht weg.

Download
 Dateiname:  Matlab.PNG
 Dateigröße:  74.53 KB
 Heruntergeladen:  407 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2, 3  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.