ShIoTiny: вузлы, сувязі і падзеі ці асаблівасці малявання праграм

ShIoTiny: вузлы, сувязі і падзеі ці асаблівасці малявання праграм

Асноўныя тэзы ці пра што гэты артыкул

Тэма артыкула - візуальнае праграмаванне ПЛК ShIoTiny для разумнага дома, апісанага тут: ShIoTiny: малая аўтаматызацыя, інтэрнэт рэчаў ці "за паўгода да водпуску".

Вельмі коратка разгледжаны такія паняцці, як вузлы, сувязі, падзеі, а таксама асаблівасці загрузкі і выканання візуальнай праграмы на ESP8266, які з'яўляецца асновай ПЛК ShIoTiny.

Уступленне або пара аргпытанняў

У папярэднім артыкуле з нагоды сваёй распрацоўкі я зрабіў кароткі агляд магчымасцяў кантролера ShIoTiny.

Як ні дзіўна, грамадскасць праявіла даволі моцную зацікаўленасць і задала мне даволі шмат пытанняў. Некаторыя таварышы нават адразу адразу прапанавалі ў мяне купіць кантролер. Не, я не супраць таго, каб крыху зарабіць, але сумленне не дазваляе мне прадаваць яшчэ вельмі сырую ў праграмным плане рэч.

Таму я выклаў на GitHub бінарнікі прашыўкі і схему прылады: прашыўка+інструкцыя найкароткая+ схема+прыклады.

Цяпер кожны можа адштабнаваць ESP-07 і асабіста пагуляцца з прашыўкай. Калі каму вельмі хочацца менавіта такую ​​плату як на фота - то ў мяне ёсць іх некалькі штук. Пішыце на пошту shiotiny@yandex.ru. Але, як гаварыў незабыўны Агуркоў: "Я ні завошта не адказваю!".

Пяройдзем да сутнасці: што такоевузел» (нода) і «падзея«? Як выконваецца праграма?

Як звычайна – пачнем па парадку: з загрузкі праграмы.

Як загружаецца праграма

Пачнём з таго, што адбываецца, калі мы націскаем кнопачку Загружаць у рэдактары ElDraw і наша схема-праграма, якая складаецца з прыгожых квадрацікаў ляціць у прыладу.

Па-першае, на аснове намаляванай намі схемы будуецца яе апісанне ў тэкставым выглядзе.
Па-другое, правяраецца - ці ўсе ўваходы вузлоў злучаныя з выхадамі. «Вісячых» уваходаў не павінна быць. Калі такі ўваход знойдзены - схема ў ShIoTiny не загрузіцца, а рэдактар ​​выведзе адпаведнае папярэджанне.

Калі ўсё прайшло паспяхова, то рэдактар ​​пасылае ў ShIoTiny тэкставае апісанне схемы па адным вузле. Зразумела, якая існуе схема з ShIoTiny папярэдне выдаляецца. Атрыманае тэкставае апісанне захоўваецца ва FLASH-памяць.

Дарэчы, калі вы жадаеце выдаліць схему з прылады, то проста загрузіце ў яго пустую схему (не ўтрымоўвальную ніводнага элемента-вузла).

Як толькі ўся схема-праграма загружана ў ПЛК ShIoTiny, яна пачынае "выконвацца". Што гэта значыць?

Адзначым, што працэсы загрузкі схемы з FLASH-памяці пры ўключэнні харчавання і пры прыёме схемы з рэдактара - ідэнтычныя.

Спачатку ідзе стварэнне аб'ектаў-вузлоў на аснове іх апісання.
Затым робіцца расстаноўка сувязяў паміж вузламі. Гэта значыць генеруюцца спасылкі выхадаў на ўваходы і ўваходаў на выхады.

І толькі пасля ўсяго гэтага запускаецца асноўны цыкл выканання праграмы.

Пісаў я доўга, але ўвесь працэс -ад "загрузкі" схемы з FLASH-памяці да запуску асноўнага цыклу - займае дзелі секунды для схемы з 60-80 вузлоў.

Як працуе асноўны цыкл? Вельмі проста. Спачатку ён чакае ўзнікнення падзеі у якім-небудзь вузле, затым апрацоўвае гэтую падзею. І так без канца. Ну ці пакуль не загрузяць у ShIoTiny новую схему.

Ужо некалькі разоў я згадваў такія рэчы, як падзеі, вузлы и сувязі. Але што ж гэта такое з праграмнага пункта гледжання? Аб гэтым і пагаворым сёння.

Вузлы, сувязі і падзеі

Дастаткова зірнуць на прыклады схем-праграм для ShIoTiny, Каб зразумець, што складаецца схема толькі з двух сутнасцяў - вузлоў (або элементаў) і сувязяў паміж імі.

вузел, нода або элемент схемы - гэта віртуальнае ўяўленне нейкага дзеянні над дадзенымі. Гэта можа быць арыфметычная аперацыя, лагічная аперацыя ці ўвогуле якая заўгодна аперацыя, якая прыйдзе нам у галаву. Галоўнае, што ў вузла ёсць уваход і выхад.

Уваход - Гэта тое месца, куды вузел прымае дадзеныя. Выявы ўваходаў - гэта кропкі, якія знаходзяцца заўсёды з левага боку вузла.

Выхад - гэта тое месца, адкуль здабываецца вынік працы вузла. Выявы выхадаў - гэта кропкі, якія знаходзяцца заўсёды з правага боку вузла.

У некаторых вузлоў няма ўваходаў. Такія вузлы генеруюць вынік унутры сябе. Напрыклад вузел-канстанта ці вузел-датчык: ім не патрэбныя дадзеныя ад іншых вузлоў, каб паведаміць вынік.

У іншых вузлоў, наадварот, няма вынахадаў. Гэта вузлы, якія адлюстроўваюць, напрыклад, выканаўчыя прылады (рэле ці яшчэ якія-небудзь падобныя). Яны прымаюць дадзеныя, але не генеруюць выніку вылічэнняў, даступнага для іншых вузлоў.

Акрамя таго, ёсць яшчэ ўнікальны вузел-каментар. Ён нічога не робіць, не мае ні ўваходаў, ні выхадаў. Яго прызначэнне - быць тлумачэннем на схеме.

Што такое "падзея»? Падзея - Гэта ўзнікненне новых дадзеных у якім-небудзь вузле. Напрыклад да падзей адносяцца: змяненне стану ўваходу (вузел уваход), прыём дадзеных ад іншай прылады (вузлы MQTT и UDP), заканчэнне зададзенага прамежку часу (вузлы Таймер и затрымка) і гэтак далей.

Для чаго патрэбны падзеі? Ды для таго, каб вызначыць - у якім вузле паўсталі новыя дадзеныя і станы якіх вузлоў неабходна змяніць у сувязі з атрыманнем новых дадзеных. Падзея, як бы "праходзіць" па ланцужку вузлоў, пакуль не абміне ўсе вузлы, стан якіх неабходна праверыць і змяніць.

Усе вузлы можна падзяліць на дзве катэгорыі.
Вузлы, якія могуць генераваць падзеі назавемактыўныя вузлы.
Вузлы, якія не могуць генераваць падзеі назавемпасіўныя вузлы.

