ShIoTiny: marrazketa programen nodoak, konexioak eta gertaerak edo ezaugarriak

ShIoTiny: marrazketa programen nodoak, konexioak eta gertaerak edo ezaugarriak

Puntu nagusiak edo zeri buruz den artikulu hau

Artikuluaren gaia PLC programazio bisuala da ShIoTiny Hemen deskribatutako etxe adimendunerako: ShIoTiny: automatizazio txikia, gauzen Internet edo "sei hilabete oporrak baino lehen".

Oso labur bezalako kontzeptuak korapiloak, komunikazio, garapenak, baita programa bisual bat kargatzeko eta exekutatzeko ezaugarriak ere ESP8266, PLCaren oinarria dena ShIoTiny.

Sarrera edo antolakuntzako galdera pare bat

Nire garapenari buruzko aurreko artikuluan, kontrolagailuaren gaitasunen ikuspegi labur bat eman nuen ShIoTiny.

Bitxia bada ere, publikoak nahiko interes handia erakutsi zuen eta galdera asko egin zizkidan. Lagun batzuek berehala eskaini zidaten kontrolagailu bat erostea. Ez, ez nago diru apur bat irabaztearen aurka, baina nire kontzientziak ez dit uzten software aldetik oraindik oso gordina den zerbait saltzen.

Hori dela eta, firmwarearen bitarrak eta gailuaren diagrama argitaratu nuen GitHub-en: firmware + argibide laburrenak + diagrama + adibideak.

Orain denek ESP-07 flash eta firmwarearekin jolastu dezakete. Inork benetan argazkiko taula bera nahi badu, badaukat horietako hainbat. Posta elektronikoz idatzi [posta elektroniko bidez babestua]. Baina, Ogurtsov ahaztezinak esaten zuen bezala: "Ez naiz ezerren erantzule!"

Beraz, goazen puntura: zer da "nodo" (nodoa) eta "gertaera"? Nola exekutatzen da programa?

Ohi bezala, has gaitezen ordenan: programa deskargatuz.

Programa nola kargatzen den

Has gaitezen botoi bat sakatzen dugunean gertatzen denarekin Igo editorean ElDraw eta gure zirkuitu-programa, karratu ederrez osatua, gailuan sartzen da.

Lehenik eta behin, marraztu dugun diagramatik abiatuta, haren deskribapena testu moduan eraikitzen da.
Bigarrenik, nodoen sarrera guztiak irteeretara konektatuta dauden egiaztatzen du. Ez da "zintzilik" sarrerarik egon behar. Sarrera hori hautematen bada, zirkuitua ez da ShIoTiny-n kargatuko, eta editoreak dagokion abisua bistaratuko du.

Dena ondo joan bada, editoreak zirkuituaren deskribapen testu bat bidaltzen dio nodo banaka ShIoTiny-ri. Jakina, lehenik ShIoTiny-ren lehendik dagoen zirkuitua kentzen da. Ondorioz, testu-deskribapena FLASH memorian gordetzen da.

Bide batez, gailu batetik zirkuitu bat kendu nahi baduzu, kargatu zirkuitu huts bat bertan (nodo elementu bakar bat ez duena).

Zirkuitu-programa osoa ShIoTiny PLCan kargatu ondoren, "exekutatzen" hasten da. Zer esan nahi du?

Kontuan izan FLASH memoriatik zirkuitu bat kargatzeko prozesuak piztean eta editorearen zirkuitu bat jasotzean berdinak direla.

Lehenik eta behin, nodo objektuak haien deskribapenean oinarrituta sortzen dira.
Ondoren, nodoen arteko konexioak egiten dira. Hau da, irteerak sarrerekiko eta sarrerekiko irteeren loturak sortzen dira.

Eta horren guztiaren ondoren programaren exekuzio ziklo nagusia hasten da.

Denbora luzez idatzi nuen, baina prozesu guztiak - FLASH memoriatik zirkuitua "kargatu" hasi eta ziklo nagusia hasi arte - segundo baten zati bat behar du 60-80 nodoko zirkuitu baterako.

Nola funtzionatzen du begizta nagusiak? Oso sinplea. Lehenik sorreraren zain dago garapenak nodoren batean, gero gertaera hori prozesatzen du. Eta horrela etengabe. Tira, edo ShIoTiny-ra eskema berri bat kargatzen duten arte.

Dagoeneko hainbat aldiz aipatu ditut horrelako gauzak garapenak, korapiloak и komunikazio. Baina zer da hau softwarearen ikuspuntutik? Honetaz hitz egingo dugu gaur.

Nodoak, konexioak eta gertaerak

Ikusi besterik ez dago zirkuitu-programen adibideak ShIoTinydiagrama bi entitatez soilik osatzen dela ulertzeko: nodoak (edo elementuak) eta haien arteko konexioak.

nodoaren, baina bai edo zirkuitu elementua batzuen irudikapen birtuala da Jarduera datuen gainetik. Hau eragiketa aritmetikoa, eragiketa logikoa edo burura etortzen zaigun eragiketa bat izan daiteke. Gauza nagusia da nodoak sarrera eta irteera bat dituela.

Input - nodoak datuak jasotzen dituen lekua da. Sarrerako irudiak beti nodoaren ezkerraldean dauden puntuak dira.

Irteera - nodoaren eragiketaren emaitza berreskuratzen den lekua da. Irteerako irudiak beti nodoaren eskuinaldean kokatzen diren puntuak dira.

Nodo batzuek ez dute sarrerarik. Horrelako nodoek emaitza barnean sortzen dute. Adibidez, nodo konstante bat edo sentsore-nodo bat: ez dute beste nodo batzuetako daturik behar emaitzaren berri emateko.

Beste nodo batzuek, aitzitik, ez dute irteerarik. Hauek, adibidez, eragingailuak (erreleak edo antzekoak) bistaratzen dituzten nodoak dira. Datuak onartzen dituzte, baina ez dute beste nodo batzuen eskura dagoen emaitza konputazionalrik sortzen.

Horrez gain, iruzkin-nodo berezi bat ere badago. Ez du ezer egiten, ez du sarrera edo irteerarik. Bere helburua diagramaren azalpena izatea da.

Zer gertatu da "gertaera"? gertaera edozein nodotan datu berrien agerpena da. Adibidez, gertaeren artean honako hauek daude: sarrera-egoeraren aldaketa (nodoa Sarrerako), beste gailu batetik (nodoak) datuak jasotzea MQTT и UDP), zehaztutako denbora-tarte baten iraungipena (nodoak Timer и atzerapena) eta abar.

Zertarako dira ekitaldiak? Bai, datu berriak zein nodotan sortu diren eta datu berriak jasotzearekin lotuta zein nodo aldatu behar diren zehazteko. Gertaera, esate baterako, nodoen katetik "pasatzen" da egoera egiaztatu eta aldatu behar duten nodo guztiak saihestu arte.

Nodo guztiak bi kategoriatan bana daitezke.
Dei diezaiegun gertaerak sor ditzaketen nodoei "nodo aktiboak'.
Gertaerak sortu ezin dituzten nodoei deituko diegu "nodo pasiboak'.

Nodo batek gertaera bat sortzen duenean (hau da, bere irteeran datu berriak agertzen dira), orduan, kasu orokorrean, gertaera-sorgailuaren nodoaren irteerara konektatuta dagoen nodo-kate osoaren egoera aldatzen da.

Argi uzteko, kontuan hartu irudiko adibidea.

ShIoTiny: marrazketa programen nodoak, konexioak eta gertaerak edo ezaugarriak

Hemen nodo aktiboak Input1, Input2 eta Input3 dira. Gainerako nodoak pasiboak dira. Azter dezagun zer gertatzen den sarrera bat edo beste itxita dagoenean. Erosotasunerako, emaitzak taula batean laburbiltzen dira.

