ShioTiny: uzly, spojenia a udalosti alebo funkcie programov na kreslenie

ShioTiny: uzly, spojenia a udalosti alebo funkcie programov na kreslenie

Hlavné body alebo o čom je tento článok

Témou článku je vizuálne programovanie PLC ShioTiny pre inteligentný dom opísaný tu: ShioTiny: malá automatizácia, internet vecí alebo „šesť mesiacov pred dovolenkou“.

Veľmi stručne pojmy ako napr weby, komunikácia, vývoj, ako aj funkcie načítania a spustenia vizuálneho programu na ESP8266, ktorý je základom PLC ShioTiny.

Úvod alebo pár organizačných otázok

V predchádzajúcom článku o mojom vývoji som uviedol stručný prehľad možností ovládača ShioTiny.

Napodiv verejnosť prejavila dosť veľký záujem a pýtala sa ma dosť veľa otázok. Niektorí kamaráti mi dokonca hneď ponúkli, že si odo mňa ovládač kúpia. Nie, nie som proti zarobeniu trochy peňazí, ale moje svedomie mi nedovoľuje predať niečo, čo je z hľadiska softvéru stále veľmi hrubé.

Preto som na GitHub zverejnil binárne súbory firmvéru a schému zariadenia: firmvér + najkratší návod + schéma + príklady.

Teraz môže každý flashovať ESP-07 a hrať sa s firmvérom sám. Ak by niekto naozaj chcel presne takú istú dosku ako na fotke, tak ich mám hneď niekoľko. Píšte na email [chránené e-mailom]. Ale, ako hovorieval nezabudnuteľný Ogurtsov: "Za nič nemôžem!"

Takže poďme k veci: čo je "uzol" (uzol) a "udalosť"? Ako sa program vykonáva?

Ako obvykle, začnime po poriadku: stiahnutím programu.

Ako sa program načítava

Začnime tým, čo sa stane, keď stlačíme tlačidlo nahrať v editore ElDraw a náš obvodový program, pozostávajúci z krásnych štvorcov, letí do zariadenia.

Najprv sa na základe nami nakreslenej schémy zostaví jej popis v textovej forme.
Po druhé, kontroluje, či sú všetky vstupy uzla pripojené k výstupom. Nemali by existovať žiadne „visiace“ vchody. Ak sa takýto vstup zistí, obvod sa nenačíta do ShIoTiny a editor zobrazí zodpovedajúce varovanie.

Ak všetko prebehlo dobre, editor odošle textový popis okruhu jeden uzol po druhom do ShIoTiny. Samozrejme, najprv sa odstráni existujúci okruh zo ShIoTiny. Výsledný textový popis je uložený vo FLASH pamäti.

Mimochodom, ak chcete zo zariadenia odstrániť obvod, jednoducho doň vložte prázdny obvod (neobsahujúci jediný prvok uzla).

Akonáhle je celý program obvodu načítaný do ShIoTiny PLC, začne sa „vykonávať“. Čo to znamená?

Všimnite si, že procesy načítania obvodu z pamäte FLASH pri zapnutí napájania a pri prijatí obvodu z editora sú identické.

Najprv sa vytvoria uzlové objekty na základe ich popisu.
Potom sa vytvoria spojenia medzi uzlami. To znamená, že sa generujú väzby výstupov na vstupy a vstupy na výstupy.

A až potom sa spustí hlavný cyklus vykonávania programu.

Písal som dlho, ale celý proces - od „načítania“ obvodu z pamäte FLASH až po spustenie hlavného cyklu - trvá zlomok sekundy pre obvod 60-80 uzlov.

Ako funguje hlavná slučka? Veľmi jednoduché. Najprv čaká na vynorenie vývoj v nejakom uzle, potom túto udalosť spracuje. A tak donekonečna. No, alebo kým nenahrajú novú schému do ShIoTiny.

Už som niekoľkokrát spomínal veci ako vývoj, weby и komunikácia. Čo je to však zo softvérového hľadiska? Dnes si o tom povieme.

Uzly, spojenia a udalosti

Stačí sa pozrieť na príklady obvodových programov pre ShioTinypochopiť, že diagram pozostáva iba z dvoch entít - uzlov (alebo prvkov) a väzieb medzi nimi.

uzol, ale áno alebo obvodový prvok je virtuálnou reprezentáciou niektorých činnosť nad údajmi. Môže to byť aritmetická operácia, logická operácia alebo akákoľvek operácia, ktorá nás napadne. Hlavná vec je, že uzol má vstup a výstup.

Vstup - toto je miesto, kde uzol prijíma dáta. Vstupné obrázky sú body, ktoré sú vždy na ľavej strane uzla.

Výkon - toto je miesto, kde sa získa výsledok operácie uzla. Výstupné obrázky sú body, ktoré sú vždy umiestnené na pravej strane uzla.

Niektoré uzly nemajú vstupy. Takéto uzly generujú výsledok interne. Napríklad konštantný uzol alebo uzol senzora: nepotrebujú údaje z iných uzlov na hlásenie výsledku.

Ostatné uzly naopak nemajú žiadne výstupy. Sú to uzly, ktoré zobrazujú napríklad aktuátory (relé alebo niečo podobné). Prijímajú údaje, ale negenerujú výpočtový výsledok, ktorý je dostupný pre iné uzly.

Okrem toho existuje aj jedinečný komentárový uzol. Nerobí nič, nemá žiadne vstupy ani výstupy. Jeho účelom je byť vysvetlením na diagrame.

Čo sa stalo "udalosť»? udalosť je vznik nových údajov v akomkoľvek uzle. Napríklad udalosti zahŕňajú: zmenu stavu vstupu (uzol Vstup), prijímanie údajov z iného zariadenia (uzlov MQTT и UDP), uplynutie stanoveného časového obdobia (uzly Časovač и oneskorenie) a tak ďalej.

Na čo sú podujatia? Áno, aby sa zistilo, v ktorom uzle vznikli nové údaje a stavy ktorých uzlov je potrebné zmeniť v súvislosti s príjmom nových údajov. Udalosť takpovediac „prechádza“ reťazcom uzlov, až kým neobíde všetky uzly, ktorých stav je potrebné skontrolovať a zmeniť.

Všetky uzly možno rozdeliť do dvoch kategórií.
Zavolajme uzly, ktoré môžu generovať udalosti "aktívne uzly".
Uzly, ktoré nemôžu generovať udalosti, budeme nazývať „pasívne uzly".

Keď uzol generuje udalosť (to znamená, že sa na jeho výstupe objavia nové dáta), potom sa vo všeobecnom prípade zmení stav celého reťazca uzlov pripojených k výstupu uzla generátora udalostí.

Aby to bolo jasné, zvážte príklad na obrázku.

ShioTiny: uzly, spojenia a udalosti alebo funkcie programov na kreslenie

Aktívnymi uzlami sú tu Input1, Input2 a Input3. Zvyšné uzly sú pasívne. Uvažujme, čo sa stane, keď je jeden alebo druhý vstup zatvorený. Pre prehľadnosť sú výsledky zhrnuté v tabuľke.

ShioTiny: uzly, spojenia a udalosti alebo funkcie programov na kreslenie

Ako vidíte, keď dôjde k udalosti, vytvorí sa reťazec od zdrojového uzla udalosti po koncový uzol. Stav tých uzlov, ktoré nespadajú do reťazca, sa nemení.

Vynára sa legitímna otázka: čo sa stane, ak dôjde k dvom alebo dokonca viacerým udalostiam súčasne?

Ako milovník diela Gleba Anfilova som v pokušení poslať zvedavého pýtajúceho sa na jeho knihu „Útek z prekvapenia“. Toto je „teória relativity pre najmenších“, ktorá dobre vysvetľuje, čo znamená „simultánne“ a ako s tým žiť.

Ale prakticky všetko je oveľa jednoduchšie: keď sa vyskytnú dve alebo dokonca niekoľko udalostí, všetky reťazce z každého zdroja udalostí sú postupne zostavené a spracované postupne a žiadne zázraky sa nedejú.

Ďalšia úplne legitímna otázka od zvedavého čitateľa je, čo sa stane, ak sa uzly spoja do kruhu? Alebo, ako sa hovorí medzi týmito vašimi šikovnými chlapmi, zaveďte spätnú väzbu. To znamená, že pripojte výstup jedného z uzlov k vstupu predchádzajúceho uzla tak, aby výstupný stav tohto uzla ovplyvnil stav jeho vstupu. Editor vám nedovolí priamo pripojiť výstup uzla k jeho vstupu. ElDraw. Ale nepriamo, ako na obrázku nižšie, to možno urobiť.

Čo sa teda stane v tomto prípade? Odpoveď bude veľmi „jednoznačná“: v závislosti od toho, ktoré uzly. Pozrime sa na príklad na obrázku.

ShioTiny: uzly, spojenia a udalosti alebo funkcie programov na kreslenie

Keď sú vstupné kontakty vstupu 1 otvorené, horný vstup uzla A je 0. Výstup uzla A je tiež 0. Výstup uzla B je 1. A napokon dolný vstup uzla A je 1. Všetko je jasný. A pre tých, ktorým to nie je jasné, nižšie nájdete popis toho, ako fungujú uzly „A“ a „NIE“.

