ShioTiny: uzly, spojení a události nebo funkce kreslicích programů

ShioTiny: uzly, spojení a události nebo funkce kreslicích programů

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

Tématem článku je vizuální programování PLC ShioTiny pro chytrou domácnost popsanou zde: ShioTiny: malá automatizace, internet věcí nebo „šest měsíců před dovolenou“.

Velmi stručně pojmy jako např uzly, vazby, vývoj, stejně jako funkce načítání a spouštění vizuálního programu na ESP8266, která je základem PLC ShioTiny.

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

V předchozím článku o mém vývoji jsem uvedl stručný přehled možností ovladače ShioTiny.

Veřejnost kupodivu projevila poměrně silný zájem a kladla mi poměrně hodně otázek. Někteří přátelé mi dokonce hned nabídli, že si ode mě ovladač koupí. Ne, nejsem proti tomu, abych si vydělal trochu peněz, ale moje svědomí mi nedovoluje prodat něco, co je z hlediska softwaru stále velmi hrubé.

Proto jsem na GitHub zveřejnil binární soubory firmwaru a schéma zařízení: firmware + nejkratší návod + schéma + příklady.

Nyní může každý flashovat ESP-07 a hrát si s firmwarem sám. Pokud by někdo opravdu chtěl úplně stejnou desku jako na fotce, tak jich mám několik. Pište na email [chráněno e-mailem]. Ale, jak říkával nezapomenutelný Ogurtsov: "Nejsem za nic zodpovědný!"

Takže pojďme k věci: co je "uzel" (uzel) a "událost"? Jak se program provádí?

Jako obvykle začneme popořadě: stažením programu.

Jak se program načítá

Začněme tím, co se stane, když stiskneme tlačítko Nahrát v editoru ElDraw a náš obvodový program, skládající se z krásných čtverců, letí do zařízení.

Nejprve se na základě námi nakresleného diagramu sestaví jeho popis v textové podobě.
Za druhé kontroluje, zda jsou všechny vstupy uzlů připojeny k výstupům. Neměly by existovat žádné „visící“ vchody. Pokud je takový vstup detekován, obvod nebude načten do ShIoTiny a editor zobrazí odpovídající varování.

Pokud vše proběhlo v pořádku, editor odešle textový popis obvodu jeden uzel po druhém do ShIoTiny. Samozřejmě je nejprve odstraněn stávající obvod ze ShIoTiny. Výsledný textový popis je uložen ve FLASH paměti.

Mimochodem, pokud chcete odstranit obvod ze zařízení, pak do něj jednoduše nahrajte prázdný obvod (neobsahující jediný prvek uzlu).

Jakmile je celý program obvodu nahrán do PLC ShioTiny, začne se „provádět“. Co to znamená?

Všimněte si, že procesy pro načtení obvodu z FLASH paměti při zapnutí napájení a při příjmu obvodu z editoru jsou totožné.

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

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

Psal jsem dlouho, ale celý proces - od „načtení“ obvodu z paměti FLASH až po spuštění hlavního cyklu - trvá u obvodu 60-80 uzlů zlomek sekundy.

Jak funguje hlavní smyčka? Velmi jednoduché. Nejprve čeká na vynoření vývoj v nějakém uzlu, pak tuto událost zpracuje. A tak donekonečna. No, nebo dokud nenahrají nové schéma na ShIoTiny.

Již několikrát jsem zmínil věci jako vývoj, uzly и vazby. Ale co to je z hlediska softwaru? Dnes o tom budeme mluvit.

Uzly, spojení a události

Stačí se podívat na příklady obvodových programů pro ShioTinypochopit, že diagram se skládá pouze ze dvou entit - uzlů (nebo prvků) a vazeb mezi nimi.

Uzel, ale ano nebo obvodový prvek je virtuální reprezentace některých akce nad daty. Může to být aritmetická operace, logická operace nebo jakákoli operace, která nás napadne. Hlavní věc je, že uzel má vstup a výstup.

vchod - toto je místo, kde uzel přijímá data. Vstupní obrázky jsou body, které jsou vždy na levé straně uzlu.

Výkon - toto je místo, kde se získá výsledek operace uzlu. Výstupní obrázky jsou body, které jsou vždy umístěny na pravé straně uzlu.

