CNC dalam lokakarya hobi (bagian 3)



Awalnya, saya berencana membatasi diri pada dua posting ( satu , dua ) tentang percobaan CNC saya. Tapi, topiknya ternyata menarik bagi banyak orang, oleh karena itu, saya masih sedikit mengungkapkannya. Dalam posting ini kita akan berbicara tentang menulis perangkat lunak buatan sendiri untuk mengendalikan CNC amatir.

Kata Pengantar


Saya tidak tahu apakah saya berhasil memotivasi seseorang dengan posting pertama, tetapi beberapa komentar saya sendiri memberikan pemikiran yang baik. Terima kasih khusus kepada @evilruff untuk foto laboratoriumnya dan untuk videonya dengan bahasa Korea yang keren . Setelah menonton keduanya, kompartemen sarung tangan saya di lantai bawah tidak lagi terasa nyaman.

Mengumpulkan kekuatannya, pada akhir pekan dia membawa sesuatu yang samar-samar mengingatkan ketertiban dan akhirnya melakukan 2 hal yang akan dia lakukan setengah tahun yang lalu.

Pertama, dia mengganti sepotong kayu lapis yang berfungsi sebagai meja pengorbanan. Saya menggunakan kayu lapis ini dari saat membeli mesin, mengosongkannya dengan sekrup dan membangun semua jenis desain gila dari tongkat dan irisan. Semua itu agar bagian tidak pergi pada penerbangan yang tidak terduga selama penggilingan.

Mungkin seseorang membutuhkan hack seumur hidup: mereka membuat meja baru dari papan dek plastik (dijual di Castorama):



Dia melesat papan langsung ke meja aluminium asli. Bonusnya adalah lekukan yang nyaman untuk klem benda kerja dan pemasangan cepat tabel pengisi. Segala sesuatu tentang semuanya butuh beberapa jam dan ~ 1100r.

Dan kedua, akhirnya, ia menulis perangkat lunak yang kurang lebih dapat digunakan untuk mengelola fungsi-fungsi CNC yang tidak standar. Ini akan menjadi cerita utama.

Pernyataan masalah


G-code untuk operasi yang dijelaskan pada bagian kedua adalah yang paling sederhana. Namun, proses pengaturannya sendiri tidak bisa disebut cepat.

Bagaimana ini bisa terjadi?


Sebagai contoh, untuk aditif itu perlu: mengetahui lebar panel, menghitung berapa banyak lubang seharusnya, menghitung jarak yang tepat di antara mereka, membuat file, menulis kode-g, memuatnya ke dalam Mach3. Semua ini membutuhkan waktu paling lama sekitar 15 - 20 menit. Dalam hal ini, keunggulan mesin digital berkurang secara signifikan dibandingkan dengan perkakas tangan, yang pada saat bersamaan dapat membuat banyak lubang.

Apa yang ingin saya dapatkan


Dalam hal aditif yang sama, saya ingin mendapatkan program di mana, dalam antarmuka yang sangat sederhana, saya akan memasukkan lebar dan ketebalan panel dan tekan tombol untuk memulai proses pengeboran jumlah lubang pengisi yang diinginkan pada jarak yang sama satu sama lain.

Cari solusinya


Hal pertama yang terlintas dalam pikiran adalah menulis program otonom yang akan langsung berinteraksi dengan port paralel. Googling cepat menunjukkan bahwa tugas menulis ke lpt cukup bisa dipecahkan, tetapi iblis, seperti yang Anda tahu, bersembunyi secara detail. Dengan studi lebih lanjut tentang masalah ini, saya menyadari bahwa Anda dapat terjebak di sini dengan serius dan untuk waktu yang lama. Selain itu, solusi seperti itu tidak akan fleksibel: untuk komputer lain, misalnya dengan USB, itu tidak akan berfungsi.

Ada opsi untuk berurusan dengan Mach3 SDK. Dalam proses mengumpulkan informasi tentang pembuatan mach-plugins, saya menemukan solusi yang menarik. Ini menjelaskan bagaimana menggunakan mekanisme OLE Anda dapat menarik Mach3 dari aplikasi pihak ketiga. Saya bukan ahli dalam teknologi Microsoft, tetapi setelah melihat diagonal manual pada Mach3 SDK, jika saya benar memahami ide utama, tidak ada peluru perak, plugin menggunakan metode publik yang sama dari objek COM Mach3. Saya tidak akan menggambar ulang antarmuka Mach3, jadi perbedaan bagi pengguna antara aplikasi plugin dan standalon hanya bahwa plugin dapat diakses dari menu Mach3, dan aplikasi melalui ikon pada desktop XP.

