ShIoTiny: nodi, viunganisho na matukio au vipengele vya programu za kuchora

ShIoTiny: nodi, viunganisho na matukio au vipengele vya programu za kuchora

Pointi kuu au makala hii inahusu nini

Mada ya kifungu ni programu ya kuona ya PLC ShiioTiny kwa nyumba nzuri iliyoelezewa hapa: ShIoTiny: otomatiki ndogo, Mtandao wa vitu au "miezi sita kabla ya likizo".

Kwa ufupi sana dhana kama vile nodes, mawasiliano, maendeleo, pamoja na vipengele vya kupakia na kutekeleza programu ya kuona ESP8266, ambayo ni msingi wa PLC ShiioTiny.

Utangulizi au maswali kadhaa ya shirika

Katika makala iliyotangulia kuhusu maendeleo yangu, nilitoa muhtasari mfupi wa uwezo wa mtawala ShiioTiny.

Cha ajabu, umma ulionyesha kupendezwa sana na kuniuliza maswali mengi. Marafiki wengine hata mara moja walijitolea kununua kidhibiti kutoka kwangu. Hapana, sipingani na kupata pesa kidogo, lakini dhamiri yangu hainiruhusu kuuza kitu ambacho bado ni kichafu sana katika suala la programu.

Kwa hivyo, nilichapisha faili za firmware na mchoro wa kifaa kwenye GitHub: firmware + maelekezo mafupi + mchoro + mifano.

Sasa kila mtu anaweza kuwasha ESP-07 na kucheza na firmware yenyewe. Ikiwa kuna mtu anataka bodi sawa na kwenye picha, basi nina kadhaa kati yao. Andika kwa barua pepe [barua pepe inalindwa]. Lakini, kama Ogurtsov asiyesahaulika alivyokuwa akisema: "Siwajibiki kwa chochote!"

Kwa hivyo, wacha tufike kwa uhakika: ni nini "fundo"(nodi) na"tukio"? Mpango huo unatekelezwaje?

Kama kawaida, wacha tuanze kwa mpangilio: kwa kupakua programu.

Jinsi programu inavyopakiwa

Wacha tuanze na kile kinachotokea tunapobonyeza kitufe Upload katika mhariri ElDraw na mpango wetu wa mzunguko, unaojumuisha mraba mzuri, huruka kwenye kifaa.

Kwanza, kulingana na mchoro ambao tumechora, maelezo yake katika fomu ya maandishi yanajengwa.
Pili, inakagua ikiwa pembejeo zote za nodi zimeunganishwa kwa matokeo. Haipaswi kuwa na viingilio vya "kunyongwa". Ikiwa pembejeo kama hiyo itagunduliwa, mzunguko hautapakiwa kwenye ShIoTiny, na mhariri ataonyesha onyo linalolingana.

Ikiwa kila kitu kilikwenda vizuri, mhariri hutuma maelezo ya maandishi ya nodi moja ya mzunguko kwa wakati mmoja kwa ShIoTiny. Bila shaka, mzunguko uliopo kutoka kwa ShIoTiny huondolewa kwanza. Maelezo ya maandishi yanayotokana yanahifadhiwa kwenye kumbukumbu ya FLASH.

Kwa njia, ikiwa unataka kuondoa mzunguko kutoka kwa kifaa, basi tu pakia mzunguko tupu ndani yake (usio na kipengele kimoja cha node).

Mara tu mpango mzima wa mzunguko unapopakiwa kwenye ShIoTiny PLC, huanza "kutekeleza". Ina maana gani?

Kumbuka kuwa michakato ya kupakia mzunguko kutoka kwa kumbukumbu ya FLASH wakati nguvu imewashwa na wakati wa kupokea mzunguko kutoka kwa mhariri ni sawa.

Kwanza, vitu vya nodi huundwa kulingana na maelezo yao.
Kisha viunganisho vinafanywa kati ya nodi. Hiyo ni, viungo vya matokeo kwa pembejeo na pembejeo kwa matokeo hutolewa.

Na tu baada ya haya yote mzunguko wa utekelezaji wa programu kuu huanza.

