Ecco la mia tiritera che feci per il vecchio forum, dove non fù mai postato.
Come un Cam può implementare i codici ISO G02 e G03
Chi si dedica alla programmazione di un Cam, deve, tra l'altro, affrontare il problema della implementazione dei codici Iso G02 e G03 onde comandare gli azionamenti necessari per tracciare la curva circolare programmata.
La curva circolare da costruire sarà caratterizzata da:
1- punto di inizio dell'arco
2- codice che stabilisce il senso di rotazione
2- coordinate del centro di curvatura o in alternativa il raggio
3- punto finale
un codice Iso per una traiettoria circolare potrebbe essere il seguente:
...........
N200 G01 X100 Y50
N210 G02 X169.60 Y47.83 R70
N220 G03 X300 Y70 I221.12 J139.37
......
il cui tracciato è quello in figura 1 allegata in calce.
Al termine dell'esecuzione del blocco 200 l'utensile si trovera in X100 Y50, il blocco 210 indica al Cam che l'utensile deve andare in X169.60 Y47.83 con un arco di raggio 70 percorrendolo in senso (G02) destrorso. Nel grafico il percorso relativo è quello tra A e B di colore nero e il centro è in O1. Con un raggio di queste dimensioni (70) si puo costruire un altro arco, che è quello di colore blu tratteggiato il cui centro è in O2. Per stabilire qual'è l'arco giusto dovremo porre positivo il raggio per il primo arco e negativo per il secondo. In termini geometrici i due archi si distinguono per avere il primo un angolo al centro inferiore a 180 e superiore il secondo. Altra caratteristica, che sarà utile per le soluzioni geometriche è che i due centri si trovano sull'asse della corda AB, equidistanti dalla stessa.
Per concludere sul blocco 210 se in esso avessimo letto G02 X169.60 Y47.83 R-70 il Cam avrebbe tracciato l'arco blu del grafico.
Faccio notare che il segno - (meno) posto davanti al valore del raggio è solo un flag, infatti un raggio di valore negativo non ha geometricamente senso.
Il blocco 220 indica che l'utensile deve andare in X300 Y70 percorrendo un arco circolare, il cui centro di curvatura si trova a (coord. X ) I221.12 e (coord.Y) J139.37, percorrendo l'arco in senso (G03) sinistrorso. In questo caso la soluzione è una sola e l'arco è quello che va da B a C.
Le coordinate del centro di curvatura possono essere assolote o invrementali, in questo caso riferite alle coordinate del punto raggiunto, che sarà l'inizio dell'arco.
Cosa deve fare il CAM
Nel corso della stesura del mio programma, non avendo la possibilità di scrutare i metodi usati dai programmatori professionisti nei vari Cam in commercio, ho trovato un mio sistema che potrebbe non essere il migliore o il più semplice, ma visto che funziona già da qualche anno, ne riporto i concetti, sperando che qualcuno proponga soluzioni anche diverse.
Prima di tutto occorre stabilire con chiarezza alcuni parametri e creare della variabili affinché non si faccia confusione nella lettura della descrizione:
X-Y-Z coordinate di un punto
Pi = 3.141592 corrispondente all'angolo piatto in radianti
om = angolo al centro che sottende l'arco
xC e yC = coordinate di calcolo del centro di curvatura che saranno rispettivamente = a I e J
te = abbreviazione dell'angolo theta cioè l'angolo che una retta forma con l'asse x del piano
cartesiano girando in senso sinistrorso. Le lettere che seguono ‘te’ indicano la direzione della retta in esame; es teAB sarà l'angolo tra l'asse X ed il segmento da A a B, teBA sarà l'angolo tra l'asse X e il segmento da B a A. Riconoscere questi angoli è essenziale per non avere risultati sballati, per questo riporto alcuni esempi, vedi fig 2 in calce.
Per tracciare l'arco programmato, partendo dal punto d'inizio, dobbiamo cercare le caratteristiche geometriche di punti successivi, disposti sull'arco e distanti l'un l'altro di una entità che sarà funzione del passo minimo possibile per gli assi interessati e del raggio della curva.
Supponiamo di lavorare sul piano XY, ci servirà il minimo spostamento possibile in X e Y; supponiamo ancora che dette entità siano uguali per entrambi gli assi e siano di 1/100 di mm.
Sappiamo che la nostra curva sarà costituita da tratti rettilinei, i cui percorsi saranno tanto più vicini alla curva quanto più brevi saranno questi segmenti. E' risaputo che l'utensile nel percorrere la curva si discosta da questa provocando un errore il cui massimo valore si verifica nei tratti di curva inclinati di 45° rispetto agli assi e sarà pari al passo minimo per il seno di 45°; nel nostro caso 0.01 x 0.708 = 0.007 cioè 7/1000 di mm. Per tratti ad inclinazione diversa dai 45° potrebbe essere anche vicino al passo minimo, ma in sede di azionamento dei motori vedremo come si può intervenire dimezzando l'errore.
Per determinare le coordinate dei punti successivi al primo, dobbiamo definire meglio le caratteristiche geometriche della curva che, come si è già detto, sono: i punti di inizio e fine, il raggio, le coordinate del centro e l'angolo al centro. Riprendendo il nostro codice e leggendo i blocchi 200 e 210, sappiamo che il nostro arco comincia a x100, y50, finisce a x169.50 y47.83 ed ha un raggio di curvatura di 70 mm. La curva relativa è illustrata in figura 3 in calce.
Cominciamo con determinare la lunghezza della corda AB, con Pitagora essa sarà
AB = sqr( (yB-yA)^2 +( xB-yA)^2)
Con la trigonometria occorre prima trovare la pendenza di AB e poi la distanza
La pendenza cioè te(AB) ci servirà successivamente, quindi io ho usato questo metodo.
Te(AB) = arctan ( (yB–yA) / (xB–xA) )
AB = (yB–yA) / sen (te(AB))
Il triangolo ABO è un triangolo isoscele di cui conosciamo tutti i lati, AB e due lati uguali pari al raggio R. Il triangolo AMO è un triangolo rettangolo in M. possiamo determinare gli angoli a (alfa) e om (omega):
a =arccos ( AB/(2*R) )
om = 2 * arcsen ( AB / (2*R) )
nelle due formule precedenti il valore di R dovrà essere espresso in valore assoluto poiché sappiamo che detto valore può essere preceduto dal (flag) segno negativo.
Ora possiamo calcolare te(AO) e le coordinate di O.
te(AO) = te(AB) – a . nel caso specifico te(AO) è negativo per cui si prende il suo esplementare cioè 2 * pi + (–a)
Il segno (–) posto davanti alla R indica che l’arco ha uno sviluppo il cui angolo al centro è superiore a 180° quindi il centro di curvatura si trova nel punto O2 (foto 1) simmetrico a O1 rispetto alla direzione AB. In questo caso te(AO) = te(AB) + a.
xO = xA + R (cos(te(AO)
yO = yA + R (sen(te(AO)
Abbiamo ora tutti gli elementi necessari per calcolare le coordinate di un punto generico (P), che si trova ad una distanza angolare (e), frazione di OM.
Te(OP) = te(OA) – e
xP = xO + R * cos(te(OP))
yP=yO + Rr* sen(te(OP))
Nel caso specifico essendo te(OP) un valore del secondo quadrante avremo la funzione seno positiva e la funzione coseno negativa per cui yP sarà maggiore di yO mentre Xp sarà minore di xO.
Stabilendo un loop da te(OA) a te(OB) con un adeguato step si potranno calcolare le coordinate dei punti che in successione da A a B permettono di costruire la curva.
Lo step è ovviamente angolare espresso in radianti, potrebbe essere pari all'arctan( passo minimo della macchina, diviso il raggio della curva) ed avrà segno positivo se la curva gira a sinistra (G3) e segno negativo se la curva gira a destra (G2).
Nel caso in cui il codice indichi le coordinate I e J invece del raggio della curva, per arrivare allo stesso risultato dovremo calcolare i vari angoli con lo stesso metodo esposto e il raggio, che è pari alla distanza AO.
Te (OA) = arctan ( (yA – J) / (xA – I) )
Te (OB) = arctan ( (yB – j ) / (xB – i) )
om = te(AB) – te(OB)
R = (yA – J) / te(OA)
Da qui è come nel caso precedente.
E ovvio che il calcolo dei theta (te) dovrà essere seguito da una routine nella quale, sulla base di opportune relazioni condizionali, verrà stabilito il quadrante di appartenenza in base al valore delle coordinate relative ai punti considerati. La routine dovrà anche comprendere relazioni condizionali per prefissare il theta nei casi di rette parallele agli assi, che provocherebbero errore per valori di arctan pari a zero (parallela all’asse X) o infinito (parallela all’asse Y). https://www.cncitalia.net/forum/viewtopic.php?t=1787
La curva così determinata in realtà sarà una polilinea i cui lati saranno tanto più piccoli quanto più piccolo sarà lo step che comunque non avrà effetto se scelto più piccolo del valore arctan(passo minimo/R).
nota: calcolata la corda AB sarà necessario che il programma controlli se il raggio calcolato o rilevato dal codice sia uguale o maggiore di AB/2; in caso contrario sarà necessario un messaggio d'errore.
Mi auguro di essere stato chiaro comunque sono disponibile per ulteriori chiarimenti e soprattutto per conoscere metodi anche diversi .
salutoni