Láncolt logika (például öntözés) létrehozása

Módosítva ekkor Wed, 14 Sep 2022 ekkor: 01:41 PM

Bevezetés

Ebben a cikkben azzal fogunk foglalkozni, hogy hogyan lehet a Chameleon rendszerén belül egy láncolt logikát kialakítani. Ezt a fajta logikát használhatjuk akár világítások egymás utáni kapcsolásához, locsoló rendszerek sorrend szerinti indításához vagy bármely olyan rendszerhez, ahol több művelet során egy sorrend szerint későbbi kapcsolás függ az előtte lévő állapotától.


A logika kialakítása során használni fogunk idő alapú automatizációt, trigger alapú automatizációt, virtuális switcheket állapottartásra és természetesen az eszközökön előforduló fizikai kapcsolókat (reléket).


A folyamatot bemutató képeket egy már meglévő rendszer alapján mutatjuk be, ahol 2 különböző locsolási/csepegtetési szekvencia is van és mindkettő csak egyszer indul el egy napon belül, de különböző időpontban. 


A rendszer kialakításánál még rendelkezésünkre áll egy időjárás állomás is, amiből azt tudjuk kivenni, hogy adott nap mennyi eső esett, mivel megfelelő mennyiségű csapadék esetén nincs szükségünk aznap már további öntözésre. Időjárás állomás helyett akár használhatunk parafás esőérzékelőt is (pl. Hunter Rain-klik) vagy már száraz kontaktust adó érzékelőt is. A haladó programozók számára akár egy ingyenes, web alapú, REST API integrációra is képes open-source időjárás szolgáltatás is megfelelő lehet, amely várható eső esetén egy virtuális switchet aktív állapotba vált át.


A logika kialakítása:

Először is szükségünk van olyan triggerre, amely eldönti nekünk mely napokon és mikor induljon el az első kör. Az alább látható képen a két különböző öntözési kör minden nap elindul, amennyiben minden feltétel rendelkezésünkre áll. Az egyik minden nap 23 órakor a másik pedig minden nap 4 órakor indul:

 

Az idő alapú automatika 1-1 virtuális switchet fog bekapcsolni, amelyet mi egy féltételként fogunk felhasználni a későbbiekben. Mivel csak indításra használjuk ezt a "logikai tárolót"/virtuális switchet, ezért rakjunk rá egy turn-off timert, ami rövid időn belül ki is kapcsolja az indítójelet. Erre azért van szükség, mert egyébként a következő napon a szekvencia nem tudna újból elindulni és még problémát okozhat az is, hogy az első körünknél folyamatosan teljesülne az összes felétel (feltéve, hogy nem esik az eső). Állítsunk be tehát egy virtual switchet, turn off timerrel, amit bele tudunk rakni a fentebbi logikába reagáló aktorként (a lentebbi első képen az aktor logikába helyezését látjuk, logikai 1-el bekapcsoljuk a VSW-t, a második képen pedig a turn-off timert rakjuk rá):

 

 

Az induló virtual switchen kívül legalább (körszám-1) darab segédrelét/virtual switchet kell létrehoznunk, mivel az utolsó körnél, már csak az utolsó előtti kör segédreléjét kapcsoljuk ki és az utolsó kör fizikai mágnesszelepét kapcsoljuk be.

 


 

A fentebbi képen a 6. és a 12. zóna virtuális switch-e hiányzik, mivel ezekre nincsen szükségünk, mondván, hogy adott szekveniánál ezek az utolsó körök lennének.

 

Ha szükséges, akkor egy tiltás opciót is be tudunk rakni, amit például télre ki lehet kapcsolni. Ha még biztosabbak akarunk lenni, hogy egy Controller újraindítás esetleg nem-e rakja a tiltást off-ba (elfelejti), akkor minden nap egy Timetable automatika segítségével, még rá tudunk nyomni a tiltásra egyet (biztos, ami biztos), amely Timetable automatika szabályt ugye ki tudunk kapcsolni. 


Ha szükségünk van ilyen Timetable automatikára (például télen), akkor érdemesebb már egyből a Timetable automatikát aktiválni/deaktiválni, ha tiltásra vagy oldásra van szükség, és így nem a Virtual switchet kell nyomkodnunk direktben.

 

Az eső érzékeléséhez használhatunk NONC jelet, ami igaz állapot esetén megint csak egy tiltással ér fel, vagy pedig időjárás állomás esetén használhatunk napi esőmennyiséget figyelő feltételt, pl ha a napi eső kevesebb mint „x” mm akkor mehessen a logika. De egyébként még egy lehetőség erre, ha mondjuk a timetable indítójeles automatikát tiltjuk, amíg nem szeretnénk öntözni.

 