Niliandika kwa muda mrefu, lakini mchakato mzima - kutoka "kupakia" mzunguko kutoka kwa kumbukumbu ya FLASH hadi kuanza mzunguko mkuu - inachukua sehemu ya pili kwa mzunguko wa nodi 60-80.

Je, kitanzi kikuu hufanyaje kazi? Rahisi sana. Kwanza anasubiri kuibuka maendeleo kwenye nodi fulani, kisha huchakata tukio hilo. Na kadhalika bila mwisho. Kweli, au hadi wapakie mpango mpya kwa ShIoTiny.

Mara kadhaa tayari nimetaja vitu kama maendeleo, nodes ΠΈ mawasiliano. Lakini hii ni nini kutoka kwa mtazamo wa programu? Tutazungumza juu ya hii leo.

Nodi, miunganisho na matukio

Angalia tu mifano ya programu za mzunguko kwa ShiioTinykuelewa kwamba mchoro una vyombo viwili tu - nodes (au vipengele) na uhusiano kati yao.

Jua, lakini ndiyo au kipengele cha mzunguko ni uwakilishi pepe wa baadhi shughuli juu ya data. Hii inaweza kuwa operesheni ya hesabu, operesheni ya kimantiki, au operesheni yoyote inayokuja akilini mwetu. Jambo kuu ni kwamba node ina mlango na exit.

Pembejeo - hii ndio mahali ambapo node inapokea data. Picha za pembejeo ni pointi ambazo daima ziko upande wa kushoto wa nodi.

Pato - hapa ndio mahali ambapo matokeo ya operesheni ya nodi hutolewa. Picha za pato ni pointi ambazo daima ziko upande wa kulia wa nodi.

Baadhi ya nodi hazina pembejeo. Nodi kama hizo hutoa matokeo ndani. Kwa mfano, node ya mara kwa mara au node ya sensor: hawana haja ya data kutoka kwa nodes nyingine ili kuripoti matokeo.

Nodes nyingine, kinyume chake, hazina matokeo. Hizi ni nodes zinazoonyesha, kwa mfano, actuators (relays au kitu sawa). Wanakubali data lakini hawatoi matokeo ya hesabu ambayo yanapatikana kwa nodi zingine.

Kwa kuongeza, pia kuna node ya kipekee ya maoni. Haifanyi chochote, haina pembejeo au matokeo. Kusudi lake ni kuwa maelezo kwenye mchoro.

Nini kilitokea "tukio? Tukio ni kuibuka kwa data mpya katika nodi yoyote. Kwa mfano, matukio ni pamoja na: mabadiliko katika hali ya uingizaji (node Pembejeo), kupokea data kutoka kwa kifaa kingine (nodi MQTT ΠΈ UDP), kumalizika kwa muda maalum wa muda (nodi Timer ΠΈ Uchelewesha) Nakadhalika.

Matukio ni ya nini? Ndio, ili kuamua ni data gani mpya imetokea na majimbo ambayo nodi zinahitaji kubadilishwa kuhusiana na upokeaji wa data mpya. Tukio hilo, kama ilivyokuwa, "hupita" kando ya mlolongo wa nodi hadi inapita nodi zote ambazo hali yake inahitaji kuangaliwa na kubadilishwa.

Nodes zote zinaweza kugawanywa katika makundi mawili.
Wacha tuite nodi ambazo zinaweza kutoa matukio "nodi zinazofanya kazi'.
Tutaita nodi ambazo haziwezi kutoa matukio "nodi za passiv'.

Wakati nodi inapozalisha tukio (hiyo ni, data mpya inaonekana kwenye pato lake), basi katika hali ya jumla hali ya mlolongo mzima wa nodi zilizounganishwa na matokeo ya nodi ya jenereta ya tukio hubadilika.

Ili kuifanya iwe wazi, fikiria mfano katika takwimu.

ShIoTiny: nodi, viunganisho na matukio au vipengele vya programu za kuchora

Nodi zinazotumika hapa ni Input1, Input2 na Input3. Nodi zilizobaki ni passiv. Wacha tuchunguze kile kinachotokea wakati pembejeo moja au nyingine imefungwa. Kwa urahisi, matokeo ni muhtasari katika jedwali.

