ShIoTiny: uzly, vazby a události nebo rysy kreslení programů

ShIoTiny: uzly, vazby a události nebo rysy kreslení programů

Hlavní body nebo o čem je tento článek

Téma článku – vizuální programování PLC ShIoTiny pro chytrou domácnost, popsanou zde: ShIoTiny: malá automatizace, internet věcí nebo „půl roku před dovolenou“.

Velmi stručně jsou probírány takové pojmy, jako uzly, spojení, události, a také rysy načítání a provádění vizuálního programu na ESP8266, který tvoří základ PLC ShIoTiny.

Úvod nebo pár organizačních otázek

V předchozím článku jsem ohledně své vývoje poskytl stručný přehled možností řadiče ShIoTiny.

Jak překvapivé, veřejnost projevila docela silný zájem a položila mi spoustu otázek. Někteří lidé dokonce hned nabídli, že od mě koupí řadič. Ne, nemám nic proti tomu, abych trochu vydělal, ale svědomí mi nedovoluje prodávat zatím velmi nedokonalou věc v programovém smyslu.

Proto jsem zveřejnil na GitHub binárky firmwaru a schéma zařízení: firmware+instrukce nejstručnější+schéma+příklad.

Teď si může každý nahrát firmware do ESP-07 a osobně si s ním pohrát. Pokud někdo opravdu chce přesně takovou desku jako na fotce – mám jich několik k dispozici. Napište mi na e-mail shiotiny@yandex.ru. Ale, jak říkal nezapomenutelný Ogurtsov: „Za nic jsem odpovědný!“.

Takže přejděme k podstatě: co je "uzel" (noda) a "událost"? Jak se program provádí?

Jak bývá zvykem – začněme od začátku: s načítáním programu.

Jak se načítá program

Začněme tím, co se děje, když stiskneme tlačítko Nahrát v editoru ElDraw a náš schéma-program, složený z krásných čtverců, odletí do zařízení.

Jednak se na základě námi nakreslené schéma vytvoří její popis v textové podobě.
Za druhé, zkontroluje se, zda jsou všechny vstupy uzlů spojeny s výstupy. 'Visící' vstupy by neměly být. Pokud se takový vstup zjistí – schéma se do ShIoTiny nenahrává a editor vyhodí odpovídající upozornění.

Pokud všechno proběhlo úspěšně, editor odešle do ShIoTiny textový popis schématu po jednom uzlu. Samozřejmě, stávající schéma ze ShIoTiny se nejprve odstraní. Získaný textový popis je uložen do FLASH paměti.

Mimochodem, pokud chcete schéma z zařízení odstranit, stačí do něj nahrát prázdné schéma (neobsahující žádný prvek-uzel).

Jakmile je celé schéma-program nahráno do PLC ShIoTiny, začne 'provádět'. Co to znamená?

Upozorníme, že procesy načítání schématu z FLASH paměti při zapnutí a při přijímání schématu z editoru jsou totožné.

Nejprve se vytvoří objekty uzlů na základě jejich popisu.
Pak se nastaví vazby mezi uzly. To znamená, že se generují odkazy výstupů na vstupy a vstupů na výstupy.

A teprve po tom všem se spustí hlavní cyklus provádění programu.

Psal jsem dlouho, ale celý proces - od "načítání" schématu z FLASH paměti až po spuštění hlavního cyklu - zabere zlomek sekundy pro schéma s 60-80 uzly.

Jak funguje hlavní cyklus? Velmi jednoduše. Nejprve čeká na vznik události v některém uzlu, poté zpracovává tuto událost. A tak neustále. No, nebo dokud se nenahraje do ShIoTiny nové schéma.

Už několikrát jsem zmiňoval takové věci, jako události, uzly a spojení. Ale co to vlastně znamená ze softwarového hlediska? O tom si dnes pohovoříme.

Uzlům, vazbám a událostem

Stačí se podívat na příklady schémat-programů pro ShIoTiny, abyste pochopili, že schéma se skládá pouze ze dvou entit - uzlů (nebo prvků) a vazeb mezi nimi.

Uzla, uzel nebo prvek schématu – to je virtuální reprezentace něčeho akce nad daty. Může to být aritmetická operace, logická operace nebo jakákoli jiná operace, která nás napadne. Hlavní je, že uzel má vstup a výstup.

