ShioTiny: joonistusprogrammide sõlmed, ühendused ja sündmused või funktsioonid

ShioTiny: joonistusprogrammide sõlmed, ühendused ja sündmused või funktsioonid

Põhipunktid või millest see artikkel räägib

Artikli teema on visuaalne PLC programmeerimine ShioTiny siin kirjeldatud nutika kodu jaoks: ShioTiny: väike automatiseerimine, asjade internet või "kuus kuud enne puhkust".

Väga lühidalt mõisted nagu saite, teabevahetus, arengud, samuti visuaalse programmi laadimise ja käivitamise funktsioonid ESP8266, mis on PLC aluseks ShioTiny.

Sissejuhatus või paar korralduslikku küsimust

Eelmises artiklis minu arengust andsin lühiülevaate kontrolleri võimalustest ShioTiny.

Kummalisel kombel näitas avalikkus üsna suurt huvi ja esitas mulle üsna palju küsimusi. Mõned sõbrad pakkusid isegi kohe, et ostavad minu käest kontrolleri. Ei, ma ei ole väikese raha teenimise vastu, aga mu südametunnistus ei luba mul müüa midagi, mis on tarkvara poolest ikka väga toores.

Seetõttu postitasin püsivara kahendfailid ja seadme diagrammi GitHubi: püsivara + lühimad juhised + diagramm + näited.

Nüüd saavad kõik ESP-07 välgutada ja ise püsivaraga mängida. Kui keegi tõesti soovib täpselt samasugust tahvlit nagu fotol, siis mul on neid mitu. Kirjutage meili teel [meiliga kaitstud]. Kuid nagu unustamatu Ogurtsov tavatses öelda: "Ma ei vastuta millegi eest!"

Niisiis, asume asja juurde: mis on "sõlme" (sõlm) ja "sündmus"? Kuidas programmi täidetakse?

Nagu tavaliselt, alustame järjekorras: laadides alla programmi.

Kuidas programm laaditakse

Alustame sellest, mis juhtub, kui vajutame nuppu Täiendava toimetajas ElDraw ja meie ilusatest ruutudest koosnev ringprogramm lendab seadmesse.

Esiteks koostatakse meie koostatud diagrammi põhjal selle kirjeldus teksti kujul.
Teiseks kontrollib see, kas kõik sõlme sisendid on väljunditega ühendatud. Ei tohiks olla "rippuvaid" sissepääsusid. Kui selline sisend tuvastatakse, ei laadita vooluringi ShIoTinysse ja redaktor kuvab vastava hoiatuse.

Kui kõik läks hästi, saadab toimetaja ShiOTinyle ühe sõlme kaupa ahela tekstikirjelduse. Loomulikult eemaldatakse esmalt olemasolev ShioTiny vooluahel. Saadud tekstikirjeldus salvestatakse FLASH-mällu.

Muide, kui soovite seadmest vooluringi eemaldada, laadige sellesse lihtsalt tühi vooluahel (ei sisalda ühtegi sõlme elementi).

Kui kogu vooluringi programm on ShIoTiny PLC-sse laaditud, hakkab see "täitma". Mida see tähendab?

Pange tähele, et FLASH-mälust vooluringi laadimise protsessid toite sisselülitamisel ja redigeerijast vooluringi vastuvõtmisel on identsed.

Esiteks luuakse sõlmeobjektid nende kirjelduse põhjal.
Seejärel luuakse ühendused sõlmede vahel. See tähendab, et genereeritakse väljundite lingid sisenditega ja sisendid väljunditega.

Ja alles pärast seda algab põhiprogrammi täitmise tsükkel.

Kirjutasin pikka aega, kuid kogu protsess - alates vooluringi laadimisest FLASH-mälust kuni põhitsükli käivitamiseni - võtab 60–80 sõlmest koosneva ahela jaoks sekundi murdosa.

Kuidas põhiahel töötab? Väga lihtne. Kõigepealt ootab ta tekkimist arengud mõnes sõlmes, seejärel töötleb seda sündmust. Ja nii lõputult. Noh, või kuni nad laadivad ShioTinysse uue skeemi üles.

Olen juba mitu korda maininud selliseid asju nagu arengud, saite и teabevahetus. Aga mis see tarkvara seisukohast on? Me räägime sellest täna.

Sõlmed, ühendused ja sündmused

Vaadake lihtsalt ahelaprogrammide näiteid ShioTinymõistmaks, et diagramm koosneb ainult kahest olemist – sõlmedest (või elementidest) ja nendevahelistest seostest.

Sõlme, aga jah või vooluahela element on mõne virtuaalne esitus tegevus andmete üle. See võib olla aritmeetiline tehe, loogiline tehe või mis tahes tehte, mis meile meelde tuleb. Peaasi, et sõlmel on sissepääs ja väljapääs.

Logi sisse - see on koht, kus sõlm saab andmeid. Sisendpildid on punktid, mis asuvad alati sõlme vasakul küljel.

Väljund - see on koht, kust hangitakse sõlme operatsiooni tulemus. Väljundkujutised on punktid, mis asuvad alati sõlme paremal küljel.

Mõnel sõlmel pole sisendeid. Sellised sõlmed genereerivad tulemuse sisemiselt. Näiteks konstantne sõlm või anduri sõlm: nad ei vaja tulemuse teatamiseks teiste sõlmede andmeid.

Teistel sõlmedel, vastupidi, pole väljundeid. Need on sõlmed, mis kuvavad näiteks täiturmehhanisme (releed või midagi sarnast). Nad aktsepteerivad andmeid, kuid ei genereeri arvutustulemust, mis on teistele sõlmedele kättesaadav.

Lisaks on olemas ka ainulaadne kommentaarisõlm. See ei tee midagi, sellel pole sisendeid ega väljundeid. Selle eesmärk on olla diagrammil selgitus.

Mis on juhtunud "sündmus"? Sündmus on uute andmete tekkimine mis tahes sõlmes. Näiteks sündmuste hulka kuuluvad: sisendoleku muutus (sõlm Sisend), andmete vastuvõtmine teisest seadmest (sõlmedest MQTT и UDP), määratud ajavahemiku aegumine (sõlmed Taimer и viivitus) ja nii edasi.

Milleks üritused on? Jah, selleks, et teha kindlaks, millises sõlmes on tekkinud uued andmed ja milliste sõlmede olekuid on vaja seoses uute andmete saamisega muuta. Sündmus justkui “läbib” mööda sõlmede ahelat, kuni läheb mööda kõigist sõlmedest, mille olekut tuleb kontrollida ja muuta.

Kõik sõlmed võib jagada kahte kategooriasse.
Helistame sõlmedele, mis võivad sündmusi genereerida "aktiivsed sõlmed'.
Kutsume sõlmedesse, mis ei saa sündmusi genereerida "passiivsed sõlmed'.

Kui sõlm genereerib sündmuse (st selle väljundisse ilmuvad uued andmed), siis üldjuhul muutub kogu sündmuste generaatori sõlme väljundiga ühendatud sõlmede ahela olek.

Selguse huvides vaadake joonisel olevat näidet.

ShioTiny: joonistusprogrammide sõlmed, ühendused ja sündmused või funktsioonid

Siin on aktiivsed sõlmed Input1, Input2 ja Input3. Ülejäänud sõlmed on passiivsed. Mõelgem, mis juhtub siis, kui üks või teine ​​sisend suletakse. Mugavuse huvides on tulemused kokku võetud tabelis.

ShioTiny: joonistusprogrammide sõlmed, ühendused ja sündmused või funktsioonid

Nagu näete, ehitatakse sündmuse toimumisel kett sündmuse lähtesõlmest lõppsõlmeni. Nende sõlmede olek, mis ahelasse ei kuulu, ei muutu.

Tekib õigustatud küsimus: mis saab siis, kui korraga toimub kaks või isegi mitu sündmust?

Gleb Anfilovi loomingu armastajana on mul kiusatus saata uudishimulik küsija tema raamatusse “Põgenemine üllatusest”. See on “väikeste relatiivsusteooria”, mis selgitab hästi, mida tähendab “samaaegne” ja kuidas sellega elada.

Kuid praktiliselt kõik on palju lihtsam: kahe või isegi mitme sündmuse toimumisel ehitatakse ja töödeldakse järjestikku igast sündmuseallikast kõik ahelad ning imesid ei juhtu.

Järgmine täiesti õigustatud küsimus uudishimulikult lugejalt on, et mis saab siis, kui sõlmed rõngasse ühendada? Või, nagu nende tarkade meeste seas öeldakse, tutvustage tagasisidet. See tähendab, et ühendage ühe sõlme väljund eelmise sõlme sisendiga, nii et selle sõlme väljundolek mõjutab selle sisendi olekut. Redaktor ei luba teil sõlme väljundit otse selle sisendiga ühendada. ElDraw. Kuid kaudselt, nagu alloleval joonisel, saab seda teha.

Mis siis sel juhul juhtub? Vastus on väga "kindel": sõltuvalt sellest, millistest sõlmedest. Vaatame joonisel olevat näidet.

ShioTiny: joonistusprogrammide sõlmed, ühendused ja sündmused või funktsioonid

Kui sisend1 sisendkontaktid on avatud, on sõlme A ülemine sisend 0. Sõlme A väljund on samuti 0. Sõlme B väljund on 1. Ja lõpuks, sõlme A alumine sisend on 1. Kõik on selge. Ja neile, kes pole selged, vaadake altpoolt, kuidas sõlmed "JA" ja "EI" töötavad.

Nüüd sulgeme sisendi Input1 kontaktid, st rakendame ühe sõlme A ülemisele sisendile. Kes elektroonikaga kursis, teavad, et tegelikult saame klassikalise loogikaelemente kasutava generaatoriskeemi. Ja teoreetiliselt peaks selline vooluahel elementide A ja B väljundis lõputult tootma jada 1-0-1-0-1-0…. ja 0-1-0-1-0-1-…. Sündmus peab ju pidevalt muutma sõlmede A ja B olekut, kulgedes ringis 2-3-2-3-...!

Kuid tegelikkuses seda ei juhtu. Ahel läheb juhuslikku olekusse - või jääb relee sisse või välja või võib-olla kergelt sumiseb mitu korda järjest sisse ja välja. Kõik sõltub ilmast Marsi lõunapoolusel. Ja sellepärast see juhtub.

Sündmus sõlmest Input1 muudab sõlme A, seejärel sõlme B ja nii edasi mitu korda ringikujuliselt. Programm tuvastab sündmuse "looping" ja peatab selle karnevali jõuga. Pärast seda blokeeritakse sõlmede A ja B oleku muutused kuni uue sündmuse toimumiseni. Hetk, mil programm otsustab "lõpetage ringis keerlemine!" - üldiselt sõltub see paljudest teguritest ja seda võib pidada juhuslikuks.

Olge sõlmede rõngasse ühendamisel ettevaatlik – tagajärjed ei ole alati ilmsed! Teil on hea ettekujutus sellest, mida ja miks te teete!

Kas meie käsutuses olevatele sõlmedele on ikka võimalik generaatorit ehitada? Jah, sa saad! Kuid selleks on vaja sõlme, mis suudab ise sündmusi genereerida. Ja seal on selline sõlm - see on "viivitusjoon". Vaatame alloleval joonisel, kuidas töötab generaator perioodiga 6 sekundit.

ShioTiny: joonistusprogrammide sõlmed, ühendused ja sündmused või funktsioonid

Generaatori võtmeelemendiks on sõlm A – viivitusliin. Kui muudate viiterea sisendi olekut 0-lt 1-le, siis 1 ei ilmu väljundisse kohe, vaid alles määratud aja möödudes. Meie puhul on see 3 sekundit. Samamoodi, kui muudate viiterea sisendi olekut 1-lt 0-le, siis 0 ilmub väljundis sama 3 sekundi pärast. Viivitusaeg määratakse kümnendikku sekundis. See tähendab, et väärtus 30 tähendab 3 sekundit.

Viiterea eripära on see, et see genereerib sündmuse pärast viiteaja möödumist.

Oletame, et algselt oli viiteliini väljund 0. Pärast sõlme B - inverteri - läbimist muutub see 0 1-ks ja läheb viiteliini sisendisse. Kohe ei juhtu midagi. Viiterea väljundis jääb see 0-ks, kuid algab viiteaja loendus. 3 sekundit möödub. Ja siis viivitusjoon genereerib sündmuse. Selle väljundis kuvatakse 1. See seade muutub pärast sõlme B - inverteri - läbimist 0-ks ja läheb viiteliini sisendisse. Möödub veel 3 sekundit... ja protsess kordub. See tähendab, et iga 3 sekundi järel muutub viiteliini väljundi olek 0-lt 1-le ja seejärel 1-lt 0-le. Relee klõpsab. Generaator töötab. Impulsi periood on 6 sekundit (3 sekundit väljundis null ja 3 sekundit väljundis üks).

Kuid reaalsetes ahelates pole seda näidet tavaliselt vaja kasutada. Seal on spetsiaalsed taimersõlmed, mis täiuslikult ja ilma välise abita genereerivad teatud perioodiga impulsside jada. Nende impulsside "null" ja "üks" kestus võrdub poole perioodiga.

Perioodiliste toimingute määramiseks kasutage taimerisõlmi.

Märgin, et selliseid digitaalseid signaale, kus "null" ja "üks" on võrdsed, nimetatakse "meanderiks".

Loodan, et sain veidi selgust küsimuses, kuidas sündmusi sõlmede vahel levitatakse ja mida mitte teha?

Järeldus ja viited

Artikkel osutus lühikeseks, kuid see artikkel on vastus küsimustele, mis on tekkinud seoses sõlmede ja sündmustega.

Püsivara arenedes ja uute näidete ilmumisel kirjutan programmeerimisest ShioTiny väikesed artiklid, kui see on inimestele huvitav.

Nagu varemgi, diagramm, püsivara, näited, komponentide kirjeldus ja kõik ülejäänud on siin.

Küsimused, ettepanekud, kriitika – minge siia: [meiliga kaitstud]

Allikas: www.habr.com

Lisa kommentaar