Otomatisasi rumah dengan dukungan untuk bahasa pemrograman industri, atau BluePill x405

Mulai dari Ulasan


Jadi, kawan-kawan terkasih, kami memulai ulasan dengan apa yang ingin kami soroti di sini. Dalam artikel ini saya ingin mempertimbangkan unsur-unsur yang khas untuk membangun program pengontrol industri, dan menunjukkan bagaimana mereka dapat diterapkan pada sistem otomatisasi rumah. Dan yang paling penting adalah menemukan jawaban atas pertanyaan - apa yang dibutuhkan untuk ini.

Otomasi Rumah - Aplikasi


Home sweet home ... Apakah Anda benar-benar membutuhkan pengontrol? Jawabannya sederhana - semuanya tergantung pada apa yang tersedia di rumah seperti itu. Tentu saja, jika Anda hanya memiliki apartemen, dan otomasi terdiri dalam mengelola pusat media rumah Anda dan penyejuk udara di musim panas, semua yang ditulis di bawah ini dapat benar-benar tidak menarik. Tetapi jika hobi Anda tidak hanya mendorong sofa (apa yang ada untuk disembunyikan, saya sendiri terkadang memperhatikan hal ini), maka artikel itu bisa sangat berguna.

Jadi, mari kita coba memahami bagaimana cara improvisasi dapat menyederhanakan kehidupan kita yang sulit. Sebagai contoh, kami menggunakan situasi sebenarnya - satu pompa di sumur 70 meter, yang dilipat dua tetangga. Mereka memasangnya di mata air, ketika ada banyak air di sumur, dan secara umum, airnya hangat dan bagus. Tetapi waktu berlalu, dan pertanyaan mulai - untuk mendapatkan air dari kedalaman seperti itu, Anda membutuhkan listrik, yang harus Anda bayar. Ruang bawah tanah dan lantai teknis kebanjiran beberapa kali - mereka hanya lupa mematikan pompa ... Ya, dan itu tidak nyaman untuk mengontrolnya secara manual - Anda perlu menutup satu keran, buka yang lain, kemudian nyalakan pompa dan perhatikan ketinggian air di dalam tangki.

Apakah layak untuk menghabiskan waktu Anda di sana, yang sudah kurang? Pikiran yang ingin tahu mulai mencari solusi, dan tentu saja, menemukannya! Daftar tugas untuk implementasi lahir.

  1. Pembayaran untuk listrik yang dikonsumsi tidak harus umum - itu artinya, kami akan memasang dua starter, yang masing-masing terhubung ke meteran listriknya sendiri.
  2. Pompa tidak boleh gagal karena kekurangan air - itu artinya kita akan memasang sensor untuk langkah "kering" pompa. Jika tidak ada air, jangan menghidupkan pompa, dan jika berfungsi, kami berhenti darurat.
  3. Pompa tidak boleh berjalan terlalu lama - misalnya, lebih dari 25 menit. Melebihi waktu ini menunjukkan bahwa sistem meninggalkan mode operasi normal.
  4. Pengisian kontainer harus dilakukan tanpa campur tangan manusia, yaitu secara otomatis, dan ini berarti mulai dari level bawah dan berhenti di level atas.
  5. Hanya satu tangki yang harus diisi, yaitu, kami memasang dua katup - untuk memasok air untuk satu set di setiap tangki.
  6. Jeda antar pompa dimulai setidaknya 30 menit.
  7. Gangguan daya seharusnya tidak memengaruhi algoritme operasi, jika aktif. Terlepas dari segalanya, algoritme harus diselesaikan.

Tugasnya sederhana, dan bisa diselesaikan dalam seratus, jika tidak seribu cara. Tetapi judul artikel itu berbicara sendiri, dan kita akan menempuh jalan yang sulit. Mari kita gunakan pengontrol virtual (untuk saat ini, tentu saja), yang akan melakukan semua ini.

Bagaimana cara kerja pengontrol industri?