Aplikasi terpisah tampaknya lebih disukai bagi saya. Dalam hal ini, secara teoritis, saya bisa segera meluncurkan program saya setelah memuat komputer, yang akan memuat Mach3 dengan lokomotif uap (alih-alih memuat Mach3 pertama dan kemudian menggali ke dalam menu untuk meluncurkan plug-in).

Ambil pedang


Terakhir kali saya harus menulis aplikasi desktop asli untuk Windows adalah setahun, 2006, dan di Delphi. Sejak itu, teknologi web dengan Linux mereka benar-benar menghabiskan saya. Karenanya, sekarang saya tidak punya preferensi khusus dalam bahasa apa untuk membuat program windows. Contoh sederhana yang ditemukan ditulis dalam bahasa C #, bahasa ini dipilih sebagai kelinci percobaan.

Saya tidak akan memposting semua kode aplikasi yang dihasilkan di sini (jika Anda mau, Anda dapat menemukannya di github menggunakan tautan di bagian bawah posting). Saya akan menjelaskan hal-hal dasar. Semua percobaan saya lakukan pada mesin virtual dengan WinXP SP3, VS 2003 dan Mach3 Versi R3.043.062. Bagi mereka yang percaya bahwa lebih baik melihat tautan ke video di Youtube satu kali, yang saya mengerti. Di bawah ini adalah transkrip dari sorotan.

Persiapan


  1. Untuk Visual Studio untuk mengambil komponen Mach3 dengan benar, itu harus terdaftar dengan benar di registri. Untuk melakukan ini, unduh file Mach3Registry.reg
  2. Luncurkan Mach3Registry.reg
  3. Kami mulai VS, kami membuat proyek aplikasi jendela di C #
  4. Di blok Solution Explorer, klik kanan pada Referensi, pilih Tambahkan Referensi dari menu. Di jendela yang terbuka, klik People dan cari Mach3.exe



    Jika semuanya benar, sebuah baris akan muncul di daftar Referensi, siapa sangka ...
  5. 5. Selanjutnya, gambar UI, tutup penangan, implementasikan algoritma ...

Interaksi dengan Mach3


Kami menghubungkan pustaka yang diperlukan, mendeklarasikan variabel (Form1.cs)

... using System.Runtime.InteropServices; using Mach4; //   Mach namespace Cnc { public class Form1 : System.Windows.Forms.Form { private IMach4 _mach; private IMyScriptObject _mInst; ... //      Mach3 private void GetMachInstance() { try { _mach = (IMach4) Marshal.GetActiveObject("Mach4.Document"); _mInst = (IMyScriptObject) _mach.GetScriptDispatch(); } catch { _mach = null; _mInst = null; } } ... 

Penggunaan:

 GetMachInstance(); // if(_mInst != null) { _mInst.DoOEMButton(1003); //    Stop  Mach3 _mInst.Code("G00 X100"); //  G-code _mInst.GetOEMDRO(800); //     X } 

Kode tombol dan nilai parameter dapat dilihat di wiki: OEM_DROs dan OEM_Buttons (mereka tidak memiliki wiki, nilai parameter tidak ditampilkan dalam tabel, saya melihat tab "Lihat sumber").

Versi pertama dari program ini bekerja seperti ini: sesuai dengan parameter yang ditetapkan, kode-g dihasilkan yang frame-by-frame (mis. Baris demi baris) dieksekusi oleh metode _mInst.Code . Dan itu adalah kesalahan saya. Dalam lingkungan debugging pada mesin virtual, semuanya bekerja dengan baik. Di Mach3, angka yang benar dalam koordinat berlari. Tetapi ada masalah saat mentransfer ke komputer mesin. Carriage bergerak dengan benar, tetapi spindle tidak menyala.

Tampaknya manajemen router dan spindle di Mach bekerja di utas yang berbeda. Ternyata perintah gerakan (G ...) dieksekusi secara berurutan ketika mereka memasukkan metode _mInst.Code di satu utas, dan perintah kontrol spindel (M3, M5), terlepas dari yang pertama, dieksekusi di utas lainnya. Akibatnya, spindel dihidupkan (M3) dan segera dimatikan (M5), saat menggerakkan media berjalan seperti biasa.

Saya mencoba berbagai opsi, penundaan yang terhubung, mencoba mengarahkan seluruh kontrol kode-g menjadi satu baris dan mengirimkannya dalam satu bagian ke _mInst.Code. Sebagai hasilnya, saya memilih solusi "di dahi": Saya hanya mengarahkan kode yang dihasilkan ke dalam file, saya membuka file ini secara terprogram dalam Mach3 dan di sana saya menekan tombol "Start" secara terprogram. Cuplikan kode kerja:

 _mInst.LoadFile("C:\\tmp\\gcode.txt"); System.Threading.Thread.Sleep(2000); _mInst.DoOEMButton(1000); 

