ShIoTiny: noduri, conexiuni și evenimente sau caracteristici ale programelor de desen

ShIoTiny: noduri, conexiuni și evenimente sau caracteristici ale programelor de desen

Principalele puncte sau despre ce este vorba în acest articol

Subiectul articolului este programarea vizuală a PLC-urilor ShIoTiny pentru casa inteligentă descrisă aici: ShIoTiny: automatizare mică, Internetul lucrurilor sau „șase luni înainte de vacanță”.

Foarte pe scurt concepte precum noduri, comunicare, evoluțiile, precum și caracteristici de încărcare și execuție a unui program vizual pe ESP8266, care este baza PLC ShIoTiny.

Introducere sau câteva întrebări organizatorice

În articolul anterior despre dezvoltarea mea, am oferit o scurtă prezentare generală a capabilităților controlerului ShIoTiny.

În mod ciudat, publicul a arătat un interes destul de puternic și mi-a pus destul de multe întrebări. Unii prieteni chiar s-au oferit imediat să cumpere un controler de la mine. Nu, nu sunt împotriva câștigului de puțini bani, dar conștiința mea nu îmi permite să vând ceva care este încă foarte grosier în ceea ce privește software-ul.

Prin urmare, am postat fișierele binare de firmware și diagrama dispozitivului pe GitHub: firmware + cele mai scurte instrucțiuni + diagramă + exemple.

Acum toată lumea poate să flashe ESP-07 și să se joace ei înșiși cu firmware-ul. Dacă cineva dorește într-adevăr exact aceeași placă ca în fotografie, atunci am mai multe dintre ele. Scrie prin email [e-mail protejat]. Dar, așa cum spunea de neuitat Ogurțov: „Nu sunt responsabil pentru nimic!”

Deci, să trecem la subiect: ce este "nod„(nodul) și „eveniment"? Cum se execută programul?

Ca de obicei, să începem în ordine: prin descărcarea programului.

Cum se incarca programul

Să începem cu ce se întâmplă când apăsăm un buton Încărcați în redactor ElDraw iar programul nostru de circuit, format din pătrate frumoase, zboară în dispozitiv.

În primul rând, pe baza diagramei pe care am desenat-o, este construită descrierea acesteia sub formă de text.
În al doilea rând, verifică dacă toate intrările nodurilor sunt conectate la ieșiri. Nu ar trebui să existe intrări „atârnate”. Dacă este detectată o astfel de intrare, circuitul nu va fi încărcat în ShIoTiny, iar editorul va afișa un avertisment corespunzător.

Dacă totul a mers bine, editorul trimite o descriere text a circuitului pe rând către ShIoTiny. Desigur, circuitul existent de la ShIoTiny este mai întâi eliminat. Descrierea textului rezultată este stocată în memoria FLASH.

Apropo, dacă doriți să eliminați un circuit dintr-un dispozitiv, atunci pur și simplu încărcați un circuit gol în el (care nu conține un singur element de nod).

Odată ce întregul program de circuit este încărcat în PLC-ul ShIoTiny, acesta începe să se „execute”. Ce înseamnă?

Rețineți că procesele de încărcare a unui circuit din memoria FLASH atunci când alimentarea este pornită și când se primește un circuit de la editor sunt identice.

În primul rând, obiectele nod sunt create pe baza descrierii lor.
Apoi se fac conexiuni între noduri. Adică, sunt generate legături dintre ieșiri și intrări și intrări cu ieșiri.

Și numai după toate acestea începe ciclul principal de execuție a programului.

Am scris mult timp, dar întregul proces - de la „încărcarea” circuitului din memoria FLASH până la pornirea ciclului principal - durează o fracțiune de secundă pentru un circuit de 60-80 de noduri.

Cum funcționează bucla principală? Foarte simplu. Mai întâi așteaptă apariția evoluțiile la un nod, apoi procesează acel eveniment. Și așa mai departe la nesfârșit. Ei bine, sau până când încarcă o nouă schemă pe ShIoTiny.

De câteva ori am menționat deja lucruri precum evoluțiile, noduri и comunicare. Dar ce este asta din punct de vedere software? Vom vorbi despre asta astăzi.

Noduri, conexiuni și evenimente

Uită-te la exemplele de programe de circuit pentru ShIoTinypentru a înțelege că diagrama constă doar din două entități - noduri (sau elemente) și conexiunile dintre ele.

nod, dar da sau element de circuit este o reprezentare virtuală a unora activitate peste date. Aceasta poate fi o operație aritmetică, o operație logică sau orice operație care ne vine în minte. Principalul lucru este că nodul are o intrare și o ieșire.

Intrare - acesta este locul unde nodul primește date. Imaginile de intrare sunt puncte care sunt întotdeauna în partea stângă a nodului.

Producție - acesta este locul în care este preluat rezultatul operațiunii nodului. Imaginile de ieșire sunt puncte care sunt întotdeauna situate în partea dreaptă a nodului.

Unele noduri nu au intrări. Astfel de noduri generează rezultatul intern. De exemplu, un nod constant sau un nod senzor: nu au nevoie de date de la alte noduri pentru a raporta rezultatul.

Alte noduri, dimpotrivă, nu au ieșiri. Acestea sunt noduri care afișează, de exemplu, actuatoare (relee sau ceva similar). Acceptă date, dar nu generează un rezultat de calcul care este disponibil pentru alte noduri.

În plus, există și un nod unic de comentarii. Nu face nimic, nu are intrari sau iesiri. Scopul său este de a fi o explicație pe diagramă.

Ce s-a întâmplat "eveniment"? eveniment este apariția de date noi în orice nod. De exemplu, evenimentele includ: modificarea stării de intrare (nodul Intrare), primirea datelor de la un alt dispozitiv (noduri MQTT и UDP), expirarea unei perioade de timp specificate (noduri Timer и Întârziere) si asa mai departe.

Pentru ce sunt evenimentele? Da, pentru a determina în ce nod au apărut date noi și stările în care noduri trebuie modificate în legătură cu primirea de date noi. Evenimentul, așa cum spune, „trece” de-a lungul lanțului de noduri până când ocolește toate nodurile a căror stare trebuie verificată și modificată.

Toate nodurile pot fi împărțite în două categorii.
Să numim noduri care pot genera evenimente "noduri active".
Vom numi noduri care nu pot genera evenimente „noduri pasive".

Când un nod generează un eveniment (adică apar date noi la ieșire), atunci în cazul general se schimbă starea întregului lanț de noduri conectate la ieșirea nodului generator de evenimente.

Pentru a fi clar, luați în considerare exemplul din figură.

ShIoTiny: noduri, conexiuni și evenimente sau caracteristici ale programelor de desen

Nodurile active aici sunt Input1, Input2 și Input3. Nodurile rămase sunt pasive. Să luăm în considerare ce se întâmplă când una sau alta intrare este închisă. Pentru comoditate, rezultatele sunt rezumate într-un tabel.

ShIoTiny: noduri, conexiuni și evenimente sau caracteristici ale programelor de desen

După cum puteți vedea, atunci când are loc un eveniment, se construiește un lanț de la nodul sursă al evenimentului până la nodul final. Starea acelor noduri care nu cad în lanț nu se schimbă.

Se ridică o întrebare legitimă: ce se va întâmpla dacă două sau chiar mai multe evenimente au loc simultan?

Ca iubitor al operei lui Gleb Anfilov, sunt tentat să trimit un interlocutor curios la cartea sa „Escape from Surprise”. Aceasta este o „teorie a relativității pentru cei mici”, care explică bine ce înseamnă „simultan” și cum să trăiești cu el.

Dar practic totul este mult mai simplu: atunci când au loc două sau chiar mai multe evenimente, toate lanțurile de la fiecare sursă de evenimente sunt construite și procesate secvențial pe rând și nu au loc minuni.

Următoarea întrebare complet legitimă a unui cititor curios este ce se va întâmpla dacă nodurile sunt conectate într-un inel? Sau, după cum se spune printre acești băieți deștepți ai tăi, introduceți feedback. Adică, conectați ieșirea unuia dintre noduri la intrarea nodului anterior, astfel încât starea de ieșire a acestui nod să afecteze starea intrării sale. Editorul nu vă va permite să conectați direct ieșirea unui nod la intrarea acestuia. ElDraw. Dar indirect, ca în figura de mai jos, acest lucru se poate face.

Deci, ce se va întâmpla în acest caz? Răspunsul va fi foarte „determinat”: în funcție de ce noduri. Să ne uităm la exemplul din figură.

ShIoTiny: noduri, conexiuni și evenimente sau caracteristici ale programelor de desen

Când contactele de intrare ale Intrării 1 sunt deschise, intrarea superioară a nodului A este 0. Ieșirea nodului A este, de asemenea, 0. Ieșirea nodului B este 1. Și, în sfârșit, intrarea inferioară a nodului A este 1. Totul este clar. Și pentru cei care nu sunt clari, căutați mai jos o descriere a modului în care funcționează nodurile „ȘI” și „NU”.

Acum închidem contactele intrării Input1, adică aplicăm unul la intrarea superioară a nodului A. Cei care sunt familiarizați cu electronica știu că de fapt vom obține un circuit generator clasic folosind elemente logice. Și, în teorie, un astfel de circuit ar trebui să producă la nesfârșit secvența 1-0-1-0-1-0... la ieșirea elementelor A și B. și 0-1-0-1-0-1-…. La urma urmei, evenimentul trebuie să schimbe constant starea nodurilor A și B, rulând într-un cerc 2-3-2-3-...!

Dar în realitate acest lucru nu se întâmplă. Circuitul va cădea într-o stare aleatorie - sau releul va rămâne pornit sau oprit, sau poate bâzâit ușor și va stinge de mai multe ori la rând. Totul depinde de vremea de la polul sudic al lui Marte. Și de aceea se întâmplă asta.

Un eveniment de la nodul Input1 schimbă starea nodului A, apoi a nodului B și așa mai departe într-un cerc de mai multe ori. Programul detectează „buclă” evenimentului și oprește forțat acest carnaval. După aceasta, schimbările în starea nodurilor A și B sunt blocate până când apare un nou eveniment. Momentul în care programul decide „nu mai te învârti în cerc!” - in general, depinde de multi factori si poate fi considerat aleatoriu.

Aveți grijă când conectați nodurile într-un inel - efectele nu vor fi întotdeauna evidente! Ai o idee bună despre ce și de ce faci!

Mai este posibil să construim un generator pe nodurile disponibile pentru noi? Da, poti! Dar acest lucru necesită un nod care poate genera evenimente în sine. Și există un astfel de nod - aceasta este „linia de întârziere”. Să vedem cum funcționează un generator cu o perioadă de 6 secunde în figura de mai jos.

ShIoTiny: noduri, conexiuni și evenimente sau caracteristici ale programelor de desen

Elementul cheie al generatorului este nodul A - linia de întârziere. Dacă modificați starea de intrare a liniei de întârziere de la 0 la 1, atunci 1 nu va apărea la ieșire imediat, ci numai după un timp specificat. În cazul nostru este de 3 secunde. În același mod, dacă modificați starea de intrare a liniei de întârziere de la 1 la 0, atunci 0 la ieșire va apărea după aceleași 3 secunde. Timpul de întârziere este setat în zecimi de secundă. Adică, valoarea 30 înseamnă 3 secunde.

O caracteristică specială a liniei de întârziere este că generează un eveniment după ce timpul de întârziere a expirat.

Să presupunem că inițial ieșirea liniei de întârziere a fost 0. După ce trece nodul B - invertorul - acest 0 se transformă în 1 și merge la intrarea liniei de întârziere. Nimic nu se întâmplă imediat. La ieșirea liniei de întârziere, aceasta va rămâne 0, dar va începe numărătoarea inversă a timpului de întârziere. Trec 3 secunde. Și apoi linia de întârziere generează un eveniment. La ieșirea sa apare 1. Această unitate, după ce trece prin nodul B - invertorul - se transformă în 0 și merge la intrarea liniei de întârziere. Mai trec încă 3 secunde... și procesul se repetă. Adică, la fiecare 3 secunde, starea ieșirii liniei de întârziere se schimbă de la 0 la 1 și apoi de la 1 la 0. Releul face clic. Generatorul funcționează. Perioada de impuls este de 6 secunde (3 secunde la ieșire zero și 3 secunde la ieșire).

Dar, în circuitele reale, de obicei nu este nevoie să folosiți acest exemplu. Există noduri speciale de cronometru care generează perfect și fără ajutor extern o secvență de impulsuri cu o anumită perioadă. Durata „zero” și „unu” în aceste impulsuri este egală cu jumătate din perioadă.

Pentru a seta acțiuni periodice, utilizați nodurile de cronometru.

Observ că astfel de semnale digitale, în care durata „zero” și „unu” sunt egale, se numesc „meadru”.

Sper că am clarificat puțin întrebarea despre cum se propagă evenimentele între noduri și ce să nu faci?

Concluzie și referințe

Articolul s-a dovedit a fi scurt, dar acest articol este un răspuns la întrebările care au apărut cu privire la noduri și evenimente.

Pe măsură ce firmware-ul se dezvoltă și apar noi exemple, voi scrie despre modul de programare ShIoTiny articole mici atâta timp cât vor fi interesante pentru oameni.

Ca și înainte, diagramă, firmware, exemple, descrierea componentelor și totul restul e aici.

Întrebări, sugestii, critici - intrați aici: [e-mail protejat]

Sursa: www.habr.com

Adauga un comentariu