ShIoTiny: node, tautan, dan acara atau fitur program menggambar



Poin-poin penting atau tentang artikel ini


Topik artikel ini adalah pemrograman visual ShIoTiny PLC untuk rumah pintar yang dijelaskan di sini: ShIoTiny: otomatisasi kecil, internet, atau "enam bulan sebelum liburan" .

Konsep-konsep seperti node , komunikasi , acara , serta fitur pemuatan dan pelaksanaan program visual pada ESP8266 , yang merupakan dasar ShIoTiny PLC, ditinjau secara singkat .

Situs Proyek ShIoTiny


Pendahuluan atau beberapa pertanyaan organisasi


Dalam artikel sebelumnya tentang perkembangan saya, saya memberikan tinjauan singkat tentang kemampuan pengontrol ShIoTiny .

Anehnya, publik menunjukkan minat yang cukup kuat dan mengajukan banyak pertanyaan kepada saya. Beberapa kawan bahkan segera menawari saya untuk membeli controller. Tidak, saya tidak menentang menghasilkan sedikit uang, tetapi hati nurani saya tidak mengizinkan saya untuk menjual sesuatu yang masih sangat kasar dalam hal perangkat lunak.

Oleh karena itu, saya diposting di binari firmware GitHub dan diagram perangkat: firmware + instruksi terpendek + sirkuit + contoh .

Sekarang semua orang bisa mem-flash ESP-07 dan bermain dengan firmware sendiri. Jika ada yang benar-benar menginginkan papan seperti di foto, maka saya memiliki beberapa dari mereka. Menulis ke shiotiny@yandex.ru . Tapi, seperti kata Ketimun yang tak terlupakan, "Aku tidak bertanggung jawab atas apa pun!"

Jadi, mari kita langsung ke titik: apa itu " simpul " (simpul) dan " peristiwa "? Bagaimana program dijalankan?

Seperti biasa - mari mulai dengan urutan: dengan mengunduh program.

Bagaimana cara memuat program


Untuk mulai dengan, apa yang terjadi ketika kita mengklik tombol Unggah di editor ElDraw dan skema program kami, yang terdiri dari kotak yang indah, terbang ke perangkat.

Pertama, berdasarkan diagram yang dibuat oleh kami, uraiannya dalam bentuk teks dibuat.
Kedua, diperiksa apakah semua input node terhubung ke output. Seharusnya tidak ada input "menggantung". Jika input semacam itu terdeteksi, sirkuit di ShIoTiny tidak akan dimuat, dan editor akan menampilkan peringatan.

Jika semuanya berjalan dengan baik, editor mengirimkan deskripsi teks dari rangkaian ke satu simpul di ShIoTiny. Tentu saja, skema yang ada dari ShIoTiny sebelumnya dihapus. Deskripsi teks yang dihasilkan disimpan dalam memori FLASH.

By the way, jika Anda ingin menghapus rangkaian dari perangkat, maka cukup memuat sirkuit kosong (yang tidak mengandung elemen simpul) ke dalamnya.

Segera setelah seluruh rangkaian program dimuat ke ShIoTiny PLC, ia mulai "berjalan". Apa artinya ini?

Perhatikan bahwa proses memuat sirkuit dari memori FLASH saat daya dihidupkan dan ketika sirkuit diterima dari editor identik.

Pertama adalah penciptaan objek simpul berdasarkan deskripsi mereka.
Kemudian susunan koneksi antar node dibuat. Yaitu, tautan output ke input dan input ke output dihasilkan.

Dan hanya setelah semua ini, siklus pelaksanaan program utama diluncurkan.

Saya menulis untuk waktu yang lama, tetapi seluruh proses - dari "memuat" sirkuit dari memori FLASH ke awal loop utama - membutuhkan waktu sepersekian detik untuk rangkaian 60-80 node.

Bagaimana cara kerja loop utama? Sangat sederhana. Pertama, dia menunggu peristiwa terjadi di simpul mana pun, lalu dia memproses kejadian ini. Dan tanpa akhir. Ya, atau sampai mereka mengunggah skema baru ke ShIoTiny.

Sudah beberapa kali saya menyebutkan hal-hal seperti acara , node dan koneksi . Tapi apa itu dari sudut pandang perangkat lunak? Kami akan membicarakan ini hari ini.

Node, Koneksi, dan Acara


Lihat saja contoh program rangkaian untuk ShIoTiny untuk memahami bahwa rangkaian hanya terdiri dari dua entitas - simpul (atau elemen) dan hubungan di antara mereka.

Node , node, atau elemen rangkaian adalah representasi virtual dari beberapa tindakan pada data. Ini mungkin operasi aritmatika, operasi logis, atau operasi apa pun yang terjadi pada kita. Yang utama adalah bahwa node memiliki input dan output.