Jeda antara mengunduh file dan menekan tombol diperlukan agar Mach membuka file. Mungkin ada beberapa cara yang lebih elegan. Jika ada yang tahu, tulis di komentar.

Bonus tambahan dari solusi ini adalah bahwa sekarang Anda dapat mengamati visualisasi proses pemrosesan di antarmuka Mach.

Apa yang akhirnya terjadi


Selanjutnya, secara singkat tentang aplikasi yang dihasilkan. Secara terpisah, saya akan berbicara tentang UI untuk setiap operasi.

Potong




Semuanya cukup transparan di sini. Parameter S diperlukan untuk mengkompensasi ukuran L jika benda kerja tidak diperbaiki pada titik nol sepanjang X (atau sepanjang Y saat memotong sepanjang).

Aditif


Sebagai tambahan, konfigurasi 2 snap dimungkinkan. Yang pertama dengan penggiling untuk lubang pengeboran akhir. Dan yang kedua dengan spindle biasa untuk pengeboran di bidang perisai (untuk beberapa alasan saya menyebutnya "aditif frontal").

Wajah aditif




Dengan aditif akhir, penting untuk secara tepat menetapkan nol di sudut kanan bawah benda kerja (saya memiliki sudut sisi berhenti dan meja di sana). Dengan bor di atas kayu, ini tidak sulit dilakukan - ada ujung tajam yang perlu Anda masuki ke sudut ini. Memperbaiki benda kerja di atas meja, saya hanya meletakkannya di bor.


Tanpa mengubah peralatan dengan cara yang sama, saya membuat lubang timbal balik dengan memperbaiki benda kerja secara vertikal:


Parameter X diperlukan untuk menghubungkan panel dengan lebar yang berbeda (misalnya, ketika panel bawah dan atas kabinet lebih lebar dari panel samping dengan ketebalan pintu).

Aditif frontal




Peralatan untuk bagian depan adalah gelendong biasa. Jenis aditif ini digunakan ketika Anda perlu mengebor lubang di permukaan horizontal, tidak hanya di sepanjang tepi tetapi juga di suatu tempat di tengah. Misalnya, jika ada beberapa kompartemen di kabinet dan di samping dinding samping ada yang internal. Jika panel lebih panjang dari panjang mesin, aditif dapat dibuat dalam 2 set dengan putaran 180 derajat bagian. Dalam hal ini, parameter X juga berguna.

Berputar




Bagi saya, kesulitan utama dalam menyiapkan kode-g dengan jalur belok adalah tidak berlebihan dengan kedalaman perendaman maksimum disk. Faktanya adalah bahwa di pintu keluar dari Inkscape satu baris diperoleh dan belok terjadi dalam satu lintasan. Karena itu, saya harus membuat kode terpisah untuk membuat silinder benda kerja dan hanya setelah itu bagian utama yang membuat formulir diluncurkan. Dan ada beberapa batasan pada formulir ini. Khususnya, perlu untuk memastikan bahwa lintasan tidak terlalu dalam. Saya mencoba untuk tidak melampaui 10 - 15 mm dari tingkat silinder asli.

Semua masalah ini diselesaikan dalam program baru. Kerjanya seperti ini: memuat "mentah" kode-g yang diperoleh dari Inkscape, atur ukuran sisi batang benda kerja dan tunjukkan kedalaman pemrosesan maksimum dalam 1 lintasan (semakin keras kayu, semakin sedikit kedalaman ini). Berdasarkan pada source g-code dan parameter, program akan menghitung jalur aman dan mengirimkannya ke CNC.

Rencana masa depan


Program ini sangat menyederhanakan rutinitas, tetapi masih jauh dari sempurna. Pertama, akan perlu untuk mengoptimalkan algoritma untuk pengeboran lubang yang dalam (bor tersumbat dengan chip dan panas berlebih, Anda perlu berayun bolak-balik). Kedua, muncul ide untuk membuat perpustakaan berupa formulir. Yaitu beberapa bentuk standar (seperti silinder, kerucut, rolling pin, dll.) dengan kemampuan untuk menyesuaikan dimensi tanpa perlu membuat lintasan dalam program pihak ketiga.

Referensi


→ Mach3Registry.reg
→ Mach3 SDK dan program lainnya
→ Repositori proyek di Github (saya minta maaf kepada sharpoviks untuk tiang tembok di muka - ini adalah program pertama saya di C #).

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


All Articles