Některé uzly nemají vstupy. Takové uzly generují výsledek interně. Například konstantní uzel nebo uzel senzoru: k hlášení výsledku nepotřebují data z jiných uzlů.

Jiné uzly naopak nemají žádné výstupy. Jsou to uzly, které zobrazují například akční členy (relé nebo něco podobného). Přijímají data, ale negenerují výpočetní výsledek, který je dostupný ostatním uzlům.

Kromě toho existuje také jedinečný uzel komentářů. Nedělá nic, nemá žádné vstupy ani výstupy. Jeho účelem je vysvětlení na diagramu.

Co se stalo "událost"? Událost je vznik nových dat v jakémkoliv uzlu. Mezi události patří například: změna stavu vstupu (uzel Vstup), příjem dat z jiného zařízení (uzlů MQTT и UDP), vypršení zadaného časového období (uzly Časový spínač и Zpoždění) a tak dále.

K čemu jsou akce? Ano, za účelem zjištění, ve kterém uzlu vznikla nová data a stavy kterých uzlů je třeba v souvislosti s příjmem nových dat změnit. Událost jakoby „prochází“ řetězcem uzlů, dokud neobejde všechny uzly, jejichž stav je třeba zkontrolovat a změnit.

Všechny uzly lze rozdělit do dvou kategorií.
Zavolejte uzly, které mohou generovat události "aktivní uzly".
Uzly, které nemohou generovat události, budeme nazývat „pasivní uzly".

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

Aby to bylo jasné, zvažte příklad na obrázku.

ShioTiny: uzly, spojení a události nebo funkce kreslicích programů

Aktivními uzly jsou zde Input1, Input2 a Input3. Zbývající uzly jsou pasivní. Uvažujme, co se stane, když je ten či onen vstup uzavřen. Pro usnadnění jsou výsledky shrnuty v tabulce.

ShioTiny: uzly, spojení a události nebo funkce kreslicích programů

Jak vidíte, když dojde k události, vytvoří se řetězec od zdrojového uzlu události ke koncovému uzlu. Stav těch uzlů, které nespadají do řetězce, se nemění.

Nabízí se legitimní otázka: co se stane, když dojde ke dvěma nebo dokonce několika událostem současně?

Jako milovník díla Gleba Anfilova jsem v pokušení poslat zvědavého tazatele do jeho knihy „Útěk z překvapení“. Toto je „teorie relativity pro nejmenší“, která dobře vysvětluje, co znamená „současné“ a jak s ním žít.

Ale prakticky vše je mnohem jednodušší: když dojde ke dvěma nebo dokonce několika událostem, všechny řetězce z každého zdroje událostí jsou postupně sestaveny a zpracovány a žádné zázraky se nekonají.

Další zcela legitimní otázkou zvědavého čtenáře je, co se stane, když se uzly spojí do kruhu? Nebo, jak se říká mezi těmito vašimi chytrými kluky, zaveďte zpětnou vazbu. To znamená, že připojte výstup jednoho z uzlů ke vstupu předchozího uzlu tak, aby výstupní stav tohoto uzlu ovlivňoval stav jeho vstupu. Editor vám nedovolí přímo připojit výstup uzlu k jeho vstupu. ElDraw. Ale nepřímo, jako na obrázku níže, to lze provést.

Co se tedy v tomto případě stane? Odpověď bude velmi „určitá“: v závislosti na tom, které uzly. Podívejme se na příklad na obrázku.

ShioTiny: uzly, spojení a události nebo funkce kreslicích programů

Když jsou vstupní kontakty Input1 otevřené, horní vstup uzlu A je 0. Výstup uzlu A je také 0. Výstup uzlu B je 1. A konečně, spodní vstup uzlu A je 1. Vše je Průhledná. A pro ty, kterým to není jasné, podívejte se níže na popis toho, jak fungují uzly „AND“ a „NOT“.

