Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
spunti di riflessione
per CNC FANUC
INTRODUZIONE
Esempio
G83 Z R F Q
Parte uno
Parte due
Il CNC ha delle funzioni che non possono essere stravolte, cosi come
i programmi che scriveremo.
Possiamo però dedicare maggior attenzione alla strutturazione degli
stessi al fine di ottenere dei miglioramenti a livello qualitativo e
produttivo.
BUON LAVORO
PARTE PRIMA
Variabili
#1 = nulla #1=0
Per questo motivo è importante non fare assunzioni errate sul valore
o stato di una variabile, ma definirla sempre.
G00 X 15.366
G00 x-#1
** somma #i=#j+#k
** differenza #i=#j-#k
** prodotto #i=#j*#k
** quoziente #i=#j/#
** seno #i=SIN[#j]
** coseno #i=COS[#j]
** arcoseno #i=ASIN[#j]
** arcocoseno #i=ACOS[#j]
** tangente #i=TAN[#j]
** arcotangente #i=ATAN[#j]/[#k]
** radice quadrata #i=SQRT[#j]
** valore assoluto #i=ABS[#j]
** arrotondamento #i=ROUND[#j]
se #2=1.3452
allora il valore #1=ROUND[#2] è 1
allora #1=1.345
#1=1.2 #2=-1.2
#3=Fup[#1] #3 è 2.0
#3=FIX[#1] #3 è 1.0
#3=FUP[#2] #3 è -2.0
#3=FIX[#2] #3 è -1.0
esempio
#j = [SIN[#k]*[#5+TAN[#H]]]
[1] Funzioni
[2] operazioni come *, /, AND, MOD
[3] operazioni come +, -, OR, XOR
Salti e ripetizioni
GOTO
GOTOn
esempio:
IF
esempio
IF[espressione condizionale]THEN[espressione]
esempio
WHILE[espressione condizionale]DOm
N10 porzione di programma
-----
-----
N20 ENDm
esempio
WHILE[#100 NE 0] DO1
G91 G01 F500 Z-2
-----
-----
#100=#100-1
END1
Operatori logici
operatore significato
EQ uguale
NE non uguale
GT maggiore
GE maggiore o uguale
LT minore
LE minore o uguale
Esempi
esempio
[1]
Come primo esempio verrà utilizzata una variabile per eseguire la
ripetizione ciclica di una porzione di programma, cioè un
sottoprogramma.
-----
N8 #100 = 10 contattore
N10 G91 G01 F500 Z-1 sottoprogramma
N12 -----
N -----
N48 -----
N50 #100 = #100-1 decremento del contattore
N52 IF[#100 NE 0] GOTO 10 confronto con il valore 0
N54 ----- continuazione del programma
Spiegazione..
esempi,
(1) N8 #100 = 0 contattore
N10 G91 G01 F500 Z-1 sottoprogramma
N12 -----
N -----
N48 -----
N50 #100 = #100+1 decremento del contattore
N52 IF[#100 NE 10] GOTO 10 confronto con il valore 10
N54 ----- continuazione del programma
----- -----
----- -----
#100=20 #100=20 (contattore)
#101=0 #101=0 (sgrossatura./finitura)
#102=-30 #102=-30 (profondità di lavoro)
#103=1000 #103=1000 (avanzamento)
#104=0 #104=0 (variabile di controllo)
---- -----
---- -----
Limitazioni...
G90 X50 y0
X35.355 Y35.355
X0 Y50
X-35.355 Y35.355
X-50 Y0
X-35.355 Y-35.355
X0 y-50
X35.355 Y-35.355
Ecco che interviene una variabile, cioè il famoso numerino magico che
ci permette di saltare ad un blocco di cui ancora non conosciamo il
numero.
Per esempio GOTO #100 salta al blocco il cui valore è posto nella #
100
Riepilogando
O1(PROGR. DI ESEMPIO);
G90 G0 G54
T1 M16 (PUNTA DA CENTRO)
G0 X0 Y0 S1200 M3 T2
G43 H1 Z2
M8
#100 =10 (il sottoprogramma ritornerà al blocco N10)
G81 Z-2 F100 K0 (K0, non viene eseguita la centratura al centro)
GOTO 100 (richiamo sottoprogramma)
N10 T2 M6(PUNTA D8.5)
G0 X0 Y0 S930 M3 T3
G43 H2 Z2
M8
#100 =20 (il sottoprogramma ritornerà al blocco N20)
G83 Z-40 F195 K0 (K0, non viene eseguita la foratura al centro)
GOTO 100 (richiamo sottoprogramma)
N20 T3 M6 (SVASATURA D16.5)
G0 X0 Y0 S300 M3 T4
G43 H3 Z2
M8
#100 =30 (il sottoprogramma ritornerà al blocco N30)
G81 Z-6 F100 R-4 K0 (K0, non viene eseguita la svasatura al centro)
GOTO 100 (richiamo sottoprogramma)
N30 T4 M6 (MASCHIO M10C)
G0 X0 Y0 S200 M3 T1
G43 H4 Z2
M8
#100 =200 (il sottoprogramma ritornerà al blocco N200)
M29 S200
G84 Z-35 F300 K0 (K0, non esegue la maschiatura al centro)
N100 G90 X50 Y0 (sottoprogramma)
X35.355 Y35.355
x0 y50
X-35.355 y35.355
x-50 y0
x-35.355 Y-35.355
x0 y-50
X35.355 y-35.355
G90 G0 Z100 M9 (fine del ciclo, alzata, stop mandrino)
M5
GOTO #100 (ritorna al valore di #100)
N200 G91 G28 Y0 Z0 (FINE PROGRAMMA)
M30
[2.a F/T]
Creare un programma in grado di effettuare il richiamo ciclico di
tutti gli utensili che non abbia mai fine.
[2.b F/T]
Creare un programma in grado di effettuare il richiamo ciclico degli
utensili capace di fermarsi quando ha trovato l'utensile desiderato
(per esempio T7).
[2.c F/T] E' proponibile nella realtà l'esercizio 2.a? Quale problema
si verrebbe a creare? Come ovviare? Concretizzare per una procedura
reale.
[2.c F]
Creare un programma capace di eseguire un foro filettato M76 passo 2,
profondo 100 mm.
[3]
E’ possibile ripetere una porzione di programma senza l'ausilio di un
contattore?
[3.a F]
Eseguire la contornitura fino ad una profondità di 30 mm, di un pezzo
100*100 raggiando gli spigoli con R5. Il sovra metallo laterale è di
10 mm. E' prevista una operazione di finitura.
In che modo sarebbe vantaggioso l'utilizzo di variabili?
Tentare di abbozzare un programma con più variabili.
Spiegazione
[3.b]
[4]
[4.a F]
Esercitiamoci ancora!!
Riepilogo
Una variabile può essere utile come contattore, si può usare come
fattore di controllo, oppure può essere usata come valore di
avanzamento o funzione G...
PARTE SECONDA
Programmi macro
** Richiamo semplice
G65 Pp Ll <argomenti>
** Richiamo modale
G66 Pp Ll <argomenti>
M4567 A1 B4 C6
M37
T55
** argomenti
Nota
esempio
** variabili locali
* specifica di tipo I
* specifica di tipo II
** specifica di tipo I
A #1 I #4 T #20
B #2 J #5 U #21
C #3 K #6 V #22
D #7 M #13 W #23
E #8 Q #17 X #24
F #9 R #18 Y #25
H #11 S #19 Z #26
** specifica di tipo II
A #1 K3 #12 J7 #23
B #2 I4 #13 K7 #24
C #3 J4 #14 I8 #25
I1 #4 K4 #15 J8 #26
J1 #5 I5 #16 K8 #27
K1 #6 J5 #17 I9 #28
I2 #7 K5 #18 J9 #29
J2 #8 I6 #19 K9 #30
K2 #9 J6 #20 I10 #31
I3 #10 K6 #21 J10 #32
J3 #11 I7 #22 K10 #33
** Variabili di sistema
Queste variabili hanno un loro significato ben preciso che non può
essere alterato. Sono un numero considerevole e non tutte
direttamente utili al programmatore: sono essenziali per lo sviluppo
di programmi per l'automazione per uso generale.
1 #10001 (#2001)
2 #10002 (#2002)
. .
. .
200 #10200 (#2200)
201 #10201
. .
. .
999 #10999
#3000
Esempio
#3001
#3002
#3011
#3012
#3003
0 abilitato atteso
1 disabilitato atteso
2 abilitato non atteso
3 disabilitato non atteso
#3004
** Numero di pezzi
** Dati modali
Variabile Funzione
** Posizione corrente
O8000(Control Z)
(#120 profondità di lavoro)
(#121 profondità di passata)
(#122 calcolo prossimo valore)
(#123 quota mancante)
#122 = #5003 - #121
#123 = ABS[#120 - #5003]
IF[#122 LT #120] THEN #121 = #123
M99
O8000(Control Z)
(#120 profondità di lavoro)
(#121 profondità di passata)
(#122 calcolo prossimo valore)
(#123 quota mancante)
-----
-----
#120 = -30.7 (profondità finale)
#121 = 1 (profondità di passata)
N10 M98 P8000 (controllo Z)
G91 G01 F500 Z#-121 (profilo)
....
....
.... (fine profilo)
IF[ #5003 GT #100 ] GOTO 10
-----
-----
FINALMENTE!!!!!!!!!!!
[1]
Cercheremo di creare una macro che esegua le stesse operazioni del
ciclo fisso di foratura G81.
In una macro come prima cosa bisogna salvare tutti i dati modali,
questo perché gli stessi dovranno essere riposti alla loro origine
dopo che la macro avrà terminato.
L'operatore che si appresta ad usare una macro non deve preoccuparsi
di determinare se questa per esempio lascia la macchina in G90 o
G91, oppure se la macro introduce un offset o qualsiasi altra cosa.
L'operatore si aspetta che le condizioni di lavoro siano quelle in
cui lui lavora e pertanto la macro deve sempre restituire i dati
modali che ha incontrato al suo richiamo: ve lo immaginate una macro
che sconvolge le correzioni utensili o modifichi a proprio piacere
avanzamenti, giri mandrino... senza restituire le impostazioni
precedenti?
* Verifica macro
* Divulgazione macro
O1
G90 G0 G54 X0 Y0 Z50 posizionamento
G66 P9500 Z-25 R2 F100 foratura in X0 Y0 (G81)
X30 foratura in X30 Y0
Y70 foratura in X30 Y70
X0 foratura in X0 Y70
G67 toglie G66
M30
[2]
Come esercizio scrivere le macro per eseguire la foratura profonda
G83 e G73. I tornitori eseguiranno la scrittura delle macro simili a
G83 e G74.
[3]
Tenteremo ora il ragionamento inverso: data una macro cercheremo di
capirne il significato.
Eseguiamo questo tipo di ragionamento per ragioni di apprendimento.
Spesso è utile anche in fase di scrittura di una macro, partire dalla
fine e percorrere i passi a ritroso.
Proponiamo la lettura di una macro alla quale volutamente è stata
tolta l'intestazione.
Eseguiamo il richiamo tramite codice G.
O9016( )
(G260 Z R F Q I D)
(Z #26 PROFONDITA')
((R #18 DISCESA RAPIDO)
(F #9 AVANZAMENTO)
(Q #17 PASSO)
(I #4 DIAMETRO FRESA)
(D #7 DIAMETRO FORO)
(SALVA G00/G01)
#1=#4001
(SALVA G90/G91)
#2=#4003
(SALVA VALORE Z)
#3##5003
(SALVA G40/G41/G42)
#8=#4007
(NUMERO RIPETIZIONI)
IF[#18EQ0] GOTO10
IF[#18GT0]GOTO8
IF[#18LT0]THEN #26=#26-#18
GOTO10
N8 #26=ABS[#26]+ABS[#18]
N10 #6=ROUND[[ABS[#26]]/#17]
(RAGGIO FRESA)
#4=#4/2
(RAGGIO FORO)
#7=#7/2
(INSERISCI RAGGIO)
#10032=#4
(POSIZIONAMENTO RAPIDO)
G90G0G40Z[#18+1]
(POSIZIONAMENTO IN LAVORO)
G01F500Z#18
(CICLO DI INTERPOLAZIONE)
G91G41D32X#7F#9
WHILE[#6NE0]DO1
G03I-#7Z-#17
#6=#6-1
End1
G03I-#7
G01G40x-#7
(RIPRISTINA VECCHI VALORI)
G90GOZ#3
G#1G#2G#8
M99
** Commenti
(G260 Z R F Q I D)
(Z #26 PROFONDITA')
((R #18 DISCESA RAPIDO)
(F #9 AVANZAMENTO)
(Q #17 PASSO)
(I #4 DIAMETRO FRESA)
(D #7 DIAMETRO FORO)
(SALVA G00/G01)
#1=#4001
(SALVA G90/G91)
#2=#4003
(SALVA VALORE Z)
#3##5003
(SALVA G40/G41/G42)
#8=#4007
(NUMERO RIPETIZIONI)
IF[#18EQ0] GOTO10
IF[#18GT0]GOTO8
IF[#18LT0]THEN #26=#26-#18
GOTO10
N8 #26=ABS[#26]+ABS[#18]
N10 #6=ROUND[[ABS[#26]]/#17]
** Seguono tre operazioni per il calcolo del raggio fresa, del raggio
foro e l'inserzione automatica del raggio utensile (G10 L11 P32 R).
(CICLO DI INTERPOLAZIONE)
Riflessioni
N10 #6=ROUND[[ABS[#26]]/#17]
[4]
Vogliamo ora riprendere un esercizio precedente al fine di mostrare
come un macro programma può essere di grande aiuto e di concreta
utilità.
Ma come procedere??
G0 X100 Z3 M8
Riepiloghiamo:
Potrebbe funzionare!
T0101 T0101
M10 G210 D Z R F Q I J k M S
G28 H0 G0 X400 Z400 M9
G0 C0
G97 M13 B1.2
G0 X100 Z3 M8
G98 G74 Z-2 F100 Q5000
H22.5 K13 Q5000
G0 G96 X300 Z300 M9
M15
M11
Per questo motivo non bisogna aver paura ad usare variabili o macro
programmi; questi ci aiutano nei compiti più onerosi lasciandoci il
tempo di dedicarci alla qualità del prodotto.
O1
G90 G0 G54 G40
T1 M6
S1000 M3 T2
G43 H1 Z50 M8
(SPIANATURA 400*500*10)
G270 X0 Y0 Z0 R10 F1000 Q2 A400 B500 I80
T2 M6
S1000 M3 T3
G43 H1 Z50 M8
(FORO D90*90)
G260 X-350 Y-100 Z-90 R0 F3000 Q0.5 I50 D90
(FORO D75*80)
G260 X-150 Y100 Z-80 R0 F3000 Q0.5 I50 D75
T3 M6
S1500 M3 T4
G43 H3 Z50 M88
(16 FORI SU D120 prof. 35)
G210 X-350 Y-100 Z-35 R2 F150 Q2 D120 I0 J22.5 K0 M83
(5 FORI SU D95 prof. 35)
G210 X-150 Y100 Z-35 R2 F150 Q2 D95 I15 J255 K5 M83
(MASCHIATURA)
T4M6
S300 M3 T5
G43 H3 Z50 M8
G210 X-350 Y-100 Z-30 R3 F1 Q2 D120 I0 J22.5 K0 M84.175
G210 X-150 Y100 Z-30 R2 F1 Q2 D95 I15 J255 K5 M84.175
M30
O9011(G8.. IN CIRCONFERENZA)
(EQUIDISTANZA DELLE LAVORAZIONI)
(G210 Z R F Q D I J K M)
(ESEGUE G73/G81/G83/G84/G86)
(Z #26=PROFONDITA)
(R #18=DISCESA IN RAPIDO)
(F #9=AVANZAMENTO)
(Q #17=SCARICO)
(D #7=DIAMETRO)
(I #4=ANGOLO PRIMARIO)
(J #5= ANGOLO SECONDARIO)
(J NEGATIVO, SENSO ORARIO)
(J POSITIVO, SENSO ANTIORARIO)
(K #6=RIPETIZIONI)
(NB,,, SE K=0 ALLORA K=360/J)
(M #13=FUNZIONE G)
(NB,,, M84.175 MASCHIATURA + PASSO)
(84=G84, 0.175 -> PASSO 1.75)
(SALVA I DATI MODALI)
#1=#4001
#2=#4003
#3=#5003
#24=#5001
#25=#5002
(CONTROLLO RIPETIZIONI)
IF[#6 EQ 0] THEN #6=360/[ABS[#5]]
IF[[#6-[ROUND[#6]]] GT 0.001] THEN #3000=1(CERCHIO NON DIVISIBILE)
IF[[#13 EQ 81] OR [#13 EQ 86]] GOTO10
IF[[#13 EQ 73] OR [#13 EQ 83]] GOTO20
IF[[ROUND[#13]] NE 84] THEN #3000=2 (FUNZIONE NON ACCETTATA)
(CALCOLO PASSO)
#8=ROUND[13]
#8=[#13-#8]*10
(CALCOLA AVANZAMENTO)
#9=#8*#4119
(ESTRAPOLA FUNZIONE)
#13=ROUND#13]
N10 G#13F#9Z#26R#18K0
GOTO30
N20 G#13F#9Z#26R#18Q#17K0
(RAGGIO)
N30 #7=#7/2
(CICLO IN CIRCONFERENZA)
WHILE[#6NE0]DO1
(ASSOLUTO X)
#19=#24+[#7*[COS[#4]]]
(ASSOLUTO Y)
#20=#25+[#7*[SIN[#4]]]
(POSIZIONAMENTO)
G90X#19Y#20
(NUOVO ANGOLO)
#4=#4+#5
(CONTATTORE)
#6=#6-1
(FINE CICLO)
END1
(RIPRISTINA VALORI MODALI)
G90G0Z#3
X#24Y#25
G#1G#2
M99
T4M6
S300 M3 T5
G43 H3 Z50 M8
G210 X-350 Y-100 Z-30 R3 F1 Q2 D120 I0 J22.5 K0 M84.175
G210 X-150 Y100 Z-30 R2 F1 Q2 D95 I15 J255 K5 M84.175
M30
Vi ricordate l’esercizio:
O9015(filettatura destrosa)
(G250 Z R F Q I D)
(posizionare l’utensile al centro foro)
(#26 Z profondità del filetto)
(#18 R discesa in rapido)
(#9 F avanzamento)
(#17 Q passo)
(#4 I diametro fresa)
(#7 D diametro filetto esterno)
(raggio fresa)
#4=#4/2
(raggio filetto)
#7=#7/2
(numero ripetizioni)
#6=1+[ROUND[[ABS[#26]/#17]]]
* ciclo di interpolazione
(ciclo di filettatura)
G91G42D32X#7F500
WHILE[#6NE0]DO1
G02I-#7Z-#17F#9
#6=#6-1
END1
G01G40X-#7
O9015(filettatura destrosa)
(G250 Z R F Q I D)
(posizionare l’utensile al centro foro)
(#26 Z profondità del filetto)
(#18 R discesa in rapido)
(#9 F avanzamento)
(#17 Q passo)
(#4 I diametro fresa)
(#7 D diametro filetto esterno)
(salva G0/G01)
#1=#4001
(salva G90/G91)
#2=#4002
(salva valore Z attuale)
#3=#5003
(raggio fresa)
#4=#4/2
(inserzione automatica raggio)
#10032=#4
(raggio filetto)
#7=#7/2
(numero ripetizioni)
#6=1+[ROUND[[ABS[#26]/#17]]]
(posizionamento rapido)
G90G0Z[#18+1]
(posizionamento in lavoro)
G01F500Z#18
(ciclo di filettatura)
G91G42D32X#7F500
WHILE[#6NE0]DO1
G02I-#7Z-#17F#9
#6=#6-1
END1
G01G40X-#7
(ripristino de vecchi valori modali)
G90G0Z#3
G#1G#2
M99
Riflessioni
La riproponiamo
G210 D Z R F Q I J k M S per tornio
Esercizi
Programmi macro
Tecniche di debug
G83 Z F Q R
* manca la R
* manca la Q
* manca la F
* manca la Z
Riepilogo
In una macro come prima cosa bisogna salvare tutti i dati modali
Note
Buon lavoro
badade10@libero.it