ShioTiny: nyjet, lidhjet dhe ngjarjet ose veçoritë e programeve të vizatimit

ShioTiny: nyjet, lidhjet dhe ngjarjet ose veçoritë e programeve të vizatimit

Pikat kryesore ose për çfarë bëhet fjalë ky artikull

Tema e artikullit është programimi vizual PLC ShioTiny për shtëpinë inteligjente të përshkruar këtu: ShioTiny: automatizim i vogël, internet i gjërave ose "gjashtë muaj para pushimeve".

Shumë shkurt koncepte të tilla si nyjet, komunikim, Zhvillimet, si dhe veçoritë e ngarkimit dhe ekzekutimit të një programi vizual në ESP8266, e cila është baza e PLC ShioTiny.

Hyrje ose disa pyetje organizative

Në artikullin e mëparshëm në lidhje me zhvillimin tim, unë dhashë një përmbledhje të shkurtër të aftësive të kontrolluesit ShioTiny.

Çuditërisht, publiku tregoi një interes mjaft të fortë dhe më bëri mjaft pyetje. Disa miq madje ofruan menjëherë të blinin një kontrollues nga unë. Jo, nuk jam kundër fitimit të pak parave, por ndërgjegjja ime nuk më lejon të shes diçka që është ende shumë e papërpunuar për sa i përket softuerit.

Prandaj, unë postova binarët e firmuerit dhe diagramin e pajisjes në GitHub: firmware + udhëzimet më të shkurtra + diagramë + shembuj.

Tani të gjithë mund të ndezin ESP-07 dhe të luajnë vetë me firmware. Nëse dikush me të vërtetë dëshiron saktësisht të njëjtën tabelë si në foto, atëherë unë kam disa prej tyre. Shkruani me email [email mbrojtur]. Por, siç thoshte i paharruari Ogurtsov: "Unë nuk jam përgjegjës për asgjë!"

Pra, le të shkojmë te pika: çfarë është "nyjë" (nyja) dhe "ngjarje"? Si ekzekutohet programi?

Si zakonisht, le të fillojmë me radhë: duke shkarkuar programin.

Si ngarkohet programi

Le të fillojmë me atë që ndodh kur shtypim një buton Ngarko në redaktor ElDraw dhe programi ynë qark, i përbërë nga katrorë të bukur, fluturon në pajisje.

Së pari, bazuar në diagramin që kemi vizatuar, ndërtohet përshkrimi i tij në formë teksti.
Së dyti, kontrollon nëse të gjitha hyrjet e nyjeve janë të lidhura me daljet. Nuk duhet të ketë hyrje "të varura". Nëse zbulohet një hyrje e tillë, qarku nuk do të ngarkohet në ShioTiny dhe redaktori do të shfaqë një paralajmërim përkatës.

Nëse gjithçka shkoi mirë, redaktori dërgon një përshkrim teksti të qarkut një nga një nyje tek ShioTiny. Sigurisht, qarku ekzistues nga ShioTiny së pari hiqet. Përshkrimi i tekstit që rezulton ruhet në memorien FLASH.

Nga rruga, nëse doni të hiqni një qark nga një pajisje, atëherë thjesht ngarkoni një qark bosh në të (që nuk përmban një element të vetëm nyje).

Pasi i gjithë programi i qarkut të ngarkohet në ShioTiny PLC, ai fillon të "ekzekutohet". Çfarë do të thotë?

Vini re se proceset për ngarkimin e një qarku nga memoria FLASH kur ndizet energjia dhe kur merrni një qark nga redaktori janë identike.

Së pari, objektet e nyjeve krijohen bazuar në përshkrimin e tyre.
Pastaj bëhen lidhjet midis nyjeve. Kjo do të thotë, gjenerohen lidhjet e outputeve me inputet dhe inputet me outputet.

Dhe vetëm pas gjithë kësaj fillon cikli kryesor i ekzekutimit të programit.

Kam shkruar për një kohë të gjatë, por i gjithë procesi - nga "ngarkimi" i qarkut nga memoria FLASH deri në fillimin e ciklit kryesor - merr një pjesë të sekondës për një qark prej 60-80 nyjesh.

Si funksionon cikli kryesor? Shume e thjeshte. Së pari ai pret shfaqjen Zhvillimet në një nyje, pastaj përpunon atë ngjarje. Dhe kështu me radhë pafund. Epo, ose derisa të ngarkojnë një skemë të re në ShioTiny.

Disa herë tashmë kam përmendur gjëra të tilla si Zhvillimet, nyjet и komunikim. Por çfarë është kjo nga pikëpamja e softuerit? Ne do të flasim për këtë sot.

Nyjet, lidhjet dhe ngjarjet

Vetëm shikoni shembujt e programeve qarkore për ShioTinypër të kuptuar se diagrami përbëhet vetëm nga dy entitete - nyje (ose elemente) dhe lidhjet ndërmjet tyre.

nyjë, por po ose element qarku është një paraqitje virtuale e disave aktivitet mbi të dhënat. Ky mund të jetë një veprim aritmetik, një veprim logjik ose ndonjë veprim që na vjen në mendje. Gjëja kryesore është që nyja të ketë një hyrje dhe një dalje.

Të dhëna - ky është vendi ku nyja merr të dhëna. Imazhet hyrëse janë pika që janë gjithmonë në anën e majtë të nyjës.

Prodhim - ky është vendi ku merret rezultati i funksionimit të nyjës. Imazhet e daljes janë pika që ndodhen gjithmonë në anën e djathtë të nyjës.

Disa nyje nuk kanë hyrje. Nyje të tilla gjenerojnë rezultatin nga brenda. Për shembull, një nyje konstante ose një nyje sensori: ata nuk kanë nevojë për të dhëna nga nyjet e tjera për të raportuar rezultatin.

Nyjet e tjera, përkundrazi, nuk kanë dalje. Këto janë nyje që shfaqin, për shembull, aktivizues (rele ose diçka të ngjashme). Ata pranojnë të dhëna, por nuk gjenerojnë një rezultat llogaritës që është i disponueshëm për nyjet e tjera.

Përveç kësaj, ekziston edhe një nyje unike e komenteve. Nuk bën asgjë, nuk ka hyrje ose dalje. Qëllimi i tij është të jetë një shpjegim në diagram.

Cfare ndodhi "ngjarje"? ngjarje është shfaqja e të dhënave të reja në çdo nyje. Për shembull, ngjarjet përfshijnë: ndryshimin e gjendjes së hyrjes (nyja të dhëna), duke marrë të dhëna nga një pajisje tjetër (nyje MQTT и UDP), skadimi i një periudhe të caktuar kohore (nyjet Kohëmatës и vonesë) dhe kështu me radhë.

Për çfarë janë ngjarjet? Po, për të përcaktuar se në cilën nyje janë shfaqur të dhëna të reja dhe gjendjet se cilat nyje duhet të ndryshohen në lidhje me marrjen e të dhënave të reja. Ngjarja, si të thuash, "kalon" përgjatë zinxhirit të nyjeve derisa të anashkalojë të gjitha nyjet, gjendja e të cilave duhet të kontrollohet dhe ndryshohet.

Të gjitha nyjet mund të ndahen në dy kategori.
Le të thërrasim nyjet që mund të gjenerojnë ngjarje "nyjet aktive'.
Ne do të quajmë nyje që nuk mund të gjenerojnë ngjarje "nyjet pasive'.

Kur një nyje gjeneron një ngjarje (d.m.th., të dhënat e reja shfaqen në daljen e saj), atëherë në rastin e përgjithshëm ndryshon gjendja e të gjithë zinxhirit të nyjeve të lidhura me daljen e nyjes së gjeneratorit të ngjarjeve.

Për ta bërë të qartë, merrni parasysh shembullin në figurë.

ShioTiny: nyjet, lidhjet dhe ngjarjet ose veçoritë e programeve të vizatimit

Nyjet aktive këtu janë Input1, Input2 dhe Input3. Nyjet e mbetura janë pasive. Le të shqyrtojmë se çfarë ndodh kur mbyllet një ose një tjetër hyrje. Për lehtësi, rezultatet përmblidhen në një tabelë.

ShioTiny: nyjet, lidhjet dhe ngjarjet ose veçoritë e programeve të vizatimit

Siç mund ta shihni, kur ndodh një ngjarje, ndërtohet një zinxhir nga nyja burimore e ngjarjes deri në nyjen fundore. Gjendja e atyre nyjeve që nuk bien në zinxhir nuk ndryshon.

Shtrohet një pyetje legjitime: çfarë do të ndodhë nëse dy apo edhe disa ngjarje ndodhin njëkohësisht?

Si një dashnor i veprës së Gleb Anfilov, unë jam i tunduar të dërgoj një pyetës kureshtar në librin e tij "Ik nga surpriza". Kjo është një "teori e relativitetit për të vegjlit", e cila shpjegon mirë se çfarë do të thotë "i njëkohshëm" dhe si të jetosh me të.

Por praktikisht gjithçka është shumë më e thjeshtë: kur ndodhin dy ose edhe disa ngjarje, të gjithë zinxhirët nga çdo burim ngjarjesh ndërtohen dhe përpunohen në mënyrë sekuenciale me radhë, dhe nuk ndodhin mrekulli.

Pyetja tjetër plotësisht legjitime nga një lexues kureshtar është se çfarë do të ndodhë nëse nyjet lidhen në një unazë? Ose, siç thonë ata midis këtyre djemve tuaj të zgjuar, prezantoni reagimet. Kjo do të thotë, lidhni daljen e njërës prej nyjeve me hyrjen e nyjes së mëparshme në mënyrë që gjendja e daljes së kësaj nyje të ndikojë në gjendjen e hyrjes së saj. Redaktori nuk do t'ju lejojë të lidhni drejtpërdrejt daljen e një nyje me hyrjen e saj. ElDraw. Por në mënyrë indirekte, si në figurën më poshtë, kjo mund të bëhet.

Pra, çfarë do të ndodhë në këtë rast? Përgjigja do të jetë shumë "e caktuar": në varësi të cilat nyje. Le të shohim shembullin në figurë.

ShioTiny: nyjet, lidhjet dhe ngjarjet ose veçoritë e programeve të vizatimit

Kur kontaktet hyrëse të Input1 janë të hapura, hyrja e sipërme e nyjës A është 0. Dalja e nyjës A është gjithashtu 0. Dalja e nyjës B është 1. Dhe, së fundi, hyrja e poshtme e nyjës A është 1. Gjithçka është qartë. Dhe për ata që nuk janë të qartë, shikoni më poshtë për një përshkrim se si funksionojnë nyjet "AND" dhe "NOT".

Tani mbyllim kontaktet e hyrjes Input1, domethënë aplikojmë një në hyrjen e sipërme të nyjës A. Ata që janë të njohur me elektronikën e dinë se në fakt do të marrim një qark gjenerator klasik duke përdorur elementë logjikë. Dhe në teori, një qark i tillë duhet të prodhojë pafundësisht sekuencën 1-0-1-0-1-0… në daljen e elementeve A dhe B. dhe 0-1-0-1-0-1-…. Në fund të fundit, ngjarja duhet të ndryshojë vazhdimisht gjendjen e nyjeve A dhe B, duke ecur në një rreth 2-3-2-3-...!

Por në realitet kjo nuk ndodh. Qarku do të bjerë në një gjendje të rastësishme - ose stafeta do të mbetet e ndezur ose e fikur, ose ndoshta paksa e ndezur dhe e fikur disa herë me radhë. E gjitha varet nga moti në polin jugor të Marsit. Dhe kjo është arsyeja pse kjo ndodh.

Një ngjarje nga nyja Input1 ndryshon gjendjen e nyjes A, pastaj nyjes B, e kështu me radhë në një rreth disa herë. Programi zbulon "looping" e ngjarjes dhe ndalon me forcë këtë karnaval. Pas kësaj, ndryshimet në gjendjen e nyjeve A dhe B bllokohen derisa të ndodhë një ngjarje e re. Momenti në të cilin programi vendos "ndalo së rrotulluari në rrathë!" - në përgjithësi, varet nga shumë faktorë dhe mund të konsiderohet i rastësishëm.

Kini kujdes kur lidhni nyjet në një unazë - efektet nuk do të jenë gjithmonë të dukshme! Keni një ide të mirë se çfarë dhe pse po bëni!

A është ende e mundur të ndërtojmë një gjenerator në nyjet e disponueshme për ne? Po ti mundesh! Por kjo kërkon një nyje që mund të gjenerojë vetë ngjarje. Dhe ka një nyje të tillë - kjo është "vija e vonesës". Le të shohim se si funksionon një gjenerator me një periudhë prej 6 sekondash në figurën më poshtë.

ShioTiny: nyjet, lidhjet dhe ngjarjet ose veçoritë e programeve të vizatimit

Elementi kryesor i gjeneratorit është nyja A - linja e vonesës. Nëse ndryshoni gjendjen e hyrjes së linjës së vonesës nga 0 në 1, atëherë 1 nuk do të shfaqet menjëherë në dalje, por vetëm pas një kohe të caktuar. Në rastin tonë është 3 sekonda. Në të njëjtën mënyrë, nëse ndryshoni gjendjen e hyrjes së linjës së vonesës nga 1 në 0, atëherë 0 në dalje do të shfaqet pas të njëjtave 3 sekonda. Koha e vonesës vendoset në të dhjetat e sekondës. Kjo do të thotë, vlera 30 do të thotë 3 sekonda.

Një veçori e veçantë e linjës së vonesës është se ajo gjeneron një ngjarje pasi të ketë skaduar koha e vonesës.

Le të supozojmë se fillimisht dalja e linjës së vonesës ishte 0. Pasi kalon nyjen B - inverterin - kjo 0 kthehet në 1 dhe shkon në hyrje të linjës së vonesës. Asgjë nuk ndodh menjëherë. Në daljen e linjës së vonesës, ajo do të mbetet 0, por do të fillojë numërimi mbrapsht i kohës së vonesës. Kalojnë 3 sekonda. Dhe pastaj linja e vonesës gjeneron një ngjarje. Në daljen e tij shfaqet 1. Kjo njësi, pasi kalon në nyjen B - inverter - kthehet në 0 dhe shkon në hyrje të linjës së vonesës. Kalojnë edhe 3 sekonda... dhe procesi përsëritet. Domethënë, çdo 3 sekonda gjendja e daljes së linjës së vonesës ndryshon nga 0 në 1 dhe më pas nga 1 në 0. Releja klikon. Gjeneratori është duke punuar. Periudha e pulsit është 6 sekonda (3 sekonda në daljen zero dhe 3 sekonda në atë të daljes).

Por, në qarqet reale, zakonisht nuk ka nevojë të përdoret ky shembull. Ekzistojnë nyje të veçanta të kohëmatësit që në mënyrë të përsosur dhe pa ndihmë të jashtme gjenerojnë një sekuencë pulsesh me një periudhë të caktuar. Kohëzgjatja e "zeros" dhe "një" në këto impulse është e barabartë me gjysmën e periudhës.

Për të vendosur veprime periodike, përdorni nyjet e kohëmatësit.

Unë vërej se sinjale të tilla dixhitale, ku kohëzgjatja e "zero" dhe "një" janë të barabarta, quhen "meander".

Shpresoj ta kem sqaruar pak pyetjen se si përhapen ngjarjet midis nyjeve dhe çfarë nuk duhet bërë?

Përfundim dhe referenca

Artikulli doli të jetë i shkurtër, por ky artikull është një përgjigje për pyetjet që kanë lindur në lidhje me nyjet dhe ngjarjet.

Ndërsa firmware zhvillohet dhe shfaqen shembuj të rinj, unë do të shkruaj se si të programoj ShioTiny artikuj të vegjël për aq kohë sa do të jenë interesante për njerëzit.

Si më parë, diagrami, firmware, shembuj, përshkrimi i komponentëve dhe gjithçka pjesa tjetër është këtu.

Pyetje, sugjerime, kritika - shkoni këtu: [email mbrojtur]

Burimi: www.habr.com

Shto një koment