ShioTiny: nod, sambungan dan peristiwa atau ciri program lukisan

ShioTiny: nod, sambungan dan peristiwa atau ciri program lukisan

Perkara utama atau maksud artikel ini

Topik artikel ialah pengaturcaraan PLC visual ShioTiny untuk rumah pintar yang diterangkan di sini: ShioTiny: automasi kecil, Internet perkara atau "enam bulan sebelum bercuti".

Sangat ringkas konsep seperti nod, sambungan, perkembangan, serta ciri memuatkan dan melaksanakan program visual pada ESP8266, yang merupakan asas PLC ShioTiny.

Pengenalan atau beberapa soalan organisasi

Dalam artikel sebelumnya tentang perkembangan saya, saya memberikan gambaran ringkas tentang keupayaan pengawal ShioTiny.

Anehnya, orang ramai menunjukkan minat yang agak kuat dan bertanyakan saya banyak soalan. Beberapa rakan malah segera menawarkan diri untuk membeli pengawal daripada saya. Tidak, saya tidak menentang untuk mendapatkan sedikit wang, tetapi hati nurani saya tidak membenarkan saya menjual sesuatu yang masih sangat kasar dari segi perisian.

Oleh itu, saya menyiarkan binari perisian tegar dan rajah peranti di GitHub: perisian tegar + arahan terpendek + gambar rajah + contoh.

Kini semua orang boleh menyalakan ESP-07 dan bermain dengan perisian tegar itu sendiri. Jika sesiapa benar-benar mahukan papan yang sama seperti dalam foto, maka saya mempunyai beberapa daripadanya. Tulis melalui e-mel [e-mel dilindungi]. Tetapi, seperti yang biasa dikatakan oleh Ogurtsov yang tidak dapat dilupakan: "Saya tidak bertanggungjawab untuk apa-apa!"

Jadi, mari kita sampai ke intinya: apakah "simpulan" (nod) dan "Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅"? Bagaimanakah program dilaksanakan?

Seperti biasa, mari kita mulakan mengikut urutan: dengan memuat turun program.

Bagaimana program dimuatkan

Mari kita mulakan dengan apa yang berlaku apabila kita menekan butang Upload dalam editor ElDraw dan program litar kami, yang terdiri daripada petak yang indah, terbang ke dalam peranti.

Pertama, berdasarkan rajah yang telah kami lukis, penerangannya dalam bentuk teks dibina.
Kedua, ia menyemak sama ada semua input nod disambungkan kepada output. Seharusnya tiada pintu masuk "tergantung". Jika input sedemikian dikesan, litar tidak akan dimuatkan ke dalam ShIoTiny, dan editor akan memaparkan amaran yang sepadan.

Jika semuanya berjalan lancar, editor menghantar penerangan teks litar satu nod pada satu masa kepada ShIoTiny. Sudah tentu, litar sedia ada daripada ShIoTiny mula-mula dialih keluar. Penerangan teks yang terhasil disimpan dalam memori FLASH.

Ngomong-ngomong, jika anda ingin mengeluarkan litar dari peranti, maka muatkan litar kosong ke dalamnya (tidak mengandungi unsur nod tunggal).

Sebaik sahaja keseluruhan program litar dimuatkan ke dalam ShIoTiny PLC, ia mula "melaksanakan". Apakah maksudnya?

Ambil perhatian bahawa proses untuk memuatkan litar daripada memori FLASH apabila kuasa dihidupkan dan apabila menerima litar daripada editor adalah sama.

Pertama, objek nod dicipta berdasarkan penerangannya.
Kemudian sambungan dibuat antara nod. Iaitu, pautan output kepada input dan input kepada output dijana.

Dan hanya selepas semua ini kitaran pelaksanaan program utama bermula.

Saya menulis untuk masa yang lama, tetapi keseluruhan proses - dari "memuatkan" litar dari memori FLASH hingga memulakan kitaran utama - mengambil masa sepersekian saat untuk litar 60-80 nod.

Bagaimanakah gelung utama berfungsi? Sangat ringkas. Mula-mula dia menunggu kemunculan perkembangan pada beberapa nod, kemudian memproses peristiwa itu. Dan seterusnya tanpa henti. Baiklah, atau sehingga mereka memuat naik skim baharu ke ShIoTiny.

Beberapa kali saya telah menyebut perkara seperti perkembangan, nod ΠΈ sambungan. Tetapi apakah ini dari sudut pandangan perisian? Kita akan bercakap tentang ini hari ini.

Nod, sambungan dan peristiwa

Lihat sahaja contoh program litar untuk ShioTinyuntuk memahami bahawa rajah hanya terdiri daripada dua entiti - nod (atau elemen) dan hubungan antara mereka.

Simpul, tetapi ya atau elemen litar adalah perwakilan maya bagi sesetengah orang aktiviti atas data. Ini boleh menjadi operasi aritmetik, operasi logik atau sebarang operasi yang terlintas di fikiran kita. Perkara utama ialah nod mempunyai pintu masuk dan keluar.

