FLProg + Hioni Selanjutnya. Pelajaran 3



Dalam pelajaran sebelumnya ( pelajaran 1 , pelajaran 2 ), saya berbicara tentang cara menggambar antarmuka panel HMI Nextion, dan bagaimana mengontrol panel menggunakan Arduino. Dalam tutorial ini, saya akan menunjukkan kepada Anda cara memecahkan masalah terbalik dengan mengendalikan papan Arduino menggunakan panel HMI Nextion.
Dalam pelajaran, kita akan memperluas proyek dari pelajaran sebelumnya, menambahkan kontrol kipas, yang akan menyala ketika suhu naik di atas batas yang ditentukan, dan mati ketika suhu turun di bawah batas kedua. Pengaturan akan ditetapkan dari panel, dan disimpan dalam memori non-volatile controller Arduino. Selain itu, kami akan membuat sakelar lampu (on-off) pada panel dan tombol yang dengannya kami akan menyalakan senter (misalnya, untuk memberi sinyal alien).

Skema yang dimodifikasi dari pelajaran terakhir. Senter, cahaya, dan kipas akan mensimulasikan LED.


Desain panel juga telah diselesaikan. Dua halaman ditambahkan. Selain itu, font yang dimuat di panel diganti. Proyek untuk panel ada di arsip, tautan yang diberikan di akhir artikel. Dalam komentar pada pelajaran terakhir, mereka benar mengkritik saya karena kurangnya bakat desainer. Saya sepenuhnya setuju dengan ini, sehingga halaman baru tidak memiliki desain, fungsionalitas murni.
Pertimbangkan halaman baru.

Halaman manajemen ("halaman3", ID = 3).


Pertimbangkan elemen-elemen di halaman.

  1. Hanya bidang teks. Tidak ada yang menarik.
  2. . , . . . .

    , ( “vscope” “global”). . “Touch Press Event” .

    4 .
    page4.evtemp.txt=onV.txt

    4 , .
    page4.varN.val=0

    .
    page page4


  3. . . .

    “Touch Press Event”.

    .
    page4.varN.val=1


  4. . . .

    “Touch Press Event”.


  5. (“Dual-state button”) – .
    .

    , ( “vscope” “global”). ( “sta” “image”). “pic0” 0 “pic1” 1.

  6. (“Button”) – . .

    . , . , Arduino UART ( , ). (7 8). , , ( ). (“Touch Press Event”) .

    (“Touch Release Event”) .

    FLProg.


Jendela untuk mengedit nilai ("halaman4", ID = 4).

Pertimbangkan apa yang termasuk di dalamnya.
  1. Bidang nilai yang dapat diedit. Parameter barang.

    Kami akan membaca nilai bidang ini dari controller, masing-masing, membuatnya global (atribut "vscope" diatur ke "global").

  2. Tombol entri nilai. Semua tombol ini hampir identik, dan berbeda dalam tulisan dan kode pada pengendali event "Touch Press Event". Saat Anda mengklik salah satu tombol ini, simbol yang sesuai ditambahkan ke nilai saat ini dari bidang nilai yang diedit.
    Kode dalam "Touch Press Event" untuk masing-masing tombol.
    “0”
    evtemp.txt=evtemp.txt+"0"

    “1”
    evtemp.txt=evtemp.txt+"1"

    “2”
    evtemp.txt=evtemp.txt+"2"

    “3”
    evtemp.txt=evtemp.txt+"3"

    “4”
    evtemp.txt=evtemp.txt+"4"

    “5”
    evtemp.txt=evtemp.txt+"5"

    “6”
    evtemp.txt=evtemp.txt+"6"

    “7”
    evtemp.txt=evtemp.txt+"7"

    “8”
    evtemp.txt=evtemp.txt+"8"

    “9”
    evtemp.txt=evtemp.txt+"9"

    “.”
    evtemp.txt=evtemp.txt+"."


  3. Tombol untuk menghapus bidang. Saat ditekan, nilai bidang dihapus.
    Kode dalam "Acara Pers Sentuh"
    evtemp.txt=""

  4. Tombol untuk menghapus karakter terakhir.
    Kode dalam "Acara Pers Sentuh"
    evtemp.txt=evtemp.txt-1

    . . . .

  5. .
    , (“endPress” “ endRel”) .
    “Touch Press Event”
    page4.endPress.val=1

    “Touch Release Event”
    page4.endRel.val=1


  6. . .
    “Touch Press Event”
    page page3



