ShIoTiny: Hnútar, tenglar og viðburðir eða eiginleikar teikniforrita

ShIoTiny: Hnútar, tenglar og viðburðir eða eiginleikar teikniforrita

Lykilatriði eða um hvað þessi grein fjallar

Efni greinarinnar er sjónræn PLC forritun ShioTiny fyrir snjallheimilið sem lýst er hér: ShIoTiny: lítil sjálfvirkni, internet af hlutum eða „sex mánuðum fyrir frí“.

Mjög stutt hugtök eins og hnúta, fjarskipti, þróun, sem og eiginleikar við að hlaða og keyra sjónrænt forrit á ESP8266, sem er grundvöllur PLC ShioTiny.

Inngangur eða nokkrar skipulagsspurningar

Í fyrri grein um þróun mína gaf ég stutt yfirlit yfir getu stjórnandans ShioTiny.

Merkilegt nokk sýndi almenningur mikinn áhuga og spurði mig ansi margra spurninga. Sumir vinir buðust meira að segja strax að kaupa stjórnandi af mér. Nei, ég er ekki á móti því að græða smá pening, en samviska mín leyfir mér ekki að selja eitthvað sem er enn mjög gróft hvað hugbúnað varðar.

Þess vegna birti ég vélbúnaðar tvöfaldur og tæki skýringarmynd á GitHub: vélbúnaðar + stystu leiðbeiningar + skýringarmynd + dæmi.

Nú geta allir flassað ESP-07 og leikið sér með fastbúnaðinn sjálfir. Ef einhver vill í alvörunni nákvæmlega sama bretti og á myndinni, þá á ég nokkra af þeim. Skrifaðu með tölvupósti [netvarið]. En eins og hinn ógleymanlegi Ogurtsov sagði: „Ég ber ekki ábyrgð á neinu!

Svo, við skulum komast að efninu: hvað er "hnútur"(hnút) og"atburður"? Hvernig er forritið framkvæmt?

Eins og venjulega, byrjum í röð: með því að hlaða niður forritinu.

Hvernig forritið er hlaðið

Byrjum á því sem gerist þegar við ýtum á takka Hlaða í ritstjóra ElDraw og hringrásarforritið okkar, sem samanstendur af fallegum ferningum, flýgur inn í tækið.

Í fyrsta lagi, byggt á skýringarmyndinni sem við höfum teiknað, er lýsing hennar í textaformi byggð.
Í öðru lagi athugar það hvort öll hnútainntak séu tengd útgangum. Það ættu ekki að vera „hangandi“ inngangar. Ef slíkt inntak greinist verður hringrásin ekki hlaðin inn í ShIoTiny og ritstjórinn mun sýna samsvarandi viðvörun.

Ef allt gekk vel sendir ritstjórinn textalýsingu á hringrásinni einn hnút í einu til ShIoTiny. Auðvitað er núverandi hringrás frá ShIoTiny fyrst fjarlægð. Textalýsingin sem fæst er geymd í FLASH minni.

Við the vegur, ef þú vilt fjarlægja hringrás úr tæki, þá einfaldlega hlaðið tóma hringrás inn í það (sem inniheldur ekki einn hnút þátt).

Þegar öllu hringrásarforritinu hefur verið hlaðið inn í ShIoTiny PLC byrjar það að „keyra“. Hvað þýðir það?

Athugaðu að ferlið við að hlaða hringrás úr FLASH minni þegar kveikt er á straumnum og þegar þú færð hringrás frá ritlinum eru eins.

Í fyrsta lagi eru hnúthlutir búnir til út frá lýsingu þeirra.
Þá eru tengingar á milli hnúta. Það er að segja að tengingar úttaks við inntak og inntaks við úttak myndast.

Og aðeins eftir allt þetta byrjar framkvæmdarferill aðalforritsins.

Ég skrifaði í langan tíma, en allt ferlið - frá því að „hlaða“ hringrásinni úr FLASH minni til að hefja aðallotuna - tekur brot úr sekúndu fyrir hringrás með 60-80 hnútum.

Hvernig virkar aðallykkjan? Mjög einfalt. Fyrst bíður hann eftir tilkomu þróun á einhverjum hnút, vinnur síðan úr þeim atburði. Og svo framvegis endalaust. Jæja, eða þangað til þeir hlaða upp nýju kerfi á ShIoTiny.

Nokkrum sinnum hef ég þegar nefnt hluti eins og þróun, hnúta и fjarskipti. En hvað er þetta frá hugbúnaðarsjónarmiði? Við ræðum þetta í dag.

Hnútar, tengingar og atburðir

Skoðaðu bara dæmin um hringrásarforrit fyrir ShioTinyað skilja að skýringarmyndin samanstendur af aðeins tveimur einingum - hnútum (eða þáttum) og tengingum þar á milli.

Hnútur, en já eða hringrásarþáttur er sýndarframsetning sumra starfsemi yfir gögnin. Þetta getur verið reikningsaðgerð, rökfræðileg aðgerð eða hvaða aðgerð sem okkur dettur í hug. Aðalatriðið er að hnúturinn hefur inngang og útgang.

inngangur - þetta er staðurinn þar sem hnúturinn tekur við gögnum. Inntaksmyndirnar eru punktar sem eru alltaf vinstra megin við hnútinn.

Output - þetta er staðurinn þar sem niðurstaðan af aðgerð hnútsins er sótt. Úttaksmyndirnar eru punktar sem eru alltaf staðsettir hægra megin við hnútinn.

Sumir hnútar hafa ekki inntak. Slíkir hnútar búa til niðurstöðuna innbyrðis. Til dæmis, stöðugur hnútur eða skynjarahnútur: þeir þurfa ekki gögn frá öðrum hnútum til að tilkynna niðurstöðuna.

Aðrir hnútar, þvert á móti, hafa engin úttak. Þetta eru hnútar sem sýna til dæmis stýribúnað (relay eða eitthvað álíka). Þeir samþykkja gögn en búa ekki til útreikningsniðurstöðu sem er aðgengileg öðrum hnútum.

Að auki er líka einstakur athugasemdahnútur. Það gerir ekkert, hefur engin inntak eða úttak. Tilgangur þess er að vera skýring á skýringarmyndinni.

Hvað gerðist "atburður"? Atburður er tilkoma nýrra gagna í hvaða hnút sem er. Til dæmis innihalda atburðir: breyting á inntaksstöðu (hnútur inntak), tekur við gögnum frá öðru tæki (hnútar MQTT и UDP), lok tiltekins tíma (hnútar Timer и Tafir) og svo framvegis.

Til hvers eru viðburðir? Já, til að ákvarða í hvaða hnút ný gögn hafa komið upp og hvaða ástandi hnúta þarf að breyta í tengslum við móttöku nýrra gagna. Atburðurinn, sem sagt, „fer“ eftir hnútakeðjunni þar til hann fer framhjá öllum hnútum sem þarf að athuga og breyta ástandi þeirra.

Hægt er að skipta öllum hnútum í tvo flokka.
Við skulum hringja í hnúta sem geta búið til atburði "virkir hnútar'.
Við munum kalla hnúta sem geta ekki búið til atburði “óvirkir hnútar'.

Þegar hnútur býr til atburð (þ.e. ný gögn birtast við úttak hans), þá breytist í almennu tilvikinu ástand allrar hnútakeðjunnar sem er tengd úttak hnút atburðarrafallsins.

Til að gera það skýrt skaltu íhuga dæmið á myndinni.

ShIoTiny: Hnútar, tenglar og viðburðir eða eiginleikar teikniforrita

Virku hnúðarnir hér eru Input1, Input2 og Input3. Hinir hnúðarnir sem eftir eru eru óvirkir. Við skulum íhuga hvað gerist þegar einum eða öðrum inntak er lokað. Til hægðarauka eru niðurstöðurnar teknar saman í töflu.

ShIoTiny: Hnútar, tenglar og viðburðir eða eiginleikar teikniforrita

Eins og þú sérð, þegar atburður á sér stað, er keðja byggð frá upprunahnút atburðarins að endahnút. Ástand þeirra hnúta sem falla ekki inn í keðjuna breytist ekki.

Réttmæt spurning vaknar: hvað gerist ef tveir eða jafnvel nokkrir atburðir eiga sér stað samtímis?

Sem elskhugi verka Gleb Anfilov, freistast ég til að senda forvitinn spyrjanda í bók hans „Flýja frá óvart“. Þetta er „afstæðiskenning fyrir litlu börnin“ sem útskýrir vel hvað „samtímis“ þýðir og hvernig á að lifa með því.

En nánast allt er miklu einfaldara: þegar tveir eða jafnvel nokkrir atburðir eiga sér stað eru allar keðjur frá hverri atburðauppsprettu byggðar í röð og unnar í röð og engin kraftaverk eiga sér stað.

Næsta fullkomlega lögmæta spurning frá forvitnum lesanda er hvað mun gerast ef hnúðarnir eru tengdir í hring? Eða, eins og þeir segja meðal þessara snjöllu stráka þinna, kynntu endurgjöf. Það er að segja, tengdu úttak eins af hnútunum við inntak fyrri hnúts þannig að úttaksástand þessa hnút hefur áhrif á stöðu inntaks hans. Ritstjórinn mun ekki leyfa þér að tengja beint úttak hnúts við inntak þess. ElDraw. En óbeint, eins og á myndinni hér að neðan, er hægt að gera þetta.

Svo hvað mun gerast í þessu tilfelli? Svarið verður mjög „ákveðið“: fer eftir því hvaða hnúta. Við skulum skoða dæmið á myndinni.

ShIoTiny: Hnútar, tenglar og viðburðir eða eiginleikar teikniforrita

Þegar inntakstengiliðir Input1 eru opnir er efri inntak hnút A 0. Úttak hnút A er einnig 0. Úttak hnút B er 1. Og að lokum er neðra inntak hnút A 1. Allt er skýr. Og fyrir þá sem eru ekki með það á hreinu, skoðaðu hér að neðan til að fá lýsingu á því hvernig „AND“ og „NOT“ hnúðarnir virka.