Přihlášení – to je místo, kam uzel přijímá data. Zobrazení vstupů jsou body, které jsou vždy na levé straně uzlu.

Výstup – to je místo, odkud se extrahuje výsledek práce uzlu. Zobrazení výstupů jsou body, které jsou vždy na pravé straně uzlu.

Některé uzly nemají vstupy. Takové uzly generují výsledek uvnitř sebe. Například uzel konstanty nebo uzel senzoru: nepotřebují data od jiných uzlů, aby oznámily výsledek.

Ostatní uzly naopak nemají výstupy. To jsou uzly, které zobrazují například výstupní zařízení (relační nebo podobné). Přijímají data, ale negenerují výsledek výpočtů dostupného pro ostatní uzly.

Kromě toho existuje ještě unikátní uzel-komentář. Nic nedělá, nemá ani vstupy ani výstupy. Jeho úkolem je být vysvětlením na schématu.

Co znamená „událost»? Událost – to je vznik nových dat v některém uzlu. Například mezi události patří: změna stavu vstupu (uzel Vstup), příjem dat z jiného zařízení (uzly MQTT a UDP), vypršení zadaného časového intervalu (uzly Timer a Zpoždění) a tak dále.

K čemu jsou události? Aby bylo možné určit, v kterém uzlu vznikla nová data a jaké stavy uzlů je třeba změnit v souvislosti s přijetím nových dat. Událost jakoby "prochází" řetězcem uzlů, dokud nezakryje všechny uzly, jejichž stavy je třeba zkontrolovat a změnit.

Všechny uzly lze rozdělit do dvou kategorií.
Uzly, které mohou generovat události, nazveme „aktivní uzly».
Uzly, které nemohou generovat události, nazveme „pasivní uzly».

Když uzel generuje událost (to znamená, že na jeho výstupu se objevují nová data), pak se obecně mění stav celého řetězce uzlů připojených k výstupu uzlu-generátoru událostí.

Aby to bylo jasné, podívejme se na příklad na obrázku.

ShIoTiny: uzly, vazby a události nebo rysy kreslení programů

Aktivní uzly zde jsou — Input1, Input2 a Input3. Ostatní uzly jsou pasivní. Zjistíme, co se stane, když se uzavírá ten či onen vstup. Výsledky jsou pro pohodlí shrnuty v tabulce.

ShIoTiny: uzly, vazby a události nebo rysy kreslení programů

Jak vidíme, při vzniku události se vytváří řetězec od uzlu-zdroje události až k cílovému uzlu. Stavy uzlů, které nespadnou do řetězce, se nemění.

Vzniká oprávněná otázka, co se stane, pokud vznikne dvě nebo dokonce více událostí současně?

Jak milovník kreativity Gleb Anfilov, mám tendenci poslat zvědavého tazatele k jeho knize „Utíkání od překvapení“. Je to taková „teorie relativity pro nejmenší“, ve které je dobře vysvětleno, co je „současně“ a jak s tím žít.

Ale čistě prakticky je vše mnohem jednodušší: při vzniku dvou nebo dokonce více událostí se postupně vytvářejí a zpracovávají všechny řetězce od každého zdroje události po sobě a žádné zázraky.

Další zcela oprávněná otázka zvědavého čtenáře — co se stane, pokud uzly spojíme do kruhu? Nebo, jak se to v těchto vašich chytrých kruzích říká — zavést zpětnou vazbu. To znamená spojit výstup jednoho z uzlů s vstupem předchozího uzlu tak, aby stav výstupu tohoto uzlu ovlivňoval stav jehož vstupu. Přímo spojit výstup uzlu s jehož vstupem vám editor nedovolí. ElDraw. A přitom, jak je znázorněno níže — to udělat lze.

Takže, co se vlastně stane v tomto případě? Odpověď bude velmi "jednoznačná": záleží na tom, jaké uzly. Podívejme se na příklad na obrázku.

ShIoTiny: uzly, vazby a události nebo rysy kreslení programů

Když jsou kontakty vstupu Input1 otevřené na horním vstupu uzlu A — 0. Na výstupu uzlu A, také 0. Na výstupu uzlu B — 1. A nakonec, na dolním vstupu uzlu A — 1. Všechno jasné. A kdo nemá jasno — podívejte se níže na popis toho, jak fungují uzly "A" a "NE".

