ShIoTiny: čvorovi, veze i događaji ili značajke programa za crtanje

ShIoTiny: čvorovi, veze i događaji ili značajke programa za crtanje

Glavne točke ili o čemu govori ovaj članak

Tema članka je vizualno programiranje PLC-a SIoSitni za pametnu kuću opisanu ovdje: ShIoTiny: mala automatizacija, internet stvari ili “šest mjeseci prije godišnjeg odmora”.

Vrlo kratko pojmovi kao što su čvorovi, komunikacija, kretanja, kao i značajke učitavanja i izvršavanja vizualnog programa na ESP8266, koji je osnova PLC-a SIoSitni.

Uvod ili nekoliko organizacijskih pitanja

U prethodnom članku o svom razvoju dao sam kratak pregled mogućnosti kontrolera SIoSitni.

Začudo, javnost je pokazala prilično velik interes i postavila mi dosta pitanja. Neki prijatelji su čak odmah ponudili da kupe kontroler od mene. Ne, nisam protiv zarade malo novca, ali savjest mi ne dopušta da prodajem nešto što je još uvijek vrlo sirovo u smislu softvera.

Stoga sam postavio binarne datoteke firmvera i dijagram uređaja na GitHub: firmware + najkraće upute + dijagram + primjeri.

Sada svatko može flashati ESP-07 i sam se igrati s firmwareom. Ako netko stvarno želi točno istu ploču kao na fotografiji, onda ih imam nekoliko. Pišite e-poštom [e-pošta zaštićena]. Ali, kako je govorio nezaboravni Ogurtsov: "Nisam ja ni za što odgovoran!"

Dakle, prijeđimo na stvar: što je "čvor" (čvor) i "događaj"? Kako se program izvršava?

Kao i obično, krenimo redom: preuzimanjem programa.

Kako se program učitava

Počnimo s onim što se događa kada pritisnemo gumb Postavi u uredniku ElDraw i naš sklopovni program, koji se sastoji od lijepih kvadrata, leti u uređaj.

Prvo, na temelju dijagrama koji smo nacrtali, izgrađen je njegov opis u tekstualnom obliku.
Drugo, provjerava jesu li svi ulazi čvorova spojeni na izlaze. Ne bi trebalo biti "visećih" ulaza. Ako se otkrije takav unos, sklop se neće učitati u ShIoTiny, a uređivač će prikazati odgovarajuće upozorenje.

Ako je sve prošlo dobro, urednik šalje tekstualni opis sklopa čvor po čvor ShIoTinyju. Naravno, prvo se uklanja postojeći sklop iz ShIoTinyja. Rezultirajući tekstualni opis pohranjuje se u FLASH memoriju.

Usput, ako želite ukloniti krug iz uređaja, jednostavno u njega učitajte prazan krug (koji ne sadrži niti jedan element čvora).

Nakon što se cijeli program sklopa učita u ShIoTiny PLC, on se počinje "izvršavati". Što to znači?

Imajte na umu da su procesi za učitavanje kruga iz FLASH memorije kada je napajanje uključeno i kada se sklop prima iz editora identični.

Prvo se stvaraju objekti čvorova na temelju njihovog opisa.
Zatim se uspostavljaju veze između čvorova. To jest, generiraju se veze između izlaza i ulaza i ulaza i izlaza.

I tek nakon svega ovoga počinje glavni ciklus izvršavanja programa.

Pisao sam dugo, ali cijeli proces - od "učitavanja" kruga iz FLASH memorije do pokretanja glavnog ciklusa - traje djelić sekunde za krug od 60-80 čvorova.

Kako radi glavna petlja? Jako jednostavno. Prvo čeka pojavu kretanja na nekom čvoru, zatim obrađuje taj događaj. I tako u nedogled. Pa, ili dok ne uploadaju novu shemu na ShIoTiny.

Već sam nekoliko puta spomenuo stvari poput kretanja, čvorovi и komunikacija. Ali što je to sa softverske točke gledišta? Razgovarat ćemo o ovome danas.

Čvorovi, veze i događaji

Samo pogledajte primjere sklopovskih programa za SIoSitnirazumjeti da se dijagram sastoji samo od dvije cjeline – čvorova (ili elemenata) i veza između njih.

čvor, ali da ili element strujnog kruga je virtualni prikaz nekih djelatnost preko podataka. To može biti aritmetička operacija, logička operacija ili bilo koja operacija koja nam padne na pamet. Glavno je da čvor ima ulaz i izlaz.

ulaz - ovo je mjesto gdje čvor prima podatke. Ulazne slike su točke koje su uvijek na lijevoj strani čvora.

