ShIoTiny: csomópontok, kapcsolatok és események, avagy a programok rajzolásának sajátosságai

ShIoTiny: csomópontok, kapcsolatok és események, avagy a programok rajzolásának sajátosságai

Főbb tézisek, avagy miről szól ez a cikk

A cikk témája — vizuális programozás PLC-n ShIoTiny okos otthona, amely itt van leírva: ShIoTiny: kis automatizálás, dolgok internete, avagy „fél évvel a nyaralás előtt”.

Nagyon röviden megvitatásra kerülnek olyan fogalmak, mint a csomópontok, kapcsolatok, események, valamint a vizuális program betöltésének és végrehajtásának sajátosságai a ESP8266, amely a PLC alapja ShIoTiny.

Bevezetés, avagy néhány szervezési kérdés

Az előző cikkben a fejlesztésemről rövid áttekintést adtam a vezérlő lehetőségeiről ShIoTiny.

Meglepetésemre a közönség meglehetősen erős érdeklődést mutatott és sok kérdést tett fel nekem. Néhány kolléga azonnal meg is ajánlotta, hogy megvegye tőlem a vezérlőt. Nem vagyok ellen a kis keresetnek, de a lelkiismeretem nem engedi, hogy egy még nagyon nyers szoftveres megoldást áruljak.

Ezért feltöltöttem a GitHub-ra a firmware bináris fájljait és a készülék vázlatát: firmware+legújabb útmutató+ vázlat+példák.

Most már bárki át tudja programozni az ESP-07-et és saját kezűleg játszhat a firmware-rel. Ha valakinek nagyon tetszik az a lap, ami a képen van — van belőle néhány darab. Írjatok e-mailt shiotiny@yandex.ru. De ahogy a felejthetetlen Ogurcov mondta: „Én semmiért nem vállalok felelősséget!”.

Nos, térjünk a lényegre: mi az a „csomópont” (nódus) és a „esemény„? Hogyan hajtódik végre a program?

Hagyományosan — kezdjük a sorrendben: a program betöltésével.

Hogyan töltődik be a program

Kezdjük azzal, hogy mi történik, amikor megnyomjuk a Upload gombot a szerkesztőben ElDraw és a szép négyzetekből álló sémánk-program elrepül az eszközbe.

Először is, a rajzolt sémánk alapján szöveges leírás készül.
Másodszor, ellenőrizzük, hogy minden csomópont bemenete csatlakozik-e a kimenetekhez. „Függő” bemenetek nem lehetnek. Ha ilyen bemenetet találunk — a séma nem fog betöltődni a ShIoTiny-be, és a szerkesztő megfelelő figyelmeztetést ad ki.

Ha minden sikeresen zajlik, akkor a szerkesztő egyesével küldi el a ShIoTiny-nek a séma szöveges leírását. Természetesen a meglévő sémát a ShIoTiny-ből előzetesen törlik. A szöveges leírást a FLASH memóriában tárolják.

Ha el akarja távolítani a sémát az eszközből, egyszerűen töltsön fel rá egy üres sémát (amely nem tartalmaz semmilyen elem-csomópontot).

Amint a teljes séma-program betöltődik a PLC ShIoTiny-be, elkezd "folyamatban lenni". Mit is jelent ez?

Érdemes megjegyezni, hogy a séma betöltési folyamata a FLASH memóriából tápkapcsoláskor és a szerkesztőből való beérkezéskor azonos.

Első lépésként a csomópontok objektumainak létrehozása történik a leírásuk alapján.
Ezután a csomópontok közötti kapcsolatok elhelyezése következik. Vagyis generálódnak a kimenetek belépésekre és a belépések kimenetekre.

Csak ezután indul el a program fő ciklusa.

Hosszasan írtam, de az egész folyamat – a sémának a FLASH memóriából való betöltésétől a fő ciklus elindításáig – csak néhány tizedmásodpercet vesz igénybe 60-80 csomópontos sémával.

Hogyan működik a fő ciklus? Nagyon egyszerű. Először várja egy esemény bekövetkezését események valamelyik csomópontban, majd feldolgozza ezt az eseményt. És ez így folytatódik végtelenségig. Vagy amíg új sémát töltenek a ShIoTiny-be.

Többször említettem már olyan dolgokat, mint események, csomópontok és kapcsolatok. De mi is ez programozási szempontból? Erről fogunk ma beszélni.

Csomópontok, kapcsolatok és események

Elég egy pillantást vetni a sémák példáira ShIoTiny, hogy megértsük, hogy a séma csupán két entitásból áll – csomópontok (vagy elemek) és köztük lévő kapcsolatok.

Csomópont, nód vagy a séma eleme – ez egy virtuális reprezentáció valamilyen tevékenységnek az adatok felett. Ez lehet egy aritmetikai művelet, logikai művelet, vagy bármilyen más, ami eszünkbe jut. A lényeg, hogy a csomópontnak van bemenete és kimenete.

Bemenet – ez az a hely, ahová a csomópont adatokat fogad. A bemenetek ábrázolása – ezek a pontok mindig a csomópont bal oldalán találhatók.

