
Peamised punktid vÔi millest on see artikkel
Artikli teema on visuaalne programmeerimine PLC-dele ShIoTiny nutika kodu jaoks, millest siin rÀÀgitakse: .
VĂ€ga lĂŒhidalt on kĂ€sitletud selliseid mĂ”isted nagu sĂ”lmed, seosed, sĂŒndmused, samuti visuaalse programmi laadimise ja kĂ€itamise eripĂ€rad ESP8266, mis on PLC aluseks ShIoTiny.
Sissejuhatus vĂ”i paar korralduslikku kĂŒsimust
Eelmises artiklis oma arenduse kohta tegin ma lĂŒhikese ĂŒlevaate kontrollere vĂ”imalustest ShIoTiny.
Ometi avaldas avalikkus ĂŒsna suurt huvi ja esitas mulle palju kĂŒsimusi. MĂ”ned inimesed pakkusid isegi kohe, et ostavad minult kontrolleri. Ei, mulle ei ole vastukĂ€ivate jĂ”ududega raha teenimise vastu, kuid sĂŒdametunnistus ei luba mul mĂŒĂŒa veel vĂ€ga toore programmilaadi seadet.
SeetÔttu jagasin GitHubis vÀlja binarid, tarkvarajuhendi ja seadme skeemi: .
NĂŒĂŒd vĂ”ib igaĂŒks ESP-07 Ă€ra programmeerida ja iseseisvalt tarkvaraga katsetada. Kui keegi tahab tĂ”eliselt sellist plaati nagu pildil â siis mul on neid paar tĂŒkki. Kirjuta mulle e-mailile shiotiny@yandex.ru. Kuid nagu ĂŒtles unustamatu Ogurtcov: «Ma ei vastuta mitte millegi eest!».
Nii et liikume asja juurde: mis on «sĂ”lm» (node) ja «sĂŒndmus«? Kuidas programmi tĂ€idetakse?
Kuidas tavaliselt â alustame jĂ€rjekorras: programmi laadimisest.
Kuidas programm laaditakse
Alustame sellest, mis juhtub, kui me vajutame nuppu Laadi ĂŒles redaktoris ElDraw ja meie skeem-programm, mis koosneb ilusatest ruutudest, saadetakse seadmesse.
Esiteks, meie joonistatud skeemi pÔhjal luuakse selle tekstiline kirjeldus.
Teiseks, kontrollitakse â kas kĂ”ik sĂ”lmede sisendid on ĂŒhendatud vĂ€ljunditega. «Rippuvaid» sisendeid ei tohiks olla. Kui selline sisend avastatakse, ei laetud skeem ShIoTĂœnisse, ja redaktor kuvab vastava hoiatuse.
Kui kĂ”ik on sujunud, saadab redaktor ShIoTiny'le skeemi tekstilise kirjelduse ĂŒhe sĂ”lme kaupa. Loomulikult eemaldatakse enne see olemasolev skeem ShIoTiny's. Saadud tekstiline kirjeldus salvestatakse FLASH-mĂ€lusse.
Muide, kui soovite skeemi seadmest kustutada, laadige lihtsalt sisse tĂŒhi skeem (mis ei sisalda ĂŒhtegi element-sĂ”lme).
Kui kogu skeemi programm on laaditud ShIoTiny PLC-sse, hakkab see "töötama". Mida see tÀhendab?
Oluline on mĂ€rkida, et skeemi laadimise protsess FLASH-mĂ€lust sisse lĂŒlitamisel ja toimetamisel redaktorist on identne.
Esmalt luuakse sÔlmede objektid, tuginedes nende kirjeldustele.
SeejÀrel paigutatakse sÔlmede vahelised 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öötsĂŒkkel.
Kirjutasin pikalt, kuid kogu protsess - skeemi laadimisest FLASH-mĂ€lust kuni peamise tsĂŒkli kĂ€ivitamiseni - vĂ”tab 60-80 sĂ”lmega skeemi puhul aega murdosa sekundist.
Kuidas peamine tsĂŒkkel töötab? VĂ€ga lihtsalt. Esiteks ootab see sĂŒndmuse tekkimist sĂŒndmused mĂ”nes sĂ”lmes ja seejĂ€rel töötleb seda sĂŒndmust. Ja nii lĂ”pmatult. VĂ”i vĂ€hemalt kuni ShIoTiny-sse laaditakse uus skeem.
Olen juba mitmeid kordi maininud selliseid asju nagu sĂŒndmused, sĂ”lmed ja seosed. Aga mis see programmivaates tĂ€hendab? Sellest rÀÀgime tĂ€na.
SĂ”lmed, seosed ja sĂŒndmused
Piisab, kui vaadata skeemi nĂ€iteid ShIoTiny, et mĂ”ista, et skeem koosneb kahest olulisest entiteedist â sĂ”lmedest (vĂ”i elementidest) ja nendevahelistest seostest.
SĂ”lm, node vĂ”i skeemi element â see on virtuaalne esitus mingist tegevused andmete kohta. See vĂ”ib olla aritmeetiline operatsioon, loogiline operatsioon vĂ”i mis tahes muu operatsioon, mis meie pĂ€he tuleb. Peamine on see, et sĂ”lm on varustatud sisendiga ja vĂ€ljundiga.
SissepÀÀs â see on koht, kuhu sĂ”lm saab andmeid. Sisendite pildid on punktid, mis asuvad alati sĂ”lme vasakul kĂŒljel.
VĂ€ljund â see on koht, kust saadakse sĂ”lme töö tulemused. VĂ€ljundite pildid on punktid, mis asuvad alati sĂ”lme paremal kĂŒljel.
MÔnel sÔlmel ei ole sisendeid. Sellised sÔlmed genereerivad tulemuse enda sees. NÀiteks konstandi sÔlm vÔi andurisÔlm: neile ei ole vaja teistelt sÔlmedelt andmeid, et tulemusi edastada.
Teistel sÔlmedel aga ei ole vÀljundeid. Need sÔlmed kujutavad nÀiteks tÀitmisseadmeid (releed vÔi midagi muud sarnast). Nad vÔtavad andmeid, kuid ei genera tulemust, mis oleks teistele sÔlmedele kergesti kÀtte saadav.
Lisaks on olemas veel ainulaadne kommentaarisÔlm. See ei tee midagi, tal ei ole ei sÔlmi ei vÀljundeid. Selle eesmÀrk on olla skeemil selgituseks.
Mis on "sĂŒndmus»? SĂŒndmus â see new data emerging in any node. For example, events include: a change in the state of an input (node Sisend), receiving data from another device (nodes MQTT ja UDP), the expiration of a specified time interval (nodes Timer ja Delay) and so on.
What are events for? They are needed to determine which node new data has emerged at and which node states need to be changed as a result of receiving new data. The event 'travels' through the chain of nodes until it goes through all the nodes whose states need to be checked and changed.
All nodes can be divided into two categories.
Nodes that can generate events will be called 'active nodes».
Nodes that cannot generate events will be called 'passive nodes».
When a node generates an event (that is, new data appears at its output), the state of the entire chain of nodes connected to the output of the event-generating node generally changes.
To make it clear, letâs look at an example in the illustration.

Active nodes here are â Input1, Input2 and Input3. The other nodes are passive. Let's examine what happens when one of the inputs is closed. The results are conveniently summarized in a table.

As we can see, when an event occurs, a chain is built from the source node of the event to the endpoint node. The state of those nodes not included in the chain remains unchanged.
A legitimate question arises: what happens when two or even several events occur simultaneously?
As a fan of Gleb Anfilov's creativity, I am tempted to send the curious inquirer to his book 'Escape from Wonders'. It's a kind of 'theory of relativity for the very young', which explains well what 'simultaneously' means and how to live with it.
But practically speaking, everything is much simpler: when two or even several events occur, all chains from each event source are built and processed sequentially, and no miracles happen.
JĂ€rgmine tĂ€iesti seaduslik kĂŒsimus uudishimuliku lugeja poolt on: mis juhtub, kui siduda sĂ”lmed rĂ”ngaks? VĂ”i nagu need targad ĂŒtlevad â luua tagasiside. See tĂ€hendab, et siduda ĂŒhe sĂ”lme vĂ€ljund eelneva sĂ”lme sisendiga nii, et selle sĂ”lme vĂ€ljundi seisund mĂ”jutab tema enda sisendi seisundit. OtseĂŒhendust sĂ”lme vĂ€ljundi ja tema enda sisendi vahel ei luba toimetaja. ElDraw. Kuid kaudselt, nagu alloleval joonisel â seda on vĂ”imalik teha.
NĂŒĂŒd, mis siis juhtub sellisel juhul? Vastus on vĂ€ga "konkreetne": olenevalt sellest, millised sĂ”lmed. Vaadakem pilti.