Izlaz - ovo je mjesto gdje se dohvaća rezultat rada čvora. Izlazne slike su točke koje se uvijek nalaze na desnoj strani čvora.

Neki čvorovi nemaju ulaze. Takvi čvorovi interno generiraju rezultat. Na primjer, konstantni čvor ili senzorski čvor: ne trebaju im podaci iz drugih čvorova da bi prijavili rezultat.

Drugi čvorovi, naprotiv, nemaju izlaza. To su čvorovi koji prikazuju npr. aktuatore (releje ili nešto slično). Oni prihvaćaju podatke, ali ne generiraju računski rezultat koji je dostupan drugim čvorovima.

Osim toga, postoji i jedinstveni čvor komentara. Ne radi ništa, nema ulaza ni izlaza. Njegova je svrha da bude objašnjenje na dijagramu.

Što se dogodilo "događaj"? događaj je pojava novih podataka u bilo kojem čvoru. Na primjer, događaji uključuju: promjenu stanja unosa (čvor Ulazni), primanje podataka s drugog uređaja (čvorovi MQTT и UDP), istekom određenog vremenskog razdoblja (čvorovi Odbrojavanje и Odgoditi) i tako dalje.

Čemu služe događaji? Da, kako bi se utvrdilo u kojem čvoru su nastali novi podaci i stanja kojih čvorova je potrebno promijeniti u vezi s primitkom novih podataka. Događaj, takoreći, "prolazi" duž lanca čvorova dok ne zaobiđe sve čvorove čije stanje treba provjeriti i promijeniti.

Svi čvorovi mogu se podijeliti u dvije kategorije.
Pozovimo čvorove koji mogu generirati događaje "aktivni čvorovi".
Pozvat ćemo čvorove koji ne mogu generirati događaje "pasivni čvorovi".

Kada čvor generira događaj (odnosno, na njegovom izlazu se pojave novi podaci), tada se u općem slučaju mijenja stanje cijelog lanca čvorova povezanih na izlaz čvora generatora događaja.

Da bi bilo jasnije, razmotrite primjer na slici.

ShIoTiny: čvorovi, veze i događaji ili značajke programa za crtanje

Aktivni čvorovi ovdje su Input1, Input2 i Input3. Preostali čvorovi su pasivni. Razmotrimo što se događa kada se jedan ili drugi ulaz zatvori. Radi praktičnosti, rezultati su sažeti u tablici.

ShIoTiny: čvorovi, veze i događaji ili značajke programa za crtanje

Kao što vidite, kada se dogodi događaj, lanac se gradi od izvornog čvora događaja do krajnjeg čvora. Stanje onih čvorova koji ne ulaze u lanac se ne mijenja.

Postavlja se opravdano pitanje: što će se dogoditi ako se dva ili čak više događaja dogode istovremeno?

Kao zaljubljenik u rad Gleba Anfilova, u iskušenju sam poslati znatiželjnog upita o njegovoj knjizi “Bijeg od iznenađenja”. Ovo je “teorija relativnosti za male”, koja dobro objašnjava što znači “istovremeno” i kako s tim živjeti.

Ali praktički je sve puno jednostavnije: kada se dogode dva ili čak nekoliko događaja, svi se lanci iz svakog izvora događaja sekvencijalno grade i obrađuju i ne događaju se čuda.

Sljedeće posve legitimno pitanje znatiželjnog čitatelja je što će se dogoditi ako se čvorovi povežu u prsten? Ili, kako kažu među ovim tvojim pametnjakovićima, uvedi povratnu informaciju. To jest, spojite izlaz jednog od čvorova na ulaz prethodnog čvora tako da stanje izlaza ovog čvora utječe na stanje njegovog ulaza. Editor vam neće dopustiti izravno povezivanje izlaza čvora s njegovim ulazom. ElDraw. Ali neizravno, kao na slici ispod, to se može učiniti.

Dakle, što će se dogoditi u ovom slučaju? Odgovor će biti vrlo "određen": ovisno o kojim čvorovima. Pogledajmo primjer na slici.

ShIoTiny: čvorovi, veze i događaji ili značajke programa za crtanje

Kada su ulazni kontakti Input1 otvoreni, gornji ulaz čvora A je 0. Izlaz čvora A je također 0. Izlaz čvora B je 1. I, konačno, donji ulaz čvora A je 1. Sve je čisto. A za one kojima nije jasno, u nastavku pogledajte kako funkcioniraju čvorovi "I" i "NE".

