TON, TOF és TP — a három szabványos időzítő működése idődiagramokkal, és az első feladatok, ahol a példányosítás igazán számít.

Eddig a program azonnal reagált: ha a feltétel igaz volt, a kimenet bekapcsolt. A valóságban viszont szinte minden vezérlésben van idő: a szivattyú csak késleltetve indul, a ventilátor utánfut, a jelzőlámpa villog, a szelep meghatározott ideig nyitva marad.

Erre valók az időzítők. A szabvány három típust definiál, és mindhárom megtalálható a CODESYS Standard könyvtárában, amely „Functions and functionblocks defined in the IEC61131-3 standard” gyűjteménye.2

17.1 Miért nem elég a „várj egy kicsit”?

Egy hagyományos programozási nyelvben a késleltetés egyszerű: sleep(3). A PLC-ben ez tilos.

A 2. fejezetből tudod, hogy a program ciklikusan fut, és a ciklusidőnek be kell férnie a task beállított intervallumába. Ha a program „megállna” három másodpercre, akkor:

  • a bemeneteket nem olvasná be,
  • a kimeneteket nem frissítené,
  • és a watchdog kivétellel leállítaná a taskot (8. fejezet).

Az időzítő ezért nem várakozik: minden ciklusban lefut, és csak számolja, mennyi idő telt el. A program közben zavartalanul dolgozik tovább.

📗 Időzítő funkcióblokk

Olyan funkcióblokk, amely a bemenetének változásához képest méri az eltelt időt, és ennek alapján kapcsolja a kimenetét. Nem állítja meg a program futását — a ciklikus végrehajtás zavartalan marad.

17.2 A TIME adattípus és az időliterálok

Mindhárom időzítő beállított ideje (PT) TIME típusú. Az értéket időliterállal adjuk meg, amely T# előtaggal kezdődik:

Literál Jelentés
T#500MS 500 ezredmásodperc
T#3S 3 másodperc
T#1M30S 1 perc 30 másodperc
T#2H15M 2 óra 15 perc
T#1D 1 nap
⚠️ A leggyakoribb fordítási hiba

A PT bemenet TIME típusú, nem szám! A PT := 5 alak fordítási hibát okoz, mert az 5 egy egész szám, nem időtartam. Helyesen: PT := T#5S.

Ez a hiba minden kezdőnél előfordul legalább egyszer — a fordító hibaüzenete viszont egyértelmű, ha tudod, mit keress.

💡 Változóból is megadható

A PT nem kell, hogy állandó legyen. Deklarálhatsz TIME típusú változót, és azt adhatod át:

ST
VAR
    tKesleltetes : TIME := T#3S;   (* alapérték, futásidőben módosítható *)
    fbIdozito    : TON;
END_VAR

fbIdozito(IN := bStart, PT := tKesleltetes);

Így a késleltetés a HMI-ről is állítható lesz (22. fejezet).

17.3 TON — bekapcsolás-késleltetés

Ez a leggyakrabban használt időzítő.

Változó Típus Leírás
IN BOOL felfutó él: indítja a számlálót; lefutó él: nullázza a számlálót3
PT TIME a késleltetés ideje3
Q BOOL hamis, ha az IN hamis; igaz, ha az IN igaz ÉS a PT letelt3
ET TIME az IN felfutó éle óta eltelt idő3
TON — bekapcsolás-késleltetés IN Q ET PT ←— PT letelik —→ rövid impulzus Q nem kapcsol be! Ha az IN a PT letelte előtt visszaesik, a számláló nullázódik, és a Q nem kapcsol be.
17.1. ábra. A TON időzítő működése. Ha az IN a PT letelte előtt visszaesik, a Q nem kapcsol be.

Hívás ST nyelven (a gyártói dokumentáció példája):3

