ShIoTiny: Nodusse, skakels en gebeurtenisse of kenmerke van tekenprogramme

ShIoTiny: Nodusse, skakels en gebeurtenisse of kenmerke van tekenprogramme

Sleutelpunte of waaroor hierdie artikel gaan

Die onderwerp van die artikel is visuele PLC-programmering ShioTiny vir die slim huis wat hier beskryf word: ShIoTiny: klein outomatisering, internet van dinge of "ses maande voor vakansie".

Baie kortliks konsepte soos knope, kommunikasie, ontwikkelings, sowel as kenmerke om 'n visuele program op te laai en uit te voer ESP8266, wat die basis van die PLC is ShioTiny.

Inleiding of 'n paar organisatoriese vrae

In die vorige artikel oor my ontwikkeling het ek 'n kort oorsig gegee van die beheerder se vermoëns ShioTiny.

Vreemd genoeg het die publiek nogal groot belangstelling getoon en my nogal baie vrae gevra. Sommige vriende het selfs dadelik aangebied om 'n kontroleerder by my te koop. Nee, ek is nie daarteen om 'n bietjie geld te verdien nie, maar my gewete laat my nie toe om iets te verkoop wat nog baie kru is in terme van sagteware nie.

Daarom het ek die firmware-binaries en toesteldiagram op GitHub geplaas: firmware + kortste instruksies + diagram + voorbeelde.

Nou kan almal die ESP-07 flits en self met die firmware speel. As iemand regtig presies dieselfde bord wil hê as op die foto, dan het ek verskeie van hulle. Skryf per e-pos [e-pos beskerm]. Maar, soos die onvergeetlike Ogurtsov altyd gesê het: "Ek is vir niks verantwoordelik nie!"

So, kom ons kom by die punt: wat is "knoop" (knooppunt) en "gebeurtenis"? Hoe word die program uitgevoer?

Soos gewoonlik, kom ons begin in volgorde: deur die program af te laai.

Hoe die program gelaai word

Kom ons begin met wat gebeur wanneer ons 'n knoppie druk Laai in die redakteur ElDraw en ons kringprogram, wat uit pragtige blokkies bestaan, vlieg in die toestel.

Eerstens, gebaseer op die diagram wat ons geteken het, word die beskrywing daarvan in teksvorm gebou.
Tweedens, dit kontroleer of alle nodus-insette aan uitsette gekoppel is. Daar moet geen "hangende" ingange wees nie. As so 'n inset bespeur word, sal die stroombaan nie in ShIoTiny gelaai word nie, en die redigeerder sal 'n ooreenstemmende waarskuwing vertoon.

As alles goed gegaan het, stuur die redigeerder 'n teksbeskrywing van die stroombaan een nodus op 'n slag na ShIoTiny. Natuurlik word die bestaande stroombaan van ShIoTiny eers verwyder. Die gevolglike teksbeskrywing word in FLASH-geheue gestoor.

Terloops, as jy 'n stroombaan van 'n toestel wil verwyder, laai dan eenvoudig 'n leë stroombaan daarin (wat nie 'n enkele noduselement bevat nie).

Sodra die hele kringprogram in die ShIoTiny PLC gelaai is, begin dit "uitvoer". Wat beteken dit?

Let daarop dat die prosesse om 'n stroombaan uit FLASH-geheue te laai wanneer die krag aangeskakel word en wanneer 'n stroombaan vanaf die redigeerder ontvang word, identies is.

Eerstens word nodus-objekte geskep op grond van hul beskrywing.
Dan word verbindings tussen nodusse gemaak. Dit wil sê, skakels van uitsette na insette en insette na uitsette word gegenereer.

En eers na dit alles begin die hoofprogram-uitvoeringsiklus.

Ek het lank geskryf, maar die hele proses - van die "laai" van die stroombaan vanaf FLASH-geheue tot die begin van die hoofsiklus - neem 'n breukdeel van 'n sekonde vir 'n stroombaan van 60-80 nodusse.

Hoe werk die hooflus? Baie eenvoudig. Eers wag hy vir die opkoms ontwikkelings by een of ander nodus, verwerk dan daardie gebeurtenis. En so aan eindeloos. Wel, of totdat hulle 'n nuwe skema oplaai na ShIoTiny.

Ek het al verskeie kere dinge genoem soos ontwikkelings, knope и kommunikasie. Maar wat is dit vanuit 'n sagteware-oogpunt? Ons sal vandag hieroor praat.

Nodusse, verbindings en gebeure

Kyk net na die voorbeelde van kringprogramme vir ShioTinyom te verstaan ​​dat die diagram slegs uit twee entiteite bestaan ​​- nodusse (of elemente) en die verbindings tussen hulle.

knoop, maar ja of stroombaan element is 'n virtuele voorstelling van sommige aktiwiteit oor die data. Dit kan 'n rekenkundige bewerking, 'n logiese bewerking of enige bewerking wees wat by ons opkom. Die belangrikste ding is dat die nodus 'n ingang en 'n uitgang het.

Input - dit is die plek waar die nodus data ontvang. Die invoerbeelde is punte wat altyd aan die linkerkant van die nodus is.

Output - dit is die plek waar die resultaat van die nodus se operasie opgespoor word. Die uitsetbeelde is punte wat altyd aan die regterkant van die nodus geleë is.

Sommige nodusse het nie insette nie. Sulke nodusse genereer die resultaat intern. Byvoorbeeld, 'n konstante nodus of 'n sensor node: hulle het nie data van ander nodusse nodig om die resultaat te rapporteer nie.

Ander nodusse, inteendeel, het geen uitsette nie. Dit is nodusse wat byvoorbeeld aktueerders (relais of iets soortgelyks) vertoon. Hulle aanvaar data, maar genereer nie 'n berekeningsresultaat wat vir ander nodusse beskikbaar is nie.

Daarbenewens is daar ook 'n unieke kommentaar nodus. Dit doen niks, het geen insette of uitsette nie. Die doel daarvan is om 'n verduideliking op die diagram te wees.

Wat het gebeur "gebeurtenis"? gebeurtenis is die opkoms van nuwe data in enige nodus. Gebeurtenisse sluit byvoorbeeld in: verandering in invoertoestand (node insette), ontvang data vanaf 'n ander toestel (nodes MQTT и UDP), verstryking van 'n bepaalde tydperk (nodes Timer и vertraging) en so aan.

Waarvoor is gebeure? Ja, om te bepaal in watter nodus nuwe data ontstaan ​​het en die toestande van watter nodusse moet verander word in verband met die ontvangs van nuwe data. Die gebeurtenis, as 't ware, "gaan" langs die ketting van nodusse totdat dit alle nodusse omseil wie se toestand nagegaan en verander moet word.

Alle nodusse kan in twee kategorieë verdeel word.
Kom ons bel nodusse wat gebeurtenisse kan genereer "aktiewe nodusse".
Ons sal nodusse noem wat nie gebeurtenisse kan genereer nie "passiewe nodusse".

Wanneer 'n nodus 'n gebeurtenis genereer (dit wil sê nuwe data verskyn by sy uitset), dan verander in die algemene geval die toestand van die hele ketting nodusse wat aan die uitset van die gebeurtenisgeneratornodus gekoppel is.

Om dit duidelik te maak, oorweeg die voorbeeld in die figuur.

ShIoTiny: Nodusse, skakels en gebeurtenisse of kenmerke van tekenprogramme

Die aktiewe nodusse hier is Input1, Input2 en Input3. Die oorblywende nodusse is passief. Kom ons kyk na wat gebeur wanneer een of ander insette gesluit word. Gerieflikheidshalwe word die resultate in 'n tabel opgesom.

ShIoTiny: Nodusse, skakels en gebeurtenisse of kenmerke van tekenprogramme

Soos jy kan sien, wanneer 'n gebeurtenis plaasvind, word 'n ketting gebou vanaf die bronknoop van die gebeurtenis tot by die eindknoop. Die toestand van daardie nodusse wat nie in die ketting val nie, verander nie.

’n Regmatige vraag ontstaan: wat sal gebeur as twee of selfs verskeie gebeurtenisse gelyktydig plaasvind?

As 'n liefhebber van die werk van Gleb Anfilov, is ek in die versoeking om 'n nuuskierige vraesteller na sy boek "Escape from Surprise" te stuur. Dit is 'n "relatiwiteitsteorie vir die kleintjies", wat goed verduidelik wat "gelyktydig" beteken en hoe om daarmee saam te leef.

Maar feitlik alles is baie eenvoudiger: wanneer twee of selfs verskeie gebeurtenisse plaasvind, word alle kettings van elke gebeurtenisbron opeenvolgend gebou en om die beurt verwerk, en geen wonderwerke vind plaas nie.

Die volgende heeltemal legitieme vraag van 'n nuuskierige leser is wat sal gebeur as die nodusse in 'n ring verbind word? Of, soos hulle sê onder hierdie slim ouens van jou, stel terugvoer in. Dit wil sê, koppel die uitset van een van die nodusse aan die inset van die vorige nodus sodat die uitsettoestand van hierdie nodus die toestand van sy inset beïnvloed. Die redigeerder sal jou nie toelaat om die uitset van 'n nodus direk aan sy insette te koppel nie. ElDraw. Maar indirek, soos in die figuur hieronder, kan dit gedoen word.

So wat sal in hierdie geval gebeur? Die antwoord sal baie "definitief" wees: afhangend van watter nodusse. Kom ons kyk na die voorbeeld in die figuur.

ShIoTiny: Nodusse, skakels en gebeurtenisse of kenmerke van tekenprogramme

Wanneer die insetkontakte van Input1 oop is, is die boonste inset van knooppunt A 0. Die uitset van knooppunt A is ook 0. Die uitset van knooppunt B is 1. En uiteindelik is die onderste inset van knooppunt A 1. Alles is duidelik. En vir diegene wat nie duidelik is nie, kyk hieronder vir 'n beskrywing van hoe die "EN" en "NIE" nodes werk.

Nou sluit ons die kontakte van die Input1-invoer, dit wil sê ons pas een toe op die boonste inset van nodus A. Diegene wat vertroud is met elektronika weet dat ons in werklikheid 'n klassieke generatorkring sal kry wat logiese elemente gebruik. En in teorie behoort so 'n stroombaan eindeloos die ry 1-0-1-0-1-0 ... by die uitset van elemente A en B te produseer. en 0-1-0-1-0-1-…. Die gebeurtenis moet immers voortdurend die toestand van nodusse A en B verander, wat in 'n sirkel 2-3-2-3-... loop!

Maar in werklikheid gebeur dit nie. Die stroombaan sal in 'n ewekansige toestand val - of die aflos sal aan of af bly, of miskien 'n paar keer in 'n ry effens aan en af ​​gons. Dit hang alles af van die weer by die suidpool van Mars. En dit is hoekom dit gebeur.

'n Gebeurtenis vanaf nodus Input1 verander die toestand van nodus A, dan node B, ensovoorts in 'n sirkel verskeie kere. Die program bespeur die "looping" van die gebeurtenis en stop hierdie karnaval met geweld. Hierna word veranderinge in die toestand van nodusse A en B geblokkeer totdat 'n nuwe gebeurtenis plaasvind. Die oomblik waarop die program besluit "hou op om in sirkels te draai!" - in die algemeen hang dit van baie faktore af en kan dit as lukraak beskou word.

Wees versigtig wanneer jy knope in 'n ring verbind - die effekte sal nie altyd duidelik wees nie! Het 'n goeie idee van wat en hoekom jy doen!

Is dit nog moontlik om 'n kragopwekker te bou op die nodusse wat tot ons beskikking is? Ja jy kan! Maar dit vereis 'n nodus wat self gebeure kan genereer. En daar is so 'n nodus - dit is die "vertragingslyn". Kom ons kyk hoe 'n kragopwekker met 'n tydperk van 6 sekondes in die figuur hieronder werk.

ShIoTiny: Nodusse, skakels en gebeurtenisse of kenmerke van tekenprogramme

Die sleutelelement van die kragopwekker is nodus A - die vertragingslyn. As u die insettoestand van die vertragingslyn van 0 na 1 verander, sal 1 nie onmiddellik by die uitset verskyn nie, maar eers na 'n bepaalde tyd. In ons geval is dit 3 sekondes. Op dieselfde manier, as jy die invoertoestand van die vertragingslyn van 1 na 0 verander, sal 0 by die uitset na dieselfde 3 sekondes verskyn. Die vertragingstyd word in tiendes van 'n sekonde gestel. Dit wil sê, die waarde 30 beteken 3 sekondes.

'n Spesiale kenmerk van die vertragingslyn is dat dit 'n gebeurtenis genereer nadat die vertragingstyd verstryk het.

Kom ons neem aan dat die uitset van die vertragingslyn aanvanklik 0 was. Nadat die knooppunt B - die omskakelaar - verby is, verander hierdie 0 in 1 en gaan na die inset van die vertragingslyn. Niks gebeur dadelik nie. By die uitset van die vertragingslyn sal dit 0 bly, maar die aftelling van die vertragingstyd sal begin. 3 sekondes gaan verby. En dan genereer die vertragingslyn 'n gebeurtenis. By sy uitset verskyn dit 1. Hierdie eenheid, nadat dit deur knooppunt B - die omskakelaar - beweeg het, verander in 0 en gaan na die inset van die vertragingslyn. Nog 3 sekondes gaan verby... en die proses herhaal. Dit wil sê, elke 3 sekondes verander die toestand van die vertragingslynuitset van 0 na 1 en dan van 1 na 0. Die aflos klik. Die kragopwekker werk. Die polsperiode is 6 sekondes (3 sekondes by die uitset nul en 3 sekondes by die uitset een).

Maar in werklike stroombane is dit gewoonlik nie nodig om hierdie voorbeeld te gebruik nie. Daar is spesiale timer nodusse wat perfek en sonder hulp van buite 'n reeks pulse met 'n gegewe tydperk genereer. Die duur van "nul" en "een" in hierdie pulse is gelyk aan die helfte van die periode.

Om periodieke aksies in te stel, gebruik timer nodes.

Ek let daarop dat sulke digitale seine, waar die duur van "nul" en "een" gelyk is, "meander" genoem word.

Ek hoop ek het die vraag 'n bietjie uitgeklaar oor hoe gebeure tussen nodusse gepropageer word en wat om nie te doen nie?

Gevolgtrekking en verwysings

Die artikel blyk kort te wees, maar hierdie artikel is 'n antwoord op vrae wat ontstaan ​​het oor nodusse en gebeure.

Soos firmware ontwikkel en nuwe voorbeelde verskyn, sal ek skryf oor hoe om te programmeer ShioTiny klein artikels solank dit vir mense interessant sal wees.

Soos voorheen, diagram, firmware, voorbeelde, beskrywing van komponente en alles die res is hier.

Vrae, voorstelle, kritiek - gaan hierheen: [e-pos beskerm]

Bron: will.com

Voeg 'n opmerking