3. PLC-s nap – szenzorok komparátorok számlálók

A FESTO kapacitív szenzorával (SCE-M 18-ps-k) való ismerkedés után feladatokat oldottunk meg vele. 

Első feladat, a szenzor érzékelésére a sárga lámpa villogtatása, a Stop gombra a villogás megszakítása.
Emlékeztetőül a suliban használt gombok, kapcsolók bekötése a Siemens PLC-be:

Az I1.7 bemeneti portra lett kötve a szenzor, lévén az volt már csak szabad. Villogtatásról a speciális SM0.5 memóriabit gondoskodik. (Ez a bit egy olyan óraimpulzust ad, mely 0,5 másodpercre be van kapcsolva és 0, 5 másodpercre ki, 1 másodperces működési ciklusidőt biztosítva.)
Második feladat, továbbfejlesztve azt érjük el hogy csak hármat villogjon. Ehhez fel kell vennünk még egy számlálót, mely “kireseteli” az M0.0 RS tárolót 3 impulzus után. A lefutóélre kapcsoló azért van az RS tároló RESET bemenetén, hogy a 3 villanás meg legyen. Különben a harmadik impulzusra egyből RESET lenne, így pedig csak a 3. impulzus lefutó élére resetelődik.
A számláló bemenetén pedig (gondolom) azért van, mert így “nem csinál hülyeségeket a számláló”.

A videón látható hogy I1.7 bemenetre adott impulzus hatására az RS tároló kimenete 1-re vált, és a villogtató bit használatával a sárga lámpa elkezd villogni. 
A C0 számláló ekkor a számláló bemenetén elkezdi számolni az impulzusokat, a beállított 3 értéket elérve pedig a saját magát és az RS tárolót is RESET-eli. Sajnos lassabbra nem tudom venni a szimulációt, kétszer kapcsolom be és ki a videóban az I1.7 bemenetre a jelet a szenzor működését szimulálva. (tedd a videót teljes képernyőre)


SHIFT és ROTATE műveletek
a következő feladatok témája

Bekapcsoljuk a SM0.1 memóriabittel a piros és a zöld lámpákat. (Először csak a sárga lámpát kapcsoltuk fel és annak a kimeneti bitjét toltuk el jobbra illetve balra, bekapcsolva ezzel a piros illetve zöld lámpákat, azt most én kihagytam, egyből két bitet kapcsoltam be) 
Kísérletezgettünk még azzal is hogy nem egy bittel, hanem kettővel toltuk a biteket. 

Ezeket a kimeneti biteket toljuk el balra illetve jobbra. A videón látszik ahogy a magas kimeneti biteket tologatom, amikor túlcsordul (túlmegy a 0-7 kimeneti bitek címén) visszafelé tolva azokat nem jelenik meg újra, elveszettnek tekinthetjük. (tedd a videót teljes képernyőre)

Nézzük mit ír erről a tudomány: A Shift utasítások léptetik az IN bemeneti értéket jobbra vagy balra az N eltolási számmal és beteszik az eredményt az OUT kimenetbe.
A Shift utasítások a kitolt biteket nullával töltik fel. Ha az eltolás szám (N) nagyobb vagy egyenlő, mint a megengedett maximum (bájt műveleteknél 8, Word műveleteknél 16, és DoubleWord műveleteknél 32), akkor az érték a maximális számmal kerül eltolásra. Ha a Shift szám nagyobb mint nulla, akkor a túlcsordulás memóriabit (SM1.1) megkapja az utolsó kitolt bit értékét. A nulla memóriabit (SM1.0) a Shift művelet eredményeként nullát eredményez.

Nézzük most ezeket ROTATE műveletekkel. Az SHL_ és SHL_R elemeket kicseréljük ROL_B (Rotate Left Byte) és ROR_B-re (Rotate Right Byte). A Nagykönyv szerint ez azt jelenti, hogy:
A Rotate utasítások elforgatják az IN bemeneti értéket jobbra vagy balra N eltolás számmal, és az eredményt behelyezik a (OUT) memóriahelyre. A forgatás körkörös.
Ha az eltolás szám nagyobb, vagy egyenlő, mint a művelethez megengedett maximális érték, akkor az S7-200 egy modulo műveletet hajt végre a Shift számon, hogy érvényes eltolás számot kapjon, mielőtt végrehajtaná a forgatást. Ez 0 – 7-ig terjedő eltolás számot eredményez bájt műveleteknél, 0 – 15 a szó műveleteknél, és 0 – 31 a duplaszó műveleteknél“.
Videó most nincs 🙂 Az látszana, hogy ami kimegy jobb oldalon, az bejön a bal oldalon és fordítva.

