Il codice abitualmente utilizzato per la programmazione delle macchine a controllo numerico, viene comunemente chiamato "codice ISO".
I vari linguaggi utilizzati, infatti, fanno per lo più riferimento allo standard ISO 6983 che definisce gli elementi fondamentali di un linguaggio generico, adatto alla programmazione dei vari tipi di macchina utensile.
Lo standard di linguaggio ISO 6983 non costituisce, comunque, un'obbligo all'utilizzo da parte dei costruttori di CNC, che nella pratica adottano i codici principali dello standard, integrandoli con loro codici proprietari. Per le tantissime funzionalità offerte oggi dai controlli, quali:
risoluzione automatica della geometria del piano,
programmazione con enti virtuali,
programmazione parametrica,
gestione della correzione utensile con tavole o teste rotanti,
gestione della correzione utensile su cinque assi,
eccetera,
ciascun costruttore ha definito in pratica i propri linguaggi o sottolinguaggi specializzati. Tali linguaggi specializzati hanno reso molto più agevole, flessibile, rapida ed efficace la programmazione di funzioni o geometrie complesse, ma hanno reso in pratica molto diversa la programmazione da controllo a controllo, vanificando in pratica l'obbiettivo primo dello standard:
un linguaggio unico di programmazione, indipendente dal tipo di controllo impiegato.
| Definizioni |
| Programma |
Si può definire un programma come una collezione ordinata di blocchi. L'ordine è quello di esecuzione. Il controllo leggerà tutto il programma e lo interpreterà un blocco alla volta, dal blocco di inizio fino al blocco di fine programma. A meno di specifiche istruzioni di salto o di interruzione, la lettura dei blocchi procede in successione. |
| Blocco |
Il blocco è un'insieme di funzioni che saranno interpretate "tutte insieme", cioè in relazione tra loro. Il blocco viene spesso identificato come la "riga" di programma; questo non è del tutto corretto potendo un blocco occupare più righe sul video.
La posizione delle funzioni all'interno del blocco, nei controlli più moderni è, con alcune eccezioni, libera; il controllo al momento dell'elaborazione del blocco determina la priorità nell'esecuzione dei singoli comandi che, unche se letti tutti insieme, vengono eseguiti separatamente. Ad esempio nel caso si sia programmato contemporaneamente il movimento di uno o più assi e l'accensione del mandrino, il CNC provvederà normalmente ad accendere il mandrino prima di muovere gli assi.
Esempio:
N10G01X100Y100Z100S1000F250M03
|
| Funzione |
La funzione è in pratica un comando, costituito da una lettera e da un numero che ne costituisce il valore.
Le funzioni si classificano come "modali" o "non modali" a seconda del fatto che generino un comando con effetto permanente o temporaneo. Il comando di accensione mandrino, ed esempio, è modale perché il mandrino, una volta acceso, resta in moto fino all'eecuzione del relativo comando di arresto.
Esempio:
G01
|
| Caratteri del codice ISO 6983 |
| Funzione |
Significato |
| A |
Asse rotativo (dimensione angolare) perpendicolare all'asse X |
| B |
Asse rotativo (dimensione angolare) perpendicolare all'asse Y |
| C |
Asse rotativo (dimensione angolare) perpendicolare all'asse Z |
| D |
Seconda funzione utensile |
| E |
Seconda funzione di avanzamento |
| F |
Funzione di avanzamento (Feed) |
| G |
Funzione preparatoria |
| H |
Non assegnato |
| I |
Centro di interpolazione circolare, asse X |
| J |
Centro di interpolazione circolare, asse Y |
| K |
Centro di interpolazione circolare, asse Z |
| L |
Non assegnato |
| M |
Funzione miscellanea |
| N |
Numero di bloco (sequenza) |
| O |
Non assegnato |
| P |
Asse lineare parallelo all'asse X (terza funzione di definizione) |
| Q |
Asse lineare parallelo all'asse Y (terza funzione di definizione) |
| R |
Asse lineare parallelo all'asse Z (terza funzione di definizione) |
| S |
Funzione di velocità (Speed) |
| T |
Funzione di definizione utensile |
| U |
Asse lineare parallelo all'asse X (seconda funzione di definizione) |
| V |
Asse lineare parallelo all'asse Y (seconda funzione di definizione) |
| W |
Asse lineare parallelo all'asse Z (seconda funzione di definizione) |
| X |
Asse lineare X |
| Y |
Asse lineare Y |
| Z |
Asse lineare Z |
| Funzioni Preparatorie |
G00
|
Posizionamento in rapido: movimento alla massima velocità consentita |
| G01 |
Interpolazione lineare: movimento di uno o più assi alla velocità programmata con la funzione F (Feed) |
| G02 |
Interpolazione circolare oraria: movimento di due assi lungo un arco in senso orario |
| G03 |
Interpolazione circolare antioraria: movimento di due assi lungo un arco in senso antiorario |
| G04 |
Sosta temporizzata: sosta per il tempo specificato dalla funzione F |
| G05 |
Arresto macchina (Hold) |
| G13 |
Selezione asse |
| G16 |
Selezione asse |
| G17 |
Piano di interpolazione XY |
| G18 |
Piano di interpolazione ZX |
| G19 |
Piano di interpolazione YZ |
| G33 |
Filettatura: movimento sincronizzato di due assi |
| G34 |
Filettatura: movimento sincronizzato di due assi |
| G35 |
Filettatura: movimento sincronizzato di due assi |
| G40 |
Cancellazione della compensazione raggio utensile |
| G41 |
Compensazione raggio utensile a sinistra |
| G42 |
Compensazione raggio utensile a destra |
| G43 |
Compensazione lunghezza utensile in senso positivo |
| G44 |
Compensazione lunghezza utensile in senso negativo |
| G53 |
Cancellazione spostamento origine |
| G54 |
Spostamento origine asse X |
| G55 |
Spostamento origine asse Y |
| G56 |
Spostamento origine asse Z |
| G57 |
Spostamento origine asse X ,Y |
| G58 |
Spostamento origine asse Y,Z |
| G59 |
Spostamento origine asse X,Z |
| G80 |
Annullamento cicli fissi |
| G81 |
Ciclo fisso |
| G82 |
Ciclo fisso |
| G83 |
Ciclo fisso |
| G84 |
Ciclo fisso |
| G85 |
Ciclo fisso |
| G86 |
Ciclo fisso |
| G87 |
Ciclo fisso |
| G88 |
Ciclo fisso |
| G89 |
Ciclo fisso |
| G90 |
Programmazione in coordinate assolute |
G91
|
Programmazione in coordinate relative |
| G92 |
Programmazione assoluta zero pezzo |
| G93 |
Programmazione assoluta zero pezzo |
| G94 |
Programmazione assoluta zero pezzo |
| G95 |
Programmazione assoluta zero pezzo |
| G96 |
Programmazione assoluta zero pezzo |
| G97 |
Programmazione assoluta zero pezzo |
| G98 |
Programmazione assoluta zero pezzo |
| G99 |
Programmazione assoluta zero pezzo |
| Funzioni Miscellanee |
M00 |
Arresto programma |
| M01 |
Arresto programma opzionale |
| M02 |
Fine programma |
| M03 |
Avvio mandrino con rotazione oraria |
| M04 |
Avvio mandrino con rotazione antioraria |
| M05 |
Arresto rotazione mandrino |
| M13 |
Selezione asse |
| M06 |
Cambio utensile
|
| M07 |
Erogazione refrigerante 1 |
| M08 |
Erogazione refrigerante 2 |
| M09 |
Arresto erogazione refrigerante |
| M10 |
Blocco assi |
| M11 |
Sblocco assi |
| M12 |
Non definito |
| M13 |
Avvio mandrino con rotazione oraria ed erogazione refrigerante 2 |
| M14 |
Avvio mandrino con rotazione antioraria ed erogazione refrigerante 2 |
| M19 |
Arresto orientato mandrino |
| M30 |
Fine programma e riavvolgimento nastro |
| M40 |
Cambio gamma di velocità: gamma folle |
| M41 |
Cambio gamma di velocità: gamma 1 |
| M42 |
Cambio gamma di velocità: gamma 2 |
| M43 |
Cambio gamma di velocità: gamma 3 |
| M44 |
Cambio gamma di velocità: gamma 4 |
| M45 |
Cambio gamma di velocità: gamma 5 |