ShIoTiny: Čvorovi, veze i događaji ili karakteristike programa za crtanje

ShIoTiny: Čvorovi, veze i događaji ili karakteristike programa za crtanje

Glavne tačke ili ono o čemu je ovaj članak

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

Vrlo kratko koncepti kao što su čvorovi, komunikacije, događaji, kao i karakteristike učitavanja i izvršavanja vizuelnog programa na ESP8266, koji je osnova PLC-a ShIoTiny.

Uvod ili nekoliko organizacionih pitanja

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

Začudo, javnost je pokazala prilično veliko interesovanje i postavljala mi je dosta pitanja. Neki prijatelji su čak odmah ponudili da od mene kupe kontroler. Ne, nisam protiv toga da malo zaradim, ali mi savjest ne dozvoljava da prodam nešto što je softverski još uvijek vrlo sirovo.

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

Sada svi mogu da flešuju ESP-07 i sami se igraju sa firmverom. Ako neko zaista želi potpuno istu ploču kao na fotografiji, onda ih imam nekoliko. Pišite na email [email zaštićen]. Ali, kako je govorio nezaboravni Ogurcov: "Ni za šta nisam odgovoran!"

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

Kao i obično, počnimo redom: preuzimanjem programa.

Kako se program učitava

Počnimo sa onim što se dešava kada pritisnemo dugme upload u uredniku ElDraw i naš program kola, koji se sastoji od prekrasnih kvadrata, uleti u uređaj.

Prvo, na osnovu dijagrama koji smo nacrtali, gradi se njegov opis u tekstualnom obliku.
Drugo, provjerava da li su svi ulazi čvora povezani sa izlazima. Ne bi trebalo biti "visećih" ulaza. Ako se otkrije takav ulaz, kolo se neće učitati u ShIoTiny, a editor će prikazati odgovarajuće upozorenje.

Ako je sve prošlo dobro, urednik šalje tekstualni opis kola jedan po čvor u ShIoTiny. Naravno, prvo se uklanja postojeće kolo iz ShIoTiny. Rezultirajući tekstualni opis se pohranjuje u FLASH memoriju.

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

Jednom kada se cijeli program kola učita u ShIoTiny PLC, on počinje da se "izvršava". Šta to znači?

Imajte na umu da su procesi za učitavanje kola iz FLASH memorije kada je uključeno napajanje i prilikom prijema kola iz editora identični.

Prvo, čvorni objekti se kreiraju na osnovu njihovog opisa.
Zatim se uspostavljaju veze između čvorova. Odnosno, generišu se veze izlaza sa ulazima i ulaza sa izlazima.

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

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

Kako funkcionira glavna petlja? Veoma jednostavno. Prvo čeka da se pojavi događaji na nekom čvoru, zatim obrađuje taj događaj. I tako u nedogled. Pa, ili dok ne učitaju novu šemu na ShIoTiny.

Već nekoliko puta sam spomenuo stvari poput događaji, čvorovi и komunikacije. Ali šta je to sa softverske tačke gledišta? Pričaćemo o tome danas.

Čvorovi, veze i događaji

Samo pogledajte primjere sklopnih programa za ShIoTinyrazumjeti da se dijagram sastoji od samo dva entiteta - čvorova (ili elemenata) i veza između njih.

Čvor, ali da ili element kola je virtuelna reprezentacija nekih akcija preko podataka. Ovo može biti aritmetička operacija, logička operacija ili bilo koja operacija koja nam padne na pamet. Glavna stvar je da čvor ima ulaz i izlaz.

Вход - ovo je mjesto gdje čvor prima podatke. Ulazne slike su tačke koje su uvek na levoj strani čvora.

Izađi - ovo je mjesto gdje se dohvaća rezultat operacije čvora. Izlazne slike su tačke koje se uvek 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 izlaze. To su čvorovi koji prikazuju, na primjer, aktuatore (releje ili nešto slično). Oni prihvataju podatke, ali ne generišu računski rezultat koji je dostupan drugim čvorovima.

Osim toga, postoji i jedinstveni čvor za komentare. Ne radi ništa, nema ulaze ili izlaze. Njegova svrha je da bude objašnjenje na dijagramu.

Šta se desilo "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 sa drugog uređaja (čvorovi MQTT и UDP), isteka određenog vremenskog perioda (čvorovi Timer и odgađanje) i tako dalje.

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

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

Kada čvor generiše događaj (to jest, novi podaci se pojavljuju na njegovom izlazu), onda se generalno stanje čitavog lanca čvorova povezanih na izlaz čvora generatora događaja menja.

Da bi bilo jasno, razmotrite primjer na slici.

ShIoTiny: Čvorovi, veze i događaji ili karakteristike programa za crtanje

Aktivni čvorovi ovdje su Input1, Input2 i Input3. Preostali čvorovi su pasivni. Hajde da razmotrimo šta se dešava kada se jedan ili drugi ulaz zatvori. Radi praktičnosti, rezultati su sažeti u tabeli.

