ShioTiny: zīmēŔanas programmu mezgli, savienojumi un notikumi vai funkcijas

ShioTiny: zīmēŔanas programmu mezgli, savienojumi un notikumi vai funkcijas

Galvenie punkti jeb par ko ir Ŕis raksts

Raksta tēma ir vizuālā PLC programmÄ“Å”ana ShioTiny Å”eit aprakstÄ«tajai viedajai mājai: ShioTiny: neliela automatizācija, lietu internets vai ā€œseÅ”us mēneÅ”us pirms atvaļinājumaā€.

Ļoti īsi tādi jēdzieni kā mezgli, saites, attīstība, kā arī vizuālās programmas ielādes un izpildes funkcijas ESP8266, kas ir PLC pamatā ShioTiny.

Ievads vai pāris organizatoriski jautājumi

IepriekŔējā rakstā par savu attÄ«stÄ«bu es sniedzu Ä«su pārskatu par kontroliera iespējām ShioTiny.

Savādi, bet sabiedrÄ«ba izrādÄ«ja diezgan lielu interesi un uzdeva man diezgan daudz jautājumu. Daži draugi pat uzreiz piedāvāja no manis nopirkt kontrolieri. Nē, es neesmu pret nelielas naudas pelnÄ«Å”anu, taču mana sirdsapziņa neļauj man pārdot kaut ko, kas programmatÅ«ras ziņā joprojām ir ļoti rupjÅ”.

Tāpēc es ievietoju programmaparatūras bināros failus un ierīces diagrammu GitHub: programmaparatūra + īsākās instrukcijas + diagramma + piemēri.

Tagad ikviens var mirgot ESP-07 un pats spēlēt ar programmaparatÅ«ru. Ja kāds ļoti vēlas tieÅ”i tādu dēli kā bildē, tad man ir vairāki. Rakstiet pa e-pastu [e-pasts aizsargāts]. Bet, kā mēdza teikt neaizmirstamais Ogurcovs: "Es ne par ko neatbildu!"

Tātad, ķersimies pie lietas: kas ir "mezgls" (mezgls) un "notikumu"? Kā programma tiek izpildīta?

Kā parasti, sāksim secībā: lejupielādējot programmu.

Kā programma tiek ielādēta

Sāksim ar to, kas notiek, nospiežot pogu Upload redaktorā ElDraw un mūsu ķēdes programma, kas sastāv no skaistiem kvadrātiem, ielido ierīcē.

Pirmkārt, pamatojoties uz mūsu uzzīmēto diagrammu, tiek izveidots tās apraksts teksta formā.
Otrkārt, tā pārbauda, ā€‹ā€‹vai visas mezgla ieejas ir savienotas ar izejām. NedrÄ«kst bÅ«t ā€œpiekārtāmā€ ieejām. Ja tiek atklāta Ŕāda ievade, shēma netiks ielādēta programmā ShioTiny, un redaktors parādÄ«s atbilstoÅ”u brÄ«dinājumu.

Ja viss noritēja labi, redaktors uz ShioTiny nosÅ«ta ķēdes teksta aprakstu pa vienam mezglam. Protams, vispirms tiek noņemta esoŔā shIoTiny shēma. IegÅ«tais teksta apraksts tiek saglabāts FLASH atmiņā.

Starp citu, ja vēlaties noņemt ķēdi no ierÄ«ces, vienkārÅ”i ievietojiet tajā tukÅ”u ķēdi (kurā nav neviena mezgla elementa).

Kad visa shēmas programma ir ielādēta shIoTiny PLC, tā sāk ā€œizpildÄ«tā€. Ko tas nozÄ«mē?

Ņemiet vērā, ka ķēdes ielādes procesi no FLASH atmiņas, kad ir ieslēgta baroÅ”ana, un saņemot ķēdi no redaktora, ir identiski.

Pirmkārt, mezglu objekti tiek izveidoti, pamatojoties uz to aprakstu.
Pēc tam tiek izveidoti savienojumi starp mezgliem. Tas nozīmē, ka tiek ģenerētas izeju saites ar ieejām un ievades uz izejām.

Un tikai pēc visa Ŕī sākas galvenais programmas izpildes cikls.

Es rakstÄ«ju ilgu laiku, bet viss process - no ķēdes ā€œielādÄ“Å”anasā€ no FLASH atmiņas lÄ«dz galvenā cikla palaiÅ”anai - aizņem sekundes daļu 60ā€“80 mezglu ķēdei.