Tentu saja, kami akan mengklarifikasi segera - kita sedang berbicara tentang apa yang disebut pengontrol logika yang dapat diprogram, atau PLC. Apa yang disembunyikan di bawah singkatan ini? Dan inilah yang disembunyikan - beragam solusi perangkat keras yang luar biasa, sejumlah besar produk dan utilitas perangkat lunak. Sebuah pertanyaan masuk akal segera muncul - bagaimana cara menggunakan semua kebaikan ini? Apakah benar-benar perlu untuk mempelajari bagian materi dari awal dan menemukan waktu dan uang untuk setiap perangkat baru untuk mengambil kursus pelatihan dan mendapatkan keterampilan yang diperlukan untuk bekerja dengan setiap perangkat?

Jawabannya adalah tidak, itu tidak perlu. Semuanya sudah dilakukan sebelum kita. Tinggal mempelajari dan belajar bagaimana menggunakannya. Inilah yang saya usulkan untuk dilakukan lebih jauh - sedikit pencelupan dalam standar IEC 61131. Mari kita ungkapkan bagian apa yang terkandung dalam standar ini.

  • IEC 61131-1: Informasi umum.
  • IEC 61131-2: Persyaratan dan pengujian peralatan.
  • IEC 61131-3: Bahasa Pemrograman.
  • IEC 61131-4: Panduan Pengguna.
  • IEC 61131-5: Komunikasi.
  • IEC 61131-6: Keselamatan fungsional.
  • IEC 61131-7: Pemrograman kendali fuzzy.
  • IEC 61131-8: Pedoman untuk penggunaan dan implementasi bahasa pemrograman.
  • IEC 61131-9: Antarmuka komunikasi digital satu titik untuk sensor kecil dan aktuator.
  • IEC 61131-10: PLC membuka format pertukaran berbasis XML.

Tetapi kami tidak akan mempelajari topik standar, dan secara sederhana, controller umumnya bekerja secara siklikal - polling status input, penerjemah mengeksekusi program kontrol, mengatur status output, melakukan tugas-tugas perawatan internal dan kembali lagi ke polling status input. Cukup membosankan, tetapi efektif dan efisien. Program kontrol adalah kode pseudo yang dibuat menggunakan lingkungan pemrograman, biasanya kode pseudo tersebut adalah urutan kode biner, yang tidak ada hubungannya dengan bahasa pemrograman biasa. Meskipun untuk pengguna disajikan dalam bentuk yang dapat dimengerti - untuk controller, pandangan yang sama sekali berbeda digunakan. Contoh yang baik adalah program kecil, disajikan dalam bentuk IL, LD dan dalam bentuk pengkodean biner untuk pengontrol (hmm, bahkan tidak ada istilah khusus). Di bawah spoiler, sebuah contoh kecil ditampilkan.

Opsi tampilan program


Jadi apa yang membuat program ini bermanfaat? Ya, dia tidak melakukan apa-apa - jika nilai merker M8010 adalah 1, maka 1. akan ditulis ke output dengan alamat Y377. Dengan demikian, hal yang sama untuk 0.
Salah satu keuntungan terbesar dari implementasi semacam itu adalah kemampuan untuk membongkar program dari memori pengontrol, membukanya untuk diedit dalam editor dengan cara yang dapat dimengerti oleh manusia, mengkompilasi (istilah ini tergantung di sini) dan memuatnya kembali ke dalam memori pengontrol. Selain itu, beberapa pengontrol bahkan menyimpan komentar dan nama variabel.

Bagaimana memprogram pengontrol?


Tentu saja, perangkat lunak khusus diperlukan. Setelah pencarian dan percobaan yang panjang, Autoshop v3.02 dari Inovance Control dipilih. Ini luar biasa karena gratis, tersedia untuk diunduh gratis dan mendukung pengontrol yang kompatibel dengan pengontrol Mitsubishi. Dan itu mendukung pekerjaan tidak hanya melalui port serial, tetapi juga melalui Ethernet. Tautan ke versi yang digunakan oleh kami, di bawah spoiler.

Tautan untuk mengunduh dari Yandex Disk