Nyní sepneme kontakty vstupu Input1, to znamená, že jeden přivedeme na horní vstup uzlu A. Kdo se vyzná v elektronice, ví, že ve skutečnosti dostaneme klasický generátorový obvod využívající logické prvky. A teoreticky by takový obvod měl nekonečně produkovat sekvenci 1-0-1-0-1-0… na výstupu prvků A a B. a 0-1-0-1-0-1-…. Událost totiž musí neustále měnit stav uzlů A a B, běžících v kruhu 2-3-2-3-...!

Ale ve skutečnosti se to neděje. Obvod upadne do náhodného stavu - nebo relé zůstane zapnuto nebo vypnuto, nebo možná několikrát za sebou lehce zabzučí a vypne. Vše závisí na počasí na jižním pólu Marsu. A proto se to děje.

Událost z uzlu Input1 několikrát změní stav uzlu A, pak uzlu B a tak dále v kruhu. Program detekuje „zacyklení“ události a násilně zastaví tento karneval. Poté jsou změny stavu uzlů A a B zablokovány, dokud nenastane nová událost. Okamžik, kdy se program rozhodne "přestat se točit v kruzích!" - obecně závisí na mnoha faktorech a lze ji považovat za náhodnou.

Buďte opatrní při spojování uzlů do kroužku - efekty nebudou vždy zřejmé! Mějte dobrou představu o tom, co a proč děláte!

Je stále možné postavit generátor na uzlech, které máme k dispozici? Ano můžeš! To ale vyžaduje uzel, který dokáže sám generovat události. A existuje takový uzel - toto je „zpožděná linka“. Podívejme se, jak funguje generátor s periodou 6 sekund na obrázku níže.

ShioTiny: uzly, spojení a události nebo funkce kreslicích programů

Klíčovým prvkem generátoru je uzel A - zpožďovací linka. Pokud změníte vstupní stav zpožďovací linky z 0 na 1, pak se 1 neobjeví na výstupu okamžitě, ale až po zadané době. V našem případě jsou to 3 sekundy. Stejným způsobem, pokud změníte vstupní stav zpožďovací linky z 1 na 0, pak se po stejných 0 sekundách objeví 3 na výstupu. Doba zpoždění se nastavuje v desetinách sekundy. To znamená, že hodnota 30 znamená 3 sekundy.

Zvláštností zpožďovací linky je, že generuje událost po uplynutí doby zpoždění.

Předpokládejme, že zpočátku byl výstup zpožďovací linky 0. Po průchodu uzlem B – invertorem – se tato 0 změní na 1 a jde na vstup zpožďovací linky. Nic se neděje hned. Na výstupu zpožďovací linky zůstane 0, ale spustí se odpočítávání doby zpoždění. Uběhnou 3 sekundy. A pak zpožďovací linka vygeneruje událost. Na jeho výstupu se objeví 1. Tato jednotka se po průchodu uzlem B - střídač - změní na 0 a přejde na vstup zpožďovací linky. Uběhnou další 3 sekundy... a proces se opakuje. To znamená, že každé 3 sekundy se stav výstupu zpožďovací linky změní z 0 na 1 a poté z 1 na 0. Relé cvakne. Generátor funguje. Perioda impulsu je 6 sekund (3 sekundy na výstupu nula a 3 sekundy na výstupu jedna).

Ale ve skutečných obvodech obvykle není potřeba tento příklad používat. Existují speciální časovače uzly, které dokonale a bez vnější pomoci generují sekvenci pulzů s danou periodou. Doba trvání „nuly“ a „jedničky“ v těchto pulzech se rovná polovině periody.

Chcete-li nastavit pravidelné akce, použijte uzly časovače.

Všiml jsem si, že takové digitální signály, kde je doba trvání „nula“ a „jedna“ stejná, se nazývají „meandr“.

Doufám, že jsem trochu objasnil otázku, jak se události šíří mezi uzly a co nedělat?

Závěr a reference

Článek se ukázal být krátký, ale tento článek je odpovědí na otázky, které vyvstaly ohledně uzlů a událostí.

Jak se firmware vyvíjí a objevují se nové příklady, budu psát o tom, jak programovat ShioTiny malé články, pokud to bude pro lidi zajímavé.

Jako dříve schéma, firmware, příklady, popis komponent a vše zbytek je tady.

Dotazy, návrhy, kritika - přejděte sem: [chráněno e-mailem]

Zdroj: www.habr.com

Přidat komentář