Indítsuk el akkor tehát az első kört, trigger-based automatika segítségével. Mivel úgyis a Timetable automatika dönt, így a trigger idő alapú feltételeihez rakhatunk any time-ot, de, ha biztosak szeretnénk lenni, akkor a "bármikor" feltételt leszűkíthetjük  egy olyan intervallumra is, amely tartalmazza a Timetable trigger idejét:


Auto-offot itt ne használjunk, mivel az a láncolt logikát elrontaná, helyette a későbbiekben szó fog esni arról, hogyan tudjuk beállítani az egyes körök öntözési hosszát!

 

 

A trigger feltételek az első automatikához (emlékezzünk arra, hogy a trigger based automatika feltételei között ÉS logika van, tehát, az összes feltételnek egy időben teljesülnie kell!):

 

 

Az automatikára reagáló aktorok az első szabály esetén:

 

 

Az utóbbi képen az 1. Zónát indító relé fizikálisan kapcsolja a mágnesszelepet, amire raknunk kell egy turn-off timert, ami számunkra nagyon hasznos lesz, hiszen így tudjuk megadni, hogy meddig öntöz az adott kör. A virtual relére/segédrelére se rakjunk turn-off timert (csakúgy, mint magára az automatika turn-off timerre), mivel az kelleni fog a láncolt logikához. 

Azt fogjuk a későbbiekben vizsgálni, hogy a fizikai relé turn-off timer-je mikor járt le, de még a zónához tartozó VSW mikor van logikai igaz állapotba. Ezért is fontos, hogy a virtuális segédrelénket ne automatán kapcsoljuk le, hanem majd a sorban következő kör lekapcsolja az őt megelőző kör segédreléjét.


Így néz ki a zónák időzítése, mi meddig öntözzön, másodpercben megadva:

 

 

A következő, jelen esetben második kör trigger automatikája már így néz ki:

 

 

A triggerek a második kör elején így néznek ki:


 Jelen példában minden kör indítása előtt ellenőrzöm a tiltást, hogy esetleg azóta nem-e kapcsolta be a végfelhasználó, de például most az esőt nem figyeljük minden kör elején, csak az elsőnél. Azért nem figyelem minden kör elején az esőt, mivel ha egy NO logikájú, például Hunter Rain-kliket használunk, és pont öntözés közben jön meg az eső, akkor beragad a logika és akkor fog újra indulni, ha már kiszáradt az érzékelő.

 

 

Az aktoroknál a második kör automatikája le kell, hogy kapcsolja az első kör segédreléjét, hogy a második kör logikája ne legyen mindig igaz, továbbá, hogy máskor is végig tudjon menni az automatika. A saját kör segédrelét viszont itt be kell kapcsolni, amit majd a következő kör feltételként vizsgálni tud:

 

 

Ezt egészen addig ismételgetjük, amíg az utolsó körhöz el nem elérünk (itt már csak az előző kör segédjét nullázzuk, és az utolsó kör mágneskapcsolóját aktíváljuk, ami majd x idő múlva turn-off timerrel kikapcsol, és vége a logikának):

 

Az alábbi táblázat segítségül szolgálhat abban, hogy az adott köri automatikák aktorjai hogyan kapcsolnak:

Az IGEN azt jelenti, hogy logikai 1-et adunk az adott relének (ez lehet virtuális is).
Az "x percre" a turn-off timerrel megtoldott relét (ez lehet virtuális is) jelenti.
A NEM pedig azt jelenti, hogy az adott automatika kikapcsolt egy relét (ez lehet virtuális is).


 


1. kör2. kör3. kör4. kör5. kör6. kör
1. kör mágnesszelepIGEN (x percre)




1. kör VirtualSwitchIGENNEM



2. kör mágnesszelep
IGEN (x percre)



2. kör VirtualSwitch
IGENNEM


3. kör mágnesszelep

IGEN (x percre)


3. kör VirtualSwitch

IGENNEM

4. kör mágnesszelep


IGEN (x percre)

4. kör VirtualSwitch


IGENNEM
5. kör mágnesszelep



IGEN (x percre)
5. kör VirtualSwitch



IGENNEM
6. kör mágnesszelep




IGEN (x percre)


Ezzel elkészült a láncolt logikánk.




Hasznosnak találta a cikket?

Nagyszerű!

Köszönjük visszajelzését

Sajnáljuk, hogy nem tudtunk segíteni

Köszönjük visszajelzését

Tudassa velünk hogyan javíthatnák ezen a cikken!

Válasszon ki legalább egy okot

Visszajelzés elküldve

Köszönjük közreműködését és megpróbljuk a cikket kijavítani