Nah, kami menginstal program dan sekarang pertanyaan lain - bagaimana cara menulis program ke controller kami? Karena kami akan bekerja dengan perangkat tertentu, kami akan menginstal driver khusus untuk port COM virtual. Untuk menyimpan kesimpulan, dan untuk menyederhanakan, saya memutuskan untuk menggunakan port USB board untuk koneksi. Driver di bawah spoiler.

Driver pada Yandex Disk

Setelah menginstal driver dan menghubungkan papan melalui mini-USB, Anda dapat memeriksa apakah semuanya berhasil dengan Anda. Untuk melakukan ini, klik kanan pada My Computer-Management-Device Manager-Ports (COM dan LPT). Anda akan melihat jendela seperti di bawah spoiler. Nomor port COM pada sistem Anda dapat bervariasi.

Pengelola perangkat


Sekarang Anda dapat memilih Pengaturan Alat-Komunikasi di menu AutoShop, pilih Serial di jendela yang muncul, tentukan nomor port dan klik tombol Test. Anda harus memiliki jendela seperti ini di bawah spoiler.

Koneksi yang berhasil ke papan tulis


Tetapi jika sesuatu tidak berhasil bagi Anda, tuliskan baik dalam PM atau dalam komentar. Kami pasti akan membantu.

Elemen program, tanpanya itu akan sedih


Selanjutnya, kami akan mempertimbangkan bahasa diagram tangga, atau yang disebut LD. Mari kita perhatikan hanya elemen-elemen yang akan kita gunakan nanti.

  • Input dan output terpisah. Mereka ditunjuk sebagai X dan Y. Dirancang untuk menerima dan mengeluarkan sinyal diskrit.
  • Area memori M merkers M. Dapat mengambil dua status - hidup dan mati.
  • Pengatur waktu ditetapkan T. Dirancang untuk menghitung waktu dari 0,1 hingga 3276,7 detik.
  • Area register D. Memiliki dimensi sel 16 bit, tetapi juga dapat dialamatkan sebagai sel 32 bit.

Kuda bulat dalam ruang hampa, atau register pengalamatan tidak langsung


Register pengalamatan tidak langsung ditunjuk V dan Z dan dapat dialamatkan dari V0 ke V7 dan dari Z0 ke Z7. Mengapa bisa digunakan? Mari kita lihat bagaimana umumnya mereka bekerja. Catatan D1000V0 yang tampak gila ini berarti bahwa alamat sel yang dihitung sebagai alamat D1000 ditambah nilai yang ditulis untuk register pengalamatan tidak langsung akan digunakan. Jika ada 15, maka kita akan menggunakan alamat sel D1015. Sangat nyaman ketika bekerja dengan array data atau dengan kontrol tabel - cukup bagi kami untuk mengubah nilai register indeks, dan kami mendapatkan nilai dari sel-sel memori yang ditangani. Tetapi sementara kami tidak akan menerapkannya, kami akan menyentuh ini di publikasi berikutnya.

Sedikit tentang visualisasi program, atau debugging online


Jika Anda seorang programmer dan baru saja selesai menulis sebuah program, langkah selanjutnya adalah debugging. Dan di sini muncul pertanyaan - bagaimana cara melakukannya. Sekali lagi, ada banyak opsi, tetapi saya akan berbicara tentang salah satu yang akan kita gunakan lebih lanjut. Editor lingkungan pemrograman memungkinkan Anda untuk menampilkan nilai bit dan variabel apa yang saat ini ada dalam memori pengontrol dengan menekan satu tombol. Contoh yang sangat terbuka adalah - di bawah tampilan spoiler offline dan online program di editor.

Tombol untuk beralih ke mode tampilan variabel


Jenis program dalam mode melihat nilai-nilai variabel


Jenis program dalam mode edit