Teď uzavřeme kontakty vstupu Input1, to znamená, že na horní vstup uzlu A přiřadíme jedničku. Ti, kdo znají elektroniku, vědí, že ve skutečnosti dostaneme klasickou schéma generátoru na logických prvcích. A podle teorie by taková schéma měla nekonečně vyhazovat na výstupu prvků A a B sekvence 1-0-1-0-1-0…. a 0-1-0-1-0-1-…. Vždyť událost by měla neustále měnit stav uzlů A a B, běháním v kruhu 2-3-2-3-…!

Ale ve skutečnosti se to neděje. Schéma upadne do náhodného stavu — buď relé zůstane zapnuté nebo vypnuté, nebo může i lehce zabzučet, zapínající a vypínající se několikrát za sebou. Vše závisí na počasí na jižním pólu Marsu. A tak je to, proč se to děje.

Událost s uzlem Input1 mění stav uzlu A, poté uzlu B a tak dokola několikrát. Program určuje "cyklování" události a nuceně přerušuje tento karneval. Po tom, co se stav uzlů A a B změní, je zablokován až do vzniku nové události. Okamžik, kdy program rozhodne — "stačí se točit dokola!" — obecně závisí na mnoha faktorech a může být považován za náhodný.

Buďte opatrní, když spojujete uzly do kruhu — efekty nebudou vždy zřejmé! Dobře si představte, co a proč děláte!

Ale je možné přece jen postavit generátor na dostupných uzlech? Ano, je možné! Ale k tomu je nezbytný uzel, který umí generovat události sám. A takový uzel existuje — to je "zpožďovací linie". Podívejme se, jak funguje generátor s periodou 6 sekund na obrázku níže.

ShIoTiny: uzly, vazby a události nebo rysy kreslení programů

Hlavním prvkem generátoru je uzel A — zpožděcí linie. Pokud se změní stav vstupu zpožděcí linie z 0 na 1, tak na výstupu se 1 neobjeví okamžitě, ale až po určitém čase. V našem případě je to 3 sekundy. Stejně tak, pokud se stav vstupu zpožděcí linie změní z 1 na 0, tak se 0 na výstupu objeví po stejných 3 sekundách. Čas zpoždění se udává v desetinách sekundy. Tedy hodnota 30 znamená — 3 sekundy.

Specifikem zpožděcí linie je, že generuje událost po uplynutí zpožděného času.

Předpokládejme, že na výstupu zpožděcí linie bylo zjistitelně 0. Po průchodu uzlem B — invertorem — se tento 0 změní na 1 a dostane se na vstup zpožděcí linie. Okamžitě se nic neděje. Na výstupu zpožděcí linie zůstává 0, ale zároveň začíná odpočet času zpoždění. Uplynou 3 sekundy. A pak zpožděcí linie generuje událost. Na výstupu se objeví 1. Tato jednička po průchodu uzlem B — invertorem — se mění na 0 a dostává se na vstup zpožděcí linie. Uplynou další 3 sekundy… a proces se opakuje. Tedy každé 3 sekundy se stav výstupu zpožděcí linie mění z 0 na 1 a poté z 1 na 0. Relé cvaká. Generátor pracuje. Perioda impulsů činí 6 sekund (3 sekundy na výstupu 0 a 3 sekundy — 1).

Ale v reálných schématech obvykle není potřeba použít ani tento příklad. Existují speciální uzly-timery, které skvěle a bez pomoci generují sekvenci impulsů se stanovenou periodou. Délka „nuly“ a „jedničky“ v těchto impulsech je rovna polovině periody.

Pro zadání periodických akcí používejte uzly-timery.

Upozorňuji, že takové digitální signály, kde je délka „nuly“ a „jedničky“ shodná, se nazývají „meandrem“.

Doufám, že jsem trochu objasnil otázku, jak probíhá šíření událostí mezi uzly a co byste neměli dělat?

Závěr a odkazy

Článek je krátký, ale je to článek-odpověď na vznesené otázky ohledně uzlů a událostí.

Jak se vyvíjejí firmwary a objevují nové příklady, budu psát o tom, jak programovat ShIoTiny krátké články, pokud to bude lidem zajímavé.

Jak už dříve, schéma, firmware, příklady, popisy uzlů a vše ostatní je zde.

Otázky, přání, kritika — sem: shiotiny@yandex.ru

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster