
PÔhiteesid vÔi millest see artikkel rÀÀgib
Artikli teema on PLC visuaalne programmeerimine ShIoTiny nutikodu kohta, millest siin rÀÀgitakse: .
Very briefly kaetud sellised mĂ”isted nagu sĂ”lmed, ĂŒhendused, sĂŒndmustele, samuti visuaalse programmi laadimise ja kĂ€itamise omadused ESP8266, mis on PLC aluseks ShIoTiny.
Sissejuhatus vĂ”i paar korralikku kĂŒsimust
Eelmises artiklis oma arendusest andsin lĂŒhikese ĂŒlevaate kontrolleri vĂ”imalustest ShIoTiny.
Imelikul kombel nĂ€itas avalikkus ĂŒsna suurt huvi ning esitas mulle ĂŒsna palju kĂŒsimusi. MĂ”ned inimesed pakkusid isegi kohe, et ostavad minult kontrolleri. Ei, ma ei ole vastu sellele, et natuke raha teenida, kuid sĂŒdametunnistus ei luba mul mĂŒĂŒa veel liiga toorest tarkvaraliselt eset.
SeetÔttu olen GitHubis vÀlja pannud valmis firmware ja seadme skeemi: .
NĂŒĂŒd saab igaĂŒks ESP-07-seada ja ise firmware'iga katsetada. Kui kellelgi on tĂ”eliselt tarvis just sellist plaati nagu pildil â mul on neid paar tĂŒkki. Kirjutage meili peale shiotiny@yandex.ru. Kuid nagu ĂŒtles unustamatu Ogurtsov: "Ma ei vastuta mitte millelegi!".
NĂŒĂŒd lĂ€heme asja juurde: mis on "sĂ”lm" (node) ja "sĂŒndmusKuidas programm kĂ€ivitatakse?
Alustame tavapĂ€raselt: programm pannakse ĂŒles laadimisega.
Kuidas programm laaditakse?
Alustame sellest, mis juhtub siis, kui me vajutame nuppu Ăleslaadimine toimetajas ElDraw ja meie ruudustikuga programm saadetakse seadmesse.
Esiteks luuakse meie visandatud skeemi pÔhjal selle tekstiline kirjeldus.
Teiseks kontrollitakse, kas kĂ”ik sĂ”lmede sisendid on ĂŒhendatud vĂ€ljunditega. âRippuvaidâ sisendeid ei tohiks olla. Kui selline sisend leitakse, siis skeem ShIoTiny'sse ei laadi, ja toimetaja annab vastava teate.
Kui kĂ”ik lĂ€ks edukalt, saadab toimetaja ShIoTiny'sse skeemi tekstilise kirjelduse ĂŒhe sĂ”lme kaupa. Loomulikult eemaldatakse eelnev skeem ShIoTiny'st. Saadud tekstiline kirjeldus salvestatakse FLASH-mĂ€esse.
Muide, kui soovite eemaldada skeemi seadmest, laadige lihtsalt sisse tĂŒhi skeem (millel ei ole ĂŒhtegi element-sĂ”lme).
Niipea, kui kogu skeem-programm on ShIoTiny PLC'sse laaditud, hakkab see âtĂ€itumaâ. Mida see tĂ€hendab?
TĂ€htis on mĂ€rkida, et skeemi laadimisprotsess FLASH-mĂ€lust sisse lĂŒlitamisel ja skeemi vastuvĂ”tmine redigeerijast on identsed.
Esialgu luuakse objektide sÔlmed nende kirjelduse pÔhjal.
SeejÀrel paigutatakse sÔlmede vahele seosed. See tÀhendab, et genereeritakse vÀljundite lingid sisenditele ja sisendite lingid vÀljunditele.
Ja alles pÀrast seda kÀivitatakse programmi peamine tÀitmisring.
Kirjutasin kaua, kuid kogu protsess - skeemi laadimine FLASH-mĂ€lust kuni peamise tsĂŒkli kĂ€ivitamiseni - kestab 60â80 sĂ”lmega skeemi jaoks murdosakesega.
Kuidas peamine tsĂŒkkel töötab? VĂ€ga lihtsalt. Esiteks ootab ta sĂŒndmuse tekkimist sĂŒndmustele mĂ”nes sĂ”lmes, seejĂ€rel töötleb seda sĂŒndmust. Ja nii lĂ”putult. No vĂ”i vĂ€hemalt kuni ShIoTiny-sse laaditakse uus skeem.
Olen mitu korda maininud selliseid asju nagu sĂŒndmustele, sĂ”lmed ja ĂŒhendused. Aga mida see tegelikult tĂ€hendab programmeerimise seisukohalt? RÀÀgime sellest tĂ€na.
SĂ”lmed, seosed ja sĂŒndmused
Piisab, kui vaadata programmikava nÀiteid ShIoTiny, et mÔista, et skeem koosneb vaid kahest entiteedist - sÔlmedest (vÔi elementidest) ja nende vahelisest seosest.
SĂ”lm, sĂ”lm vĂ”i skeemi element on mingi virtuaalne esitus tegevused. andmete kohta. See vĂ”ib olla aritmeetiline operatsioon, loogiline operatsioon vĂ”i ĂŒldse ĂŒkskĂ”ik milline operatsioon, mis meelde tuleb. Peamine on, et sĂ”lmel on sisend ja vĂ€ljund.
Sisend â see on see koht, kuhu sĂ”lm vĂ”tab andmeid. Sisendite pildid on punktid, mis asuvad alati sĂ”lme vasakul kĂŒljel.
VĂ€ljund â see on see koht, kust vĂ”etakse vĂ€lja sĂ”lme töö tulemus. VĂ€ljundite pildid on punktid, mis asuvad alati sĂ”lme paremal kĂŒljel.
MÔnedel sÔlmedel ei ole sisendeid. Sellised sÔlmed genereerivad tulemuse enda sees. NÀiteks konstandi sÔlm vÔi anduri sÔlm: neil ei ole vaja andmeid teistelt sÔlmedelt, et tulemusi teatada.
Teistel sÔlmedel, vastupidi, ei ole vÀljundeid. Need on sÔlmed, mis nÀitavad nÀiteks tÀidesaatvaid seadmeid (releed vÔi midagi muud sarnast). Nad vÔtavad andmeid vastu, kuid ei genereeri arvutustulemusi, mis oleksid kergesti kÀtte saadavad teistele sÔlmedele.
Lisaks on olemas ka ainulaadne kommentaarisÔlm. See ei tee midagi, tal ei ole ei sisendeid ega vÀljundeid. Selle eesmÀrk on olla skeemi selgitus.
Mis on "sĂŒndmus»? SĂŒndmus â see on uute andmete esinemine mĂ”nes sĂ”lmes. NĂ€iteks hĂ”lmavad sĂŒndmused: sisenemise oleku muutust (sĂ”lm Sisend), andmete vastuvĂ”tmist teisest seadmest (sĂ”lmed MQTT ja UDP), mÀÀratud ajavahemiku möödumist (sĂ”lmed Timer ja Viivitus) jne.
Miks on sĂŒndmused vajalikud? Need on vajalikud selleks, et mÀÀrata, millises sĂ”lmes on uusi andmeid ja milliste sĂ”lmede olekuid tuleb uute andmete vastuvĂ”tmise tĂ”ttu muuta. SĂŒndmus âlĂ€bibâ sĂ”lmede ahelat, kuni on kĂ€inud kĂ”igis sĂ”lmedes, mille olekuid tuleb kontrollida ja muuta.
KÔiki sÔlmi saab jagada kahte kategooriasse.
SĂ”lmed, mis vĂ”ivad genereerida sĂŒndmusi, nimetame âaktiivseteks sĂ”lmedeks».
SĂ”lmed, mis ei saa genereerida sĂŒndmusi, nimetame âpassiivseteks sĂ”lmedeks».
Kui sĂ”lm genereerib sĂŒndmuse (st selle vĂ€ljundis ilmuvad uued andmed), siis muutub ĂŒldjuhul kogu sĂŒndmuse generaatori vĂ€ljundiga ĂŒhendatud sĂ”lmede ahela olek.
Kuna see on arusaadav, vaatame nÀidet joonisel.

Siin on aktiivsed sĂ”lmed â Input1, Input2 ja Input3. ĂlejÀÀnud sĂ”lmed on passiivsed. Vaatleme, mis juhtub, kui mĂ”ni sisend ĂŒhendatakse. Tulemused on mugavuse huvides koondatud tabelisse.

Kuidas me nĂ€eme, sĂŒndmuse tekkimisel ehitatakse sĂŒndmuse allika sĂ”lmest kuni lĂ”pp-sĂ”lmest ahel. Need sĂ”lmed, mis ei kuulu ahelasse, jÀÀvad muutumatuks.
TĂ”useb seaduslik kĂŒsimus, mis juhtub, kui toimub kaks vĂ”i rohkem sĂŒndmust samaaegselt?
Kuna olen looja Gleb Anfilovi fĂ€nn, tĂ”ukab mind saata uudishimulik kĂŒsimuse esitajat tema raamatusse âPĂ”genemine ĂŒllatustestâ. See on nagu ârelatiivsusteooria vĂ€ikeuteleâ, kus on hĂ€sti selgitatud, mis on âsamaaegneâ ja kuidas sellega elada.
Kuid praktiliselt on kĂ”ik palju lihtsam: kui toimub kaks vĂ”i rohkem sĂŒndmust, ehitatakse ja töödeldakse kĂ”ik ahelad jĂ€rjestikult igalt sĂŒndmuse allikalt ja mingit imet ei toimu.
JĂ€rgnevalt on tĂ€iesti seaduslik kĂŒsimus uudishimuliku lugeja jaoks â mis juhtub, kui sĂ”lmeded ringi panna? VĂ”i kuidas seda teie tarkade seas öelda â tagasiside sisestada. See tĂ€hendab, et ĂŒhe sĂ”lme vĂ€ljund ĂŒhendatakse eelneva sĂ”lme sisendiga nii, et selle vĂ€ljundi olek mĂ”jutab selle enda sisendi olekut. Samuti ei luba toimetaja sĂ”lme vĂ€ljundit otse selle enda sisendiga kokku ĂŒhendada. ElDraw. Kuid kaudselt, nagu alloleval joonisel â on see vĂ”imalik.
Nii et, mis siis juhtub? Vastus on vĂ€ga âkindelâ: olenevalt sellest, millised sĂ”lmed. Vaatame joonisel esitatud nĂ€idet.

Kui Input1 sisendi kontaktid on ĂŒlesse ĂŒhendatud sĂ”lmes A â 0. SĂ”lme A vĂ€ljundis on samuti 0. SĂ”lme B vĂ€ljundis â 1. Ja lĂ”puks, sĂ”lme A alumises sisendis â 1. KĂ”ik selge. Kui kellelegi ei ole selge â vaadake allpool, kuidas sĂ”lmed âJAâ ja âEIâ töötavad.
NĂŒĂŒd ĂŒhendame Input1 sisenemise kontaktid, see tĂ€hendab, et anname sĂ”lmele A ĂŒht. Need, kes tunnevad elektroonikat, teavad, et me saame tĂ”eliselt klassikalise loogiliste elementide generaatori skeemi. Ja idee jĂ€rgi peaks see skeem pidevalt tootma sĂ”lmede A ja B vĂ€ljundites jĂ€rjestusi 1-0-1-0-1-0⊠ja 0-1-0-1-0-1âŠ. Sest sĂŒndmus peaks pidevalt muutma sĂ”lmede A ja B olekut, liikudes ringi 2-3-2-3-âŠ!
Aga tegelikult ei juhtu seda. Skeem satub juhuslikku olekusse â kas relee jÀÀb sisse vĂ”i vĂ€lja, vĂ”i vĂ”ib isegi mĂ”neks ajaks sisse-vĂ€lja klĂ”psata. KĂ”ik sĂ”ltub Marsi lĂ”unapooluse ilmaprognoosist. Ja just see on pĂ”hjus, miks nii juhtub.
SĂŒndmus sĂ”lmes Input1 muudab sĂ”lme A olekut, seejĂ€rel sĂ”lme B ja nii edasi mitu korda ringi. Programm mÀÀrab sĂŒndmuse "tsĂŒkli" ja sunnib selle karnevali katkestama. PĂ€rast seda blokeeritakse sĂ”lmede A ja B olekute muutmine kuni uue sĂŒndmuse ilmumiseni. Aeg, mil programm otsustab â "piisab ringis keerlemisest!" â sĂ”ltub ĂŒldiselt paljusid tegureid ja seda vĂ”ib pidada juhuslikuks.
Olge ettevaatlikud, ĂŒhendades sĂ”lmed ringiks â efektid ei pruugi alati olla ilmsed! Olge selgelt teadlik, mida ja miks teete!
Kas on vĂ”imalik siiski ehitada generaator kĂ”igile meie soovitud sĂ”lmedele? Jah, see on vĂ”imalik! Kuid selleks on vajalik sĂ”lm, mis suudab ise sĂŒndmusi genereerida. Ja selline sĂ”lm on olemas â see on "viivitusliin". Vaatame, kuidas töötab generaator, mille periood on 6 sekundit, alloleval joonisel.