Π’Ρ…ΠΎΠ΄ - ini adalah tempat di mana nod menerima data. Imej input ialah titik yang sentiasa berada di sebelah kiri nod.

Output - ini ialah tempat di mana hasil operasi nod diambil semula. Imej output ialah titik yang sentiasa terletak di sebelah kanan nod.

Sesetengah nod tidak mempunyai input. Nod sedemikian menjana hasil secara dalaman. Contohnya, nod malar atau nod sensor: mereka tidak memerlukan data daripada nod lain untuk melaporkan hasilnya.

Nod lain, sebaliknya, tidak mempunyai output. Ini adalah nod yang memaparkan, sebagai contoh, penggerak (geganti atau sesuatu yang serupa). Mereka menerima data tetapi tidak menjana hasil pengiraan yang tersedia untuk nod lain.

Selain itu, terdapat juga nod komen yang unik. Ia tidak melakukan apa-apa, tidak mempunyai input atau output. Tujuannya adalah untuk menjadi penjelasan pada rajah.

Apa dah jadi"Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅"? Acara ialah kemunculan data baharu dalam mana-mana nod. Sebagai contoh, peristiwa termasuk: perubahan dalam keadaan input (nod Input), menerima data daripada peranti lain (nod MQTT ΠΈ UDP), tamat tempoh masa tertentu (nod Pemasa ΠΈ Kelewatan) dan sebagainya.

Acara untuk apa? Ya, untuk menentukan nod mana data baharu telah timbul dan keadaan nod mana yang perlu diubah berkaitan dengan penerimaan data baharu. Peristiwa itu, seolah-olah, "melepasi" sepanjang rantaian nod sehingga ia memintas semua nod yang keadaannya perlu diperiksa dan diubah.

Semua nod boleh dibahagikan kepada dua kategori.
Mari kita panggil nod yang boleh menjana peristiwa "nod aktif'.
Kami akan memanggil nod yang tidak dapat menjana peristiwa "nod pasif'.

Apabila nod menghasilkan peristiwa (iaitu, data baharu muncul pada outputnya), maka dalam kes umum keadaan keseluruhan rantaian nod yang disambungkan kepada output nod penjana peristiwa berubah.

Untuk menjelaskannya, pertimbangkan contoh dalam rajah.

ShioTiny: nod, sambungan dan peristiwa atau ciri program lukisan

Nod aktif di sini ialah Input1, Input2 dan Input3. Nod yang tinggal adalah pasif. Mari kita pertimbangkan apa yang berlaku apabila satu atau input lain ditutup. Untuk kemudahan, keputusan diringkaskan dalam jadual.

ShioTiny: nod, sambungan dan peristiwa atau ciri program lukisan

Seperti yang anda boleh lihat, apabila peristiwa berlaku, rantai dibina dari nod sumber peristiwa ke nod akhir. Keadaan nod yang tidak jatuh ke dalam rantai tidak berubah.

Persoalan yang sah timbul: apakah yang akan berlaku jika dua atau beberapa peristiwa berlaku serentak?

Sebagai pencinta karya Gleb Anfilov, saya tergoda untuk menghantar penanya yang ingin tahu ke bukunya "Escape from Surprise." Ini adalah "teori relativiti untuk anak-anak kecil", yang menerangkan dengan baik apa maksud "serentak" dan bagaimana untuk menjalaninya.

Tetapi secara praktikal semuanya lebih mudah: apabila dua atau bahkan beberapa peristiwa berlaku, semua rantaian dari setiap sumber peristiwa dibina dan diproses secara berurutan, dan tiada keajaiban berlaku.

Soalan seterusnya yang benar-benar sah daripada pembaca yang ingin tahu ialah apa yang akan berlaku jika nod disambungkan ke dalam cincin? Atau, seperti yang mereka katakan dalam kalangan lelaki pintar anda ini, perkenalkan maklum balas. Iaitu, sambungkan output salah satu nod ke input nod sebelumnya supaya keadaan output nod ini mempengaruhi keadaan inputnya. Editor tidak akan membenarkan anda menyambung terus output nod ke inputnya. ElDraw. Tetapi secara tidak langsung, seperti dalam rajah di bawah, ini boleh dilakukan.

Jadi apa yang akan berlaku dalam kes ini? Jawapannya akan menjadi sangat "pasti": bergantung pada nod mana. Mari lihat contoh dalam rajah.

ShioTiny: nod, sambungan dan peristiwa atau ciri program lukisan

Apabila kenalan input Input1 dibuka, input atas nod A ialah 0. Output nod A juga 0. Output nod B ialah 1. Dan, akhirnya, input bawah nod A ialah 1. Semuanya adalah jelas. Dan bagi mereka yang tidak jelas, lihat di bawah untuk penerangan tentang cara nod "DAN" dan "TIDAK" berfungsi.