Input adalah tempat simpul menerima data. Gambar input adalah titik yang selalu berada di sisi kiri node.

Output adalah tempat di mana hasil dari operasi node diekstraksi. Gambar output adalah titik yang selalu berada di sisi kanan node.

Beberapa node tidak memiliki input. Node tersebut menghasilkan hasil dalam diri mereka sendiri. Misalnya, node konstan atau node sensor: mereka tidak memerlukan data dari node lain untuk melaporkan hasilnya.

Sebaliknya, node lain tidak memiliki jalan keluar. Ini adalah node yang menampilkan, misalnya, aktuator (relay atau beberapa perangkat serupa lainnya). Mereka menerima data, tetapi tidak menghasilkan hasil perhitungan yang tersedia untuk node lain.

Selain itu, ada juga simpul komentar yang unik. Dia tidak melakukan apa-apa, tidak memiliki input maupun output. Tujuannya adalah untuk menjadi penjelasan dalam diagram.

Apa itu " acara "? Suatu kejadian adalah terjadinya data baru dalam suatu node. Misalnya, acara meliputi: mengubah status input (simpul Input ), menerima data dari perangkat lain (node MQTT dan UDP ), berakhirnya jangka waktu tertentu (node Timer dan Delay ), dan sebagainya.

Untuk apa acara? Ya, untuk menentukan di simpul mana data baru muncul dan status simpul mana yang perlu diubah sehubungan dengan penerimaan data baru. Acara, seolah-olah, "melewati" sepanjang rantai node sampai telah melewati semua node yang keadaannya harus diperiksa dan diubah.

Semua node dapat dibagi menjadi dua kategori.
Node yang dapat menghasilkan peristiwa disebut " node aktif ".
Node yang tidak dapat menghasilkan peristiwa disebut " node pasif ".

Ketika sebuah node menghasilkan suatu peristiwa (yaitu, data baru muncul pada outputnya), keadaan seluruh rantai node yang terhubung ke output dari node generator peristiwa berubah dalam kasus umum.

Untuk memperjelasnya, perhatikan contoh pada gambar.



Node aktif di sini adalah Input1, Input2 dan Input3. Node yang tersisa bersifat pasif. Pertimbangkan apa yang terjadi ketika input ini atau itu ditutup. Untuk kenyamanan, hasilnya ditabulasi.



Seperti yang Anda lihat, ketika suatu peristiwa terjadi, rantai dibangun dari simpul sumber acara ke simpul akhir. Keadaan simpul-simpul yang tidak termasuk dalam rantai tidak berubah.

Muncul pertanyaan yang sah, tetapi apa yang akan terjadi jika dua atau bahkan beberapa peristiwa terjadi secara bersamaan?

Sebagai seorang pencinta karya Gleb Anfilov, saya tergoda untuk mengirim seorang penanya yang penasaran ke bukunya "Flight from Surprise". Ini adalah "teori relativitas untuk yang terkecil", di mana dikatakan dengan baik apa yang "bersamaan" dan bagaimana hidup dengannya.

Tetapi murni hampir semuanya jauh lebih sederhana: ketika dua atau bahkan beberapa peristiwa terjadi, semua rantai dari masing-masing sumber peristiwa secara berurutan dibangun dan diproses secara bergantian dan tidak ada mukjizat.

Pertanyaan selanjutnya yang cukup sah dari pembaca yang ingin tahu adalah apa yang akan terjadi jika node terhubung dalam sebuah cincin? Atau, seperti yang biasa dikatakan di antara orang-orang pintar Anda ini, untuk memberikan umpan balik. Yaitu, hubungkan output dari salah satu node dengan input dari node sebelumnya sehingga status output dari node ini mempengaruhi keadaan inputnya. Editor ElDraw tidak akan memungkinkan Anda untuk langsung menghubungkan output node ke inputnya sendiri. Namun secara tidak langsung, seperti pada gambar di bawah ini - ini bisa dilakukan.

Jadi apa yang akan terjadi dalam kasus ini? Jawabannya akan sangat "pasti": tergantung pada node mana. Perhatikan contoh pada gambar.



Ketika kontak input input1 terbuka di input atas node A - 0. Pada output dari node A, juga 0. Pada output dari node B - 1. Dan akhirnya, pada input yang lebih rendah dari node A - 1. Semuanya jelas. Dan kepada siapa tidak jelas - lihat di bawah untuk deskripsi tentang bagaimana node "DAN" dan "TIDAK" bekerja.

