Lange laufender timer

pomdas

Level-2
Beiträge
15
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

bin gerade dabei, mich in die Arbeit mit SPS-Systemen einzuarbeiten. Ich benutze hier eine CPU 315-2DP und Step7. Nun habe ich eine Aufgabe, welche mir schon einige Stunden einiges Kopfzerbrechen bereitet. Dabei hoert sie sich ganz einfach an ;-)

Es soll ein parametrierbarer Timer erstellt werden, welcher (in ganzen Stunden) Zeiten zwischen 0 und 999 Stunden ein Signal HIGH setzen soll. Das Problem fuer mich ist nun, dass es (meines Wissens nach) keinen Zaehler gibt, welcher ueber 32767 zaehlen kann, selbst die IEC-Timer keine so hohen Zeiten kennen (da aus irgedneinem Grund, welcher sich mir momentan nicht erschliesst, der Typ Time auch negatives Vorzeichen haben kann) und es nicht klappt, einen Impuls-Timer mittels Freigabesignal wieder zu aktivieren. Habe ich eine Funktion uebersehen, oder hat jemand einen Tipp fuer mich, wie ich an diese Aufgabe herangehen kann.

Vielleicht koennte auch jemand so feundlich sein und sich den angehaengten Code ansehen. Statt der Variable Schmier habe ich auch probiert, das VKE erst 0, anschliessend gleich wieder 1 zu setzen. Auch ein warten, bis der Timer laeuft (Endlosschleife) funktioniert nicht (Zyklusfehler, slebst bei hoher Zykluszeit (1s))

Vielen Dank fuer Eure hoffentlich kommende Hilfe fuer einen Anfaenger in einem interressanten Gebiet...

Gruss
Thomas
 

Anhänge

  • fc1_990.pdf
    6,3 KB · Aufrufe: 28
Hallo Thomas,

ich würde in der Hardwarekonfiguration das Taktmerkerbyte aktivieren und
mit dem "Taktmerker 1 s/1 Hz" eine Flanke bilden.
Somit hast du dann alle 1s einen Impuls mit diesem eine Variable (z.B. Merkerdoppelwort)
vom Typ DINT (Ganzzahl (32 Bit) –2 147 483 648 bis +2 147 483 647) aufsummieren
und einen vergleich auf die Sollzeit in Sekunden machen.
Nach erreichter Zeit kann dann der Merker gesetzt werden.

MfG
Daniel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Daniel,

ohje, manchmal sieht man den einzelnen Baum vor lauter Baeumen nicht. Da haette ich auch selbst drauf kommen koennen. Werde es mal so probieren. Vielen Dank.

Koennte jemand bitte so freundlich sein, meinen Quellcode anzuschauen. Mich wuerde interessieren, warum ich keine Freigabe hinbekomme. Einfach mal so, das ich, auch wenn ich es jetzt wohl nach der von Daniel beschriebenen Methode machen werde, aus meinem gemachten Fehlern etwas lernen kann. Wuerde mich sehr freuen, wenn sich jemand die Muehe machen koennte...

Gruss
Thomas
 
Hallo,

hab gerade mal kurz reingeschaut.
Da findet auch zu keiner zeit ein Flankenwechsel statt!

Mit
Code:
SET
= #schmier
weißt du der TEMP-Var #schmier in jedem Zyklus eine 1 zu.
Durch U #schmier ist für den nachfolgenden Befehl "FR T 1" das VKE
also auch immer 1.
Nach BE wird der Zustand wieder "vergessen".
Beim nächsten Aufruf wird wieder 1 gesetzt.
Das ist aber kein Flankenwechsel.
 
Hallo,

danke fuer Deine Muehe. Warum verursacht

CLR
SET
FR T 1

keinen Flankenwechsel ueber das VKE? Das VKE wird doch sofort zugewiesen, oder doch nicht?

Gruss
Thomas
 
Hallo nochmal,

deine CPU arbeitet den awl-code von oben nach unten ab.
Über CLR löscht du das VKE, also 0.
Danach setzt du es wieder auf 1 mit SET.
Für den folgenden Befehl (bei dir FR T 1) ist nur das VKE aus der Anweisung direkt darüber relevant, also immer 1.
Dass das VKE zwei Zeilen darüber von 0 auf 1 wechselt, ist egal,
das ist kein Flankenwechsel.
Ein Flankenwechsel wird nur als solcher interpretiert, wenn sich das VKE mit dem vom vorherigen Zyklus unterscheidet.

Code:
U E 0.0
FR T 1

Wenn hier der Eingang von 0 auf 1 wechselt, wäre das ein Flankenwechsel.

Ich hoffe, ich konnte es einigermaßen verständlich erklären ...
 
Hallo,

das bedeutet also, dass ich im laufenden Zyklus nie unabhaengig vom vorigen Zyklus einen Flankenwechsel hinbekomme?!

Gruss
Thomas
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thomas,

wenn ein Flankenwechsel innerhalb eines Zykluses benötigt wird, muss man ihn ganz einfach in einem Zyklus schreiben, z.Bsp.

CLR
FR T 1
SET
FR T 1

Notwendig ist natürlich, dass der Timer diesen Flankenwechsel auch mit bekommt. Oftmals benötigt man das auch in Interrupt-OBs um eine Zähler an zu schubsen, oder um Timer neu zu starten.


Gruß, Onkel
 
Onkel Dagobert schrieb:
Notwendig ist natürlich, dass der Timer diesen Flankenwechsel auch mit bekommt.

Was meinst Du damit? Ich habe Dein Codebeispiel heute mal in mein Programm eingesetzt und hatte leider kein Glueck. Auch die Freigabe ueber ein Merkerbit funktioniert nicht. Irgendwie verstehe ich wohl etwas falsch bei der Freigabe. Waere schoen, wenn ich das irgendwie hinbekommen wuerde...

Meinen Langzeittimer habe ich heutenach Methode Daniel zusammengeschrieben und es funktioniert wunderbar. Fuer diese Idee (warum bin ich da nicht selbst drauf gekommen?) bedanke ich mich nochmals.

Gruss
Thomas
 
Zurück
Oben