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

Zeitabhängige Schleifen oder Timer

 

Becks_jn
Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 02.09.11
Wohnort: ---
Version: R2018
     Beitrag Verfasst am: 29.10.2011, 13:23     Titel: Zeitabhängige Schleifen oder Timer
  Antworten mit Zitat      
Hallo Forum-Mitglieder,

ich habe eine Frage bezüglich zeitabhängiger Schleifen.

Ich habe ein Programm geschrieben, dass eine Kamera anspricht und mit getsnapshot ein Bild aus dem Videosignal unter Angabe der Uhrzeit abspeichert.
Dieses Programm möchte ich jetzt 24 Stunden durchlaufen lassen, wobei alle 10 Minuten ein Bild gespeichert werden soll.

Ich habe ja keine Lust 24 h am PC zu sitzen und alle 10 Minuten den Startbutton zu drücken.

Hat jemand eine Lösung für mich, wie ich das realisieren kann? Geht das mit einer Schleife oder einem Timer?

Super wär, wenn man das Programm dann noch abbrechen kann, wenn etwas unvorhersehbares aufgetreten ist und nicht 24 h warten muss.

Vielen Dank für eure Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen


Matt Lappen
Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 23.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2011, 13:41     Titel:
  Antworten mit Zitat      
Hi,
Mit pause(), kannst du die Ausführung des Skripts um das eingegebene Zeitintervall unterbrechen, falls du mittels callback eine Funktion zum Aufnehmen der Bilder aktivieren möchtest, schau dir am besten mal die Hilfe zu timer() an. Mit clock kannst du auch dass aktuelle Datum und die Zeit abfragen.
Gruß,Matt
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: 29.10.2011, 14:51     Titel: Re: Zeitabhängige Schleifen oder Timer
  Antworten mit Zitat      
Hallo Becks_jn,

TIMER ist wohl die stabilste Lösung. Wie exakt muss denn das 10 Minuten-Intervall sein? Bei weniger als 0.05 Sekunden wird das mit Matlab kritisch.

Zudem muss noch der der Rechner daran gehindert werden, dass er in den Schlafmodus fällt. Wenn sich die Festplatte bereits schlafen gelegt hat, kann eine deutlicher Verzögerung auftreten.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 02.09.11
Wohnort: ---
Version: R2018
     Beitrag Verfasst am: 29.10.2011, 18:40     Titel:
  Antworten mit Zitat      
Hallo,

danke für eure Antworten.

Also es kommt überhaupt nicht auf die Zeit an. Kann eine Ungenauigkeit von einer Minute oder so sein.
Wie spreche ich denn genau einen Timer an?
Kann man das auch mit der Uhrzeit programmieren?
Ich meine, dass ich dem Programm ne Startzeit und eine Endzeit angebe?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.10.2011, 20:10     Titel:
  Antworten mit Zitat      
Hallo,

lies dir doch bitte die Doku zu TIMER durch. Die Möglichkeiten gibt es alle.
Wenn dann noch Fragen bestehen, gerne.

Ein Tipp vorab: die Option 'ExecutionMode' sollte auf 'FixedDelay' gesetzt werden.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 02.09.11
Wohnort: ---
Version: R2018
     Beitrag Verfasst am: 04.11.2011, 18:31     Titel:
  Antworten mit Zitat      
Hallo

Ich bin jetzt weiter, aber lange nicht am Ziel, denn ich weiß nicht, wie ich meine TimerFcn aufrufen soll. Da muss er ja eigentlich nur mein anderes m.file abspielen. Aber ich weiß nicht wie ich Matlab das sage.
Die StartFcn und StopFcn kann ich ja leer lassen oder?

Hier mein Code:
Code:

T= timer
set(T,'executionMode','fixedDelay')
set(T,'Period',30)
get(T)
T.TimerFcn = @Mein_Programm
start(T)
 


Das funktioniert auf jeden fall nicht so.

Vielen Dank für eure Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

das sieht doch schon gut aus. Jetzt hättest du dir nur noch den Link in der Doku zu TimerFcn ansehen müssen. Dort steht, dass die TimerFcn folgendes Interface haben muss:
Code:
function my_callback_fcn(obj, event, string_arg)

Wenn du Informationen wie die Uhrzeit, zu der das Event ausgelöst wurde, nicht brauchst, kannst du deine Funktion so aufbauen
Code:

und schon sollte dein Code funktionieren.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 02.09.11
Wohnort: ---
Version: R2018
     Beitrag Verfasst am: 05.11.2011, 10:42     Titel:
  Antworten mit Zitat      
Hallo.
Ich habe das jetzt folgend aufgebaut.

Code:

T= timer
set(T,'executionMode','fixedDelay')
set(T,'Period',30)
get(T)
T.TimerFcn = @timer_callback_fcn
start(T)


function timer_callback_fcn(obj, event, string_arg)
clc;
clear all;
...
...
...
 


Das steht alles in einem m-file.
Ich bekomme jetzt folgede Fehlermeldung mit der ich nichts anfangen kann.
Function definitions are not permitted in this context.

Ich weiß auch nicht wofür das (obj, event, string_arg) hinter der callback_fcn stehen.
In der Callback function wird ein Videosignal ausgelesen und ein Screenshot erstellt. Dieser Screenshot wird als jpg. abgespeichert und dann werden noch eine Reihe von Variablen deklariert und nachher etwas in eine Textdatei geschrieben.
Muss ich dabei noch irgendwas beachten?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.11.2011, 11:03     Titel:
  Antworten mit Zitat      
Hallo,

ja, du musst etwas sehr grundlegendes beachten. Funktionen müssen entweder in einer eigenen Datei stehen, oder sie können Unterfunktionen sein - dann muss auf der übergeordneten Ebene aber auch eine Funktion sein.

Das "clear all" ist übrigens recht überflüssig.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 02.09.11
Wohnort: ---
Version: R2018
     Beitrag Verfasst am: 05.11.2011, 12:04     Titel:
  Antworten mit Zitat      
Hallo,

habe mein Programm jetzt so gut wie fast fertig...
Es klappt alles und er durchläuft auch meine callback_fcn mit den Unterfunktionen.
Nur eine Grundlegende frage habe ich jetzt..
Am Anfang deklariere ich Variablen und öffne das Videosignal. Dann kommt der Timer der die Screenshots erstellt und speichert. Nach dem durchlauf des Timers soll er das Videosignal wieder schließen.
Das sieht so aus:

Code:

T= timer
set(T,'executionMode','fixedDelay','TasksToExecute',5)
set(T,'Period',30)
get(T)
T.TimerFcn = {@myCallback}
start(T)

%% Abschalten des Videosignals und schließen der Datei
closepreview(vid);
stop(vid);
delete(vid);
 


Wartet der Timer nun an der Stelle start(T) bis er die TastsToExecute durchlaufen hat und schließt dann das Videosignal oder geht der den Quellcode bis unten durch und wiederholt dann die Schritte in der callback_fcn?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

das sollte sich ja austesten lassen. Meiner Ansicht nach werden die Befehle zum Schließen unmittelbar nach dem start-Befehl ausgeführt, was wohl nicht der Sinn der Sache ist.

Für diesen Zweck würde ich die StopFcn verwenden. Das Öffnen des Videosignals könnte man in die StartFcn stecken.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 02.09.11
Wohnort: ---
Version: R2018
     Beitrag Verfasst am: 05.11.2011, 19:02     Titel:
  Antworten mit Zitat      
Hey...

Es läuft nun alles so wie ich es mir gewünscht habe.
Vielen Dank du hast mir sehr geholfen.

Lg
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.