ShIoTiny: marrazketa programen nodoak, konexioak eta gertaerak edo ezaugarriak

Ikus dezakezun bezala, gertaera bat gertatzen denean, kate bat eraikitzen da gertaeraren iturburuko nodotik amaierako nodoraino. Katean erortzen ez diren nodo horien egoera ez da aldatzen.

Galdera zilegi bat sortzen da: zer gertatuko da bi gertaera edo are gehiago aldi berean gertatzen badira?

Gleb Anfilov-en lanaren maitalea naizen aldetik, "Escape from Surprise" liburura galdetzaile bitxi bat bidaltzeko tentazioa daukat. “Txikienentzako erlatibitatearen teoria” da hau, “aldiberekoa” zer esan nahi duen eta nola bizi den ondo azaltzen duena.

Baina ia dena askoz errazagoa da: bi gertaera edo are gehiago gertatzen direnean, gertaera-iturburu bakoitzeko kate guztiak sekuentzialki eraiki eta prozesatzen dira, eta ez da miraririk gertatzen.

Irakurle jakintsu baten hurrengo galdera guztiz zilegia da zer gertatuko da nodoak eraztun batean konektatzen badira? Edo, zure mutil adimentsu horien artean esaten den bezala, aurkeztu iritzia. Hau da, konektatu nodoetako baten irteera aurreko nodoaren sarrerarekin, nodo honen irteerako egoerak bere sarreraren egoeran eragin dezan. Editoreak ez dizu nodo baten irteera bere sarrerarekin zuzenean konektatzen utziko. ElDraw. Baina zeharka, beheko irudian bezala, hori egin daiteke.

Beraz, zer gertatuko da kasu honetan? Erantzuna oso “zehatza” izango da: zein nodoren araberakoa. Ikus dezagun irudiko adibidea.

ShIoTiny: marrazketa programen nodoak, konexioak eta gertaerak edo ezaugarriak

Input1 sarrerako kontaktuak irekita daudenean, A nodoaren goiko sarrera 0 da. A nodoaren irteera ere 0 da. B nodoaren irteera 1 da. Eta, azkenik, A nodoaren beheko sarrera 1 da. Dena da. argi. Eta argi ez dutenentzat, begiratu behean "ETA" eta "EZ" nodoek nola funtzionatzen duten deskribatzeko.

Orain Input1 sarrerako kontaktuak ixten ditugu, hau da, A nodoaren goiko sarrerari bat aplikatzen diogu. Elektronika ezagutzen dutenek badakite, hain zuzen ere, elementu logikoak erabiliz sorgailu-zirkuitu klasiko bat lortuko dugula. Eta teorian, zirkuitu horrek etengabe 1-0-1-0-1-0 sekuentzia sortu beharko luke A eta B elementuen irteeran. eta 0-1-0-1-0-1-…. Azken finean, gertaerak A eta B nodoen egoera etengabe aldatu behar du, zirkulu batean 2-3-2-3-...!

Baina errealitatean ez da hori gertatzen. Zirkuitua ausazko egoera batean eroriko da - edo errelea piztuta edo itzalita egongo da, edo agian apur bat piztu eta itzaliko da hainbat aldiz jarraian. Dena Marteko hego poloko eguraldiaren araberakoa da. Eta horregatik gertatzen da hau.

Input1 nodoaren gertakari batek A nodoaren egoera aldatzen du, gero B nodoaren eta abar zirkulu batean hainbat aldiz. Programak ekitaldiaren “looping”-a detektatzen du eta inauteri hau indarrez geldiarazten du. Horren ondoren, A eta B nodoen egoera-aldaketak blokeatzen dira gertaera berri bat gertatu arte. Programak "zirkuluetan bira egiteari utzi!" - oro har, faktore askoren araberakoa da eta ausazkotzat har daiteke.