Generaatori peamine element on sĂ”lm A â viivitusliin. Kui muuta viivitusliini sissetuleku seisundit 0-lt 1-le, siis 1 ei ilmne vĂ€ljundil kohe, vaid ainult pĂ€rast mÀÀratud aega. Meie juhul on see 3 sekundit. Sama kehtib ka juhul, kui muuta viivitusliini sissetuleku seisundit 1-lt 0-le; 0 ilmneb vĂ€ljundil samuti pĂ€rast samu 3 sekundit. Viivitusajast mÀÀratakse kĂŒmnendik sekundites. Seega vÀÀrtus 30 tĂ€hendab 3 sek.
Viivitusliini iseloomulikuks tunnuseks on see, et see genereerib sĂŒndmuse pĂ€rast viivitusaja möödumist.
Oletame, et algselt oli viivituse joonel vĂ€ljund 0. PĂ€rast sĂ”lme B â inverteri â lĂ€bimist muutub see 0-ks 1 ja jĂ”uab viivituse joone sisse. Alguses ei juhtu midagi. VĂ€ljundil jÀÀb olekuks 0, kuid seejĂ€rel algab viivituse ajaloog. Kolme sekundi pĂ€rast tekib kohe viivituse joonel sĂŒndmus. VĂ€ljundil on nĂŒĂŒd 1. See 1, pĂ€rast sĂ”lme B â inverteri â lĂ€bimist, muutub 0-ks ja jĂ”uab jĂ€lle viivituse joone sisse. Veel kolm sekundit möödub ... ja protsess kordub. See tĂ€hendab, et iga kolme sekundi jĂ€rel muutub viivituse joone vĂ€ljund olek 0-lt 1-le ja seejĂ€rel 1-lt 0-le. Relv klĂ”psab. Generaator töötab. Impulsi periood on 6 sekundit (3 sekundit vĂ€ljund 0 ja 3 sekundit - 1).
Kuid reaalsetes skeemides ei ole tavaliselt vaja kasutada isegi seda nĂ€idet. On olemas spetsiaalsed sĂ”lmed-timerid, mis suurepĂ€raselt ja ilma vĂ€lise abita genereerivad sĂŒndmuste jĂ€rjestust mÀÀratud perioodiga. "Nulli" ja "ĂŒhe" kestus nendes impulssides on vĂ”rdne poole perioodiga.
Perioodiliste toimingute mÀÀramiseks kasutage sÔlmi-timereid.
Tahan mĂ€rkida, et selliseid digitaal-signaale, kus "nulli" ja "ĂŒhe" kestus on vĂ”rdsed, nimetatakse "meandriks".
Loodan, et sain natuke selgust anda kĂŒsimuses, kuidas sĂŒndmused node'ide vahel levides toimuvad ja mida ei tasu teha?
KokkuvÔte ja lingid
Artikkel tuli lĂŒhike, kuid see on vastus tekkivatele kĂŒsimustele node'ide ja sĂŒndmuste kohta.
Protokollide arenedes ja uute nÀidete ilmumisel hakkan kirjutama, kuidas programmeerida ShIoTiny vÀikesi artikleid, seni, kuni see inimestele huvi pakub.
Nagu varemgi, on skeem, protokoll, nÀited, node'ide kirjeldus ja kÔik .
KĂŒsimused, soovitused, kriitika â need siia: shiotiny@yandex.ru
Allikas: habr.com