Sekarang kita menutup kenalan input Input1, iaitu, kita menggunakan satu pada input atas nod A. Mereka yang biasa dengan elektronik tahu bahawa sebenarnya kita akan mendapat litar penjana klasik menggunakan elemen logik. Dan secara teorinya, litar sebegitu seharusnya menghasilkan urutan 1-0-1-0-1-0 tanpa henti… pada keluaran unsur A dan B. dan 0-1-0-1-0-1-…. Lagipun, acara itu mesti sentiasa mengubah keadaan nod A dan B, berjalan dalam bulatan 2-3-2-3-...!

Tetapi pada hakikatnya ini tidak berlaku. Litar akan jatuh ke dalam keadaan rawak - atau geganti akan kekal dihidupkan atau dimatikan, atau mungkin sedikit berdengung hidup dan mati beberapa kali berturut-turut. Semuanya bergantung kepada cuaca di kutub selatan Marikh. Dan itulah sebabnya ini berlaku.

Peristiwa daripada nod Input1 mengubah keadaan nod A, kemudian nod B, dan seterusnya dalam bulatan beberapa kali. Program ini mengesan "gelung" acara dan secara paksa menghentikan karnival ini. Selepas ini, perubahan dalam keadaan nod A dan B disekat sehingga peristiwa baharu berlaku. Saat di mana program memutuskan "berhenti berputar dalam bulatan!" - secara umum, ia bergantung kepada banyak faktor dan boleh dianggap rawak.

Berhati-hati apabila menyambungkan simpulan ke dalam gelang - kesannya tidak akan sentiasa jelas! Mempunyai idea yang baik tentang apa dan mengapa anda lakukan!

Adakah masih boleh membina penjana pada nod yang tersedia untuk kami? Ya awak boleh! Tetapi ini memerlukan nod yang boleh menjana peristiwa itu sendiri. Dan terdapat nod sedemikian - ini adalah "garisan kelewatan". Mari lihat bagaimana penjana dengan tempoh 6 saat berfungsi dalam rajah di bawah.

ShioTiny: nod, sambungan dan peristiwa atau ciri program lukisan

Elemen utama penjana ialah nod A - garis tunda. Jika anda menukar keadaan input baris tunda daripada 0 kepada 1, maka 1 tidak akan muncul pada output serta-merta, tetapi hanya selepas masa yang ditetapkan. Dalam kes kami, ia adalah 3 saat. Dengan cara yang sama, jika anda menukar keadaan input baris tunda daripada 1 kepada 0, maka 0 pada output akan muncul selepas 3 saat yang sama. Masa tunda ditetapkan dalam sepersepuluh saat. Iaitu, nilai 30 bermakna 3 saat.

Ciri khas garis tunda ialah ia menjana peristiwa selepas masa tunda telah tamat.

Mari kita anggap bahawa pada mulanya output garis tunda ialah 0. Selepas melepasi nod B - penyongsang - 0 ini bertukar menjadi 1 dan pergi ke input garis tunda. Tiada apa yang berlaku serta-merta. Pada output garis tunda, ia akan kekal 0, tetapi kira detik masa tunda akan bermula. 3 saat berlalu. Dan kemudian garis kelewatan menjana acara. Pada outputnya ia kelihatan 1. Unit ini, selepas melalui nod B - penyongsang - bertukar menjadi 0 dan pergi ke input garisan kelewatan. 3 saat lagi berlalu... dan proses itu berulang. Iaitu, setiap 3 saat keadaan output talian tunda berubah daripada 0 kepada 1 dan kemudian dari 1 kepada 0. Geganti mengklik. Penjana berfungsi. Tempoh nadi ialah 6 saat (3 saat pada output sifar dan 3 saat pada output satu).

Tetapi, dalam litar sebenar, biasanya tidak perlu menggunakan contoh ini. Terdapat nod pemasa khas yang dengan sempurna dan tanpa bantuan luar menjana urutan denyutan dengan tempoh tertentu. Tempoh "sifar" dan "satu" dalam denyutan ini adalah sama dengan separuh tempoh.

Untuk menetapkan tindakan berkala, gunakan nod pemasa.

Saya perhatikan bahawa isyarat digital sedemikian, di mana tempoh "sifar" dan "satu" adalah sama, dipanggil "meander".

Saya harap saya telah menjelaskan sedikit soalan tentang bagaimana peristiwa disebarkan antara nod dan apa yang tidak boleh dilakukan?

Kesimpulan dan rujukan

Artikel itu ternyata pendek, tetapi artikel ini adalah jawapan kepada soalan yang timbul mengenai nod dan peristiwa.

Apabila perisian tegar berkembang dan contoh baharu muncul, saya akan menulis tentang cara memprogram ShioTiny artikel kecil asalkan menarik minat orang ramai.

Seperti sebelum ini, gambar rajah, firmware, contoh, penerangan komponen dan segala-galanya selebihnya ada di sini.

Soalan, cadangan, kritikan - pergi ke sini: [e-mel dilindungi]

Sumber: www.habr.com

Tambah komen