Setelah panel selesai, buka program FLProg. Ini juga menggunakan proyek dari pelajaran terakhir, sedikit dimodifikasi. File proyek ada di arsip, tautan yang diberikan di akhir posting.
Seperti dalam pelajaran terakhir, saya akan menunjukkan papan sirkuit yang sudah jadi dan memberi tahu apa yang terjadi pada mereka.
Papan 7 - “Manajemen Lentera”



Semuanya sederhana di sini. Blok B46 - “Pelacakan Klik” (pustaka elemen, folder “Panel HMI Selanjutnya”). Pada outputnya, ini sesuai dengan keadaan tombol yang dipantau atau elemen lain dari acara "Touch Press Event" dan "Touch Release Event" pada panel. Nilai ini langsung ditulis ke output yang diikat ke lampu. Blok ini diparameterisasi menggunakan editor blok.



Di editor blok, pilih panel, lalu buat halaman baru dan tulis elemen yang diperlukan di atasnya. Saya mengatakan bagaimana melakukan ini pada pelajaran sebelumnya.



Gambar seperti itu seharusnya muncul.



Sebagai variabel penekan, kami memilih variabel tempat kami menulis unit di tombol "Touch Press Event", dan sebagai variabel rilis, variabel dari tombol "Touch Release Event".

Papan 8 - "Kontrol Cahaya".



Papan yang sangat sederhana. Di sini kita membaca posisi sakelar menggunakan blok B47 - “Dapatkan parameter” (pustaka elemen -> folder “Panel HMI Selanjutnya” -> folder “Elemen”). Kemudian nilai ini dikirim langsung ke unit output, terpasang ke pencahayaan. Blok ini diparameterisasi menggunakan editor blok.



Untuk mengurangi beban pada pengontrol, kami akan meminta status sakelar satu detik sekali.

Papan 9 - "Akhir dari parameter pengeditan."
Di forum ini, kami akan memproses klik tombol "Selesai" pada halaman pengeditan parameter.



Menggunakan blok B48 - "Pelacakan klik" (pustaka elemen, folder "Panel HMI Selanjutnya") kami menentukan momen penekanan. Di editor blok ini, kita akan membuat halaman 4 dan mengisinya dengan elemen-elemen yang menarik bagi kita.



Dan mengatur blok.



Menggunakan blok B49 - “Rtrig” (pustaka elemen, folder “Pemicu”), pilih tepi depan sinyal ketika tombol “Selesai” ditekan dan tuliskan ke dalam variabel “Pengeditan akhir”.
Juga di bagian depan ini, kita akan membaca nilai variabel yang menyimpan pengidentifikasi bidang yang diedit menggunakan blok B54 - "Dapatkan Parameter" (pustaka elemen -> folder "Panel HMI Berikutnya" -> folder "Elemen"). Blokir pengaturan.



Kami menempatkan nilai yang diperoleh ke dalam variabel "Jumlah bidang yang diedit".
Dan dengan dorongan yang sama, kita akan langsung membaca nilai baru dari bidang teks menggunakan blok B50 - "Get Parameter" (elemen library -> folder "Nextion HMI Panel" -> folder "Elements"). Blokir pengaturan.



Kami mengubah nilai baru dari string menjadi angka dalam format Float menggunakan blok B51 - "Konversi string" (pustaka elemen, folder "Type Conversion"). Blokir pengaturan.



Kami mengalikan angka dengan 10 menggunakan blok B52 - “MUL (*)” (pustaka elemen, folder “Matematika”), mengubah tipe menjadi Integer menggunakan blok B53 - “Mengubah Float ke Integer” (pustaka elemen, folder “Jenis Konversi”) dan dimasukkan ke dalam variabel "Nilai baru".

Papan 10 - "Memproses hasil pengeditan nilai"