Kui sisendi Input1 kontaktid on avatud sĂ”lme A ĂŒlemises sisendis â 0. SĂ”lme A vĂ€ljundis on samuti 0. SĂ”lme B vĂ€ljundis on 1. Ja lĂ”puks, sĂ”lme A alumises sisendis â 1. KĂ”ik on selge. Kui kellelgi ei ole selge â vaadake allpool, kuidas töötavad sĂ”lmed "JA" ja "EI".
NĂŒĂŒd sulgeme sisendi Input1 kontaktid, ehk toome ĂŒlemisse sisendisse sĂ”lme A ĂŒhe. Need, kes tunnevad elektroonikat, teavad, et tegelikult saame klassikalise loogiliste elementide generaatoriskeemi. Ja idee jĂ€rgi peaks selline skeem lĂ”pmata andma vĂ€ljundites A ja B jĂ€rjestusi 1-0-1-0-1-0âŠ. ja 0-1-0-1-0-1-âŠ. Sest sĂŒndmus peab pidevalt muutma sĂ”lmede A ja B seisundit, liikudes ringi 2-3-2-3-âŠ!
Aga tegelikult seda ei juhtu. Skeem langeb juhuslikku seisundisse â kas relee jÀÀb sisse vĂ”i vĂ€lja, vĂ”i vĂ”ib see isegi paar korda jĂ€rjest sisse-vĂ€lja tĂ”mmata. KĂ”ik sĂ”ltub Marsi lĂ”unaotsas olevatest ilmastikutingimustest. Ja sellepĂ€rast see juhtub.
SĂŒndmus sĂ”lmes Input1 muudab sĂ”lme A, siis sĂ”lme B ja nii edasi ringis mitu korda. Programm tuvastab sĂŒndmuse "tsĂŒkli" ja sunnib selle karnevali lĂ”petama. PĂ€rast seda jÀÀvad sĂ”lmede A ja B seisundi muutmised blokkeerituks kuni uue sĂŒndmuse tekkimiseni. Hetk, mil programm otsustab â "piisab ringis keerlemisest!" â sĂ”ltub ĂŒldiselt paljusid tegureid ja seda vĂ”ib pidada juhuslikuks.
Olge ettevaatlikud, kui ĂŒhendate sĂ”lmed rĂ”ngaks â efektid ei pruugi alati olla ilmsed! Olge hĂ€sti teadlikud, mida ja miks teete!
Kas on ikkagi vĂ”imalik ehitada generaator kĂ€ttesaadavatel sĂ”lmedel? Jah, on vĂ”imalik! Kuid selleks on vajalik sĂ”lm, mis oskab ise sĂŒndmusi genereerida. Ja selline sĂ”lm on olemas â see on «viivitusliin». Vaatame, kuidas generaator töötab 6-sekundilise perioodiga alloleval joonisel.

Generaatori peamine element on sĂ”lm A â viivitusliin. Kui muuta viivitusliini sissetuleku olek 0-lt 1-le, ilmub 1 vĂ€ljundisse mitte kohe, vaid alles pĂ€rast mÀÀratud aega. Meie puhul on see 3 sekundit. Samamoodi, kui muuta viivitusliini sissetuleku olek 1-lt 0-le, ilmub 0 vĂ€ljundisse samaaegselt sama 3 sekundi jooksul. Viivitus kestus on mÀÀratud kĂŒmnendik sekunditega. See tĂ€hendab, et vÀÀrtus 30 tĂ€hendab â 3 sek.
Viivitusliini eripĂ€ra on see, et see genereerib sĂŒndmuse pĂ€rast viivituse lĂ”ppemist.
Kujutame ette, et algselt oli viivitusliini vĂ€ljundis 0. PĂ€rast sĂ”lm B â inverteri â lĂ€bimist muutub see 0 1-ks ja siseneb viivitusliini. Kohe ei juhtu midagi. Viivitusliini vĂ€ljundis jÀÀb 0 samaks, kuid ajaĂ”hk hakkab kulgema. LĂ€bib 3 sekundit. Ja sel hetkel genereerib viivitusliin sĂŒndmuse. VĂ€ljundis ilmub 1. See 1 pĂ€rast sĂ”lm B â inverteri â lĂ€bimist muutub tagasi 0-ks ja siseneb viivitusliini. LĂ€bib veel 3 sekundit⊠ja protsess kordub. See tĂ€hendab, et iga 3 sekundi jĂ€rel muutub viivitusliini vĂ€ljund 0-ks ja seejĂ€rel 1-ks ja 0-ks. Reljeer klĂ”psab. Generaator töötab. Impulsi periood on 6 sekundit (3 sekundit vĂ€ljundil null ja 3 sekundit â unit).
Kuid tĂ”elistes skeemides ei ole tavaliselt isegi vajalik kasutada ning seda nĂ€idet. On olemas spetsiaalsed sĂ”lm-timereid, mis genereerivad probleemideta ja ilma vĂ€list abi sama kindla impulsside jĂ€rjestuse, mille periood on mÀÀratud. âNulliâ ja âĂŒhikuâ kestus nende impulsside jooksul on pool perioodist.
Perioodiliste tegevuste mÀÀramiseks kasutage sÔlm-timereid.
Tahan mĂ€rkida, et selliseid digitaalseid signaale, kus ânulliâ ja âĂŒhikuâ kestus on vĂ”rdsed, nimetatakse âmeanderiksâ.
Loodan, et olen natuke selgitanud kĂŒsimust sellest, kuidas toimub sĂŒndmuste levik sĂ”lmede vahel ja mida ei tohiks teha?
KokkuvÔte ja lingid
Artikkel oli lĂŒhike, kuid see on artikkel, mis vastab tekkinud kĂŒsimustele sĂ”lmede ja sĂŒndmuste kohta.
Kuna tarkvarade areng ja uute nÀidete ilmumine, kirjutan sellest, kuidas programmeerida ShIoTiny vÀikeste artiklite kujul, seni kuni see inimestele huvi pakub.
Nagu varem, on skeem, tarkvara, nÀited, sÔlmede kirjeldus ja kÔik .
KĂŒsimused, soovitused, kriitika â saatke siia: shiotiny@yandex.ru
Allikas: habr.com
