„ShIoTiny“: piešimo programų mazgai, nuorodos ir įvykiai arba funkcijos

„ShIoTiny“: piešimo programų mazgai, nuorodos ir įvykiai arba funkcijos

Pagrindiniai punktai arba apie ką šis straipsnis

Straipsnio tema – vizualinis PLC programavimas ShioTiny čia aprašytiems išmaniesiems namams: „ShIoTiny“: maža automatika, daiktų internetas arba „šeši mėnesiai iki atostogų“.

Labai trumpai tokios sąvokos kaip svetainės, ryšiai, pokyčiai, taip pat vaizdinės programos įkėlimo ir vykdymo funkcijas ESP8266, kuris yra PLC pagrindas ShioTiny.

Įvadas arba pora organizacinių klausimų

Ankstesniame straipsnyje apie savo kūrimą trumpai apžvelgiau valdiklio galimybes ShioTiny.

Kaip bebūtų keista, visuomenė rodė gana didelį susidomėjimą ir uždavė man gana daug klausimų. Kai kurie draugai net iškart pasiūlė iš manęs nusipirkti valdiklį. Ne, aš nesu prieš uždirbti šiek tiek pinigų, bet mano sąžinė neleidžia man parduoti kažko, kas vis dar yra labai grubus programinės įrangos atžvilgiu.

Todėl „GitHub“ paskelbiau programinės įrangos dvejetainius failus ir įrenginio diagramą: programinė įranga + trumpiausios instrukcijos + diagrama + pavyzdžiai.

Dabar kiekvienas gali paleisti ESP-07 ir žaisti su programine įranga pats. Jei kas tikrai nori lygiai tokios pat lentos kaip nuotraukoje, tai turiu kelias. Rašykite el [apsaugotas el. paštu]. Tačiau, kaip sakydavo nepamirštamas Ogurcovas: „Aš už nieką neatsakau!

Taigi, pereikime prie esmės: kas yra "mazgas" (mazgas) ir "įvykis"? Kaip vykdoma programa?

Kaip įprasta, pradėkime eilės tvarka: atsisiųsdami programą.

Kaip įkeliama programa

Pradėkime nuo to, kas nutinka, kai paspaudžiame mygtuką Įkelti redaktoriuje ElDraw ir mūsų grandinės programa, susidedanti iš gražių kvadratų, skrenda į įrenginį.

Pirma, remiantis mūsų nupiešta diagrama, sudaromas jos aprašymas teksto forma.
Antra, jis patikrina, ar visi mazgų įėjimai yra prijungti prie išėjimų. Neturėtų būti "kabančių" įėjimų. Jei aptinkama tokia įvestis, grandinė nebus įkelta į „ShIoTiny“, o redaktorius parodys atitinkamą įspėjimą.

Jei viskas klostėsi gerai, redaktorius į „ShIoTiny“ siunčia tekstinį grandinės aprašymą po vieną mazgą. Žinoma, pirmiausia pašalinama esama „ShIoTiny“ grandinė. Gautas teksto aprašymas išsaugomas FLASH atmintyje.

Beje, jei norite pašalinti grandinę iš įrenginio, tiesiog įkelkite į ją tuščią grandinę (be vieno mazgo elemento).

Kai visa grandinės programa įkeliama į „ShIoTiny PLC“, ji pradeda „vykdyti“. Ką tai reiškia?

Atkreipkite dėmesį, kad grandinės įkėlimo iš FLASH atminties procesai, kai įjungiamas maitinimas, ir kai gaunama grandinė iš redaktoriaus, yra identiški.

Pirma, mazgų objektai sukuriami remiantis jų aprašymu.
Tada tarp mazgų užmezgami ryšiai. Tai yra, generuojamos išėjimų sąsajos su įėjimais ir įvesties su išėjimais.

Ir tik po viso to prasideda pagrindinis programos vykdymo ciklas.

Rašiau ilgai, bet visas procesas – nuo ​​grandinės „įkėlimo“ iš FLASH atminties iki pagrindinio ciklo paleidimo – 60–80 mazgų grandinėje užtrunka sekundės dalį.

Kaip veikia pagrindinė kilpa? Labai paprasta. Pirmiausia jis laukia atsiradimo pokyčiai tam tikrame mazge, tada apdoroja tą įvykį. Ir taip be galo. Na, arba kol jie į „ShIoTiny“ įkels naują schemą.

Jau keletą kartų minėjau tokius dalykus pokyčiai, svetainės и ryšiai. Bet kas tai yra programinės įrangos požiūriu? Šiandien apie tai kalbėsime.

Mazgai, ryšiai ir įvykiai

Tiesiog pažvelkite į grandinės programų pavyzdžius ShioTinysuprasti, kad diagrama susideda tik iš dviejų esybių – mazgų (arba elementų) ir jungčių tarp jų.

Mazgas, bet taip arba grandinės elementas yra virtualus kai kurių veiksmai per duomenis. Tai gali būti aritmetinė operacija, loginė operacija arba bet kokia operacija, kuri ateina į galvą. Svarbiausia, kad mazgas turėtų įėjimą ir išėjimą.

Indėlis - tai vieta, kur mazgas gauna duomenis. Įvesties vaizdai yra taškai, kurie visada yra kairėje mazgo pusėje.

Produkcija - tai vieta, kur gaunamas mazgo operacijos rezultatas. Išvesties vaizdai yra taškai, kurie visada yra dešinėje mazgo pusėje.

Kai kurie mazgai neturi įėjimų. Tokie mazgai sukuria rezultatą viduje. Pavyzdžiui, nuolatinis mazgas arba jutiklio mazgas: jiems nereikia duomenų iš kitų mazgų, kad būtų galima pranešti apie rezultatą.

Kiti mazgai, atvirkščiai, neturi išėjimų. Tai mazgai, kuriuose rodomos, pavyzdžiui, pavaros (relės ar kažkas panašaus). Jie priima duomenis, bet nesukuria skaičiavimo rezultato, kuris būtų prieinamas kitiems mazgams.

Be to, yra ir unikalus komentarų mazgas. Jis nieko nedaro, neturi įėjimų ar išėjimų. Jo paskirtis – būti diagramos paaiškinimu.

Kas nutiko "įvykis"? Renginys yra naujų duomenų atsiradimas bet kuriame mazge. Pavyzdžiui, įvykiai apima: įvesties būsenos pasikeitimą (mazgas Indėlis), gaunant duomenis iš kito įrenginio (mazgų MQTT и UDP), pasibaigus nurodytam laikotarpiui (mazgai laikrodis и delsimas) ir taip toliau.

Kam skirti renginiai? Taip, norint nustatyti, kuriame mazge atsirado naujų duomenų ir kurių mazgų būsenas reikia keisti gavus naujus duomenis. Įvykis tarsi „praeina“ išilgai mazgų grandinės, kol aplenkia visus mazgus, kurių būseną reikia patikrinti ir pakeisti.

Visi mazgai gali būti suskirstyti į dvi kategorijas.
Iškvieskime mazgus, kurie gali generuoti įvykius "aktyvūs mazgai".
Iškviesime mazgus, kurie negali generuoti įvykių "pasyvūs mazgai".

Kai mazgas sugeneruoja įvykį (ty jo išvestyje pasirodo nauji duomenys), tada bendruoju atveju pasikeičia visos grandinės mazgų, prijungtų prie įvykių generatoriaus mazgo išvesties, būsena.

Kad būtų aišku, apsvarstykite pavyzdį paveikslėlyje.

„ShIoTiny“: piešimo programų mazgai, nuorodos ir įvykiai arba funkcijos

Aktyvūs mazgai čia yra Input1, Input2 ir Input3. Likę mazgai yra pasyvūs. Panagrinėkime, kas nutinka uždarius vieną ar kitą įvestį. Patogumui rezultatai apibendrinami lentelėje.

„ShIoTiny“: piešimo programų mazgai, nuorodos ir įvykiai arba funkcijos

Kaip matote, įvykus įvykiui, sukuriama grandinė nuo įvykio šaltinio mazgo iki galutinio mazgo. Tų mazgų, kurie nepatenka į grandinę, būsena nesikeičia.

Kyla teisėtas klausimas: kas bus, jei vienu metu įvyks du ar net keli įvykiai?

Man, kaip Glebo Anfilovo kūrybos mylėtojui, kyla pagunda nusiųsti smalsų jo knygos „Pabėgimas nuo netikėtumo“ klausėją. Tai „reliatyvumo teorija mažiesiems“, kuri puikiai paaiškina, ką reiškia „vienalaikis“ ir kaip su tuo gyventi.

Tačiau praktiškai viskas yra daug paprasčiau: kai įvyksta du ar net keli įvykiai, visos grandinės iš kiekvieno įvykio šaltinio yra nuosekliai kuriamos ir apdorojamos paeiliui, ir stebuklų neįvyksta.

Kitas visiškai teisėtas smalsaus skaitytojo klausimas: kas atsitiks, jei mazgai bus sujungti į žiedą? Arba, kaip sakoma tarp šių protingų vaikinų, pateikite atsiliepimus. Tai yra, prijunkite vieno iš mazgų išvestį prie ankstesnio mazgo įvesties, kad šio mazgo išvesties būsena paveiktų jo įvesties būseną. Redaktorius neleis tiesiogiai prijungti mazgo išvesties prie jo įvesties. ElDraw. Tačiau netiesiogiai, kaip parodyta paveikslėlyje žemiau, tai galima padaryti.

Taigi, kas bus šiuo atveju? Atsakymas bus labai „aiškus“: priklausomai nuo to, kurie mazgai. Pažvelkime į pavyzdį paveikslėlyje.

„ShIoTiny“: piešimo programų mazgai, nuorodos ir įvykiai arba funkcijos

Kai yra atviri Input1 įvesties kontaktai, mazgo A viršutinė įvestis yra 0. Mazgo A išvestis taip pat yra 0. Mazgo B išvestis yra 1. Ir galiausiai mazgo A apatinė įvestis yra 1. Viskas yra aišku. O tiems, kam neaišku, žemiau rasite aprašymą, kaip veikia mazgai „IR“ ir „NE“.

Dabar uždarome Input1 įvesties kontaktus, tai yra, vieną pritaikome prie viršutinės mazgo A įvesties. Tie, kurie yra susipažinę su elektronika, žino, kad iš tikrųjų gausime klasikinę generatoriaus grandinę naudojant loginius elementus. Ir teoriškai tokia grandinė turėtų be galo sukurti seką 1-0-1-0-1-0… elementų A ir B išvestyje. ir 0-1-0-1-0-1-…. Juk įvykis turi nuolat keisti mazgų A ir B būseną, bėgdamas ratu 2-3-2-3-...!

Tačiau iš tikrųjų tai neįvyksta. Grandinė pateks į atsitiktinę būseną - arba relė liks įjungta arba išjungta, o gal šiek tiek įjungs ir išsijungs kelis kartus iš eilės. Viskas priklauso nuo oro pietiniame Marso ašigalyje. Ir dėl to taip nutinka.

Įvykis iš mazgo Input1 pakeičia mazgo A būseną, tada mazgo B ir tt kelis kartus ratu. Programa aptinka įvykio „kilpą“ ir priverstinai sustabdo šį karnavalą. Po to mazgų A ir B būklės pokyčiai blokuojami, kol įvyksta naujas įvykis. Akimirka, kai programa nusprendžia „nustoti suktis ratu! – apskritai tai priklauso nuo daugelio faktorių ir gali būti laikoma atsitiktine.

Būkite atsargūs jungdami mazgus į žiedą – poveikis ne visada bus akivaizdus! Gerai įsivaizduokite, ką ir kodėl darote!

Ar vis dar įmanoma sukurti generatorių ant mums prieinamų mazgų? Taip tu gali! Tačiau tam reikia mazgo, kuris pats galėtų generuoti įvykius. Ir yra toks mazgas - tai yra „delsimo linija“. Žemiau esančiame paveikslėlyje pažiūrėkime, kaip veikia generatorius su 6 sekundžių periodu.

„ShIoTiny“: piešimo programų mazgai, nuorodos ir įvykiai arba funkcijos

Pagrindinis generatoriaus elementas yra mazgas A – vėlinimo linija. Jei pakeisite delsos linijos įvesties būseną nuo 0 iki 1, tada 1 išėjime pasirodys ne iš karto, o tik po nurodyto laiko. Mūsų atveju tai yra 3 sekundės. Lygiai taip pat, jei pakeisite delsos linijos įvesties būseną nuo 1 iki 0, tada 0 išėjime pasirodys po tų pačių 3 sekundžių. Vėlavimo laikas nustatomas dešimtosiomis sekundės dalimis. Tai reiškia, kad reikšmė 30 reiškia 3 sekundes.

Ypatinga delsos linijos savybė yra ta, kad ji generuoja įvykį pasibaigus delsos laikui.

Tarkime, kad iš pradžių vėlinimo linijos išvestis buvo 0. Praėjus mazgą B – keitiklį – šis 0 virsta 1 ir eina į vėlinimo linijos įvestį. Niekas nevyksta iš karto. Vėlavimo linijos išvestyje jis išliks 0, tačiau prasidės vėlavimo laiko skaičiavimas. Praeina 3 sekundės. Tada vėlavimo linija generuoja įvykį. Jo išvestyje pasirodo 1. Šis blokas, praėjęs per mazgą B - keitiklį - virsta 0 ir eina į vėlinimo linijos įėjimą. Praeina dar 3 sekundės... ir procesas kartojasi. Tai yra, kas 3 sekundes delsos linijos išvesties būsena keičiasi nuo 0 iki 1, o po to nuo 1 iki 0. Relė spragteli. Generatorius veikia. Impulso periodas yra 6 sekundės (3 sekundės prie nulio ir 3 sekundės prie išėjimo XNUMX).

Tačiau tikrose grandinėse paprastai nereikia naudoti šio pavyzdžio. Yra specialūs laikmačio mazgai, kurie puikiai ir be pašalinės pagalbos generuoja impulsų seką tam tikru periodu. Šių impulsų „nulis“ ir „vienas“ trukmė yra lygi pusei laikotarpio.

Norėdami nustatyti periodinius veiksmus, naudokite laikmačio mazgus.

Atkreipiu dėmesį, kad tokie skaitmeniniai signalai, kai „nulio“ ir „vieno“ trukmė yra vienoda, vadinami „meander“.

Tikiuosi, kad šiek tiek paaiškinau klausimą apie tai, kaip įvykiai perduodami tarp mazgų ir ko nedaryti?

Išvados ir nuorodos

Straipsnis pasirodė trumpas, tačiau šis straipsnis yra atsakymas į klausimus, iškilusius dėl mazgų ir įvykių.

Kai bus tobulinama programinė įranga ir atsiras naujų pavyzdžių, parašysiu apie tai, kaip programuoti ShioTiny maži straipsniai, kol tai bus įdomu žmonėms.

Kaip ir anksčiau, diagrama, programinė įranga, pavyzdžiai, komponentų aprašymas ir viskas likusi dalis yra čia.

Klausimai, pasiūlymai, kritika – eikite čia: [apsaugotas el. paštu]

Šaltinis: www.habr.com

Добавить комментарий