ShiIoTiny: јазли, врски и настани или карактеристики на програмите за цртање

ShiIoTiny: јазли, врски и настани или карактеристики на програмите за цртање

Главните точки или за што е оваа статија

Темата на статијата е визуелно PLC програмирање ShioTiny за паметниот дом опишан овде: ShioTiny: мала автоматизација, Интернет на нештата или „шест месеци пред одмор“.

Многу кратко концепти како што се јазли, врски, случувања, како и карактеристики на вчитување и извршување на визуелна програма на ESP8266, што е основа на PLC ShioTiny.

Вовед или неколку организациски прашања

Во претходната статија за мојот развој, дадов краток преглед на можностите на контролорот ShioTiny.

Доволно чудно, јавноста покажа доста силен интерес и ми постави доста прашања. Некои пријатели дури веднаш ми понудија да купат контролер од мене. Не, не сум против да заработам малку пари, но мојата совест не ми дозволува да продавам нешто што е сè уште многу грубо во однос на софтверот.

Затоа, ги објавив бинарните датотеки на фирмверот и дијаграмот на уредот на GitHub: фирмвер + најкратки инструкции + дијаграм + примери.

Сега секој може да го трепка ESP-07 и самиот да си игра со фирмверот. Ако некој навистина ја сака потполно истата табла како на фотографијата, тогаш имам неколку од нив. Пиши по е-пошта [заштитена по е-пошта]. Но, како што велеше незаборавниот Огурцов: „Јас не сум одговорен за ништо!“

Значи, да дојдеме до поентата: што е "јазол" (јазол) и"настан"? Како се извршува програмата?

Како и обично, да започнеме по редослед: со преземање на програмата.

Како се вчитува програмата

Да почнеме со тоа што се случува кога ќе притиснеме копче Внеси во уредникот ЕлДрау и нашата кола-програма, составена од прекрасни квадрати, лета во уредот.

Прво, врз основа на дијаграмот што го нацртавме, се гради неговиот опис во текстуална форма.
Второ, проверува дали сите влезови на јазли се поврзани со излези. Не треба да има „висечки“ влезови. Ако се открие таков влез, колото нема да се вчита во ShioTiny, а уредникот ќе прикаже соодветно предупредување.

Ако сè е добро, уредникот испраќа текстуален опис на колото еден по еден јазол до ShiIoTiny. Се разбира, постоечкото коло од ShioTiny прво е отстрането. Добиениот опис на текстот е зачуван во FLASH меморија.

Патем, ако сакате да отстраните коло од уред, тогаш едноставно вчитајте празно коло во него (не содржи ниту еден елемент на јазол).

Откако целата програма на колото ќе се вчита во ShioTiny PLC, таа почнува да „извршува“. Што значи тоа?

Забележете дека процесите за вчитување на коло од FLASH меморија кога е вклучено напојувањето и кога се прима коло од уредувачот се идентични.

Прво, објектите на јазлите се креираат врз основа на нивниот опис.
Потоа се прават врски помеѓу јазлите. Односно, се генерираат врски од излези до влезови и влезови до излези.

И само после сето ова започнува главниот циклус на извршување на програмата.

Пишував долго време, но целиот процес - од „вчитување“ на колото од FLASH меморија до започнување на главниот циклус - трае дел од секундата за коло од 60-80 јазли.

Како работи главната јамка? Многу едноставно. Прво го чека појавувањето случувања на некој јазол, потоа го обработува тој настан. И така до бескрај. Па, или додека не прикачат нова шема на ShioTiny.

Веќе неколку пати спомнав работи како случувања, јазли и врски. Но, што е ова од софтверска гледна точка? Ќе разговараме за ова денес.

Јазли, врски и настани

Само погледнете ги примерите на програми за кола за ShioTinyда се разбере дека дијаграмот се состои само од два ентитета - јазли (или елементи) и врските меѓу нив.

Јазол, но да или елемент на колото е виртуелен приказ на некои активност над податоците. Ова може да биде аритметичка операција, логичка операција или која било операција што ќе ни падне на ум. Главната работа е дека јазолот има влез и излез.

Внесување - ова е местото каде што јазолот прима податоци. Влезните слики се точки кои се секогаш на левата страна на јазолот.

Излез - ова е местото каде што се добива резултатот од работата на јазолот. Излезните слики се точки кои секогаш се наоѓаат на десната страна на јазолот.

Некои јазли немаат влезови. Таквите јазли го генерираат резултатот внатрешно. На пример, константен јазол или сензорски јазол: не им требаат податоци од други јазли за да го пријават резултатот.

Другите јазли, напротив, немаат излези. Тоа се јазли кои прикажуваат, на пример, актуатори (релеи или нешто слично). Тие прифаќаат податоци, но не генерираат пресметковен резултат што е достапен за други јазли.

Покрај тоа, постои и единствен јазол за коментари. Не прави ништо, нема влезови или излези. Неговата цел е да биде објаснување на дијаграмот.

Што се случи "настан"? Настан е појавата на нови податоци во кој било јазол. На пример, настаните вклучуваат: промена на состојбата на внесување (јазол Внесете), примање податоци од друг уред (јазли MQTT и UDP), истекување на одреден временски период (јазли Тајмер и Одлагање) и така натаму.

За што се настаните? Да, за да се утврди во кој јазол се појавиле нови податоци и состојбите во кои јазли треба да се сменат во врска со приемот на нови податоци. Настанот, како што беше, „поминува“ по синџирот на јазли додека не ги заобиколи сите јазли чија состојба треба да се провери и промени.

Сите јазли може да се поделат во две категории.
Ајде да повикаме јазли што можат да генерираат настани "активни јазли".
Ќе повикаме јазли кои не можат да генерираат настани “пасивни јазли".

Кога еден јазол генерира настан (односно, на неговиот излез се појавуваат нови податоци), тогаш во општ случај состојбата на целиот синџир на јазли поврзани со излезот на јазолот за генерирање на настани се менува.

За да стане јасно, разгледајте го примерот на сликата.

ShiIoTiny: јазли, врски и настани или карактеристики на програмите за цртање

Активните јазли овде се Input1, Input2 и Input3. Останатите јазли се пасивни. Ајде да размислиме што се случува кога еден или друг влез е затворен. За погодност, резултатите се сумирани во табела.

ShiIoTiny: јазли, врски и настани или карактеристики на програмите за цртање

Како што можете да видите, кога се случува некој настан, се гради синџир од изворниот јазол на настанот до крајниот јазол. Состојбата на оние јазли кои не спаѓаат во синџирот не се менува.

Се поставува легитимно прашање: што ќе се случи ако два или дури неколку настани се случат истовремено?

Како љубител на делото на Глеб Анфилов, во искушение сум да испратам љубопитен прашалник до неговата книга „Бегство од изненадување“. Ова е „теорија на релативноста за најмалите“, која добро објаснува што значи „симултано“ и како да се живее со него.

Но, практично сè е многу поедноставно: кога ќе се случат два или дури неколку настани, сите синџири од секој извор на настан се последователно изградени и обработени за возврат, и не се случуваат чуда.

Следното сосема легитимно прашање од љубопитен читател е што ќе се случи ако јазлите се поврзат во прстен? Или, како што велат меѓу овие ваши паметни момци, воведете фидбек. Односно, поврзете го излезот на еден од јазлите со влезот на претходниот јазол, така што излезната состојба на овој јазол влијае на состојбата на неговиот влез. Уредникот нема да ви дозволи директно да го поврзете излезот на јазол со неговиот влез. ЕлДрау. Но, индиректно, како на сликата подолу, ова може да се направи.

Значи, што ќе се случи во овој случај? Одговорот ќе биде многу „дефинитивен“: во зависност од тоа кои јазли. Да го погледнеме примерот на сликата.

ShiIoTiny: јазли, врски и настани или карактеристики на програмите за цртање

Кога влезните контакти на Input1 се отворени, горниот влез на јазолот A е 0. Излезот на јазолот A е исто така 0. Излезот на јазолот B е 1. И, конечно, долниот влез на јазолот A е 1. Сè е јасно. И за оние кои не се јасни, погледнете подолу за опис на тоа како функционираат јазлите „И“ и „НЕ“.

Сега ги затвораме контактите на влезот Input1, односно применуваме еден на горниот влез на јазолот А. Оние кои се запознаени со електрониката знаат дека всушност ќе добиеме класично генераторско коло со помош на логички елементи. И во теорија, таквото коло треба бескрајно да ја произведува низата 1-0-1-0-1-0... на излезот од елементите А и Б. и 0-1-0-1-0-1-…. На крајот на краиштата, настанот мора постојано да ја менува состојбата на јазлите А и Б, трчајќи во круг 2-3-2-3-...!

Но, во реалноста тоа не се случува. Колото ќе падне во случајна состојба - или релето ќе остане вклучено или исклучено, или можеби малку зуи вклучено и исклучено неколку пати по ред. Се зависи од времето на јужниот пол на Марс. И затоа се случува ова.

Настан од јазолот Input1 ја менува состојбата на јазолот A, потоа јазолот B и така натаму во круг неколку пати. Програмата го открива „лупингот“ на настанот и насилно го прекинува овој карневал. По ова, промените во состојбата на јазлите A и B се блокирани додека не се појави нов настан. Моментот во кој програмата одлучува „престани да се вртиш во кругови!“ - генерално, зависи од многу фактори и може да се смета за случајна.

Бидете внимателни кога поврзувате јазли во прстен - ефектите нема секогаш да бидат очигледни! Имајте добра идеја што и зошто правите!

Дали е сè уште можно да се изгради генератор на јазлите што ни се достапни? Да ти можеш! Но, ова бара јазол кој може самиот да генерира настани. И има таков јазол - ова е „линијата за одложување“. Ајде да видиме како работи генератор со период од 6 секунди на сликата подолу.

ShiIoTiny: јазли, врски и настани или карактеристики на програмите за цртање

Клучниот елемент на генераторот е јазолот А - линијата за одложување. Ако ја промените состојбата на внесување на линијата за одложување од 0 на 1, тогаш 1 нема да се појави на излезот веднаш, туку само по одредено време. Во нашиот случај тоа е 3 секунди. На ист начин, ако ја промените состојбата на внесување на линијата за одложување од 1 на 0, тогаш 0 на излезот ќе се појави по истите 3 секунди. Времето на одложување е поставено во десетинки од секундата. Односно, вредноста 30 значи 3 секунди.

Посебна карактеристика на линијата за одложување е тоа што генерира настан откако ќе истече времето на одложување.

Да претпоставиме дека првично излезот на линијата за одложување беше 0. Откако ќе го помине јазолот Б - инвертерот - оваа 0 се претвора во 1 и оди на влезот на линијата за одложување. Ништо не се случува веднаш. На излезот од линијата за одложување, ќе остане 0, но ќе започне одбројувањето на времето за одложување. Поминуваат 3 секунди. И тогаш линијата за одложување генерира настан. На неговиот излез се појавува 1. Оваа единица, откако ќе помине низ јазолот B - инвертерот - се претвора во 0 и оди на влезот на линијата за одложување. Поминуваат уште 3 секунди... и процесот се повторува. Односно, на секои 3 секунди состојбата на излезот на линијата за одложување се менува од 0 на 1, а потоа од 1 на 0. Релето кликнува. Генераторот работи. Периодот на пулсот е 6 секунди (3 секунди на излезната нула и 3 секунди на излезната една).

Но, во реалните кола, обично нема потреба да се користи овој пример. Постојат специјални тајмер јазли кои совршено и без надворешна помош генерираат низа пулсирања со даден период. Времетраењето на „нула“ и „еден“ во овие импулси е еднакво на половина од периодот.

За да поставите периодични дејства, користете јазли на тајмер.

Забележувам дека таквите дигитални сигнали, каде што времетраењето на „нула“ и „еден“ е еднакво, се нарекуваат „меандер“.

Се надевам дека малку го разјаснив прашањето за тоа како настаните се шират помеѓу јазлите и што не треба да се прави?

Заклучок и референци

Статијата се покажа како кратка, но оваа статија е одговор на прашањата што се појавија во врска со јазлите и настаните.

Како што се развива фирмверот и се појавуваат нови примери, ќе пишувам како да програмирате ShioTiny мали статии се додека тоа ќе биде интересно за луѓето.

Како и досега, дијаграм, фирмвер, примери, опис на компоненти и сè останатото е тука.

Прашања, предлози, критики - одете овде: [заштитена по е-пошта]

Извор: www.habr.com

Додадете коментар