📌 Obiettivo del Capitolo:
Fornire una guida dettagliata sull’uso dei sottoprogrammi CNC, con focus su M98, M99 e G65. Verranno forniti esempi pratici e commentati, spiegando come scrivere ed eseguire sottoprogrammi per migliorare l’efficienza e ridurre il codice.
🔹 1. Introduzione ai Sottoprogrammi CNC
I sottoprogrammi vengono utilizzati per evitare ripetizioni inutili nel codice e migliorare la leggibilità e l’efficienza di un programma CNC. Sono molto utili quando:
✅ Un’operazione deve essere ripetuta più volte (forature, tasche, contornature)
✅ Si vuole standardizzare una sequenza di operazioni (ad esempio, azzeramento, cambio utensile, raffreddamento, ecc.)
✅ Si lavora su più pezzi identici senza dover riscrivere il codice principale
📌 Tipologie di sottoprogrammi CNC:
| Tipo | Descrizione | Codice G/M |
| Sottoprogramma locale | Definito all’interno dello stesso programma principale | M98 e M99 |
| Sottoprogramma esterno | Salvato in un file separato, richiamabile da diversi programmi | M98 |
| Macro parametrica | Permette di passare parametri per eseguire operazioni flessibili | G65 |
💡 Concetto chiave:
L’uso corretto dei sottoprogrammi riduce il codice, previene errori e migliora la scalabilità dei programmi CNC.
🔹 2. Uso di M98 e M99 per i Sottoprogrammi Locali
📌 Sintassi Generale di M98:
gcode
CopiaModifica
M98 P#### L##
🔍 Spiegazione dei parametri:
- P#### → Numero del sottoprogramma da richiamare
- L## → Numero di ripetizioni del sottoprogramma
📌 Sintassi Generale di M99:
gcode
CopiaModifica
M99
🔍 M99 viene utilizzato per terminare un sottoprogramma e tornare al programma principale.
📌 Esempio 1: Esecuzione di un Sottoprogramma per una Foratura Ripetuta
gcode
CopiaModifica
G21 G17 G90 ; Imposta unità in mm, piano XY e modalità assoluta
M98 P1000 L3 ; Richiama il sottoprogramma O1000 per 3 volte
M30 ; Fine programma principale
O1000 ; Inizio sottoprogramma O1000
G0 X50 Y50 ; Spostamento rapido alla posizione del foro
G81 Z-10 R2 F300 ; Ciclo di foratura
G80 ; Annulla ciclo di foratura
M99 ; Ritorna al programma principale
🔍 Spiegazione:
1️⃣ M98 P1000 L3 → Richiama il sottoprogramma O1000 per 3 volte
2️⃣ O1000 → Definisce il sottoprogramma
3️⃣ M99 → Termina il sottoprogramma e torna al programma principale
💡 Nota:
- I sottoprogrammi devono essere definiti alla fine del programma principale o in un file separato.
- Se il parametro L non viene specificato, il sottoprogramma viene eseguito una sola volta.
📌 Esempio 2: Sottoprogramma per il Cambio Utensile Automatico
gcode
CopiaModifica
M98 P2000 ; Richiama il sottoprogramma O2000
M30 ; Fine programma principale
O2000 ; Inizio sottoprogramma O2000
T3 M06 ; Cambio utensile
G43 H3 Z100 ; Attiva compensazione lunghezza utensile
M99 ; Ritorna al programma principale
🔍 Spiegazione:
- M98 P2000 → Richiama il sottoprogramma O2000
- T3 M06 → Cambia utensile
- G43 H3 → Attiva la compensazione della lunghezza utensile
- M99 → Ritorna al programma principale
💡 Suggerimento:
Questo sottoprogramma può essere riutilizzato ogni volta che è necessario un cambio utensile, evitando di ripetere codice in ogni nuovo programma.
🔹 3. Uso di G65 per le Macro Parametriche
📌 G65 permette di passare parametri a un sottoprogramma per renderlo più flessibile.
📌 Sintassi Generale di G65:
gcode
CopiaModifica
G65 P#### X… Y… Z… F…
🔍 Spiegazione dei parametri:
- P#### → Numero del sottoprogramma da richiamare
- X, Y, Z, F → Parametri passati al sottoprogramma
📌 Esempio 3: Sottoprogramma Parametrico per Forature Multiple
gcode
CopiaModifica
G21 G17 G90
G65 P3000 X50 Y50 Z-10 F300 ; Passa parametri al sottoprogramma
G65 P3000 X100 Y50 Z-15 F250
M30
O3000 ; Inizio sottoprogramma O3000
G0 X#24 Y#25 ; Spostamento alla posizione passata con X e Y
G81 Z#26 R2 F#9 ; Foratura con profondità e feed rate personalizzati
G80 ; Annulla ciclo
M99 ; Ritorna al programma principale
🔍 Spiegazione:
1️⃣ G65 P3000 X50 Y50 Z-10 F300 → Passa i valori al sottoprogramma O3000
2️⃣ G0 X#24 Y#25 → Sposta il mandrino alla posizione specificata
3️⃣ G81 Z#26 R2 F#9 → Esegue la foratura con la profondità e la velocità di avanzamento definite nei parametri
💡 Nota:
- I parametri vengono assegnati automaticamente a variabili di sistema (#24, #25, ecc.)
- Questo metodo permette di eseguire lo stesso ciclo con coordinate e velocità diverse senza duplicare il codice
🔹 4. Confronto tra M98/M99 e G65
| Caratteristica | M98 / M99 | G65 |
| Tipo di sottoprogramma | Standard | Parametrico |
| Può passare parametri | ❌ No | ✅ Sì |