Sada zatvaramo kontakte ulaza Input1, odnosno primjenjujemo jedan na gornji ulaz čvora A. Oni koji su upoznati s elektronikom znaju da ćemo zapravo dobiti klasični generatorski krug s logičkim elementima. I u teoriji, takav bi sklop trebao beskonačno proizvoditi niz 1-0-1-0-1-0… na izlazu elemenata A i B. i 0-1-0-1-0-1-…. Uostalom, događaj mora stalno mijenjati stanje čvorova A i B, trčeći u krug 2-3-2-3-...!

Ali u stvarnosti se to ne događa. Krug će pasti u slučajno stanje - ili će relej ostati uključen ili isključen, ili će se možda lagano uključiti i isključiti nekoliko puta zaredom. Sve ovisi o vremenu na južnom polu Marsa. I zato se ovo događa.

Događaj iz čvora Input1 mijenja stanje čvora A, zatim čvora B i tako u krug nekoliko puta. Program detektira "looping" događaja i prisilno zaustavlja ovaj karneval. Nakon toga, promjene u stanju čvorova A i B su blokirane dok se ne dogodi novi događaj. Trenutak u kojem program odluči "prestani se vrtjeti u krug!" - općenito, ovisi o mnogim čimbenicima i može se smatrati nasumičnim.

Budite oprezni pri povezivanju čvorova u prsten - efekti neće uvijek biti očiti! Imajte dobru ideju što i zašto radite!

Je li još uvijek moguće izgraditi generator na čvorovima koji su nam dostupni? Da, možete! Ali to zahtijeva čvor koji može sam generirati događaje. I postoji takav čvor - ovo je "linija kašnjenja". Pogledajmo kako radi generator s periodom od 6 sekundi na donjoj slici.

ShIoTiny: čvorovi, veze i događaji ili značajke programa za crtanje

Ključni element generatora je čvor A - linija kašnjenja. Ako promijenite ulazno stanje linije kašnjenja s 0 na 1, tada se 1 neće pojaviti na izlazu odmah, već tek nakon određenog vremena. U našem slučaju to je 3 sekunde. Na isti način, ako promijenite ulazno stanje linije kašnjenja s 1 na 0, tada će se 0 na izlazu pojaviti nakon iste 3 sekunde. Vrijeme odgode se postavlja u desetinkama sekunde. Odnosno, vrijednost 30 znači 3 sekunde.

Posebnost linije odgode je da generira događaj nakon isteka vremena odgode.

Pretpostavimo da je inicijalno izlaz linije kašnjenja bio 0. Nakon prolaska čvora B - pretvarača - ova 0 se pretvara u 1 i ide na ulaz linije kašnjenja. Ništa se ne događa odmah. Na izlazu linije kašnjenja ostat će 0, ali će započeti odbrojavanje vremena kašnjenja. Prolaze 3 sekunde. A onda linija kašnjenja generira događaj. Na izlazu se pojavljuje 1. Ova jedinica, nakon prolaska kroz čvor B - pretvarač - pretvara se u 0 i ide na ulaz linije kašnjenja. Prolaze još 3 sekunde... i proces se ponavlja. To jest, svake 3 sekunde stanje izlaza linije kašnjenja mijenja se s 0 na 1, a zatim s 1 na 0. Relej klikne. Generator radi. Period impulsa je 6 sekundi (3 sekunde na izlazu nula i 3 sekunde na izlazu jedan).

Ali, u stvarnim krugovima, obično nema potrebe koristiti ovaj primjer. Postoje posebni vremenski čvorovi koji savršeno i bez vanjske pomoći generiraju niz impulsa sa zadanim periodom. Trajanje "nula" i "jedan" u ovim impulsima jednako je polovici perioda.

Za postavljanje povremenih radnji koristite čvorove mjerača vremena.

Napominjem da se takvi digitalni signali, gdje je trajanje "nula" i "jedan" jednako, nazivaju "meander".

Nadam se da sam malo razjasnio pitanje o tome kako se događaji šire između čvorova i što ne raditi?

Zaključak i literatura

Pokazalo se da je članak kratak, ali ovaj je članak odgovor na pitanja koja su se pojavila u vezi s čvorovima i događajima.

Kako se firmware razvija i pojavljuju novi primjeri, pisati ću o tome kako programirati SIoSitni male članke sve dok će to ljudima biti zanimljivo.

Kao i prije, dijagram, firmware, primjeri, opis komponenti i sve ostatak je ovdje.

Pitanja, prijedlozi, kritike - idite ovdje: [e-pošta zaštićena]

Izvor: www.habr.com

Dodajte komentar