Kā darbojas galvenā cilpa? Ä»oti vienkārÅ”i. Vispirms viņŔ gaida parādÄ«Å”anos attÄ«stÄ«ba kādā mezglā, pēc tam apstrādā Å”o notikumu. Un tā bezgalÄ«gi. Nu, vai lÄ«dz brÄ«dim, kad viņi augÅ”upielādē jaunu shēmu shIoTiny.

Jau vairākas reizes esmu minējis tādas lietas kā attÄ«stÄ«ba, mezgli Šø saites. Bet kas tas ir no programmatÅ«ras viedokļa? Mēs par to runāsim Å”odien.

Mezgli, savienojumi un notikumi

VienkārÅ”i apskatiet shēmas programmu piemērus ShioTinysaprast, ka diagramma sastāv tikai no divām entÄ«tijām - mezgliem (vai elementiem) un savienojumiem starp tiem.

Mezgls, bet jā vai ķēdes elements ir dažu virtuāls attēlojums aktivitāte pār datiem. Tā var būt aritmētiska darbība, loģiska darbība vai jebkura darbība, kas mums ienāk prātā. Galvenais, lai mezglam būtu ieeja un izeja.

Ievade - Ŕī ir vieta, kur mezgls saņem datus. Ievades attēli ir punkti, kas vienmēr atrodas mezgla kreisajā pusē.

Izvade - Ŕī ir vieta, kur tiek izgÅ«ts mezgla darbÄ«bas rezultāts. Izvades attēli ir punkti, kas vienmēr atrodas mezgla labajā pusē.

Dažiem mezgliem nav ieejas. Šādi mezgli Ä£enerē rezultātu iekŔēji. Piemēram, pastāvÄ«gs mezgls vai sensora mezgls: tiem nav nepiecieÅ”ami dati no citiem mezgliem, lai ziņotu par rezultātu.

Gluži pretēji, citiem mezgliem nav izejas. Tie ir mezgli, kas parāda, piemēram, izpildmehānismus (relejus vai kaut ko lÄ«dzÄ«gu). Tie pieņem datus, bet neÄ£enerē skaitļoÅ”anas rezultātu, kas ir pieejams citiem mezgliem.

Turklāt ir arī unikāls komentāru mezgls. Tas neko nedara, tam nav ieejas vai izejas. Tās mērķis ir būt par paskaidrojumu diagrammā.

Kas notika "notikumu"? Notikums ir jaunu datu parādÄ«Å”anās jebkurā mezglā. Piemēram, notikumi ietver: izmaiņas ievades stāvoklÄ« (mezgls ievade), saņemot datus no citas ierÄ«ces (mezgliem MQTT Šø UDP), noteikta laika perioda beigas (mezgli Taimeris Šø KavÄ“Å”anās) un tā tālāk.

Kam paredzēti pasākumi? Jā, lai noteiktu, kurā mezglā ir raduÅ”ies jauni dati un kuru mezglu stāvokļi ir jāmaina saistÄ«bā ar jaunu datu saņemÅ”anu. Notikums it kā ā€œiet garāmā€ pa mezglu ķēdi, lÄ«dz tas apiet visus mezglus, kuru stāvoklis ir jāpārbauda un jāmaina.

Visus mezglus var iedalīt divās kategorijās.
Sauksim mezglus, kas var ģenerēt notikumus "aktīvie mezgli'.
Mēs izsauksim mezglus, kas nevar ģenerēt notikumus "pasīvie mezgli'.

Kad mezgls ģenerē notikumu (tas ir, tā izvadē parādās jauni dati), tad vispārīgā gadījumā mainās visas ar notikumu ģeneratora mezgla izvadi savienoto mezglu ķēdes stāvoklis.

Lai tas būtu skaidrs, apsveriet piemēru attēlā.

ShioTiny: zīmēŔanas programmu mezgli, savienojumi un notikumi vai funkcijas

Å eit aktÄ«vie mezgli ir Input1, Input2 un Input3. AtlikuÅ”ie mezgli ir pasÄ«vi. Apsvērsim, kas notiek, kad viena vai otra ievade tiek aizvērta. ĒrtÄ«bas labad rezultāti ir apkopoti tabulā.