Menggunakan B55 - blok "Pembanding" (perpustakaan elemen, folder "Perbandingan") kami menentukan bidang mana yang diedit, dan tergantung pada hasilnya, tulis nilai dari variabel "Nilai baru" dengan momentum di variabel "Akhir pengeditan" menjadi salah satu dari dua variabel, di "Setpoint untuk mematikan kipas x10" atau "Setpoint untuk mematikan kipas x10". Juga dengan dorongan yang sama kami memberikan perintah panel untuk pergi ke halaman kontrol menggunakan blok B58 - "Pergi ke halaman" (perpustakaan elemen, folder "Nextion HMI Panel" -> "Halaman" folder). Blokir pengaturan.



Dewan 11 - “Nilai Pengaturan Penulisan untuk Panel dan EEProm”



Menggunakan blok B59 - "Detektor untuk mengubah angka" (pustaka elemen, folder "Elemen dasar"), kami menentukan fakta perubahan nilai oleh variabel "Fan On Setpoint x10". Impuls pendek terbentuk pada blok keluaran pada saat mengubah nilai pada input "Nilai". Dengan pulsa ini, nilainya ditulis ke memori non-volatile controller. Ini dapat dilakukan dengan menggunakan blok B65 - "Menulis ke EEPROM" (perpustakaan elemen, folder "EEPROM"). Blok dikonfigurasi menggunakan editor blok.



Sebelum menulis variabel ke EEPROM, Anda harus membuatnya di sana. Untuk melakukan ini, klik tombol "Buat" di editor blok. Jendela untuk membuat variabel terbuka.



Di dalamnya kita mengatur nama variabel dan jenisnya. Setelah mengklik tombol siap, blok akan dilampirkan ke variabel ini.



Juga, oleh sinyal tentang perubahan variabel, nilainya dibagi dengan konstanta tipe Float sama dengan 10 menggunakan blok B61 - “DIV (/)” (pustaka elemen, folder “Matematika”), berubah menjadi string menggunakan blok B62 - “Konversi string” (elemen library, folder “type conversion”), dan dikirim ke panel di bidang yang sesuai menggunakan blok B63 - “Set Parameter” (library elemen, folder “Nextion HMI Panel” -> folder “Elements”). Pengaturan untuk blok ini.



Logika kendali oleh variabel “Fan off setting x10” adalah sama, Block settings adalah sebagai berikut.

Blok B65.



Blok B68.



Sekarang kami akan memastikan bahwa pengaturan dibaca dari EEPROM pada saat controller dimulai. Untuk melakukan ini, masukkan papan baru di bagian paling atas proyek sehingga sirkuit yang terletak di atasnya dijalankan terlebih dahulu. Untuk melakukan ini, pilih latar depan dan klik tombol "Masukkan kartu di depan yang dipilih".



Beri nama papan baru "Membaca pengaturan dari EEPROM". Papan

1.



Menggunakan blok ²72 - “Rtrig” (pustaka elemen, folder “Pemicu”) kami membuat satu pulsa pendek ketika pengontrol dihidupkan. Menurut dorongan ini, nilai yang dibaca dari memori non-volatile dicatat dalam variabel “Setpoint untuk menyalakan kipas x10” dan “Setpoint untuk mematikan kipas x10”. Ini terjadi menggunakan blok B71 dan B73 - "Membaca dari EEPROM" (perpustakaan elemen, folder "EEPROM"). Blok diberi parameter menggunakan editor blok.



Parameter blok B71.



Variabel baca dipilih dalam EEPROM dengan menekan tombol "Pilih". Jendela pemilihan variabel terbuka.



Parameter blok B73.



Nah, dewan terakhir dalam proyek ini.

Papan 12. "Kontrol kipas"



Jika suhu saat ini telah melebihi pengaturan "Kipas pada setpoint x10", ini akan dideteksi oleh unit perbandingan B69 dan atur pemicu B70 untuk menyatakan 1, dan ketika suhu turun di bawah pengaturan "Kipas x10 dari setpoint" itu akan dideteksi oleh blok B71, yang mengatur pemicu B70 ke status 0. Keadaan pemicu disediakan ke unit output yang terkait dengan kipas.

Arsipkan dengan kode sumber proyek.

Demo video

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


All Articles