Subprogram M98/M99: tulis bentuk berulang sekali dan panggil berkali-kali
Menjelaskan dengan contoh struktur pemanggilan subprogram menggunakan M98 dan kembali dengan M99, nomor P dan jumlah pengulangan L, cara membuat slot yang sama di beberapa posisi dengan subprogram inkremental, serta jenis kesalahan pemanggilan.
Mengapa menggunakan subprogram?
Memotong slot yang sama di lima tempat atau mengerjakan kontur yang sama beberapa kali pada kedalaman berbeda adalah hal umum. Menyalin dan menempelkan blok yang sama setiap kali membuat program panjang, dan memperbaiki satu dimensi berarti memperbaiki kelima tempat. Melewatkan satu saja akan menghasilkan benda kerja cacat karena salah satu dari lima bagian memiliki ukuran berbeda.
Subprogram memisahkan bagian berulang menjadi program tersendiri yang dipanggil program utama saat diperlukan. Bentuk hanya dikelola di satu tempat, dan program utama cukup menyatakan "di mana dan berapa kali".
Memanggil dan kembali
| Perintah | Arti | Contoh |
|---|---|---|
M98 P_ | Memanggil program dengan nomor P (nomor O) | M98 P3100 |
L_ atau digit awal P | Jumlah pengulangan | L3 → 3 kali |
M99 | Kembali ke baris setelah blok pemanggil | Baris terakhir O3100 |
M99 P_ | Kembali, tetapi melompat ke nomor urut yang ditentukan | Digunakan untuk struktur percabangan dan loop |
Contoh: tiga slot dengan subprogram inkremental
Subprogram O3100 ditulis dalam mode inkremental G91. Dari posisi saat ini, pahat turun 6 mm, memotong slot 30 mm pada X, naik 6 mm, lalu bergerak 10 mm pada Y sambil kembali ke X awal. Posisi akhir menjadi awal pengulangan berikutnya, sehingga mengulangi pemanggilan yang sama tiga kali menghasilkan tiga slot berjarak 10 mm.
Memanggil subprogram O3100 tiga kali dengan L3 untuk memotong tiga slot berjarak 10 mm
O3007
T1 M6
G21 G90 G17 G94
G54
S3000 M03
G00 X0. Y0. Z5.
M98 P3100 L3
G90 G00 Z50.
M30
O3100
G91 G01 Z-6. F100
X30. F300
G00 Z6.
X-30. Y10.
M99Gambar di atas adalah hasil CNC Path Analyzer untuk program ini (cepat 8 segmen, pemotongan linear 6 segmen).
Aturan untuk program utama
- Pulihkan mode: subprogram berakhir dalam G91, jadi perintahkan
G90lagi dalam program utama tepat setelah kembali.G90 G00 Z50.pada contoh melakukan hal ini. Menulis hanyaZ50.tanpa G90 ditafsirkan sebagai "50 mm di atas posisi saat ini", bukan "ketinggian 50". Di sini gerakannya naik sehingga tidak terlalu berbahaya, tetapi pada blok pendekatan pahat berikutnya hal itu dapat menyebabkan tabrakan. - Posisi awal: subprogram inkremental memberikan hasil berbeda tergantung posisi saat dipanggil. Perintahkan posisi awal dengan jelas dalam koordinat absolut tepat sebelum pemanggilan.
- Status kompensasi dan siklus: pemanggilan saat kompensasi radius pahat atau siklus tetap aktif dapat membuat gerakan dalam subprogram berperilaku tak terduga. Rapikan status modal dengan sengaja sebelum dan sesudah pemanggilan.
- Posisi M30: jika subprogram ditempatkan dalam file yang sama, letakkan setelah
M30program utama. Program utama berakhir pada M30 sehingga subprogram tidak dijalankan secara tidak sengaja.
Jumlah pengulangan dan perhitungan waktu siklus
Satu kali subprogram memotong Z 6 mm (F100) dan X 30 mm (F300): 3.6 detik dan 6 detik, sehingga 9.6 detik per eksekusi dan sekitar 29 detik pemotongan murni untuk tiga eksekusi. Mengubah jumlah pengulangan menjadi L5 hanya mengubah satu karakter program utama dan menghasilkan lima slot serta sekitar 48 detik pemotongan. Ini menunjukkan bagaimana struktur pengulangan menyederhanakan perubahan program dan perkiraan waktu. Metode perhitungannya dibahas lebih rinci dalam perhitungan waktu pemesinan.
Jenis kesalahan pemanggilan
Di dalam alat, program yang dipanggil dari file terpisah dapat dimuat bersama program utama, dan nomor P ditautkan ke nomor O di dalam file, bukan ke nama file.
| Kesalahan | Penyebab | Yang ditampilkan CNC Path Analyzer |
|---|---|---|
| Program yang dipanggil tidak ditemukan | Tidak ada program dengan nomor O yang cocok dengan P | Baris pemanggilan dan nomor yang tidak ditemukan |
| Nomor O duplikat | Dua program atau lebih memiliki nomor yang sama | Peringatan bahwa program yang digunakan tidak dapat ditentukan |
| M99 tidak ada | Subprogram tidak berakhir dan berlanjut ke program berikutnya | Peringatan tidak ada perintah kembali |
| Pemanggilan tanpa akhir | Program terus saling memanggil, atau sebuah program memanggil dirinya sendiri | Perhitungan berhenti pada batas rekursi atau eksekusi |
Pertanyaan umum
Bisakah subprogram memanggil subprogram lain?
Apa perbedaan M98 dengan pemanggilan makro G65?
G65 adalah pemanggilan makro yang meneruskan argumen (A, B, C…) sebagai variabel. Perintah ini digunakan untuk memanggil bentuk yang sama dengan dimensi berbeda, sedangkan M98 mengulangi operasi yang sama tanpa argumen.