ShioTiny: zīmēŔanas programmu mezgli, savienojumi un notikumi vai funkcijas

Kā redzat, kad notiek notikums, tiek veidota ķēde no notikuma avota mezgla līdz gala mezglam. To mezglu stāvoklis, kas neietilpst ķēdē, nemainās.

Rodas pamatots jautājums: kas notiks, ja vienlaicīgi notiks divi vai pat vairāki notikumi?

Kā Gļeba Anfilova darbu cienÄ«tājs man ir kārdinājums nosÅ«tÄ«t ziņkārÄ«gu jautātāju uz viņa grāmatu ā€œBēgÅ”ana no pārsteigumaā€. Å Ä« ir ā€œrelativitātes teorija mazajiemā€, kas labi izskaidro, ko nozÄ«mē ā€œvienlaikusā€ un kā ar to sadzÄ«vot.

Bet praktiski viss ir daudz vienkārŔāk: kad notiek divi vai pat vairāki notikumi, visas ķēdes no katra notikumu avota tiek secÄ«gi veidotas un apstrādātas pēc kārtas, un nekādi brÄ«numi nenotiek.

Nākamais pilnÄ«gi likumÄ«gais ziņkārÄ«ga lasÄ«tāja jautājums ir, kas notiks, ja mezgli tiks savienoti gredzenā? Vai arÄ«, kā saka starp Å”iem jÅ«su gudrajiem puiÅ”iem, ievadiet atsauksmes. Tas ir, savienojiet viena mezgla izvadi ar iepriekŔējā mezgla ieeju, lai Ŕī mezgla izejas stāvoklis ietekmētu tā ievades stāvokli. Redaktors neļaus tieÅ”i savienot mezgla izvadi ar tā ieeju. ElDraw. Bet netieÅ”i, kā attēlā zemāk, to var izdarÄ«t.

Tātad, kas notiks Å”ajā gadÄ«jumā? Atbilde bÅ«s ļoti ā€œnoteiktaā€: atkarÄ«bā no tā, kuri mezgli. ApskatÄ«sim piemēru attēlā.

ShioTiny: zīmēŔanas programmu mezgli, savienojumi un notikumi vai funkcijas

Kad Input1 ieejas kontakti ir atvērti, mezgla A augŔējā ieeja ir 0. Mezgla A izeja arÄ« ir 0. Mezgla B izeja ir 1. Un, visbeidzot, mezgla A apakŔējā ieeja ir 1. Viss ir skaidrs. Un tiem, kam nav skaidrÄ«bas, skatiet tālāk aprakstu par to, kā darbojas mezgli ā€œUNā€ un ā€œNOTā€.

Tagad mēs aizveram Input1 ievades kontaktus, tas ir, vienu pievienojam mezgla A augŔējai ieejai. Tie, kas pārzina elektroniku, zina, ka patiesÄ«bā mēs iegÅ«sim klasisku Ä£eneratora shēmu, izmantojot loÄ£iskos elementus. Un teorētiski Ŕādai ķēdei bezgalÄ«gi jārada secÄ«ba 1-0-1-0-1-0ā€¦ elementu A un B izejā. un 0-1-0-1-0-1-ā€¦. Galu galā notikumam pastāvÄ«gi jāmaina mezglu A un B stāvoklis, skrienot pa apli 2-3-2-3-...!

Bet patiesÄ«bā tas nenotiek. Ķēde nonāks nejauŔā stāvoklÄ« - vai arÄ« relejs paliks ieslēgts vai izslēgts, vai varbÅ«t nedaudz ieslēgsies un izslēgsies vairākas reizes pēc kārtas. Tas viss ir atkarÄ«gs no laika apstākļiem Marsa dienvidu polā. Un tāpēc tas notiek.

Notikums no mezgla Input1 maina mezgla A stāvokli, pēc tam mezglu B un tā tālāk vairākas reizes pa apli. Programma nosaka notikuma ā€œcilpuā€ un piespiedu kārtā aptur Å”o karnevālu. Pēc tam mezglu A un B stāvokļa izmaiņas tiek bloķētas, lÄ«dz notiek jauns notikums. BrÄ«dis, kad programma nolemj ā€œpārstāj griezties riņķos!ā€ - kopumā tas ir atkarÄ«gs no daudziem faktoriem un to var uzskatÄ«t par nejauÅ”u.