ST
TONInst : TON;
TONInst(IN := VarBOOL1, PT := T#5s);
VarBOOL2 := TONInst.Q;
⚠️ A legfontosabb viselkedés

Ha az IN a PT letelte előtt visszaesik, a számláló nullázódik, és a Q egyáltalán nem kapcsol be. Nem „félig”, nem „később” — egyáltalán nem. Legközelebb a számlálás nulláról indul újra.

Ez pontosan az, amiért a TON alkalmas zavarszűrésre: ha egy jel csak villan egyet, a TON nem engedi át.

Tipikus alkalmazások:

  • indítási késleltetés (a szivattyú csak akkor induljon, ha a nyomás 3 másodpercen át megfelelő);
  • zavarszűrés (a hibajelzés csak akkor legyen valódi, ha 1 másodpercen át fennáll);
  • lépcsőzetes indítás (a második motor 5 másodperccel az első után induljon).

17.4 TOF — kikapcsolás-késleltetés

Változó Típus Leírás
IN BOOL lefutó él: indítja a számlálót; felfutó él: nullázza4
PT TIME a késleltetés ideje4
Q BOOL igaz, ha az IN igaz; hamis, ha az IN hamis és a PT letelt4
ET TIME az IN lefutó éle óta eltelt idő4
TOF — kikapcsolás-késleltetés IN Q ET Q azonnal bekapcsol ←— PT (utánfutás) —→ Q még igaz A Q az IN-nel együtt kapcsol be, és csak a lefutó él után PT idővel kapcsol ki.
17.2. ábra. A TOF időzítő működése. A Q az IN-nel együtt kapcsol be, és csak a lefutó él után PT idővel kapcsol ki.

Hívás ST nyelven:4

ST
TOFInst : TOF ;
TOFInst(IN := VarBOOL1, PT := T#5s);
VarBOOL2 := TOFInst.Q;

Tipikus alkalmazások:

  • utánfutás: a hűtőventilátor a motor leállása után még 2 percig működjön;
  • világítás késleltetett lekapcsolása (mozgásérzékelő után);
  • jelnyújtás: egy rövid impulzust „meghosszabbítunk”, hogy egy lassabb rendszer is észrevegye.
💡 TON és TOF egymás tükörképe
  • A TON késlelteti a bekapcsolást, az azonnali kikapcsolást viszont átengedi.
  • A TOF az azonnali bekapcsolást engedi át, és a kikapcsolást késlelteti.

Ha mindkettőre szükséged van (késleltetett be- és kikapcsolás), a két blokkot sorba kötheted: a TON kimenete legyen a TOF bemenete.

17.5 TP — impulzusidőzítő

Változó Típus Leírás
IN BOOL felfutó él: elindítja az impulzust, és a Q-t igazra állítja5
PT TIME az impulzus hossza5
Q BOOL impulzusjel, amely PT ideig igaz5
ET TIME az impulzus indulása óta eltelt idő; a PT elérése után állandó marad5
TP — impulzusidőzítő IN Q ET hosszú IN PT hosszú impulzus rövid IN ugyanolyan hosszú impulzus! A Q mindig pontosan PT ideig igaz — függetlenül attól, meddig marad igaz az IN. Az ET a PT elérése után állandó marad, amíg a Q vissza nem esik.
17.3. ábra. A TP impulzusidőzítő. Az impulzus hossza mindig PT, függetlenül az IN hosszától.

Hívás ST nyelven:5

ST
TPInst : TP;
TPInst(IN := VarBOOL1, PT := T#5s);
VarBOOL2 := TPInst.Q;
⚠️ A `TP` legfontosabb tulajdonsága

Az impulzus hossza mindig pontosan PT — akkor is, ha az IN csak egy pillanatra volt igaz, és akkor is, ha végig igaz marad. Ez teszi alkalmassá arra, hogy rövid jelekből használható hosszúságú impulzust csináljunk, vagy hogy egy szelepet meghatározott ideig nyitva tartsunk, függetlenül attól, meddig nyomja a kezelő a gombot.

⚠️ Dokumentációs következetlenség — jelezve

A gyártói dokumentációban a TP blokk Q kimenetének leírása így szól: „Pulse signal, set to TRUE for PT milliseconds if EN has a rising edge”.5 A blokk bemenetének neve azonban IN, nem EN — ez a gyártói dokumentáció elírása.

A könyv az IN nevet használja, összhangban a blokk tényleges interfészével és a TON, TOF blokkokkal. A CC100-on végzett gyakorlati próba is ezt erősíti meg.

17.6 A három időzítő összehasonlítása

TON TOF TP
Mit késleltet? a bekapcsolást a kikapcsolást semmit — impulzust ad
A számlálót indítja IN felfutó éle IN lefutó éle IN felfutó éle
A számlálót nullázza IN lefutó éle IN felfutó éle (a PT letelte után újraindítható)
A Q igaz, ha IN igaz és PT letelt IN igaz, vagy PT még nem telt le az impulzus tart (PT ideig)
A Q hossza ameddig az IN igaz marad IN + PT pontosan PT
Tipikus feladat indítási késleltetés, zavarszűrés utánfutás, jelnyújtás fix hosszú impulzus, villogtatás

17.7 Időzítők láncolása

Villogó jel két időzítővel

Két TON blokkal egyszerű villogtató (multivibrátor) építhető: az egyik a bekapcsolt, a másik a kikapcsolt állapot idejét méri.

ST
PROGRAM PLC_PRG
VAR
    fbBe  : TON;
    fbKi  : TON;
    bVillog : BOOL;
END_VAR

fbBe(IN := NOT bVillog, PT := T#500MS);
fbKi(IN := bVillog,     PT := T#500MS);

IF fbBe.Q THEN
    bVillog := TRUE;
END_IF
IF fbKi.Q THEN
    bVillog := FALSE;
END_IF

Így működik: amíg a bVillog hamis, az első időzítő számol; 500 ms után igazra billenti. Ekkor az első időzítő nullázódik, és a második indul; újabb 500 ms után visszabillenti. Az eredmény 1 másodperces periódusidejű villogás.

💡 Aszimmetrikus villogás

Ha a két PT értéke különbözik, a villogás aszimmetrikus lesz. Például T#200MS be és T#1S800MS ki: rövid felvillanás, hosszú szünet — ez a tipikus „készenléti” jelzés. Ugyanez a szerkezet adja a különböző riasztási villogásmintákat.

💡 Készen is van rá blokk

A CODESYS Util könyvtára tartalmaz kész villogó (blink) funkcióblokkot is.1 A saját megépítése viszont sokat tanít az időzítők működéséről — ezért kezdjük ezzel.

Lépcsőzetes indítás

Három motor egymás után, 5 másodperces lépcsőkkel:

ST
fbLepcso1(IN := bStart, PT := T#0S);
fbLepcso2(IN := bStart, PT := T#5S);
fbLepcso3(IN := bStart, PT := T#10S);

bMotor1 := fbLepcso1.Q;
bMotor2 := fbLepcso2.Q;
bMotor3 := fbLepcso3.Q;

Miért így? Mert mindhárom időzítő ugyanarra a jelre indul, csak más PT értékkel. Ha a bStart visszaesik, mindhárom azonnal nullázódik, és a motorok együtt állnak le.

17.8 Az időzítő és a példányosítás

Ez a fejezet az első, ahol a 10–11. fejezetben tanult példányosítás gyakorlati jelentőséget kap.

⚠️ Minden időzítőnek saját példány kell!

Az időzítő funkcióblokk, tehát állapotos: a saját példányában tárolja, hol tart a számlálás. Ha ugyanazt a példányt két helyen hívod meg más bemenettel, a két hívás felülírja egymást, és kiszámíthatatlan eredményt kapsz.

ST
(* HIBÁS: egy példány, két hívás *)
fbIdozito(IN := bJel1, PT := T#3S);
bKimenet1 := fbIdozito.Q;
fbIdozito(IN := bJel2, PT := T#5S);   (* felülírja az elsőt! *)
bKimenet2 := fbIdozito.Q;

(* HELYES: két külön példány *)
fbIdozito1(IN := bJel1, PT := T#3S);
bKimenet1 := fbIdozito1.Q;
fbIdozito2(IN := bJel2, PT := T#5S);
bKimenet2 := fbIdozito2.Q;
💡 Ezért éri meg a strukturált felépítés

A 11. fejezet FB_Szivattyu példájában minden példány saját TON blokkot tartalmazott. Három szivattyú → három példány → három független időzítő, pedig a kód csak egyszer létezik. Pontosan ezt a mintát fogod használni a záróprojektben (26. fejezet).

Gyakorlatok

🛠️ 17.1. feladat — Késleltetett indítás a CC100-on

Készíts programot, amely a DI1-re kötött nyomógomb megnyomása után 3 másodperccel bekapcsolja a DO1 kimenetet, a gomb elengedésekor pedig azonnal kikapcsolja.

Lépések: teszteld először szimulációban (8. fejezet), majd a CC100-on. Figyeld az ET kimenetet online monitorozásban — látod, ahogy számol?

Kiegészítő kérdés: mi történik, ha a gombot csak 1 másodpercig nyomod? Miért?

🛠️ 17.2. feladat — Ventilátor-utánfutás

A DI1 a motor üzemjelzése, a DO1 a hűtőventilátor. A ventilátor a motorral együtt induljon, és a motor leállása után még 10 másodpercig működjön.

  1. Melyik időzítőt használod, és miért?
  2. Írd meg a programot ST nyelven.
  3. Rajzold fel az idődiagramot (IN, Q, ET).
🛠️ 17.3. feladat — Villogtatás és impulzus
  1. Készíts aszimmetrikus villogtatót: a jelzőlámpa 200 ms-ig világítson, majd 1,8 s szünet következzen. Használd a 17.7. pont mintáját.
  2. Készíts programot, amely a DI2 gomb megnyomására — akármilyen rövid vagy hosszú a nyomás — pontosan 2 másodperces impulzust ad a DO2 kimenetre.
  3. Mi történik a 2. feladatban, ha az impulzus alatt újra megnyomod a gombot? Próbáld ki, és írd le a tapasztalatot!
🛠️ 17.4. feladat — Zavarszűrés

Egy nyomáskapcsoló jele időnként „megvillan” a rezgések miatt. Készíts programot, amely a hibajelzést csak akkor kapcsolja be, ha a nyomáskapcsoló jele legalább 2 másodpercen át folyamatosan fennáll. Melyik időzítő való erre, és miért éppen az?

Összefoglalás

A PLC-ben nem szabad várakoztatni a programot — az időzítő ezért nem áll meg, hanem minden ciklusban lefut, és csak méri az eltelt időt.

Mindhárom szabványos időzítő ugyanazt a négy változót használja: IN (indítás), PT (beállított idő, TIME típus, T# literállal), Q (kimenet) és ET (eltelt idő).

  • A TON a bekapcsolást késlelteti: a Q csak akkor lesz igaz, ha az IN még mindig igaz és a PT letelt. Ha az IN korábban visszaesik, a számláló nullázódik, és a Q egyáltalán nem kapcsol be.
  • A TOF a kikapcsolást késlelteti: a Q az IN-nel együtt kapcsol be, és csak a lefutó él után PT idővel kapcsol ki. Ez az utánfutás klasszikus eszköze.
  • A TP fix hosszú impulzust ad: a Q mindig pontosan PT ideig igaz, függetlenül attól, meddig marad igaz az IN.

Két TON blokkal villogtató építhető; azonos jelre indított, eltérő PT értékű időzítőkkel lépcsőzetes indítás valósítható meg.

Minden időzítőnek saját példány kell — ez a fejezet mutatja meg először, miért fontos a 10–11. fejezetben tanult példányosítás.

Ellenőrző kérdések

  1. Miért nem szabad a PLC-programot várakoztatni, és hogyan oldja meg ezt az időzítő?
  2. Milyen típusú a PT bemenet, és hogyan adunk meg 2,5 másodpercet?
  3. Sorold fel a három szabványos időzítő négy változóját és a jelentésüket!
  4. Mikor lesz igaz a TON blokk Q kimenete?
  5. Mi történik, ha a TON blokk IN bemenete a PT letelte előtt visszaesik?
  6. Mikor kapcsol be és mikor ki a TOF blokk Q kimenete?
  7. Milyen hosszú a TP blokk által adott impulzus, ha az IN csak 100 ms-ig igaz?
  8. Melyik időzítőt használnád ventilátor-utánfutásra, és melyiket zavarszűrésre?
  9. Hogyan építenél villogtatót két időzítőből?
  10. Miért kell minden időzítőnek saját példány? Mi történik, ha ugyanazt a példányt kétszer hívod meg?

Tudáspróba

Válaszd ki az egyetlen helyes választ!

1. A PT bemenet típusa: a) TIME b) WORD c) INT d) REAL

2. Melyik a helyes megadás 5 másodpercre? a) PT := 5 b) PT := T#5S c) PT := "5s" d) PT := 5000

3. A TON blokk Q kimenete akkor igaz, ha: a) az IN felfutó éle megérkezett; b) az IN hamis és a PT letelt; c) az IN igaz és a PT letelt; d) az ET elérte a nullát.

4. Ha a TON blokk IN bemenete a PT letelte előtt visszaesik: a) a Q rövid impulzust ad; b) a Q késleltetve mégis bekapcsol; c) a blokk hibát jelez; d) a számláló nullázódik, és a Q nem kapcsol be.