Teraz zatvoríme kontakty vstupu Input1, to znamená, že jeden aplikujeme na horný vstup uzla A. Tí, ktorí sú oboznámení s elektronikou, vedia, že v skutočnosti dostaneme klasický generátorový obvod využívajúci logické prvky. A teoreticky by takýto obvod mal nekonečne produkovať sekvenciu 1-0-1-0-1-0… na výstupe prvkov A a B. a 0-1-0-1-0-1-…. Koniec koncov, udalosť musí neustále meniť stav uzlov A a B, prebiehajúcich v kruhu 2-3-2-3-...!

Ale v skutočnosti sa to nedeje. Okruh spadne do náhodného stavu - alebo relé zostane zapnuté alebo vypnuté, alebo možno mierne zabzučí a vypne niekoľkokrát za sebou. Všetko závisí od počasia na južnom póle Marsu. A preto sa to deje.

Udalosť z uzla Input1 niekoľkokrát zmení stav uzla A, potom uzla B atď. Program zistí „zacyklenie“ udalosti a násilne zastaví tento karneval. Potom sú zmeny stavu uzlov A a B zablokované, kým nenastane nová udalosť. Moment, v ktorom sa program rozhodne „prestať sa točiť v kruhoch!“ - vo všeobecnosti závisí od mnohých faktorov a možno ho považovať za náhodný.

Buďte opatrní pri spájaní uzlov do krúžku - efekty nebudú vždy zrejmé! Majte dobrú predstavu o tom, čo a prečo robíte!

Je ešte možné postaviť generátor na uzloch, ktoré máme k dispozícii? Áno môžeš! To si však vyžaduje uzol, ktorý dokáže sám generovať udalosti. A existuje taký uzol - toto je „oneskorovacia čiara“. Pozrime sa, ako funguje generátor s periódou 6 sekúnd na obrázku nižšie.

ShioTiny: uzly, spojenia a udalosti alebo funkcie programov na kreslenie

Kľúčovým prvkom generátora je uzol A - oneskorovacia linka. Ak zmeníte vstupný stav oneskorovacej linky z 0 na 1, potom sa 1 nezobrazí na výstupe okamžite, ale až po určenom čase. V našom prípade sú to 3 sekundy. Rovnakým spôsobom, ak zmeníte stav vstupu oneskorovacej linky z 1 na 0, potom sa 0 na výstupe objaví po rovnakých 3 sekundách. Čas oneskorenia sa nastavuje v desatinách sekundy. To znamená, že hodnota 30 znamená 3 sekundy.

Zvláštnosťou oneskorovacej linky je, že generuje udalosť po uplynutí doby oneskorenia.

Predpokladajme, že pôvodne bol výstup oneskorovacej linky 0. Po prejdení uzla B - meniča - sa táto 0 zmení na 1 a ide na vstup oneskorovacej linky. Nič sa nedeje hneď. Na výstupe oneskorovacej linky zostane 0, ale spustí sa odpočítavanie času oneskorenia. Ubehnú 3 sekundy. A potom oneskorovacia linka vygeneruje udalosť. Na jeho výstupe sa objaví 1. Táto jednotka sa po prechode cez uzol B - menič - zmení na 0 a prejde na vstup oneskorovacej linky. Uplynú ďalšie 3 sekundy... a proces sa opakuje. To znamená, že každé 3 sekundy sa stav výstupu oneskorovacej linky zmení z 0 na 1 a potom z 1 na 0. Relé cvakne. Generátor funguje. Perióda impulzu je 6 sekúnd (3 sekundy na výstupe nula a 3 sekundy na výstupe jedna).

Ale v skutočných obvodoch zvyčajne nie je potrebné použiť tento príklad. Existujú špeciálne uzly časovača, ktoré dokonale a bez vonkajšej pomoci generujú sekvenciu impulzov s danou periódou. Trvanie „nuly“ a „jedna“ v týchto impulzoch sa rovná polovici periódy.

Ak chcete nastaviť pravidelné akcie, použite uzly časovača.

Všimol som si, že takéto digitálne signály, kde je trvanie „nula“ a „jedna“ rovnaké, sa nazývajú „meander“.

Dúfam, že som trochu objasnil otázku, ako sa udalosti šíria medzi uzlami a čo nerobiť?

Záver a referencie

Článok sa ukázal byť krátky, ale tento článok je odpoveďou na otázky, ktoré vznikli v súvislosti s uzlami a udalosťami.

Ako sa firmvér vyvíja a objavujú sa nové príklady, budem písať o tom, ako programovať ShioTiny malé články, pokiaľ to bude pre ľudí zaujímavé.

Ako predtým, schéma, firmvér, príklady, popis komponentov a všetko zvyšok je tu.

Otázky, návrhy, kritika - tu: [chránené e-mailom]

Zdroj: hab.com

Pridať komentár