ShIoTiny: nodi, viunganisho na matukio au vipengele vya programu za kuchora

Kama unavyoona, tukio linapotokea, mnyororo hujengwa kutoka nodi ya chanzo cha tukio hadi nodi ya mwisho. Hali ya nodes hizo ambazo hazianguka kwenye mnyororo hazibadilika.

Swali la halali linatokea: nini kitatokea ikiwa matukio mawili au hata kadhaa yanatokea wakati huo huo?

Kama mpenzi wa kazi ya Gleb Anfilov, ninajaribiwa kutuma mtu anayeuliza swali kwa kitabu chake "Escape from Surprise." Hii ni "nadharia ya uhusiano kwa watoto wadogo", ambayo inaelezea vizuri maana ya "wakati huo huo" na jinsi ya kuishi nayo.

Lakini kivitendo kila kitu ni rahisi zaidi: wakati matukio mawili au hata kadhaa hutokea, minyororo yote kutoka kwa kila chanzo cha tukio hujengwa kwa sequentially na kusindika kwa zamu, na hakuna miujiza hutokea.

Swali linalofuata la halali kabisa kutoka kwa msomaji mwenye udadisi ni nini kitatokea ikiwa nodi zimeunganishwa kwenye pete? Au, kama wanasema kati ya watu wako hawa wenye akili, anzisha maoni. Hiyo ni, kuunganisha pato la moja ya nodes kwa pembejeo ya node ya awali ili hali ya pato ya node hii inathiri hali ya pembejeo yake. Mhariri hautakuwezesha kuunganisha moja kwa moja pato la nodi kwa pembejeo yake. ElDraw. Lakini kwa njia isiyo ya moja kwa moja, kama ilivyo kwenye takwimu hapa chini, hii inaweza kufanywa.

Kwa hivyo nini kitatokea katika kesi hii? Jibu litakuwa "dhahiri" sana: kulingana na nodi gani. Hebu tuangalie mfano katika takwimu.

ShIoTiny: nodi, viunganisho na matukio au vipengele vya programu za kuchora

Wakati mawasiliano ya pembejeo ya Input1 yamefunguliwa, pembejeo ya juu ya node A ni 0. Pato la node A pia ni 0. Pato la node B ni 1. Na, hatimaye, pembejeo ya chini ya node A ni 1. Kila kitu ni. wazi. Na kwa wale ambao hawako wazi, angalia hapa chini kwa maelezo ya jinsi nodi za "NA" na "SI" zinavyofanya kazi.

Sasa tunafunga anwani za pembejeo ya Input1, ambayo ni, tunaweka moja kwa pembejeo ya juu ya nodi A. Wale wanaofahamu umeme wanajua kwamba kwa kweli tutapata mzunguko wa jenereta ya classic kwa kutumia vipengele vya mantiki. Na kwa nadharia, mzunguko kama huo unapaswa kutoa mlolongo 1-0-1-0-1-0 ... kwa matokeo ya vitu A na B. na 0-1-0-1-0-1-…. Baada ya yote, tukio lazima libadilishe mara kwa mara hali ya nodes A na B, inayoendesha kwenye mduara 2-3-2-3-...!

Lakini kwa kweli hii haifanyiki. Mzunguko utaanguka katika hali ya nasibu - au relay itasalia kuwashwa au kuzimwa, au labda buzz kidogo iwashwe na kuzimwa mara kadhaa mfululizo. Yote inategemea hali ya hewa kwenye ncha ya kusini ya Mars. Na ndiyo sababu hii hutokea.

Tukio kutoka kwa nodi Input1 hubadilisha hali ya nodi A, kisha nodi B, na kadhalika katika mduara mara kadhaa. Mpango huo hutambua "kuruka" kwa tukio na kusimamisha sherehe hii kwa lazima. Baada ya hayo, mabadiliko katika hali ya nodes A na B yanazuiwa hadi tukio jipya linatokea. Wakati ambapo programu itaamua "acha kusota kwenye miduara!" - kwa ujumla, inategemea mambo mengi na inaweza kuchukuliwa kuwa random.