Compare és Move azaz összehasonlítás és áthelyezés
Következő feladatban a piros – sárga – és zöld lámpákat kapcsoljuk fel sorban, attól függően, hogy az elfordítható (I1.4 Auto_manual) kapcsoló el van-e fordítva. Ha nincs elfordítva, akkor fentről lefelé, azaz P-S-Z-P-S-Z… és így tovább, ha elfordítjuk, akkor lentről felfelé azaz Z-S-P-Z-S-P… és így tovább lesz a felvillanó lámpák sorrendje.
Indulásnak kapcsoljuk be azért valamelyiket, hogy legyen valami kiindulási alap. A MOV_B utasítással áthelyezünk egy értéket az IN memóriahelyről egy új OUT memóriahelyre anélkül, hogy az eredeti értéket megváltoztatnák. Fenti esetben a magas szint kerül egy konstans (8) értékű memóriahelyre azaz a QB1-be. Ezzel a 8-as bitkimenetet (2³ ) azaz a sárga lámpáét kapcsoljuk be. És ezt még látnánk is, ha nem lenne a következő lét lépcső 🙂
Tehát az Auto_manual kapcsoló helyzetétől függően vagy a 2. vagy a 3. Network fogja folyamatosan forgatni a bitet. Igen, forgatni, pedig most ide a shiftelés is elég lenne, hiszen nem engedjük majd továbblépni a bitet felül a piros Q1.2 azaz a 4. bitnél kevesebbre, illetve a zöld Q1.4 azaz 16. bitnél magasabbra. Az SM0.5 bit segítségével másodpercenként mindig lefelé vagy felfelé fog tehát lépkedni a bit, ha elérte a max. vagy min. értékét, akkor visszaküldjük az “elejére”.
A jó kis MOV_B, vele kezdtük ezt a témát. Az első a QB1 értékét “4”-re állítja be, a második pedig “16”-ra. Hogy mikor melyik tegye a dolgát azt pedig összehasonlítóval (komparátorral) végezzük.
Természetesen mikor a Piros lámpa után Q1.2-ről lépne a Q1.1-re (2² → 2¹=2), akkor a második komparátor fogja engedni (QB1==2) hogy a második MOV_B a QB1 értékét “16”-ra állítsa, ezzel a magas szintet a Q1.4-re (24) kapcsolja. Így a piros lámpa felvillanása után nem sötét lesz, hanem újra a zöldet kapcsolja.
Az Auto_manual kapcsoló elfordított helyzetében pedig pont fordítva fog történni:
amikor a zöld lámpa után Q1.4-ről lépne a Q1.5-re (24 → 25=32), akkor az első komparátor fogja engedni (QB1==32) hogy az első MOV_B a QB1 értékét “4”-re állítsa, ezzel a magas szintet a Q1.2-re (22) kapcsolja. Így a zöld lámpa felvillanása után nem sötét lesz, hanem újra a pirost kapcsolja.

Számlálók, készítsük el azt a kapcsolást, amikor egy értéket felfelé és lefelé tudunk léptetni, mondjuk a Fekete és a Fehér nyomógombokkal. A beállított értéknek megfelelően világítsanak a lámpák:

  • 3 → Zöld, Sárga, Piros
  • 2 → Zöld , Sárga
  • 1 → Zöld

A feladatban megfogalmazottak szerint egy fel-le számláló tagba két db nyomógombbal számolunk be, illetve ki értéket. Alatta lévő szinteken pedig komparátorokkal választjuk ki, hogy melyik számlálóértékre mely lámpák világítsanak.

Fejlesszük kicsit tovább, az előző szintjelzőszerű megjelenést alakítsuk át, hogy 1- nél csak a zöld, 2-nél csak a sárga, 3-nál csak a piros lámpa világítson. így hasonló lesz, mint pl. egy lift emeletszám kijelzése. Valamint még tegyük meg, hogy ne lehessen a számláló értékét 3 fölé illetve 1 alá vinni.

A felfelé számláló bemenetre beraktunk egy komparátort, amely csak akkor engedi a számláló értékének növelését, ha az 3-nál kisebb. A lefelé számláló bemenetére pedig egy olyan komparátort, ami csak akkor engedi a számláló értékének a csökkentését, ha az nagyobb, mint nulla. Így az érték 0-1-2-3 értékeket vehet fel.

A lámpa kimenetek komparátorai is ki lettek cserélve Equal Integer-ekre. 
Így csak a megadott értékekkel való egyezés esetén fognak a lámpák kapcsolni.

Felfelé számláló
CU bemenetét megvezérelve az értéke 1-gyel nő. PV: preset value (beállított érték vagy jelzőbit) 
A számláló értékét betéve a RESET bemenetre a beállított jelzőbit értéket elérve nullázódik.

Lefelé számláló
CD bemenetét megvezérelve az értéke 1-gyel csökken. 
A számláló értéke ha eléri a 0-t, akkor a beállított jelzőbit értékét veszi fel.

Óra – utolsó feladat 🙂
Készítsünk egy órát, amely számolja az órákat, perceket, másodperceket. Egy nyomógombbal lehessen állítani az órát, egy másikkal pedig a percet. Ha mindkét nyomógombot egyszerre működtetjük, akkor pedig nullázódjon az óra.

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük