ShIoTiny: Mga Node, Link, at Event o Features ng Drawing Programs

ShIoTiny: Mga Node, Link, at Event o Features ng Drawing Programs

Mga pangunahing punto o kung tungkol saan ang artikulong ito

Ang paksa ng artikulo ay visual PLC programming ShioTiny para sa matalinong tahanan na inilarawan dito: ShIoTiny: maliit na automation, Internet ng mga bagay o "anim na buwan bago magbakasyon".

Napakadali mga konsepto tulad ng buhol, связи, kaunlaran, pati na rin ang mga feature ng paglo-load at pagsasagawa ng visual program sa ESP8266, na siyang batayan ng PLC ShioTiny.

Panimula o ilang mga katanungan sa organisasyon

Sa nakaraang artikulo tungkol sa aking pag-unlad, nagbigay ako ng maikling pangkalahatang-ideya ng mga kakayahan ng controller ShioTiny.

Kakatwa, ang publiko ay nagpakita ng matinding interes at nagtanong sa akin ng maraming tanong. Ang ilang mga kaibigan ay nag-alok agad na bumili ng isang controller mula sa akin. Hindi, hindi ako tutol na kumita ng kaunting pera, ngunit hindi ako pinapayagan ng aking konsensya na magbenta ng isang bagay na napaka-krudo pa rin sa mga tuntunin ng software.

Samakatuwid, nai-post ko ang mga binary ng firmware at diagram ng device sa GitHub: firmware + pinakamaikling tagubilin + diagram + mga halimbawa.

Ngayon lahat ay maaaring mag-flash ng ESP-07 at maglaro sa firmware mismo. Kung talagang gusto ng sinuman ang eksaktong parehong board tulad ng nasa larawan, mayroon akong ilan sa kanila. Sumulat sa pamamagitan ng email [protektado ng email]. Ngunit, tulad ng sinabi ng hindi malilimutang Ogurtsov: "Wala akong pananagutan sa anuman!"

Kaya, pumunta tayo sa punto: ano ang "buhol"(node) at "pangyayari"? Paano isinasagawa ang programa?

Gaya ng dati, magsimula tayo sa pagkakasunud-sunod: sa pamamagitan ng pag-download ng programa.

Paano na-load ang programa

Magsimula tayo sa kung ano ang mangyayari kapag pinindot natin ang isang pindutan Mag-upload sa editor ElDraw at ang aming circuit-program, na binubuo ng magagandang parisukat, ay lilipad sa device.

Una, batay sa diagram na aming iginuhit, ang paglalarawan nito sa anyo ng teksto ay binuo.
Pangalawa, sinusuri nito kung ang lahat ng mga input ng node ay konektado sa mga output. Dapat ay walang "nakabitin" na pasukan. Kung matukoy ang ganoong input, hindi mai-load ang circuit sa ShIoTiny, at magpapakita ang editor ng kaukulang babala.

Kung naging maayos ang lahat, ang editor ay nagpapadala ng isang text na paglalarawan ng circuit nang paisa-isang node sa ShIoTiny. Siyempre, ang umiiral na circuit mula sa ShIoTiny ay unang inalis. Ang resultang paglalarawan ng teksto ay naka-imbak sa FLASH memory.

Sa pamamagitan ng paraan, kung nais mong alisin ang isang circuit mula sa isang aparato, pagkatapos ay i-load lamang ang isang walang laman na circuit dito (hindi naglalaman ng isang solong elemento ng node).

Kapag na-load ang buong circuit program sa ShIoTiny PLC, magsisimula itong "isagawa". Ano ang ibig sabihin nito?

Tandaan na ang mga proseso para sa pag-load ng circuit mula sa FLASH memory kapag naka-on ang power at kapag tumatanggap ng circuit mula sa editor ay magkapareho.

Una, ang mga node na bagay ay nilikha batay sa kanilang paglalarawan.
Pagkatapos ang mga koneksyon ay ginawa sa pagitan ng mga node. Iyon ay, ang mga link ng mga output sa mga input at mga input sa mga output ay nabuo.

At pagkatapos lamang ng lahat ng ito magsisimula ang pangunahing siklo ng pagpapatupad ng programa.

Sumulat ako nang mahabang panahon, ngunit ang buong proseso - mula sa "paglo-load" ng circuit mula sa memorya ng FLASH hanggang sa pagsisimula ng pangunahing cycle - ay tumatagal ng isang bahagi ng isang segundo para sa isang circuit na 60-80 node.

Paano gumagana ang pangunahing loop? Napakasimple. Una niyang hinihintay ang paglitaw kaunlaran sa ilang node, pagkatapos ay iproseso ang kaganapang iyon. At iba pa nang walang katapusan. Well, o hanggang sa mag-upload sila ng bagong scheme sa ShIoTiny.

Ilang beses ko nang nabanggit ang mga bagay tulad kaunlaran, buhol и связи. Ngunit ano ito mula sa punto ng view ng software? Pag-uusapan natin ito ngayon.

Mga node, koneksyon at kaganapan

Tingnan lamang ang mga halimbawa ng mga programa ng circuit para sa ShioTinyupang maunawaan na ang diagram ay binubuo lamang ng dalawang entity - mga node (o mga elemento) at ang mga koneksyon sa pagitan ng mga ito.

Knot, pero oo o elemento ng circuit ay isang virtual na representasyon ng ilan mga pagkilos sa ibabaw ng datos. Ito ay maaaring isang aritmetika na operasyon, isang lohikal na operasyon, o anumang operasyon na pumapasok sa ating isipan. Ang pangunahing bagay ay ang node ay may pasukan at labasan.

pasukan - ito ang lugar kung saan tumatanggap ang node ng data. Ang mga input na imahe ay mga punto na palaging nasa kaliwang bahagi ng node.

Pagbubuhos - ito ang lugar kung saan kinukuha ang resulta ng operasyon ng node. Ang mga imahe ng output ay mga punto na palaging matatagpuan sa kanang bahagi ng node.

Ang ilang mga node ay walang mga input. Ang ganitong mga node ay bumubuo ng resulta sa loob. Halimbawa, isang pare-parehong node o isang sensor node: hindi nila kailangan ng data mula sa iba pang mga node upang iulat ang resulta.

Ang iba pang mga node, sa kabaligtaran, ay walang mga output. Ito ay mga node na nagpapakita, halimbawa, mga actuator (mga relay o katulad nito). Tumatanggap sila ng data ngunit hindi bumubuo ng resulta ng computational na available sa iba pang mga node.

Bilang karagdagan, mayroon ding natatanging node ng komento. Wala itong ginagawa, walang input o output. Ang layunin nito ay maging paliwanag sa diagram.

Ano "pangyayariΒ»? Kaganapan ay ang paglitaw ng bagong data sa anumang node. Halimbawa, ang mga kaganapan ay kinabibilangan ng: pagbabago sa estado ng pag-input (node input), pagtanggap ng data mula sa isa pang device (node MQTT ΠΈ UDP), pag-expire ng isang tinukoy na tagal ng panahon (node Hronometrahisto ΠΈ Pagkaantala) at iba pa.

Para saan ang mga kaganapan? Oo, upang matukoy kung aling node ang bagong data na lumitaw at ang mga estado kung aling mga node ang kailangang baguhin kaugnay ng pagtanggap ng bagong data. Ang kaganapan, kumbaga, ay "pumapasa" sa kahabaan ng kadena ng mga node hanggang sa malagpasan nito ang lahat ng mga node na ang estado ay kailangang suriin at baguhin.

Ang lahat ng mga node ay maaaring nahahati sa dalawang kategorya.
Tawagan natin ang mga node na maaaring makabuo ng mga kaganapan "mga aktibong node'.
Tatawagan namin ang mga node na hindi makabuo ng mga kaganapan "mga passive node'.

Kapag ang isang node ay bumubuo ng isang kaganapan (iyon ay, ang bagong data ay lilitaw sa output nito), pagkatapos ay sa pangkalahatang kaso ang estado ng buong kadena ng mga node na konektado sa output ng kaganapan generator node ay nagbabago.

Upang maging malinaw, isaalang-alang ang halimbawa sa figure.

ShIoTiny: Mga Node, Link, at Event o Features ng Drawing Programs

Ang mga aktibong node dito ay Input1, Input2 at Input3. Ang natitirang mga node ay pasibo. Isaalang-alang natin kung ano ang mangyayari kapag ang isa o isa pang input ay sarado. Para sa kaginhawahan, ang mga resulta ay ibinubuod sa isang talahanayan.

