Sottoprogrammi M98/M99: scrivere una forma ripetuta una sola volta e richiamarla più volte
Spiega con un esempio la struttura della chiamata di un sottoprogramma con M98 e del ritorno con M99, il numero P e il conteggio di ripetizione L, come lavorare la stessa cava in più posizioni con un sottoprogramma incrementale e i tipi di errore di chiamata.
Perché usare i sottoprogrammi?
È comune lavorare la stessa cava in cinque posizioni oppure lo stesso profilo più volte a profondità diverse. Copiare e incollare ogni volta gli stessi blocchi allunga il programma e correggere una quota significa correggerla in tutti e cinque i punti. Dimenticarne anche uno produce un pezzo scartato, con una delle cinque lavorazioni di dimensione diversa.
Un sottoprogramma separa la parte ripetuta in un programma autonomo, che il programma principale richiama quando necessario. La forma viene gestita in un solo punto e il programma principale deve indicare soltanto "dove e quante volte".
Chiamata e ritorno
| Comando | Significato | Esempio |
|---|---|---|
M98 P_ | Chiama il programma con numero P (numero O) | M98 P3100 |
L_ o cifre iniziali di P | Numero di ripetizioni | L3 → 3 volte |
M99 | Ritorna alla riga successiva al blocco di chiamata | Ultima riga di O3100 |
M99 P_ | Ritorna, ma salta al numero di sequenza specificato | Usato per strutture di diramazione e ciclo |
Esempio: tre cave con un sottoprogramma incrementale
Il sottoprogramma O3100 è scritto in modalità incrementale G91. Dalla posizione attuale scende di 6 mm, lavora una cava di 30 mm lungo X, risale di 6 mm e si sposta di 10 mm lungo Y tornando alla X iniziale. La posizione finale diventa l'inizio della ripetizione successiva; ripetendo semplicemente tre volte la stessa chiamata si ottengono quindi tre cave distanti 10 mm.
Chiamata del sottoprogramma O3100 tre volte con L3 per lavorare tre cave distanti 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.
M99La figura sopra è il risultato dell’analisi di questo programma con CNC Path Analyzer (rapido 8 segmenti, taglio lineare 6 segmenti).
Regole per il programma principale
- Ripristino della modalità: il sottoprogramma termina in G91, quindi subito dopo il ritorno occorre comandare nuovamente
G90nel programma principale. Nell'esempio lo faG90 G00 Z50.. Scrivere soltantoZ50.senza G90 viene interpretato come "50 mm sopra la posizione attuale", non come "quota 50". Qui è un movimento verso l'alto e comporta pochi rischi, ma nel blocco di avvicinamento dell'utensile successivo potrebbe causare una collisione. - Posizione iniziale: un sottoprogramma incrementale produce risultati diversi in base alla posizione al momento della chiamata. Comandare chiaramente la posizione iniziale in coordinate assolute subito prima della chiamata.
- Stato delle compensazioni e dei cicli: una chiamata effettuata con compensazione del raggio utensile o ciclo fisso attivo può far comportare in modo inatteso i movimenti del sottoprogramma. Predisporre deliberatamente lo stato modale prima e dopo la chiamata.
- Posizione di M30: quando il sottoprogramma si trova nello stesso file, collocarlo dopo
M30del programma principale. Il programma principale termina a M30, evitando così l'esecuzione accidentale del sottoprogramma.
Numero di ripetizioni e calcolo del tempo ciclo
Una esecuzione del sottoprogramma taglia 6 mm in Z (F100) e 30 mm in X (F300): 3.6 secondi e 6 secondi, quindi 9.6 secondi per esecuzione e circa 29 secondi di taglio effettivo per tre esecuzioni. Cambiando il numero di ripetizioni in L5 si modifica un solo carattere del programma principale e si ottengono cinque cave e circa 48 secondi di taglio. Ciò mostra come una struttura ripetitiva semplifichi sia le modifiche del programma sia le stime dei tempi. Il metodo di calcolo è descritto più dettagliatamente in Calcolo del tempo di lavorazione.
Tipi di errore di chiamata
Nello strumento, i programmi richiamati contenuti in file separati possono essere caricati insieme al programma principale e il numero P viene associato al numero O all'interno del file, non al nome del file.
| Errore | Causa | Cosa mostra CNC Path Analyzer |
|---|---|---|
| Programma richiamato non trovato | Non esiste un programma con numero O corrispondente a P | La riga di chiamata e il numero non trovato |
| Numero O duplicato | Due o più programmi hanno lo stesso numero | Un avviso indica che non è possibile scegliere quale usare |
| M99 mancante | Il sottoprogramma non termina e prosegue nel programma successivo | Un avviso di ritorno mancante |
| Chiamate infinite | I programmi continuano a richiamarsi a vicenda oppure un programma richiama se stesso | Il calcolo si arresta al limite di ricorsione o di esecuzione |
Domande frequenti
Un sottoprogramma può chiamare un altro sottoprogramma?
Qual è la differenza tra M98 e una chiamata macro G65?
G65 è una chiamata macro che passa argomenti (A, B, C…) come variabili. Serve a richiamare la stessa forma con dimensioni diverse, mentre M98 ripete la stessa operazione senza argomenti.