Kimenet – ez az a hely, ahonnan a csomópont munkájának eredménye kiolvasható. A kimenetek ábrázolása – ezek a pontok mindig a csomópont jobb oldalán találhatók.

Néhány csomópontnak nincsenek bemenetei. Az ilyen csomópontok az eredményt önmagukban generálják. Például egy állandó csomópont vagy érzékelő csomópont: nincs szükségük más csomópontoktól származó adatokra, hogy átadják az eredményt.

Más csomópontoknak viszont nincsenek kimeneteik. Ezek például az aktív eszközöket (relék vagy hasonló eszközök) képviselő csomópontok. Ezek adatokat fogadnak, de nem generálnak számítási eredményeket, amelyeket más csomópontok számára elérhetővé tennének.

Továbbá van egy egyedi megjegyzés-csomópont is. Ez semmit sem csinál, nincs bemenete és kimenete. Célja, hogy magyarázatot adjon a diagramon.

Mi az „esemény»? Esemény — új adatok megjelenése valamelyik csomóponton. Például az események közé tartoznak: a bemenet állapotának megváltozása (csomópont Bemeneti), adatok átvétele egy másik eszközről (csomópontok MQTT és UDP), egy megadott időintervallum lejárta (csomópontok Timer és Késleltetés) és így tovább.

Mire jók az események? Azért, hogy meghatározzuk, melyik csomóponton jelentek meg új adatok, és mely csomópontok állapotát szükséges megváltoztatni az új adatok beérkezése miatt. Az esemény, mintegy „végigmegy” a csomópontok láncolatán, amíg be nem járja az összes olyan csomópontot, melynek az állapotát ellenőrizni és megváltoztatni kell.

Minden csomópontot két kategóriába sorolhatunk.
A csomópontokat, amelyek eseményeket generálhatnak, nevezzük „aktív csomópontoknak».
A csomópontokat, amelyek nem tudnak eseményeket generálni, nevezzük „passzív csomópontoknak.».

Amikor egy csomópont eseményt generál (azaz új adatok jelennek meg a kimenetén), akkor jellemzően megváltozik az összes csomópont állapota, amely csatlakozik az esemény-generáló csomópont kimenetéhez.

Hogy érthető legyen, nézzünk meg egy példát a képen.

ShIoTiny: csomópontok, kapcsolatok és események, avagy a programok rajzolásának sajátosságai

Az aktív csomópontok itt az Input1, Input2 és Input3. A többi csomópont passzív. Nézzük meg, mi történik, amikor zárlat képződik egy bemenetnél. Az eredményeket kényelmi okokból táblázatba foglaltuk.

ShIoTiny: csomópontok, kapcsolatok és események, avagy a programok rajzolásának sajátosságai

Ahogy látjuk, amikor esemény lép fel, lánc épül az esemény forráscsomópontjától a végső csomópontig. Azoknak a csomópontoknak az állapota, amelyek nem kerülnek a láncba, nem változik.

Felmerül a jogos kérdés, mi történik, ha egyszerre két vagy akár több esemény következik be?

Mint Gleb Anfilov kreatív művészét, engem is arra ösztönöz, hogy a kíváncsi kérdezőt a „Megszökés a meglepetésektől” című könyvéhez irányítsam. Ez egyfajta „relativitáselmélet a legkisebbeknek”, amelyben jól elmagyarázzák, mi az „egyszerre” és hogyan kell ezzel együtt élni.

De tisztán gyakorlati szempontból minden sokkal egyszerűbb: ha egyszerre két vagy akár több esemény merül fel, akkor sorban épülnek fel és dolgozzák fel az összes láncot, minden esemény forrását külön-külön és csodák nincsenek.

A következő, teljesen legitim kérdés egy kíváncsi olvasótól: mi történik, ha a csomópontokat körbe kötjük? Vagy, ahogy ezt az okosok közt szokták mondani — visszacsatolást vezetünk be. Vagyis egy csomópont kimenetét összekötjük az előző csomópont bemenetével úgy, hogy ennek a csomópontnak a kimenete befolyásolja a saját bemenetének állapotát. Közvetlenül nem tudod összekötni a csomópont kimenetét a saját bemenetével, azt a szerkesztő nem engedi. ElDraw. De közvetve, ahogy az alábbi ábrán látható — azt meg lehet csinálni.

Szóval, mi történik ebben az esetben? A válasz nagyon „határozott” lesz: attól függ, hogy milyen csomópontokról van szó. Nézzük meg a példát az ábrán.

ShIoTiny: csomópontok, kapcsolatok és események, avagy a programok rajzolásának sajátosságai

Amikor az Input1 bemenet érintkezései nyitva vannak a A csomópont felső bemenetén — 0. A A csomópont kimenetén is 0. A B csomópont kimenetén 1. Végül, a A csomópont alsó bemenetén 1. Minden világos. Aki számára nem világos — nézze meg az alábbi leírást arról, hogyan működnek az "ÉS" és "NEM" csomópontok.

Most zárjuk le az Input1 bemenet érintkezéseit, azaz egységet adunk a A csomópont felső bemenetére. Azok, akik ismerik az elektronikát, tudják, hogy gyakorlatilag egy klasszikus generátor sémát kapunk logikai elemekkel. Elvileg, ennek a sémának végtelenül kellene adnia a kimeneteken az A és B elemek 1-0-1-0-1-0… és 0-1-0-1-0-1… sorozatait. Végül is, az eseményeknek folyamatosan változtatniuk kellene a A és B csomópontok állapotát, körbejárva 2-3-2-3…!

De valójában ez nem történik meg. A séma véletlenszerű állapotba kerül — vagy a relé bekapcsolva marad, vagy kikapcsolva, esetleg egy kicsit zümmögve bekapcsol és kikapcsol néhány alkalommal egymás után. Mindez a Mars déli sarkán lévő időjárástól függ. És ez az oka annak, hogy miért történik ez.

Az Input1 csomópont eseménye megváltoztatja A csomópont állapotát, majd a B csomópontét, és így többször körbe-körbe. A program meghatározza az esemény "ciklust", és kényszerítve leállítja ezt a kavarás. Ezt követően A és B csomópontok állapotának módosítása blokkolva van az új esemény bekövetkezéséig. Az a pillanat, amikor a program úgy dönt — "elég a körözésből!" — általában sok tényezőtől függ, és véletlenszerűnek tekinthető.

Legyél óvatos, amikor csomópontokat kötsz körbe — a hatások nem mindig nyilvánvalók! Jó, ha tudod, hogy mit és miért csinálsz!

Lehet-e mégis generátort építeni a rendelkezésünkre álló csomópontokon? Igen, lehetséges! De ehhez szükség van egy csomóra, amely önállóan képes eseményeket generálni. Ilyen csomópont a „késleltetési vonal”. Nézzük meg, hogyan működik a 6 másodperces periódusú generátor az alábbi ábrán.

ShIoTiny: csomópontok, kapcsolatok és események, avagy a programok rajzolásának sajátosságai

A generátor kulcsfontosságú eleme az A csomópont — a késleltetési vonal. Ha megváltoztatjuk a késleltetési vonal bemenetének állapotát 0-ról 1-re, akkor a kimeneten a 1 nem azonnal jelenik meg, hanem csak egy megadott idő elteltével. A mi esetünkben ez 3 másodperc. Ugyanígy, ha megváltoztatjuk a késleltetési vonal bemenetének állapotát 1-ről 0-ra, akkor a 0 a kimeneten a következő 3 másodperc elteltével jelenik meg. A késleltetési idő tizedmásodpercekben van megadva. Tehát a 30-as érték 3 másodpercet jelent.

A késleltetési vonal jellemzője, hogy eseményt generál a késleltetési idő letelte után.

Feltételezzük, hogy a késleltetési vonal kimenetén kezdetben 0 volt. Miután átmegy a B csomóponton — az inverteren — ez a 0 1-re változik és bemegy a késleltetési vonalba. Azonnal semmi nem történik. A késleltetési vonal kimenetén úgy marad a 0, ahogy volt, de elindul a késleltetési idő mérése. Eltelik 3 másodperc. Ezután a késleltetési vonal eseményt generál. A kimenetén megjelenik az 1-es. Ez az 1-es, miután átmegy a B csomóponton — az inverteren — 0-ra változik és bemegy a késleltetési vonalba. Eltelik még 3 másodperc… és a folyamat megismétlődik. Tehát 3 másodpercenként a késleltetési vonal kimenetének állapota 0-ról 1-re, majd 1-ről 0-ra változik. A relé kattog. A generátor működik. Az impulzusok periódusa 6 másodperc (3 másodperc 0-ra és 3 másodperc 1-re).

De a valós áramkörökben általában nem szükséges ezt a példát használni. Léteznek speciális időzítő csomópontok, amelyek csodálatosan, külső segítség nélkül generálják a megadott periódusú impulzusok sorozatát. A „0” és „1” időtartama ezekben az impulzusokban a periódus felének felel meg.

Időszakos tevékenységek megadásához használjon időzítő csomópontokat.

Megjegyzem, hogy az olyan digitális jeleket, ahol a „0” és az „1” időtartama egyenlő, „meandrának” nevezik.

Remélem, hogy kicsit tisztáztam a kérdést arról, hogyan terjednek az események a csomópontok között és mit nem érdemes csinálni.

Következtetés és hivatkozások

A cikk rövid lett, de ez egy válasz cikk a csomópontokkal és eseményekkel kapcsolatos felmerült kérdésekre.

A firmware fejlődésével és új példák megjelenésével arról fogok írni, hogyan lehet programozni ShIoTiny kis cikkeket, amíg ez érdekes az emberek számára.

Ahogyan korábban, a séma, firmware, példák, eszközök leírása és minden egyéb itt található.

Kérdések, kérések, kritikák — ide írd: shiotiny@yandex.ru

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster