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.
- 17.1 Miért nem elég a „várj egy kicsit”?
- 17.2 A
TIMEadattípus és az időliterálok - 17.3
TON— bekapcsolás-késleltetés - 17.4
TOF— kikapcsolás-késleltetés - 17.5
TP— impulzusidőzítő - 17.6 A három időzítő összehasonlítása
- 17.7 Időzítők láncolása
- 17.8 Az időzítő és a példányosítás
- Gyakorlatok
- Összefoglalás
- Ellenőrző kérdések
- Tudáspróba
- A fejezet forrásai
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.
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 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.
A PT nem kell, hogy állandó legyen. Deklarálhatsz TIME típusú változót, és azt adhatod át:
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 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
TONInst : TON; TONInst(IN := VarBOOL1, PT := T#5s); VarBOOL2 := TONInst.Q;
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 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
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.
- A
TONkéslelteti a bekapcsolást, az azonnali kikapcsolást viszont átengedi. - A
TOFaz 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ő. Az impulzus hossza mindig PT, függetlenül az IN hosszától.Hívás ST nyelven:5
TPInst : TP; TPInst(IN := VarBOOL1, PT := T#5s); VarBOOL2 := TPInst.Q;
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.
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.
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.
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.
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:
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.
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.
(* 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;
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
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?
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.
- Melyik időzítőt használod, és miért?
- Írd meg a programot ST nyelven.
- Rajzold fel az idődiagramot (
IN,Q,ET).
- 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.
- 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.
- Mi történik a 2. feladatban, ha az impulzus alatt újra megnyomod a gombot? Próbáld ki, és írd le a tapasztalatot!
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
TONa bekapcsolást késlelteti: aQcsak akkor lesz igaz, ha azINmég mindig igaz és aPTletelt. Ha azINkorábban visszaesik, a számláló nullázódik, és aQegyáltalán nem kapcsol be. - A
TOFa kikapcsolást késlelteti: aQazIN-nel együtt kapcsol be, és csak a lefutó él utánPTidővel kapcsol ki. Ez az utánfutás klasszikus eszköze. - A
TPfix hosszú impulzust ad: aQmindig pontosanPTideig igaz, függetlenül attól, meddig marad igaz azIN.
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
- Miért nem szabad a PLC-programot várakoztatni, és hogyan oldja meg ezt az időzítő?
- Milyen típusú a
PTbemenet, és hogyan adunk meg 2,5 másodpercet? - Sorold fel a három szabványos időzítő négy változóját és a jelentésüket!
- Mikor lesz igaz a
TONblokkQkimenete? - Mi történik, ha a
TONblokkINbemenete aPTletelte előtt visszaesik? - Mikor kapcsol be és mikor ki a
TOFblokkQkimenete? - Milyen hosszú a
TPblokk által adott impulzus, ha azINcsak 100 ms-ig igaz? - Melyik időzítőt használnád ventilátor-utánfutásra, és melyiket zavarszűrésre?
- Hogyan építenél villogtatót két időzítőből?
- 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ó.