Kuwa mwangalifu wakati wa kuunganisha vifungo kwenye pete - athari hazitakuwa wazi kila wakati! Kuwa na wazo nzuri la nini na kwa nini unafanya!

Je, bado inawezekana kujenga jenereta kwenye nodes zinazopatikana kwetu? Ndio unaweza! Lakini hii inahitaji nodi ambayo inaweza kutoa matukio yenyewe. Na kuna nodi kama hiyo - hii ndio "mstari wa kuchelewesha". Hebu tuone jinsi jenereta yenye muda wa sekunde 6 inavyofanya kazi kwenye takwimu hapa chini.

ShIoTiny: nodi, viunganisho na matukio au vipengele vya programu za kuchora

Kipengele muhimu cha jenereta ni node A - mstari wa kuchelewa. Ukibadilisha hali ya uingizaji wa mstari wa kuchelewa kutoka 0 hadi 1, basi 1 haitaonekana kwenye pato mara moja, lakini tu baada ya muda maalum. Kwa upande wetu ni sekunde 3. Kwa njia hiyo hiyo, ukibadilisha hali ya uingizaji wa mstari wa kuchelewa kutoka 1 hadi 0, basi 0 kwenye pato itaonekana baada ya sekunde 3 sawa. Muda wa kuchelewa umewekwa katika sehemu ya kumi ya sekunde. Hiyo ni, thamani 30 inamaanisha sekunde 3.

Kipengele maalum cha laini ya kuchelewa ni kwamba hutoa tukio baada ya muda wa kuchelewa kuisha.

Hebu tufikiri kwamba awali pato la mstari wa kuchelewa ilikuwa 0. Baada ya kupitisha node B - inverter - hii 0 inageuka kuwa 1 na inakwenda kwenye pembejeo ya mstari wa kuchelewa. Hakuna kinachotokea mara moja. Katika matokeo ya laini ya kuchelewesha, itasalia 0, lakini siku iliyosalia ya muda wa kuchelewa itaanza. Sekunde 3 kupita. Na kisha mstari wa kuchelewa hutoa tukio. Katika pato lake inaonekana 1. Kitengo hiki, baada ya kupitia node B - inverter - inageuka kuwa 0 na huenda kwenye pembejeo ya mstari wa kuchelewa. Sekunde nyingine 3 hupita ... na mchakato unarudia. Hiyo ni, kila sekunde 3 hali ya pato la mstari wa kuchelewa hubadilika kutoka 0 hadi 1 na kisha kutoka 1 hadi 0. Relay kubofya. Jenereta inafanya kazi. Kipindi cha mapigo ni sekunde 6 (sekunde 3 kwenye pato la sifuri na sekunde 3 kwenye pato moja).

Lakini, katika mizunguko halisi, kwa kawaida hakuna haja ya kutumia mfano huu. Kuna nodi maalum za timer ambazo kikamilifu na bila msaada wa nje hutoa mlolongo wa mapigo na kipindi fulani. Muda wa "sifuri" na "moja" katika mapigo haya ni sawa na nusu ya kipindi.

Ili kuweka vitendo vya mara kwa mara, tumia nodi za kipima muda.

Ninaona kwamba ishara hizo za digital, ambapo muda wa "sifuri" na "moja" ni sawa, huitwa "meander".

Natumai nimefafanua swali kidogo juu ya jinsi matukio yanaenezwa kati ya nodi na nini cha kufanya?

Hitimisho na marejeleo

Nakala hiyo iligeuka kuwa fupi, lakini nakala hii ni jibu la maswali ambayo yametokea kuhusu nodi na matukio.

Wakati firmware inakua na mifano mpya itaonekana, nitaandika juu ya jinsi ya kupanga ShiioTiny makala ndogo mradi tu itakuwa ya kuvutia kwa watu.

Kama hapo awali, mchoro, firmware, mifano, maelezo ya vipengele na kila kitu iliyobaki iko hapa.

Maswali, mapendekezo, ukosoaji - nenda hapa: [barua pepe inalindwa]

Chanzo: mapenzi.com

Kuongeza maoni