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

Zeitgesteuerte schleifen

 

Superdingser
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 07.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2013, 11:38     Titel: Zeitgesteuerte schleifen
  Antworten mit Zitat      
Hallo
Ich hab mich mal hier angemeldet, weil ich ein Problem bei der Matlab Programmierung habe.
Ich bin Student und habe mich schon etwas mit Matlab auseinander gesetzt, jedoch haperts nun an den Timern:

Über euro Hilfe beim folgenden Problem wäre ich sehr dankbar:

Prinzipell benötige ich 2 timer:
1. Schleife die in einem gewissen Zeitabstand, ca. 2 sekunden immer wiederholt werden soll.
(Aktienkurs aus dem internet abrufen und abspeichern, die schleife funktioniert aber schonmal Wink )
2. Start/Stopp-Timer: zu einer gewissen Uhrzeit soll die Schleife aus 1. gestartet bzw. gestoppt werden.

Ich bekomms einfach nicht hin...

was ich aber scho rausgefunden habe ist, dass ich anscheinend die TimerFcn brauche, verstehe aber nich so ganz, wie die funktioniert...

Vielen Dank
Gruß
Private Nachricht senden Benutzer-Profile anzeigen


jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2013, 11:57     Titel:
  Antworten mit Zitat      
Hallo, in der Hilfe findet man recht brauchbare Informationen.

Code:
>> t1=timer('TimerFcn','deineFunktion');
>> startat(t1,'12:56:10');
Private Nachricht senden Benutzer-Profile anzeigen
 
Superdingser
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 07.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2013, 12:05     Titel:
  Antworten mit Zitat      
Hey danke
das hilft glaube ich schonmal
ich probiers gleich mal aus
Private Nachricht senden Benutzer-Profile anzeigen
 
jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2013, 12:13     Titel:
  Antworten mit Zitat      
dann eine while schleife mit einem pause(2); und das wars.
du könntest:

Code:
while(true);
    [Y, M, D, H, MN, S] = datevec(now);
    if ( H >= 13 )
        break;
    end;
    # irgendwas machen;
    pause(2);
end;


so ca.
Private Nachricht senden Benutzer-Profile anzeigen
 
Superdingser
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 07.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2013, 12:22     Titel:
  Antworten mit Zitat      
hey
das mit der pause habe ich auch schon so, nur isses dann leider so, dass es nicht immer exact 2 sekunden pro schleifendurchlauf sind...
ich lade dabei nämlich daten ausm internet
hast du dafür vielleicht noch eine idee?
Private Nachricht senden Benutzer-Profile anzeigen
 
jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2013, 12:27     Titel:
  Antworten mit Zitat      
2 sekunden pro seitenaufruf ist vielleicht etwas hoch.

Die Pause fängt natürlich erst nach dem Holen der Seite an.
Dementsprechend ist der Aufruf > 2 Sekunden.

wenn du genau 2 sekunden brauchst und garantieren kannst, dass ein seitenaufruf < 2 sekunden brauchst könntest du:

whilescheilfe anfang
tic;
% irgendwas
try
sleep(2 - toc);
end
schleife ende

du musst dann halt noch entweder verwerfen wenn der aufruf doch länger als 2 sekunden dauerte, oder ein try drüberhauen (wie gezeigt).
Private Nachricht senden Benutzer-Profile anzeigen
 
Superdingser
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 07.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2013, 12:38     Titel:
  Antworten mit Zitat      
hey, sleep funktionierte irgendwie nicht, mit pause hats dann geklappt...
danke!!!
damit müsste ich jetzt nurnoch den automatischen start hinbekommen, da das ende durch die anzahl der durchläufe ja festgelegt ist
Private Nachricht senden Benutzer-Profile anzeigen
 
Superdingser
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 07.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2013, 12:47     Titel:
  Antworten mit Zitat      
kannst du mir vielleicht noch erklären wie ich die while schleife und den timer irgendwie in ein script packen kann?
ich hab mit dem function kram noch nich so viel gearbeitet und hätte gerne alles in einer datei
Private Nachricht senden Benutzer-Profile anzeigen
 
jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2013, 13:46     Titel:
  Antworten mit Zitat      
Superdingser hat Folgendes geschrieben:
hey, sleep funktionierte irgendwie nicht, mit pause hats dann geklappt...
danke!!!
damit müsste ich jetzt nurnoch den automatischen start hinbekommen, da das ende durch die anzahl der durchläufe ja festgelegt ist


huch, ich meinte ja pause, sorry Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2013, 13:53     Titel:
  Antworten mit Zitat      
Superdingser hat Folgendes geschrieben:
kannst du mir vielleicht noch erklären wie ich die while schleife und den timer irgendwie in ein script packen kann?
ich hab mit dem function kram noch nich so viel gearbeitet und hätte gerne alles in einer datei



timerfunction.m
Code:

function timerfunction()
    t1=timer('TimerFcn','makeit');
    startat(t1,'12:56:10');
end

function makeit()
    while(true);
        tic;
        [Y, M, D, H, MN, S] = datevec(now);
        if (( H >= 13 ) && ( MN >= 30))
            break;
        end;
        disp('mach irgendwas');
        try
            pause(2 - toc);
        end
    end
end


so sollte es funktionieren..

Zuletzt bearbeitet von jurtsche am 07.11.2013, 13:54, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Superdingser
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 07.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2013, 13:53     Titel:
  Antworten mit Zitat      
ich habe jetzt das problem, dass ich die function net richtig durch den timer gestartet bekomme, auch wenns in 2 verschiedenen scripten ist.
ich hab ja hier bei der function keine übergabe bzw. ausgabeparameter, also habe ich sie einfach mal weggelassen...
das funktioniert aber irgendwie nich

und wenn ichs in ein script packe, hab ich garkeine ahnung wie das mit dem timer dann gehen soll, oder kann ich einfach das andre script dann darunter kopieren?
Private Nachricht senden Benutzer-Profile anzeigen
 
Superdingser
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 07.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2013, 13:58     Titel:
  Antworten mit Zitat      
vielen dank für deine hilfe, aber schreibt nun folgenden fehler:

Error while evaluating TimerFcn for timer 'timer-20'

Undefined function or variable 'makeit'.
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: 07.11.2013, 14:26     Titel:
  Antworten mit Zitat      
Hallo,

es gibt auch die Möglichkeit, bei einer Timer Function als ExecutionMode 'fixedDelay' anzugeben. Das ist i.d.R. eleganter als eine Schleife.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 07.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2013, 14:29     Titel:
  Antworten mit Zitat      
ich habs so schon fast am laufen, nur erkennt er die function der while schleife einfach nicht...
muss ich da irgendwas spezielles beachten wenn ich mit nem timer arbeite?
im code selber ists auch schon rot unterstrichen
Private Nachricht senden Benutzer-Profile anzeigen
 
Superdingser
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 07.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2013, 14:31     Titel:
  Antworten mit Zitat      
Code:

function KursSpeichern()
    t1=timer('TimerFcn','makeit');
    startat(t1,'13:28:10');
end

function makeit()
    UKG=[];
    n=0;
    while n<10
% holen der daten
    end
        %Datei abspeichern
    Uhrzeitxls=clock;
    Uhrzeitxls(4:6)=[];
    Uhrzeitxls=mat2str(Uhrzeitxls);
    Uhrzeitxls=strrep(Uhrzeitxls,'[','');
    Uhrzeitxls=strrep(Uhrzeitxls,']','');
    xlswrite(Uhrzeitxls,UKG);
end
 
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 - 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.