ShIoTiny: Čvorovi, veze i događaji ili karakteristike programa za crtanje

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

Postavlja se legitimno pitanje: šta će se dogoditi ako se dva ili čak nekoliko događaja dogode istovremeno?

Kao zaljubljenik u rad Gleba Anfilova, u iskušenju sam da pošaljem radoznalog ispitivača na njegovu knjigu „Bjekstvo od iznenađenja“. Ovo je “teorija relativnosti za mališane”, koja dobro objašnjava šta znači “simultano” i kako sa tim živjeti.

Ali praktički je sve mnogo jednostavnije: kada se dogode dva ili čak nekoliko događaja, svi lanci iz svakog izvora događaja se redom grade i obrađuju, a čuda se ne dešavaju.

Sljedeće potpuno legitimno pitanje znatiželjnog čitatelja je šta će se dogoditi ako se čvorovi povežu u prsten? Ili, kako kažu među ovim vašim pametnjacima, unesite povratnu informaciju. Odnosno, povežite izlaz jednog od čvorova sa ulazom prethodnog čvora tako da stanje izlaza ovog čvora utiče na stanje njegovog ulaza. Editor vam neće dozvoliti da direktno povežete izlaz čvora sa njegovim ulazom. ElDraw. Ali indirektno, kao na slici ispod, to se može učiniti.

Dakle, šta će se dogoditi u ovom slučaju? Odgovor će biti vrlo "definitivni": ovisno o tome koji čvorovi. Pogledajmo primjer na slici.

ShIoTiny: Čvorovi, veze i događaji ili karakteristike programa za crtanje

Kada su ulazni kontakti Input1 otvoreni, gornji ulaz čvora A je 0. Izlaz čvora A je takođe 0. Izlaz čvora B je 1. I, konačno, donji ulaz čvora A je 1. Sve je jasno. A za one kojima nije jasno, ispod potražite opis kako funkcionišu čvorovi “AND” i “NOT”.

Sada zatvaramo kontakte ulaza Input1, odnosno primjenjujemo jedan na gornji ulaz čvora A. Oni koji su upoznati s elektronikom znaju da ćemo u stvari dobiti klasično kolo generatora koristeći logičke elemente. I u teoriji, takvo kolo bi trebalo beskonačno proizvoditi niz 1-0-1-0-1-0... na izlazu elemenata A i B. i 0-1-0-1-0-1-…. Na kraju krajeva, 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 dešava. Kolo će pasti u nasumično 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 zavisi od vremena na južnom polu Marsa. I zato se ovo dešava.

Događaj iz čvora Input1 mijenja stanje čvora A, zatim čvora B, i tako dalje u krug nekoliko puta. Program detektuje „petljanje“ događaja i nasilno 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 „prestati se vrtjeti u krug!“ - generalno, zavisi od mnogo faktora i može se smatrati slučajnim.

Budite oprezni kada spajate čvorove u prsten - efekti neće uvijek biti očigledni! Imajte dobru ideju o tome šta i zašto radite!

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

ShIoTiny: Čvorovi, veze i događaji ili karakteristike programa za crtanje

Ključni element generatora je čvor A – linija kašnjenja. Ako promijenite ulazno stanje linije kašnjenja sa 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 sa 1 na 0, tada će se 0 na izlazu pojaviti nakon iste 3 sekunde. Vrijeme kašnjenja je postavljeno u desetinkama sekunde. Odnosno, vrijednost 30 znači 3 sekunde.

Posebna karakteristika linije kašnjenja je da generiše događaj nakon isteka vremena kašnjenja.

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 dešava odmah. Na izlazu linije odgode ostat će 0, ali će početi odbrojavanje vremena kašnjenja. Prolaze 3 sekunde. A onda linija kašnjenja generiše događaj. Na svom 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 od 0 do 1, a zatim od 1 do 0. Relej škljocne. Generator radi. Period impulsa je 6 sekundi (3 sekunde na izlazu nula i 3 sekunde na izlazu jedan).

Ali, u stvarnim kolima, obično nema potrebe za korištenjem ovog primjera. Postoje posebni tajmer čvorovi koji savršeno i bez vanjske pomoći generiraju niz impulsa s određenim periodom. Trajanje “nula” i “jedan” u ovim impulsima je jednako polovini perioda.

Za postavljanje periodičnih radnji koristite čvorove tajmera.

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 propagiraju između čvorova i šta ne treba raditi?

Zaključak i reference

Članak se pokazao kratkim, ali ovaj je članak odgovor na pitanja koja su se pojavila u vezi s čvorovima i događajima.

Kako se firmware razvija i pojavljuju se novi primjeri, pisat ću o tome kako programirati ShIoTiny mali članci sve dok će ljudima biti zanimljivi.

Kao i prije, dijagram, firmver, primjeri, opis komponenti i sve ostalo je ovdje.

Pitanja, prijedlozi, kritike - idite ovdje: [email zaštićen]

izvor: www.habr.com

Dodajte komentar