Sekarang tutup kontak input Input1, yaitu, kami akan menyediakan satu ke input atas simpul A. Mereka yang akrab dengan elektronik tahu bahwa sebenarnya kita mendapatkan rangkaian generator logika klasik. Dan secara teori, skema seperti itu seharusnya tanpa henti menghasilkan pada output elemen A dan B urutan 1-0-1-0-1-0 .... dan 0-1-0-1-0-1-1 .... Bagaimanapun, suatu peristiwa harus secara konstan mengubah keadaan simpul A dan B, berjalan dalam lingkaran 2-3-2-3- ...!

Tetapi ini tidak benar-benar terjadi. Sirkuit akan jatuh ke keadaan acak - atau relai akan tetap hidup atau mati, atau mungkin berdengung sedikit dan beberapa kali berturut-turut. Itu semua tergantung pada cuaca di kutub selatan Mars. Dan itulah mengapa ini terjadi.

Suatu kejadian dari simpul Input1 mengubah keadaan simpul A, lalu simpul B, dan seterusnya dalam lingkaran beberapa kali. Program menentukan "perulangan" dari acara tersebut dan secara paksa mengakhiri karnaval ini. Setelah ini, perubahan status dari node A dan B diblokir sampai peristiwa baru terjadi. Saat di mana program memutuskan - "berhenti berputar dalam lingkaran!" - dalam kasus umum, itu tergantung pada banyak faktor dan dapat dianggap acak.
Berhati-hatilah saat menghubungkan node dalam sebuah cincin - efeknya tidak selalu jelas! Bayangkan apa dan mengapa Anda lakukan!
Tetapi apakah mungkin untuk membangun generator di atas simpul yang dapat diakses oleh kita? Ya kamu bisa! Tetapi ini membutuhkan simpul yang dengan sendirinya tahu cara menghasilkan peristiwa. Dan ada simpul seperti itu - ini adalah "garis delay." Mari kita lihat bagaimana generator bekerja dengan periode 6 detik pada gambar di bawah ini.



Elemen kunci dari generator adalah simpul A, garis penundaan. Jika Anda mengubah status input dari garis penundaan dari 0 ke 1, maka 1 pada output tidak segera muncul, tetapi hanya setelah waktu yang ditentukan. Dalam kasus kami, ini adalah 3 detik. Demikian pula, jika Anda mengubah status input dari garis penundaan dari 1 ke 0, maka 0 akan muncul pada output setelah 3 detik yang sama. Waktu tunda diatur dalam sepersepuluh detik. Artinya, nilainya 30 dan berarti - 3 detik.

Fitur dari garis penundaan adalah bahwa ia menghasilkan suatu peristiwa setelah waktu tunda berlalu.

Misalkan pada awalnya output dari garis penundaan adalah 0. Setelah melewati simpul B, inverter, 0 ini berubah menjadi 1 dan pergi ke input dari garis penundaan. Tidak ada yang terjadi segera. Pada output dari garis penundaan, seperti sebelumnya, 0 akan tetap, tetapi kemudian hitung mundur waktu tunda dihidupkan. Dibutuhkan 3 detik. Dan kemudian garis penundaan menghasilkan suatu peristiwa. Pada output, ia memiliki 1. Unit ini, setelah melewati simpul B, inverter, berubah menjadi 0 dan masuk ke input dari garis penundaan. 3 detik berlalu ... dan prosesnya berulang. Yaitu, setiap 3 detik status keluaran dari garis penundaan berubah dari 0 ke 1 dan kemudian dari 1 menjadi 0. Relai berbunyi klik. Generator bekerja. Periode pulsa adalah 6 detik (3 detik pada output nol dan 3 detik - satu).

Tetapi, di sirkuit nyata, Anda biasanya tidak perlu menggunakan contoh ini. Ada node pengatur waktu khusus yang sempurna dan tanpa bantuan luar menghasilkan urutan pulsa dengan periode tertentu. Durasi "nol" dan "unit" dalam pulsa ini sama dengan setengah periode.
Untuk mengatur tindakan berkala, gunakan penghitung waktu.
Saya perhatikan bahwa sinyal digital seperti itu, di mana durasi "nol" dan "unit" sama, disebut "berliku-liku".

Saya harap saya sedikit mengklarifikasi pertanyaan tentang bagaimana peristiwa didistribusikan antara node dan apa yang tidak boleh dilakukan?

Kesimpulan dan referensi


Artikel ini ternyata pendek, tetapi artikel ini adalah jawaban untuk pertanyaan yang diajukan pada node dan acara.

Seiring perkembangan firmware dan contoh-contoh baru, saya akan menulis tentang cara memprogram artikel-artikel kecil ShIoTiny , asalkan akan menarik bagi orang-orang.

Seperti sebelumnya, skema, firmware, contoh, deskripsi node dan yang lainnya ada di sini .

Pertanyaan, keinginan, kritik - ini di sini: shiotiny@yandex.ru

Source: https://habr.com/ru/post/id463285/


All Articles