Nú lokum við tengiliðum Input1 inntaksins, það er að segja, við notum einn á efri inntak hnút A. Þeir sem þekkja til rafeindatækni vita að í raun munum við fá klassíska rafalrás sem notar rökfræðilega þætti. Og fræðilega séð ætti slík hringrás endalaust að framleiða röðina 1-0-1-0-1-0... við úttak frumefna A og B. og 0-1-0-1-0-1-…. Þegar öllu er á botninn hvolft verður atburðurinn stöðugt að breyta stöðu hnúta A og B, hlaupandi í hring 2-3-2-3-...!

En í raun og veru gerist þetta ekki. Hringrásin mun falla í tilviljunarkennd ástand - eða gengið verður áfram á eða slökkt, eða kannski örlítið suð á og slökkt nokkrum sinnum í röð. Það veltur allt á veðrinu á suðurpól Mars. Og þess vegna gerist þetta.

Tilvik frá hnút Input1 breytir stöðu hnút A, síðan hnút B, og svo framvegis í hring nokkrum sinnum. Forritið skynjar „lykkja“ viðburðarins og stöðvar þetta karnival með valdi. Eftir þetta eru breytingar á stöðu hnúta A og B lokað þar til nýr atburður á sér stað. Augnablikið þegar forritið ákveður "hættu að snúast í hringi!" - almennt fer það eftir mörgum þáttum og getur talist tilviljunarkennt.

Vertu varkár þegar þú tengir hnúta í hring - áhrifin verða ekki alltaf augljós! Hafa góða hugmynd um hvað og hvers vegna þú ert að gera!

Er enn hægt að byggja rafall á þeim hnútum sem okkur standa til boða? Já þú getur! En þetta krefst hnút sem getur búið til atburði sjálfur. Og það er svo hnútur - þetta er „töflínan“. Við skulum sjá hvernig rafall með 6 sekúndna tímabili virkar á myndinni hér að neðan.

ShIoTiny: Hnútar, tenglar og viðburðir eða eiginleikar teikniforrita

Lykilatriði rafallsins er hnútur A - seinkunarlínan. Ef þú breytir inntaksstöðu seinkunarlínunnar úr 0 í 1, þá birtist 1 ekki strax við úttakið, heldur aðeins eftir tiltekinn tíma. Í okkar tilviki er það 3 sekúndur. Á sama hátt, ef þú breytir inntaksstöðu seinkunarlínunnar úr 1 í 0, þá mun 0 við úttakið birtast eftir sömu 3 sekúndur. Seinkunartíminn er stilltur í tíundu úr sekúndu. Það er, gildið 30 þýðir 3 sekúndur.

Sérstakur eiginleiki seinkunarlínunnar er að hún býr til atburð eftir að seinkunartíminn er liðinn.

Gerum ráð fyrir að upphaflega hafi úttak seinkunarlínunnar verið 0. Eftir að hafa farið framhjá hnút B - inverterinu - breytist þetta 0 í 1 og fer í inntak seinkunarlínunnar. Ekkert gerist strax. Við úttak seinkunarlínunnar verður það áfram 0, en niðurtalning seinkunartímans hefst. 3 sekúndur líða. Og þá býr seinkunarlínan til atburð. Við úttak hennar birtist það 1. Þessi eining, eftir að hafa farið í gegnum hnút B - inverterinn - breytist í 0 og fer í inntak seinkunarlínunnar. Aðrar 3 sekúndur líða... og ferlið endurtekur sig. Það er, á 3 sekúndna fresti breytist ástand seinkun línuúttaks úr 0 í 1 og síðan úr 1 í 0. Relayið smellur. Rafallinn er að virka. Púlstímabilið er 6 sekúndur (3 sekúndur við úttakið núll og 3 sekúndur við úttak eitt).

En í raunverulegum hringrásum er venjulega engin þörf á að nota þetta dæmi. Það eru sérstakir tímamælirhnútar sem fullkomlega og án utanaðkomandi hjálpar mynda röð púlsa með tilteknu tímabili. Lengd „núll“ og „einn“ í þessum púlsum er jöfn hálfu tímabilinu.

Til að stilla reglubundnar aðgerðir skaltu nota tímamælahnúta.

Ég vek athygli á því að slík stafræn merki, þar sem lengd „núll“ og „einn“ er jöfn, eru kölluð „hring“.

Ég vona að ég hafi skýrt spurninguna aðeins um hvernig atburðir dreifast á milli hnúta og hvað á ekki að gera?

Niðurstaða og tilvísanir

Greinin reyndist stutt en þessi grein er svar við spurningum sem hafa vaknað varðandi hnúta og atburði.

Þegar fastbúnaður þróast og ný dæmi birtast mun ég skrifa um hvernig á að forrita ShioTiny litlar greinar svo framarlega sem þær verða áhugaverðar fyrir fólk.

Eins og áður, skýringarmynd, vélbúnaðar, dæmi, lýsing á íhlutum og allt restin er hér.

Spurningar, tillögur, gagnrýni - farðu hér: [netvarið]

Heimild: www.habr.com

Bæta við athugasemd