Ogni funzione cnc possiede il proprio scopo, la propria funzionalità appunto; non la si può variare ma la si deve esclusivamente usare.
A volte, come nell'esempio di DanyP20, ci troviamo di fronte a situazioni particolari e le funzioni che conosciamo ci sembrano poco utili.
Nell'esempio possiamo quindi dire che il G83 non soddisfa l'esigenza ricercata e cioè ritrarre l'utensile fuori dal pezzo avendo un valore di R che si trova dentro.
Volevo proporre alcune riflessioni a proposito di questo problema per vedere se è possibile agire in modo differente ed ottenere un qualcosa che ci soddisfi.
Problema: esecuzione di un foro ritraendo l'utensile fuori dal pezzo avendo impostato un approccio dentro il pezzo.
Apriamo una prima parentesi
G0G0Z50
G98G83Z-10R2Q2F100
Il comportamento di questo programma lo conosciamo tutti: il valore di Z50 indica l'inizio della funzione di foratura (e la fine), l'utensile scende in rapido
al valore di Z2 (R), si assisterà ad un scendi sali dello stesso (tra Z2 e Z-10) in base al valore di Q impostato fino al raggiungimento del valore finale. Durante il
movimento il controllo esaminerà che non si ecceda il valore impostato di profondità eseguendo l'asportazione in base al valore di Q. Bene, direte, e quindi?
Immaginiamo di impostare un valore di Q=1000 (valore molto alto difficilmente reale): cosa accade? Il comportamento della funzione non cambia, ma quello che
interessa considerare sta nel fatto che la cnc tiene sempre sotto controllo la funzione e cioè il non superamento del valore di profondità impostato.
G0G0Z50
G98G83Z-10R2Q1000F100
In questo esempio il valore di Q porterebbe ad effettuarsi un scarico di valore 1000, il che farebbe oltrepassare i limiti di profondità . Ebbene la cnc fermerà
l'esecuzione della funzione prima che ciò avvenga. In pratica il G83 si trasforma in G81, assistiamo ad una discesa in lavoro fino alla profondità di Z-10.
Tralasciamo per un momento questo aspetto per aprire una seconda parentesi!
G90G0Z50
G98G83Z-10R2Q2F100
X100Y100
X200Y200
X-23Y-34
----
Questo esempio ci dice che una funzione di foratura è modale e come tale una successione di punti possono essere scritti dopo la stessa per rieseguirla senza che la
funzione sia ripetuta. In pratica quando volete effettuare una successione di forature non dovete riscrivere la funzione ma solo il punto di foratura con
l'accortezza di non esprimere il movimento usando una funzione che escluderebbe la funzione (G80, G00, G01, G02, G03).
Ora domandiamoci: cosa succede se al posto di X e Y scriviamo Z e R?
G0G0Z50
G98G83Z-10R2Q2F100
Z-20R-18
Z-30R-28
La funzione viene ripetuta nello stesso punto assumendo come nuovi valori di Z e R quelli scritti ad ogni riga.
Bene, queste semplici riflessioni ci fanno intuire che forse è possibile "aggirare" il nostro problema!
Un primo approccio dunque, potrebbe essere affrontato cosi
G90G0Z50
G98G81Z-35R-29F100
Z-40R-34
Z-45R-39
---
Come si comporta il programma? La funzione G81 viene richiamata al valore di Z50, discesa in rapido al valore di Z-29, esecuzione del ciclo, ritorno al valore di R
e poi subito a Z (perché è qui che termina la funzione). La funzione rimane attiva (non c'è la presenza di G80,G0...) ripetendosi per i nuovi valori di Z e R scritti
Abbiamo ottenuto il comportamento cercato!
A guardare la lavorazione, senza leggere il programma, noi potremmo pensare di essere in presenza di un G83 ma nella realtà noi stiamo eseguendo una ripetizione
ciclica (nello stesso punto) del G81.
Direi che l'approccio incontrato (con tutti i suoi limiti), apre la strada verso nuove riflessioni e mostra la possibilità di poter eseguire la
lavorazione richiesta utilizzando la funzione G81.
E' chiaro che se il foro è profondo, la scrittura diventa noiosa, la possibilità di commettere errori aumenta e probabilmente le dita cominceranno a fare male.
Il discorso è sempre lo stesso: valutare attentamente il contesto! Se dobbiamo eseguire raramente una simile lavorazione possiamo anche dedicare qualche minuto
alla stesura di un simile programma. Se al contrario la frequenza è alta conviene trovare soluzioni alternative capaci nello stesso tempo di eseguire la lavorazione
ma contenendo la lunghezza del programma. Quando si tratta di ripetizioni entra in funzione la parametrica ed il ciclo che lo permette è il WHILE.
Riprendiamo l'esempio precedente, usando delle variabili al posto di valori costanti
#100=-30(profondità iniziale)
#101=-100(profondità finale)
#103=5(scarico)
#102=#100+#103+1(approccio in rapido)
G90G0Z50
G98G81Z#100R#102F100K0
DO1
#100=#100-#103
#102=#100+#103+1
IF[#100EQ#101]GOTO10
Z#100R#102
END1
N10G90G0Z200
Questo programma che ora spiegherò, sintatticamente corretto non rappresenta il plus ultra della scrittura parametrica, ha diversi difetti e non si presta ad essere
usato. Ha però il pregio di essere corto e facilmente interpretabile il che lo rende un ottimo esempio di studio.
#100=-30(profondità iniziale)
#101=-100(profondità finale)
Le variabili rappresentano i valori di profondità di inizio e fine foratura, sono i limiti di lavoro, il punto di inizio del foro precedente ed il valore finale.
La riga #103=5 imposta lo scarico desiderato
#102=#100+#103+1(approccio in rapido), il movimento di avvicinamento in rapido viene calcolato in base al valore dello scarico (5), al quale viene aggiunto 1mm
per la sicurezza.
G90G0Z50, ci posizioniamo al valore di Z desiderato
G98G81Z#100R#102F100K0, attiviamo la funzione di foratura ma non la eseguiamo!
Quando si scrive K0 (oppure L) in una funzione di foratura, questa viene letta, il cnc mantiene attiva la funzione, cioè legge i valori di Z, R, Q, F, P, ma non la esegue.
Questo approccio ci serve esclusivamente per attivare la funzione sui punti voluti che sono gli ultimi della foratura precedente.
Eseguiamo un ciclo WHILE (infinito) secondo ciò che abbiamo visto precedentemente, calcolando i nuovi valori di Z ed R ad ogni ciclo.
DO1
#100=#100-#103 nuovo valore di Z
#102=#100+#103+1 nuovo valore di R
IF[#100EQ#101]GOTO10 controllo del valore di Z finale
Z#100R#102 esecuzione foratura
END1
Non mi preme, in questo momento scrivere un programma parametrico esatto e funzionante, desidero invece far capire il concetto di come è possibile affrontare il problema
proposto. Lo stesso concetto, per taluni forse più familiare, lo si può esprimere attraverso un sottoprogramma: fittizio, ma sempre sottoprogramma!.
#100=-30(profondità iniziale)
#101=-100(profondità finale)
#103=5(scarico)
#102=#100+#103+1(approccio in rapido)
G90G0Z50
G98G81Z#100R#102F100K0
M98P1000
N10G90G0Z200
O1000
DO1
#100=#100-#103
#102=#100+#103+1
IF[#100EQ#101]GOTO2
Z#100R#102
END1
N2M99
Ipotizzando di usare il programma O1000 per eseguire questo tipo di forature, il nostro programma si riduce alla scrittura di qualche variabile...
Ricapitoliamo il concetto:
1° attivazione della funzione G81 (senza eseguirla)
2° creazione di un ciclo di ripetizione della funzione
Il risultato è un movimento paragonabile al G83 ma la cui ritrazione è sempre fuori pezzo.
E' già un buon punto, potrei fermarmi qui... ma forse è possibile fare ancora meglio!
Gli esempi fin qui mostrati (volutamente accademici) mostrano la via alla realizzazione di una funzione personalizzata: una macro.
Lo ripeto, le scelte che si fanno dipendono dal contesto, dalle necessita reali di lavoro.
Se mi trovo spesso a dovere ripetere simili esperienze è opportuno domandarsi se è il caso di realizzare una funzione particolare.
Provate ad eseguire questo programma sulla vostra cnc; è un semplice esempio di come la funzione G81 possa essere sfruttata per attuare la nostra G83 con ritrazione
fuori pezzo.
G90G0
#100=-30
#101=5
#102=#100+#101+1
T1M6(PUNTA D10)
G90G0G54X0Y0S1500M3
G43H1Z50M8
#100=-35
G98G81Z#100R#102F100K0
#120=3
WHILE[#120NE0]DO1
#100=#100-#101
#102=#100+#101+1
z#100R#102
#104=#104-1
#120=#120-1
END1
G90G0Z200M9
M5
noterete, come ai vostri occhi, sia in esecuzione una foratura in G83 con ritrazione fuori dal pezzo (Z0 max pezzo). Questo potrebbe essere lo spunto per una macro, cioè una funzione personalizzata.
Se ipotizziamo di averla scritta (per esempio G183), sulla base del programma appena visto, avremo a tutti gli effetti creato una funzione cnc e come tale usabile.
La nostra foratura diventerebbe davvero molto semplice.. ecco un esempio
G90G0
T1M6(PUNTA D10)
G90G0G54X0Y0S1500M3
G43H1Z50M8
G98G183Z-100R-29Q5F100
G90G0Z200M9
M5
E' dunque possibile percorrere differenti strade, secondo conoscenza e praticità !
Nel contesto esaminato, le funzioni G98 e G99 sono ininfluenti dato che la funzione G183 (o il cilco descritto) viene realizzata dal ciclo e non dalla funzione di foratura (G81). Perché allora usare il G81 e non scrivere una successione di movimenti in Z?
Semplicemente perché la funzione di foratura possiede al suo interno la ritrazione automatica, noi sfruttiamo questo aspetto per non dover scrivere manualmente ogni singolo movimento. Questo ci permette di scrivere un ciclo con la consapevolezza che ad ogni iterazione l'utensile si alzerà !
Il mio intento, lo ripeto, non era presentare una macro bella e pronta quanto riflettere a livello generale sulle nostre conoscenze e su come possiamo plasmarle.
Sono comunque qui per eventuali approfondimenti o realizzazioni concrete!