# ShIoTiny: узлы, связи и события или особенности рисования программ. 1часть **Published by:** [mega dimass](https://paragraph.com/@mega-dimass/) **Published on:** 2023-01-04 **URL:** https://paragraph.com/@mega-dimass/shiotiny-1 ## Content Тема статьи — визуальное программирование ПЛК ShIoTiny для умного дома. Очень кратко рассмотрены такие понятия, как узлы, связи, события, а также особенности загрузки и выполнения визуальной программы на ESP8266, который является основой ПЛК ShIoTiny. Итак, перейдём к сути: что такое "узел" (нода) и "событие"? Как выполняется программа? Как обычно — начнём по порядку: с загрузки программы. Как загружается программа Начнем с того, что происходит, когда мы нажимаем кнопочку Upload в редакторе ElDraw и наша схема-программа, состоящая из красивых квадратиков улетает в устройство. Во-первых, на основе нарисованной нами схемы строится её описание в текстовом виде. Во-вторых, проверяется — все ли входы узлов соединены с выходами. «Висящих» входов не должно быть. Если такой вход обнаружен — схема в ShIoTiny не загрузится, а редактор выведет соответствующее предупреждение. Если все прошло успешно, то редактор посылает в ShIoTiny текстовое описание схемы по одному узлу. Разумеется, существующая схема из ShIoTiny предварительно удаляется. Полученное текстовое описание сохраняется во FLASH-память. Кстати, если вы хотите удалить схему из устройства, то просто загрузите в него пустую схему (не содержащую ни одного элемента-узла). Как только вся схема-программа загружена в ПЛК ShIoTiny, она начинает «выполняться». Что это значит? Отметим, что процессы загрузки схемы из FLASH-памяти при включении питания и при приёме схемы из редактора — идентичны. Сначала идёт создание объектов-узлов на основе их описания. Затем производится расстановка связей между узлами. То есть генерируются ссылки выходов на входы и входов на выходы. И только после всего этого запускается основной цикл выполнения программы. Писал я долго, но весь процесс -от «загрузки» схемы из FLASH-памяти до запуска основного цикла — занимает доли секунды для схемы из 60-80 узлов. Как работает основной цикл? Очень просто. Сначала он ждёт возникновения события в каком-либо узле, затем обрабатывает это событие. И так без конца. Ну или пока не загрузят в ShIoTiny новую схему. Уже несколько раз я упоминал такие вещи, как события, узлы и связи. Но что же это такое с программной точки зрения? Об этом и поговорим сегодня. Узлы, связи и события Достаточно взглянуть на примеры схем-программ для ShIoTiny, чтобы понять, что состоит схема лишь из двух сущностей — узлов (или элементов) и связей между ними. Узел, нода или элемент схемы — это виртуальное представление какого-то действия над данными. Это может быть арифметическая операция, логическая операция или вообще какая угодно операция, какая придет нам в голову. Главное, что у узла есть вход и выход. Вход — это то место, куда узел принимает данные. Изображения входов — это точки, находящиеся всегда с левой стороны узла. Выход — это то место, откуда извлекается результат работы узла. Изображения выходов — это точки, находящиеся всегда с правой стороны узла. У некоторых узлов нет входов. Такие узлы генерируют результат внутри себя. Например узел-константа или узел-датчик: им не нужны данные от других узлов, чтобы сообщить результат. У других узлов, напротив, нет выходов. Это узлы, отображающие, например, исполнительные устройства (реле или еще какие-нибудь подобные). Они принимают данные, но не генерируют результата вычислений, доступного для других узлов. Кроме того, есть еще уникальный узел-комментарий. Он ничего не делает, не имеет ни входов ни выходов. Его назначение — быть пояснением на схеме. Что такое «событие»? Событие — это возникновение новых данных в каком-либо узле. Например к событиям относятся: изменение состояния входа (узел Input), приём данных от другого устройства (узлы MQTT и UDP), истечение заданного промежутка времени (узлы Timer и Delay) и так далее. Для чего нужны события? Да для того, чтобы определить — в каком узле возникли новые данные и состояния каких узлов необходимо изменить в связи с получением новых данных. Событие, как бы «проходит» по цепочке узлов, пока не обойдет все узлы, состояние которых необходимо проверить и изменить. Все узлы можно подразделить на две категории. Узлы, которые могут генерировать события назовем «активные узлы». Узлы, которые не могут генерировать события назовем «пассивные узлы». Когда узел генерирует событие (то есть у него на выходе появляются новые данные), то изменяется в общем случае состояние всей цепочки узлов, подключенных к выходу узла-генератора события. ## Publication Information - [mega dimass](https://paragraph.com/@mega-dimass/): Publication homepage - [All Posts](https://paragraph.com/@mega-dimass/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@mega-dimass): Subscribe to updates - [Twitter](https://twitter.com/l1bertar1an_88): Follow on Twitter