5. A TOF blokk Q kimenete: a) az IN-nel együtt kapcsol be, és a lefutó él után PT idővel kapcsol ki; b) az IN felfutó éle után PT idővel kapcsol be; c) mindig pontosan PT ideig igaz; d) soha nem kapcsol be.

6. A TP blokk által adott impulzus hossza: a) megegyezik az IN jel hosszával; b) mindig pontosan PT; c) PT + az IN hossza; d) a ciklusidőtől függ.

7. Melyik időzítő való ventilátor-utánfutásra? a) TON b) TP c) TOF d) egyik sem

8. Melyik időzítő való jelzavar kiszűrésére (a jel csak akkor számítson, ha tartósan fennáll)? a) CTU b) TOF c) TP d) TON

9. Két TON blokkból épített villogtatónál a periódusidő: a) a két PT összege; b) a nagyobbik PT; c) a két PT különbsége; d) mindig 1 másodperc.

10. Ha ugyanazt az időzítő-példányt két helyen hívod meg más bemenettel: a) a fordító automatikusan két példányt hoz létre; b) a két hívás felülírja egymást, az eredmény kiszámíthatatlan; c) a második hívás figyelmen kívül marad; d) a blokk mindkét bemenetet külön kezeli.

A megoldókulcs a B függelékben található.

A fejezet forrásai


  1. CODESYS Util Library Documentation. CODESYS GmbH, v3.5.22.0. (2026-07-29) ↩

  2. CODESYS Standard Library Documentation. CODESYS GmbH, v3.5.22.0 — „Functions and functionblocks defined in the IEC61131-3 standard”. (2026-07-29) ↩

  3. CODESYS Standard Library: TON (FB). (2026-07-29) ↩↩↩↩↩

  4. CODESYS Standard Library: TOF (FB). (2026-07-29) ↩↩↩↩↩

  5. CODESYS Standard Library: TP (FB). (2026-07-29) ↩↩↩↩↩↩

Mennyire volt hasznos ez a fejezet?

Még nincs értékelés.