Sedikit lagi tentang proses yang terjadi ketika Anda mengklik tombol Online. Program dengan cepat mengkompilasi daftar variabel yang terlihat, dan setelah selesai, menulisnya ke buffer controller tertentu. Setelah itu, pengontrol menyiapkan data dari daftar ini dan menempatkannya di buffer lain. Program membaca nilai dari buffer ini dan menampilkannya sebagai nilai pada diagram mimic. Jika Anda menggulirkan sedikit program di jendela tampilan dan mengubah variabel yang terlihat, siklus ini akan berulang lagi ...

Siapa yang memanggil Hamlet, atau di atas panggung BluePill x405


Pernahkah Anda memperhatikan bahwa pasar tidak menemukan motherboard sederhana seperti tablet biru, tetapi dilengkapi dengan prosesor seperti F405 dan lebih tinggi? Saya pribadi hanya menemukan batu F401, tetapi ini adalah level yang sedikit berbeda ... Saya mudah memanjat, dan untuk percobaan saya, tanpa berpikir dua kali, saya melakukan pembayaran di P-CAD 2006 tua yang baik dan memesan dari Cina di salah satu situs pemesanan cepat. Tentu saja, dalam warna itu adalah tablet hijau, tetapi dari segi makna saya memutuskan untuk meninggalkan nama BluePill, tetapi menunjukkan bahwa itu sudah x405. Hasil di bawah spoiler adalah foto papan BluePill x405.

Tampilan atas


Tampak bawah


Konsep dan gerber di github

Sedikit tentang mengapa papan ini sangat luar biasa? Bagaimanapun, hanya ada ribuan upaya untuk membuat klon bluepill! Tetapi perbedaannya adalah ini: Saya memasang firmware ke board ini, yang akan mengubahnya menjadi kernel yang menjalankan program yang kompatibel dengan pengontrol industri Mitsubishi dalam sistem perintah. Keajaiban ini dihitung pada 16 input, 16 output, 2 input analog, 3 UART dengan dukungan DE untuk RS485, 1 bus induk onewire. UART dapat bekerja sebagai RTU master bus modbus, dan sebagai budak. Dan mereka dapat bekerja sepenuhnya secara mandiri.
Tapi ini tidak semua - jika Anda menghubungkan baterai 3V ke pin VBAT, maka tidak hanya jam, tetapi juga timer, penghitung, merker, dan 1000 register tujuan umum pertama D akan mempertahankan nilainya, dan ada 8000 register.

Mengantisipasi pertanyaan, saya akan katakan segera - ya, perangkat lunak didasarkan pada sistem operasi waktu-nyata. Ya, DMA digunakan sedapat mungkin. Fitur-fitur ini memungkinkan bekerja tanpa perubahan signifikan dalam waktu siklus pada beban komunikasi yang tinggi. Versi ini adalah revisi kedua, direvisi dan ditambah.

Papan ini dapat diprogram sepenuhnya oleh GX FXDeveloper dan IEC Developer dan GX Works.

Nasib pompa dan dua tangki


Mari kita selesaikan masalah ini - terutama karena semua alat untuk ini tersedia. Agar tidak terlalu banyak, saya menulis sebuah program, memecahnya menjadi beberapa bagian (jaringan yang disebut, atau rantai kerja), dan saya akan menunjukkan masing-masing di sini dan memberikan komentar.

Net 1 - menjalankan program pertama


Register D1000 menyimpan waktu yang diperlukan untuk menekan pantulan kontak. Sebenarnya, ini sudah ada dalam program - tetapi saya ingin menunjukkannya dengan lebih jelas. Register D1001 bertanggung jawab atas waktu perlindungan pompa. Di dalamnya kita menulis 15.000, atau 1.500 detik. Selanjutnya, kami memiliki rantai pengaturan ulang cadangan - jika terjadi kesalahan, Anda dapat mengirim sinyal 1 ke input X14 dan memulai kembali papan. Dalam hal ini, 0 ditulis ke register D0 dan D1, dan merckers M98 dan M99 diatur ulang.

Net 2 - pemrosesan sinyal input


Di sini, dengan bantuan pengatur waktu, kami menyingkirkan pantulan kontak. Untuk melakukan ini, gunakan penundaan 200 milidetik. Untuk memastikan bahwa di program mendatang ketika mengubah alamat input kontak, tidak perlu menulis ulang banyak rantai, saya menggunakan merkers menengah (misalnya, M102). Perlu dicatat juga bahwa pedagang sistem M8003 digunakan di sini - ini akan hidup setelah siklus pertama pelaksanaan program telah berlalu. Tetapi M8002 Merker hanya aktif pada siklus pertama program, dan ini dapat dan harus digunakan untuk mengatur nilai awal.

Jaring 3 - pengisian tangki 1.


Pengisian tangki 1 benar-benar identik dengan pengisian tangki 2 dengan pengecualian alamat. Gambarnya tidak cocok sedikit - tetapi Anda lebih baik melihatnya hanya dengan membuka proyek. Apa yang luar biasa tentang unit kontrol ini? Kehadiran perlindungan dan kebuntuan yang memungkinkan mekanisme start dan stop shockless. Misalnya, setelah membuka katup 1, hanya setelah 700 ms akan dikeluarkan perintah untuk memulai starter, yang menghidupkan pompa.

Manajemen di sini tidak menyediakan mode manual. Juga, perlindungan terhadap operasi kering dan perlindungan terhadap operasi pompa yang terlalu lama diterapkan.

Net 5-6 - Manajemen Output


Dan di sini kita mengontrol keluaran sesuai dengan kunci.

Dari tugas-tugas tersebut, hanya koneksi interval perlindungan 30 menit sebelum memulai kembali yang tidak terpenuhi. Saya harus mengatakan segera - dalam versi ini hanya input X0-X3 dan output Y0-Y3 diimplementasikan, yang cukup untuk menguji materi dalam artikel ini. Pengikatannya adalah PA4-X0, PA5-X1, PA6-X2, PA7-X3 dan PB4-Y0, PB5-Y1, PB6-Y2, PB6-Y2, PB7-Y3.

Kecepatan Siklus Program - Metode Pengukuran Kakek


Ketika kita bertanya pada diri sendiri pertanyaan ini, langsung terlintas dalam pikiran untuk melakukan ini - untuk menulis ke controller sebuah program yang sangat besar dari sejumlah elemen identik, mendapatkan waktu eksekusi dan mendapatkan waktu eksekusi dari satu perintah. Dikatakan - dilakukan, di bawah program spoiler dan atas nama waktu eksekusi spoiler.

7995 langkah - 2,6 milidetik

Di sini, setiap langkah adalah satu perintah, dan kami mendapatkan 2,6 / 7995 = 0,325 mikrodetik. Tidak terlalu cepat, tapi tidak buruk.

FPU - menjadi atau tidak menjadi?


Sekarang mari kita tentukan seberapa cepat instruksi floating-point bekerja di firmware kami. Ada dua firmware, satu menggunakan FPU bawaan, dan lainnya dengan emulasi perangkat lunak. Program di bawah ini:

Program untuk menghitung waktu pelaksanaan suatu instruksi

Firmware di bawah ini berada di bawah spoiler, dan mereka tidak memiliki batasan

Dua firmware

Saat menggunakan FPU perangkat keras, waktu eksekusi program adalah 1,8 ms, atau 1,8 / 600 = 0,003 ms, atau 3 mikrodetik.

Sekarang ganti firmware - gunakan emulasi perangkat lunak. Hasilnya sudah berbeda - 2,5 ms, atau 2,5 / 600 = 0,0041 ms, atau 4,1 mikrodetik. Tidak buruk, tetapi perbedaannya cukup mencolok.

Kesimpulan


Terlepas dari volume artikel yang besar, masih ada banyak bahan yang baik untuk dibahas. Jadi, jika artikel ini menarik bagi Anda, maka artikel ini akan diikuti oleh yang lain. Tetapi saya ingin menemukan orang-orang yang berpikiran sama yang ingin bergabung dengan persimpangan industri dan domestik hanya dengan satu tujuan - sehingga alat-alat ini dapat diakses oleh orang awam yang sederhana.

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


All Articles