ShIoTiny: Mga Node, Link, at Event o Features ng Drawing Programs

Gaya ng nakikita mo, kapag naganap ang isang kaganapan, binubuo ang isang chain mula sa pinagmulang node ng kaganapan hanggang sa dulong node. Ang estado ng mga node na hindi nahuhulog sa kadena ay hindi nagbabago.

Ang isang lehitimong tanong ay bumangon: ano ang mangyayari kung dalawa o kahit ilang mga kaganapan ang nangyari nang sabay-sabay?

Bilang isang mahilig sa gawain ni Gleb Anfilov, natutukso akong magpadala ng isang mausisa na nagtatanong sa kanyang aklat na "Escape from Surprise." Ito ay isang "teorya ng relativity para sa mga maliliit", na nagpapaliwanag nang mabuti kung ano ang ibig sabihin ng "sabay-sabay" at kung paano mamuhay kasama nito.

Ngunit halos lahat ay mas simple: kapag nangyari ang dalawa o kahit ilang mga kaganapan, ang lahat ng mga kadena mula sa bawat pinagmulan ng kaganapan ay sunud-sunod na binuo at pinoproseso, at walang mga himala na nagaganap.

Ang susunod na ganap na lehitimong tanong mula sa isang mausisa na mambabasa ay kung ano ang mangyayari kung ang mga node ay konektado sa isang singsing? O, gaya ng sinasabi nila sa mga matatalinong lalaki na ito, magpakilala ng feedback. Iyon ay, ikonekta ang output ng isa sa mga node sa input ng nakaraang node upang ang output state ng node na ito ay makakaapekto sa estado ng input nito. Hindi ka papayagan ng editor na direktang ikonekta ang output ng isang node sa input nito. ElDraw. Ngunit hindi direkta, tulad ng sa figure sa ibaba, ito ay maaaring gawin.

Kaya ano ang mangyayari sa kasong ito? Ang sagot ay magiging napaka "tiyak": depende sa kung aling mga node. Tingnan natin ang halimbawa sa figure.

ShIoTiny: Mga Node, Link, at Event o Features ng Drawing Programs

Kapag bukas ang input contact ng Input1, ang upper input ng node A ay 0. Ang output ng node A ay 0 din. Ang output ng node B ay 1. At, sa wakas, ang lower input ng node A ay 1. Lahat ay malinaw. At para sa mga hindi malinaw, tumingin sa ibaba para sa isang paglalarawan kung paano gumagana ang "AT" at "HINDI" na mga node.

Ngayon isinasara namin ang mga contact ng input ng Input1, iyon ay, inilalapat namin ang isa sa itaas na input ng node A. Alam ng mga pamilyar sa electronics na sa katunayan makakakuha tayo ng isang klasikong generator circuit gamit ang mga elemento ng lohika. At sa teorya, ang naturang circuit ay dapat na walang katapusang gumawa ng sequence na 1-0-1-0-1-0... sa output ng mga elemento A at B. at 0-1-0-1-0-1-…. Pagkatapos ng lahat, ang kaganapan ay dapat na patuloy na baguhin ang estado ng mga node A at B, tumatakbo sa isang bilog 2-3-2-3-...!

Ngunit sa katotohanan ay hindi ito nangyayari. Ang circuit ay mahuhulog sa isang random na estado - o ang relay ay mananatiling naka-on o naka-off, o maaaring bahagyang buzz on at off nang maraming beses sa isang hilera. Ang lahat ay nakasalalay sa lagay ng panahon sa south pole ng Mars. At iyon ang dahilan kung bakit ito nangyayari.

Ang isang kaganapan mula sa node Input1 ay nagbabago sa estado ng node A, pagkatapos ay node B, at iba pa sa isang bilog nang maraming beses. Nakita ng programa ang "looping" ng kaganapan at sapilitang itinigil ang karnabal na ito. Pagkatapos nito, ang mga pagbabago sa estado ng mga node A at B ay hinarangan hanggang sa magkaroon ng bagong kaganapan. Ang sandali kung kailan nagpasya ang programa na "itigil ang pag-ikot sa mga bilog!" - sa pangkalahatan, ito ay nakasalalay sa maraming mga kadahilanan at maaaring ituring na random.