Kontuz ibili korapiloak eraztun batean konektatzean - ondorioak ez dira beti nabariak izango! Ideia ona izan zer eta zergatik egiten ari zaren!

Posible al da oraindik sorgailu bat eraikitzea eskura ditugun nodoetan? Bai, egin dezakezu! Baina honek gertaerak berak sor ditzakeen nodo bat behar du. Eta halako nodo bat dago - hau da "atzerapen-lerroa". Ikus dezagun nola funtzionatzen duen 6 segundoko periodoa duen sorgailu batek beheko irudian.

ShIoTiny: marrazketa programen nodoak, konexioak eta gertaerak edo ezaugarriak

Sorgailuaren funtsezko elementua A nodoa da - atzerapen-lerroa. Atzerapen-lerroaren sarrera-egoera 0tik 1era aldatzen baduzu, orduan 1 ez da berehala agertuko irteeran, baina denbora zehatz baten ondoren bakarrik. Gure kasuan 3 segundokoa da. Modu berean, atzerapen-lerroaren sarrerako egoera 1etik 0ra aldatzen baduzu, irteeran 0 agertuko da 3 segundo berdinen ondoren. Atzerapen-denbora segundo hamarrenetan ezartzen da. Hau da, 30 balioak 3 segundo esan nahi du.

Atzerapen-lerroaren ezaugarri berezi bat atzerapen-denbora igaro ondoren gertaera bat sortzen duela da.

Demagun hasieran atzerapen-lerroaren irteera 0 zela. B nodoa - inbertsorea - pasa ondoren 0 hau 1 bihurtzen da eta atzerapen-lerroaren sarrerara doa. Ez da ezer gertatzen berehala. Atzerapen-lerroaren irteeran, 0 mantenduko da, baina atzerapen-denboraren atzerako kontaketa hasiko da. 3 segundo igarotzen dira. Eta gero atzerapen-lerroak gertaera bat sortzen du. Bere irteeran 1 agertzen da. Unitate hau, B nodotik igaro ondoren - inbertsorea - 0 bihurtzen da eta atzerapen-lerroaren sarrerara doa. Beste 3 segundo pasatzen dira... eta prozesua errepikatzen da. Hau da, 3 segundoro atzerapen-lerroaren irteeraren egoera 0tik 1era aldatzen da eta gero 1etik 0ra. Erreleak klik egiten du. Sorgailua lanean ari da. Pultsu-aldia 6 segundokoa da (3 segundo irteerako zeroan eta 3 segundo irteerako batean).

Baina, zirkuitu errealetan, normalean ez dago adibide hau erabili beharrik. Tenporizadore-nodo bereziak daude, ezin hobeto eta kanpoko laguntzarik gabe, periodo jakin batekin pultsu-sekuentzia bat sortzen dutenak. Pultsu hauetan "zero" eta "bat" iraupena periodoaren erdiaren berdina da.

Aldizkako ekintzak ezartzeko, erabili tenporizadore-nodoak.

Ohartu naiz halako seinale digitalak, non "zero" eta "bat" iraupena berdina den, "meandro" deitzen zaiela.

Espero dut galdera apur bat argitu izana nodoen artean gertaerak nola hedatzen diren eta zer ez egin?

Ondorioa eta erreferentziak

Artikulua laburra izan zen, baina artikulu hau nodoei eta gertakariei buruz sortutako galderei erantzuna da.

Firmwarea garatzen doan heinean eta adibide berriak agertzen diren heinean, programatzeko moduari buruz idatziko dut ShIoTiny artikulu txikiak, betiere jendearentzat interesgarriak izango badira.

Lehen bezala, diagrama, firmwarea, adibideak, osagaien deskribapena eta guztia gainerakoa hemen dago.

Galderak, iradokizunak, kritikak - joan hona: [posta elektroniko bidez babestua]

Iturria: www.habr.com

Gehitu iruzkin berria