Esiet piesardzīgs, savienojot mezglus gredzenā - sekas ne vienmēr būs acīmredzamas! Ir laba ideja par to, ko un kāpēc jūs darāt!

Vai joprojām ir iespējams izveidot Ä£eneratoru uz mums pieejamajiem mezgliem? Jā tu vari! Bet tam ir nepiecieÅ”ams mezgls, kas pats var Ä£enerēt notikumus. Un ir Ŕāds mezgls - Ŕī ir ā€œaizkavÄ“Å”anās lÄ«nijaā€. ApskatÄ«sim, kā darbojas Ä£enerators ar 6 sekunžu periodu zemāk esoÅ”ajā attēlā.

ShioTiny: zīmēŔanas programmu mezgli, savienojumi un notikumi vai funkcijas

Galvenais Ä£eneratora elements ir mezgls A - aizkaves lÄ«nija. Ja maināt aizkaves lÄ«nijas ievades stāvokli no 0 uz 1, tad 1 izejā neparādÄ«sies uzreiz, bet tikai pēc noteikta laika. MÅ«su gadÄ«jumā tas ir 3 sekundes. Tādā paŔā veidā, ja maināt aizkaves lÄ«nijas ievades stāvokli no 1 uz 0, tad 0 izejā parādÄ«sies pēc tām paŔām 3 sekundēm. Aizkaves laiks ir iestatÄ«ts sekundes desmitdaļās. Tas nozÄ«mē, ka vērtÄ«ba 30 nozÄ«mē 3 sekundes.

Aizkaves līnijas īpatnība ir tāda, ka tā ģenerē notikumu pēc aizkaves laika beigām.

Pieņemsim, ka sākotnēji aizkaves lÄ«nijas izeja bija 0. Pēc mezgla B ā€“ invertora ā€“ Å”is 0 pārvērÅ”as par 1 un nonāk aizkaves lÄ«nijas ieejā. Nekas nenotiek uzreiz. Aizkaves lÄ«nijas izejā tas paliks 0, bet sāksies aizkaves laika atpakaļskaitÄ«Å”ana. Paiet 3 sekundes. Un tad aizkaves lÄ«nija Ä£enerē notikumu. Pie tā izejas parādās 1. Å Ä« vienÄ«ba, izejot cauri mezglam B - invertoru - pārvērÅ”as par 0 un pāriet uz aizkaves lÄ«nijas ieeju. Paiet vēl 3 sekundes... un process atkārtojas. Tas nozÄ«mē, ka ik pēc 3 sekundēm aizkaves lÄ«nijas izejas stāvoklis mainās no 0 uz 1 un pēc tam no 1 uz 0. Relejs noklikŔķina. Ä¢enerators strādā. Impulsa periods ir 6 sekundes (3 sekundes pie izejas nulles un 3 sekundes pie izejas viens).

Bet reālās shēmās parasti nav nepiecieÅ”ams izmantot Å”o piemēru. Ir Ä«paÅ”i taimera mezgli, kas lieliski un bez ārējas palÄ«dzÄ«bas Ä£enerē impulsu secÄ«bu ar noteiktu periodu. ā€œNullesā€ un ā€œvienaā€ ilgums Å”ajos impulsos ir vienāds ar pusi no perioda.

Lai iestatītu periodiskas darbības, izmantojiet taimera mezglus.

Es atzÄ«mēju, ka Ŕādus digitālos signālus, kur ā€œnullesā€ un ā€œviensā€ ilgums ir vienāds, sauc par ā€œmeanderā€.

Es ceru, ka esmu nedaudz precizējis jautājumu par to, kā notikumi tiek izplatīti starp mezgliem un ko nevajadzētu darīt?

Secinājums un atsauces

Raksts izrādījās īss, bet Ŕis raksts ir atbilde uz jautājumiem, kas raduŔies par mezgliem un notikumiem.

AttÄ«stoties programmaparatÅ«rai un parādoties jauniem piemēriem, rakstÄ«Å”u par to, kā programmēt ShioTiny mazi raksti, ja vien tas cilvēkiem bÅ«s interesanti.

Tāpat kā iepriekÅ”, diagramma, programmaparatÅ«ra, piemēri, komponentu apraksts un viss pārējais ir Å”eit.

Jautājumi, ieteikumi, kritika - dodieties Ŕeit: [e-pasts aizsargāts]

Avots: www.habr.com

Pievieno komentāru