ShioTiny: qovşaqlar, bağlantılar və hadisələr və ya rəsm proqramlarının xüsusiyyətləri

ShioTiny: qovşaqlar, bağlantılar və hadisələr və ya rəsm proqramlarının xüsusiyyətləri

Əsas məqamlar və ya bu məqalənin nə haqqında olduğu

Məqalənin mövzusu vizual PLC proqramlaşdırmasıdır ShioTiny burada təsvir edilən ağıllı ev üçün: ShioTiny: kiçik avtomatlaşdırma, əşyaların interneti və ya “tətildən altı ay əvvəl”.

Çox qısaca kimi anlayışlar düyünlər, kommunikasiya, inkişaf, həmçinin vizual proqramın yüklənməsi və icrası xüsusiyyətləri ESP8266PLC-nin əsasını təşkil edən ShioTiny.

Giriş və ya bir neçə təşkilati sual

İnkişafım haqqında əvvəlki məqalədə nəzarətçinin imkanları haqqında qısa məlumat verdim ShioTiny.

Qəribədir ki, ictimaiyyət kifayət qədər böyük maraq göstərdi və mənə kifayət qədər suallar verdi. Bəzi dostlar hətta dərhal məndən nəzarətçi almağı təklif etdilər. Xeyr, mən bir az pul qazanmağın əleyhinə deyiləm, amma vicdanım hələ də proqram baxımından çox kobud olan bir şeyi satmağa icazə vermir.

Buna görə də, mən GitHub-da ikili proqram təminatı və cihaz diaqramını yerləşdirdim: proqram təminatı + ən qısa təlimatlar + diaqram + nümunələr.

İndi hər kəs ESP-07-ni yandıra və proqram təminatı ilə özləri oynaya bilər. Hər kəs həqiqətən fotoşəkildəki kimi eyni lövhəni istəyirsə, məndə onlardan bir neçəsi var. E-poçtla yazın [e-poçt qorunur]. Ancaq unudulmaz Ogurtsovun dediyi kimi: "Mən heç nəyə cavabdeh deyiləm!"

Beləliklə, keçək mətləbə: nədir "düyün"(qovşaq) və"событие"? Proqram necə icra olunur?

Həmişə olduğu kimi, sıra ilə başlayaq: proqramı yükləməklə.

Proqram necə yüklənir

Düyməni basdıqda nə baş verdiyindən başlayaq Yüklə redaktorda ElDraw və gözəl kvadratlardan ibarət dövrə proqramımız cihaza uçur.

Birincisi, çəkdiyimiz diaqram əsasında onun mətn şəklində təsviri qurulur.
İkincisi, bütün node girişlərinin çıxışlara qoşulduğunu yoxlayır. Heç bir "asma" giriş olmamalıdır. Belə bir giriş aşkar edilərsə, dövrə ShioTiny-ə yüklənməyəcək və redaktor müvafiq xəbərdarlıq göstərəcək.

Hər şey qaydasındadırsa, redaktor dövrənin mətn təsvirini hər dəfə bir qovşağın ShioTiny-ə göndərir. Əlbəttə ki, ShioTiny-dən mövcud dövrə əvvəlcə çıxarılır. Nəticədə mətn təsviri FLASH yaddaşında saxlanılır.

Yeri gəlmişkən, bir dövrəni cihazdan çıxarmaq istəyirsinizsə, sadəcə ona boş bir dövrə yükləyin (tərkibində tək qovşaq elementi yoxdur).

Bütün dövrə proqramı ShioTiny PLC-yə yükləndikdən sonra o, “icra etməyə” başlayır. Bunun mənası nədi?

Qeyd edək ki, elektrik enerjisi işə salındıqda və redaktordan dövrə qəbul edilərkən FLASH yaddaşından dövrə yükləmə prosesləri eynidir.

Birincisi, onların təsviri əsasında node obyektləri yaradılır.
Sonra qovşaqlar arasında əlaqələr qurulur. Yəni, çıxışların girişlərə və girişlərin çıxışlara keçidləri yaradılır.

Və yalnız bütün bunlardan sonra proqramın əsas icra dövrü başlayır.

Mən uzun müddət yazdım, amma bütün proses - dövrənin FLASH yaddaşından "yüklənməsindən" əsas dövrün işə salınmasına qədər - 60-80 qovşaqdan ibarət bir dövrə üçün saniyənin bir hissəsini çəkir.

Əsas döngə necə işləyir? Çox sadə. Əvvəlcə ortaya çıxmasını gözləyir inkişaf bəzi qovşaqda, sonra həmin hadisəni emal edir. Və s sonsuz. Yaxşı, ya da ShioTiny-ə yeni bir sxem yükləyənə qədər.

kimi şeyləri artıq bir neçə dəfə qeyd etmişəm inkişaf, düyünlər и kommunikasiya. Bəs proqram baxımından bu nədir? Bu gün bu barədə danışacağıq.

Düyünlər, əlaqələr və hadisələr

Sadəcə olaraq dövrə proqramlarının nümunələrinə baxın ShioTinydiaqramın yalnız iki varlıqdan - qovşaqlardan (və ya elementlərdən) və onlar arasındakı əlaqələrdən ibarət olduğunu başa düşmək.

Node, amma bəli və ya dövrə elementi bəzilərinin virtual təmsilidir aktivlik məlumatların üzərində. Bu arifmetik əməliyyat, məntiqi əməliyyat və ya ağlımıza gələn hər hansı bir əməliyyat ola bilər. Əsas odur ki, düyünün girişi və çıxışı var.

giriş qapısı - bu qovşağın məlumat qəbul etdiyi yerdir. Giriş şəkilləri həmişə düyünün sol tərəfində olan nöqtələrdir.

Buraxılış - bu, node əməliyyatının nəticəsinin alındığı yerdir. Çıxış şəkilləri həmişə düyünün sağ tərəfində yerləşən nöqtələrdir.

Bəzi qovşaqların girişləri yoxdur. Belə qovşaqlar nəticəni daxili olaraq yaradır. Məsələn, daimi node və ya sensor node: onlara nəticəni bildirmək üçün digər qovşaqlardan məlumat lazım deyil.

Digər qovşaqlarda, əksinə, çıxış yoxdur. Bunlar, məsələn, aktuatorları (relelər və ya oxşar bir şey) göstərən qovşaqlardır. Onlar məlumatları qəbul edirlər, lakin digər qovşaqlar üçün mövcud olan hesablama nəticəsi yaratmırlar.

Bundan əlavə, unikal şərh qovşağı da var. Heç bir şey etmir, giriş və ya çıxışı yoxdur. Onun məqsədi diaqram üzərində izahat olmaqdır.

Nə "событие"? Hadisə hər hansı bir qovşaqda yeni məlumatların yaranmasıdır. Məsələn, hadisələrə aşağıdakılar daxildir: giriş vəziyyətində dəyişiklik (node Input), başqa cihazdan məlumat qəbul etmək (qovşaqlar MQTT и UDP), müəyyən bir müddətin başa çatması (qovşaqlar Timer и Gecikmə) və s.

Hadisələr nə üçündür? Bəli, hansı qovşaqda yeni məlumatların yarandığını və yeni məlumatların alınması ilə əlaqədar hansı qovşaqların vəziyyətlərinin dəyişdirilməsinin lazım olduğunu müəyyən etmək üçün. Hadisə, sanki, vəziyyəti yoxlanılmalı və dəyişdirilməli olan bütün qovşaqlardan yan keçənə qədər qovşaqlar zənciri boyunca "keçir".

Bütün qovşaqları iki kateqoriyaya bölmək olar.
Hadisələr yarada bilən qovşaqları çağıraq "aktiv qovşaqlar.
Hadisələr yarada bilməyən qovşaqlara zəng edəcəyik "passiv düyünlər.

Bir qovşaq hadisə yaratdıqda (yəni onun çıxışında yeni məlumatlar görünür), o zaman ümumi halda hadisə generatoru qovşağının çıxışına qoşulan bütün qovşaqlar zəncirinin vəziyyəti dəyişir.

Bunu aydınlaşdırmaq üçün şəkildəki nümunəni nəzərdən keçirin.

ShioTiny: qovşaqlar, bağlantılar və hadisələr və ya rəsm proqramlarının xüsusiyyətləri

Burada aktiv qovşaqlar Input1, Input2 və Input3-dür. Qalan qovşaqlar passivdir. Bu və ya digər giriş bağlandıqda nə baş verdiyini nəzərdən keçirək. Rahatlıq üçün nəticələr cədvəldə ümumiləşdirilmişdir.

ShioTiny: qovşaqlar, bağlantılar və hadisələr və ya rəsm proqramlarının xüsusiyyətləri

Gördüyünüz kimi, hadisə baş verdikdə, hadisənin mənbə qovşağından son düyünə qədər bir zəncir qurulur. Zəncirə düşməyən qovşaqların vəziyyəti dəyişmir.

Haqlı sual yaranır: iki, hətta bir neçə hadisə eyni vaxtda baş verərsə, nə baş verəcək?

Qleb Anfilovun yaradıcılığının həvəskarı kimi onun “Təəccübdən qaçmaq” kitabına maraqlı bir sual göndərməyə həvəslənirəm. Bu, "balacalar üçün nisbilik nəzəriyyəsidir" və bu, "eyni zamanda" nə demək olduğunu və onunla necə yaşamağı yaxşı izah edir.

Ancaq praktiki olaraq hər şey daha sadədir: iki və ya hətta bir neçə hadisə baş verdikdə, hər bir hadisə mənbəyindən olan bütün zəncirlər ardıcıl olaraq qurulur və növbə ilə işlənir və heç bir möcüzə baş vermir.

Maraqlı bir oxucunun növbəti tamamilə qanuni sualı, düyünlər bir halqaya birləşdirilsə nə olacaq? Və ya bu ağıllı adamlarınız arasında deyildiyi kimi, rəy bildirin. Yəni, qovşaqlardan birinin çıxışını əvvəlki qovşağın girişinə elə birləşdirin ki, bu qovşağın çıxış vəziyyəti onun giriş vəziyyətinə təsir etsin. Redaktor bir qovşağın çıxışını onun girişinə birbaşa qoşmağa icazə verməyəcək. ElDraw. Ancaq dolayı yolla, aşağıdakı şəkildəki kimi, bu edilə bilər.

Bəs bu halda nə baş verəcək? Cavab çox "müəyyən" olacaq: hansı qovşaqlardan asılı olaraq. Şəkildəki nümunəyə baxaq.

ShioTiny: qovşaqlar, bağlantılar və hadisələr və ya rəsm proqramlarının xüsusiyyətləri

Giriş1-in giriş kontaktları açıq olduqda, A düyününün yuxarı girişi 0-dır. A düyününün çıxışı da 0-dır. B düyününün çıxışı 1-dir. Və nəhayət, A düyününün aşağı girişi 1-dir. Hər şey aydın. Aydın olmayanlar üçün "AND" və "NOT" qovşaqlarının necə işlədiyinin təsviri üçün aşağıya baxın.

İndi Input1 girişinin kontaktlarını bağlayırıq, yəni birini A nodeunun yuxarı girişinə tətbiq edirik. Elektronika ilə tanış olanlar bilir ki, əslində məntiq elementlərindən istifadə edərək klassik generator sxemi əldə edəcəyik. Və nəzəri olaraq, belə bir dövrə A və B elementlərinin çıxışında sonsuz olaraq 1-0-1-0-1-0... ardıcıllığını yaratmalıdır. və 0-1-0-1-0-1-…. Axı hadisə daim 2-3-2-3-... dairəsində çalışan A və B qovşaqlarının vəziyyətini dəyişməlidir!

Amma reallıqda bu baş vermir. Dövrə təsadüfi vəziyyətə düşəcək - və ya rele açıq və ya sönük qalacaq və ya bəlkə də bir neçə dəfə ardıcıl olaraq bir az yanacaq və söndürüləcək. Hamısı Marsın cənub qütbündəki havadan asılıdır. Və buna görə də bu baş verir.

Giriş1 qovşağından gələn hadisə bir neçə dəfə dairədə A node, sonra B node və s. vəziyyətini dəyişir. Proqram hadisənin "döyüşünü" aşkar edir və bu karnavalı zorla dayandırır. Bundan sonra A və B qovşaqlarının vəziyyətindəki dəyişikliklər yeni hadisə baş verənə qədər bloklanır. Proqramın “dairələrdə fırlanmağı dayandır!” qərar verdiyi an. - ümumiyyətlə, bir çox amillərdən asılıdır və təsadüfi hesab edilə bilər.

Düyünləri bir halqaya bağlayarkən diqqətli olun - effektlər həmişə aydın olmayacaq! Nə və niyə etdiyinizi yaxşı təsəvvür edin!

Bizdə mövcud olan qovşaqlarda generator qurmaq hələ də mümkündürmü? Bəli sən bacararsan! Ancaq bunun üçün hadisələrin özü yarada bilən bir node lazımdır. Və belə bir düyün var - bu "gecikmə xətti" dir. Aşağıdakı şəkildə 6 saniyəlik bir generatorun necə işlədiyini görək.

ShioTiny: qovşaqlar, bağlantılar və hadisələr və ya rəsm proqramlarının xüsusiyyətləri

Generatorun əsas elementi A node - gecikmə xəttidir. Gecikmə xəttinin giriş vəziyyətini 0-dan 1-ə dəyişdirsəniz, 1 dərhal çıxışda görünməyəcək, ancaq müəyyən bir müddətdən sonra. Bizim vəziyyətimizdə bu 3 saniyədir. Eyni şəkildə, gecikmə xəttinin giriş vəziyyətini 1-dən 0-a dəyişdirsəniz, eyni 0 saniyədən sonra çıxışda 3 görünəcəkdir. Gecikmə vaxtı saniyənin onda biri ilə müəyyən edilir. Yəni 30 dəyəri 3 saniyə deməkdir.

Gecikmə xəttinin xüsusi bir xüsusiyyəti, gecikmə müddəti bitdikdən sonra hadisə yaratmasıdır.

Fərz edək ki, ilkin olaraq gecikmə xəttinin çıxışı 0 idi. B node - çevirici - keçdikdən sonra bu 0 1-ə çevrilir və gecikmə xəttinin girişinə keçir. Heç bir şey dərhal baş vermir. Gecikmə xəttinin çıxışında o, 0 olaraq qalacaq, lakin gecikmə vaxtının geri sayımı başlayacaq. 3 saniyə keçir. Və sonra gecikmə xətti bir hadisə yaradır. Çıxışında 1 görünür. Bu qurğu B node-dən keçdikdən sonra - çevirici 0-a çevrilir və gecikmə xəttinin girişinə keçir. Daha 3 saniyə keçir... və proses təkrarlanır. Yəni hər 3 saniyədən bir gecikmə xəttinin çıxış vəziyyəti 0-dan 1-ə, sonra isə 1-dən 0-a dəyişir. Rele klikləyir. Generator işləyir. Nəbz müddəti 6 saniyədir (çıxış sıfırda 3 saniyə və çıxışda 3 saniyə).

Ancaq real sxemlərdə adətən bu nümunədən istifadə etməyə ehtiyac yoxdur. Mükəmməl və kənar yardım olmadan müəyyən bir dövrlə impulsların ardıcıllığını yaradan xüsusi taymer qovşaqları var. Bu impulslarda “sıfır” və “bir”in müddəti dövrün yarısına bərabərdir.

Dövri hərəkətləri təyin etmək üçün taymer qovşaqlarından istifadə edin.

Qeyd edim ki, “sıfır” və “bir” müddətinin bərabər olduğu bu cür rəqəmsal siqnallar “meander” adlanır.

Ümid edirəm ki, hadisələrin qovşaqlar arasında necə yayıldığı və nə etməməli olduğu barədə sualı bir az aydınlaşdırdım?

Nəticə və istinadlar

Məqalə qısa oldu, lakin bu məqalə qovşaqlar və hadisələrlə bağlı yaranan suallara cavabdır.

Firmware inkişaf etdikcə və yeni nümunələr ortaya çıxdıqca, necə proqramlaşdırmağı yazacam ShioTiny insanlar üçün maraqlı olacağı müddətcə kiçik məqalələr.

Əvvəlki kimi, diaqram, proqram təminatı, nümunələr, komponentlərin təsviri və hər şey qalanı burdadır.

Suallar, təkliflər, tənqidlər - bura daxil olun: [e-poçt qorunur]

Mənbə: www.habr.com

Добавить комментарий