A 18. fejezet („Számlálók, élfigyelés és bistabil elemek") gyakorlatainak részletes megoldásai és a tudáspróba megoldókulcsa. Előbb dolgozd ki magad, csak utána ellenőrizz!

Gyakorlatok — megoldások

18.1. feladat — Darabszámlálás

Megoldás

ST
VAR
    rtErzekelo : R_TRIG;
    ctuDarab   : CTU;
    tpCsomagol : TP;
END_VAR

rtErzekelo(CLK := bErzekelo);

ctuDarab(CU    := rtErzekelo.Q,
         RESET := ctuDarab.Q OR bKeziNullaz,
         PV    := 12);

tpCsomagol(IN := ctuDarab.Q, PT := T#2S);
bCsomagolo := tpCsomagol.Q;

A Q kimenet CV >= PV esetén igaz; ezt használjuk egyszerre az impulzus indítására és a számláló nullázására, így a lánc önműködően újraindul. A bKeziNullaz (DI2) bármikor nulláz.

A kiegészítő kérdés: a CU bemenet maga is felfutó élre működik, tehát az érzékelő jelét közvetlenül is rákötheted — a számlálás úgy is helyes lesz. Az explicit R_TRIG mégis hasznos:

  1. ha ugyanazt az élt máshol is fel akarod használni (kijelzés, naplózás), egy helyen áll elő, és biztosan ugyanaz;
  2. ha a „jel” nem közvetlen bemenet, hanem számított feltétel (pl. rSuly > 500.0), az élfigyelés teszi eseménnyé;
  3. olvashatóság: a kódból látszik, hogy eseményt számolunk, nem állapotot.

18.2. feladat — Parkolóház

Megoldás

CTUD (fel/le számláló) kell, mert a bent lévő autók száma mindkét irányban változik: behajtásnál nő, kihajtásnál csökken. Két külön CTU nem adna helyes eredményt.

ST
VAR
    rtBe   : R_TRIG;
    rtKi   : R_TRIG;
    ctAutok : CTUD;
END_VAR

rtBe(CLK := bBehajtas);
rtKi(CLK := bKihajtas);

ctAutok(CU := rtBe.Q,
        CD := rtKi.Q,
        RESET := bNapiNullaz,
        PV := 50);

bMegtelt := ctAutok.CV >= 50;
bSzabad  := NOT bMegtelt;

⚠ Gyakori hiba: a bSzabad és a bMegtelt egymástól függetlenül való kiszámítása. Ha külön feltétellel írod mindkettőt, előbb-utóbb lesz olyan állapot, amelyben egyszerre világít a két lámpa. A tagadásos megoldás ezt kizárja.

18.3. feladat — Indítás–leállítás bistabil elemmel

Megoldás

  1. RS (reset-domináns), mert egyidejű Start és Stop esetén a motor ne induljon el — a kikapcsolt állapot a biztonságos. A névkonvenció segít: az „1” utótagú bemenet a domináns, az RS-nél ez a RESET1.
  2. A program:
ST
VAR
    fbMotor : RS;
END_VAR

(* bStop NC-jel: nyugalmi állapotban TRUE, gombnyomásra vagy
   vezetékszakadásra FALSE — ezért kell a tagadás a RESET1 ágba *)
fbMotor(SET     := bStart,
        RESET1  := NOT bStop OR bVesz);

bMotor := fbMotor.Q1;
  1. Ugyanez önfenntartó logikával:
ST
bMotor := (bStart OR bMotor) AND bStop AND NOT bVesz;

Összehasonlítás: az önfenntartó változat rövidebb, és a leállítási feltételek egy sorban látszanak — viszont a „ki dominál” kérdésre csak a kifejezés elemzésével válaszol. Az RS változat kimondja a szándékot: a nevében benne van, hogy a leállítás erősebb. Csapatmunkában és biztonsági jellegű logikánál ez utóbbi a védhetőbb.

⚠ Ez a feladat legfontosabb pontja: a bStop bontó (NC) érintkezőről jön, ezért nyugalmi állapotban igaz. A RESET1 ágba tehát NOT bStop kell — így a gombnyomás és a vezetékszakadás is leállítja a motort. Ha ide bStop-ot írnál, a motor el sem indulna, és a szakadás észrevétlen maradna (13.7).

(A vészjelzésnél ugyanez a megfontolás: valódi berendezésen a vészkör huzalozott és NC-elvű — ott NOT bVesz állna. A 24. fejezet arról is szól, hogy a vészleállítást nem a PLC-programra bízzuk.)

18.4. feladat — Mérés: hány ciklusig igaz a Q?

Megoldás

  1. Az iCiklusok értéke gombnyomásonként pontosan eggyel nő.
  2. Ez azt bizonyítja, hogy az R_TRIG Q kimenete egyetlen cikluson át igaz — függetlenül attól, meddig tartod nyomva a gombot. Az élfigyelő eseménnyé alakítja az állapotot.
  3. Élfigyelő nélkül (IF bGomb THEN …) a számláló minden ciklusban nő, amíg a gombot nyomva tartod: egy másodperces nyomás 10 ms-os tasknál kb. 100 növekedést jelent. A két szám különbsége mutatja meg, mekkora a különbség állapot és esemény között.
💡 Ez egy mérés — jegyezd is fel

Ez a feladat az I függelék M2 eljárásának kicsinyített változata. Írd fel a task intervallumát, a nyomás hozzávetőleges hosszát és a kapott két számot: ebből kiszámítható a tényleges ciklusidő is. Egy jó vizsgadokumentációban az ilyen mérés többet ér, mint három oldal elmélet.


Tudáspróba — megoldókulcs

# Válasz Indoklás Szakasz
1 a A program ciklikusan fut, a gomb sok cikluson át igaz — ezért kell élfigyelés. 18.1
2 b Az R_TRIG bemenete CLK, kimenete Q. 18.2
3 c A CTU Q kimenete akkor igaz, ha CV ≥ PV. 18.3
4 d A CTD Q kimenete akkor igaz, ha CV = 0. 18.3
5 a Mindkét irányban a CTUD számlál. 18.3
6 b A CODESYS-ben a PV típusa WORD (a szabvány INT-et mond). 18.4
7 c A WORD előjel nélküli (0…65 535), ezért INT-ből típusátváltás kell. 18.4
8 d Az RS reset-domináns: egyidejű jelnél a Q1 hamis. 18.5
9 a A névkonvenció szerint az „1” utótagú bemenet a domináns (RESET1, SET1). 18.5
10 b Biztonsághoz kapcsolódó logikánál RS, hogy egyidejű jelnél a gép ne induljon el. 18.5

Mennyire volt hasznos ez a fejezet?

Még nincs értékelés.