Калі вузел генеруе падзею (гэта значыць у яго на вынахадзе з'яўляюцца новыя дадзеныя), тое змяняецца ў агульным выпадку стан усяго ланцужка вузлоў, падлучаных да вынахаду вузла-генератара падзеі.

Каб было зразумела, разгледзім прыклад на малюнку.

ShIoTiny: вузлы, сувязі і падзеі ці асаблівасці малявання праграм

Актыўныя вузлы тут – Input1, Input2 і Input3. Астатнія вузлы - пасіўныя. Разгледзім што адбываецца, калі замыкаецца той ці іншы ўваход. Вынікі для зручнасці зведзены ў таблічку.

ShIoTiny: вузлы, сувязі і падзеі ці асаблівасці малявання праграм

Як бачым, пры ўзнікненні падзеі, будуецца ланцужок ад вузла-крыніцы падзеі і да канцавога вузла. Стан тых вузлоў, якія не трапляюць у ланцужок, не мяняецца.

Узнікае законнае пытанне, а што ж будзе пры ўзнікненні дзвюх ці ўвогуле некалькіх падзей адначасова?

Як аматара творчасці Глеба Анфілава, мяне так і цягне адправіць цікаўнага запытальніка да яго кнігі «Уцёкі ад здзіўленняў». Гэта такая "тэорыя адноснасці для самых маленькіх", у якой добра расказана, што такое "адначасова" і як з гэтым жыць.

Але чыста практычна ўсё значна прасцей: пры ўзнікненні дзвюх ці ўвогуле некалькіх падзей паслядоўна будуюцца і апрацоўваюцца ўсе ланцужкі ад кожнай крыніцы падзеі па чарзе і ніякіх цудаў.

Наступнае цалкам законнае пытанне цікаўнага чытача - а што будзе, калі вузлы злучыць у кольца? Або, як гэта прынята казаць сярод гэтых вашых разумнікаў - увесці зваротную сувязь. Гэта значыць, злучыць выхад аднаго з вузлоў з уваходам папярэдняга вузла так, каб стан выхаду гэтага вузла ўплывала на стан яго ж ўваходу. Напрамую злучыць выхад вузла з яго ж уваходам вам не дазволіць рэдактар ElDraw. А вось апасродкавана, як на малюнку ніжэй - гэта зрабіць можна.

Што ж будзе ў гэтым выпадку? Адказ будзе вельмі "пэўны": гледзячы якія вузлы. Разгледзім прыклад на рысунку.

ShIoTiny: вузлы, сувязі і падзеі ці асаблівасці малявання праграм

Калі кантакты ўваходу Input1 растуленыя на верхнім уваходзе вузла А - 0. На выхадзе вузла А, таксама 0. На выхадзе вузла Б - 1. І, нарэшце, на ніжнім уваходзе вузла А - 1. Усё ясна. А каму не ясна – паглядзіце ніжэй апісанне таго, як працуюць вузлы "І" і "НЕ".

Зараз замкнем кантакты ўваходу Input1, гэта значыць пададзім на верхні ўваход вузла А адзінку. Тыя, хто знаёмы з электронікай, ведае, што фактычна мы атрымаем класічную схему генератара на лагічных элементах. І па ідэі, такая схема павінна бясконца выдаваць на выхадзе элементаў А і Б паслядоўнасці 1-0-1-0-1-0…. і 0-1-0-1-0-1-…. Бо падзея павінна ўвесь час зменяць стан вузлоў А і Б, бегаючы па крузе 2-3-2-3-…!

Але насамрэч гэтага не адбываецца. Схема ўпадзе ў выпадковы стан - або рэле застанецца уключаным або адключаным, а можа і злёгку прагудзець уключаючыся-адключаючыся некалькі разоў запар. Усё залежыць ад надвор'я на паўднёвым полюсе Марса. І вось чаму так адбываецца.

Падзея з вузла Input1 змяняе стан вузла А, потым вузла Б і так па коле некалькі разоў. Праграма вызначае "зацыкляванне" падзеі і прымусова спыняе гэты карнавал. Пасля гэтага змена стану вузлоў А і Бы блакуюцца да ўзнікнення новай падзеі. Момант, у які праграма вырашыць - "хопіць круціцца па крузе!" - У агульным выпадку залежыць ад многіх фактараў і яго можна лічыць выпадковым.

Будзьце асцярожныя, злучаючы вузлы ў кольца - эфекты будуць не заўсёды відавочнымі! Добра ўяўляйце што і навошта вы робіце!

А ці можна ўсё ж пабудаваць генератар на даступных нам вузлах? Так магчыма! Але для гэтага неабходны вузел, які сам умее генераваць падзеі. І такі вузел ёсць - гэта "лінія затрымкі". Паглядзім як працуе генератар з перыядам 6 секунд на малюнку ніжэй.

ShIoTiny: вузлы, сувязі і падзеі ці асаблівасці малявання праграм

Ключавым элементам генератара з'яўляецца вузел А - лінія затрымкі. Калі змяніць стан уваходу лініі затрымкі з 0 на 1, то 1 на выхадзе з'явіцца не адразу, а толькі праз зададзены час. У нашым выпадку гэта 3 сэкунды. Сапраўды гэтак жа, калі змяніць стан уваходу лініі затрымкі з 1 на 0, то 0 на вынахадзе з'явіцца праз тыя ж 3 секунды. Час затрымкі задаецца ў дзясятых дзелях секунды. Гэта значыць значэнне 30 і азначае - 3 сек.

Асаблівасцю лініі затрымкі з'яўляецца тое, што яна генеруе падзею пасля заканчэння часу затрымкі.

Выкажам здагадку, што першапачаткова на вынахадзе лініі затрымкі быў 0. Пасля мінання вузла Б - інвертара - гэты 0 ператвараецца ў 1 і паступае на ўваход лініі затрымкі. Адразу нічога не адбываецца. На выхадзе лініі затрымкі як быў 0 так і застанецца, але затое ўключаецца адлік часу затрымкі. Праходзіць 3 секунды. І тут жа лінія затрымкі генеруе падзею. На выхадзе ў яе з'яўляецца 1. Гэтая адзінка пасля праходжання вузла Б - інвертара - ператвараецца ў 0 і паступае на ўваход лініі затрымкі. Праходзіць яшчэ 3 секунды… і працэс паўтараецца. Гэта значыць кожныя 3 секунды стан выхаду лініі затрымкі мяняецца з 0 на 1 і затым з 1 на 0. Рэле пстрыкае. Генератар працуе. Перыяд імпульсаў складае 6 секунд (3 секунды на выхадзе нуль і 3 секунды - адзінка).

Але, у рэальных схемах, звычайна ня трэба выкарыстоўваць і гэты прыклад. Існуюць спецыяльныя вузлы-таймеры, якія цудоўна і без старонняй дапамогі генеруюць паслядоўнасць імпульсаў з зададзеным перыядам. Працягласць "нуля" і "адзінкі" у гэтых імпульсах роўныя палове перыяду.

Для задання перыядычных дзеянняў, выкарыстоўвайце вузлы-таймеры.

Адзначу, што такія лічбавыя сігналы, дзе працягласць "нуля" і "адзінкі" роўныя, называюцца "меандрам".

Спадзяюся, я крыху растлумачыў пытанне аб тым як адбываецца распаўсюджванне падзей паміж вузламі і чаго рабіць не варта?

Заключэнне і спасылкі

Артыкул атрымаўся кароткім, але гэта артыкул-адказ на пытанні па вузлах і падзеях.

Па меры развіцця прашывак і з'яўленні новых прыкладаў я буду пісаць пра тое, як праграмаваць ShIoTiny невялікія артыкулы, пакуль гэта будзе цікава людзям.

Як і раней, схема, прашыўка, прыклады, апісанне вузлоў і ўсё астатняе тут.

Пытанні, пажаданні, крытыка - гэта сюды: shiotiny@yandex.ru

Крыніца: habr.com

Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы 🔥 Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы | ProHoster