Mag-ingat sa pagkonekta ng mga buhol sa isang singsing - ang mga epekto ay hindi palaging magiging halata! Magkaroon ng magandang ideya kung ano at bakit mo ginagawa!

Posible pa bang bumuo ng generator sa mga node na magagamit sa amin? Oo kaya mo! Ngunit ito ay nangangailangan ng isang node na maaaring bumuo ng mga kaganapan mismo. At mayroong ganoong node - ito ang "linya ng pagkaantala". Tingnan natin kung paano gumagana ang isang generator na may panahon na 6 na segundo sa figure sa ibaba.

ShIoTiny: Mga Node, Link, at Event o Features ng Drawing Programs

Ang pangunahing elemento ng generator ay node A - ang linya ng pagkaantala. Kung babaguhin mo ang estado ng pag-input ng linya ng pagkaantala mula 0 hanggang 1, hindi agad lilitaw ang 1 sa output, ngunit pagkatapos lamang ng isang tinukoy na oras. Sa aming kaso ito ay 3 segundo. Sa parehong paraan, kung babaguhin mo ang estado ng pag-input ng linya ng pagkaantala mula 1 hanggang 0, lilitaw ang 0 sa output pagkatapos ng parehong 3 segundo. Ang oras ng pagkaantala ay nakatakda sa ikasampu ng isang segundo. Ibig sabihin, ang halagang 30 ay nangangahulugang 3 segundo.

Ang isang espesyal na tampok ng linya ng pagkaantala ay ang pagbuo nito ng isang kaganapan pagkatapos mag-expire ang oras ng pagkaantala.

Ipagpalagay natin na sa una ang output ng linya ng pagkaantala ay 0. Matapos maipasa ang node B - ang inverter - ang 0 na ito ay nagiging 1 at napupunta sa input ng linya ng pagkaantala. Walang nangyayari kaagad. Sa output ng linya ng pagkaantala, mananatili itong 0, ngunit magsisimula ang countdown ng oras ng pagkaantala. Lumipas ang 3 segundo. At pagkatapos ay ang linya ng pagkaantala ay bumubuo ng isang kaganapan. Sa output nito ay lumilitaw ang 1. Ang yunit na ito, pagkatapos na dumaan sa node B - ang inverter - ay nagiging 0 at napupunta sa input ng linya ng pagkaantala. Lumipas ang isa pang 3 segundo... at umuulit ang proseso. Ibig sabihin, bawat 3 segundo ay nagbabago ang estado ng delay line na output mula 0 hanggang 1 at pagkatapos ay mula 1 hanggang 0. Nag-click ang relay. Gumagana ang generator. Ang tagal ng pulso ay 6 na segundo (3 segundo sa output zero at 3 segundo sa output isa).

Ngunit, sa mga totoong circuit, kadalasan ay hindi na kailangang gamitin ang halimbawang ito. May mga espesyal na timer node na perpekto at walang tulong sa labas upang makabuo ng isang pagkakasunud-sunod ng mga pulso sa isang tiyak na panahon. Ang tagal ng "zero" at "isa" sa mga pulso na ito ay katumbas ng kalahati ng panahon.

Upang magtakda ng mga pana-panahong pagkilos, gumamit ng mga timer node.

Pansinin ko na ang mga naturang digital na signal, kung saan ang tagal ng "zero" at "isa" ay pantay, ay tinatawag na "meander".

Umaasa ako na nilinaw ko nang kaunti ang tanong tungkol sa kung paano pinalaganap ang mga kaganapan sa pagitan ng mga node at kung ano ang hindi dapat gawin?

Konklusyon at mga sanggunian

Ang artikulo ay naging maikli, ngunit ang artikulong ito ay isang sagot sa mga tanong na lumitaw tungkol sa mga node at kaganapan.

Habang umuunlad ang firmware at lumilitaw ang mga bagong halimbawa, magsusulat ako tungkol sa kung paano mag-program ShioTiny maliliit na artikulo hangga't ito ay magiging kawili-wili sa mga tao.

Tulad ng dati, diagram, firmware, mga halimbawa, paglalarawan ng mga bahagi at lahat ang natitira ay narito.

Mga tanong, mungkahi, pagpuna - pumunta dito: [protektado ng email]

Pinagmulan: www.habr.com

Magdagdag ng komento