ShIoTiny: knopen, ferbiningen en eveneminten as funksjes fan tekenprogramma's

ShIoTiny: knopen, ferbiningen en eveneminten as funksjes fan tekenprogramma's

Haadpunten of wêr't dit artikel oer giet

It ûnderwerp fan it artikel is fisuele PLC-programmearring ShioTiny foar it hjir beskreaune tûke hûs: ShIoTiny: lytse automatisearring, ynternet fan dingen as "seis moannen foar fakânsje".

Hiel koart begripen lykas knopen, kommunikaasje, eveneminten, lykas ek funksjes fan it laden en útfieren fan in fisueel programma op ESP8266, dat is de basis fan de PLC ShioTiny.

Ynlieding of in pear organisatoaryske fragen

Yn it foarige artikel oer myn ûntwikkeling joech ik in koart oersjoch fan 'e mooglikheden fan' e controller ShioTiny.

Geweldich genôch liet it publyk in flinke belangstelling sjen en stelde my in soad fragen. Guon freonen biede sels daliks oan om in controller fan my te keapjen. Nee, ik bin net tsjin it fertsjinjen fan in bytsje jild, mar myn gewisse lit my net iets ferkeapje dat noch heul grof is yn termen fan software.

Dêrom pleatste ik de firmware-binaries en apparaatdiagram op GitHub: firmware + koartste ynstruksjes + diagram + foarbylden.

No kin elkenien de ESP-07 flashje en sels mei de firmware boartsje. As immen echt wol krekt itselde boerd as op 'e foto, dan haw ik der ferskate fan. Skriuw fia e-post [e-post beskerme]. Mar, lykas de ûnferjitlike Ogurtsov sei: "Ik bin net ferantwurdlik foar neat!"

Dus, litte wy nei it punt komme: wat is "knot"(knooppunt) en"barren"? Hoe wurdt it programma útfierd?

Lykas gewoanlik, litte wy yn oarder begjinne: troch it programma te downloaden.

Hoe't it programma wurdt laden

Litte wy begjinne mei wat der bart as wy op in knop drukke upload yn de redaksje ElDraw en ús circuit-programma, besteande út prachtige fjouwerkanten, fljocht yn it apparaat.

As earste, basearre op it diagram dat wy hawwe tekene, wurdt syn beskriuwing yn tekstfoarm boud.
Twads, it kontrolearret oft alle node yngongen binne ferbûn mei útgongen. D'r moatte gjin "hingjende" yngongen wêze. As sa'n ynfier wurdt ûntdutsen, sil it circuit net yn ShIoTiny laden wurde, en de bewurker sil in oerienkommende warskôging werjaan.

As alles goed gie, stjoert de bewurker in tekstbeskriuwing fan it circuit ien knooppunt tagelyk nei ShIoTiny. Fansels wurdt it besteande circuit fan ShIoTiny earst fuorthelle. De resultearjende tekstbeskriuwing wurdt opslein yn FLASH-ûnthâld.

Trouwens, as jo in sirkwy fan in apparaat fuortsmite wolle, laad dan gewoan in lege sirkwy yn (net mei ien knooppuntelemint).

Sadree't it hiele circuit programma is laden yn de ShIoTiny PLC, it begjint te "útfiere". Wat betsjut dat?

Tink derom dat de prosessen foar it laden fan in circuit út FLASH ûnthâld as de macht wurdt ynskeakele en by it ûntfangen fan in circuit út de bewurker binne identyk.

Earst wurde node-objekten makke op basis fan har beskriuwing.
Dan wurde ferbinings makke tusken knopen. Dat is, keplingen fan útgongen nei yngongen en yngongen nei útgongen wurde generearre.

En pas nei dit alles begjint de útfieringssyklus fan it haadprogramma.

Ik haw in lange tiid skreaun, mar it heule proses - fan it "laden" fan it circuit fan it FLASH-ûnthâld oant it begjin fan 'e haadsyklus - nimt in fraksje fan in sekonde foar in circuit fan 60-80 knopen.

Hoe wurket de haadloop? Hiel ienfâldich. Earst wachtet er op it ûntstean eveneminten op guon knooppunt, dan ferwurket dat evenemint. En sa fierder. No, of oant se in nij skema uploade nei ShIoTiny.

Ferskate kearen al haw ik neamd dingen lykas eveneminten, knopen и kommunikaasje. Mar wat is dit út in software eachpunt? Hjir sille wy hjoed oer prate.

Knooppunten, ferbinings en eveneminten

Sjoch mar ris op de foarbylden fan circuit programma foar ShioTinyom te begripen dat it diagram bestiet út mar twa entiteiten - knopen (as eleminten) en de ferbinings tusken harren.

Knot, mar ja of circuit elemint is in firtuele foarstelling fan guon aksje oer de gegevens. Dit kin in aritmetyske operaasje wêze, in logyske operaasje, of elke operaasje dy't ús yn 't sin komt. It wichtichste is dat it knooppunt in yngong en in útgong hat.

entry - dit is it plak wêr't it knooppunt gegevens ûntfangt. De ynfierôfbyldings binne punten dy't altyd oan de linkerkant fan it knooppunt binne.

Ôfslach - dit is it plak wêr't it resultaat fan 'e operaasje fan' e knooppunt wurdt ophelle. De útfierôfbyldings binne punten dy't altyd oan 'e rjochterkant fan it knooppunt lizze.

Guon knopen hawwe gjin ynput. Sokke knopen generearje it resultaat yntern. Bygelyks in konstante knooppunt of in sensorknooppunt: se hawwe gjin gegevens fan oare knooppunten nedich om it resultaat te rapportearjen.

Oare knopen, krekt oarsom, hawwe gjin útgongen. Dit binne knopen dy't bygelyks actuators (relays of wat ferlykber) werjaan. Se akseptearje gegevens, mar generearje gjin berekkeningsresultaat dat beskikber is foar oare knopen.

Derneist is d'r ek in unyk kommentaarknooppunt. It docht neat, hat gjin yn- of útgongen. It doel is om in ferklearring te wêzen op it diagram.

Wat is der bard"barren"?" Evenemint is it ûntstean fan nije gegevens yn elke knooppunt. Bygelyks, eveneminten omfetsje: feroaring yn ynfierstatus (knooppunt Ynfier), it ûntfangen fan gegevens fan in oar apparaat (knooppunten MQTT и UDP), ferrinnen fan in opjûne perioade (knooppunten timer и Ferfal) ensafuorthinne.

Wêr binne eveneminten foar? Ja, om te bepalen yn hokker knooppunt nije gegevens ûntstien binne en de steaten fan hokker knooppunten moatte wurde feroare yn ferbân mei de ûntfangst fan nije gegevens. It barren, as it wie, "foarby" lâns de keatling fan knopen oant it omgiet alle knopen wêrfan de steat moat wurde kontrolearre en feroare.

Alle knooppunten kinne wurde ferdield yn twa kategoryen.
Litte wy knooppunten neame dy't eveneminten kinne generearje "aktive knopen".
Wy sille knopen neame dy't gjin eveneminten kinne generearje "passive knopen".

As in knooppunt in evenemint genereart (dat is, nije gegevens ferskine by syn útfier), dan feroaret yn 't algemien de steat fan' e hiele keatling fan knopen ferbûn mei de útfier fan 'e evenemintgeneratorknooppunt.

Om it dúdlik te meitsjen, beskôgje it foarbyld yn 'e figuer.

ShIoTiny: knopen, ferbiningen en eveneminten as funksjes fan tekenprogramma's

De aktive knopen hjir binne Input1, Input2 en Input3. De oerbleaune knopen binne passyf. Litte wy beskôgje wat der bart as ien of oare ynput wurdt sluten. Foar gemak wurde de resultaten gearfette yn in tabel.

ShIoTiny: knopen, ferbiningen en eveneminten as funksjes fan tekenprogramma's

Sa't jo sjen kinne, as in evenemint bart, wurdt in ketting boud fan 'e boarneknoop fan it evenemint nei it einknooppunt. De steat fan dy knopen dy't net falle yn 'e keatling feroaret net.

In legitime fraach ûntstiet: wat bart der as twa of sels meardere eveneminten tagelyk foarkomme?

As leafhawwer fan it wurk fan Gleb Anfilov, bin ik oanstriid om in nijsgjirrige fraach te stjoeren nei syn boek "Escape from Surprise." Dit is in "teory fan relativiteit foar de lytsen", dy't goed ferklearret wat "simultane" betsjut en hoe't jo dermei libje kinne.

Mar praktysk alles is folle ienfâldiger: as twa of sels meardere eveneminten foarkomme, wurde alle keatlingen fan elke barrenboarne sequentieel boud en ferwurke op 'e beurt, en gjin wûnders komme foar.

De folgjende folslein legitime fraach fan in nijsgjirrige lêzer is wat sil barre as de knopen binne ferbûn yn in ring? Of, lykas se sizze ûnder dizze tûke jonges fan jo, yntrodusearje feedback. Dat is, ferbine de útfier fan ien fan 'e knooppunten oan' e ynfier fan 'e foarige knooppunt sadat de útfierstân fan dizze knoop de steat fan syn ynfier beynfloedet. De bewurker sil jo net tastean om de útfier fan in knooppunt direkt te ferbinen mei syn ynfier. ElDraw. Mar yndirekt, lykas yn 'e figuer hjirûnder, kin dit dien wurde.

Dus wat sil barre yn dit gefal? It antwurd sil heul "definityf" wêze: ôfhinklik fan hokker knopen. Litte wy nei it foarbyld yn 'e figuer sjen.

ShIoTiny: knopen, ferbiningen en eveneminten as funksjes fan tekenprogramma's

As de ynfierkontakten fan Input1 iepen binne, is de boppeste ynfier fan knooppunt A 0. De útfier fan knooppunt A is ek 0. De útfier fan knooppunt B is 1. En as lêste is de legere ynfier fan knooppunt A 1. Alles is opklearje. En foar dyjingen dy't net dúdlik binne, sjoch hjirûnder foar in beskriuwing fan hoe't de "EN" en "NOT" knopen wurkje.

No slute wy de kontakten fan 'e ynfier 1, dat is, wy tapasse ien op' e boppeste ynfier fan knooppunt A. Dejingen dy't bekend binne mei elektroanika witte dat wy yn feite in klassike generator-sirkwy krije mei logyske eleminten. En yn teory soe sa'n sirkwy einleaze de folchoarder 1-0-1-0-1-0 moatte produsearje ... by de útfier fan eleminten A en B. en 0-1-0-1-0-1-…. Ommers, it evenemint moat hieltyd feroarje de steat fan knopen A en B, rinnend yn in sirkel 2-3-2-3-...!

Mar yn werklikheid bart dit net. It circuit sil falle yn in willekeurige steat - of it estafette bliuwt oan of út, of miskien in bytsje buzz oan en út ferskate kearen op in rige. It hinget allegear ôf fan it waar op de súdpoal fan Mars. En dêrom bart dit.

In evenemint fan knooppunt Input1 feroaret de tastân fan knooppunt A, dan knooppunt B, ensfh. ferskate kearen yn in sirkel. It programma detektearret de "looping" fan it evenemint en stoppet dit karnaval mei geweld. Hjirnei wurde feroarings yn 'e tastân fan knopen A en B blokkearre oant in nij evenemint bart. It momint dat it programma beslút "stopje yn sirkels te draaien!" - yn it algemien, it hinget fan in protte faktoaren en kin wurde beskôge willekeurich.

