Autor Thema: Frage zu TIMER_2  (Gelesen 6108 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

dieter

  • Gast
Frage zu TIMER_2
« am: 30. August 2007, 14:09:14 »
Hallo,

ich brauche jeden Tag um 9 Uhr einen Trigger um eine E-Mail zu versenden.
Habe FB TIMER_2 mittels CoDeSys für WAGO 758 folgendermassen im Programm als eigene Task eingebaut:

PROGRAM Time_Switch
VAR
   TriggerDay: timer_2;
END_VAR
TriggerDay(DT_in:=Current_Time,start:=tod#09:00:00,duration:=t#3s,mode:=11);

Task läuft ständig, Current_Time zählt die aktuelle Uhrzeit hoch.
Trotzdem wird der Ausgang nicht um 9 Uhr für 3 Sekunden gesetzt.

Im Source-Code von TIMER_2 ist eine Abfrage, die ich nicht verstehe:

IF enabled AND NOT Q AND daytime >= start AND run_date <> dat THEN
   Q := 1;
   activation := tx;
   run_date := dat;
ELSIF Q AND tx - activation >= duration THEN
   Q := 0;
END_IF;

Variable "run_date" ist in meinem Testprogramm natürlich gleich wie Variable "dat".
Wenn ich "run_date" auf einen Tag vorher force, dann wird der Ausgang ca. jede Sekunde für 3 Sekunden gesetzt.

Was mache ich falsch ? Darf TIMER_2 nicht in einer Task zyklisch aufgerufen werden ?
N.B.: oscat.lib ist wirklich eine tolle Library, grosses Lob von mir

Grüsse,
Dieter

Offline hugo

  • Global Moderator
  • *****
  • Beiträge: 2 150
    • Profil anzeigen
Re: Frage zu TIMER_2
« Antwort #1 am: 12. September 2007, 00:06:31 »
die abfrage bedeutet das der folgende code übersprungen wird falls:

a) der ausgang schon gesetzt ist
b) daytime > start dient dazu die funktioin nicht dauernd auszuführen sondern nur einmal pro 100ms
c) run_date sorgt dafür das die funktion nur einmal pro tag ausgeführt wird.

lasse die task mal freilaufend rennen und checke ob sich das eiungangsdatum auch verändert.
grundsätzlich muss es aber auch zyklisch laufen

run_date merkt sich das die funktion heute schon einmal gelaufen ist und verhindert weitere aufrufe, sie soll ja nur einmal pro tag laufen

dieter

  • Gast
Re: Frage zu TIMER_2
« Antwort #2 am: 12. September 2007, 17:28:28 »
danke
das mit dem run_date (nur einmal pro tag) war der richtige Ansatz.
Jetzt funktioniert es bestens.

Tolle Lib !