Problem/Verständnisfrage: Timer Overflow beim Systemtimer?

Begonnen von burtynsky, 07. Dezember 2013, 18:10:54

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

burtynsky

Hallo zusammen,

ich programmiere gerade an meinem ersten Programm für ein EFH. Umfang: ein paar Lichter sowie 13 Jalousien
Vorweg, ich habe noch keine Hardware, also ist auch noch nichts "in Echt" getestet. Es wird eine Beckhoff, also programmiert wird in twincat.

Da die Jalousiebausteine jedoch nicht alle Funktionen bieten, die ich brauchen werde, beschäftige ich mich gerade damit, diese meinen Anforderungen anzupassen. Dabei habe ich mir die Frage gestellt, was bei Timerüberläufen von TIME() geschieht. Leider habe ich dazu keine ausreichenden Infos im Netz oder hier im Forum gefunden und hoffe ihr könnt etwas Licht in die Sache bringen.

Hier mal ein Auszug aus dem Baustein BLIND_INPUT:


(* read system timer *)
tx := DWORD_TO_TIME(T_PLC_MS());
(*in anderem Teil des Funktionsblock wurde last gespeichert*)
last := tx
(*später im nächsten Durchlauf wird beispielsweise folgende Abfrage durchgeführt*)
IF tx - last >= max_runtime THEN status := 131; END_IF;


Meiner Meinung funktioneirt das hier nur so lange richtig, solange zwischen setzen von "last"und auswerten durch IF KEIN Overflow stattfand!
Ist max_runtime bspw. 10s und "last" wurde wurde 2s vor dem Überlauf gespeichert, so ist sobald der Überlauf geschieht "tx-last" viel größer als max_runtime und somit TRUE, obwohl die 10s noch  nicht vorbei sind.

Ich hoffe es ist soweit verständlich was ich meine. Die einzigen Infos die ich dazu gefunden habe ist eiin alter Thread hier im Forum:

http://www.oscat.de/community/index.php?topic=163.0

Hier wird doch gerade diese vorgehensweise beschrieben?

Wäre toll wenn jemand etwas Licht in die Sache bringen könnte, weil derzeit stehe ich irgendwie auf dem Schlauch  :o

Schonmal vielen Dank im Voraus! Würde mich über eine Antwort sehr freuen!

MfG,
Thomas