Wês foarsichtich by it ferbinen fan knopen yn in ring - de effekten sille net altyd dúdlik wêze! Hawwe in goed idee fan wat en wêrom jo dogge!

Is it noch mooglik om in generator te bouwen op de foar ús beskikbere knopen? Ja dat kinsto! Mar dit fereasket in knooppunt dat sels eveneminten kin generearje. En d'r is sa'n knooppunt - dit is de "fertragingsline". Litte wy sjen hoe't in generator mei in perioade fan 6 sekonden wurket yn 'e figuer hjirûnder.

ShIoTiny: knopen, ferbiningen en eveneminten as funksjes fan tekenprogramma's

It wichtichste elemint fan 'e generator is knooppunt A - de fertragingsline. As jo ​​feroarje de ynfier steat fan de fertraging line fan 0 nei 1, dan 1 sil net ferskine by de útfier fuortendaliks, mar pas nei in opjûne tiid. Yn ús gefal is it 3 sekonden. Yn 'e selde wize, as jo feroarje de ynfier steat fan de fertraging line fan 1 nei 0, dan 0 by de útfier sil ferskine nei deselde 3 sekonden. De fertragingstiid wurdt ynsteld yn tsienden fan in sekonde. Dat is, de wearde 30 betsjut 3 sekonden.

In bysûndere skaaimerk fan de fertraging line is dat it generearret in evenemint neidat de fertraging tiid is ferrûn.

Lit ús oannimme dat yn earste ynstânsje de útfier fan de fertraging line wie 0. Nei it trochjaan fan knooppunt B - de ynverter - dizze 0 feroaret yn 1 en giet nei de ynfier fan de fertraging line. Der bart direkt neat. By de útfier fan 'e fertragingsline sil it 0 bliuwe, mar it ôftellen fan' e fertragingstiid sil begjinne. 3 sekonden passe. En dan genereart de fertragingsline in evenemint. By syn útfier ferskynt 1. Dizze ienheid, nei't troch knooppunt B - de omfoarmer - giet, feroaret yn 0 en giet nei de ynfier fan 'e fertragingsline. Noch 3 sekonden passe ... en it proses wurdt werhelle. Dat is, elke 3 sekonden feroaret de tastân fan 'e fertragingslineútfier fan 0 nei 1 en dan fan 1 nei 0. De estafette klikt. De generator wurket. De pulsperioade is 6 sekonden (3 sekonden by de útfier nul en 3 sekonden by de útfier ien).

Mar, yn echte circuits, is d'r normaal net nedich om dit foarbyld te brûken. D'r binne spesjale timerknooppunten dy't perfekt en sûnder help fan bûten in sekwinsje fan pulsen generearje mei in opjûne perioade. De doer fan "nul" en "ien" yn dizze pulsen is lyk oan de helte fan de perioade.

Om periodike aksjes yn te stellen, brûk timerknooppunten.

Ik konstatearje dat sokke digitale sinjalen, wêrby't de doer fan "nul" en "ien" gelyk binne, wurde "meander" neamd.

Ik hoopje dat ik de fraach in bytsje ferklearje oer hoe't eveneminten wurde propagearre tusken knopen en wat net te dwaan?

Konklúzje en referinsjes

It artikel blykte koart te wêzen, mar dit artikel is in antwurd op fragen dy't ûntstien binne oangeande knopen en eveneminten.

As firmware ûntwikkelet en nije foarbylden ferskine, sil ik skriuwe oer hoe't jo programmearje ShioTiny lytse artikels sa lang as it sil wêze nijsgjirrich foar minsken.

Lykas earder, diagram, firmware, foarbylden, beskriuwing fan komponinten en alles de rest is hjir.

Fragen, suggestjes, krityk - gean hjir: [e-post beskerme]

Boarne: www.habr.com

Add a comment