Visita il nostro nuovo sito |
|---|
Le informazioni contenute in queste pagine rappresentano una raccolta personale di informazioni sui controlli Z32 ricavate dal materiale pubblicato dalla D.ELECTRON e sono suscettibili di imprecisioni o errori e correzioni. Ci scusiamo per gli eventuali errori o inesattezze e, anche a causa delle inevitabili differenze tra le singole installazioni, invitiamo gli interessati a far riferimento ultimo alla documentazione oginale relativa al proprio controllo numerico.
Per approfondire l'argomento: click qui
estratto dal MANUALE
DI PROGRAMMAZIONE CNC Z32
APPLICAZIONI A FRESE E CENTRI DI
LAVORO
Organizzazione e struttura dei files
CARATTERI 'O' e '0'
La lettera 'O' e la cifra zero '0' sono spesso stampate in modo assai simile tra loro, tanto da indurre in errore il programmatore anche esperto: si ricordi però che i codici di macchina dei due caratteri sono diversi tra loro e che il CN non può (e NON DEVE) scambiarli tra loro.
Organizzazione dei files
Lo Z32 all'accensione carica da disco rigido in memoria RAM :
- Il sistema operativo Z32
- I files di inizializzazione, la logica di macchina e le tarature
- Tutti i programmi-pezzo
ed esegue il programma di visualizzazione TERMS.
Lo Z32 dispone di una memoria programmi di 390 Kbytes (con possibilità di
espansione).
La lunghezza di un programma-pezzo non può superare 64k caratteri.
Possono essere presenti al massimo 6 processi, numerati da
I vari programmi-pezzo possono essere richiamati da qualsiasi processo, quindi
possono essere presenti programmi-pezzo eseguibili da macchine diverse (tornio,
fresa ..).
I programmi-pezzo sono contrassegnati da un numero da
Le tabelle per utensili, origini e parametri sono contrassegnate da numeri che
vanno da
I programmi del costruttore di macchina sono contrassegnati da numeri che vanno
da
Numerazione delle tabelle nei vari processi:
PROCESSO 0 1 23 4 5
TABELLA PARAMETRI 125 122 119 116 113 110
TABELLA ORIGINI 126 123 120 117 114 111
TABELLA UTENSILI 127 124 121 118 115 112
TABELLA ORIGINI BASE 237 236 235 234 233 232
I files sono accessibili tramite l'attività 5 di editor (modifiche o creazione di files, vedere manuale di impiego). Possono essere copiati dal disco rigido sul floppy disk e viceversa, oppure inviati a periferiche esterne o caricati da periferiche esterne con i vari modi con cui lo Z32 comunica per via seriale (ved. manuali specifici).
Riepilogo dei files in memoria
Zona accessibile:
1 - 109 Programmi-pezzo, sottoprogrammi, cicli utente;
110 - 112 Tabelle parametri, origini, utensili del processo 5
113 - 115 Tabelle parametri, origini, utensili del processo 4
116 - 118 Tabelle parametri, origini, utensili del processo 3
119 - 121 Tabelle parametri, origini, utensili del processo 2
122 - 124 Tabelle parametri, origini, utensili del processo 1
125 - 127 Tabelle parametri, origini, utensili del processo 0
Zona protetta :
128 -
170 - 199 Cicli fissi di sistema
200 -
232 - 237 Origini base di processo
238 -
Programma-pezzo
In aggiunta alle istruzioni ISO lo Z32 esegue anche una quantità di istruzioni EVOLUTE che non provocano un effetto fisico immediato sulla macchina utensile, ma svolgono funzioni di predisposizione (calcolo di espressioni, salto a sottoprogrammi, condizionamenti ...).Per evitare possibili confusioni, le righe di programmazione possono essere o solo ISO o solo "evolute", ossia non è possibile inserire nella stessa riga istruzioni ISO ed EVOLUTE.
Le righe "evolute" si distinguono dalle righe ISO perché, subito dopo l'eventuale numero di riga (N...), hanno un punto esclamativo '!' che apre il primo campo della riga evoluta.
Un programma-pezzo è costituito nell'ordine dalle seguenti parti: - un
titolo (che può essere qualsiasi ma non deve contenere il carattere '%')
- il carattere '%'
- le righe significative del programma, che possono essere ISO o EVOLUTE senza
ordine fisso.
Quando il programma-pezzo viene eseguito, i primi 40 caratteri della prima riga del programma (che possono contenere un conciso codice di identificazione) vengono presentati sul video, in modo da permettere all'operatore di riconoscere immediatamente il programma in corso di esecuzione.
PROGRAMMA-PEZZO
TITOLO 1 o più righe senza il carattere percento
%
N1 ...
.....
righe programma ISO O EVOLUTE
...
:OS eventuale sezione origini locali
X1=...
...
:PA eventuale sezione parametri locali
PP=...
...
:TL eventuale sezione utensili locali
T1#1 ...
...
Esecuzione di part-program senza il % iniziale
Il carattere % è indicato dalle norme ISO come contrassegno dell'inizio del part-program. Z32 ignora tutti i caratteri eventualmente presenti nel programma da eseguire prima del % iniziale.
Se il carattere % viene omesso Z32 esegue ugualmente il programma, partendo dalla prima riga.
ATTENZIONE
Si ricorda che la prima riga di un part-program non può essere una destinazione di salto: questa limitazione può risultare più evidente se manca il % iniziale perché la prima riga diventa operativa a tutti gli effetti.
1.2.3 Blocco opzionale
Se una riga di programma inizia col carattere '/' la riga stessa viene eseguita
solo se l'apposito comando (commutatore sul pannello frontale) ne abilita
l'esecuzione.
Esempio:
/N28 X0 Y0
Il movimento degli assi al punto 0,0 è fatto solo se sono abilitati i blocchi opzionali.
/N30 !GOP20!
Il salto al sottoprogramma P20 è fatto solo se sono abilitati i blocchi opzionali. Il blocco opzionale può costituire destinazione di salto: in questo caso deve essere ricercato con la barra iniziale.
Per esempio:
N60!GO/N30!
L'efficacia del comando di blocco opzionale può non essere immediata, per la
presenza nello
Z32 di un 'serbatoio’ di istruzioni preelaborate che consentono una
maggiore rapidità di
esecuzione: la scelta se un blocco opzionale deve o no essere eseguito viene
fatta al momento
Ricerca blocco veloce
della preelaborazione, per cui se il comando di blocco opzionale viene cambiato mentre il blocco è già elaborato ma non ancora eseguito il nuovo comando non è eseguito.
I blocchi contenuti nel serbatoio possono essere intorno a una decina.
Alcune funzioni dello Z32 svuotano il serbatoio prima della loro esecuzione: se una di queste funzioni (per esempio una 'M' o una sosta G4, anche di tempo nullo) viene programmata prima del blocco opzionale non si ha più questa incertezza.
Per esempio:
...
N10 G0 X0 Y0
N11 G4 TT0 sosta di tempo zero
/N12 X10
...
Poiché il G4 al blocco N11 svuota il serbatoio, il comando di blocco opzionale è immediatamente attivo sul blocco N12. Blocco doppio barrato
Se una riga di programma inizia con due caratteri '/' consecutivi (ossia con '//'), la riga stessa viene eseguita solo in ricerca blocco. Ciò consente al programmatore di stabilire il 'percorso' da fare in ricerca blocco e quindi, eventualmente, di saltare serie intere di operazioni.
Sezionamento di programma
Una riga che inizia col carattere ':' indica un sezionamento di programma. Dopo il carattere ':' deve essere programmato un numero che indica la sezione.
Esempio:
...
:10
N38 T10 M6
N39 X50
...
Il sezionamento di programma serve a rendere molto più rapida la ricerca blocco, in quanto non vengono elaborate tutte le istruzioni appartenenti a sezioni diverse da quella cercata. Per questo è necessario che, dopo un sezionamento programma, siano programmate tutte le istruzioni necessarie a una corretta ripresa della lavorazione. In particolare, dopo un sezionamento programma è obbligatoria la programmazione (o la conferma) dell'utensile programmato e dell'utensile sul mandrino (T... M6).
Dopo il reset è attiva la sezione zero: tutte le istruzioni contenute nella sezione zero sono comunque elaborate durante la ricerca blocco, anche se si ricerca una sezione diversa dalla zero. Ciò accorcia il programma perché evita di dover riprogrammare a inizio di ogni sezione le informazioni 'fisse’.
Esempio:
LAVORAZIONE COPERCHIO%
N1 G37OL
:1
N10 T1 M6
Numero
sezione
Azzera
numero
progressivo
N11 S1000 M3
N12 OX1 OY1 OZ1 G0 X0 Y0
...
:2
N20 T2 M6
N21 OX2 OY2 OZ2
...
Non è necessario riprogrammare G37OL all'inizio di ogni sezione perché è
contenuto nella sezione zero, che viene sempre eseguita in ricerca blocco. È
lecito, e non porta problemi particolari, richiamare in una sezione righe
appartenenti a un'altra sezione. Il numero di sezione non è un parametro e deve
essere intero (senza virgola né punto decimale).
Il numero sezione (programmato con i ":" a inizio riga ISO) può
arrivare fino al massimo di 99999.
Non è necessario che le sezioni siano in ordine crescente di numero, ma per
ragioni di chiarezza si consiglia di mantenere questo ordine.
Le righe di sezionamento, quelle con il ":", non devono avere il
numero di blocco N (devono iniziare con ':').
Un sezionamento di programma opera anche l'azzeramento del numero progressivo
(numero di blocco).
Qui di seguito si dà un esempio di struttura di programma con sezionamento. Le
regole da seguire per ottenere un buon risultato sono molto semplici.
Nella sezione zero (che viene sempre letta in ricerca blocco):
- mettere le informazioni valide per tutto il programma
- non mettere cambio utensile (non è un errore, ma non è utile)
- mettere un sezionamento prima di ogni cambio utensile
- ricordarsi di programmare tutte le funzioni di macchina dopo ogni
sezionamento
PROVA PER SEZIONAMENTO%
N1 G37OL G25XYZ OX1 OZ1
le informazioni della sezione zero vengono sempre lette in ricerca blocco
....
:1
N2 T1 M6
per certi tipi di cambio utensile si può anticipare la ricerca del prossimo utensile
N3 T2
...
devono essere date tutte le funzioni di macchina programma dell'utensile T1
N4 S100 M3 M41
:2
N20 T2 M6
qui si deve riconfermare T perché è nuova sezione
N21 T3
1-6
N22 S500 M3
N23 !GON6-N8!
le righe N6-N8 appartengono a un'altra sezione
N24 ...
In un programma sezionato come sopra, si può ricercare, con grande rapidità, qualsiasi inizio sezione.
Per esempio:
3 ENTRA: :2
Il CN esegue le seguenti operazioni:- legge ed acquisisce tutta la sezione zero- salta le sezioni diverse dalla 2 - si posiziona all'inizio della sezione 2
Righe di sezionamento programma sono anche le righe introduttive delle sezioni locali di parametri, origini ed utensili: esse sono fuori dal part-program e sono usate solo come contrassegno.
Esempio:
...
:OS segnale inizio sezione locale origini
X1= 10.121
...
La riga :OS non genera operazioni né deve essere elaborata come riga di part-program: serve solo per contrassegnare l'inizio della sezione locale origini.
RIGHE ISO
Le righe ISO sono le sole che possano contenere
istruzioni operative, ossia che possono provocare azioni FISICHE sulla macchina
utensile.
Le righe ISO sono costituite da un numero di riga (non necessario) e da una serie di istruzioni elementari.
1.3.1 Concatenamento di righe
Se in una riga devono stare più caratteri di quanto contenibili in una sola
riga, si può spezzare una riga in più parti, che però
restano funzionalmente un solo blocco di istruzioni. Ciò si ottiene mettendo il
carattere '$' prima della fine della riga: la riga successiva viene concatenata alla riga che contiene il '$', gli
eventuali caratteri tra '$' e fine riga sono ignorati.
Si possono concatenare più righe, con un massimo di 240 caratteri contenuti.
Esempio: Equivale in tutto a :
N12G0X0$ AB12
Y0Z0$
M6 N12G0X0 Y0Z0M6
N13G1... N13G1...
Nota sulla concatenazione di righe di part-program col carattere "$"
Si precisa che la concatenazione di più righe di part-program col carattere "$" è possibile solo in programmi eseguiti da memoria interna CMOS, e che invece non è possibile in programmi eseguiti in DNC.
Numero di riga
N99999.9999 Se c'è, il numero di riga deve essere a inizio riga.
N99999,9999 Il numero di riga è costituito dal carattere N seguito da un numero con fino a 9 cifre significative, prima o dopo la virgola o punto decimale: le specifiche sono le stesse dei valori numerici (vedi paragrafo successivo), ma 'N' NON è un parametro (ossia non può essere usato per espressioni ecc.).
I numeri di riga possono essere in qualsiasi ordine (si consiglia un ordine CRESCENTE!) e possono essere ripetuti più di una volta nello stesso programma: nel caso di ricerca blocco o di salto (GO N...) la riga trovata è sempre la prima a partire da inizio programma: una eventuale seconda riga con lo stesso numero non viene mai trovata.
Il numero di riga, oltre a dare un ordine e a rendere meglio comprensibile il programma, è utilizzato anche come indirizzo di destinazione di salto.
Per essere utilizzabile dal CN come indirizzo di salto, il numero di riga deve essere esattamente a inizio riga, senza spazi né caratteri intermedi. In alcuni casi la riga può essere cercata includendo i caratteri precedenti (% oppure /).La sequenza di caratteri da scrivere dopo "GO" deve essere identica alla sequenza di caratteri iniziale della riga da ricercare. Il punto decimale è considerato carattere diverso dalla virgola.
Esempi:
N12 G41... è trovato con !GON12!
%N1G41... è trovato con !GO%N1!
/N12G41... è trovato con !GO/N12!
N132,5HA... è trovato con !GON132,5! non con !GON132.5!
N132.5M3... è trovato con !GON132.5! non con !GON132,5!
Alcune funzioni (per esempio la G110 per costruzione di macro di svuotatura) generano automaticamente il numero di riga a partire dal valore di un parametro. In questi casi, per essere trovato:
- N deve essere a inizio riga senza spazi o caratteri aggiuntivi (%, /, //) - gli eventuali decimali devono essere separati col punto e non con la virgola
Il numero di riga 'N...' può essere omesso: in questo caso la riga non può costituire punto di arrivo di salto.
Istruzioni elementari, indirizzi,
valori numerici
Una riga ISO è formata, dopo il numero di riga 'N...', da una sequenza di
ISTRUZIONI ELEMENTARI, ognuna delle quali ordina la esecuzione di una
particolare operazione. Una istruzione elementare è
formata da due parti successive:
- l'INDIRIZZO
- il VALORE NUMERICO da assegnare all'indirizzo
Tra indirizzo e valore numerico ci possono essere un numero indefinito di
spazi. Tra due istruzioni elementari ci possono essere un numero indefinito di
spazi.
Alcune istruzioni elementari, dopo l'indirizzo, possono avere, al posto del valore numerico, una combinazione di caratteri (vedere p. es. origini), oppure possono avere, dopo il valore numerico, una 'coda’ descrittiva (vedere p.e. G25, G27, G28, G29).
INDIRIZZI Gli indirizzi sono costituiti, secondo le norme ISO, da una
singola lettera dell'alfabeto: poiché questa è una limitazione troppo gravosa,
lo Z32 ammette, come si vedrà meglio al capitolo
dedicato ai parametri, indirizzi di uno o due caratteri e due vettori PAR[ ] e
PAL[ ] con l'indice.
Per esempio:
X normalmente assegnato all'asse X
M funzione ausiliaria
MA funzione ausiliaria
F feed
PAR[ ] parametro con indice
Gli indirizzi determinano il tipo particolare di operazione che il CN deve
eseguire: alcuni indirizzi sono definiti dal costruttore della macchina
utensile (per esempio i nomi assi), altri possono essere definiti dall'utente
finale (parametri utente), mentre altri hanno funzioni
già prefissate (parametri di sistema ecc.). In particolare sono già fissati:
G funzioni preparatorie
M, MA, MB, MC funzioni ausiliarie
F feed
S Speed
O origini supplementari
T, TA, TB utensile programmato, attuale, futuro
PAL [ ] parametro con indice per comunicazioni con logica programmabile
VALORI Numerosi altri indirizzi hanno un significato specifico (ved. capitolo
dedicato parametri).
NUMERICI Gli indirizzi sono seguiti, per completare l'istruzione elementare, da
un valore numerico.
I valori numerici possono essere introdotti direttamente oppure, come si vedrà
meglio al paragrafo relativo, come risultato di una ESPRESSIONE
matematica. Quando i valori numerici sono introdotti direttamente essi sono
programmati come numeri con virgola decimale, con le seguenti regole:
- deve essere sempre programmato almeno un valore (lo zero si programma con una
o più cifre ‘0’)
- per l’input numerico vengono accettati numeri
che abbiano un massimo di 9 cifre significative, prima o dopo la virgola o
punto decimale (per l'esattezza il massimo numero significativo accettato è
1.000.000.009). Oltre viene errore programma CN1D14.
- gli zeri iniziali della parte intera possono essere omessi, anche se la parte
intera è zero e c'è una parte frazionaria
- la separazione tra la parte intera e la parte decimale è segnalata dalla
virgola ',' o indifferentemente dal punto '.'
- non devono esserci caratteri né spazi all'interno del numero
Per es., per programmare 0,1 all'indirizzo X si può programmare
indifferentemente:
X.1
X .1
X,1
X0,1
X 0.1
X .100
X00000,1000
Altri esempi di programmazione corretta:
999999999
0,999999999
0,00000999999999
99999,9999
X12345,678
X123456,2
X0,1234567
Esempi di programmazione errata:
X000012345,67800000 errore più di 9 cifre significative
X0 ,1 uno spazio all'interno del numero
X1,00000999999999 errore più di 9 cifre significative
Righe di commento
In un part-program possono essere inserite delle righe di commento.I commenti
devono essere racchiusi tra parentesi tonde.
All'interno delle righe di commento è vietato l'uso del carattere $.
FUNZIONI PREPARATORIE G
Le funzioni con indirizzo G si chiamano 'preparatorie' in quanto predispongono il controllo a interpretare successive istruzioni.
Il numero che segue G identifica la particolare funzione alla quale è predisposto lo Z32. Il valore che segue G deve essere sempre un valore numerico (NON può essere il risultato di una espressione). La G non è un parametro.
Solo alcune funzioni G (ossia solo alcuni valori numerici) sono interpretate ed eseguite dallo Z32: se si programma una G non implementata lo Z32 dà l'apposito allarme.
Le funzioni sono quelle previste dalle norme ISO, con alcuni adattamenti. In particolare:
- gli zeri iniziali delle G possono essere omessi (G00 diventa G0)
- possono essere programmate nello stesso blocco più funzioni G: in questo caso le G sono riconosciute dal CN ed eseguite via via che vengono incontrate nella riga programmata: in caso di programmazione di più G contrastanti resta attiva l'ultima G programmata. - di seguito a particolari funzioni G possono essere specificati dei dati aggiuntivi che ne completano la definizione.
Si chiameranno MODALI le funzioni G il cui effetto si mantiene anche nei blocchi successivi a quello in cui sono programmate: le funzioni G modali sono normalmente annullate da apposite altre funzioni G.
Alcune G richiedono l'ARRESTO della macchina: il profilo deve essere completamente definito al momento della loro esecuzione. Non deve perciò essere in corso una contornatura con profilo aperto né una contornatura con compensazione raggio.
Queste particolari G saranno indicate nel seguito come CON ARRESTO. Se si programmano queste G in un punto vietato della traiettoria il CN dà apposito allarme.
Altre funzioni (M, MA, MB, MC, T, O) richiedono l'arresto, come si vedrà meglio ai paragrafi relativi.
G0 - posizionamento in rapido
Posizionamento in rapido con assi in traiettoria.
Modale, attiva a inizio esecuzione.
G0 disattiva G1, G2, G3 ed è disattivata da G1, G2, G3, G41, G42.
Possono essere programmati fino a cinque assi contemporanei. La traiettoria percorsa dagli assi per raggiungere il punto finale programmato è rettilinea: tutti gli assi programmati arrivano insieme nel punto finale.
La velocità durante gli spostamenti in G0 è ottimizzata per la massima rapidità di movimento, senza superare il rapido definito per ciascuno degli assi in moto.
Se più assi sono in moto, la maggiore rapidità si ha quando almeno uno degli assi va al suo rapido: le velocità degli altri assi sono ridotte in proporzione per mantenere il movimento rettilineo. Per esempio, si abbiano X e Y rapido a 10 m/min, Z rapido a 5 m/min, assi tutti a quota iniziale zero:
N10 G0 X100 Y100 X=Y=10 m/min=14,142 m/min in traiettoria
N10 G0 X100 Z10 X=10 m/min, Z=1 m/min
N10 G0 X10 Z100 Z=5 m/min, X=0.5 m/min
G1 - moto rettilineo in lavoro
Moto rettilineo in lavoro con assi in traiettoria.
Modale.
G1 disattiva G0, G2, G3 ed è disattivata da G0, G2, G3, G40, G41, G42.
G1 per 5 Possono essere programmati fino a cinque assi contemporanei. La
traiettoria percorsa dagli assi assi per raggiungere
il punto finale programmato è rettilinea: tutti gli assi programmati arrivano
insieme nel punto programmato.
Feed La velocità in G1 è la feed (indirizzo F) programmata.
C'è la limitazione che nessun asse interessato al moto, in nessuna condizione di override (al massimo può arrivare al 120%) con qualsiasi F programmata può superare il proprio rapido. Per ottenere questo, la velocità con override al 100% non può superare, per nessun asse, il rapido diviso per 1,2.
Per esempio, se si hanno tre assi, X e Y con rapido a 10 m/min, Z con rapido
a 5 m/min, e si fa un movimento a partire dall'origine (tutte le quote a zero)
si possono avere i seguenti casi: movimento velocità con override al 100%
G1 F8000 X100 8000
G1 F10000 X100 8333
G1 F30000 X100 8333
G1 F10000 X100 Y100 10000 (X e Y vanno a 7070 mm/min)
G1 F10000 X100 Z100 5891
Nell'ultimo caso la Feed di Z è al max di 5000/1.2=4166 e quindi anche X, per
ottenere un movimento rettilineo . Vedere anche il
capitolo dedicato alla gestione della Feed.
ATTENZIONE
La programmazione di G1 da solo (senza quote) su una riga è lecita, ma ha un significato particolare (moto rettilineo APERTO, vedere capitolo dedicato alla programmazione dei profili) e non ha solo il significato di predisporre un moto in G1.
Per esempio:
...
N10 G1
N11 X0 Y0
...
non è ammessa: al blocco 11 dà errore CN3414 PRECEDENTE APERTO
G2 - arco di cerchio orario
Arco di cerchio orario in lavoro.
Modale.
G2 disattiva G0, G1, G3 ed è disattivata da G0, G1, G3, G40, G41, G42.
La velocità è la Feed programmata, salvo la riduzione al rapido dell'asse più
lento interessato al moto diviso per 1.2 per non superare il rapido anche con
override al 120%. Per esempio, un cerchio in XZ, con rapido X a 10 m/min e rapido di Z a 5 m/min, ammette una velocità
massima con override al 100% di 4166 mm/min.
Confrontare anche la velocità in G1.
Per velocità si intende quella del centro fresa, salvo alcuni casi di
adattamento della velocità nel caso di correzione raggio utensile (vedere
capitolo dedicato alla correzione raggio).
Il piano di contornatura deve essere precedentemente selezionato con
Vedere anche capitolo dedicato alla programmazione dei profili.
Esempio:
...
N10 F1000 G0 X0 Y0 Z0
N11 G2 X100 Y0 I50 J0
...
G3 - arco di cerchio antiorario
Arco di cerchio antiorario in lavoro. G3 disattiva G0, G1, G2 ed è disattivata
da G0, G1, G2, G40,
G41, G42.
Tutto il resto come G2.
G4 - sosta
Attiva solo nel blocco, con arresto.
Il tempo di sosta è pari al valore del parametro 'TT', che può essere programmato nello stesso blocco oppure in un blocco precedente. Se dall'inizio dell'esecuzione non è mai stato programmato 'TT' il tempo di sosta è zero. Il parametro 'TT' definisce il tempo di sosta in secondi e decimali.
Nella esecuzione della sosta si può avere una incertezza nel tempo effettivo di qualche decina di millisecondi a causa dei cicli di lavoro del microprocessore.
Esempio:
...
N10 TT2.5
N11 G4 (SOSTA DI 2.5 SECONDI)
...
G6.2 - gestione delle NURBS
Z32 gestisce NURBS (Non Uniform Rational B-Spline) fino al 4.o ordine (splines
cubiche) con un numero massimo di tre assi.
Una nurbs è introdotta dalla G6.2. Esempio di programma:
N1 G0 X10 Y30 Z0 F1000
N2 G6.2 P3 K5 Y30 Z0 R1
N3 K5 Z20 R1
N4 K5 Y45 R1
N5 K6 Y70 Z0 R1
N6 K7
N7 K7
N8 K7
N9 G0 X0 Y0 Z0
La numerazione delle righe N serve qui da riferimento ma
non è obbligatoria.La nurbs dell'esempio inizia con N2 e termina con N8.Prima
della nurbs ci possono essere movimenti qualsiasi.La G6.2 (riga N2) segnala
l'inizio di una nurbs.
Prima della riga con G6.2 e durante tutta la nurbs:
- G114 deve essere attiva
- G113A non deve essere attiva
- la correzione raggio non deve essere attiva
Il parametro P definisce l'ordine della nurbs, i valori ammessi sono 2, 3, 4,
se non viene
programmato assume per default il valore 4. Il parametro P non può essere
cambiato all'interno di una nurbs.
Nella riga introduttiva è obbligatorio programmare tutti gli assi interpolati
dalla nurbs: possono essere da
Le quote assi nelle prima riga della nurbs devono
essere coincidenti con le ultime raggiunte prima della nurbs.
Da notare che se la nurbs è a due assi (per esempio YZ) la programmazione di 3
assi nella prima riga (per esempio XYZ) è consentita e non ha effetti negativi
sui movimenti macchina, ma è sconsigliata perché forza durante tutta la nurbs
il calcolo di tre assi, con aggravio di calcoli matematici.
K è il valore del nodo. Deve essere programmato nella prima riga e deve essere
non decrescente per tutta
R
Durante la nurbs non sono ammesse funzioni "con arresto" (per esempio
funzioni ausiliarie).
Per un numero di righe iniziali pari all'ordine P (quindi 3 righe se P=3) il
nodo K deve coincidere.
Nelle righe successive K è obbligatorio e deve essere non decrescente.
La nurbs termina quando sono programmate un numero di
righe pari all'ordine P contenenti solo il K senza quote.
Dopo la nurbs è obbligatorio programmare il tipo di movimento (G0, G1 ecc.).
I parametri della G114 influenzano il CN durante
La
Qualora la nurbs contenga spigoli (sono determinati da nodi coincidenti o quote coincidenti) questi sono trattati come spigoli di G114. La programmazione della feed durante una NURBS viene acquisita e resa efficace alla prima occasione utile, che si realizza circa nel punto giusto con NURBS di quarto ordine (P4) ed è ritardata di circa metà di un blocco programmato con NURBS di terzo ordine (P3).
La programmazione della feed durante una NURBS viene acquisita e resa efficace alla prima occasione utile, che si realizza circa nel punto giusto con NURBS di quarto ordine (P4) ed è ritardata di circa metà di un blocco programmato con NURBS di terzo ordine (P3).
La sfasatura tra la programmazione della feed e la sua esecuzione dipende dal fatto che con NURBS attive non c’è una precisa corrispondenza tra un movimento programmato e un movimento di macchina, in quanto un movimento di macchina viene generato per effetto di più movimenti programmati.
G10 - posizionamento grossolano
veloce
La G10 si usa come la G0 (posizionamento rapido) e di questa mantiene tutte le caratteristiche, salvo che la procedura finale di posizionamento è accelerata.
La G10 è modale e mutuamente esclusiva con G0, G1, G2, G3.
La procedura finale di posizionamento è accelerata e dipende da alcuni parametri di taratura: Se il CN non possiede le speciali tarature per il funzionamento della G10 probabilmente il risparmio di tempo per ogni posizionamento sarà minimo.
ATTENZIONE
La programmazione di una G10 elimina la limitazione alla accelerazione seconda impostata da NTAR. Vedere help tarature su “opzioni globali moti assi”.
In generale, la G10 agisce nel seguente modo:
- viene eliminata la fase finale di avvicinamento
'dolce'
- viene eliminato il tempo di posizionamento (se esiste)
- si passa al blocco successivo a una certa distanza dal punto finale
(definibile in taratura) che può essere superiore alla soglia di posizionamento
Gli effetti negativi della G10 sono:
- un possibile overshoot sul punto finale (gli assi possono andare oltre il
punto programmato perchè arrivano con eccessiva accelerazione).
- il passaggio al movimento successivo quando gli assi sono ancora lontani dal
punto programmato (da qualche centesimo a qualche decimo a
seconda delle tarature). Se gli assi restano vivi nel movimento
successivo sono richiamati alla posizione corretta: in condizioni normali
l'asse rientra nelle precisioni di macchina in pochi decimi di secondo.
In generale quindi è sconsigliato l'uso della G10 quando:
- il sorpasso del punto finale può essere dannoso
- è subito necessaria la precisione degli assi posizionati (non c'è tempo per
il successivo
recupero della posizione)
- uno o più assi posizionati sono bloccati (con G29) subito dopo il
posizionamento (non essendo più vivo, l'asse non viene richiamato in posizione)
Gestione del G10 con gestione
avanzata della velocità (G113V)
Il G10 permette un posizionamento finale più ruvido ma più veloce rispetto al
normale G0.
Se sono attivi i moti compensati (G113F) il "colpo" introdotto da G10 sul posizionamento finale è più evidente.
Nel caso di gestione avanzata della velocità (G113V), che ha rapidificato molto il posizionamento, il vantaggio della G10 è ridotto, e quindi si è ritenuto un migliore compromesso eliminare la G10 (anche se programmata) e quindi il colpo agli assi quando è attiva la G113F.
Quindi:
- se non è attiva la gestione avanzata (G113V) il G10 funziona normalmente
- se è attiva la G113V e i moti sono morbidi (G113P) il G10 funziona
normalmente
- se è attiva la G113V e i moti sono rigidi (G113F) il G10 viene
automaticamente convertito in G0.
G12 - coordinamento terzo asse
Chiede al CN di interpretare la programmazione del terzo asse
come coordinata ai due assi del piano.
Modale. Disattivata da G13.
La G12 è incompatibile con la G111S (movimento di copiatura), se viene programmata G111S la G12 viene automaticamente disattivata.
La quota programmata sul terzo asse è raggiunta, a fine movimento, insieme alle due quote del piano. La velocità con G12 attiva è la F programmata, calcolata sulla traiettoria (ossia la risultante vettoriale delle velocità dei tre assi è la F programmata).
Poiché il movimento in G12 è comunque calcolato sul piano e il terzo asse è 'trascinato' dai due assi del piano, si ha una condizione molto impegnativa se i movimenti sono molto inclinati: in questo caso infatti è necessario ridurre la velocità del moto nel piano in proporzione all'inclinazione.
Per la gestione della velocità con G12 attiva, vedere il paragrafo “Gestione della velocità” nel capitolo dedicato alla programmazione dei profili. G12 può essere attiva anche in correzione raggio (G41 o G42 attive): permette quindi il moto del terzo asse, sempre come coordinato agli altri due assi.
G12 può rimanere attiva, in correzione raggio, anche nei tratti che vengano accorciati o eliminati.
ATTENZIONE
Se un tratto che viene accorciato od eliminato per effetto della correzione raggio, contiene un movimento del terzo asse, questo movimento viene eseguito completamente al prossimo movimento utile.
Esempio:
TASCA CON MOTO TERZO ASSE %
N1 G25XYZ G0 X0 Y10 Z0
N2 R10 F1000 G109E
N3 G42 X0 Y0 QF0
N4 G1 X10
N5 Y15
N6 X25 Z30
N7 Y0
N8 X50
N9 G40
N10 M2
La G109E alla riga N2 è necessaria per risolvere la tasca in correzione raggio, i movimenti sono quelli normali fino a N4 compresa.
Qui si ha una rotazione intorno allo spigolo, che non viene
terminata perché il diametro fresa è maggiore della larghezza della tasca
(diametro fresa
Tutti i movimenti successivi vengono eliminati fino alla rotazione intorno allo spigolo di uscita N7 (X25) Y0.
Quindi il movimento del centro utensile è composto di due rotazioni incomplete, una intorno allo spigolo di entrata e una intorno allo spigolo di uscita, per “appoggiare” la fresa sugli spigoli della tasca.
Il blocco N6 che contiene la salita a Z30 viene eliminato, e quindi la salita viene fatta al primo movimento che viene effettivamente eseguito.
I movimenti del centro fresa dell’esempio sono perciò composti da:
- movimenti a quota Z0 fino allo spigolo X10 Y0
- arco (incompleto) a quota Z0 intorno allo spigolo X10 Y0
- arco (incompleto) intorno allo spigolo X25 Y0 a quota crescente da Z0 a Z30
- proseguimento a Z30 fino a fine traiettoria
Eliche
Il tratto piano su cui agisce G12 può essere qualsiasi, lineare o circolare, inclusi i tratti di attacco e distacco dal profilo (G41 e G42). Nel caso che il tratto nel piano sia circolare, è eseguita una interpolazione elicoidale.
Poiché G12 pone limitazioni alla programmazione (pendenza, correzione raggio ecc.) deve essere programmata solo quando è necessaria, ed immediatamente disattivata quando non serve più.
Esempio:
...
(SENZA CORREZIONE RAGGIO)
N20 G0 X0 Y0 Z0 F1000
N21 G12 G2 X50 Y0 I25 J0 Z5 (ELICA)
N22 G1 X100 Z0 (RETTA INCLINATA)
N23 G13
...
(CON CORREZIONE RAGGIO)
N50 G0 X0 Y0 Z0
N51 G12
N52 G41 X50 Y0 QF0 Z2 (RACCORDO ELICOIDALE)
N53 G1 X60 Z4 (RETTA INCLINATA)
N54 G13
D. ELECTRON
CNC Z32 Programmazione Cap.2 - Funzioni preparatorie
N55 G2 X60 Y-10
N56 G40
...
G13 - annulla coordinamento terzo
asse
Annulla G12 e ripristina il modo normale di programmazione quote.
Modale. È attiva al reset.
Per l'esempio vedere G12.
G16 - ridirezione nomi assi
Possono presentarsi occasioni nelle quali un programma scritto per una
configurazione di macchina debba essere poi eseguito
con una diversa configurazione nella quale gli assi debbano essere scambiati.
Lo scambio può essere effettuato con
Per esempio, ammettiamo che una macchina contenga, nell'ordine, gli assi X Y Z B C. L'ordine è importante perché la ridirezione avviene in base all'ordine: i caratteri che seguono G16 sono assegnati agli assi fisici nello stesso ordine in cui sono elencati.
La situazione "normale" corrisponde quindi a:
G16XYZBC
Ammettiamo che si abbia un programma in cui debbano essere scambiati gli assi X
e Z, ossia
quando è programmato l'asse X si deve muovere Z e
quando è programmato Z si deve muovere X. Si dovrà programmare, prima dei
movimenti con gli assi scambiati:
G16ZYX
Con questa istruzione la Z viene ridiretta sul primo asse
(che abbiamo visto è X), Y è ridiretta su Y
(invariata) e X è ridiretta su Z.
Regole:
- i caratteri assegnati agli assi devono seguire G16, senza spazi intermedi
- uno spazio o il fine riga interrompono la sequenza
dei caratteri e quindi la G16
-i nomi assi ammessi sono i caratteri dell'alfabeto maiuscolo esclusi
FGIJKLMNORST altrimenti viene errore programma CN1D14
-se i caratteri che seguono G16 sono in numero minore degli assi continui della macchina gli assi residui rimangono invariati
- dopo la G16 se tra gli assi risultanti ci sono ripetizioni di nomi assi
viene errore CN1D14. Per esempio, se una macchina ha gli assi XYZBC e viene programmata G16ZX il risultato è G16ZXZBC, quindi Z è
ripetuto e viene errore programma
- con G53 attiva (assi riferiti all'origine base) oppure se è in corso un
sottoprogramma di sistema (ciclo fisso o M speciale) la G16 viene sospesa. Ciò
impedisce che la G16 possa interferire col funzionamento di programmi
essenziali di sistema
- oltre che per le quote programmate, la ridirezione degli assi è attiva per
gli assi individuati da G25, G28, G29, G43, G44, KM, KD.
-la ridirezione degli assi è attiva per tutti i movimenti programmati, in lavoro e in rapido, ma non cambia il significato di I J, che comunque sono associati al primo e secondo asse della terna di lavoro. La programmazione di G25 con assi ridiretti mette di nuovo a posto le corrispondenze
G25 - terna di assi di lavoro
Permette la scelta dei tre assi di lavoro della
macchina.
Modale, con arresto.
Dopo G25 devono essere programmati di seguito tre caratteri con tre nomi di assi definiti come continui sulla macchina. Per esempio: G25XYZ definisce che la terna di lavoro è costituita dai tre assi X, Y, Z. I primi due assi costituiscono il piano di contornatura (in cui sono possibili le interpolazioni circolari). L'altro asse è un asse aggiuntivo coordinato ai primi due (può essere usato per i cicli fissi e per altre funzioni di macchina).
All'accensione e ad ogni inizio programma è attivata la terna di lavoro di taratura definita dal costruttore della macchina. È importante, per non avere comportamenti di macchina apparentemente sorprendenti, definire in modo corretto i sensi di movimento degli assi.
La lavorazione avviene per movimento relativo del mandrino rispetto al pezzo: occorre fare attenzione che in dipendenza dalla struttura della macchina si può muovere il mandrino oppure il pezzo, e che sulla stessa macchina per alcuni assi si può muovere il mandrino e per altri il pezzo. Per evitare confusione si dovrà sempre considerare, non il moto fisico dell'asse, ma la traccia lasciata dal mandrino sul pezzo in conseguenza del moto dell'asse.
Due dei tre assi che compongono la terna
individuano il piano di lavoro (ossia quello in cui è consentita
l'interpolazione circolare, la correzione raggio ecc.). Per scegliere quale dei
due è il primo
e quale il secondo asse del piano (che poi potranno
essere programmati anche con AA e AB rispettivamente anziché con la lettera
caratteristica) si dovrà:
- mettersi idealmente dalla parte positiva del terzo asse
(sempre inteso come traccia di lavoro);
- eseguire idealmente un movimento verso il positivo di ciascuno dei due assi
del piano;
- ruotare sempre idealmente il piano fino a che una traccia sia positiva verso
DESTRA e
l'altra traccia sia positiva verso l'ALTO.
Secondo le norme ISO841 la nomenclatura da assegnare agli assi così
determinati è:
- X per il primo asse del piano di lavoro
- Y per il secondo asse del piano
- Z per il terzo asse
Non sempre le macchine seguono questa normativa, soprattutto quando la stessa macchina può essere usata con testa verticale oppure orizzontale, col montaggio di appositi accessori. In questo caso non può essere cambiata la lettera identificatrice dell'asse né il senso di moto dell'asse da considerare positivo (che restano legati all'asse fisico): lo Z32 però consente, con la semplice programmazione di G25 seguita dai tre assi nell'ordine prima descritto, di adattarsi alle varie situazioni.
Nel caso che sia programmata una terna errata (ossia col primo e secondo asse del piano scambiati) lo Z32 non può accorgersi dell'errore (che può non essere un errore se si ipotizza un mandrino che lavora 'dal di sotto'), ed esegue i movimenti che sarebbero propri di una macchina col tipo di assi programmati: apparirà all'operatore che siano scambiati tutti i movimenti circolari (G2 con G3 e G41 con G42).
Esempio:
...
(QUI È ATTIVO G25XYZ)
N10 G0 X0 Y0 Z0
N11 B0
N12 G25BYZ
N13 G2 B30 Y0 I15 J0
N14 G25XYZ
...
2-10 D. ELECTRON
Cap.2 - Funzioni preparatorie CNC Z32 Programmazione
Terna di lavoro G25 con sistemi a due
assi
Se la macchina è a due assi (tipico per tornio o plotter di tipo semplice)
l’artificio per programmare
i due assi di macchina è quello di ripetere il nome di
uno dei due assi (per esempio G25ZXX).
- fine sottoprogramma
Segnala la fine del sottoprogramma.
Dopo il completamento di tutte le funzioni specificate nella riga che contiene
'G26' viene abbandonato il sottoprogramma e ripresa
l'esecuzione del programma (o sottoprogramma) chiamante, a partire dalla riga
successiva a quella in cui era stato chiamato il sottoprogramma. Si può
programmare 'G26', che viene normalmente eseguita,
anche all'interno di una subroutine interna al sottoprogramma (vedere anche
capitolo righe evolute).
Esempio:
... %
N10!GOP20! N1 HA<HB*2-HC>
... N2 !IFHA>0;GON4!
N3 Z<Z-HE>
N4 G26
G27 - ciclo fisso e sottoprogramma
permanente
G27C.... Attiva Ciclo fisso
Modale.
Dopo G27C deve essere programmato il numero che indica il ciclo fisso attivato.
Con G27C0 si disattivano i cicli fissi.
All'accensione e a inizio programma è attiva G27C0.
G27X Sospende ciclo fisso
Attiva solo nel blocco, sospende solo per il blocco in cui è programmata,
l'esecuzione
dell'eventuale ciclo fisso attivo.
Per maggiori chiarimenti sui cicli fissi vedere il capitolo dedicato, più avanti su questo manuale.
G27P... Sottoprogramma permanente
Modale
Dopo G27P deve essere programmato il numero di sottoprogramma permanente da
attivare.
Con G27P0 si disattiva il sottoprogramma permanente.
Per maggiori chiarimenti vedere il capitolo dedicato ai sottoprogrammi
permanenti.
G28 - attivazione asse
Chiede al CN di tenere sotto controllo l'asse anche quando l'asse non è
interessato al movimento in corso (asse vivo).
Modale, con arresto.
Dopo G28 deve essere specificato il nome (per esempio X) dell'asse che si vuol tenere vivo, per esempio G28X.
Deve essere specificato un solo asse, tra quelli definiti come continui dalle tarature di macchina.
Se si vogliono attivare più assi si può programmare G28 più volte nella stessa riga o in righe successive. Per esempio:
G28Z G28A
chiede di tenere sempre sotto controllo gli assi Z e A.
Alcuni assi (da definire nelle tarature di macchina) possono essere definiti come vivi fin dall'accensione: ad ogni inizio programma (reset) è ripristinata la situazione di assi vivi/non vivi dell'accensione.
È lecita, e non ha effetto, la richiesta di attivare un asse già vivo.
Fino a Possono essere vivi contemporaneamente fino a 13 assi, ma ogni asse vivo richiede al microprocessore un impegno supplementare, che può non essere compatibile con configurazioni di sistema molto complesse. È perciò consigliabile tenere vivi sempre solo gli assi realmente necessari.
Al momento della presa in controllo di un asse in precedenza non attivo lo Z32 acquisisce la quota reale dell'asse, senza andare in allarme se la quota era stata spostata dall'ultimo posizionamento. Ciò permette di:
1) portare un asse in quota e abbandonarlo
2) muovere l'asse con mezzi diversi dal CN (manuale, da logica o con altri
automatismi)
3) riprendere l'asse sotto controllo dalla quota effettiva senza che si
verifichino errori
Si noti che il parametro quota asse non viene inizializzato da G28, anche se in precedenza l'asse era 'morto'. L'acquisizione delle quote assi nei relativi parametri è fatta esclusivamente con G105
(vedere paragrafo relativo).
L'attivazione dell'asse viene eseguita prima degli eventuali moti assi contenuti nella riga. Esempio (macchina con XYZ sempre vivi e B continuo non vivo):
...
N10 G0 X0 Y0 Z0 F300
N11 G28B B0
N12 G1 Z-10
N13 Y50 B50 G29B
...
Nel caso di assi ciclici devono essere tenute presenti alcune particolarità vedere a proposito nel capitolo “Prestazioni speciali” il paragrafo “Assi continui ciclici” .
Per la gestione degli assi SCARA
M95, capitolo allarmi CN..13).
Assi vivi trasparenti al reset
È possibile stabilire in taratura (opzioni software e di programmazione) che lo
stato degli assi (vivi/non vivi) sia trasparente al
reset.
Se questa opzione è attiva lo stato degli assi rimane inalterato anche allo spegnimento del CN.
Ciclo automatico G28-G29 se
programmato asse non vivo fuori da G98
È possibile in semiautomatico o automatico da part-program programmare un asse
non vivo senza bisogno del G28 preventivo: il risultato è equivalente ad avere
programmato G28 (attivazione) e G29 (disattivazione).
Questo ciclo automatico non viene fatto se è attiva la G98, che non ammette al suo interno funzioni che richiedano l'arresto.
L'allarme CN 3A14 ASSE NON VIVO può quindi venire solo se si tenta di programmare un asse non vivo con G98 attiva.
- Se si programma un asse non vivo, e l'asse è già sotto la soglia di posizionamento definita in taratura, il movimento programmato viene ignorato e quindi non si genera l'inutile ciclo di sblocco/blocco, con notevole risparmio di tempo.
Naturalmente se l'asse è vivo viene eseguito qualsiasi movimento, anche se di lunghezza inferiore alla soglia di posizionamento.
Il ciclo di sblocco/blocco viene comunque generato se l'asse non vivo è uno dei tre della terna di lavoro attiva al momento, ma dovrebbe essere una situazione decisamente non usuale: gli assi della terna di lavoro infatti sono tipicamente sempre vivi.
- Nel caso che si programmasse l'origine sulla stessa riga, del movimento dell’asse morto.
Per esempio:
G29B ... (l'asse B è "morto")
OB1 B0
verrà forzata comunque l'esecuzione del ciclo di sblocco e blocco dell'asse stesso.
Ciò significa che, se nella stessa riga dove è programmato il movimento è programmata anche l'origine, ci sarà sempre il ciclo di sblocco e blocco dell'asse, anche se l'asse è già posizionato e quindi rimane fermo. Sarà compito del programmatore, se vuole eliminare questo ciclo, spezzare la riga in due e programmare l'origine in una riga precedente.
- Se viene programmato un asse morto con, nella stessa riga, la programmazione di G53 o G54.
Per esempio:
N100 G53 B10 X20 (B è un asse morto)
L’asse morto l'asse viene comunque reso vivo, anche se compie un movimento nullo.
Nota sulla gestione della programmazione degli assi non vivi
- Se da part-program si programma il movimento di un asse non vivo Z32, l'asse viene automaticamente attivato, ma solo se la posizione fisica dell'asse non coincide con quella programmata.
La posizione fisica dell'asse è considerata coincidente con quella programmata se l'errore è inferiore all'errore di posizionamento di taratura (normalmente dell'ordine di qualche centesimo).
Può nascere qualche problema se l'errore è molto vicino a quello tollerato. Se la quota rilevata dell'asse non vivo (che non dovrebbe muoversi) ha dei piccoli cambiamenti tali che l'errore passi da sotto a sopra la soglia di taratura può verificarsi un allarme CN1513.
La quota rilevata può oscillare di qualche passo rilevatore, pur rimanendo entro la soglia di posizionamento, quindi il sorpasso della soglia si può verificare se la posizione è già al limite della tolleranza, il che accade per esempio quando:
- una tavola girevole (o altro asse) durante il bloccaggio ha un leggero movimento che la porta molto vicino all'errore di taratura ammesso - viene programmato un movimento di un asse bloccato di entità di poco inferiore alla soglia di posizionamento
In questi casi si consiglia di non utilizzare l'attivazione automatica dell'asse morto e di forzarlo vivo direttamente da part-program.
disattivazione asse
Chiede al CN di abbandonare l'asse specificato.
Modale, con arresto.
Dopo G29 deve essere specificato il nome (p. es. X) dell'asse che si vuole
abbandonare.
Deve essere specificato un solo asse, tra quelli definiti come continui dalle
tarature di macchina.
Se si vogliono disattivare più assi, si può programmare G29 più volte nella
stessa riga o in righe diverse.
Per esempio: G29X G29A chiede al CN di abbandonare l'asse X e l'asse A.
È lecita, e non ha effetto, la richiesta di disattivare un asse non attivo.
La disattivazione dell'asse si ha dopo gli eventuali moti assi contenuti nella
riga.
Nel caso di assi ciclici devono essere tenute presenti alcune particolarità,
vedere a proposito nel capitolo “Prestazioni speciali” il paragrafo
“Assi continui ciclici”.
Per l'esempio vedere G28.
G33 - filettatura
Modale in esecuzione automatica, attiva solo nel blocco in semiautomatico.
Funzione tipica dei torni, ma usabile anche per frese.
G33 disattiva G0, G94 (mm/min), G95 (mm/giro), G96 (m/min), attiva G1.
G33 è disattivata da G0, G93, G94, G95, G96. Se è disattivata con G0 rimane
automaticamente attiva G95 (mm/giro).
Se il primo tratto di filettatura è circolare occorre programmare G33G2 oppure
G33G3. Notare che G33 deve precedere nella riga G2/G3: se G2 o G3 sono
programmati prima di G33 (es. G2G33) sono annullati da G33 che forza G1.
Con G33 attiva non possono essere programmate tutte le funzioni che richiedono
l'arresto (ossia per esempio tutte le funzioni ausiliarie M,
MA, MB, MC, S, G4 ecc.). Se una di queste funzioni è programmata con G33
attiva il CN dà allarme: CN 3C14 G33 o G63 ATTIVA.
Se si programma G28 o G29 oppure si programma il movimento di un asse morto, che quindi dovrebbe essere attivato e
disattivato, esce il messaggio di allarme :
CN6214 CAMBIO ASSI VIVI + G33 O G63
Con G33 attiva (come per G84, maschiatura) non viene incrementato il numero
progressivo di operazione: in ricerca blocco con numero progressivo è perciò
possibile solo ricercare il primo blocco in G33.
Durante la G33 non sono attivi:
- override assi
- override mandrino
- blocco singolo
La filettatura può avvenire per tratti circolari o rettilinei nel piano,
comunque orientati.
Il passo della filettatura è impostato col parametro K, che può essere
programmato nel blocco oppure in blocchi precedenti.
Passo K K determina il passo lungo la direttrice di filettatura, ossia
rappresenta la distanza tra due filetti.
Se la filettatura è conica, il passo lungo l'asse longitudinale risulta più
corto per la presenza dell'inclinazione.
Durante la G33 è attiva la compensazione di anticipo della velocità (modo
normale dello Z32, in cui non si ha un errore proporzionale alla velocità). Si
hanno perciò errori limitati anche in presenza di
variazioni della velocità del mandrino: è comunque consigliabile, per ottenere
una perfetta finitura del filetto, che la velocità mandrino sia stabilizzata e
costante durante
Aggancio Più
Il primo filetto è sincronizzato col passaggio per lo zero del mandrino: è
possibile eseguire la filettatura profonda in più passate con rientro nel
filetto.
La filettatura a più principi è possibile spostando il punto di partenza.
Esempio:
...
N10 G0 X0 Z0
N11 G33 Z-100 K2.5
...
Entrata morbida in G33
L'entrata nella G33 (filettatura) cioè l’aggancio al primo filetto sincronizzato col passaggio per lo zero del mandrino è morbida, pur senza allungare la fase di presa del filetto, grazie a un anticipo calcolato con cui si muove l'asse lineare che entra in filettatura rigida.
Attacco morbido della G33
È possibile definire nelle tarature il tempo di attacco della G33. Il valore da inserire del tempo di attacco è espresso in millisecondi.
L'attacco è di tipo "armonico", ossia con controllo dell'accelerazione seconda.
G36 - gestione numero progressivo
Sono disponibili cinque diverse possibili operazioni sul numero progressivo,
per permettere al
programmatore di guidare la ricerca blocco in caso di particolari operazioni.
G36*
G36* chiede al CN di forzare il numero progressivo di operazione (usato nella
ricerca blocco) al
valore successivamente specificato.
Attiva solo nel blocco.
Dopo G36* deve essere programmato il numero a 8 cifre (max 16777216) che si
desidera introdurre nel numero progressivo. Gli zeri iniziali possono essere
omessi. Per esempio:
G36 * 200
forza il numero progressivo al valore di 200.
Può essere utile in caso di programmi ciclici, ossia che non trovano mai la M2
perché a fine programma c'è un salto senza ritorno all'inizio.
Esempio:
PROGRAMMA CONTINUO %
N1 G36*0
N2 ...
...
N100 M0 (CAMBIA PEZZO E PREMI START)
N101 !GON1!
Con questo programma si imposta un ciclo continuo di lavorazione: l'operatore deve cambiare il pezzo a fine programma e premere START per eseguire la lavorazione sul nuovo pezzo. Se non ci fosse il G36*0 all'istruzione N1, il numero progressivo si incrementerebbe indefinitamente, tanto da rendere impossibile una eventuale ricerca blocco. Col G36*0 invece il numero progressivo riprende da zero e la ricerca blocco si esegue normalmente.
Ricerca blocco, numero progressivo
Il numero progressivo di operazione elementare (che condiziona poi la ricerca blocco con '*' o numero progressivo) può arrivare fino al massimo di 16777216, dopodiché riparte da zero.
Questo numero appare sufficiente anche per programmi molto lunghi: per dare un'idea, se un partprogram viene eseguito a 100 blocchi/secondo l'azzeramento del numero progressivo avviene dopo oltre 46 ore di lavoro ininterrotto, e il part-program, ammettendo un minimo di 10 caratteri a blocco, sarebbe lungo 160 Megabytes.
G36H/G36S halt/start
Chiedono al CN di arrestare (H) e di riprendere (S) il conteggio del numero
progressivo.
Modali. Al reset è attivo G36S.
Sono utili nel caso che il programmatore non voglia turbare il regolare avanzamento del numero progressivo nel caso di operazioni che dipendono da situazioni di macchina contingenti, oppure nel caso che non si voglia permettere la ricerca blocco all'interno di una sequenza di operazioni.
Durante l'esecuzione di M speciali o cicli fissi di sistema il numero progressivo è automaticamente bloccato al valore iniziale (equivale a una operazione G36H all'inizio del sottoprogramma e una operazione G36S alla fine del sottoprogramma). Non è perciò mai possibile una ricerca blocco all'interno di M speciali o cicli fissi di sistema. Per la natura dei problemi coinvolti, sono prestazioni da riservare al costruttore della macchina utensile o a programmatori molto esperti.
Esempio:
...
N10 G0 X0 Y0 Z0 F1000
N11 M70 ciclo di misura del tastatore
N12 !IF AM<9000 ;GON16!
N13 G36H da questo punto il numero progressivo non cambia
N14 T<T>M6 il cambio utensile cerca l'utensile sostitutivo
N15 G36S riprende il conteggio
N16 ... qui il numero progressivo è sempre lo stesso
...
G36R/G36W read/write
G36R/G36W chiedono al CN rispettivamente di leggere il numero progressivo nel
parametro HX e viceversa di scrivere nel numero progressivo il contenuto del
parametro HX.
Attive solo nel blocco, con arresto.
Servono a manipolare il numero progressivo nel caso di ripetizione di operazioni.
Anche queste prestazioni sono da riservare al costruttore della macchina utensile o a programmatori molto esperti. L'esempio deve considerarsi esclusivamente didattico.
Si abbia una macchina con apparecchio per il controllo dell'integrità utensile durante la lavorazione, collegato alla logica di macchina che permette di eseguire movimenti in G62. Se durante il movimento è rivelato utensile usurato si vuole cambiare l'utensile e ripetere il movimento, senza variare il normale flusso del numero progressivo.
...
N20 G0 X0 Y0 Z0
N21 G1 G62 F1000 Z-20
N22 !IF AM<9000 ;GON26!
... qui cambia l'utensile e ripete
N23 G36H Z100 T<T> M6 utensile sostitutivo
N24 G36R HX<HX-2> G36W G36S ripristina vecchio numero
N25 !GON20! ripete le operazioni
N26 ...
- commutazione files locali/globali
Attiva le sezioni locali o globali dei parametri, origini e utensili di ciascun
processo.
Modale.
Dopo G37 si devono specificare due lettere come segue:
G37PL attiva sezione locale parametri
G37PG attiva sezione globale parametri
G37OL attiva sezione locale origini
G37OG attiva sezione globale origini
G37TL attiva sezione locale utensili
G37TG attiva sezione globale utensili
Al reset sono attive G37PG, G37OG , G37TG.
Per sezione locale si intende una sezione parametri (inizia con :PA ), origini (inizia con :OS), utensili (inizia con :TL ) posta in coda al programma. Possono mancare una o più sezioni locali: le sezioni esistenti possono essere inserite in qualsiasi ordine.
Se G37 è programmato ed eseguito in un sottoprogramma, è attivata la sezione locale di quel sottoprogramma. Né la chiamata di sottoprogramma né il ritorno da sottoprogramma cambiano la sezione attiva.
Per esempio, se il processo è 0:
PROG. PRINCIPALE-FILE N.1 %
SOTTOPROGRAMMA
.... (FILE N. 100) %
N10 G37PL ...
.... N18 G37PL ...
N15 G37TL ......
... N64 G26
N20 !GOP100!
(PROSEGUE PROG. PRINCIPALE)
N21 ...
...
N80 M2
In questo esempio:
- la sezione origini è sempre quella globale (file 126)
- la sezione utensili:
- è globale (file 127) dall'inizio a N15 del programma principale
- è locale del file 1 da N15 a fine programma, incluso il sottoprogramma
- la sezione parametri:
- è globale (file 125) dall'inizio a N10 del programma principale
- è locale del file 1 da N10 del prog. principale a N18 del sottoprogramma 100
- è locale del spgr. 100 da N18 del spgr.100 alla fine del programma
principale.
Il programmatore tenga presente che, mentre non vi sono in genere particolari cautele per l'uso di sezioni locali di parametri e origini, l'uso di sezioni locali di utensili può avere implicazioni di sistema assai importanti: si consiglia perciò sempre di CONSULTARE IL COSTRUTTORE DELLA MACCHINA UTENSILE per gli effetti delle sezioni locali utensili sui sottoprogrammi di sistema (in particolare cambio utensili, gestione eventuale utensile sostitutivo, usura utensile ecc.).
Se G37O... e le origini relative sono programmate nella stessa riga, la G37
deve precedere la origine, altrimenti l'origine è
calcolata nella sezione vecchia.
Esempio:
...
N10 G37OL OX1 OY1 OZ1
...
G38 - riattivazione cambio utensile
Riprende l'esecuzione in automatico del cambio utensile.
Modale.
Annulla G39: al reset è attiva G38.
G39 - sospensione cambio utensile
Sospende l'esecuzione in automatico del cambio utensile.
Modale.
Con G39 attiva la M6 (cambio utensile) non viene più eseguita in automatico, ma provoca uno STOP della macchina per consentire all'operatore di fare il cambio utensile manuale. Quando l'operatore, dopo fatto il cambio, preme il pulsante START, il programma viene ripreso dal punto di interruzione e il cambio utensile è considerato fatto.
Quindi l'utensile programmato è considerato a tutti gli effetti montato sul mandrino, con acquisizione della descrizione utensile ecc.
Esempio:
...
N10 G39
N12 T10 M6 (CAMBIARE A MANO CON FRESA R=10)
N13 G38
...
G40 - fine correzione raggio
Fine correzione raggio utensile.
Modale. Annulla G1, G2, G3, G41, G42.
All'accensione è attiva G40.
È programmata quando è attiva G41 o G42, per terminare
la contornatura.
Quando è programmata G40 il profilo deve essere chiuso.
Vedere anche il capitolo dedicato alla correzione raggio.
G41 - correzione raggio con utensile
a sinistra
Utensile a sinistra
Inizio della correzione raggio: l'utensile è a sinistra del pezzo.
Modale.
La G41 fa entrare il controllo nel modo CORREZIONE RAGGIO che permette di
programmare il profilo del pezzo anziché il percorso del centro fresa.
La correzione raggio avviene nel piano di contornatura (primi due assi della
terna di lavoro).
Vedere capitolo dedicato alla correzione raggio.
G42 - correzione raggio con utensile
a destra
Utensile a destra
Stesso come per G41, solo con utensile a destra del pezzo anziché con utensile
a sinistra.
G43 - correzione
lunghezza utensile positiva
Inizia la correzione lunghezza utensile positiva.
Modale, con arresto.
Deve essere seguita dal nome dell'asse sul quale deve essere fatta la correzione lunghezza utensile (es. G43X).
All'accensione e ad inizio programma è attiva G43 sul terzo asse continuo della macchina: se gli assi continui sono XYZUV alla accensione e ad ogni inizio programma è attiva G43Z.
Dopo che è attivata la G43 a tutte le quote dell'asse
interessato alla correzione sono modificate in modo da tenere conto di
un utensile di lunghezza positiva montato sul mandrino: dalle quote
visualizzate viene perciò sottratta la lunghezza (contenuta nel parametro L).
Ciò equivale a sommare
L'effetto della lunghezza utensile è cumulato con quello della origine base e della eventuale origine supplementare.
Per altre informazioni vedere anche il capitolo dedicato alla gestione utensili.
Vale l'esempio per G45.
G44 - correzione
lunghezza utensile negativa
Come G43, di cui è mutuamente esclusiva, salvo il segno della correzione.
Quando è attiva G44 il parametro L è sottratto anziché
sommato alle quote programmate dell'asse su cui è attiva la correzione
lunghezza.
Poiché lo Z32 ammette che il parametro L sia negativo,
è probabilmente più comodo per il programmatore cambiare il segno di L invece
che usare G44.
Per l'esempio vedere G45.
G45 - sospensione correzione lunghezza
Disattiva le correzioni utensili G43 e G44.
Modale, con arresto.
Il parametro L non viene modificato da G45.
Esempio. Nei commenti sono riportate le quote del visualizzatore del CN, (gli
assi non si muovono):
...
N10 G45 G0 X0 Y0 Z0
N11 L100 (X=0, Z=0)
N12 G43Z (X=0, Z=-100)
N13 G44Z (X=0, Z=+100)
N14 G43X (X=-100, Z=0)
N15 G45 (X=0, Z=0)
G53 - sospensione correzioni origini
e lunghezze
Sospende la correzione origini e lunghezze, nonché le trasformazioni di quote:
rototraslazione, specularità, fattore di scala.
Modale, con arresto.
Può servire per programmare movimenti della macchina in quote assolute (quindi comprensive solo della origine base).
Lo stato programmato delle correzioni origini e lunghezza (G43-44, O...) resta memorizzato anche durante G53 attiva, e viene ripristinato da G54.
È lecito modificare durante G53 attiva le origini, G43 ecc.: l'effetto di queste modifiche resta sospeso fino a G54.
G54 - attivazione correzione origini
e lunghezze
Annulla l'effetto di G53.
Modale, con arresto, attiva al reset.
L'azione di G54 è di riattivare le correzioni origini e lunghezza memorizzate e sospese dalla G53: se lo stato memorizzato prevede origini e/o lunghezze non attive, queste restano non attive anche dopo G54.
La G54 provoca l'acquisizione del parametro L come effettivo correttore
della lunghezza utensile.
Vedere anche il capitolo dedicato alla gestione degli utensili.
Per il costruttore della macchina utensile: una G54 programmata all'interno
di un sottoprogramma associato a una M speciale o a un ciclo fisso di sistema
annulla solo
Per l'uso di G102/G103 all'interno dei sottoprogrammi di sistema al posto di G53/G54 vedere il paragrafo relativo a G102 e G103.
Esempio (tra parentesi le quote del visualizzatore).
...
N10 G37OL OX1 OY0 OZ0 L0 G0 X0 Y0 Z0 G43Z G54
N11 L57,5 (X=0, Z=-57,5)
N12 G53 (X=+68.3, Z=0)
N13 OX2 L100 (X=+68.3, Z=0)
N14 G54 (X=+10, Z=-100)
...
:OS
X1=-68.3
X2=-78.3
G55 - disattivazione specularità
Annulla l'effetto di G56.
Modale, attiva al reset.
Non può essere programmata mentre G41 o G42 sono attive.
La specularità può anche essere sospesa con G53.
Vedere anche il capitolo dedicato alla Specularità.
G56 - attivazione specularità
Chiede allo Z32 di eseguire il profilo speculare del programmato rispetto ad un asse di specularità individuato dal punto (IS, JS) e
dalla pendenza QS.
Modale.
Può essere attiva durante la correzione raggio (G41 e G42) ma non può essere programmata mentre G41 o G42 sono attive. Vedere anche il capitolo dedicato alla Specularità.
G61 - movimento di misura
Richiede un movimento di misura con tastatore.
Attiva solo nel blocco, con arresto.
Annulla G1, G2, G3, G10. A fine movimento resta attiva G0.
Vedere il capitolo “Prestazioni speciali”, paragrafo
“Tastatore di misura G61”.
G62 - movimento con stop da logica
Richiede un movimento che può essere interrotto da logica di macchina.
Attiva solo nel blocco, con arresto.
Può essere programmata con movimenti in G1, G2, G3 (solo movimenti semplici,
non in correzione raggio).
Vedere il capitolo “Prestazioni speciali”, paragrafo “Moto
con stop da logica G62”.
G63 - maschiatura rigida
Attiva solo nel blocco, con arresto.
Con G63 si ordina un movimento di maschiatura composto da:
- avanzamento con passo K fino alla quota programmata
- inversione a volo del mandrino
- ritorno indietro fino alla quota di partenza.
Il movimento degli assi programmati (normalmente un solo asse:
lo Z) è rigidamente legato a quello del mandrino per tutta la durata del ciclo
(un incremento K ogni giro mandrino).
Esempio:
...
N10 G0 X0 Y0 Z10 S600 M3
N11 G63 K1 Z-50
N12 G0 X-10
N13 G63 Z-50
...
N10: posizionamento in rapido a inizio foro e marcia mandrino
N11:ciclo di maschiatura. È necessario che il mandrino sia a
regime prima dell'inizio della maschiatura.
Composizione del ciclo:
- acquisizione del senso iniziale di rotazione mandrino
- attesa del passaggio per lo zero del mandrino
- partenza "a strappo" dell'asse Z. Per lo spazio necessario
all'accelerazione dell'asse non si ha sincronismo tra mandrino e movimento
asse: lasciare un margine adeguato perché il sincronismo sia pienamente raggiunto
in aria.
- maschiatura con passo 1 e asse Z sincronizzato al mandrino fino alla quota
Z-50
- inversione del mandrino. Durante il tempo di inversione l'asse Z, essendo
agganciato al mandrino, continua ad avanzare oltre la quota -50 programmata per
non perdere il filetto:
se l'asse oltrepassa il punto finale di una quantità eccessiva
(definibile in taratura,
normalmente
- ritorno, sempre con asse Z agganciato al mandrino, alla quota di partenza
(Z10)
- posizionamento di Z alla quota di partenza (Z10). Poiché l'asse ha bisogno di
uno spazio di frenata, il sincronismo asse Z/mandrino viene
abbandonato a una certa distanza dal punto finale: il programmatore lasci uno
spazio di sicurezza adeguato.
N12: inversione mandrino (che torna in M3) e rapido fino a X-10
N13: altro ciclo di maschiatura. Notare che il mandrino deve aver terminato l'inversione prima dell'inizio di N13. Se l'inversione non è terminata il segno iniziale viene acquisito errato, e quando il mandrino finalmente inverte l'asse va all'indietro finche interviene l'errore CN 0713.
È possibile "ripassare" un filetto già eseguito (ma solo se il maschio nel mandrino non è stato ruotato!) in quanto la partenza del movimento è sincronizzata al passaggio per lo zero del mandrino.
Con G63 attiva non possono essere programmate tutte le funzioni che richiedono l'arresto escluso il G4 (ossia per esempio tutte le funzioni ausiliarie M, MA, MB, MC, S, ecc.). Se una di queste funzioni è programmata con G63 attiva il CN dà allarme: CN 3C14 G33 o G63 ATTIVA.
Se si programma il movimento di un asse morto, che quindi dovrebbe essere attivato e disattivato, esce il messaggio di allarme :
CN6214 CAMBIO ASSI VIVI + G33 O G63
Durante la G63 non sono attivi gli overrides (assi e mandrino) e feed-hold. Il reset e lo stop sono attivi ma possono essere disabilitati in logica se il costruttore della macchina utensile lo ritiene necessario.
Per usare la G63 occorre che la macchina sia predisposta. In particolare
occorre:
- il rilevatore sul mandrino collegato al CN
- gestione in logica programmabile della inversione a volo del mandrino e delle
sicurezze di velocità mandrino raggiunta.
È consigliabile che il costruttore fornisca un ciclo fisso di maschiatura rigida che gestisca le eventuali funzioni ausiliarie relative al mandrino.
Moti morbidi con G63 (maschiatura
rigida)
L'errore di inseguimento (una volta in un senso e una volta nell'altro) con cui si muovono gli assi con G113P attiva (moti morbidi) non è compatibile con la maschiatura rigida.
I moti morbidi vengono automaticamente sospesi durante i movimenti di maschiatura rigida.
Entrata morbida in G63
L'entrata nella G63 (maschiatura rigida), cioè l’aggancio al primo filetto sincronizzato col passaggio per lo zero del mandrino è morbida, pur senza allungare la fase di presa del filetto, grazie a un anticipo calcolato con cui si muove l'asse lineare che entra in maschiatura rigida.
Attacco morbido della G63
È possibile definire nelle tarature il tempo di attacco della G63. Il valore da inserire del tempo di attacco è espresso in millisecondi.
L'attacco è di tipo "armonico", ossia con controllo dell'accelerazione seconda.
G80 - annulla maschiatura in atto
Annulla l'effetto di G84.
Modale, con arresto.
All'accensione e al reset è attiva G80.
G84 - maschiatura in atto
Disattiva override, prova pezzo e blocco singolo e dà la relativa informazione
alla logica. Arresta il numero progressivo, in modo che non possa essere ricercato
un movimento interno alla maschiatura.
Vedere anche il ciclo fisso di maschiatura.
Modale, con arresto
Esempio:
...
N10 G0 Z0 F200 S150 M3
N11 G84 G1 Z-56
N12 M4
N13 Z0
N14 G80 G0 Z-100
...
G90 - programmazione
quote assi assoluta
Programmazione delle quote degli assi rispetto alle origini attive.
Modale, attiva al reset.
Annulla ed è annullata da G91.
Può essere introdotta in tutte le modalità di funzionamento, rapido, lavoro,
correzione raggio, G98,
formule permanenti.
G91 - programmazione
quote assi incrementale
Programmazione delle quote degli assi rispetto al punto precedentemente
raggiunto.
Modale, annulla ed è annullata da G90.
Può essere introdotta in tutte le modalità di funzionamento, rapido, lavoro, correzione raggio, G98, formule permanenti.
È lecito programmare G91 con G91 già attiva.
La G91 è stata introdotta per diminuire la lunghezza del part-program
quando i movimenti sono composti di molti tratti molto corti: sarà
tipico l'uso della G91 nel caso di generazione di part-program
con sistemi CAM oppure come restituzione di superfici digitalizzate.
L'effetto di G91 è limitato alle seguenti condizioni:
a) è programmato un asse continuo in riga ISO con
valore numerico esplicito (non con formula matematica);
b) non è in corso un sottoprogramma speciale di sistema (ciclo fisso o M
speciale);
L' eventuale programmazione di parametri assi in riga evoluta non è influenzata dalla G91 attiva: il parametro associato alla quota asse assume, come nel caso della G91 non attiva, il valore programmato.
Per togliere anche la necessità del punto decimale, gli incrementi
programmati valgono micron moltiplicati per il valore del parametro HX al
momento della programmazione della G91.
Esempi:
HX1 G91 Inizia la programmazione incrementale in micron
HX10 G91 Inizia la programmazione incrementale in centesimi
HX1000 G91 Inizia la programmazione incrementale in millimetri
Il valore di HX può essere anche non intero (e anche ottenuto con formule matematiche): per ottenere l'incremento sulla quota il valore programmato sarà diviso per 1000 e moltiplicato per il valore originario di HX.
ATTENZIONE
Il valore di HX deve essere programmato prima di G91 (le funzioni Gvengono elaborate durante l'ANALISI della riga, che procede con lo stesso ordine di programmazione): quindi se si programma :
G91 HX10
si fa un errore se si vuole programmare in incrementale in centesimi, perché il valore di HX, quando viene elaborata G91 non è ancora 10.
Con G91 attiva i valori numerici programmati in riga ISO su tutti gli assi continui (possono essere più di uno nella stessa riga), vanno a sommarsi algebricamente al valore precedente.
L'esempio che segue (solo didattico e non realistico) contiene una quantità di combinazioni possibili.
%
X0 Quota 0
HX10 G91 Attiva programmazione incrementale in centesimi
X100 Incremento 100*10/1000=1 mm, quindi quota 1mm
!X=X+0,5! La quota non cambia, il parametro X va a 1,5mm
X50 Il parametro era 1,5 incremento 0,5 quindi quota 2mm
X0 Incremento 0 quindi quota ferma a 2mm
X<X+1> Non è un numero quindi programmazione assoluta. Il parametro X
valeva 2 quindi quota va a 3mm
X-100 Quota 2mm
HX100 G91 Cambio al volo del peso dell'incremento ai decimi
X100 Quota 10+2=12mm
X100,04 Quota 12+10,04=22,004mm
X<100> Non è numero quindi progr. assoluta. Quota 100mm
X100 Quota 110mm
G90 Fine programmazione incrementale
X<X+10> Il parametro X valeva 110 quindi quota 120
La programmazione incrementale richiede una particolare attenzione agli errori
che si possono accumulare indefinitamente.
L'accumulo degli errori può aversi:
1) Direttamente sul calcolatore che origina il part-program. Per evitare l'accumulo degli errori è necessario che si riporti l'errore di troncatura di ogni quota nel calcolo della quota successiva;
2) Sullo Z32 . Poiché i valori decimali (per esempio 0,001mm)
non sono rappresentabili esattamente nel formato usato all'interno dello Z32
(floating point binario) si ha un errore non eliminabile ad ogni incremento
programmato. L'entità di questo errore può essere al massimo di circa un
miliardesimo della quota interessata al calcolo. Ciò significa che per esempio
se si lavora su quote massime di 1000mm si può avere
un errore massimo di 1 micron dopo la somma di 1000 incrementi. Da prove fatte
si è visto che 100.000 incrementi di
L'errore è molto piccolo, ma è bene che soprattutto in caso di programmi molto lunghi, si eviti l'accumulo indefinito che potrebbe essere inaccettabile.
Un mezzo può essere quello di inviare ogni tanto le quote assolute: si è visto sopra che mettendo il valore numerico entro parentesi acute questo viene interpretato come una espressione e quindi viene preso come programmazione assoluta della quota e del parametro.
Si è detto prima che la programmazione incrementale non agisce all'interno di sottoprogrammi di sistema: questa esclusione serve ad evitare inconvenienti nel caso che l'operatore "dimentichi" di annullare la programmazione incrementale prima di chiamare un sottoprogramma speciale (immaginiamo le conseguenze di un cambio utensile con sottoprogramma speciale se le quote sono considerate incrementali ...).
Questa limitazione non appare importante perché è prevedibile che la programmazione incrementale sia utile solo per part-program generati da calcolatore.
La limitazione non si applica ai sottoprogrammi e cicli fissi utente: dovrà essere cura del programmatore inserire una G90 se necessario.
G93 - programmazione feed come
inverso del tempo
Esempio:
N1 G0 X0 Y0 (rapido)
N2 G93 F1000 (attiva G93, tempo di 1/1000 di minuto)
N3 G1 X0.5 (500 mm/min)
N4 Y2 (2000 mm/min)
N5 X0 Y0 (2061.5 mm/min)
N6 G0 X10 Y10 (rapido)
Regole:
'
- non cè alcun controllo della feed programmata e della lunghezza del tratto programmato: se la lunghezza del tratto è zero risulta una feed zero
- se gli assi sono in pollici non cambia nulla: il significato della G93 è
comunque di impostare l'inverso del tempo in minuti nel quale devono essere
eseguiti i tratti successivi - la velocità dei movimenti in rapido non è
influenzata dalla G93
- la G93 disattiva la G94, G95, G33 e G131 ed è disattivata da G94, G95 e G131.
2-26 D. ELECTRON
- la G53 disattiva immediatamente la G93 e ripristina la G94 (programmazione in mm/minuto o unità/minuto) La velocità risultante dalla G93 è limitata al rapido.
La G93 rimane attiva anche con G98.
G94 - feed in mm/1'
Programmazione feed in mm/min (o gradi/min o altre unità di misura).
Modale, attiva al reset.
Annulla G93, G95, G33 e G131. È annullata da G95, G93, G33 e G131.
Con G94 attiva il parametro F (feed) ha valore di mm/min (o altre unità di
misura).
G95 - feed in mm/giro
Programmazione feed in mm/giro (o gradi o altre unità di misura).
Modale.
Annulla G93, G94, G33 e G131. È annullata da G93, G94, G33 e G131.
Con G95 attiva il parametro F (feed) ha valore di mm/giro (o gradi o altre
unità di misura).
L'avanzamento è regolato dai giri mandrino.
Durante le accelerazioni e decelerazioni si può avere uno 'slittamento' del mandrino
rispetto alla feed, per mantenere velocità ed accelerazioni ai massimi dinamici
della macchina. Contrariamente a quanto accade per la G33 che lega rigidamente
il moto asse al moto mandrino, questi slittamenti non sono più recuperati.
Sono ancora validi i limiti massimi di feed descritti nel paragrafo dedicato a
G1.
Esempio:
...
N10 S1000 M3 (MANDRINO A 1000 G/1')
N11 G95 F0,1 (AVANZAMENTO 0,1 MM/G)
N12 G1 X100
...
JOG in G95 (Feed in mm/giro) o G96
(SPEED in m/min)
C’è un’opzione (da mettere in taratura) che permette di eseguire un JOG con G95 (feed in mm/giro) o G96 (speed in m/min)
attive.
Se si sceglie questa opzione si hanno due conseguenze:
- non viene forzata, durante il movimento in jog, G94
(mm/min) e G97 (giri/min)
- se è attiva una F programmata (per esempio quando si passa al JOG dal
semiauto senza fare reset) viene assunta la feed programmata come feed di jog
anziché prendere la feed di default
Questa prestazione è particolarmente utile per i torni, ma può essere valida anche per le frese, per le quali sarà significativa solo per il secondo effetto (feed di jog uguale all'eventuale feed programmata)
G96 - mandrino in metri/min (velocità
di taglio costante)
Programmazione velocità mandrino in m/min.
Modale.
Annulla G97 (giri/min) e G33. È annullata da G97 e G33.
Funzione tipica per torni.
Con G96 attiva il parametro S (speed) ha significato di m/min: la velocità del
mandrino è calcolata perché la velocità di taglio risulti pari alla S
programmata, considerando che la distanza dell'utensile dal centro di rotazione
del mandrino è pari alla quota dell'asse con numero logico zero (normalmente
X).
La quota dell'asse X è corretta con origini supplementari ed eventuali
correzioni lunghezza.
Esempio:
...
N10 X100 (RAGGIO)
N11 G96 S200
...
In N11 la velocità mandrino è 318.3 giri/min, ossia 200/(0.1*2*PI) per
mantenere costante e pari a 200 m/min la velocità periferica del mandrino alla
distanza di
La velocità del mandrino è aggiornata in tempo reale per mantenere costante la velocità di taglio anche durante movimenti che variano la distanza dal mandrino.
Per evitare velocità eccessive quando la distanza è molto ridotta, con G96 attiva il parametro MS (che può essere programmato anche in precedenza) determina la massima velocità (in giri/minuto) mandrino consentita. La MS attiva è quella presente al momento dell'ultima S programmata: se viene riprogrammato il parametro MS, la limitazione non cambia fino a che non si programma una nuova S.
MS L'utensile può oltrepassare il centro di rotazione (da X+ a X-e viceversa): la velocità è comunque max determinata dal valore assoluto della quota X, e al passaggio attraverso lo zero è limitata dalla MS speed programmata.
Dopo la programmazione di G96 o G97 la velocità mandrino resta congelata all'ultima raggiunta fino a che non viene programmata una nuova S. Ciò consente per esempio movimenti di rapido (o di cambio utensile nel caso dei torni) senza indesiderate variazioni della velocità del mandrino determinate dai movimenti dell'asse X. Durante il congelamento non è attivo l'override mandrino.
G97 - mandrino in giri/min
Programmazione velocità mandrino in giri/min.
Modale. Attiva al reset.
Annulla G96. È annullata da G96.
Dopo G97 la velocità mandrino (funzione S) è programmata in giri/min.).
Dopo la programmazione di G96 o G97 la velocità mandrino resta congelata
all'ultima raggiunta fino a che non viene programmata
una nuova S. Ciò consente per esempio movimenti di rapido (o di cambio utensile
nel caso dei torni) senza indesiderate variazioni della velocità del mandrino
determinate dai movimenti dell'asse X. Durante il congelamento non è attivo
l'override mandrino.
G98 - interpolazione lineare speciale
(5 assi)
Attiva uno speciale modo di interpolazione adatto per successioni di punti
molto ravvicinati.
Consente la programmazione di fino a 5 assi contemporanei.
Modale. Disattivata da G99. Sospende l'efficacia di G0, G1, G2, G3, rototraslazione, specularità, fattore di scala.
Vedere capitolo dedicato “Interpolazione lineare su 5 assi”.
N.B. Funzione obsoleta, non usare.
G99 - annulla G98
Annulla l'effetto di G98.
Modale. Ripristina lo stato di G0, G1, G2, G3, rototraslazione, specularità, fattore di scala sospesi da G98.
Vedere il capitolo dedicato “Interpolazione lineare su 5 assi”.
G100 - comunicazione a logica
Scrive il parametro AU di programma-pezzo nella word
di logica AU.
Attiva solo nel blocco, con arresto.
È una istruzione da usare secondo le specifiche date dal costruttore della macchina utensile, che stabilisce l'effetto in logica della word AU.
Nella word di logica AU va la parte intera del parametro AU, codificata in BCD. Se il parametro AU è maggiore di 9999 nella word AU è trasferito 9999.
Questa prestazione è riservata al costruttore della macchina utensile: l'utente finale non deve usare questa istruzione, salvo particolari prestazioni concordate col costruttore. È bene che il costruttore protegga la logica di macchina da errata programmazione di G100 da parte dell'utente finale (per esempio usando il bit 5UC che segnala sottoprogramma di sistema in corso).
Esempio:
...
N10 AU348.99 G100 (METTE IN AU IL VALORE 0348)
...
Lo Z32 prevede un altro modo di scambio dati tra logica e part-program: i parametri PAL [ ] vedere capitolo dedicato ai parametri, paragrafo “Parametri con indice”.
G101 - comunicazione da logica
Trasferisce la word di logica AE nel parametro di
programma-pezzo AE.
Attiva solo nel blocco, con arresto.
È da usare secondo le specifiche del costruttore della macchina utensile, che
assegna in logica il significato di AE.
La word di logica AE, considerata come intera BCD, è trasferita nel parametro
AE. Se la word di logica non è in codice BCD, il
risultato non è coerente.
In ricerca blocco G101 è eseguita normalmente. Vedere anche il capitolo
relativo alla ricerca blocco. Esempio:
...
N10 G101
N11 !IF AE=95;GON40!
...
D. ELECTRON 2-29
CNC Z32 Programmazione Cap.2 - Funzioni preparatorie
Lo Z32 prevede un altro modo di scambio dati tra logica e part-program: i parametri PAL [ ] vedere capitolo dedicato ai parametri, paragrafo “Parametri con indice”.
G102 - salva stato
Salva stato programma.
Attiva solo nel blocco.
Lo stato delle seguenti funzioni programmate:
G37.. sezioni locali/globali
G27C..ciclo fisso
G53/G54sospensione correzioni origini e lunghezze, rototraslazione,
specularità, fattore di scala
G25 piano di lavoro
Viene salvato da G102 in un 'silo' (stack) di memoria, per poter poi essere
ripristinato con l'apposita G103.
Lo stack ha capacità fino a 7 stati: se si tenta di salvare più di 7 stati
(ossia ci sono più di 7 G102 non scaricate) il CN dà errore CN 1D14 col cursore che punta dopo G102.
Riservata L'utilità di questa G si ha soprattutto nella stesura di sottoprogrammi
generici, in cui si voglia al modificare lo stato del programma e poi
ripristinare quello precedente, senza sapere quale fosse.
Per
costruttore esempio è possibile, all'interno di un ciclo fisso:
- salvare lo stato con G102
- attivare sezioni locali di parametri o origini
- usare e modificare le origini e i parametri locali
- ripristinare le sezioni attive all'entrata del ciclo fisso
Si consiglia l'uso di G102 e G103 a programmatori ESPERTI.
Per gli esempi vedere la G103 (ripristino stato).
G103 - ripristina stato
Ripristina l'ultimo stato programma salvato con G102 e predispone al ripristino
lo stato salvato in precedenza.
Attiva solo nel blocco, con arresto.
Le condizioni ripristinate sono le stesse salvate da G102:
G37... sezioni locali/globali
G27C.. ciclo fisso
G53/G54 sospensione correzioni origini e lunghezze, rototraslazione,
specularità, fattore di scala
G25 piano di lavoro
Se non c'è in memoria uno stato salvato da ripristinare (ossia se si
programmano più G103 che G102 ) il CN dà errore CN 1D14 col cursore che punta
dopo G103.
ATTENZIONE
Il programmatore si assicuri che ad ogni G102 corrisponda una e una sola G103, e che non sia possibile, per esempio per giri di programma dovuti a salti condizionati, saltare una G103 o eseguirne una di troppo: le G103 successive andrebbero a ripristinare stati diversi da quelli voluti, con conseguenze imprevedibili.
Per il programmatore di cicli fissi di sistema e dei sottoprogrammi
associati alle M speciali, si consiglia di non usare la G53/G54 per sospendere
e poi riattivare le correzioni, ma piuttosto di usare la G102 seguita da G53 a
inizio sottoprogramma, e G103 a fine programma per ripristinare lo stato.
Questo per non avere problemi in caso di richiamo di sottoprogrammi speciali
dall'interno di sottoprogrammi speciali.
Ci sono infatti in memoria DUE SOLE informazioni
sullo stato di G53: una per lo stato normale (utente) e una per lo stato
speciale (riservata al costruttore): una eventuale G54 nel sottoprogramma
speciale chiamato cancellerebbe quindi anche
CICLO FISSO DI FORATURA %
N1 G102
... (CICLO FISSO NORMALE)
N80 G37PL
N81!:RPN1=HA!HA=HA+1!:WPN1=HA!
N82 G103 G26
Si noti che il ripristino dello stato precedente fatto dalla G103 non
significa ripristino delle origini o delle lunghezze precedenti: rimangono
invece validi i nomi delle origini e il valore del parametro L
esistenti prima di G103.
La G103 provoca anche l'attivazione del parametro L come correttore e il ricalcolo di tutte le origini solo se cambia per effetto della G103 lo stato di validità delle origini (G53/54) oppure della lunghezza (G43/44/45). Nell'esempio sono esaminate alcune situazioni (scarsamente pratiche ma istruttive dal punto di vista teorico).
...
N8 G0 G54 G43Z G37OG OX0 OY0 OZ0
N8,5 L0 X0 Y0 Z0 tutti gli assi sono a zero, non ci sono origini né lunghezze
N9!L=100! Z non cambia perché L è programmato in riga
evoluta
N10 G102
N11 G103 poiché non cambia stato di origini o lunghezze, non sono ricalcolate
le correzioni e quindi Z non cambia
N12 G102
N13 G53 non cambia nulla perché non ci sono origini e L non era attiva
N14 G103 poiché lo stato cambia da G53 a G54 vengono ricalcolate le origini e
la correzione lunghezza.
N15 G102
N16 OX1 è attivata l'origine globale X1,
N17 G103 rimane attiva l'origine globale OX1,
N18 G102
N19 G53 viene disattivata l'origine,
N20 G103 cambia lo stato e quindi l'origine è ricalcolata: X=+50
N21 G37OL attivata la sezione locale. Resta attiva OX1 globale
N22 G102
N23 G53 sono disattivate le origini
N24 G103 qui cambia lo stato di G53 e sono ricalcolate le origini:
G104 - lettura dell'utensile sul
mandrino
Trasferisce nel parametro HX il valore di T dell'utensile che è montato sul
mandrino.
Attiva solo nel blocco.
Esempio:
...
N10 T101 M6
N11 G104
....
Qui HX contiene 101 se l'utensile montato sul mandrino è effettivamente T101. Se è installata la gestione dell'utensile sostitutivo dell'utensile usurato e l'utensile montato è un sostituto di T101 il parametro HX conterrà il T.. dell’utensile effettivamente montato.
G105 - acquisizione quote assi
Trasferisce nei parametri quote assi le quote fisiche attuali di tutti gli assi
della macchina.
Attiva solo nel blocco, con arresto.
Nello Z32, al reset, tutti i parametri sono inizializzati con valore zero,
esclusi i parametri associati alle quote assi che sono aggiornati con le quote
rilevate al reset (equivale alla programmazione di G105 a inizio di
part-program).
Dopo che un asse è stato programmato in una riga ISO il valore del parametro asse coincide, salvo errori di posizionamento, con la quota effettiva, in quanto il CN sposta meccanicamente l'asse fino alla quota programmata.
Dopo la programmazione delle origini cambiano le quote visualizzate ma non i
parametri, che perciò non sono più rappresentativi delle quote fisiche.
Analoga situazione si ha per tutte le funzioni che cambiano origini o
correzioni (G53/G54, L ecc.).
Con la G105 le quote rilevate (riferite all'origine e correzioni attive al momento) sono trasferite nei parametri quote assi. Il trasferimento delle quote avviene per tutti e soli gli assi continui, inclusi gli assi non vivi.
Esempio della evoluzione delle quote e dei parametri quota.
PROGRAMMA quota fisica X parametro X
% +250 +250
G105 +250 +250
G0 X10 +10 +10
OX1 (+300 da origine base) -290 +10
G105 -290 -290
X<X> -290 -290
ATTENZIONE
La quota trasferita è quella reale misurata, e non quella comandata. Queste due quote possono essere diverse per errori di posizionamento (che comunque devono essere molto piccoli per rientrare sotto la soglia di posizionamento).
Per esempio, se si comanda X10 e l'asse va alla quota 9,998 la G105 acquisisce la quota 9,998 e non la quota 10.
Nel caso di assi ciclici vedere nel capitolo “Prestazioni speciali” il paragrafo “Assi continui ciclici”.
G106 - programmazione radiale
Modale, sempre attiva al reset per frese, annulla ed è annullata da G107.
Questa funzione è usata sui torni, quando si vuole forzare la programmazione radiale. Sulle frese non è usata in quanto è automaticamente attiva al reset. Dopo G106 la programmazione dell'asse X e del parametro J sono sul raggio. Per l'esempio vedere G107.
G107 - programmazione diametrale
Funzione specifica per torni.
Modale, attiva al reset nel caso di torni, annulla ed è annullata da G106.
Dopo G107
% al reset è attiva programmazione diametrale
N1 G0 X10 l'asse X va alla quota 5, diametro 10
N2 G106 programmazione radiale
N3 X10 l'asse X va alla quota 10, diametro 20
N4 G107 X10 l'asse X va alla quota 5, diametro 10
G108 - limitazione accelerazione e
velocità
Modale, con arresto.
La G108 è seguita da un carattere, che può essere A oppure F.
G108A trasferisce il valore del parametro HX in un limite di accelerazione, G108F
trasferisce il parametro HX in un limite di velocità.
Per esempio:
HX200 G108A limita l'accelerazione a 200 mm/sec/sec
HX8000 G108F limita la velocità a 8000 mm/min
L'uso della G108 implica la conoscenza dei limiti di accelerazione e di velocità imposti dal costruttore della macchina utensile: deve quindi essere usata in collaborazione col costruttore, oppure dal costruttore stesso in suoi sottoprogrammi speciali.
La G108 può agire solo in diminuzione, a partire dai limiti di sistema imposti dal costruttore della macchina utensile: l'effetto della G108 può essere eliminato programmando dei limiti superiori a quelli di taratura della macchina.
Una situazione in cui può essere utile la G108 è con formule permanenti
(vedere capitolo dedicato) con fattori moltiplicativi delle quote assi
superiori a
Si abbia per esempio l'asse rotante B con rapido di 5000 mm/min e accelerazione di 300 gradi/sec/sec.
Su questo asse si vuole applicare una formula permanente (per esempio per programmare B in mm su un diametro di 57.3) che moltiplica le quote dell'asse B per 2: senza la G108 risulterebbe variata anche la velocità massima (5000*2=10000 gradi/min) e l'accelerazione massima (300*2=600 gradi/sec/sec).
Per riportare l'asse B nei limiti consentiti si può limitare la velocità a 2500 gradi/min e l'accelerazione a 150 mm/sec/sec. La successiva applicazione della formula permanente (che moltiplica per due) riporta le velocità a quelle reali.
...
N10 HX2500 G108F
N11 HX150 G108A
N12 B<<B*2>>
...
La limitazione viene applicata su tutti gli assi interessati al moto, per cui si ha un effetto collaterale indesiderato di ridurre velocità ed accelerazione anche di assi che non ne avrebbero bisogno. Se il rallentamento non è tollerabile si può a programma eliminare le limitazioni prima dei movimenti che non ne hanno bisogno.
I limiti su cui agiscono le G108 sono accessibili anche da logica programmabile per una variazione degli stessi in tempo reale: informarsi col costruttore della macchina utensile per evitare possibili incoerenze.
G109 - personalizzazione correzione
raggio
Modale.
La G109 è seguita da una lettera che personalizza la correzione raggio (vedere
anche capitolo
“Correzione raggio utensile”).
È possibile variare il numero di tratti esplorati in avanti sul profilo oppure
ripristinare un modo obsoleto di correzione raggio.
Sono possibili le seguenti combinazioni:
G109A tre tratti esplorati in avanti (attiva al reset)
G109B quattro tratti
G109C cinque tratti
G109D sei tratti
G109E sette tratti
G109Z modo obsoleto: tre tratti, possibili errori fino a
G109U G109V G109X
Le G109U e G109V servono per modificare il controllo della velocità in correzione raggio.
Lo Z32, in correzione raggio, tende a tenere costante la velocità di lavoro nel punto di contatto dell'utensile col profilo programmato.
Se il profilo contiene un arco interno il centro utensile (se il raggio è positivo!) percorre un arco più stretto dell'arco programmato. Se si tenesse costante la velocità del centro utensile si potrebbero avere velocità eccessive alla periferia.
In questi casi perciò lo Z32 diminuisce automaticamente la velocità del centro utensile.
Questo automatismo può essere non valido se in realtà il raggio è fittizio, ossia se non rappresenta il raggio reale (caso in cui un CAM ha precalcolato la traiettoria del centro dell'utensile torico e il raggio R impostato nel CN è solo la variazione, in più o in meno, rispetto al raggio teorico).
La G109U elimina l'ottimizzazione della velocità da parte del CN e forza velocità Uniforme.
La G109V (attiva al reset) ripristina l'ottimizzazione della velocità in correzione raggio
La G109X serve in casi particolari di profilo chiuso.
Lo Z32, in correzione raggio, esamina alcuni tratti in avanti sul profilo (da 3 con G109A a 7 con G109E) ed elimina i tratti intermedi se l'utensile interferisce.
In caso di profilo chiuso composto di pochi tratti (meno di quelli esplorati in avanti) il CN può decidere che c'è interferenza tra l'ultimo tratto e il primo e quindi eliminare tutto il profilo.
La G109X, se programmata in un punto intermedio di un profilo, forza il CN ad acquisire tutti i tratti già programmati e che siano anche geometricamente chiusi: se programmata in un punto intermedio di un profilo chiuso impedisce il controllo dell'interferenza tra il primo e l'ultimo tratto e quindi l'eliminazione del profilo.
G109R G109N
È inoltre possibile programmare: G109R forza raccordo nello spigolo interno
G109N annulla G109R
L'inserimento di un raccordo in uno spigolo interno che provoca errore di
programmazione
"PROFILO INCOMPATIBILE", risolve in pratica la situazione di
errore .
La G109R può essere programmata immediatamente prima dei blocchi che provocano
la situazione di errore facilitandone la rilevazione.
G109S G109T
La G113A serve per ricostruire l’andamento curvilineo di una traiettoria programmata per punti, ossia con una sequenza indefinita di segmenti rettilinei.
Come specificato nel manuale dell’alta velocità, un arco di cerchio interrompe la sequenza dei segmenti arrotondabili.
Normalmente il CAM tiene conto delle dimensioni dell’utensile nello sviluppo del programma a punti, e quindi non è necessario usare la correzione raggio sul controllo numerico.
In qualche caso, e limitatamente a profili piani, l’utente vuole usare la correzione raggio di Z32 per adattare il profilo a un utensile usurato senza dover generare un altro profilo CAM.
Su spigoli interni la G113A e l’alta velocità continuano a funzionare correttamente, ma su spigoli esterni il sistema di correzione raggio introduce degli archi di raccordo per ottenere la rotazione dell’utensile intorno allo spigolo, che impediscono la ricostruzione della curva, e quindi si generano rallentamenti molto sensibili.
Con G109S è possibile forzare il sistema di correzione raggio di Z32 a non introdurre l’arco di raccordo ma a proseguire il segmento fino alla bisettrice dello spigolo, per consentire un corretto funzionamento della G113A e quindi evitare i rallentamenti.
G109S (modale, non attiva al reset) forza la correzione sulla bisettrice, mentre con G109T (modale, attiva al reset) si ripristina il normale funzionamento di Z32 con l’introduzione dell’arco di raccordo.
Essendo la G109S modale può essere programmata una volta sola a inizio programma., per esempio:
ESECUZIONE CON G109S%
T46M6
G109SG0X0Y0Z0
F10000S20000M3
G114RA.01HR.03
G113X G113A
G41...(correzione raggio)
...
La G109S ha efficacia solo su spigoli generati da due segmenti rettilinei. Se uno dei due tratti è un arco di cerchio (che impedirebbe comunque l’arrotondamento) si ha la normale introduzione dell’arco di raccordo.
La prosecuzione della traiettoria fino alla bisettrice provoca un allungamento del segmento che può essere molto forte ed indesiderato per spigoli acuti. Per esempio, col caso limite di spigolo di 180 gradi si avrebbe un allungamento infinito.
Poiché con spigoli acuti non sarà possibile nessun arrotondamento con G113A, e per evitare queste possibili indesiderate uscite di traiettoria, la G109S ha efficacia solo su spigoli di angolo inferiore a 16 gradi. Per spigoli con angolo maggiore viene introdotto il normale arco di raccordo che limita con sicurezza la traiettoria nell’intorno dello spigolo.
G110 - macrofunzioni per svuotatura
La G110 è una funzione molto complessa da comprendere e difficile da
documentare. E’ da considerare riservata alla D. Electron per la
costruzione di macro su richiesta specifica del cliente.
Generalità
Le macrofunzioni G110 consentono di progettare macro di svuotatura.
L'uso della G110 è in generale riservato al progettista della macro: il programmatore del pezzo
passa alla macro pochi parametri che individuano il profilo, l'inclinazione di passata, l'incremento di passata.
La macro, tramite le macrofunzioni G110, si incarica di determinare i punti di intersezione, le passate, i ritorni rapidi ecc.
La G110 viene programmata in generale nella forma:
G110TxPy oppure G110Tz dove:
- x (da
- y (da
- z (3 o 4): identificatore macrofunzione
I significati dei codici sono:
T0: "PRIMOPUNTO" su un profilo
T1: "ANALISI" di un profilo
T2: "CONTORNO" su un profilo
T3: cessazione visualizzazione riga
T4: ripresa visualizzazione riga
T5 : calcola le “QUOTE” del profilo a una
certa prelunghezza
P0: il profilo è nello stesso programma che contiene la G110
P1: il profilo è nel programma chiamante (caso tipico)
P2: il profilo è nel programma secondo chiamante
Identificatore di programma P...
Il P da usare dipende dall'architettura dei programmi in cui è inserita la
G110: P0 Il profilo e la G110 sono nello stesso programma. Non sarà l'uso
normale della G110, in quanto ben difficilmente il programmatore del profilo vorrà
inserire nel suo programma anche la macro di sgrossatura. Può servire per prove
semplificate. P1 Caso normale: il profilo è contenuto nel programma che ha
chiamato la macro (che contiene la G110). L'architettura dei programmi è la
seguente:
- la macro di svuotatura è contenuta in un sottoprogramma M speciale
- il programma-pezzo contiene il profilo
- la svuotatura è ottenuta passando alla M speciale i parametri necessari
(normalmente numero riga inizio e fine, pendenza e incremento di passata)
P2 Il programma che contiene il profilo non chiama direttamente il
sottoprogramma che usa la G110, ma passa attraverso un sottoprogramma
intermedio. Potrebbe essere utile nel caso di architetture complesse.
Prelunghezze
AN... AP...
Nella G110 sono usati i parametri 'prelunghezza', sia in entrata che in uscita.
Per prelunghezza si intende la distanza percorsa dal centro utensile da inizio profilo al punto specificato.
Con questi parametri è individuato in modo semplice ed univoco qualsiasi punto su un profilo.
Numero riga inizio e fine
HX... HY...
Il profilo è identificato con un numero di riga inizio e un numero di riga fine.
In entrata alla G110 parametro HX contiene il numero di riga inizio, il
parametro HY il numero di
riga fine.
Perché le righe inizio e fine siano trovate dalla G110, occorre che i numeri
di riga siano scritti con queste regole:
- non devono esserci spazi intermedi né a inizio riga
- gli zeri iniziali devono essere omessi (la riga zero è N0)
- i decimali sono indicati con la virgola e non col punto
- non devono esserci zeri decimali non significativi
- sono ammessi fino a 4 interi e 3 decimali oppure 5 interi con solo due
decimali
- se ci sono più righe con lo stesso numero viene
assunta come valida la prima da inizio
programma
- non è necessario che il numero di riga inizio sia inferiore al numero di riga
fine: basta che
la riga fine sia raggiunta a partire dalla riga inizio.
Esempi (numero riga e HX corrispondente):
N0 HX0
N1 HX1
N1,3 HX1,3
N1.3 errore punto decimale
N1234,567 HX1234,567
N 37 errore spazio intermedio
N12345,56 HX12345,56
N03 errore zero iniziale
N12,30 errore zero decimale non significativo
N12345,567 errore troppi numeri significativi
Pendenza e incremento di passata
HT... K...
Le passate di sgrossatura desiderate sono passate alla G110 con i parametri
HT (pendenza) e K (incremento).
- pendenza espressa in gradi
- verso positivo antiorario
- 0 gradi coincidono col primo asse del piano
L'incremento K rappresenta l'incremento della singola passata, espresso in
millimetri (genericamente unità visualizzate se non sono millimetri).
La G110 usa solo il segno dell'incremento per determinare se le intersezioni col profilo sono positive o negative. Non ha importanza per la G110 il valore dell'incremento K: il valore dell'incremento K è gestito dalla macro.
Se K è positivo significa che l'incremento di passata è verso sinistra, K negativo significa verso destra.
Altezza retta di passata
HR...
Serve a posizionare la retta di passata (di pendenza HT) nel piano di lavoro.
In entrata alla G110 è contenuta nel parametro HR. Rappresenta la distanza della retta di passata da un punto convenzionale (è l’origine in corso).
L'altezza della retta di passata è riferita all'origine in corso (la retta con altezza zero passa per l'origine in corso). Ciò permette di definire l'altezza della retta di passata anche senza avere precedentemente programmato G110T0 per leggere il suo valore iniziale.
Diversamente il progettista della macro potrà non programmare il valore numerico reale di HR : potrà allora compiere operazioni di incremento e decremento rispetto al valore iniziale che viene fornito in uscita dalla macrofunzione primopunto (G110T0..).
In particolare con HR HR+K la retta di passata viene spostata di un incremento.
Limitazioni sul profilo
Non ci sono limitazioni particolari sul numero o tipo di tratti di profilo
contenuti tra la riga inizio e la riga fine: un profilo più lungo richiede
semplicemente più tempo per essere elaborato.
Ogni volta che si chiama la G110 il profilo specificato viene sempre eseguito tutto, anche se il movimento degli assi è solo parziale o nullo (è una specie di ricerca blocco), e quindi a fine G110 lo stato del CN (parametri e altre funzioni modali) è modificato in accordo ai contenuti del profilo.
Quindi il profilo deve essere completamente definito e ripetibile più volte
senza bisogno di inizializzazioni speciali. In particolare:
- il primo tratto di profilo non può essere un G2/G3 (il punto di inizio non è
sempre lo
stesso): meglio se è un G0
- il tratto finale deve essere chiuso
- è meglio se eventuali dati parametrici usati nel profilo sono inizializzati
nel profilo stesso:
se si usano dati contenuti in parametri non inizializzati, accertarsi che i
dati stessi non
siano modificati alla fine del profilo.
- rototraslazione, specularità e fattore di scala possono essere usati, a patto
che siano
attivati all'interno del profilo e disattivati prima della fine. Per sicurezza
il progettista della
macro può forzare un annullamento.
Per ragioni interne di organizzazione della macro ci sono anche le seguenti
limitazioni:
- non sono ammessi movimenti fuori dal piano di lavoro
- non deve essere riprogrammata la terna di lavoro all'interno del profilo.
Specifiche tecniche
Primo punto G110T0
Chiamata: G110T0Py (y=0, 1, 2)
Funzione: ricerca sul profilo specificato il primo punto incontrato dalla
retta di passata che parte da meno infinito e si sposta parallelamente a se
stessa in direzione dell'incremento di passata.
Parametri di entrata:
HX HY numero riga inizio e fine
HT pendenza retta di passata
K incremento di passata
Parametri di uscita:
HX HY quote del punto trovato (HX 1.o asse, HY 2.o asse)
HR altezza corrispondente della retta di passata
AN prelunghezza del punto trovato
Note:
- sono presi in considerazione solo i punti finali dei tratti di profilo: non
viene calcolata l'intersezione con eventuali tratti circolari contenuti del
profilo.
- non sono generati movimenti.
Analisi G110T1
Chiamata: G110T1Py (y=0, 1, 2)
Funzione: ricerca sul profilo specificato e a partire dalla prelunghezza specificata la prima intersezione negativa e la prima successiva positiva con la retta di passata (intersezione positiva significa che il profilo attraversa la retta di passata in direzione concorde all'incremento)
Parametri di entrata:
HX HY numero riga inizio e fine
HT pendenza retta di passata
HR altezza retta di passata
K incremento di passata
AN prelunghezza iniziale
Parametri di uscita:
AN prelunghezza intersezione negativa (-1 se non trovata)
HX HY quote intersezione negativa (HX 1.o asse, HY 2.o asse)
AP prelunghezza intersezione positiva (-1 se non trovata)
HR HT quote intersezione positiva (HR 1.o asse, HT 2.o asse)
Note:
- se si desidera conoscere la prima intersezione positiva e la successiva
negativa basta invertire in entrata il segno di K
- se ci sono altre intersezioni prima della prelunghezza iniziale AN non sono
prese in considerazione
- le intersezioni possono cadere in un punto intermedio dei tratti di profilo
- se il punto di profilo corrispondente alla prelunghezza di entrata è già
negativo rispetto alla retta di passata la G110 restituisce che la prima
intersezione negativa coincide col punto iniziale
- non sono generati movimenti assi
Contorno G110T2
Chiamata: G110T2Py (y= 0, 1, 2)
Funzione: esegue il tratto di profilo compreso fra la prelunghezza iniziale
e la prima intersezione positiva con la retta di passata
Parametri di entrata:
HX HY numero riga inizio e fine
HT inclinazione retta di passata
HR altezza retta di passata
K incremento di passata
AN prelunghezza iniziale
Parametri di uscita:
AN prelunghezza intersezione positiva (-1 se non trovata)
Note:
- se non trova intersezione esegue il profilo a partire dalla prelunghezza
iniziale fino alla fine
- se si vuole contornare fino alla intersezione negativa basta invertire
l'incremento K in ingresso
-per cause di organizzazione interna durante il contorno si ha un rallentamento
a fine di ogni tratto programmato
In G110T2, se G114 attiva, non rallenta a fine di ogni tratto
Il profilo eseguito con G110T2 (contorno), per necessità di semplificazione dei calcoli interni, non ha una velocità continua, così come avrebbe se fosse eseguito direttamente.
Si ha un forte rallentamento alla fine di ogni tratto elementare che costituisce il profilo.
Il rallentamento non c’è se è attiva la G114: in questo caso la parte di profilo eseguita con G110T2 ha le stesse velocità che avrebbe se eseguita direttamente.
Si noti che la G114 non è compatibile con la G95 (velocità di taglio in mm/giro) e quindi questa prestazione è poco significativa per i torni, che usano in prevalenza la G95.
In G110T2, se in entrata AN<0 esegue il contorno in continuo
L'entrata in G110T2 con AN<0 assume un significato particolare: quello di
eseguire tutto il contorno indicato come se fosse eseguito direttamente.
In pratica se AN<0 la G110T2 equivale a:
- GOPx salto al programma che contiene il profilo da eseguire
- GON..-N.. salto alla serie di righe che definiscono
il profilo
- G26 alla fine della serie di righe
Quindi, con AN<0 la G110T2:
- non fa rallentamento a fine di ogni tratto, anche con G114 non attiva
- ignora la retta di passata, e non tenta intersezioni esegue tutto il profilo,
incluso il tratto iniziale di trasferimento tra il punto attuale del centro
fresa e il punto iniziale del profilo
Stop visualizzazione G110T3
Chiamata: G110T3
Funzione: cessa la visualizzazione delle righe di programma
Parametri di entrata/uscita: nessuno
Note:
- se G110T3 è già attiva viene ignorata
- è utilizzabile anche fuori dalle macro di svuotatura
- serve per evitare inutili perdite di tempo: se non si usa la G110T3 il CN
deve visualizzare tutti i blocchi contenuti nel profilo specificato dalla G110.
Il risultato è, soprattutto per profili lunghi, una sosta a inizio di ogni
G110.
Start visualizzazione G110T4
Chiamata: G110T4
Funzione: riprende la visualizzazione interrotta da G110T3
Parametri di entrata/uscita: nessuno
Note:
- se G110T4 è già attiva viene ignorata
Quote G110T5
Chiamata: G110T5Py (y= 0, 1, 2)
Nella descrizione che segue si usa la parola "profilo" per indicare il percorso del centro fresa. Se non siamo in correzione raggio il percorso del centro fresa ed il profilo programmato coincidono, mentre se siamo in correzione raggio ciò non è più vero.
Funzione: serve per calcolare le quote di un profilo a una certa prelunghezza. È simile alla G110T1 (analisi), ma con diversi parametri di ingresso (non serve la retta di passata) e di uscita (fornisce le quote del profilo).
Parametri di entrata (non è necessario che siano programmati nella stessa
riga):
AN prelunghezza a cui calcolare le quote
HX numero riga iniziale (identico a G110T1)
HY numero riga finale (identico a G110T1)
Parametri di uscita:
AN viene >= 0 (tipico 0) se < della lunghezza complessiva del profilo, -1
se AN in
ingresso era > della lunghezza complessiva del profilo
HR,HT quote del punto del profilo. Se in uscita AN -1 sono le quote del punto finale del profilo.
AP,HX,HY non significativi
Suggerimenti pratici
La G110 permette di realizzare macro di sgrossatura/svuotatura anche di
notevole complessità.
Sarà bene però che il progettista della macro tenga presente alcuni aspetti dell'uso della G110 non proprio evidenti in prima battuta, per evitare problemi in caso di profili con condizioni geometriche limite.
Precisione dei calcoli
I calcoli fatti dallo Z32 per determinare le intersezioni della retta di passata col profilo analizzato sono tutti in virgola mobile, con precisione di 31 bits (8 cifre decimali). Gli errori di calcolo, accumulati nel vari passaggi, non arrivano normalmente al micron.
Analisi da inizio profilo con punto iniziale già negativo
L'analisi di un profilo può partire da qualsiasi punto: il parametro AN in ingresso alla macro specifica la quantità di profilo che deve essere scartata prima dell'analisi. Se il punto iniziale del profilo analizzato è già negativo il punto iniziale viene assunto come prima intersezione negativa.
Questo serve per evitare problemi nel caso che la retta di passata intersechi il profilo esattamente a fine di un tratto: per approssimazioni di calcolo infatti la retta di passata potrebbe inserirsi in un 'vuoto’ di profilo e l'intersezione potrebbe non essere trovata.
Tenere conto della forzatura in fase di decisioni logiche.
Analisi a partire da un punto che sta sulla retta di passata
Per sbrogliare situazioni complesse derivanti da intersezioni multiple con la retta di passata può essere necessario ripetere l'analisi dopo trovate le prime due intersezioni (una negativa e la successiva positiva) per trovare la seconda intersezione negativa e la seguente positiva e così via.
Si può ripetere l'analisi in questo caso partendo dalla prelunghezza della intersezione positiva precedente.
Se si trasferisce semplicemente il parametro AP in AN prima di ripetere l'analisi il punto iniziale è esattamente sulla retta di passata: per approssimazioni di calcolo il punto può essere considerato come prima intersezione negativa oppure no.
Si consiglia di iniziare l'analisi successiva almeno 1 micron più avanti dell'intersezione positiva precedente (ossia AN=AP+.001).
Nell'esempio di figura, per trovare le intersezioni N2 e
P2 si può programmare:
AN0 HX10 HY20 HR... HT30 K8
G110T1P1 (1.a analisi)
AN<AP+.002> HX10 HY20 HR... HT30 K8 G110T1P1 (2.a analisi)
Se nella seconda analisi si programma AN=AP si possono avere senza possibilità
di previsione (dipende dalle approssimazioni di calcolo) due diversi risultati:
- si trovano le intersezioni N1/P1
- si trovano le intersezioni N2/P2
Retta di passata tangente a un arco di cerchio
Nel caso che la retta di passata sia esattamente
tangente a un arco di cerchio contenuto nel profilo si può avere (il risultato
dipende dalle approssimazioni di calcolo):
- il cerchio non interseca
- il cerchio interseca in due punti coincidenti
- il cerchio interseca in due punti distinti molto vicini
Retta di passata coincidente con un segmento di retta
Nel caso che la retta di passata sia esattamente coincidente con un segmento di retta contenuto nel profilo si possono avere vari risultati, al solito dipendenti dalle approssimazioni di calcolo e quindi imprevedibili.
Sono possibili tutte le combinazioni:
- il segmento non interseca ed è tutto a destra
- il segmento non interseca ed è tutto a sinistra
- il segmento interseca da destra a sinistra, il punto di intersezione è in un
punto qualsiasi interno al segmento.
Ordine dei punti di intersezione
Può essere necessario, all'interno della macro, discriminare se un punto di
intersezione è più avanti o più indietro, sulla retta di passata, rispetto a un
altro punto.
Se i punti sono P1 (coordinate X1 Y1) e P2 (coord. X2 Y2) e HT è l'inclinazione
della retta di passata, la distanza orientata dei due punti è data dalla
formula:
d = (X2 - X1) * cos (HT) + (Y2 - Y1) * sen (HT)
La distanza trovata è positiva se il punto P2 è più avanti di P1 sulla retta di
passata.
Tempi di esecuzione
Il tempo di esecuzione della G110 dipende dalla lunghezza del profilo: in
pratica ogni G110 esegue l'esplorazione completa del profilo, con in più i calcoli di intersezione, che possono durare da
Il tempo di esecuzione di una intera macro è la somma dei tempi delle istruzioni contenute nella macro: le G110 e le altre. Se il profilo è complesso possono essere richieste molte analisi supplementari per discriminare intersezioni multiple: il tempo di esecuzione si allunga di conseguenza.
G111 - funzioni speciali di copiatura
La funzione consente la programmazione di movimenti di copiatura con tastatore
analogico. Per
maggiori informazioni consultare Il Manuale M46 "Digitalizzazione di
modelli su Z16 e Z32".
G112 - sincronizzazione con logica ML
Lo Z32, durante l'esecuzione automatica di un programma, calcola in anticipo
rispetto alla effettiva esecuzione, i tratti di movimento. Può essere
necessario in alcuni casi , quando si vogliono
scambiare dati con la logica programmabile, eliminare questa sfasatura: il
part-program deve attendere la logica per sincronizzare lo scambio dati.
Ci sono molti modi per operare questa sincronizzazione : un modo semplice è l'uso della funzione G112. Quando lo Z32 incontra una G112 non riprende la lettura del part-program fino a che non è passato almeno un ciclo di logica completo.
La G112 è attiva solo nel blocco ed è una funzione che richiede l'arresto degli assi. Non può essere programmata durante la correzione raggio o comunque quando ci sono elementi di profilo non risolti.
G113H - G113L - interpolazione a 2
millisecondi
È possibile interpolare e controllare gli assi ogni 2 millisecondi (in
precedenza il ritmo di aggiornamento era fisso a 8 millisec).
Ci sono due "G" che comandano il passaggio da
G113H comanda i 2 mS
G113L comanda gli 8 mS
È lecito (e non ha effetto) comandare G113H o G113L già attive.
Al reset è attiva per default la modalità di controllo assi definita nelle tarature macchina (tempo ciclo controllo assi = 2.8 mS).
G113H/L può essere programmata dovunque nel programma, anche in correzione raggio.
ATTENZIONE
A causa del serbatoio di blocchi preelaborati presenti in memoria l'effetto
di G113H/L è anticipato rispetto al punto in cui viene
programmata. L'entità dell'anticipo non è predeterminabile (al massimo allo
stato attuale circa una decina di blocchi, ma potrebbe variare in seguito se verrà aumentata la memoria a disposizione del serbatoio). Se
si desidera una certezza del
punto in cui G113H agisce, prima di G113 occorre programmare una funzione
"con arresto": la più innocua è G4 (ritardo) TT0.
Se tutto un programma deve essere con interpolazione veloce basta una G113H all'inizio.
G113P - G113F - G113X scelta tra moto proporzionale, feed-forward, MODO X Z32 ha tre modi di interpolazione: - il modo "normale" ha l'anticipo della velocità (feed-forward), che permette grandi precisioni di movimento (l'errore di inseguimento è molto basso, praticamente zero anche a velocità elevate)
- il modo con "errore proporzionale" non ha l'anticipo di velocità
e quindi l'errore di
inseguimento non è trascurabile, ma i movimenti sono più "morbidi"
del modo normale.
- il “MODO X” unisce la migliore precisione del modo
“normale” ed il miglior grado di finitura del modo proporzionale
(morbido)
Il modo proporzionale (morbido) è attivo con G98 (interpolazione solo lineare ottimizzata per piccoli tratti). Ci possono essere però situazioni in cui la morbidezza del movimento è utile anche fuori della G98.
Sono state perciò attivate tre opzioni nella G113:
- G113P attiva il modo proporzionale (morbido)
- G113F attiva il modo con feed-forward (rigido) - N.B. Funzione obsoleta,
usare G113X.
- G113X attiva il “MODO X”
Una particolare utilità trova la G113P nel caso di sequenze di movimenti in
G10 (posizionamento grossolano): la curva della velocità risulta del tutto morbida e quindi viene eliminata la sensazione di
urto meccanico che poteva dare il G10 su macchine con prestazioni dinamiche
elevate. I risultati della G113X sono, con macchine meccanicamente rigide,
superiori ad entrambi i modi
G113P e G113F: si ottiene maggiore velocità e migliore grado di finitura.
Per macchine di minore rigidità (grandi dimensioni) e superfici sculturate è possibile che si abbiano risultati migliori con la G113P, in quando la maggiore precisione dei movimenti imposta dalla G113X comporta maggiori accelerazioni che possono eccitare oscillazioni meccaniche che alla fine segnano il pezzo. La validità e la applicabilità di questa prestazione devono essere valutate dal costruttore caso per caso.
Per attivare il “MODO X” si deve programmare G113X, che è modale e disattiva G113P e G113F.
La G113X viene disattivata programmando G113F o G113P.
La programmazione di G113X presuppone che sia attiva G114, diversamente si ha allarme CN2C14 PARAMETRI INCOMPATIBILI.
Per semplicità di programmazione la G113X attiva automaticamente anche G113H (2 millisec) e G113V (gestione avanzata della velocità).
Con G113X attiva non ha effetto programmare G113L (8 mS) e G113S (gestione standard della velocità): sono ignorate.
Con G113X attiva non ha effetto la G113C, che opera solo con moti morbidi G113P.
La G113X viene sospesa durante i movimenti di maschiatura rigida G63 ed i movimenti di misura G61, G62.
Perché la G113X possa dare le sue migliori prestazioni occorre avere
introdotto nel controllo numerico vari parametri di taratura, cosa che è
facilmente ottenibile con
Dopo aver sostituito o cambiato le tarature di azionamenti o schede del CN.
deve essere eseguita
La G113X ha effetto su tutti i movimenti, incluso il rapido G0, che vengono eseguiti con un errore di inseguimento minimo anche
durante le rampe di accelerazione e decelerazione. Rispetto alla G113F (che ha
il minimo errore di inseguimento) si ha una riduzione dell’errore di un
fattore almeno 10: da alcuni decimi di millimetro a pochissimi centesimi.
È stata introdotta la relativa taratura in chiaro nel programma delle tarature
che definisce quale modo è attivo al reset se G113P (proporzionale), G113F
(feed-forward) o G113X (MODO X).
Queste funzioni fanno parte del sistema dell’Alta velocità, per maggiori dettagli sul funzionamento e strategie di uso vedere il manuale relativo M146 ‘Alta velocità.
2.1.60 G113C - G113N - correzioni traiettorie per moti morbidi
Ci sono due funzioni della G113:
G113C: correzione moti morbidi inserita
G113N: correzione moti morbidi disinserita
Con G113C si inserisce una correzione della traiettoria che riduce drasticamente l'errore di forma introdotto con moti morbidi (G113P oppure G98)
G113N (attiva al reset) annulla la G113C e quindi torna al funzionamento
precedente.
Queste due funzioni fanno parte di un sistema di gestione dell'alta velocità.
Per maggiori dettagli vedere il relativo manuale M146 “Alta
velocità”.
G113A - G113Z - arrotondamento
Funzione tipica dell’Alta velocità (G114).
La ricostruzione della curva originaria a partire dalla serie di segmenti è
possibile se sono attive contemporaneamente la G114 e la G113A
(Arrotondamento). G113A : arrotonda ogni segmento
programmato in funzione del precedente e del seguente, con l’obbiettivo
di mantenere la traiettoria continua il più possibile.
G113Z : annulla G113A (attiva al reset).
Queste due funzioni fanno parte del sistema dell’alta velocità ; per maggiori dettagli vedere il Manuale relativo M146
“Alta velocità”.
G113V - G113S - per gestione avanzata
della velocità
Z32 può gestire la velocità degli assi in modo molto più
preciso.
Poiché questa gestione avanzata della velocità richiede una quantità di calcoli aggiuntivi, è eseguibile solo con macchine dotate di microprocessori veloci (486DX4 o Pentium).
La gestione avanzata della velocità è particolarmente utile con programmi di alta velocità (G114 e part-program composto di molti piccoli tratti in G1), ma dà prestazioni migliori anche nel funzionamento normale.
In particolare, anche in assenza di G114 la gestione avanzata della velocità elimina i rallentamenti che si hanno in G1 per effetto di blocchi molto corti ed ottimizza i tempi di posizionamento finale, soprattutto su assi definiti come "morbidi" nelle tarature di macchina (Ntar superiore a 2).
I tempi di posizionamento e di rallentamento sugli spigoli si accorciano notevolmente con la gestione avanzata, pur rimanendo morbidi i movimenti di macchina.
La gestione avanzata della velocità è attiva al reset se è inclusa nelle tarature di macchina, ma si può attivare o disattivare da part-program con le due G113V e G113S.
G113V (modale, con arresto) attiva la gestione avanzata della velocità. Mnemonico G113V = avanzata.
È lecito e non ha effetto programmare G113V con gestione avanzata già attiva.
Se il microprocessore dichiarato nelle tarature di macchina non è almeno 486DX4 o Pentium viene l’allarme di programmazione:
CN 5314 PROCESSORE INSUFFICIENTE
G113S (modale, con arresto) disattiva la gestione avanzata della velocità. Mnemonico G113S = Standard
È lecito e non ha effetto programmare G113S con gestione avanzata non attiva.
G114 - attivazione del calcolo della
velocità
Modale.
Funzione tipica dell’alta velocità.
Per eseguire un profilo composto di tanti piccoli tratti lineari è
necessario esplorare in avanti, sul profilo, una certa quantità di blocchi e
calcolarne quindi la velocità di esecuzione.
G114 : attiva il calcolo della velocità e l’esplorazione di molti blocchi
in avanti sul profilo.
Annulla G115 ed è annullata da G115.
Insieme a G114 possono essere programmati alcuni parametri (I,
RA, HY, HR, J, K) che ne determinano
All
Questa funzione fa parte del sistema dell’Alta Velocità, per maggiori
dettagli vedere il Manuale relativo M146 ‘Alta
Velocità’.
G114 e visualizzazione righe di
part-program
Le righe di un part-program si possono raggruppare in due categorie:
A) Righe operative
Sono le righe che "fanno" qualcosa, ossia che contengono movimenti
assi, o funzioni ausiliarie.
B) Righe non operative
Sono tutte le altre. Possono essere righe vuote, o di commento, o righe di puro calcolo, o di assegnazione di valori a parametri numerici, o in generale righe evolute.
La visualizzazione di una riga impegna alcune risorse del sistema operativo Z32 che sono condivise dalla G114 per i blocchi esplorati in avanti.
Nella definizione delle prestazioni della G114 era stato preventivato che esistesse una riga da visualizzare per ogni movimento programmato, come è normale quando il part-program è costituito da una sequenza di movimenti calcolati da CAM.
Esistono però situazioni in cui ci sono molte righe "non operative" frapposte alle righe "operative" di movimento. Un caso tipico è che, per casi molto semplici o speciali, è Z32 che calcola, magari con salto a sottoprogramma e con vari calcoli matematici, i punti della curva.
La strategia di visualizzazione delle righe "non operative" è la seguente:
- in semiautomatico anche le righe non operative sono sempre visualizzate -
in automatico, sia da memoria che in DNC, le righe non operative non sono
visualizzate
Con questa strategia la G114 funziona nello stesso modo anche
se i punti successivi sono calcolati dallo stesso Z32 con molte righe
"non operative" tra un punto ed un altro. Resta la limitazione che il
tempo di calcolo sia coerente con la feed programmata
e con le lunghezze dei segmenti calcolati.
G115 - disattivazione del calcolo
della velocità
Modale attiva al reset.
G115 : disattiva una eventuale G114 calcolo della
velocità, forza G113P.
Questa funzione fa parte del sistema dell’Alta Velocità, per maggiori
dettagli vedere il Manuale
relativo M146 ‘Alta Velocità ‘.
G116 - lavorazioni su piano inclinato
Lo Z32 permette di eseguire lavorazioni su piani inclinati usando la prestazione
generale delle formule permanenti. Con questa soluzione però ci sono alcune
limitazioni nell'uso, dovute alle formule permanenti.
È possibile programmare la G116 (rototraslazione del piano di lavoro) su tre assi.
Il formato completo della G116 è:
G116 KA... X... Y... Z... I... J... K...
NB: uno solo tra I J K può essere programmato nella
stessa riga
Il parametro KA sceglie la funzione della G116:
- se KA0 viene disattivata la G116
- se KA1 viene attivata la G116, secondo i valori di X Y Z I J K
- se KA2, senza parametri supplementari, genera automaticamente gli angoli
necessari per ottenere l’orientamento del piano ortogonale al mandrino.
Questa prestazione esiste solo in presenza di G117
“generalizzata”, diversamente si ha errore CN2C14 “PARAMETRI
INCOMPATIBILI”.
- KA non programmato e programmati uno tra X Y Z I J K equivale a KA1
- se non programmati nessuno tra KA X Y Z I J K viene attivata la G116 con gli
stessi
parametri dell'ultima G116 programmata in precedenza. La G116 viene salvata in memoria permanente, quindi rimane anche
dopo uno spegnimento del CN. È quindi possibile, nel caso che avvenga un arresto macchina con G116 attiva e una punta in
un foro inclinato, riaccendere la macchina, in semiautomatico programmare una
G116 senza parametri, passare in Jog ed estrarre l'utensile comandando i
movimenti di jog dai pulsanti.
I parametri X Y Z I J K determinano la geometria della
G116, che è di tipo incrementale e associativa.
X Y Z individuano la origine del nuovo sistema di assi. individuata nel sistema
di assi in vigore.
I (o J o K), che possono essere programmati uno alla
volta, individuano la rotazione del nuovo sistema di assi, intorno all'asse X
(o Y o Z) nel sistema di assi in vigore.
In altre parole, la G116 introduce una rotazione di angolo I (o J o K) intorno
al punto di coordinate X, Y, Z nel sistema di coordinate in
vigore prima di programmare la G116.
I J K devono essere espressi in gradi.
La riga che contiene la G116 non genera alcun movimento.
Sulla stessa riga di programmazione di G116 può essere programmata una
traslazione più una rotazione, il sistema eseguirà in sequenza prima la
traslazione e poi
La
L'ordine in cui sono programmate G116 KA X Y Z I J K non ha importanza.
È possibile attivare G116 con G122 già attiva.
La G116 è compatibile con G117 e G118 ma non è compatibile con le formule
permanenti, né con movimenti di copiatura (G111).
Come con le formule permanenti, i fine corsa previsionali non sono attivi quando è in corso una G116, ma sono attivi i fine
corsa in tempo reale.
La G116 agisce su tutti i movimenti programmati, rapido o lavoro, lineari o
circolari.
ATTENZIONE
Per evitare errati spostamenti il primo movimento dopo la programmazione di G116, che ha una traslazione del sistema di riferimento, deve contenere le quote degli assi numero logico 0, 1, 2 (normalmente X, Y, Z).
La G116 è incompatibile con G43/G44/G45, diversamente genera allarme CN5B14.
La G25 (selezione della terna di lavoro) non ha influenza sulla G116, che
agisce secondo il numero logico degli assi. Perché la G116 possa funzionare in
modo corretto, l'asse X deve avere il numero logico 0, Y il numero logico 1 e Z
il numero logico
- a X il nome dell'asse con numero logico 0
- a Y il nome dell'asse con numero logico 1
- a Z il nome dell'asse con numero logico 2
Nell'esempio che segue è riportato un part-program (che contiene solo rotazioni di 90 gradi per maggiore facilità di comprensione) con segnate accanto le quote riferite al sistema di coordinate diritte (Xr Yr Zr) e visualizzate a video (Xv Yv Zv), raggiunte a fine movimento
Riga part-program Xr - Xv Yr - Yv Zr - Zv
N1 X0 Y0 Z0 0 0 0 0 0 0
N2 G116 X10 Y20 Z30 0 -10 0 -20 0 -30
N3 X3 Y2 Z1 13 3 22 2 31 1
N4 G116 X0 Y0 Z0 13 3 22 2 31 1
N5 X0 Y0 Z0 10 0 20 0 30 0
N6 G116 I90 10 0 20 0 30 0
N7 X50 60 50 20 0 30 0
N8 Y20 60 50 20 20 50 0
N9 Z30 60 50 -10 20 50 30
N10 G116 J90 60 -30 -10 20 50 50
N11 X45 60 45 65 20 50 50
N12 Y50 60 45 65 50 80 50
N13 Z40 50 45 65 50 80 40
N14 G116 K90 50 50 65 -45 80 40
N15 X10 50 10 65 -45 40 40
N16 Y30 50 10 -10 30 40 40
N17 Z60 70 10 -10 30 40 60
N18 G116 K-90 70 -30 -10 10 40 60
N19 X45 Y50 Z40 50 45 65 50 80 40
N20 G116 KA0 50 50 65 65 80 80
N21 X0 Y0 Z0 0 0 0 0 0 0
N22 G116 0 -20 0 -30 0 -10
N23 X45 Y50 Z40 50 45 65 50 80 40
Il fatto che sia possibile programmare un solo asse di rotazione alla volta è una limitazione necessaria per ottenere la massima chiarezza relativamente all'ordine in cui devono essere fatte le eventuali rotazioni multiple: non porta infatti lo stesso risultato programmare per esempio prima una rotazione intorno a X e poi intorno a Y, oppure prima intorno a Y e poi intorno a X.
Rotazioni intorno a più assi possono essere ottenute programmando in cascata (su righe successive) le varie rotazioni nell'ordine desiderato.
G117 - RTCP per
teste rotative
Modale.
La G117 gestisce l’RTCP (rotation tool centre point) per una testa mandrino montata su assi rotativi. La testa può ruotare intorno a un asse (testa monorotativa) o a due assi in cascata, trainante e trainato (testa birotativa).
Formato generalizzato di programmazione della G117:
G117 KA.. RA .. I.. J.. K..
Per una descrizione dettagliata sull’uso e funzionamento, vedere l’apposito manuale M154, rotazioni (RTCP).
G118 - RTCP per tavola girevole
Modale.
La speciale funzione G118 serve per la gestione dell’RTCP (rotation tool centre point) di una macchina utensile avente una tavola girevole monorotativa o birotativa “tilting” (uno o due assi, inclinati comunque rispetto alla terna di assi principali).
Il formato generale per l’attivazione della G118 è:
G118 N I… J… K… X… Y… Z…
oppure
G118 ‘nome asse’ I… J… K… X… Y… Z…
Per una descrizione dettagliata sull’uso e sul funzionamento vedere l’apposito Manuale M154, rotazioni (RTCP).
G118 HR1 - RTCP per tavola girevole
con movimenti combinati lineari/rotativi
Modale.
La speciale funzione G118 HR1 serve per la gestione dell’RTCP (rotation tool centre point) con movimenti combinati tra assi rotativi e lineari, di una macchina utensile avente una tavola girevole monorotativa o birotativa “tilting” (uno o due assi inclinati comunque rispetto alla terna di assi principali).
Il formato generale per l’attivazione della G118 è:
G118N HR1 X… Y… Z…
oppure
G118 ‘nome asse’ HR1 X… Y… Z…
Per una descrizione dettagliata sull’uso e sul funzionamento vedere l’apposito Manuale M154, rotazioni (RTCP).
G119 - per semiautomatico e jog con
allarmi rilevatori
Per consentire il movimento degli assi in semiautomatico o in jog con
rilevatori in allarme (tipo CNxx12) è stata introdotta la G119, che ha queste
caratteristiche:
- ha effetto solo se programmata da una riga di semiauto
- è modale, trasparente al reset
- se G119 attiva sono ignorati gli allarmi rilevatori tipo 12
- è automaticamente resettata se si lancia un programma automatico o se si
tenta di eseguire un qualsiasi sottoprogramma (anche di M speciale) da
semiautomatico
Per muovere gli assi in jog o semiauto con allarmi 12 occorre:
- entrare in semiautomatico
- comandare G119, premere Enter e poi START
- dare RESET (scompaiono gli allarmi rilevatori)
- operare normalmente in semiauto o jog
ATTENZIONE
Con G119 attiva i fine corsa software sono disabilitati su tutti gli assi, perché i rilevatori possono essere a quote non significative e quindi possono impedire il movimento. Spetta all'operatore mettere in atto la massima cautela per evitare collisioni e danni.
In ogni caso, per cautela, Z32 attiva automaticamente la condizione di TEST (riduzione del rapido a 1/5) quando G119 è attiva.
G120 - RTCP per tavola girevole -
coordinate del centro tavola
La G120 funziona solo in semiautomatico (MDI) da riga di comando.
La forma di programmazione è:
G120 I… J… K….
Per una descrizione dettagliata sull’uso e sul funzionamento vedere l’apposito Manuale M154, rotazioni (RTCP).
G121 - fattori di scala differenziati
per zone
La funzione la G121 permette di programmare fattori di scala differenziati per
asse e per zone per programmazione di soli blocchi lineari.
Si possono programmare fino a quattro zone e per ogni zona si può dare ad ogni asse della terna di lavoro un diverso fattore di scala.
Per ulteriori dettagli la G121 è descritta da un apposito Manuale M155 ‘Fattori di scala differenziati per zone’.
G122 - RTCP compensazione errori
montaggio pezzo su tavole tilting
Modale.
Questa funzione fa parte del sistema RTCP (rotation tool centre point) e svolge il compito di compensare gli errori di montaggio pezzo durante il movimento degli assi rotativi su tavole tilting.
Il formato generale di programmazione è:
G122 KA… I… J… K….
Per una descrizione dettagliata sull’uso e sul funzionamento vedere l’apposito Manuale M154, rotazioni (RTCP).
G123 - limitazione del campo di
lavoro
Con la G123 è possibile limitare il campo di lavoro per le quote programmate
degli assi continui (numero logico da
ATTENZIONE
La G123 agisce solo sulle quote finali programmate di movimenti lineari.
Non è prevista l'intersezione del movimento con la quota limite, ma solo la
sostituzione (o il test a seconda della modalità)
della quota finale programmata.
Per ogni asse continuo è definibile un campo di lavoro, definito da un estremo superiore ed un estremo inferiore (detti anche limite positivo e limite negativo), che limita la quota programmata dopo che ha subito tutte le trasformazioni attive (G121, fattori di scala ecc.).
All'accensione della macchina i limiti per ciascun asse
continuo sono messi a - infinito i negativi e a + infinito i positivi.
Programmazione di G123
Sintassi:
G123 KA0 disattiva entrambe le limitazioni positiva e negativa
G123 KA1 [X...] [Y...] set limiti positivi e attiva
limitazione positiva, se assi già oltre i limiti viene allarme CN5514
G123 KA-1 [X...] [Y...] set limiti positivi e attiva
la limitazione negativa, se assi già oltre i limiti viene allarme CN5514
G123 KA3 modo allarme: se una delle quote è fuori campo viene allarme CN5614
G123 KA4 ripristina modo normale, le quote sono limitate al campo di lavoro
G123 KA5 abilita modo arresto: se una o più quote programmate sono fuori campo
arresta tutti i movimenti e li riprende solo quando tutte le quote sono
rientrate nel campo di lavoro.
Al reset e a inizio programma le condizioni di default sono le seguenti:
- limiti di lavoro da +infinito a -infinito su tutti gli assi continui
- entrambe le limitazioni positiva e negativa non sono attive (G123KA0)
- la predisposizione è per non dare allarme e per limitare le quote che
fuoriescono (G123KA4)
Regole e vincoli per G123
La G123 deve essere programmata in una riga a sè stante, altrimenti viene
allarme
CN2C14 PARAMETRI INCOMPATIBILI
In una riga con G123 deve essere obbligatoriamente programmato KA con un
valore può' solo essere uno tra i seguenti: -1, 0, 1,
3, 4, 5.
Se il KA viene programmato più di una volta rimane valido l'ultimo programmato.
Se il valore di KA non è tra quelli consentiti si ha allarme
CN2C14 PARAMETRI INCOMPATIBILI
Se viene programmato KA1 o KA-1 le quote degli assi
(possono essere tutti gli assi continui della macchina) sono interpretate come
quote di limitazione positiva (se KA1) o negativa (se KA-1).
Con KA1 e KA-1 se mancano alcune quote di assi continui, le corrispondenti limitazioni vengono lasciate invariate.
La programmazione dei limiti positivi e negativi deve avvenire su righe diverse.
Possono essere attive singolarmente la limitazione positiva o quella negativa oppure possono essere attive contemporaneamente.
Per ciascun asse deve essere (limite positivo) > (limite negativo),
altrimenti viene allarme
CN5514 G123 LIMITI NON VALIDI
Al reset vengono disattivate le limitazioni sia positiva che negativa e viene ripristinato il modo normale (KA4).
Le limitazioni programmate sono sempre riferite all'origine attiva.
Con G123 attiva in modo normale (KA4) le quote finali programmate sono sostituite con le quote limite se sono esterne a queste.
Con G123 attiva in modo KA3 se le quote finali programmate sono esterne alle
quote limite viene allarme
CN5614 G123 KA3 QUOTA OLTRE I LIMITI
Se viene programmato un cerchio (G2 o G3) con G123
attiva viene dato allarme
CN5714 CERCHIO+G123
Con G123 KA1 o G123 KA-1 possono comparire programmate solo le quote degli
assi continui
della macchina, altrimenti anche in questo caso viene
dato l'allarme
CN2C14 PARAMETRI INCOMPATIBILI
Se è programmata G53 con G123 attiva o viceversa, G123 con G53 attiva viene l’allarme
CN5A14 G123+G53
Se è programmata G105 con G123 attiva viene l’allarme CN5914 G123+G105
Note per l’uso di G123 KA5
Se una o più quote programmate sono fuori campo arresta tutti i movimenti e li riprende solo quando tutte le quote sono rientrate nel campo di lavoro. Gli assi rimangono fermi all'ultima posizione programmata con quote tutte entro il campo di lavoro. I movimenti vengono ripresi quando tutte le quote programmate sono rientrate nel campo di lavoro. Nel momento in cui le quote rientrano tutte nel campo di lavoro sono considerati programmati tutti gli assi che siano stati bloccati nella fase precedente.
ATTENZIONE
Se durante la fase di arresto si muovono più di 5 assi alla ripresa dei movimenti sono considerati programmati più di 5 assi e quindi viene allarme
CN2C14 PARAMETRI INCOMPATIBILI.
Le righe relative ai movimenti bloccati non sono visualizzate, a meno che non contengano funzioni ausiliarie.
Disattivazione
Programmando G123KA0 si eliminano sia la limitazione positiva che quella negativa, ma rimangono attive tutte le predisposizioni (limiti, KA3 o KA4) programmati.
Per ripristinare la limitazione positiva precedente basterà' programmare G123KA1 senza nessuna quota e per ripristinare quella negativa G123KA-1 senza nessuna quota.
Programmazione limiti G123 con quota già fuori del campo di lavoro
Consideriamo adesso il caso (per semplicità ci riferiremo ad un solo asse) di programmazione di limiti con G123 con la
quota già al di fuori di tali limiti: ad esempio si ha X=80 e si programma
G123KA1X30.
Si deve distinguere il caso di G123KA3 (modo allarme) e di G123KA4 (modo limitazione).
G123KA3 caso 1:
G0X100
G123KA3
G123KA1X30 unico limite positivo sulla X
G0X40 allarme CN5614 G123 KA3 QUOTA OLTRE I LIMITI
G123KA3 caso 2:
G0X100
G123KA3
G123KA1X30 unico limite positivo sulla X
G0X10 X va a 10 (entro i limiti programmati)
G123KA3 caso 3:
G0X100
G123KA3
G123KA1X30 unico limite positivo sulla X
G0Z200 Z va a 200
G0Y300 Y va a 300
G0X50 allarme CN5614 G123 KA3 QUOTA OLTRE I LIMITI
G123KA4 caso 1:
G0X100
G123KA4
G123KA1X30 unico limite positivo sulla X
G0X40 X va a 30 anche se programmato 40
G123KA4 caso 2:
G0X100
G123KA4
G123KA1X30 unico limite positivo sulla X
G0X10 X va a 10, che è entro il limite della G123
G123KA4 caso 3:
G0X100
G123KA4
G123KA1X30 unico limite positivo sulla X
G0Z200 Z va a 200
G0Y300 Y va a 300
G0X50 X va a 30 anche se programmato 50
Esempi di programmazione ed uso di G123
ESEMPIO 1%
G0X0Y0Z0
G123KA1X30Y40Z50 limiti positivi
G123KA-1X-10Y-20Z-30 limiti negativi
G0X60Y60Z60 quote limitate a X=30, Y=40, Z=50
G123KA3 attivato il modo allarme
G0X-40 allarme CN5614 G123 KA3 QUOTA OLTRE I LIMITI
M2
ESEMPIO 2%
G0X20Y20Z20
G123KA1X30Y40Z50 limiti positivi
G123KA-1X-10Y-15Z-20 limiti negativi
G0X-60Y-60Z-60 punto finale X=-10, Y=-15, Z=-20
G0X60 X si ferma a 30
G0Y80 Y si ferma a 40
M2
ESEMPIO 3%
G0 X0 Y0 Z0
G123 KA1 Y20 unico limite positivo: max Y =+20
G123 KA5 abilita il modo "arresto"
G1 F1000 X5 movimento eseguito
X-10 Y25 Z-20 movimento non eseguito perché Y fuori limite
X-12 Z30 movimento non eseguito perchè Y è ancora fuori limite
Y10 movimento è eseguito come se fossero programmati X-12 Y10 Z30
G124 - attivazione volantini degli
assi rotativi in G117
La G124 permette di attivare i volantini degli assi rotativi legati a G117 mentre
Lo scopo è di poter muovere a mano la testa della macchina durante la
lavorazione del pezzo in automatico e semiautomatico.
Mentre è attiva G124 non si possono programmare le quote degli assi rotativi
legati a G117 (asse rotativo per testa monorotativa, assi
trainante/trainato per testa birotativa).
Programmazione di G124
Sintassi:
G124 [KA1] attiva i volantini collegati agli assi rotativi legati a G117; KA1
non è necessario
G124 KA0 disattiva la G124
Regole e vincoli per G124
All'accensione ed al reset la G124 è disabilitata.
La programmazione di G124 ha effetto solo se G117 è attiva.
Se viene programmata G124 con G117 non attiva l'effetto è nullo, anche se non viene dato nessun allarme.
Le due attivazioni: G124 oppure G124KA1 sono equivalenti
Se mentre è attiva G124 viene disattivata G117 si ha l'immediata disattivazione anche di G124.
Se mentre è attiva G124 viene programmato uno degli assi rotativi legati a G117 si ha il messaggio di allarme CN5814 G124+ASSE ROTATIVO DI G117
Dal punto precedente consegue che l'unico modo di muovere gli assi rotativi legati a G117 con la G124 attiva è quello di usare i volantini ad essi collegati.
Disattivazione
Programmando G124KA0 si ha la disattivazione dei volantini legati agli assi rotativi di G117 e tali assi possono essere da ora in avanti di nuovo programmati.
Esempi di programmazione
Supponiamo di avere una macchina con testa birotativa ed assi XYZABC, dove A e B sono i due assi rotativi legati alla G117, mentre C è un altro asse rotativo non interessato a G117.
Esempio 1:
G0X0Y0Z0A0B0C0
G117
G0A20B30X40
G124 da qui in poi si possono muovere A e B solo tramite i volantini
G0X10Y10Z10C40 ok (asse C non collegato a G117)
G0A10 allarme CN5814 perchè programmato asse A
Esempio 2:
G0X0Y0Z0A0B0C0
G117
G0A30B40X40
G124 da qui in poi si possono muovere A e B solo tramite i volantini
G0X10Y15Z25C30 ok (asse C non collegato a G117)
G0Z0X0Y0C0 ok
G124KA0 volantini A e B disattivati: A e B sono nuovamente programmabili
G0A15B35X10 ok
Esempio 3:
G0X0Y0Z0A0B0C0
G124 non ha effetto perchè la G117 non è attiva
G117
G0A30B40X40 A e B possono essere programmati
G124 da qui in poi si possono muovere A e B solo tramite i volantini
G0X10Y15Z25C30 ok (asse C non collegato a G117)
G0Z0X0Y0C0 ok
G117KA0 la disattivazione di G117
nuovamente programmabili
disattiva anche G124: A e B sono
G0A15B35X10 ok
G125 - taratura assi per alta
velocità
Per ottenere le migliori prestazioni dal controllo degli assi “MODO
X”, che si attiva con la G113X, sono necessarie una quantità di tarature
specifiche per ogni asse.
La G125, che deve essere eseguita in semiautomatico oppure in automatico da part-program, consente di ricavare in modo semplice, rapido, ripetibile e preciso queste tarature, che sarebbero altrimenti piuttosto complesse da determinare.
Questa funzione fa parte del sistema dell’Alta Velocità, per maggiori dettagli vedere il Manuale relativo M146 ‘Alta Velocità’.
G126 - lavorazione pezzi in movimento
Modale, con arresto.
Questa funzione è dedicata a macchine speciali che lavorano pezzi in movimento.
In queste macchine il pezzo da lavorare è fissato su un nastro trasportatore in movimento (asse “master”), mentre l’unità operatrice è fissa e può avere diversi assi, e uno di questi è l’asse inseguitore (asse”slave”).
La G126 abilita la modalità di inseguimento tra asse master (trasportatore) ed asse slave (inseguitore).
Per una descrizione dettagliata di questa funzione vedere il manaule M99 – logica programmabile, funzione “FFLOCK”.
G127 - disattiva lavorazione pezzi in
movimento
Modale, attiva al reset, con arresto.
G127 disattiva G126, modalità di inseguimento.
Per una descrizione dettagliata di questa funzione vedere il manaule M99
– logica programmabile,
funzione “FFLOCK”.
G128 - G129 - G130 funzioni per lock
di processo
Funzioni per la gestione del "lock di processo", un modo di
funzionamento speciale per macchine a più processi con assi sincronizzati.
La descrizione del sistema (ovviamente interessa solo l'utente che ha una macchina predisposta per il lock di processo) è contenuta nel manuale M252.
G131 - velocità
costante sulla punta utensile con RTCP attiva
Modale.
Questa prestazione consente di avere il moto relativo tra pezzo e punta utensile alla velocità F programmata quando si ha l'RTCP attiva; pertanto la velocità da mantenere costante ed uguale alla F programmata è quella che c'è nel movimento programmato degli assi XYZ, senza considerare il moto programmato degli assi rotativi e gli eventuali moti di trascinamento che il moto dei rotativi induce sugli assi lineari.
Infatti il moto di trascinamento è un movimento che non genera una velocità relativa tra punta utensile e pezzo, poiché serve proprio a mantenere la punta utensile ferma rispetto al pezzo.
- con RTCP attiva e con G131 attiva la feed programmata sarà riferita ai
soli assi lineari
- dalla feed programmata e dalla lunghezza del movimento degli assi lineari si
ricava il tempo di esecuzione del movimento degli assi lineari
- a questo punto viene calcolata una nuova feed
espressa come l'inverso del tempo sopra calcolato ed il comportamento è quello
che si avrebbe se fosse stata programmata una G93 con tale feed.
- il formato generale per l’attivazione di G131 è:
G131 I…
- sulla riga di attivazione di G131 si può specificare il parametro I seguito da un numero positivo che individua la massima
velocità che potranno avere gli assi rotativi coinvolti nel movimento. Se tale
parametro non viene specificato la velocità massima
sarà saturata al rapido.
ATTENZIONE:
-se la feed così calcolata dovesse risultare troppo elevata per qualcuno degli altri assi coinvolti nel movimento, questa verrà opportunamente limitata.
- al tendere a zero della lunghezza del movimento degli assi lineari gli
assi rotativi avranno una velocità sempre maggiore che verrà
eventualmente saturata al massimo ammissibile specificato con il parametro I.
Se il parametro I non è stato programmato nella riga di G131 la velocità
massima sarà saturata al rapido.
-in blocchi con lunghezza del movimento degli assi lineari nullo i rotativi
andranno al loro massimo consentito (parametro I o rapido).
- in blocchi dove non sono programmati assi lineari i rotativi andranno al
loro massimo consentito (parametro I o rapido).
- se nel movimento sono presenti pure moti di trascinamento indotti sugli assi
XYZ dal moto degli assi rotativi RTCP, e tali moti fanno si
che la velocità degli assi XYZ sia troppo alta, questa sarà limitata in tempo
reale in modo da farla rimanere sempre nei limiti consentiti per gli assi XYZ.;
questo si traduce in una velocità non costante tra punta utensile e pezzo.
- in un movimento molto lungo si potranno avere variazioni di velocità dovute
all'effetto del moto indotto sugli assi lineari dal moto degli assi rotativi
legati all'RTCP.
- G131 non influenzerà G0
-Quando si programma G131 vengono eliminate G93 o G94
o G95 viceversa con G131 attiva programmando G93 o G94 o G95 viene eliminata
G131.
G132 KA1 - lavorazione camme
globoidali
La lavorazione delle camme globoidali, generata da CAM, è costituita da
movimenti di predisposizione degli assi sia lineari che rotativi, ai quali
seguono i movimenti interpolanti che realizzano il profilo della camma.
Tipicamente il part-program è generato con queste modalità:
- il CAM conosce il raggio utensile da usare
-i movimenti che realizzano il profilo sono costituiti dai soli movimenti degli
assi rotativi, lasciando al CNC il calcolo in tempo reale in RTCP dei movimenti
degli assi lineari.
Il problema che si riscontra nella pratica applicazione è che il raggio utensile effettivamente utilizzato può essere leggermente diverso (in più o in meno) rispetto al raggio usato dal CAM, e quindi, se non si vuole rigenerare l'intero part-program col CAM, si deve introdurre nel CNC la possibilità di correggere i movimenti per tener conto della differenza raggio: la G132 risolve questo problema.
La sintassi completa della G132 è la seguente:
G132 KA1 (asse1)(v1) (asse2)(v2) (asse3)3 (asse4)4 HX(vx) HY(vy) HR(vr) I(vf)
dove:
(asse1) è il nome del primo asse lineare, per esempio X
(v1) può assumere i due soli valori numerici +1 oppure -1, per indicare che la
correzione calcolata deve essere applicata all'asse1 col suo segno oppure col
segno scambiato
(asse2) è il nome del secondo asse lineare, per esempio Y
(v2) può assumere i due soli valori numerici +2 oppure -2, per indicare che la
correzione calcolata deve essere applicata all'asse2 col suo segno oppure col
segno scambiato
(asse3) è il nome del primo asse rotativo, che è normalmente associato al primo
asse lineare
(asse4) è il nome del secondo asse rotativo, che è normalmente associato al
secondo asse lineare
3 e 4 sono valori numerici obbligatori che permettono al CN di identificare gli
assi
(vx) è il valore numerico che individua la lunghezza in millimetri del braccio
di rotazione relativo al primo asse rotativo
(vy) è il valore numerico che individua la lunghezza in millimetri del braccio
di rotazione relativo al
secondo asse rotativo
(vr) è il valore numerico in millimetri che rappresenta la differenza tra il
raggio usato dal CAM per il calcolo ed il raggio utensile usato in macchina. Il
massimo valore ammesso è
(vf) è la massima velocità in mm/min con cui il CN
muove gli assi lineari per effettuare le correzioni
Per esempio:
G132 KA1 X1 Z-2 A3 C4 HX11.210 HY120,437 HR-.162 I1000
Introduce una correzione per camme globoidali in cui:
- gli assi lineari sono X e Z, associati agli assi
rotativi A e C
- la correzione sull'asse Z ha segno opposto a quello teorico
- il braccio di rotazione dell'asse A è
- il braccio di rotazione dell'asse C è
- il raggio utensile effettivo è inferiore a quello usato dal CAM di
- la massima velocità di correzione è 1000 mm/min
La disattivazione della correzione è fatta con:
G132 KA0
Alcune precisazioni sulla sintassi di programmazione della G132:
- il KA è obbligatorio e può assumere i soli valori 1 o 0
-i valori delle lunghezze e delle velocità sono in mm e mm/min, anche se la
macchina è dichiarata in pollici
-se è programmato KA1 sono obbligatori anche HX, HY, HR e quattro assi, con i quattro valori +1, +-2, 3, 4
-la programmazione della I è facoltativa, se non è programmata viene assunto il valore di default di 500 mm/min, se è programmata il massimo valore di I è 2000 mm/min
- gli elementi che compongono la riga possono essere forniti in qualsiasi
ordine
- tutti i valori numerici possono essere programmati con espressioni (per
esempio può essere comodo HR<R-10> per indicare che il raggio usato dal
CAM era
- la G132 è incompatibile con G53/G54 (errore CN3914 <<FORMULA +
G53/G54>>)
- la G132 è compatibile con lo RTCP e con qualsiasi
tratto geometrico programmato (lineare, circolare ecc.)
- con G132 attiva possono essere programmati anche gli assi lineari: il
movimento di correzione si somma a quello programmato.
Altre precisazioni sulle modalità di esecuzione dei movimenti in tempo reale:
- all'attivazione della G132 le correzioni partono da zero e si portano a
quelle calcolate con un raccordo che parte con un certo ritardo (servono almeno
0,25 gradi di almeno un asse rotativo) e dura il tempo
necessario al recupero dell'intera correzione, quindi il tratto immediatamente
successivo alla G132 deve essere in aria per non generare profili errati
- alla disattivazione (dopo G132 KA0) si ha il movimento inverso di recupero
della correzione: anche qui è necessario un movimento in aria per evitare
errori
- durante la ricerca blocco la correzione non è attiva. Alla ripresa della
lavorazione si ha il raccordo iniziale come all'attivazione della G132
- durante la lavorazione la velocità massima di correzione (per ognuno dei due assi lineari) è limitata a quella programmata
(default 500 mm/min). Se la geometria richiede velocità superiori si hanno
errori di correzione che possono essere recuperati in un tempo successivo, non
appena le velocità rientrano nei limiti ammessi
-le correzioni sono calcolate in base alle direzioni dei movimenti assi, e sono
amplificate dalla differenza raggio programmata con HR. Quindi il grado di
finitura dipende dalla regolarità della programmazione, ma anche dall'entità
della differenza raggio, che deve essere contenuta il più possibile (ben al di
sotto del limite concesso al parametro HR che è di
G133 KA0 - G133 KA1 per gestione
doppio mandrino
Questa prestazione è riservata a macchine con doppio mandrino e deve essere
supportata dal PLC di macchina. Consultare il costruttore della macchina
utensile per eventuali dettagli.
Con G133 KA0 si attiva il mandrino principale, con G133 KA1 si attiva il mandrino ausiliario.
Se insieme a G133 non è programmato KA o sono programmati valori diversi da
0 o 1 viene allarme
CN1D14 ERRORE PROGRAMMA.
La G133 non può stare nella stessa riga insieme a G134 (viene allarme CN 1D14 ERRORE PROGRAMMA).
Se la macchina non supporta il doppio mandrino la programmazione di G133 genera un allarme CN1D14 ERRORE PROGRAMMA.
Al reset e a inizio programma è automaticamente attivato il mandrino principale.
Il tipo di comportamento del mandrino che viene abbandonato (può continuare la sua rotazione oppure arrestarsi) dipende dal PLC di macchina: consultare il costruttore della macchina utensile.
G134 KA0 - (macchina tipo fresa) e
G134 KA1 - (macchina tipo tornio)
Questa prestazione è riservata a macchine con doppia funzionalità di fresa
oppure di tornio e deve essere supportata dal PLC di macchina. Consultare il
costruttore della macchina utensile per eventuali dettagli..
Con la G134 KA0 si forza il funzionamento fresa mentre con G134 KA1 si forza il funzionamento tornio.
Questa prestazione è ancora in fase di sviluppo, quindi per una descrizione dettagliata riferirsi alla documentazione successiva.
G200 HX0 / G200 HX1 - impostazione
modo DNC
Nelle tarature di Z32 è prevista l'impostazione del modo DNC, che può essere
del tipo "$%" oppure del tipo "COTERM".
Il tipo $% riceve i dati con un protocollo molto semplice attraverso la linea seriale A (vedere manuale M161).
Il tipo COTERM riunisce tutti gli altri modi, da quello attraverso la linea seriale B ai modi interni di Z32, che sono usati dai vari programmi di supporto (ZTERM, TERMS, DIGIT...).
In qualche caso l'utente ha bisogno di entrambi i modi.
Con
G200 HX0
predispone per modo $%
G200 HX1
predispone per tutti gli altri modi
Alla prima accensione è valido il modo impostato in taratura.
Se non si programma HX nella stessa riga viene allarme parametri incompatibili.
G200 HX2 / G200 HX3 - disinserimento
calcio all’inversione
Quando un asse di macchina inverte il segno della velocità
si genera una perdita di moto, ossia invece di riprendere subito il movimento
nella direzione opposta l’asse rimane immobile per qualche tempo.
Uno dei mezzi usati per combattere questo fenomeno è una particolare taratura di macchina chiamata “calcio all’inversione”: quando l’asse deve invertire la direzione di movimento gli viene inviato un comando supplementare che accelera l’inversione.
Questo comando supplementare può essere nocivo nel caso che l’inversione sia molto lenta, cosa che può avvenire con cerchi di raggio molto grande o eseguiti a bassa velocità o con profili quasi piani.
L’effetto in questo caso sono movimenti leggermente fuori traiettoria
(ordine di grandezza
G200 HX3 (disabilita il calcio all’inversione)
Se nello stesso part-program si desidera riabilitare il calcio si programma:
G200 HX2 (abilita calcio all’inversione)
Entrambe le funzioni sono modali, con arresto.
Al RESET e ad inizio programma il calcio all’inversione è sempre
abilitato.
G200 HX4 / G200 HX5 - programmazione
del cerchio completo
L’esecuzione all’interno di un part-program della riga:
G200 HX4
forza, per le righe successive, l’esecuzione del cerchio completo quando l’arco di cerchio è programmato con G2/G3 I J X Y e le quote finali sono identiche alle quote iniziali.
L’effetto di G200 HX4 è modale, ossia permane in tutte le righe successive fino all’eventuale disattivazione con G200 HX5.
Le condizioni per l’esecuzione del cerchio completo sono:
- deve essere programmato con G2/G3 I J X Y
- le quote finali devono essere identiche alle quote iniziali
L’effetto di G200 HX4 viene annullato programmando: G200 HX5
Esiste una speciale taratura di macchina (consultare il costruttore) che forza il cerchio completo a inizio programma, rendendo inutile la programmazione di G200HX4. Se questa taratura è attiva è possibile eliminarla con G200 HX5.
Vedi anche nel capitolo geometria il paragrafo programmazione del cerchio completo.
G200 HX6 / G200 HX7 - modifica
velocità di ricerca lenta in G61
La velocità di ricerca lenta in G61 è definita nelle tarature macchina.
Con questa funzione è possibile modificare da part-program la velocità di ricerca lenta. Esempio:
G200 HX6 HY500
Dopo questa istruzione la velocità di ricerca lenta di G61 diventa il 50% di
quella in taratura.
La velocità di ricerca definita in taratura viene moltiplicata per HY/1000.
HX deve essere programmato nella stessa riga di G200 mentre HY può essere
definito in righe
precedenti. Esempio:
HY500
G200 HX6
Il campo valido per HY è da
Valori esterni a questo intervallo sono limitati agli estremi, quindi valori di HY negativi agiscono come 0, mentre valori maggiori di 1500 agiscono come 1500.
La forzatura della velocità di ricerca lenta permane fino a fine part-program, mentre viene eliminata da un reset o inizio programma.
La disattivazione della forzatura e quindi il ripristino della taratura si ha con:
G200 HX7
oppure con:
G200 HX6 HY1000
G200 HX8 / G200 HX9 - maschiatura
rigida senza inversione mandrino.
La funzione di maschiatura rigida G63 prevede che l’asse sia sempre
rigidamente agganciato al mandrino, che quindi deve invertire a fine
maschiatura per il ritorno alla quota di partenza.
Da qualche tempo sono disponibili attrezzature che consentono una maschiatura “semirigida” con inversione automatica del senso di rotazione, che quindi eliminano la necessità di inversione del mandrino.
Per queste attrezzature il ciclo di maschiatura deve essere:
a) rotazione del mandrino
b) partenza dell’asse di maschiatura e aggancio alla rotazione mandrino
c) avanzamento di maschiatura
d) inversione dell’asse senza inversione del mandrino, con momentanea perdita del sincronismo e nuovo aggancio in direzione inversa
e) ritorno al punto di partenza
E’ possibile forzare l’esecuzione di questo ciclo programmando
G200 HX8 prima della G63, e tornare al ciclo di maschiatura standard con G200
HX9.
Esempio:
T57M6 (MASCHIATORE CON INVERSIONE PASSO 2)
G200 HX8
...
G63 Z-50 K2
...
G63 Z-50 K2
...
T58M6 (MASCHIATORE RIGIDO PASSO 1)
G200 HX9
...
G63 Z-80 K1
...
Al RESET e a inizio programma è attiva la modalità standard (maschiatura rigida con inversione mandrino, G200 HX9).
La G200 HX8 è modale: rimane attiva fino al reset e può essere disattivata con G200 HX9.
Con G200 HX8 attiva il tempo di inversione dell’asse è il doppio del tempo di attacco morbido definito in taratura per la G63, perché durante l’inversione si ha un gradino di velocità da positivo a negativo che è quindi il doppio rispetto al gradino di velocità iniziale che va da zero alla velocità positiva.
FUNZIONI AUSILIARIE 'M'
Le funzioni M (miscellanee) interessano più che altro il comportamento della
macchina utensile e quindi sono in massima parte definite nei loro effetti dal
costruttore.
Tutte le M richiedono l'arresto (vedere capitolo “Funzioni preparatorie ‘G’ paragrafo ‘Funzioni G’).
M0==M00 Le norme ISO indicano le funzioni di numerose M : solo alcune M sono decodificate e gestite dallo Z32: di queste sole si darà il dettaglio.
Il valore numerico (due cifre intere) che segue la lettera 'M' indica
Le M sono inviate alla logica di macchina, e quindi eseguite, in sequenza con altre operazioni richieste nella riga, come si vedrà anche nel capitolo apposito (esecuzione riga ISO).
La sequenza di esecuzione delle M è:
- moto mandrino (M3, M4)
- M speciale (esclusa la M6)
- altre M
- posizionamento o stop mandrino (M19, M5)
- cambio utensile (M6)
- M finali (M0, M1, M2)
In una stessa riga possono essere programmate:
- tutte le M gestite dallo Z32 (M3, M4, M5, M6, M7, M8, M9, M19)
- una tra le M finali (M0, M1, M2)
- un'altra M non inclusa nelle precedenti
Per esempio, è lecito programmare in una riga:
M3 M7 M8 M19 M2
Qualunque sia l'ordine con cui le M sono scritte nella riga, e salvo altre
operazioni intermedie,
per esempio moti assi se programmati, il CN eseguirà nell'ordine:
- marcia mandrino (M3)
- erogazione refrigeranti 1 e 2 (M7 M8)
- stop refrigeranti e posizionamento mandrino (M19)
- fine programma (M2)
M0 - stop
Arresta l'esecuzione del programma, che può essere ripreso premendo il pulsante
di
start.
Richiede anche stop mandrino e stop refrigeranti.
M1 - stop condizionato
Come M0, solo che l'efficacia di M1 è condizionata da un apposito ingresso di logica programmabile: consultare il costruttore della macchina utensile per ulteriori dettagli.
Richiede anche stop mandrino e stop refrigeranti.
M2 - fine programma
Fa uscire il controllo dal modo 'ESECUZIONE' e chiude le operazioni in automatico.
M3 - mandrino orario
Richiede moto mandrino orario alla velocità S precedentemente programmata.
M4 - mandrino antiorario
Richiede moto mandrino antiorario alla velocità S precedentemente programmata.
M5 - stop mandrino
Richiede l'arresto del mandrino.
Arresta anche i refrigeranti.
M6 - cambio utensile
Chiede che l'utensile (programmato come T nello stesso blocco o in blocchi
precedenti) sia montato sul mandrino.
Arresta anche il mandrino e i refrigeranti.
Dopo la esecuzione (non in ricerca blocco) di una M6
il CN prende atto della descrizione dell'utensile montato sul mandrino e quindi
aggiorna i parametri in conseguenza.
L’effettivo aggiornamento dei parametri in descrizione utensile avviene
all’uscita (G26)dal sottoprogramma di cambio utensile (vedere anche la gestione utensili).
M7 - eroga refrigerante n.1
Chiede che venga erogato il refrigerante n.1 .
M8 - eroga refrigerante n.2
Chiede che venga erogato il refrigerante n.2 .
M9 - stop refrigeranti
Chiede che venga cessata l'erogazione dei refrigeranti.
M19 - orientamento mandrino
Chiede che venga orientato il mandrino.
Richiede anche stop mandrino e stop refrigeranti.
M 'speciali'
Il costruttore della macchina utensile può definire fino a
Se la riga contiene altre funzioni che dovrebbero essere eseguite dopo la M speciale, queste funzioni non vengono eseguite. Una volta terminato il sottoprogramma associato alla M speciale il programma viene ripreso dall'inizio della riga successiva.
Non possono essere definite come M speciali alcune M già decodificate e in parte gestite dallo Z32, ossia:
M3, M4
M7, M8, M9
M19, M5
M0, M1, M2.
Stop Durante l'esecuzione del sottoprogramma associato alle M speciali è bloccato il conteggio del contablocchi
Video non numero progressivo (ossia in ricerca blocco la M speciale è un solo blocco che non può essere aggiornato ripreso in un punto intermedio.
La visualizzazione della riga in corso di esecuzione è anche sospesa durante la M speciale, salvo che lo Z32 sia posto nel modo 'assistenza' con l'apposita procedura (ved. manuale impiego M95).
Il sottoprogramma associato alla M speciale può essere eseguito in blocco singolo.
Una M speciale può essere richiamata anche dall'interno di un ciclo fisso utente o di sistema o da un'altra M speciale. Per esempio è possibile creare un ciclo fisso con controllo integrità utensile e richiamare il cambio utensile (M6 speciale) anche dall'interno del ciclo fisso.
Nello Z32 sono disponibili fino a 10 livelli di annidamento (nesting) di
salto con ritorno. Ognuna delle seguenti operazioni consuma un livello:
- GON...-N... salto a serie di righe con ritorno
- GOP... salto a sottoprogramma con ritorno
- M speciale
- ciclo fisso di sistema o utente
Due livelli sono usati dalla G110 (macrofunzioni di svuotatura).
Oltre i livelli disponibili si ha errore: CN 2E14 TROPPE SUBROUTINES Poiché le M speciali sono il tipico mezzo a disposizione del costruttore della macchina utensile per personalizzare il CN, per l'elenco e l'uso delle 'M' speciali si rimanda alle informazioni fornite dal costruttore stesso.
FUNZIONI AUSILIARIE MA, MB, MC
Oltre alle funzioni ausiliarie M previste dalle norme ISO lo Z32 mette a disposizione del costruttore della macchina utensile per funzioni particolari di macchina altre tre funzioni ausiliarie (MA, MB, MC) che sono inviate alla logica di macchina.
Come parametri, le funzioni MA, MB, MC possono essere programmate con 9 cifre significative prima o dopo la virgola o punto decimale.
Nell'invio alla logica, che esegue le funzioni specificate, i decimali sono perduti e eventuali valori superiori a 9999 sono ricondotti a 9999: sono perciò significative solo 4 cifre intere.
È possibile programmare il segno delle MA, MB, MC. Il segno è passato alla logica come valore '8000' della funzione programmata.
È quindi equivalente programmare:
MA-100 MA8100
MA-1 MA8001
MB-1040 MB9040
Il valore '0' non può essere negato (MA-0 equivale a MA0 e non a MA8000).
L'uso del segno dipende dalla particolare funzione assegnata dal costruttore della macchina utensile alle MA, MB, MC.
Le MA, MB, MC, richiedono l'arresto (vedere capitolo “Funzioni preparatorie G” paragrafo “Funzioni G”.
FEED
All'indirizzo F è assegnato, secondo le norme ISO, il significato di valore della velocità di avanzamento.
La velocità è espressa in interi visualizzati/minuto al reset con G94, con G95 viene espressa in interi visualizzati/giro, e con G93 viene espressa come inverso del tempo in minuti necessario per eseguire il movimento.
Per esempio, se si tratta di assi rettilinei con visualizzazione di millimetri (e decimali micron), programmare F100 significa 100 millimetri/minuto.
Se si tratta di assi rotativi con visualizzazione di gradi (e millesimi di grado), programmare F100 significa 100 gradi/minuto.
Come ogni parametro, F può essere programmata con 9 cifre significative prima o dopo la virgola o punto decimale. La F però ha anche l’effetto di impostare la velocità di lavoro : poiché le velocità comandate non devono in nessuna occasione superare il rapido, il CN limita la velocità fisica degli assi in funzione dei rapidi degli assi interessati al moto e del tipo di movimento impostato.
In sintesi:
- durante movimenti in G1, con override al 100% e considerata l'inclinazione
del movimento, nessun asse deve superare la velocità del suo
rapido divisa per 1.2 (con override al 120% la velocità non supera il
rapido).
- durante i movimenti in G2/G3 la feed con override al 100% non deve superare
il minore dei rapidi degli assi del piano di lavoro
Vedere anche il capitolo “Funzioni preparatorie ‘G’” nei paragrafi dedicati a G1 e G2/G3.
Queste limitazioni hanno effetto solo sulla velocità fisica degli assi non
sul parametro F che conserva il valore programmato. Per esempio, si abbiano gli
assi:
X con rapido a 15 m/min
Y con rapido a 15 m/min
Z con rapido a 10 m/min
Il programma seguente genera le velocità (sulla traiettoria e con override al 100%) come descritto in commento:
...
N10 G0 X0 Y0 Z0
N11 G1 F5000 X100 Y100 Z100 (5000 mm/min)
N12 F10000 X0 Y0 (10000 mm/min)
N13 Z100 (8333 mm/min)
N14 X100 (10000 mm/min)
N15 F99000 X200 (12500 mm/min)
...
Sempre fermo restando il valore del parametro F, il minimo incremento della velocità di interpolazione è di circa 0,01 unità/minuto (ossia 0,01 mm/minuto nel caso di assi lineari).
SPEED
La S esprime la velocità del mandrino.
Come parametro, la S può essere programmata con 9 cifre significative prima o
dopo la virgola o punto decimale.
La determinazione della velocità effettiva del mandrino è fatta dalla logica
programmabile.
Consultare anche le informazioni fornite dal costruttore della macchina
utensile.
QUOTE ASSI
Se l'indirizzo è una lettera identificativa di un asse,
allora il controllo interpreta il valore successivo come quota dell'asse
specificato.
I nomi assi sono definiti nelle tarature di macchina: essi sono sempre costituiti da una lettera singola scelta fra:
A B C D H P Q U V W X Y Z
Le quote assi sono programmate col nome asse (una lettera assegnata a un asse continuo nelle tarature di macchina) seguito da un valore numerico.
Come parametro, le quote possono essere programmate con 9 cifre significative prima o dopo la virgola o punto decimale : se durante gli spostamenti comandati uno o più assi escono dal campo ammissibile di lavoro della macchina il CN segnala errore fine corsa.
Le quote assi sono programmate con le stesse unità di misura degli interi visualizzati.
Per esempio, se si tratta di assi lineari in cui sono visualizzati
millimetri (e micron come terzo decimale) programmare: X100,25 significa
programmare
Se si tratta di assi rotativi in cui sono visualizzati gradi (e millesimi di grado), programmare: A10,47 significa programmare 10,47 gradi.
Sulla stessa macchina gli assi, anche contemporanei, possono essere definiti con unità di misura diverse da asse a asse (per esempio millimetri per asse lineare e gradi per asse circolare).
I tre assi della terna di lavoro possono essere programmati col loro nome (per esempio X, Y, Z ecc.) oppure rispettivamente come
AA... primo asse della terna di lavoro
AB... secondo asse della terna di lavoro
AC... terzo asse della terna di lavoro
Per esempio se in un certo punto della esecuzione di un
programma è attiva la terna di lavoro
X Y Z (ossia G25XYZ), programmare: AA100 AC125 è in tutto equivalente a
programmare: X100 Z125.
Se fosse stata invece attiva
Consultare anche il capitolo “Funzioni preparatorie ‘G’” ; paragrafo G25 - terna di assi di lavoro ; per la trattazione degli orientamenti degli assi.
ORIGINI E LUNGHEZZE
Le quote misurate dai rilevatori della macchina utensile sono riferite allo zero fisico del rilevatore, che è normalmente un punto legato al rilevatore stesso e non è significativo per la geometria della macchina.
Il punto di riferimento della macchina utensile è fissato dal costruttore come "ORIGINE BASE" e non deve essere modificato dall'utente finale.
L'origine base può essere utilizzata per operazioni speciali che richiedono movimenti riferiti alla struttura fisica della macchina (per esempio cambio utensile).
L'utente finale ha invece a disposizione una "ORIGINE SUPPLEMENTARE" (che è riferita alla origine base) a cui sono riferite le quote del pezzo.
Le quote programmate (e visualizzate) sono perciò la differenza tra le quote misurate e la quota della origine supplementare attiva.
Una ulteriore modifica alle quote è la lunghezza utensile (parametro L), che agisce solo su un asse (al reset è il terzo asse della terna di lavoro, e può essere modificato con G43/G44) ; per l’asse su cui è attiva la quota visualizzata è riferita alla estremità dell’utensile.
La situazione generale di una quota asse è rappresentata in figura.
Origini
L'indirizzo O indica allo Z32 che è programmata una origine
supplementare.
Dopo O non si deve programmare un valore numerico, ma, come si vedrà più avanti, una combinazione di lettere che identificano l'origine da attivare.
L'origine che interessa al programmatore può essere, per esempio, il punto a cui sono riferite le quote del disegno. Questa origine può essere variabile anche all'interno di uno stesso programma, per esempio perché si lavorano due pezzi diversi montati sulla stessa tavola, perché si devono lavorare facce diverse del pezzo ecc.
Le quote programmate dovranno essere sempre riferite a questa origine. Le origini di lavoro a disposizione del programmatore (ORIGINI SUPPLEMENTARI) sono contenute nella tabella origini, che può essere nel file 'globale' numero 126, oppure come sezione 'locale' in coda al programma-pezzo.
Origini in La sezione 'globale' è attiva al reset e può essere ripristinata con G37OG. Le varie sezioni tabella
'locali' sono attivate programmando G37OL nel programma o sottoprogramma contenente la Origini sezione che si vuole attivare.
locali
Si faccia attenzione che, se si programma G37.. e la origine nella stessa
riga, la G37 deve
precedere la origine:
N1 G37OL OX1
Una sezione origini, locale o globale, inizia con la riga: :OS .
Nelle righe successive sono definite le singole origini, che sono contraddistinte dal nome asse a cui si riferiscono, seguito da un qualsiasi carattere stampabile, escluso lo spazio ed escluso lo zero, che è riservato alla sola origine base. Per esempio, si può definire:
:OS
X1=20,47
Y4=+17,381
Y?=-11
XA=-318,963
Viene riconosciuta l’origine solo se la stringa caratteristica dell’origine (per es. Y1=32,5) è a inizio riga o è preceduta solo da blank.
La definizione dell’origine termina con il primo carattere blank o parentesi tonda aperta o fine riga (0dh), qualsiasi altro carattere dopo questi viene ignorato.
Per ogni asse, e per ogni programma, si possono perciò definire circa 50
origini (i caratteri stampabili possono essere:
a) 9 numeri
b) 26 lettere alfabetiche
c) circa altri 25 segni, tipo + -' ; # (. ecc..
Il carattere * è sconsigliato in quanto, per le operazioni di lettura e scrittura (:R e :W, vedere righe evolute) assume il particolare significato di origine attiva in quel momento.
La tabella origini occupa posto in memoria secondo quanto contiene: le origini non definite non occupano memoria.
La tabella origini può essere preceduta, per comodità dell'operatore, da una descrizione o commento.
Esempio di tabella origini:
TABELLA ORIGINI SUPPLEMENTARI-PEZZO 4782-
:OS
X1=381
X2=390,86
Y1=-27,38
.....
Program-Per richiamare le varie origini all'interno di un programma si deve programmare di seguito:
- il nome dell'asse interessato
- il carattere distintivo dell'origine.
Per esempio, se è presente ed attiva la tabella origini sopra indicata,
programmare: OX1 OY1 significa riferire le quote dell'asse X al punto X=381 e
le quote dell'asse Y al punto -27,38.
La programmazione delle origini richiede l'arresto (vedere capitolo
“Funzioni preparatorie G” paragrafo funzioni G).
Al reset possono essere attive a seconda delle tarature macchina:
- le origini zero (base)
- le ultime origini attive in precedenza
- le origini 1 (OX1 ecc.) su tutti gli assi.
Per annullare la correzione origine supplementare si può programmare la origine
zero. Per esempio, programmare: OX0 OY0 significa annullare
le origini supplementari relative agli assi X e Y: dopo questa istruzione il CN
riferisce le quote degli assi X e Y alla origine base.
Anche se è definita nella tabella origini, per esempio una X0=100 il CN, quando
incontra la istruzione: OX0 annulla le origini
supplementari, ignorando
Lunghezza utensile
La lunghezza utensile è il valore del parametro L.
La programmazione di L in riga ISO viene
immediatamente acquisita come nuova lunghezzadell'utensile:
N10 L10.23 lunghezza utensile 10.23
La programmazione di L in riga evoluta
N10 !L=10.23!
non è immediatamente acquisita come nuova lunghezza, ma modifica solo il parametro L: può essere automaticamente acquisita in seguito come lunghezza se sono programmate funzioni che richiedono il ricalcolo delle correzioni (vedere paragrafo “Gestione origini e lunghezza”).
L'asse su cui agisce la lunghezza utensile è definito da G43 (correzione positiva) o G44 (correzione negativa).
La lunghezza utensile L può avere segno positivo o negativo.
La correzione lunghezza può essere:
- annullata programmando L0 in riga ISO
- sospesa con G45 (riattivata con G43/G44)
- sospesa insieme alle origini con G53 (riattivata con G54)
Gestione origini e lunghezza
Per i programmatori più esperti, si danno qui di seguito alcune informazioni
sul modo con cui le origini e le correzioni lunghezza sono gestite all'interno
dello Z32.
Lo Z32 tiene in memoria la mappa delle origini attive, consistente per ogni
asse in:
- carattere distintivo dell'origine
- programma o sottoprogramma di provenienza
Il ricalcolo delle correzioni è fatto dallo Z32 in particolari occasioni,
che sono:
- al reset (tutte le origini sono zero)
- dopo una variazione dello stato di G43, G44, G45, G53, G54 (anche se questa
variazione avviene per effetto di una G103 che ripristina lo stato
precedente)
- dopo una programmazione in riga ISO di L
- dopo la programmazione di una o più origini
Quando è fatto il ricalcolo delle correzioni, sono sempre interessate:
- la lunghezza dell'utensile
- l'origine supplementare per ogni asse
La programmazione di L in riga evoluta: !L=...! NON provoca il ricalcolo delle correzioni: il parametro L è modificato ma non viene acquisito come correttore. Se successivamente viene programmata una origine, anche il parametro L modificato in riga evoluta è acquisito come nuovo correttore.
Se la sezione attiva delle origini viene cambiata e poi viene programmata l'origine di un solo asse, tutte le origini sono ricalcolate, ma solo l'origine programmata cambia in quanto le altre origini sono ricercate nelle sezioni attive precedenti (vedere anche G102 e G103 e G37). È quindi possibile ( ma per chiarezza è una situazione da evitare) ad un dato momento del programma che siano attive origini provenienti da sezioni diverse per i vari assi.
PARAMETRI
Abbiamo già visto come molte funzioni di macchina sono programmate con una o
due lettere dell'alfabeto seguite da un valore numerico, per esempio: X100 .
Oltre agli indirizzi sopra elencati e che corrispondono a particolari funzioni, sono possibili molte altre combinazioni di due lettere: questi indirizzi identificano una entità, che chiameremo 'parametro’, di cui lo Z32 mette in memoria il valore, per poterlo poi utilizzare per scopi diversi.
Anche agli indirizzi di funzioni specifiche di macchina (esclusi N, G, O) corrispondono in memoria dello Z32 dei valori numerici, che sono via via aggiornati durante lo svolgimento del programma: anche queste entità possono essere considerate 'parametri'.
Nell'esempio fatto, dopo l'analisi della istruzione X100 (vedere anche capitolo “Esecuzione riga ISO”) lo Z32 contiene, nella locazione assegnata ad X il valore 100. Il fatto di aver programmato X implica anche che si dovrà muovere l'asse X, ma intanto nella locazione corrispondente a X è scritto il valore programmato.
Il valore 100 assegnato al parametro X viene conservato in memoria dallo Z32 fino a che un diverso valore non venga assegnato ad X, e può quindi essere utilizzato in seguito anche per scopi diversi da quelli di far muovere l'asse fino a quota 100.
I parametri sono identificati da un 'indirizzo' (X nell'esempio precedente) che può essere a 1 o 2 caratteri oppure dai parametri con indice PAR[ ]e PAL[ ] . Nella memoria dello Z32 sono predisposte le locazioni per i seguenti gruppi di parametri:
1) NOMI ASSI
2) PARAMETRI DI SISTEMA
3) PARAMETRI UTENTE
4) PARAMETRI CON INDICE
Tutti i parametri sono di processo cioè si possono usare tutti su ogni processo.
Nomi assi
Sono sempre con indirizzo a una sola lettera, scelta tra:
A B C D H P Q U V W X Y Z .
Devono essere definiti nelle tarature di macchina.
Parametri di sistema
Hanno un significato ben preciso nella programmazione Z32, essi sono:
AE comunicazione da logica
AM misura primo asse
AN correzione tastatore primo asse negativo
AP correzione tastatore primo asse positivo
AU comunicazione a logica
BM misura secondo asse
BN correzione tastatore secondo asse negativo
BP correzione tastatore secondo asse positivo
CM misura terzo asse
DA traslazione primo asse
DB traslazione secondo asse
DC traslazione terzo asse
DM distanza di misura
F feed
HR appoggio coordinata polare raggio e G110
HT appoggio coordinata polare angolo e G110
HX appoggio coordinata cartesiana X e G speciali
HY appoggio coordinata cartesiana Y e G110
I coordinata centro primo asse
IR coordinata centro rotazione primo asse
IS coordinata centro specularità primo asse
J coordinata centro secondo asse
JR coordinata centro rotazione secondo asse
JS coordinata centro specularità secondo asse
K passo di filettatura e G110
KA parametro di selezione
KD fattore additivo singolo asse
KG codice GEPI-2 e sottoprogrammi permanenti
KM fattore moltiplicativo singolo asse
KP fattore di scala nel piano
KT fattore di scala terzo asse
L lunghezza utensile (fresa)
LX lunghezza utensile (tornio)
LZ lunghezza utensile (tornio)
M funzione ausiliaria
MA funzione ausiliaria
MB funzione ausiliaria
MC funzione ausiliaria
MS massima Speed in G96
P ordine della nurbs
QA pendenza ausiliaria
QF pendenza finale
QR angolo di rotazione
QS pendenza asse di specularità
R raggio utensile
RA raggio cerchio
RB smusso
RR raggio di raccordo
S speed
T utensile programmato
TA posto dell'utensile sul mandrino
TB posto dell'utensile programmato
TT tempo della sosta
# sincronizzatore part-program e logica ML
#A sincronizzatore part-program e logica ML
La D.ELECTRON potrà definire in seguito altri parametri per ampliare le prestazioni di software dello Z32.
Parametri utente
Max
Parametri letterali I nomi dei parametri letterali possono essere una
combinazione di uno o due caratteri stampabili qualsiasi, con queste
limitazioni:
- lo SPAZIO (BLANK) non può essere usato
- i NUMERI non possono essere usati
- i caratteri ! $ % ( ) * + , - . /
; < = > non possono essere usati
- il primo carattere non deve essere nessuno dei seguenti: G N O :
- sono vietate, perché hanno altri significati, come si vedrà anche in seguito,
le seguenti
combinazioni di caratteri:
AA AB AC primo asse, secondo asse, terzo asse
RQ SN CS AT radice quadrata, seno, coseno, arcotangente
PI costante pi greco
PC CP conversione polari/cartesiane e inversa
IF condizionamento
EB interruzione riga evoluta
- I caratteri minuscoli sono ammessi (anche se sconsigliati per ragioni di chiarezza).
Ad evitare possibili confusioni in presenza di simboli non alfabetici si consiglia di usare, per la definizione dei parametri solo caratteri alfabetici.
Sono possibili numerose altre combinazioni: alcune di queste sono usate dai costruttori di macchine utensili per cicli fissi, sottoprogrammi standard, macroistruzioni ecc. Perché sia possibile all'utente finale di usare senza problemi, così come sono, questi sottoprogrammi, è bene che i simboli usati in questi sottoprogrammi non siano usati nei programmi principali che ne fanno uso.
In particolare, per i cicli fissi, sono stati normalizzati i seguenti
significati:
HA inizio foro
HB fine foro
HC uscita lunga foro
HD diametro lavoro
HE uso interno cicli fissi
HF uso interno cicli fissi
HG uso interno cicli fissi
HH uso interno cicli fissi
HJ uso interno cicli fissi
La D.ELECTRON farà inoltre uso, anche nel seguito e per quanto possibile, sempre di simboli che iniziano per H nei sottoprogrammi standard.
L'utente finale può anche usare i simboli usati nei sottoprogrammi, ma dovrà tenere conto che, dopo una esecuzione del sottoprogramma, i valori di questi parametri VENGONO MODIFICATI (se ne sconsiglia quindi l'uso) .
Parametri con indice
Array di parametri PAR[...]
Parametri Per aumentare il numero dei parametri e rendere più flessibile l'indirizzamento dei parametri con indice stessi lo Z32 mette a disposizione un array di parametri indicizzato PAR[...].
A tutti gli effetti, PAR[0], PAR[1], PAR[2], fino a PAR[512] sono parametri di part-program e possono essere usati come i parametri a indirizzo alfabetico. Il formato numerico dei parametri dell'array PAR[ ] è lo stesso floating-point dei parametri a indirizzo alfabetico.
I parametri a indirizzo alfabetico e i parametri PAR[ ] possono essere usati insieme nel partprogram. L'array PAR[ ] è completamente azzerato al reset.
L'indice che individua il parametro può essere una espressione aritmetica (stessa sintassi e stesse funzioni delle espressioni aritmetiche delle righe evolute e tra parentesi acute, vedere paragrafo seguente).
Per esempio è sintatticamente valido (ma è bene non esagerare nella complessità!):
!HX=12*HA/PAR[HA+PAR[HB+1]]!
Se l'indice programmato risulta non intero viene indirizzato l'elemento dell'array più vicino (ossia l'indice calcolato viene arrotondato all'intero più vicino).
Se l'indice programmato risulta maggiore di 512 o minore di 0 viene allarme di programmazione "INDICE NON VALIDO"
Array di parametri di logica PAL[...]
È disponibile anche un altro array di parametri, PAL[...], dedicato alla comunicazione con la logica programmabile.
Le modalità di indirizzamento e di uso in espressioni di part-program sono identiche a quelle dell'array PAR[ ]. Le differenze sono:
Il formato numerico è intero e non floating point.
Serve a rendere più veloce la lettura e scrittura da parte della logica programmabile (che può avere problemi di velocità).
Il parametro può essere usato in modo normale nel part-program: la conversione a intero è fatta automaticamente senza necessità di speciali funzioni.
Gli elementi di indice maggiore di 255 sono protetti
Gli elementi dell'array da
- da part-program utente sono solo leggibili (il tentativo di scrivere da
part-program utente genera un allarme di programmazione "SCRITTURA
VIETATA")
- sono scrivibili e leggibili da sottoprogramma speciale (M speciale o ciclo
fisso di sistema).
Parametri accessibili solo da
sottoprogrammi di sistema
In varie occasioni l’installatore, per i suoi sottoprogrammi di sistema,
deve utilizzare parametri di part-program.
I parametri accessibili da sottoprogramma di sistema non sono distinti in nessun modo dai parametri accessibili da sottoprogrammi utente, con possibili interferenze.
Quindi sono stati resi disponibili 156 parametri riservati ai sottoprogrammi di sistema.
Sono parametri con indirizzo triletterale (non consentito dalle vecchie release di software, quindi tale da non generare equivoci) con queste specifiche:
- il primo carattere è la barra rovescia “\”
- il secondo carattere è maiuscolo alfabetico da “A” a
“F” (sei possibilità)
- il terzo carattere è maiuscolo alfabetico da “A” a Z”
(ventisei possibilità)
Quindi in tutto sono 26x6 = 156 combinazioni
Questi parametri sono usabili nello stesso modo di tutti gli altri, sia in righe ISO che in righe evolute.
L’uso di questi parametri non fa aumentare il numero complessivo di parametri usato dal partprogram (se viene superato il numero massimo di 60 viene l’allarme CN 4B14 “TROPPI PARAMETRI”).
Uso dei parametri
Al reset le quote assi (intese come parametri), i parametri di sistema e i
parametri utente sono tutti inizializzati con valore zero, tranne i parametri
KP e KT che sono forzati ad '1'.
Al reset inoltre viene preso atto dell'utensile sul mandrino, la sua descrizione nella tabella utensili è analizzata e i parametri relativi sono inizializzati secondo la descrizione utensile.
Al reset i parametri sono perciò tutti zero esclusi:
KP e KT inizializzati col valore 1
T inizializzato con l'utensile sul mandrino
TA e TB inizializzati col posto utensile sul mandrino i parametri definiti
nella descrizione dell'utensile che è sul mandrino, inizializzati con i valori
contenuti nella descrizione stessa (vedere anche gestione utensili)
Il valore dei parametri contenuto nella memoria dello Z32 è sempre l'ultimo programmato (in riga ISO o in riga evoluta).
In particolare, le quote assi restano quelle programmate anche se per varie ragioni (correzione lunghezza e raggio, origini, rototraslazioni ecc.) le quote effettivamente raggiunte sono diverse da quelle programmate.
Fanno eccezione TA e TB (posto utensile attuale e futuro) che sono aggiornati direttamente dallo Z32 in conseguenza di un cambio utensile o di una programmazione di T.
All'interno di una riga ISO possono essere assegnati valori a parametri qualsiasi, per utilizzarli in successive elaborazioni. Per esempio, se si programma:
X10 XA12 XB14 XC-20
ai parametri X, XA, XB, XC sono assegnati i valori 10, 12, 14, -20.
Il fatto di avere programmato l'asse X comporta anche un moto dell'asse per portarsi alla quota programmata, mentre il fatto di avere programmato XA XB XC non comporta movimenti assi, ma solo un aggiornamento dei valori dei parametri, e un'aggiunta di XA, XB, XC alla lista dei parametri noti se sono incontrati per la prima volta. Se un parametro mai definito viene incontrato in una espressione il CN non dà allarme, ma considera che il valore del parametro sconosciuto sia zero.
Durante l'esecuzione di un programma possono essere definiti al massimo 60 parametri diversi, ma se un parametro ha valore zero non entra nel conto dei 60.
In altre parole, se a un parametro è assegnato il valore zero, esso viene tolto dalla lista dei parametri noti e considerato come mai definito: ciò non genera errori perché al parametro mai definito viene assegnato proprio il valore zero.
In caso di necessità quindi, il programmatore può 'cancellare’ i parametri dalla lista dei parametri noti assegnando loro il valore zero. Ciò è consigliato soprattutto all'interno dei sottoprogrammi standard (del costruttore o dell'utente finale) per i parametri usati come appoggio di risultati intermedi per diminuire il numero dei parametri usati.
Programmazione di parametri con
espressioni
Abbiamo finora visto che ai parametri può essere assegnato un valore numerico
programmandolo normalmente dietro all'indirizzo del parametro. Per esempio:
X100
Lo Z32 permette di programmare il valore di un parametro anche come risultato di una espressione algebrica. Ciò si ottiene programmando l'indirizzo seguito dall'espressione racchiusa tra due parentesi acute:
X<X>
L'espressione può essere una formula matematica anche complessa, contenente:
- costanti: valori numerici con segno, 9 cifre significative prima o dopo la
virgola o punto decimale
PI (PI greco con precisione 9 cifre)
- altri parametri
- operatori matematici:
+ addizione
-sottrazione
* moltiplicazione
/ divisione
RQ radice quadrata
SN seno
CS coseno
AT arcotangente
- apertura e chiusura di parentesi tonde
Per esempio: X<100-R> significa che il parametro X assume il valore di 100
meno il valore del raggio utensile (non noto al momento della programmazione),
e che l'asse X dovrà spostarsi di conseguenza.
È lecito richiamare nella espressione lo stesso parametro a
cui sarà assegnato il valore risultante: per tutta l'espressione il
valore del parametro è quello precedente al calcolo della
espressione.
Per esempio:
X<X*X> elevare X al quadrato
X<X-10> diminuire X di 10
X<PAR[1]+PAR[0]> sommare i due parametri PAR
X<X+PAR[[PAR[0]]> sommare ad X il PAR con indice PAR[0].
Per esempio è sintatticamente valido (ma si consiglia di non esagerare nella
complicazione!):
HX<12*HA/PAR[HA+PAR[HB+1]]>
Le operazioni di moltiplicazione e divisione sono prioritarie rispetto alle operazioni di somma e sottrazione.
Per esempio:
3+4*2 = 3+8 = 11
4*2+3 = 8+3 = 11
4*2+2*7*3 = 8+42 = 50
Le parentesi possono essere usate per forzare una diversa priorità nella esecuzione delle operazione. Per esempio:
(3+4)*2 = 7*2 = 14
4*(2+3) = 4*5 = 20
4*(2+2*7)*3 = 4*(2+14)*3 = 4*16*3 = 192
Possono essere usati fino a 10 livelli di parentesi.
Per esempio ha due livelli di parentesi l'espressione:
3+((2+3)*5-4/(5-3))*2 = 3+(5*5-4/2)*2 = 3+(25-2)*2 =
=3+23*2 = 3+46 = 49
Le parentesi devono essere prima aperte e poi chiuse, e devono essere tutte
chiuse entro l'espressione. Per esempio sono errate:
3+(2*3 manca una parentesi chiusa
(3+2)*3) troppe parentesi chiuse
3)+(2 prima chiusa e poi aperta
È lecito iniziare una espressione o un livello di parentesi con '+' o '-'. Per esempio:
-3*(-2*4+3) = -3*(-8+3) = -3*(-5) = +15
Gli operatori RQ (radice quadrata), SN (seno), CS (coseno), AT (arcotangente) si applicano al valore, o al parametro, o al risultato della parentesi che li segue immediatamente.
Esempio:
RQ16*2=4*2=8
RQ(X*X+Y*Y)=RQ(16+9)=RQ25=5 (ammesso che X=4, Y=3)
I valori su cui operano SN, CS, AT sono espressi in gradi e frazioni decimali
di grado.
Esempio:
SN30 = 0,5
AT1 = 45
I calcoli numerici sono fatti in virgola mobile (FLOATING POINT) con circa 9
cifre significative e esponente di 10 da -16000 (numero con 16.000 zeri dopo la
virgola) a +16.000 (numero con 16.000 cifre prima della virgola).
Le eccezioni sono ricondotte ad operazioni lecite, per semplificare i calcoli e
impedire arresti di macchina in condizioni recuperabili. In particolare:
1. La divisione di un numero per zero porta come risultato il massimo
(numero con 16.000 cifre), che rappresenta praticamente l'infinito. Il segno è
quello esatto.
2. Zero diviso zero porta come risultato zero
3. Se il risultato di una operazione supera il massimo
gestibile (overflow) il risultato è riportato al massimo gestibile (16.000
cifre)
4. Se il risultato di una operazione è inferiore al
minimo gestibile (underflow, 16.000 zeri dopo la virgola) il risultato è
forzato a zero
5. La radice quadrata di un numero negativo è la radice
quadrata del suo valore assoluto
6. Il seno e il coseno di un numero grande (più di circa 6 cifre) sono
forzati rispettivamente a zero e ad uno.
Parametri in memoria permanente
Può essere utile al programmatore salvare in memoria permanente uno o più
parametri per rileggerli poi in punti successivi o addirittura in esecuzioni
successive del programma.
Ciò si può fare, come si vedrà anche più avanti al capitolo dedicato alle righe
evolute, con le istruzioni ':R' e ':W'.
Le tabelle globali dei parametri di processo sono riservate alla memorizzazione
dei parametri.
La tabelle inizia con una descrizione qualsiasi di una o più righe all'inizio.
La riga:
: PA
segnala l'inizio della sezione attiva dei parametri.
Le righe successive, con sintassi identica a quella delle origini (file 126,
vedere capitolo “Origini e lunghezze”), contengono i valori dei
vari parametri definiti.
Per esempio:
DESCRIZIONE QUALSIASI
:PA
X1=10
HB=37,45
CK=12345.678
Si noti che i parametri memorizzati in CMOS sono sempre a due caratteri e che il secondo carattere può essere un numero: i parametri usati nella programmazione invece possono avere uno o due caratteri di cui il secondo non può essere un numero.
Oltre alla sezione 'globale' (file 125) dei parametri ci possono essere una o più sezioni 'locali' in coda ad ogni programma o sottoprogramma. Con l'istruzione G37PL si attiva la sezione locale in coda al programma, mentre l'istruzione G37PG attiva la sezione globale. Al reset è sempre attiva la sezione globale.
Parametri # e #A in tempo reale
Per sincronizzare il part-program con alcuni particolari eventi di macchina
definiti nella logica programmabile, è possibile utilizzare i due parametri # e
#A.
La programmazione di funzioni ausiliarie (per esempio M o la G112) dà questa sincronizzazione, ma queste funzioni richiedono l'arresto e
sono vietate durante alcune operazioni.
I due parametri # e #A sono leggibili da logica ML in
tempo sincronizzato e sono programmabili anche in correzione raggio, solo se
sono programmati in riga ISO.
Se usati in riga evoluta si comportano come qualsiasi altro parametro.
Si rimanda al manuale M99 - Logica Programmabile per esempi e chiarimenti
(ZZVALCANC[1]).
4.1 GESTIONE DEGLI UTENSILI ('T', 'TA', 'TB')
Per ogni processo gli utensili presenti nel magazzino sono descritti in una
'TABELLA UTENSILI' che può essere 'globale' oppure 'locale' (in coda al
part-program).
Si ripropone lo schema d'assegnazione tabelle globali/processi:
PROCESSO 0 1 23 4 5
TABELLA PARAMETRI 125 122 119 116 113 110
TABELLA ORIGINI 126 123 120 117 114 111
TABELLA UTENSILI 127 124 121 118 115 112
Si consiglia prudenza nell'uso delle sezioni locali, che devono essere usate solo se necessario e in accordo col costruttore.
Al reset è attiva la sezione 'globale'. Le sezioni 'locali' sono attivate da G37TL, mentre la sezione 'globale' è ripristinata da G37TG.
Le sezioni attive delle tabelle utensili iniziano con la riga: :TL
:TL A partire dalla riga successiva al ':TL' si possono inserire le righe degli utensili, contenenti 'T', numero dell'utensile e relativa descrizione con un numero totale di 247 caratteri; righe con maggiore numero di caratteri provocano allarme CN1D14 quando l’utensile è montato sul mandrino.
Lo spazio di memoria usato dalla tabella utensili è quello necessario agli utensili effettivamente descritti: gli utensili non inseriti non occupano spazio di memoria.
Esempio di riga di descrizione utensile:
T231#34L100R20
Utensile 231, posto 34, lunghezza 100, raggio 20
Ogni riga di descrizione deve iniziare con
È IMPORTANTE che non ci siano spazi tra 'T' e '#' e che gli zeri iniziali siano omessi, altrimenti il CN non riconosce l'utensile programmato.
L'utensile zero si descrive con 'T0#...' (un solo zero).
# Il numero che segue '#' indica il posto assegnato all'utensile nel magazzino, posto che verrà
Posto fornito alla logica per
Dopo il posto utensile possono essere inserite una serie di istruzioni con le stesse modalità con cui si programma una riga ISO (descrizione utensile). Nel nostro caso 'L100R20'.
Al momento del cambio utensile queste istruzioni ISO vengono normalmente eseguite dal CN, così come se costituissero una riga successiva a quella del cambio utensili.
Nel nostro caso l'esecuzione della descrizione utensile porterebbe ad assegnare al parametro L il valore 100, e al parametro R il valore 20.
La descrizione utensile ha la stessa efficacia di una riga ISO contenente le stesse istruzioni: la programmazione di L nella descrizione utensile provoca perciò il ricalcolo delle correzioni
Lunghezza lunghezza utensile e origini. La reale esecuzione della riga descrizione utensile avviene all’uscita (G26) del sottoprogramma di cambio utensile. Sul G26 finale del sottoprogramma si ha l’esecuzione della descrizione dell’utensile montato sul mandrino, con inizializzazione dei parametri in essa contenuti (vedere anche il capitolo delle origini).
Nella descrizione utensile possono essere inserite altre funzioni (F, S, M, ...) per abbreviare la programmazione.
Possono essere descritti nella tabella utensili due o più utensili con identico 'posto': ciò permette di gestire facilmente utensili multiuso, in quanto i diversi usi dello stesso utensile saranno contrassegnati da un 'T' diverso ma con un posto '#' identico. La descrizione dell'utensile potrà essere diversa in uno o più parametri, così da descrivere esattamente le caratteristiche dell'utensile da usare.
Una limitazione alla definizione multipla dello stesso utensile c'è in caso di cambio utensile 'random'. Vedere paragrafo “Utensili multiuso e gestione random” più avanti.
L'utensile è programmato nel programma-pezzo col parametro T seguito da un numero fino a 8 cifre intere decimali. Gli zeri iniziali possono essere omessi (ma non è necessario ometterli). Ricordare che gli zeri iniziali del numero dopo T devono essere omessi nella tabella utensili.
Per esempio:
T1234 indica che è programmato l'utensile 1234.
La programmazione delle T richiede l'arresto (vedere anche capitolo “Funzioni preparatorie G” paragrafo “Funzioni G”.
La programmazione della T chiede al CN di comunicare alla logica di macchina
quale è l'utensile futuro, ma non provoca immediatamente il cambio utensile: il
cambio utensile viene fatto con
All'accensione e a ogni inizio programma la descrizione dell'utensile montato sul mandrino viene analizzata e i parametri programmati nella descrizione sono inizializzati di conseguenza.
Non è necessario che gli utensili siano inseriti in ordine crescente di T, anche se ciò è utile per facilità di consultazione.
Esempio di sezione utensili:
:TL
T471#32 L100 R20(FRESA D40 HSS)
T472#32 L50 R30 (fisicamente è il 471, con correttori diversi)
T371#16
T12#27(PUNTA D10 HSS) L80 R5 S1000 F200
...
Per il corretto funzionamento del sistema, lo Z32 deve sempre conoscere
quale utensile è montato sul mandrino, anche passando da un programma all'altro
e dopo uno spegnimento.
Poiché l'utensile che è montato sul mandrino può provenire dalla sezione
globale o da una qualsiasi delle sezioni locali, lo Z32 deve conoscere:
- il numero dell'utensile T
- il numero del file contenente la sezione da cui proviene l'utensile.
Queste informazioni sono memorizzate dallo Z32 nella prima riga del file
globale 127. per esempio, se la prima riga della
tabella contiene:
T12P3 significa che sul mandrino è montato l'utensile T12 proveniente dal
programma 3.
Se non è contenuta l'informazione P... l'utensile è considerato proveniente
dalla tabella globale.
- Utensili, Esecuzione riga ISO CNC
Z32 Programmazione
La prima riga della tabella è aggiornata automaticamente dal CN ad ogni cambio utensile effettuato: può essere modificata dall'operatore in caso di operazioni manuali sugli utensili.
Nel caso di scrittura ex novo della tabella utensili, occorre sempre inserire questa prima riga, anche nel caso che il mandrino sia vuoto (consultare il costruttore della macchina utensile per il
numero utensile convenzionalmente assegnato all'utensile nullo: di solito T0 o T1).
Se manca la tabella utensili il CN dà allarme:
CN 1D14 ERRORE PROGRAMMA
Se manca o è errata l'indicazione dell'utensile sul mandrino (1a riga tabella) oppure manca la sezione utensili dalla quale proviene l'utensile sul mandrino il CN dà allarme:
CN 2F14 UTENSILE
Se invece non esiste il file dal quale deve provenire l'utensile montato sul mandrino (per esempio, la prima riga del file 127 è T10P40 e il file 40 non esiste) viene l'allarme:
CN 0914 ERRORE FILE (file non esistente).
La sintassi della riga iniziale del file 127 che definisce l’utensile attivo, ammette solo le seguenti strutture:
Tnn blanks 0DH
TnnPnn blanks 0DH
TnnPnnJnn blanks 0DH
Ogni altra struttura provoca errore utensile.
Per la descrizione del significato del parametro J vedere più avanti il paragrafo “Gestione delle famiglie utensili”.
Dopo la prima riga e prima del ':TL' può essere inserita una descrizione qualsiasi, che viene ignorata dallo Z32.
Gestione random
Lo Z32 permette di realizzare una semplice ed efficiente gestione 'random'
dell'utensile. Per questa prestazione sono usate le istruzioni di lettura e
scrittura in memoria permanente (descritte nel capitolo “Righe
evolute”) nel sottoprogramma speciale associato alla M6.
Questo sottoprogramma è scritto dal costruttore della macchina utensile per il migliore adattamento alle caratteristiche della macchina stessa.
Qui di seguito si dà un esempio di sottoprogramma in cui sono dettagliate solo le operazioni rilevanti ai fini della gestione random.
Si è fatta l'ipotesi che l'utensile sul mandrino e quello nel magazzino siano scambiati tra loro durante l'M6.
Per convenzione, l'utensile T0 è l'utensile nullo, ossia T0 rappresenta un posto vuoto, mentre il posto 0 rappresenta il mandrino. Per esempio, T0#0 rappresenta il mandrino vuoto.
Nell'esempio che segue sono state omesse le istruzioni specifiche che dipendono dalla struttura elettromeccanica del cambio.
ATTENZIONE
Questo esempio è da considerarsi solo un esempio didattico destinato al costruttore della macchina utensile. L'utente finale dovrà seguire le istruzioni date dal costruttore.
SOTTOPROGRAMMA M6 A GESTIONE RANDOM%
... istruzioni iniziali di predisposizione
N10 !IF TA<>0;ERRORE! test di TA
//N11 !GON1000! in ricerca blocco salta a fine
...
N100 MC9999 segnala a logica cambio iniziato
.... scambia fisicamente gli utensili
N200 !:WS#=TB!:WT#=TA! aggiorna la tabella utensili
N201 T<T> conferma T per visualizzare
N202 M6 conferma M6
N203 MC9998 segnala a logica cambio completato
N1000 G26 fine sottoprogramma
NOTE:
N10 Qui TA deve essere sempre zero perché è il posto dell'utensile che è sul
mandrino
N11 In ric. blocco il cambio non deve essere eseguito per evitare false segnalazioni
di cambio terminato (N203) e false scritture nel posto utensile (N200). Ciò non
provoca errori nel numero progressivo perché tutto il sottoprogramma speciale
conta 1 sia in esecuzione che in ricerca blocco.
N100 La logica deve memorizzare MC9999 in un bit dell'area ritentiva per segnalare cambio in corso e non completato. Il bit è resettato a N203. In caso di interruzione di cambio, dovrà essere richiesto l'intervento attento dell'operatore, per ripristinare la corrispondenza tra quanto scritto nella tabella utensili e la situazione fisica della macchina. MC9999 è solo un esempio: possono essere usate altre M, G100, PAL[ ] (indice>255), ecc.
N200 Scrive i nuovi posti utensili. Per il CN (che non ha occhi!) poiché non è ancora stato confermato M6 (N202) l'utensile sul mandrino è ancora il vecchio utensile, e l'utensile programmato è il nuovo utensile. Questa istruzione perciò:
- mette il posto del nuovo utensile (salito sul mandrino) nel posto del vecchio utensile (tornato nel magazzino) - mette zero (N10 TA=0) nel posto del nuovo utensile (salito sul mandrino)
N201 La descrizione di T presentata sul video (è stata presa al momento della programmazione di T... nel programma principale) ha ancora il posto del vecchio utensile, cioè non contiene posto zero (che c'è da N200). Con questa istruzione sul video viene la rappresentazione corretta (posto zero)
N202 Conferma M6 per far acquisire al CN la nuova situazione. Con questa istruzione è anche aggiornata la prima riga della tabella utensili (T...P...).
N203 Segnala il completamento cambio. Questa istruzione non deve essere eseguita in ricerca blocco (altrimenti una eventuale segnalazione di cambio interrotto viene perduta) e deve seguire M6 (altrimenti una eventuale interruzione proprio in mezzo lascia la macchina con gli utensili scambiati ma la tabella utensili non aggiornata.
Utensili multiuso e gestione random
Col cambio random descritto al paragrafo precedente non è possibile definire
con due 'T' diverse lo stesso utensile fisico per cambiarne i correttori: in
questo caso infatti sarebbe aggiornato il solo posto
dell'utensile programmato e non degli altri fisicamente uguali.
La soluzione più semplice a questo problema è che sia l'utente finale a organizzare la descrizione utensile e il programma in modo da gestirsi l'uso multiplo.
Per esempio, sia l'utensile multiplo T100 definibile con due correttori:
1) L100 R30
2) L150 R20
L'utensile viene così descritto:
T100#... L100 R30 LX150 RX20
Quando viene richiamato l'utensile con correttori 100/30 non dovrà essere fatta altra operazione, in quanto L100 R30 sono già stati letti nella descrizione utensili.
Se si vuole invece richiamare la coppia 150/20 si deve programmare:
...
T100M6
L<LX> R<RX>
...
Con la gestione, molto semplice, sopra descritta, L e R nella descrizione utensile sono sempre quelli relativi a una coppia di correttori: eventuali macroistruzioni che leggono o scrivono (per esempio con :R o :W) nei parametri 'L' e 'R' dell'utensile funzionano solo con questa coppia. Se si vuole eliminare questa limitazione si può fare una gestione appena più complessa:
TABELLA UTENSILI
...
T100#... L0 R0 LX100 RX30 LY150 RY20
...
PROGRAMMA
...
T100 M6
L<LX>R<RX>
... in questa parte di prg. sono attivi LX e RX
!:WSLX=L,RX=R! a fine uso, ripristina LX e RX
T200 M6
...
T100 M6
L<LY> R<RY>
!:WSL=L,R=R!
... qui sono attivi LY e RY
!:WSLY=L,RY=R!
...
In altre parole, dopo aver cambiato l'utensile si attiva e si scrive nella descrizione utensile la coppia desiderata. Prima di riporre l'utensile nel magazzino viene aggiornata la coppia di correttori interessata con quanto scritto in L e R: in questo modo è salvato in MEMORIA PERMANENTE anche il risultato di eventuali macroistruzioni che modifichino L o R.
Gestione vita
utensile
Le istruzioni eseguibili dallo Z32 consentono al costruttore della macchina
utensile di realizzare, nel suo sottoprogramma speciale di cambio utensile, la
gestione della vita utensile.
Qui di seguito si dà un esempio di come può essere organizzata la gestione vita: il costruttore della macchina utensile può però costruire gestioni diverse e meglio adatte ai suoi scopi: si rimanda l'utente finale alle informazioni date dal costruttore.
La descrizione dell'utensile contiene il parametro US che rappresenta l'usura dell'utensile. Il valore è 1000 per utensile nuovo, e scende verso zero con l'uso.
Il parametro US è aggiornato nella descrizione utensile ad ogni cambio effettuato: l'entità dell'usura è decisa dal programmatore secondo la pesantezza della lavorazione.
Per esempio, se una lavorazione può essere ripetuta 120 volte prima che l'utensile sia da sostituire, il programmatore dovrà specificare una usura di 8.34 (=1000/120). In questo modo lo stesso utensile può essere impiegato per varie lavorazioni, ognuna delle quali incide sulla vita in proporzione al proprio peso.
L'aggiornamento del parametro US nella descrizione utensili è fatto all'interno del sottoprogramma speciale M6, tramite il parametro HU passato dal programma principale.
Quando un utensile è completamente usurato può essere sostituito da un altro presente sul magazzino: nella descrizione dell'utensile usurato è contenuto il parametro TS che indica l'utensile sostitutivo. Più utensili sostitutivi possono essere messi in catena. L'ultimo della catena ha TS=0. Quando l'ultimo utensile della catena è completamente usurato il CN dà allarme.
TABELLA UTENSILI
...
T10#...R..L..TS11 US1000 può essere sostituito da T11
T11#...R..L..TS12 US905 in parte usurato sostituibile da T12
T12#...R..L..TS0 US1000 ultimo della catena di T10
...
T20#...R.. L.. TS0 US1000 non ha sostitutivo
...
PROGRAMMAPEZZO
...%
N1 HU0 T10 M6 lavoro con T10: 120 cambi esauriscono T10
N100 HU8.34 T30 M6
...
SOTTOPROGRAMMA SPECIALE M6
... ricerca utensili sostitutivi, anche in ric. blocco
N1 !:RT US=US! IF US>0;
GO//N5! :RT TS=TS!
N2 !IF TS<=0; NON C'È SOSTITUTO!
N3 T<TS>
N4 !GON1! ripete in cerca di un utensile buono
//N5 !GON7! in ricerca blocco non aggiorna usura utensile
N6 !IF HU=0;EB! :RS US=US!US = US-HU! :WS US=US!
aggiorna stato usura utensile precedente
N7... continua con cambio normale
Gestione delle
famiglie utensili
Questa prestazione è dedicata soprattutto al costruttore della macchina
utensile che la può usare nei suoi sottoprogrammi speciali di cambio utensile.
E’ ora possibile la gestione di "famiglie"
utensili, che sono formate da più utensili con lo stesso "T".
Per esempio ci potrebbero essere nella tabella utensili tre utensili della
famiglia T4:
T4#8L10,3R4
T4#9L12R4,002
T4#10L11,76R4
...
La gestione delle famiglie utensili dal punto di vista utente contiene vari
aspetti:
- riconoscimento dell'individuo nella famiglia
- programmazione della T col numero nella famiglia
- memorizzazione del numero in famiglia dell'utensile attivo
- ricerca del numero di individui di una famiglia
- accesso all'individuo da part-program con :R e :W
- modifica di parametri utensile da attività 4
- accesso all'individuo da DTO di attività 4 e 5
Riconoscimento dell'individuo nella famiglia
Il numero nella famiglia coincide con la posizione nella tabella utensili:
numero 1 = il primo
numero 2 = secondo ...
Programmazione della T e numero nella famiglia
La programmazione del numero nella famiglia si ottiene col parametro J, che
deve essere contenuto nella stessa riga dove è programmata T. Esempio:
T4 J2
Chiede la ricerca del secondo utensile della famiglia dei T4.
Perché il parametro J sia interpretato come numero nella famiglia non devono esserci altri parametri nella riga, con esclusione delle M. Per esempio:
T4 J2 M6
Ricerca e cambio utensile del 2.o della famiglia T4
T4 G2 X10 Y0 I5 J0
Ci sono altri parametri (quote assi e I), quindi J non ha il significato di numero nella famiglia (sarà eseguito un arco di cerchio)
T4 HX0 J2
C'è il parametro di sistema HX, quindi J2 non è interpretato come numero nella famiglia e ci sarà un allarme di programmazione perchè J è interpretato come quota del centro che non è ammessa da sola.
Se il parametro J non è programmato si ha il funzionamento compatibile con le versioni precedenti: è riconosciuto il primo.
Il numero nella famiglia può' essere da
Valori diversi danno errore parametri incompatibili, salvo il valore -1 che ha il significato speciale di ricerca del numero di membri della famiglia.
Valori frazionari sono arrotondati all'intero.
Se il numero nella famiglia è superiore al numero di membri si ha un errore
utensile.
Ricerca del numero di individui di una famiglia
Per evitare allarmi di programmazione può' essere
utile conoscere a priori quanti membri ci sono in una famiglia. Ciò si ottiene
specificando come numero nella famiglia -1:
T4 J-1
Richiede di riconoscere quanti membri ha la famiglia T4.
Il risultato della ricerca viene restituito nel parametro J.
La ricerca viene effettuata nella sezione utensili
attiva (ossia nella stessa sezione in cui sarebbe cercato il T programmato).
Se non ci sono utensili nella famiglia viene restituito J=0.
Memorizzazione del numero in famiglia dell'utensile attivo
L'utensile attivo è descritto in testa al file globale degli utensili (file 127 se processo zero) insieme al programma origine. Esempio:
T4P127
significa che è attivo l'utensile T4 della tabella globale file 127.
Se l'utensile non è il primo nella famiglia viene scritta anche questa caratteristica in testa al file globale:
T4P127J3
significa che è attivo il terzo utensile della famiglia T4 del file globale 127.
Se l'utensile è il primo della famiglia non viene scritto il parametro J, anche se la famiglia è composta di più membri. Quindi:
T4P127
significa che è attivo il primo o unico utensile della famiglia T4 del file
127.
Accesso all'individuo da part-program con :R e :W
I campi di riga evoluta :R e :W accedono ai parametri contenuti nella
descrizione utensile.
Si accede correttamente all'utensile programmato o all'utensile attivo anche se
questi non sono
il primo membro della famiglia.
Modifica di parametri utensile da attività' 4
La modifica dei parametri utensile, per esempio:
4 ENTRA L:0
avviene regolarmente senza bisogno di operazioni speciali: l'utensile è quello attivo, e viene regolarmente ricercato anche se non è il primo della famiglia.
Accesso all'individuo da DTO di attività 4 e 5
è possibile specificare il file origine dell'utensile e il suo numero nella famiglia, per esempio:
4 ENTRA DT42P127J2L+.1
J è seguito dal numero nella famiglia.
SEQUENZA DI ESECUZIONE DI UNA RIGA
ISO
Una riga di programmazione ISO può contenere molte operazioni elementari
diverse.
Le varie operazioni elementari vengono eseguite in una sequenza ben
definita, che dipende:
- dal tipo delle operazioni programmate
- dall'ordine in cui sono state programmate
Durante l'esecuzione di un programma, e per ogni riga ISO da eseguire, lo
Z32 compie tre passaggi successivi, che sono:
- lettura della riga
- analisi della riga
- esecuzione della riga
In fase di lettura la riga è letta e presentata sul video, senza altre elaborazioni.
Durante l'analisi delle entità programmate, vengono assegnati ai parametri i valori programmati, vengono predisposte le 'G' e decodificate e memorizzate le 'M'.
Queste operazioni sono eseguite nella sequenza in cui sono incontrate: in caso di programmazione di due entità contrastanti (per esempio G0 G1) rimane attiva l'ultima programmata.
In questa fase non vengono impartiti alla macchina ordini esecutivi, ma vengono predisposte tutte le condizioni per farlo.
Riesame delle entità e delle funzioni programmate nella riga, e invio alla macchina degli ordini esecutivi delle stesse.
La sequenza di esecuzione non dipende più dall'ordine di programmazione, ma dalla natura delle operazioni programmate.
L'ordine di esecuzione delle operazioni programmate è:
- esecuzione G36, G80, G84, G100, G101
- visualizzazione della feed (F)
- messa sotto controllo degli assi (G28)
- visualizzazione ed aggiornamento della speed (S)
- moto mandrino (M3M4)
- salto a sottoprogramma M speciale
- (non esegue eventuali altre operazioni programmate nella riga: il programma
riprende dal l'inizio della riga successiva)
- funzioni T, altre M, MA, MB, MC
- aggiornamento delle origini, delle compensazioni lunghezze e delle quote
visualizzate
- moti assi (inclusi moti G61 e G62)
- sosta programmata (G4)
- abbandono di assi (G29)
- posizionamento mandrino (M19)
- stop mandrino (M5)
- cambio utensile (M6 se M6 è speciale non esegue eventuali altre operazioni
programmate nella riga: il programma riprende dall'inizio della riga
successiva)
- M finali (M0, M1, M2)
- salto a sottoprogramma KG
- ritorno da sottoprogramma (G26) .
RIGHE EVOLUTE
N...!... ...! Abbiamo visto che con le righe ISO si
potevano ottenere tutte le funzioni di macchina.
Con le righe evolute, che non provocano direttamente nessuna funzione di macchina, si ottiene un più flessibile controllo dello svolgimento del programma, la possibilità di eseguire salti di istruzioni ecc.
Le righe evolute possono avere un numero di blocco (N...) come le righe ISO.
Le righe evolute si distinguono dalle righe ISO per il punto esclamativo che segue immediatamente l'eventuale numero di blocco.
Una riga può essere o tutta evoluta o tutta ISO. Nella stessa riga quindi NON POSSONO COESISTERE parti ISO e parti evolute.
Separatori Le righe evolute sono divise in 'campi', ognuno dei quali esegue una operazione elementare. I ;! vari 'campi' sono separati tra loro dal carattere '!' oppure ';'. La differente funzione del '!' e del ';' si vedrà alla descrizione della funzione IF (vedere più avanti paragrafo “Condizionamenti”).
I vari campi sono eseguiti nello stesso ordine in cui sono scritti. Nei paragrafi che seguono si dà il dettaglio delle istruzioni che possono costituire un campo di riga evoluta.
Definizione di parametri con calcolo
di espressioni
Abbiamo visto che è possibile, durante la normale programmazione ISO, assegnare
a un parametro il valore che risulta dal calcolo di una espressione.
Segno Ciò è possibile anche in un campo di riga evoluta. In questo caso, dopo l'indirizzo del
di ‘=‘ parametro si deve inserire il carattere '=' e poi l'espressione. L'espressione può essere anche un semplice valore numerico. Per esempio:
N14 !X=100! significa: assegna al parametro X il valore numerico 100
N14 !X=100-2*R! significa: assegna al parametro X il valore 100 meno il
diametro
utensile (due volte il raggio).
Si noti che in questo caso (contrariamente a quanto accade in una riga ISO) non si ha un movimento dell'asse X alla quota 100 (o 100-2*R): l'effetto di questo campo evoluto è solo quello di assegnare al parametro X il valore 100 (o 100-2*R).
Se successivamente, in una riga ISO, si programma X<X> , si ha una riconferma del valore assegnato a X nella riga evoluta e anche il movimento fino al valore finale
Conversione
cartesiane/polari e viceversa
!HX=..; Con il campo: !CP! si ottiene la conversione dei parametri HX e HY,
rappresentanti due
HY=..; coordinate cartesiane, nei corrispondenti in coordinate polari HR
(raggio) e HT (angolo
CP! trigonometrico in gradi).
Dopo questo campo HR e HT contengono il risultato, HX e HY rimangono invariati. Per esempio dopo la riga:
N10!HX=1;HY=1;CP! si ottiene: HR = 1,4142... HT = 45
Con il campo: !PC! si ottiene la conversione inversa.
Per esempio dopo la riga:
N10!HR=10;HT=30;PC! si ottiene: HX = 8,6602... HY = 5
Non è necessario che HX, HY, HR, HT, siano programmati nella stessa riga che contiene CP o PC: essi possono essere programmati o determinati con calcolo anche in righe precedenti, ISO o evolute.
SALTI
Sono possibili cinque tipi di salto:
- salto a una riga senza ritorno (GON...)
- salto a una serie di righe con ritorno (GON...-N...)
- salto a sottoprogramma con ritorno GOP...)
- salto ad una riga all’interno di un sottoprogramma
(GOP…-N…)
- salto ad una serie di righe all’interno di un sottoprogramma
(GOP…-N…-N…)
Il numero di riga o il numero di programma possono essere parametrizzati (vedi paragrafo dedicato più avanti su questo capitolo).
Salto a una riga senza ritorno
Questa istruzione comanda allo Z32 di saltare a un'altra riga specificata.
Per es.
N14 !GON64! fa saltare il CN alla riga N64.
Il numero di riga da ricercare deve essere ad inizio riga e deve essere scritto
esattamente con la stessa sequenza di caratteri con cui viene ricercato.
Per esempio:
%N0 X0 si deve ricercare come !GO%N0!
N 47G1... si dovrà ricercare con lo spazio intermedio: !GON 47!
/N38M6 si deve ricercare con !GO/N38!
Il salto alla riga indicata avviene immediatamente non appena viene eseguito il campo che contiene il salto.
!EB!
end bloc
5.2.2
Per esempio:
N14!X=100;Y=-11,5!GON36!
viene eseguita nel seguente ordine: a) assegna al parametro X il valore 100
; b) assegna al
parametro Y il valore -11,5 ; c) salta alla riga N36
N14 !GON36! X=100! Y=-11,5!
viene eseguita così: a) salta alla riga N36 ; b) non sono variati i parametri X e Y
Questa prestazione serve, come si vedrà dopo, per condizionare l'esecuzione di campi a situazioni particolari.
Caso particolare di salto senza ritorno è la interruzione della esecuzione di una riga evoluta, ottenuta col campo: !EB!
Quando viene incontrato questo particolare campo la esecuzione della riga viene interrotta e l'esecuzione prosegue dalla riga successiva. Esempio:
...
N10!IFHA>=10;EB!GON5!
N11...
Se HA è minore o uguale a 10 viene eseguito lo EB e
quindi il programma prosegue con
N
Agli effetti del ritorno da serie di righe, la riga in cui viene eseguito EB è da considerarsi completata (vedere prossimo paragrafo “Salto a una serie di righe con ritorno”).
Salto a una serie di righe con ritorno
Questa istruzione ordina allo Z32 di continuare l'esecuzione del programma con una serie di righe specificate: dopo l'esecuzione dell'ultima riga specificata deve proseguire con la riga successiva a quella in cui è contenuta questa istruzione. Esempio:
!GON120-N381!
chiede al CN di saltare alla riga 120 e di continuare l'esecuzione fino alla riga 381. Dopo aver eseguito la riga 381 il CN deve proseguire dalla riga successiva a quella contenente questa istruzione.
Dentro le righe richiamate possono esserci altri salti e altri richiami a serie di righe.
Non è necessario che il numero di riga fine sia maggiore del numero di riga inizio, purché la riga fine sia raggiungibile partendo dalla riga inizio.
Se la riga fine contiene un salto (deve essere con un GO...) che viene eseguito il ritorno non viene fatto.
Per esempio:
...
N10 G0 X0
...
N20 !HA=HA+1!IFHA<10;GON15!
...
N30 !GON10-N20!
N31...
Qui in N30 si ha una ripetizione delle righe da N10 a N20, e in N20 c'è un salto a N15 condizionato da un parametro: finche il salto della riga N20 viene eseguito non c'è il ritorno dalla serie di righe N10-N20, ma quando il salto non viene più eseguito (HA è diventato 10) si ha il ritorno a N31.
L'uso di questa caratteristica è da considerare riservato a programmatori esperti: in un primo tempo si consiglia di evitare salti nella riga fine di una serie di righe. Lo stesso programma precedente poteva essere più chiaramente scritto:
...
N10 G0 X0
...
N20 !HA=HA+1!IFHA<10;GON15!
N21
...
N30 ! GON10-N21 !
N31 ...
L'aggiunta della riga N21 vuota, da usare come riga fine, toglie ogni possibile equivoco sul comportamento dello Z32. Se invece la riga fine, contiene un salto implicito (per esempio un ciclo fisso o una M speciale), il ritorno dalla serie di righe viene fatto dopo l'esecuzione del sottoprogramma di servizio. Per esempio:
...
N9 G27C1
N10 G0 X50 Y10
...
N20 X65 Y20
...
N29 G27C4
N30 !GON10-N20!
N31 ...
È lecito che la riga fine coincida con la riga inizio (viene eseguita una
sola riga). I salti con ritorno possono essere fatti all'interno di altri salti
con ritorno fino ad una profondità di 10 livelli. Oltre il limite consentito lo
Z32 dà allarme: CN 2E14 TROPPE SUBROUTINES.
Sono da considerare salti con ritorno e quindi consumano un livello:
- GON...-N... salto a serie di righe
- GOP... salto a sottoprogramma
- M speciale
- G27C... ciclo fisso di sistema o utente
- G27P... sottoprogramma permanente
Il numero di livello è scaricato di 1 ad ogni ritorno da sottoprogramma o serie
di righe, per cui è normalmente impossibile
raggiungere il massimo consentito.
La G110 (macrofunzioni di svuotatura) consuma due livelli.
Nell'esempio che segue è indicato in pratica come si possono usare richiami di serie di blocchi.
Scopo del programma è di scavare una finestra rettangolare con percorso del
centro fresa. Devono essere fatte due passate con incremento in Z di
%
N0 G25XYZ T100 M6 in T100 sono già definiti F200 S1000
N1 Z0 M3 posiziona Z e start mandrino
N2 G0 X0 Y0 posiziona XY a sinistra in basso
N3 G1 Z<Z-5> prima discesa in Z
N4 Y<Y+10> primo incremento in Y
N5 X 100 prima passata in X+
N6 Y<Y+10> secondo incremento in Y
N7 X0 seconda passata in XN8
!GON4-N7! ripete
N9 Y0 rifila lato sinistro
N10 X100 completa lato inferiore
N11 Y40 rifila lato destro
N12 !GON2-N11! completa seconda passata
N13 M2 fine
Si noti che durante l’esecuzione del salto di N12 si incontra un altro
salto con ritorno: ciò significa che il programma dell'esempio ha una
profondità di due livelli.
Si faccia attenzione che il ritorno da serie di righe è effettuato solo se la riga fine non contiene un salto esplicito che deve essere eseguito (con 'GO').
L'istruzione 'EB' e i salti impliciti a sottoprogrammi (cicli fissi, M speciali ...), anche se eseguiti non impediscono il ritorno da serie di righe.
Esempio di programma errato:
N1!GON10-N30!
...
N10X0
N20Y10
N30!GON56!
...
Il ritorno dalla riga 30 non viene mai effettuato perché la riga viene interrotta per un salto a un'altra riga.
!GOP10!
Salti a sottoprogrammi
Con questo tipo di istruzione lo Z32 abbandona momentaneamente il programma in corso per eseguire un altro programma inserito nella memoria, ossia è 'richiamato' un sottoprogramma.
Il programma chiamato deve iniziare col solito % e deve terminare con G26 (fine sottoprogramma).
Il % iniziale del sottoprogramma non fa il reset delle condizioni memorizzate (origini, parametri, 'G', 'M' ecc.): ha il solo effetto di segnalare che è terminato un eventuale titolo del sottoprogramma e che iniziano le istruzioni operative.
Esempio:
!GOP96!
Salta al sottoprogramma 96 della memoria, lo esegue e alla fine, dopo il G26 che chiude il sottoprogramma 96, torna ad eseguire la riga successiva.
L'istruzione !GOP...! consuma un livello di salto
con ritorno: sono possibili fino a 10 livelli di salto, comprensivi di:
- GON...-N...
- M speciali
- G27C... cicli fissi di sistema e utente
- G27P... sottoprogrammi permanenti
L'utilità di questo tipo di istruzione è strettamente collegata alla programmazione parametrica.
Si possono infatti mantenere in memoria una quantità di sottoprogrammi standard (da semplici figure geometriche a più complesse lavorazioni) con alcuni parametri non definiti per adattarsi alle varie condizioni in cui i sottoprogrammi verranno usati.
Sarà sufficiente che il programmatore definisca i parametri nel suo programma principale e che poi richiami il sottoprogramma voluto, senza scrivere nuove istruzioni ed utilizzando invece programmi già provati e quindi esenti da errori.
Nell'esempio che segue è descritto un semplice sottoprogramma per la rifilatura esterna di un rettangolo. I parametri da passare al sottoprogramma sono:
XA YA lati del rettangolo
XB YB quote del vertice in basso a sinistra
ZA quota di lavoro terzo asse
Si ammette che il programma principale arrivi alla istruzione che richiama il sottoprogramma con l'utensile giusto sul mandrino e che quindi siano già definiti i parametri R (raggio fresa), F (feed), S (speed).
Il sottoprogramma è generico per qualsiasi terna di lavoro (non necessariamente XYZ).
Programma principale:
...
N20 XA50 YA80 XB0 YB0 ZA-20 si definiscono i parametri
N21 !GOP90!
...
Sottoprogramma 90:
'
%N1G0AA<XB-R>AB<YB-R> posiziona sul vertice, compensa lutensile
N2 G1 AC<ZA> scende col terzo asse
N3 AB<AB+YA+2*R> rifila lato sinistro
N4 AA<AA+XA+2*R> rifila lato superiore
N5 AB<YB-R> rifila lato destro
N6 AA<XB-R> G26 rifila lato inferiore e fine
Parametrizzazione dei salti a riga e
a sottoprogramma
Le istruzioni Z32 che permettono salti di riga e di programma sono normalmente:
!GOP4! salto a sottoprogramma 4 con ritorno
!GON45,3! salto alla riga N45,3 senza ritorno
!GON33-N45! salto alla serie di righe N33 - N45 con
ritorno
Dalla versione software del 5.1.93 i numeri di riga e di sottoprogramma possono
essere anche programmati con una espressione parametrica. per esempio:
!GOP<4+HA>!
!GON<33+HB*2>!
!GON<18,5+HC/4>-N60!
!GON<18+HC>-N<36+HC>!
!GON18-N<36+HA>!
Il nuovo modo di programmare il numero destinazione è caratterizzato dalle parentesi acute aperta e chiusa che racchiudono l'espressione parametrica. Senza parentesi acute è valido il modo vecchio.
Qualsiasi espressione ammessa dallo Z32 può essere contenuta tra le parentesi acute.
Nel caso di GOP il risultato dell'espressione viene preso in valore assoluto e arrotondato all'intero più vicino.
Nel caso di GON la riga destinazione deve iniziare con "N" seguito dal numero di riga, senza spazi né iniziali né intermedi.
Se il risultato dell'espressione è frazionario viene arrotondato alla 3.a cifra decimale per risultati fino a 4 interi e alla 2.a cifra decimale fino a 5 interi. Il carattere che separa gli interi dai decimali è la virgola (se la riga destinazione ha il punto decimale non viene trovata).
Gli zeri iniziali prima della virgola e finali dopo la virgola sono soppressi. Se il risultato arrotondato ha tutti zeri dopo la virgola anche la virgola decimale è soppressa.
Gli esempi che seguono mostrano alcune delle combinazioni possibili.
Salto programmato Riga destinazione
!GON<100>! N100
!GON<100/3>! N33,333
!GON<10000/3>! N3333,333
!GON<1000*100/3>! N3333,33
!GON<100+.001/10>! N100
!HA13!GON<48+HA>! N61 !GOP..-N..! e !GOP..-N..-N..!
È possibile eseguire un salto a un sottoprogramma specificando il numero di
riga iniziale o anche un numero di riga iniziale e finale.
Queste prestazioni possono facilitare la scrittura di macro.
Sintassi:
!GOPx-Ny!
!GOPx-Ny-Nz!
Dove x è il numero di programma a cui saltare, y è
il numero di riga da cui deve iniziare l'esecuzione, z è il numero di riga a
cui deve terminare l'esecuzione.
I tre valori x y z sono numeri oppure, se racchiusi tra parentesi acute,
risultato di espressioni.
Se y e z sono programmati con espressioni ci sono le solite limitazioni sulla
programmazione di N nelle righe destinazione:
- non devono esserci spazi o altri caratteri iniziali
- non devono esserci spazi tra la N e il numero di riga
- per separare i decimali deve essere usata la virgola e non il punto
- i decimali non devono essere più di 3
Se P è programmato con espressione il numero deve essere intero positivo. Se
non è intero il numero è arrotondato all'intero più vicino.
Esempi:
!GOP3-N35!
!GOP3-N35-N82!
!GOP<HX>-N<HY>-N<HZ>!
!GOP<1+HA>-N<(HX+42)/8>-N<HY*2>! (si spera che così non si
usi mai!)
Campo G26, fine sottoprogramma per
DNC
Con il campo: “G26”, del tutto identico al G26 di riga ISO, che
quindi determina la fine del sottoprogramma in corso con ritorno al programma
chiamante si risolve un particolare problema in DNC.
Si ha un programma molto lungo, da eseguire quindi in DNC. Il programma deve poter essere interrotto in punti determinati se la logica di macchina lo richiede. La logica di macchina fornisce il parametro PAL[5]=64 se il programma deve essere interrotto.
Nel part-program da eseguire in DNC si scriverà:
...
!IF PAL[5]=64;G26!
... (continua il DNC se PAL[5] diverso da 64)
oppure:
...
!IF PAL[5]<>64;EB!G26!
... (continua il DNC se PAL[5] diverso da 64)
Come per i salti GO... se la G26 viene eseguita i campi successivi sono ignorati, e la riga non viene riconosciuta come riga finale di un salto GON...-N...
È obbligatorio che il campo G26 termini col punto esclamativo e non contenga spazi, altrimenti non viene riconosciuto e si ha un errore programma.
CONDIZIONAMENTI
Con questa istruzione si ordina allo Z32 di eseguire o non eseguire i
successivi campi separati da ';' fino al primo '!', a
seconda che le condizioni specificate siano o no verificate.
Sintassi:
!IF (espr.1)<=>(espr.2);(campo A);(campo B);...!(campo C)!
Che significa: se il valore dell'espressione 1 è minore, uguale o maggiore (possono essere usate una o due condizioni) del valore dell'espressione 2, allora continua ad eseguire normalmente il prossimo campo (A), altrimenti salta fino al primo punto esclamativo e prosegui col campo successivo (C).
Esempi:
N12 !IF X >= 3;GON30!
Se X è maggiore o uguale a 3 salta alla riga N30, altrimenti prosegui con la prossima riga (non ci sono altri campi successivi).
N12!IFAA<>2;GON30!GON47!
Se AA è diverso (maggiore o minore) da 2 salta alla riga N30, altrimenti salta alla N47.
N12!XA=XA+1!IFXA>5;XA=5!
Incrementa XA di 1; ma se il risultato è maggiore di 5 , metti XA=5.
N12 !IF R=5;EB! R=R-1,5;IF
R<5 ;R=5!GON1-N11!
Se R è 5 allora prosegui con la prossima riga (EB), altrimenti decrementi R
di 1,5: se il risultato è minore di 5 riporta R al valore di 5, poi ripeti le
righe da
N12!IFX<10;IFY<10;EB!GON63!
Se X è minore di 10 E ANCHE Y è minore di 10 continua, altrimenti salta alla riga 63.
N1 X10
...
N10 !R=R-1!IF R = 5;GON3!
...
N20 !GON1-N10!
Ripeti le righe da
ATTENZIONE
La condizione di '=' è verificata se i due risultati sono identici fino
all'ultimo decimale. Poiché le necessarie approssimazioni di calcolo
possono portare a errori sugli ultimi decimali, si consiglia sempre di
usare, per quanto possibile, le condizioni '<=' o '>=' al posto del
semplice
'='.
Per esempio:
...
N10 Z10
N11 ...
...
N20!Z=Z-0.1!IFZ=0;GON30!
N21 ...
N22 ! GON11 !
...
N30 ...
Nella riga N20 è usata
Il modo giusto di programmare è di mettere nella riga N20 la condizione minore o uguale che viene sempre trovata.
LETTURA E SCRITTURA IN MEMORIA
PERMANENTE
Lo Z32 possiede una memoria di lavoro e una memoria permanente (spesso chiamata
anche CMOS) che viene periodicamente scaricata sul
disco rigido del PC (circa ogni 1 secondo).
La memoria di lavoro contiene i dati elaborati dal calcolatore nella esecuzione del programma assegnato.
La memoria permanente invece contiene tipicamente i dati scritti dall'utente per passare ordini e informazioni al calcolatore.
I dati contenuti nella memoria di lavoro sono continuamente aggiornati dal calcolatore
seguendo l'evoluzione dei valori programmati, ma vengono perduti in caso di mancanza
dell'alimentazione.
I dati in memoria permanente invece non si perdono a macchina spenta e vengono tipicamente aggiornati dall'utente.
Il microprocessore, durante l'esecuzione del programma, legge ordinatamente i dati contenuti
nella memoria permanente, li elabora e li trascrive nella memoria di lavoro. Per esempio, per
eseguire la istruzione di programma:
HA150
il calcolatore legge i caratteri "HA150" contenuti nella memoria permanente ed annota il valore 150 nella casella assegnata al parametro HA della memoria di lavoro.
I parametri descritti nel capitolo dedicato ai parametri sono quelli della memoria di lavoro: essi sono tutti inizializzati con valore zero ad ogni reset, contengono i valori via via elaborati durante l'esecuzione del programma e si perdono a macchina spenta.
Esiste la possibilità nella programmazione dello Z32 di andare a leggere i valori di parametri scritti nella memoria permanente (come caratteri alfanumerici in programmi o tabelle) e di trasferirli nelle caselle dei parametri di lavoro.
Ciò si ottiene con un campo di riga evoluta. Con l'esecuzione di questo
campo lo Z32 rende uguale il parametro memorizzato in memoria permanente e il
parametro di programma in esso indicati.
Nel caso di ':R' viene letto da memoria permanente nel
parametro di programma-pezzo.
Inversamente, nel caso di ':W' viene scritto in
memoria permanente da parametro oppure da espressione matematica di
programma-pezzo (che nel caso più semplice può essere una costante).
La memoria permanente interessata può essere:
- sezione parametri
- sezione origini
- un parametro della descrizione utensile programmato (T)
- un parametro della descrizione utensile su mandrino (S)
Il nome del parametro del programma-pezzo può essere a 1 o 2 caratteri (il
secondo non numerico), con le regole descritte nel paragrafo relativo ai
parametri. Quello della memoria permanente è sempre a 2 caratteri se si tratta
di parametri o origini, mentre può essere a 1 o 2 caratteri se si tratta della
descrizione dell'utensile.
Se non esiste nella sezione interessata il parametro indicato, il CN dà errore
programma (CN1D14). Invece se non esiste il parametro di lavoro nella memoria
del programma-pezzo esso viene creato con valore zero.
Il nome del parametro in memoria permanente e del parametro in memoria di
lavoro possono essere uguali o diversi (ricordarsi che in memoria di lavoro il
nome del parametro non può contenere numeri).
Il massimo numero scrivibile è 999999,999 (sei cifre intere e tre decimali) ; se il numero da scrivere è superiore al massimo viene
scritto il massimo.
Esempi:
!:ROX1=HA! legge OX1 nel parametro HA
!HA=50!:WOX1=HA! fa OX1=50
!:WOX1<50>! anche questa espressione fa OX1=50
!:ROX1=HA!HA=HA+5!:WOX1=HA! sposta l'origine OX1 di +5mm
!:ROX1=HA!:WOX1<HA+5*X>! come sopra
CNC Z32 Programmazione Cap.5 - Righe evolute, salti, condizionamenti,
Read/Write
!:WTL<50,5>! fa 'L' dell'utensile program.=50,5
Una operazione di scrittura in memoria permanente è composta di un certo numero di operazioni, che possono essere interrotte da un reset o da una caduta della tensione di alimentazione. In questo caso nel file interessato, subito dopo l'indirizzo del parametro lasciato non completo, la riga viene lasciata spezzata in due: ciò genererà un errore (CN...) in caso di successivo uso del parametro memorizzato in memoria permanente. Sarà cura dell'operatore ripristinare il parametro corretto in memoria.
Letture e scritture multiple
Più parametri possono essere letti o scritti con un solo campo di riga evoluta:
le varie coppie di nomi di parametri da uguagliare sono separate dal carattere
','.
Esempi:
!:RPH1=HA,H2=HB,H3=HC!
legge da sez. parametri H1, H2, H3 in HA, HB, HC
!:WSL=L,R=R!
scrive nella riga utensile sul mandrino i parametri L e R
Origine attiva
Soprattutto in sottoprogrammi di uso generale, può essere utile leggere o
scrivere l'origine attiva di un dato asse senza conoscere quale essa sia, ossia senza conoscerne il carattere identificatore.
Se al posto del carattere identificatore si programma il carattere '*' lo Z32 lo interpreta come 'origine attiva’.
Per esempio:
!:ROX*=HA!
legge l'origine attiva sull'asse X, per es.OX2 e la carica in HA
!:ROX*=HA!:WOX*<HA-1>!
sposta l'origine attiva dell'asse X di -1mm
Si noti che, se dopo aver attivato una origine, si cambia la sezione attiva delle origini, l'origine programmata resta quella della vecchia sezione, ma le origini lette e scritte con :R e :W sono quelle della nuova sezione, anche se si legge o scrive con '*'. Esempio:
...
N10 G37OG OX1
N11 G37OL
N12 !:ROX*=HA!
...
Nel parametro HA viene scritto il contenuto della origine LOCALE X1, mentre è attiva l'origine GLOBALE X1 .
ATTENZIONE
La scrittura di sezioni locali di parametri-origini-utensili da part-program non deve essere fatta se sulla stessa sezione locale possono agire più part-program contemporaneamente.
Posto utensile
La descrizione dell'utensile contiene, dopo il carattere '#', un numero di max.
due cifre che identifica il posto. Questo numero non è un parametro e quindi
non è normalmente accessibile al programmatore. Esso può però essere trasferito
in e da un parametro mettendo il carattere '#' come nome del parametro in
memoria permanente.
Per esempio:
!:RT#=HA!:RS#=HB!
legge nel parametro HA il posto dell'utensile programmato, e in HB il posto dell'utensile sul mandrino
È possibile modificare il posto dell'utensile con:
!:WS#=HA!
modifica il posto dell'utensile sul mandrino.
ATTENZIONE
La scrittura di sezioni locali di parametri-origini-utensili da part-program non deve essere fatta se sulla stessa sezione locale possono agire più part-program contemporaneamente.
ATTENZIONE
La modifica del posto utensile è in generale una operazione
da riservare al costruttore della macchina utensile nei suoi sottoprogrammi
speciali.
Una errata modifica del posto utensile può portare a
collisioni al momento del cambio.
Lettura e scrittura in ricerca blocco
In ricerca blocco la lettura e la scrittura in memoria permanente sono eseguite
normalmente.
Ciò può portare a falsi giri di programma, nel caso che si leggano parametri modificati durante l'esecuzione precedente.
Esempio:
N1!:RPHA=HA!IFHA=10;GON100!
N2!:WPHA<10>!
...
N100
...
M2
In questo esempio all'istruzione N1 il programma fa uso di quanto contenuto in HA per saltare o no alla riga N100. Alla riga N2 il contenuto di HA in memoria permanente è modificato per qualche ragione. Se l'esecuzione è interrotta tra N2 e N100, non sarà più possibile in ricerca blocco riprendere il programma interrotto perché alla riga N1 salterà immediatamente alla riga N100.
Se un programma deve essere interrotto e ripreso in un punto qualsiasi con minimo lavoro per l'operatore, il programma stesso dovrà contenere una traccia di quanto trovato in memoria permanente.
Si potrà costruire una struttura simile a quella illustrata al capitolo “Prestazioni speciali” paragrafo ‘Ricerca blocco con movimenti di misura’.
Funzione :L
per caricare/scaricare files su disco
La funzione :L (L come Load)permette di caricare in modo veloce part-program
residenti su disco nella memoria operativa dello Z32.
La sintassi del comando, che è un campo di riga evoluta, è:
!:L(numero file Z32)-(nome completo file su disco)!
Esempio:
!:L 10 -C:\Z32\PPG\OP3244.PPG!
che richiede di caricare nel file 10 di Z32 il file di PC che si trova col nome completo
C:\Z32\PPG\OP3244.PPG.
Alcune regole di scrittura:
I delimitatori di campo di riga evoluta possono essere sia il carattere '!' sia il carattere ';'.
Prima e dopo ':L' possono esserci un numero qualsiasi di blank.
Il numero file da installare deve essere compreso tra 1 e 109 inclusi, altrimenti viene CN 1D14
ERRORE PROGRAMMA.
Il numero file può essere il risultato di una espressione. Esempio:
HA20
!:L<HA+1>-\Z32\PPG\FPROV.PRG!
Il file FPROV.PRG che sta nella directory \Z32\PPG viene caricato nel file n. 21.
Se il risultato dell'espressione è frazionario viene arrotondato all'intero più vicino. Per esempio:
HA13
!:L<HA/3+30>-\Z32\PPG\FPROV.PRG!
Il file FPROV.PRG che sta nella directory \Z32\PPG viene
caricato nel file n. 34.
Il file da installare non può essere il programma o sottoprogramma in corso, né
un programma o sottoprogramma al quale si dovrà tornare.
Per esempio, se siamo nel sottoprogramma 10, che è
stato chiamato da sottoprogramma 5, che è stato chiamato dal programma
principale 1, non sarà possibile caricare i programmi 1, 5 e 10.
Invece è lecito (è lo scopo del :L) caricare il
sottoprogramma 10 mentre si sta eseguendo il programma 1, e poi eseguire il 10
come sottoprogramma. Per esempio è lecita questa sequenza, inserita per esempio
nel programma principale 1:
!:L 10 -C:\PPG\OP3244.1!GOP10!
!:L 11 -C:\PPG\OP3244.2!GOP11!
!:L 10 -C:\PPG\OP3244.3!GOP10!
!:L 11 -C:\PPG\OP3244.4!GOP11!
che può servire per richiamare da disco un programma lungo, sezionato in 4
parti.
Tutti i caratteri stampabili tra il carattere '-' e il terminatore del campo (';' o '!'), inclusi eventuali blank, sono considerati come
nome completo del file su disco.
Nel nome file non possono essere compresi:
- il carattere '$' che riconcatena la riga con la seguente
- i terminatori ';' e '!'
- caratteri con valore inferiore a 20 hex o superiore a
ERRORE PROGRAMMA
Sul nome file non viene fatto un controllo sintattico, ma solo alcuni controlli formali: deve essere terminato regolarmente (anche il fine riga senza terminatore non è ammesso) e deve avere un numero di caratteri tra 1 e 80 compresi.
Il file sul PC deve essere un normale file ascii (editabile con qualsiasi word-processor che generi un file senza caratteri di formattazione testo), di lunghezza non superiore a 64k. Il programma DOS di supporto provvede a fare le conversioni necessarie da formato ascii PC a formato Z32.
Il modo di caricamento del programma messo in atto dal programma DOS di supporto è un modo particolarmente veloce (si possono scrivere qualche decina di kbyte/secondo) ma per questo c'è un prezzo da pagare: il file introdotto nello Z32 non è permanente, ossia non permane dopo lo spegnimento e riaccensione del PC. D'altra parte, essendo il file permanente su disco la limitazione appare non molto importante.
ATTENZIONE
È possibile editare (con attività 5) un file introdotto con :L, ma i risultati sono validi solo finche il CN resta alimentato: non è garantito il risultato se si spegne e si riaccende il PC, il file risulta sempre nullo.
Sono stati aggiunti i seguenti messaggi errore relativi a :L:
CN 4E14 ERRORE :L FILE SU DISCO
Segnala che il programma DOS ha trovato un errore di lettura nell'accesso al
file selezionato.
Non c'è il dettaglio preciso dell'errore, che può essere di varia natura: file
o directory inesistente,disco non pronto, errore di
accesso al disco .... È compito dell'operatore rimuovere l'errore.
CN 4F14 ERRORE :L FILE Z32
Segnala che Z32 dà errore nella scrittura del file. Anche qui non c'è dettaglio preciso. L'errore può derivare da varie cause: memoria piena, file impegnato nello Z32, errore di scrittura .... Anche in questo caso è compito dell'operatore rimuovere l'errore.
CN 5014 ERRORE :L SCONOSCIUTO
Segnala un malfunzionamento nel colloquio tra Z32 e il programma di supporto. Se il programma DOS è corretto questo tipo di errore non deve mai presentarsi.
Attenzione nel caso di multiprocesso
I files di Z32 sono una risorsa comune a tutti i processi attivi, e quindi il file che viene caricato con :L può essere usato anche da processi diversi da quello che chiede il caricamento. Lo Z32, prima di caricare il file, controlla che in quel momento il file non sia impegnato (sia come programma principale che come sottoprogramma) in nessuno dei processi attivi (se è impegnato dà errore CN 4F14), ma non può prevedere le successive evoluzioni. È compito del programmatore tenere conto dell'uso del file da caricare nei vari processi.
Attenzione alla sequenza dei programmi caricati
È noto che Z32 contiene un serbatoio di istruzioni preelaborate in attesa di esecuzione, che può essere molto lungo: di recente è stato esteso a oltre 100 blocchi per consentire la previsione degli spigoli molto avanti. Nei blocchi preelaborati c'è anche l'ordine di visualizzare la riga, che viene letta, al momento della reale esecuzione, nel file presente in memoria. Se nel frattempo il file in memoria è cambiato (perché caricato con :L) la visualizzazione della riga in corso non è più significativa. Quindi, se si programma:
!:L 10 -C:\PPG\OP3244.1!GOP10!
!:L 10 -C:\PPG\OP3244.2!GOP10!
quando si eseguono le ultime righe del programma OP3244.1 si ha una visualizzazione errata perché le righe vengono lette nel file 10, che ormai contiene OP3244.2.
Sarebbe stato facile qualificare l'operazione :L come "con arresto" (che svuota il serbatoio preelaborato), ma, ricordando che l'operazione con arresto non è sempre possibile (non nella correzione raggio, nella geometria aperta, nella G98...) si sarebbe avuto l'inconveniente di dover spezzare un eventuale file lungo in punti adeguati.
È stato quindi deciso di lasciare la possibilità di visualizzazione errata (che riguarda solo la visualizzazione della riga e non la reale esecuzione in macchina) per dare una maggiore flessibilità di uso.
Ci sono due modi per eliminare l'errata visualizzazione di righe:
1)alternare la scrittura di più programmi
Riesaminiamo l'esempio fatto in precedenza:
!:L 10 -C:\PPG\OP3244.1!GOP10!
!:L 11 -C:\PPG\OP3244.2!GOP11!
!:L 10 -C:\PPG\OP3244.3!GOP10!
!:L 11 -C:\PPG\OP3244.4!GOP11!
Questo accorgimento funziona se i programmi contengono funzioni con arresto (basta una M, un'attesa G4 ...) oppure se i programmi sono abbastanza lunghi (per sicurezza almeno 200 blocchi).
Naturalmente si possono interessare anche più di due programmi fino a
ottenere la lunghezza voluta.
2) interporre una funzione con arresto
Per esempio:
!:L 10 -C:\PPG\OP3244.1!GOP10!
G112
!:L 10 -C:\PPG\OP3244.2!GOP10!
La G112 è
Questo accorgimento funziona sempre, ma richiede che il programma sia spezzato in un punto adeguato, che ammetta l'arresto.
:L- per scaricare files su disco
Il comando :L- consente lo scarico di files da Z32 a disco. Esempio:
!:L-126-\FILES\ORIGINI.001!
L'esecuzione di questa riga provoca il trasferimento del file 126 di Z32 (tabella origini) dalla memoria operativa dello Z32 al file su disco di nome "ORIGINI.001" nella directory \FILES.
Notare che la differenza col normale comando :L è il segno "-" prima del numero file.
Rimangono valide tutte le modalità d'uso e gli allarmi già descritti per il
comando :L con numeri positivi, salvo il fatto che si
possono scaricare su disco tutti i files da
:L254 esecuzione multipla in DNC
Per usufruire di questa possibilità è necessario avere i programmi di
interfaccia video TERMS
o ZTERM.
Si tratta della possibilità di eseguire più volte in DNC lo stesso programma o
più programmi diversi, per superare la limitazione della lunghezza del singolo
file.
Formato generale di programmazione:
!:L254-nome file di PC!
Questo comando somiglia al comando ":L" ma ha il numero file (obbligatorio per questa prestazione) 254.
Questo numero di file rappresenta l'ordine codificato di eseguire il part-program residente su disco in DNC e non con una installazione in memoria.
Se il numero file è 254 si ha che:
- il file non viene installato nella memoria Z32 ma viene eseguito in DNC. Ciò
significa che il file può avere una lunghezza qualsiasi (compatibilmente con la
disponibilità del disco rigido)
- si ha una immediata esecuzione del file in DNC,
senza necessità di un successivo GOP... (come è richiesto nel caso di files
installati in memoria)
Si possono ottenere varie prestazioni, per esempio quella di ripetere l'esecuzione di un file molto lungo in posizioni via via rototraslate.
Esempio:
...
N2 Z30
N3 X0 Y0
N4 G1 Z0F100
N5 F300
N6 !:L254-P4523.PRG!
N7 QR<QR+30>
N8 !IF QR<360;GON2!
N9 Z30
N10 M2
Le righe da N2 a N8 sono ripetute 6 volte, in 6 diverse angolature distanti
30 gradi l'una dall'altra.
Alcune specifiche per il file di part-program:
- non deve avere in testa il carattere "%" (quindi il commento
iniziale, se c'è, deve essere racchiuso entro parentesi tonde come specificato
dalle norme ISO)
- deve terminare con l'istruzione G26 (ritorno da sottoprogramma
Programmazione parametrica del nome
file DNC
Da part-program si può specificare il nome del file da eseguire in DNC con la
riga evoluta:
!:L254-nomefile!
dove nomefile è una stringa ascii che specifica il path e il nome del file.
Può essere utile poter variare il nome del file da eseguire in funzione di
un'espressione.
Ammettiamo che nella directory C:\Z32\PPG ci siano 500
diversi part-program da scegliere infunzione di un parametro (per esempio HA)
che varia da
Per usare il nome programmabile si inserirà nel nome del file un numero da
PPG1
PPG2
…
PPG499
PPG500
A questo punto, se HA contiene il numero da
!:L254-PPG<HA>!
Tra parentesi acute può anche essere contenuta un'espressione:
!:L254-PPG<HA+1-HC*2>!
L'espressione può essere interna al nome del file, oppure essere ripetuta più volte:
!:L254-PPG<HA>.DAT!
specifica nomi files PPG1.DAT, PPG2.DAT ecc.
!:L254-PPG<HA>.<HB>!
Specifica nomi file PPG1.1 (HA=HB=1), PPG20.46 (HA=20, HB=46) ecc.
Alcune regole sull'espressione:
- gli zeri iniziali sono sempre omessi, se l'espressione è zero viene inserito un solo zero
- se il risultato dell'espressione è negativo viene fatto il valore assoluto
- se il risultato dell'espressione è frazionario viene assunto l'intero più
vicino.
DNC strutturato
ATTENZIONE: Questa prestazione non è concepita per una programmazione manuale, ma
per applicazioni software che permettano, in modo
automatico ed in ambiente di rete, una ricerca blocco (o ripristino ciclo) per
zone di part-program come è permessa da Zterm sotto DOS.
Per completezza di informazione se ne dà comunque la descrizione, che comprende anche alcuni speciali codici di allarme CN aggiunti per l'occasione.
Z32 supporta uno speciale comando per DNC "strutturato" che consente di ordinare l'esecuzione parziale di un file in DNC (DNC con specifica di zona).
L'uso di questa estensione è consentito solo in ambiente di rete e con applicativi Windows appositamente sviluppati. Non funziona (genera un allarme CN) se usata con gli applicativi attuali (Zterm e Terms).
La prestazione è legata all'istruzione evoluta :L254, la cui sintassi per esteso è:
!:L254-nome_file_su_disco[puntatore_inizio--puntatore_fine]!
Ossia, si possono aggiungere tra parentesi quadre, dopo il nome del file su
disco, i puntatori inizio e fine della zona da trasmettere, separati da un
doppio segno meno.
I puntatori identificano la posizione del carattere iniziale della prima e
dell'ultima riga da trasmettere.
Il primo carattere del file ha il puntatore = 1 (non = 0!).
Se i due puntatori sono identici viene trasmessa un'unica riga.
Sono accettate anche le due stringhe "START" e "END" che
specificano inizio e fine file, per esempio:
!:L254-PRG126.ISO[312--82468]
!:L254-PRG126.ISO[START--4743]
!:L254-PRG126.ISO[2810--END]
I codici allarme CN legati a questa prestazione (che saranno comunicati a Z32 dallo speciale applicativo Windows) sono:
CN6514 :L CON [ ]: ERRORE SINTASSI
CN6614 :L CON [ ]: PUNTATORI NON A INIZIO RIGA
CN6714 :L CON [ ]: PUNTATORI OLTRE FINE FILE
CN6814 :L CON [ ]: PUNTATORE INIZIO MAGGIORE DI FINE
:P, :D Stampa da part-program su video di
stringhe e valori parametri
Istruzione evoluta :P
Si può utilizzare un campo di riga evoluta con le sintassi:
!:P n1 - n2 "stringa" [espressione] ...!
:P è l'apertura del campo speciale ("P" come Print)
n1 è la posizione carattere iniziale (min 0, max 158)
- è il tratto (segno meno) di separazione tra n1 e n2
n2 è la posizione carattere finale (min n1+1, max 159)
"stringa" è una stringa ascii racchiusa tra doppi apici
[espressione] è un'espressione algebrica tra parentesi quadre
! è il carattere di apertura e chiusura campo (è valido anche il ";",
escluso inizio riga).
:Pn1-n2 sono obbligatori.
n1 ed n2 individuano i caratteri delle stringhe video
di visualizzazione speciale (sono disponibili due intere righe, quindi 160
caratteri al massimo.
I caratteri tra n1 ed n2 compresi sono cancellati e sostituiti con i dati da
visualizzare.
Stringhe ed espressioni sono opzionali, possono essere ripetuti più volte in
qualsiasi ordine, fino a riempire il numero di caratteri predisposto (n1-n2).
Non viene mai scritto fuori dal campo delimitato da n1-n2. Se la stampa è più
lunga viene troncata senza generare allarme.
Le stringhe possono contenere tutti i caratteri stampabili, salvo il doppio
apice che serve come delimitatore.
Le espressioni possono essere tutte quelle inseribili nel part-program.
I risultati delle espressioni sono stampati senza zeri iniziali e con un
massimo di 3 cifre decimali. Il massimo risultato visualizzabile è 999999,999.
Risultati superiori sono saturati al massimo senza dare allarme CN.
Non ci sono spazi né prima né dopo i risultati delle espressioni. Eventualmente
aggiungerli.
Se n1 o n2 sono incongruenti, mancano i caratteri di delimitazione ecc. viene
allarme CN 1D14.
Dopo che è stato richiesta una visualizzazione con :P
le visualizzazioni da logica sono congelate (anche nella zona fuori da n1-n2).
Per cancellare i dati visualizzati e riprendere le eventuali visualizzazioni di
dati di logica si deve programmare nel part-program un campo di riga evoluta
con la forma seguente:
!:P /R!
Esempi:
!:P0-30 "HA="[HA]" HB="[HB]!
Visualizza i due parametri HA e HB, con descrizione.
!IF HA<0;:P0-60"VALORE ERRATO DI HA = "[HA]!
Visualizza solo se HA<0
!:P20-80"Risultato: "[12*4-PAR[18]+CS(HB-30)]!
D. ELECTRON 5-19
CNC Z32 Programmazione Cap.5 - Righe evolute, salti, condizionamenti,
Read/Write
Visualizza il risultato dell'espressione
Istruzione evoluta :D
La visualizzazione dei dati sul video con la istruzione di riga evoluta :P ha queste limitazioni:
-c'è un conflitto con le visualizzazioni di logica perché la stringa viene stampata nella stessa zona dello schermo
- la stampa non è sincronizzata con la reale posizione del part-program, per il
solito serbatoio di istruzioni preelaborate
Se è necessario ovviare a queste limitazioni si può usare l’istruzione :D
(mnemonico Display) al posto di :P, che mantiene la stessa sintassi della
precedente e che non ha più entrambe le limitazioni sopra descritte.
La stampa di :D avviene nelle righe delle visualizzazioni speciali (quelle che si attivano con CTRLR-V) e che sono raramente utilizzate. Se sono attive le visualizzazioni CTRLR-V il contenuto di :D viene momentaneamente non presentato.
La sintassi di :D è la stessa del precedente :P.
!:D n1 - n2 "stringa" [espressione] ...!
:D è l'apertura del campo speciale ("D" come Display)
n1 è la posizione carattere iniziale (min 0, max 158)
- è il tratto (segno meno) di separazione tra n1 e n2
n2 è la posizione carattere finale (min n1+1, max 159)
"stringa" è una stringa ascii racchiusa tra doppi apici
[espressione] è un'espressione algebrica tra parentesi quadre
! è il carattere di apertura e chiusura campo (è valido anche il ";",
escluso inizio riga).
:Pn1-n2 sono obbligatori.
n1 ed n2 individuano i caratteri delle stringhe video di visualizzazione
speciale (sono disponibili
due intere righe, quindi 160 caratteri al massimo.
I caratteri tra n1 ed n2 compresi sono cancellati e sostituiti con i dati da
visualizzare.
Se il numero di caratteri è dispari viene aggiunto un blank in coda.
Stringhe ed espressioni sono opzionali, possono essere ripetuti più volte in
qualsiasi ordine, fino a riempire il numero di caratteri predisposto (n1-n2).
Se la stampa sconfina fuori dal campo di n1-n2 viene troncata senza generare
allarme.
Le stringhe possono contenere tutti i caratteri stampabili, salvo il doppio
apice che serve come delimitatore.
Le espressioni possono essere tutte quelle inseribili nel part-program.
I risultati delle espressioni sono stampati senza zeri iniziali e con un
massimo di 3 cifre
decimali. Il massimo risultato visualizzabile è 999999,999. Risultati
superiori sono ridotti al massimo senza dare allarme CN.
Non ci sono spazi né prima né dopo i risultati delle espressioni. Eventualmente
aggiungerli
Se n1 o n2 sono incongruenti, mancano i caratteri di delimitazione ecc. viene
allarme CN 1D14.
La cancellazione dei dati si ottiene col campo di riga evoluta !:D /R!
Esempi:
!:D0-30 "HA="[HA]" HB="[HB]!
Visualizza i due parametri HA e HB, con descrizione.
!IF HA<0;:D0-60"VALORE ERRATO DI HA = "[HA]!
Visualizza solo se HA<0
!:D20-80"Risultato: "[12*4-PAR[18]+CS(HB-30)]!
Visualizza il valore dell'espressione
!IF HA>40;:D /R!
Se HA>40 cancella le visualizzazioni :D
5.5.4 :F Scrittura stringa su file
Il funzionamento del campo è del tutto simile a quello di :P e :D, con la differenza
che il risultato, anziché essere scritto a video viene "accodato" a
un file di Z32.
La sintassi normale è:
!:Fnfile"stringa"[espressione]"stringa"...!
Dove:
nfile = numero file di Z32 (validi da
stringa = stringa di caratteri alfanumerici
espressione = espressione di part-program
La stringa viene accodata al file richiesto, l’espressione viene
calcolata e accodata al file richiesto.
Per i dettagli riferirsi alla sintassi dei campi :D e :P.
Esempio:
HA 45
!:F12"Valore nel punto 4: "[HA*2]!
Nel file 12 viene scritta la stringa:
Valore nel punto 4: 90
Ogni campo :F specifica una intera riga.
Più stringhe ed espressioni possono essere contenute nel campo, fino ad un massimo di 160 caratteri. Gli eventuali caratteri in eccesso sono ignorati.
Sono validi numeri file da
Se il file supera i 64k viene errore cmos.
Con una sintassi speciale si può ottenere la cancellazione totale del file:
!:Fnfile/R!
Esempio:
!:F90/R!
Esegue la cancellazione del file 90.
File documentazione
(“DOC”) per ricerca blocco con blocco opzionale
Una riga di programma che inizia col carattere “/” viene eseguita da Z32 solo se è abilitata dall’apposito
selettore (blocco opzionale).
Se durante l’esecuzione lo stato del selettore non è fisso ma viene cambiato dall’operatore in funzione delle sue esigenze risulta poi impossibile la ricerca blocco perché, anche se l’operatore ricorda le scelte fatte durante l’esecuzione, è praticamente impossibile manovrare il selettore con la rapidità che sarebbe necessaria.
È stata ora introdotta la possibilità di generare un file di “documentazione”, che registra i comandi dati dall’operatore durante l’esecuzione. Queste informazioni rimangono memorizzate nel file e sono utilizzate in ricerca blocco per ripetere le scelte.
Per compatibilità col funzionamento precedente la nuova modalità di esecuzione e ricerca blocco è attivata da uno speciale comando contenuto nel part-program. Se questo comando manca il funzionamento è identico al precedente, sia in esecuzione che in ricerca blocco.
Il funzionamento del file documentazione è diverso in esecuzione, quando il file viene scritto con le scelte dell’operatore, e in ricerca blocco, quando le scelte fatte dall’operatore vengono lette dal file.
Gli eventi che coinvolgono il file documentazione sono:
- comando iniziale di attivazione
- riga con blocco opzionale
- inizio sezione di programma
Attivazione del file “DOC”
L’attivazione del file “DOC” si ha col campo di riga evoluta:
!DOC>nnn!
DOC è il comando di attivazione del file di documentazione
> introduce il file di Z32 dove risiedono i dati di documentazione
nnn è il numero file
Per esempio:
!DOC>102!
Richiede di attivare la documentazione nel file 102
Sono possibili numeri file da
È bene che l’attivazione del file DOC sia inserita a inizio programma,
per coprire tutte le scelte dell’operatore.
In esecuzione gli effetti di questo comando sono:
- il file destinazione viene cancellato se esiste
- viene creato un file destinazione nuovo con una stringa iniziale caratteristica
Esempio di stringa iniziale:
DOC FILE PRG NR 004 20.08.99 18:47
Nella stringa iniziale si riconoscono questi campi:
DOC FILE PRG NR stringa ascii fissa caratteristica del file DOC 004 numero di
programma in corso di esecuzione
20.08.99 data, nel formato gg.mm.aa (giorno.mese.anno) 18:47
ora, nel formato hh:mm (ora:minuti)
Il file in corso di esecuzione è quello base (lanciato con scelta programma),
anche se sono in corso sottoprogrammi o file DNC.
Se a inizio esecuzione è stato scelto il DNC il file in corso di esecuzione è convenzionalmente il numero 254.
In ricerca blocco gli effetti sono:
- il file destinazione viene aperto per lettura
- viene controllata la parte fissa della stringa iniziale
- viene controllato che il numero programma in corso di esecuzione sia lo
stesso della ricerca blocco
-viene controllata la lunghezza della stringa iniziale, ossia data e ora
possono essere qualsiasi ma la lunghezza della riga deve essere di 34 caratteri
Se il risultato del controllo è positivo la ricerca blocco continua in modo normale, e le scelte sono lette dal file DOC, mentre se risultano errori la ricerca blocco continua in un modo speciale: non essendo coerenti i dati contenuti nel file DOC l’operatore dovrà ripetere le sue scelte ad ogni blocco opzionale.
Blocco opzionale
Durante la esecuzione il blocco opzionale viene eseguito o non eseguito a seconda dello stato del selettore esterno.
Se è attivo il file DOC (ossia se in precedenza nel programma c’era
l’attivazione col campo !DOC>...!) la scelta
dell’operatore viene registrata nel file DOC con una riga composta di un
solo carattere, che è “
In ricerca blocco si possono avere tre casi:
-se il file DOC non è attivo la riga viene eseguita o non eseguita secondo lo stato del selettore. Il funzionamento è identico a quello che si aveva con le versioni precedenti
- se il file DOC è attivo senza errori il file DOC viene
aperto e viene ripetuta la scelta fatta durante l’esecuzione. Lo stato
attuale del selettore del blocco opzionale non ha effetto. Se durante la
lettura dal file DOC si rilevano errori il funzionamento passa a quello del
file DOC con errore come descritto al prossimo paragrafo
- se il file DOC è attivo (ossia nel programma è stata incontrata
l’istruzione !DOC>...!) ma con errore viene
generato uno STOP (come con M0) per consentire all’operatore di ripetere
La
Sezionamento
Il sezionamento programma, che è ottenuto con una riga che inizia col carattere “:” seguito dal numero sezione, consente una ricerca blocco molto più rapida, ma i blocchi opzionali nelle sezioni che vengono “saltate” non vengono riconosciuti né decodificati.
Deve quindi essere opportunamente gestito nel file DOC per consentire la sincronizzazione del puntatore in lettura con l’inizio sezione.
In esecuzione la riga di sezionamento genera nel file DOC una riga composta
dal carattere “:” e da cinque numeri che
identificano
Per esempio, la riga di part-program:
:456
genera una riga nel file DOC:
:00456
In ricerca blocco la riga di sezionamento richiede nel file DOC la ricerca della riga corrispondente. La lettura delle scelte operatore riprende con le righe che seguono immediatamente la riga di sezionamento.
Se il file DOC è in errore la riga di sezionamento viene
ignorata ai fini del file DOC: le scelte relative al blocco opzionale saranno
comunque richieste all’operatore con uno STOP programma.
Esempio di part-program e di file DOC relativo
Esempio di part-program con attivazione di file DOC, installato nel file 4:
PROVE FILE DOC%
!DOC>102!
F500
G1X0Y0Z0
/X10
Y5
/X25
Y10
:4567
G0X0Y0Z0
/G1X20
Y10
M2
Dopo l’esecuzione di questo part-program, con blocco opzionale disabilitato, il file 102 (file DOC) è il seguente:
DOC FILE PRG NR 004 21.08.99 16:37
0
0
:04567
0
Gli “
Introduzione parametri di
part-program da tastiera - Istruzione INPUT
Consente di richiedere un parametro all'operatore durante lo svolgimento di un
part-program.
La sintassi per richiedere un parametro all'operatore (che è possibile solo da riga ISO) è:
nomeparam<IN:commento>
dove nomeparam è il nome del parametro richiesto all'operatore, commento è la stringa da presentare all’operatore a chiarimento della funzione del parametro richiesto.
Per esempio questa riga:
HA<IN:PROFONDITA' PASSATA>
Apre una finestra di dialogo con l'operatore del tipo:
<0¦ > IN:PROFONDITA' PASSATA
All’interno della finestra di dialogo viene visualizzato il valore attuale del parametro, per esempio, se HA in quel punto del programma ha valore 5,234 viene visualizzato:
<5.324¦ > IN:PROFONDITA' PASSATA
A tutti gli effetti è come se il numero stampato da Z32 nella finestra di dialogo fosse stato scritto dall'operatore.
Il cursore punta dopo l'ultima cifra del valore
L'operatore può cancellare una o più cifre e sostituirle con quelle desiderate.
Il dialogo con l'operatore avviene attraverso la riga comandi.
L'istruzione di INPUT è una istruzione "con arresto", quindi richiede, prima di essere effettuata, il completamento di tutte le istruzioni pendenti, e non può essere programmata, come tutte le istruzioni con arresto, in punti "aperti" del part-program (correzione raggio, geometria aperta ecc.).
Una volta completate le istruzioni pendenti la riga comandi viene modificata con:
<5.234¦ > IN:commento
dove il campo di 14 caratteri tra parentesi acute contiene il valore del parametro ed il cursore ed è disponibile per l'ingresso dati.
L'operatore può modificare il valore presentato oppure riempire riempire il campo con un nuovo numero da assegnare al parametro e poi premere enter. Se la sintassi è corretta il numero viene acquisito da Z32 e il part-program continua.
Durante la scrittura l'operatore ha a disposizione questi tasti speciali:
- ENTER conferma il valore vecchio come nuovo valore
- BACKSPACE o FRECCIA SINISTRA cancellano l'ultima cifra e si entra nella
modalità “editing” del valore: è come se tutti i caratteri residui
del valore vecchio fossero stati battuti dall’operatore.
- qualsiasi altro carattere provoca la cancellazione di tutto il valore vecchio
presente nella finestra di input.
Nella modalità “editing” valore:
- ENTER conferma valore introdotto
- 0 1 2 3 4 5 6 7 8 9 + - , . sono accettati per la composizione o modifica del
valore.
- ESC o DEL cancellano tutto e fanno ripetere daccapo.
Se il numero non è accettabile (per esempio potrebbe essere un numero con
troppe cifre significative) compare un carattere "?" a destra che
invita l'operatore a correggere il dato.
Collegato all'istruzione di input c’è l’allarme CN6314 <IN:...> STRINGA NON VALIDA.
L'introduzione del parametro è attiva sia in esecuzione che in ricerca blocco.
Per la ricerca blocco è interessante il collegamento delle istruzioni di
INPUT col file DOC (che è attivato con l'istruzione !DOC>numerofile!).
Se il file DOC non è attivo durante la ricerca blocco viene
richiesto l'INPUT esattamente nello stesso modo come richiesto durante
l'esecuzione.
Se il file DOC è attivo durante l'esecuzione il parametro viene
registrato nel file DOC in modo tale da essere disponibile per l'eventuale
ricerca blocco.
In ricerca blocco se il file DOC è attivo l'INPUT viene
preso dal file DOC, ma se il file DOC risulta corrotto o incongruente l'INPUT
viene richiesto all'operatore, come nel caso di file DOC non attivo.
PROGRAMMAZIONE STRUTTURATA
Le istruzioni di Z32 che interrompono l'esecuzione sequenziale delle righe di
programma sono:
!GON…! Salto ad una riga senza ritorno
!GON…-N…! Salto ad una serie di righe con ritorno
!GOP…! Salto ad un sottoprogramma
!GOP…-N…! Salto ad una riga all'interno di un sottoprogramma
!GOP…-N…-N…! Salto ad una serie di righe all'interno di un
sottoprogramma
Le istruzioni !GON…! non possono essere eseguite
all'interno di un programma eseguito in DNC.
La funzionalità di queste istruzioni dà al programmatore un'ampia libertà,
consentendogli di eseguire salti ovunque all'interno del suo programma (in
avanti e indietro) ma è limitata, per le funzioni !GON…! a programmi residenti nella memoria operativa di Z32 e
quindi a programmi di lunghezza non superiore a 64k bytes.
Per questo sono state aggiunte alcune istruzioni di "programmazione
strutturata" che si affiancano alle istruzioni esistenti e che possono,
con qualche limitazione che vedremo, essere contenute anche in programmi
eseguiti in DNC (quindi di qualsiasi lunghezza).
Le istruzioni di programmazione strutturata sono caratterizzate dal fatto che
la riga che le contiene inizia con i due caratteri "-" consecutivi.
Sono quindi perfettamente compatibili con i programmi esistenti, che darebbero
errore se contenessero questo tipo di righe.
Regole comuni per tutte le istruzioni strutturate sono:
- prima e dopo "--" possono esserci un numero qualsiasi di blank
- possono essere inclusi dei commenti, che sono introdotti dal carattere ";"
Struttura IF – ELSEIF – ELSE
– END IF
Consente l'esecuzione condizionata di serie di istruzioni.
Sintassi completa:
-- IF condizione ;commento
istruzioni
-- ELSEIF condizione ;commento
istruzioni
-- ELSE ;commento
istruzioni
-- END IF ;commento
dove:
- condizione ha tre possibili forme:
1) condizione = espressione1 confronto espressione2
l'esecuzione dello IF è condizionata al confronto tra due espressioni:
- espressione1 ed espressione2 sono le espressioni possibili nella sintassi Z32
(la forma più semplice di espressione è un numero oppure un solo parametro)
- confronto sono gli operatori:
< minore (con segno)
= uguale
> maggiore (con segno)
<=minore o uguale
>=maggiore o uguale
<> diverso
2) condizione = /
l'esecuzione dello IF è condizionata dal selettore del blocco barrato
3) condizione = //
l'esecuzione dello IF avviene solo in ricerca blocco
-istruzioni sono un numero qualsiasi di righe eseguibili da Z32, ossia righe
"ISO", righe evolute, altre istruzioni strutturate
- tra END e IF possono esserci un numero qualsiasi di blank (è riconosciuto
anche ENDIF, senza blank)
- il carattere ";" di chiusura e il commento
seguente sono opzionali
Esempio 1:
--IF HA=0 ;caso 0
HB10
--ELSEIF HA=1
..HB11
--ELSEIF HA=2
HB105
--ELSEIF HA>2
HB1000
--ELSE
HB-1
--END IF
Che assegna valori diversi al parametro HB in funzione del valore del
parametro HA.
Esempio 2:
--IF / ;da eseguire come blocco barrato
G0 Z100
T0 M6 (SCARICA IL MANDRINO)
M2 (FINE PROGRAMMA)
--END IF
Interrompe l'esecuzione del programma se il selettore del blocco barrato è
attivo.
Da notare che la stessa funzionalità potrebbe essere ottenuta senza
programmazione strutturata, anteponendo il carattere "/" alle tre
istruzioni che compongono il corpo dello IF.
Esempio 3:
--IF // ;in ricerca blocco
HA=1 ;in ricerca blocco prende il valore 1
--ELSE
HA=-1 ;valore che prende non in ricerca blocco
--END IF
Assegna due valori diversi al parametro HA, a seconda che siamo o non siamo
in ricerca blocco.
E' evidente che anche in questo caso si potrebbe ottenere la stessa
funzionalità anche senza la programmazione strutturata.
Lo END IF è obbligatorio, mentre sono opzionali gli
ELSEIF (che possono essere in numero qualsiasi) e lo ELSE (che normalmente
chiude le alternative dello IF).
Ci può essere un "nesting" di IF (ossia IF dentro un altro IF) fino a
31 livelli.
Esempio:
-- IF condizione1
istruzioni 1
-- IF condizione2
istruzioni 2
-- IF condizione3
istruzioni 3
-- IF condizione4
istruzioni 4
-- END IF
istruzioni 3A
-- END IF
istruzioni 2A
-- END IF
istruzioni 1A
-- END IF
Si consiglia di "indentare" il programma (ossia spostare a destra le istruzioni allineandole con l'IF a cui appartengono come nell'esempio) per rendere più evidente il flusso delle istruzioni ed evitare errori nella richiusura degli IF con END IF. Fare attenzione che, in programmi con molti IF uno dentro l'altro può non essere semplice trovare dove manca lo END IF.
Un salto a un sottoprogramma azzera momentaneamente il livello di IF, e il ritorno dal sottoprogramma ripristina il livello di IF presente al momento del salto.
Per esempio è perfettamente lecita una struttura di programma così:
--IF condizione1
--IF condizione2
!GOP20!
--END IF
--ELSEIF condizione3
istruzioni3
--END IF
se sono verificate le condizioni 1 e 2 si ha il salto al sottoprogramma 20, e al ritorno non viene eseguito lo ELSEIF, anche se la condizione3 è verificata.
E' lecito inserire un G26 (ritorno dal sottoprogramma) all'intero di un ciclo di IF. Il ritorno dal sottoprogramma ripristina comunque il livello di IF del programma al quale si fa ritorno. Per esempio è lecito in un sottoprogramma:
--IF condizione1
--IF condizione2
--IF condizione3
G26
--END IF
--END IF
--END IF
In questo caso il ritorno dal sottoprogramma G26 avviene correttamente al livello 3 di IF nel sottoprogramma, i due livelli di IF più bassi sono scartati e l'esecuzione riprende nel programma o sottoprogramma chiamante al corretto livello di IF del chiamante.
Un M2 (fine programma) può essere eseguito a livello di IF non zero. Per esempio è corretto:
--IF condizione1
M2
--END IF
Se viene programmato END IF senza che ci sia un IF aperto viene allarme CN6B14 "END DI -IF NON APERTO"
Analogamente, se viene programmato ELSE o ELSEIF senza che ci sia un IF aperto viene allarme CN7314 "--ELSE O --ELSEIF DI IF NON APERTO"
Attenzione: se il file termina durante un IF che non viene eseguito si possono avere allarmi vari di difficile interpretazione. Vedere l'istruzione --OUT che aiuta la comprensione di questi casi.
Attenzione: non possono coesistere nello stesso programma o sottoprogramma istruzioni strutturate IF e istruzioni !GON…, altrimenti viene l'allarme CN 7114 INCOMPATIBILI --IF E --DO CON !GON....!
Il salto a un sottoprogramma azzera la condizione di strutturato/non strutturato, quindi è possibile da un programma con istruzioni strutturate saltare a un sottoprogramma che contiene istruzioni tipo !GON… e viceversa.
E' anche lecito, da un programma che contiene istruzioni strutturate, eseguire un salto a un sottoprogramma con specifica della riga o di una serie di righe.Per esempio sono leciti:
--IF condizione
!GOP10-N35!
--END IF
oppure:
--IF condizione
!GOP10-N35-N70!
--END IF
Da notare che nel sottoprogramma P10 sarà immediatamente eseguito il salto ad una riga o ad una serie di righe, quindi in questo sottoprogramma non saranno possibili istruzioni strutturate tipo
–IF .
Struttura DO – EXIT DO - LOOP
Consente la ripetizione condizionata di una serie di istruzioni.
Sintassi completa:
-- DO ;commento
istruzioni
-- EXIT DO IF condizione ;commento
istruzioni
-- LOOP IF condizione ;commento
dove:
- condizione è costituito da espressione1 confronto espressione2 come per lo
IF. Non sono ammesse le condizioni "/" e "//" che sono
invece possibili per lo IF - lo EXIT DO è opzionale
- il LOOP è obbligatorio
- IF condizione dopo EXIT DO e dopo LOOP è opzionale
- i blank tra EXIT DO IF e tra LOOP IF sono opzionali (sono accettati anche
EXITDOIF, EXIT DOIF, LOOPIF)
Esempi semplici:
G0 X0 Y0
--DO
X<X+5>
..Y<Y+5>
--LOOP IF X<20
fa una gradinata fino a X20 Y20 (termina col movimento da Y15 a Y20)
G0 X0 Y0
--DO
X<X+5>
--EXIT DO IF X>=20
Y<Y+5>
--LOOP
gradinata simile alla precedente, che termina col movimento da X15 a X20, con Y=15
Un ciclo di DO consuma un livello di subroutine (come il !GOP.. e il !GON-N) e quindi viene allarme
CN2E14 TROPPE SUBROUTINES
se il "nesting" delle subroutines supera il massimo di 19 livelli
consentiti.
Più cicli di DO possono essere uno dentro l'altro; il nesting ammesso è quello totale delle subroutines
E' lecito inserire cicli di DO a livello di IF non zero, così come è lecito inserire IF (fino a 31 livelli) dentro un ciclo di DO.
Il LOOP deve essere allo stesso livello di IF del DO al quale si riferisce, altrimenti viene errore CN 7414 "--LOOP DURANTE --IF APERTO". Per esempio:
--DO
--IF condizione
--LOOP ;questo loop è errato perché viene in un IF aperto: dà allarme
CN7414
--END IF
Invece lo EXIT DO può essere all'interno di un livello di IF, per esempio:
--DO
--IF condizione
--EXIT DO
--END IF
--LOOP
In questo caso lo EXIT DO chiude tutti I livelli di IF e l'esecuzione riprende dopo il LOOP
Anche l'istruzione DO può essere contenuta in un programma eseguito in DNC, ma in DNC c'è una limitazione alla lunghezza delle istruzioni che sono contenute nel corpo del DO: in DNC il corpo del DO (le istruzione comprese tra DO e LOOP) non può superare i 44k, altrimenti viene allarme CN7614 "CORPO --DO TROPPO GRANDE IN DNC"
Se viene programmato LOOP senza che ci sia un DO
aperto viene allarme CN6E14 "LOOP SENZA DO" Se viene programmato EXIT
DO senza che ci sia un DO aperto viene allarme CN7214"EXIT
SENZA DO".
Struttura GOTO – LN
Consente di saltare una serie di istruzioni.
Sintassi:
-- GOTO LN espressione ;commento
istruzioni
-- LN espressione ;commento
dove:
D. ELECTRON
CNC Z32 Programmazione Cap.6 - Funzioni di programmazione strutturata
- espressione è una qualsiasi espressione eseguibile da Z32 (la più semplice
è un numero)
- i blank tra GOTO e LN sono opzionali (è accettato anche GOTOLN)
- i ";" e i commenti sono opzionali
Dopo il GOTO sono saltate tutte le istruzioni fino alla riga destinazione LN,
che è caratterizzata da un'espressione di valore numerico identico a quello
dell'espressione del GOTO.
La riga destinazione LN può essere solo in avanti nel programma rispetto alla
riga GOTO.
Esempio:
--GOTO LN 20 ;commento
istruzioni
--LN 20 ;commento
Si raccomanda attenzione nel caso di espressioni che contengono valori non interi, che potrebbero dare un comportamento inaspettato.
Per esempio, non funziona:
-- GOTO LN 0.9 ;commento
istruzioni
-- LN 1-0.1 ;questa riga non viene trovata!
La spiegazione è che le espressioni sono valutate da Z32 in un formato floating point binario troncato (non arrotondato), e che in questo formato i semplici numeri decimali 0,9 e 0,1 sono periodici (hanno un numero infinito di decimali) e quindi sono rappresentabili solo in forma approssimata.
E' come se con notazione decimale con 4 cifre significative si volesse
confrontare il numero
2/3 con 3-1/3
2/3 vale 0,6666
1/3 vale 0,3333
3-1/3 vale 0,6667, che è diverso da 0,6666.
Si consiglia quindi di usare sempre espressioni intere, oppure valori numerici espliciti, che danno un'assoluta certezza di funzionamento.
Attenzione: se il file termina senza che sia trovata la riga destinazione si possono avere allarmi vari di difficile interpretazione. Vedere l'istruzione --OUT che aiuta la comprensione di questi casi.
Attenzione: non possono coesistere nello stesso programma o sottoprogramma istruzioni strutturate DO e istruzioni !GON…, altrimenti viene l'allarme CN 7114 INCOMPATIBILI --IF E -
DO CON !GON....!
Per i dettagli, vedere
DEFINE – END DEFINE
Consente di inviare allo Z32 come file di sottoprogramma una serie di
istruzioni.
Sintassi:
-- DEFINE P numero ;commento
istruzioni
-- END DEFINE ;commento
dove:
- numero è un intero da
-non è possibile sovrascrivere il programma o sottoprogramma attualmente in
esecuzione né programmi ai quali si deve fare ritorno (per esempio, se si sta
eseguendo il sottoprogramma 25 che è chiamato con un !GOP! dal sottoprogramma
20, che a sua volta è chiamato con un !GOP! dal
programma 1, non sono scrivibili i files 1, 20, 25)
- i caratteri ";" e i commenti sono opzionali
- i blank sono opzionali (sono accettati anche DEFINEP e ENDDEFINE)
Esempio:
-- DEFINE P32 ;ciclo fisso di foratura speciale
CICLO FISSO DI FORATURA SPECIALE %
G0 Z<Z-30>
G1 Z<Z-20>
G4 TT.3
G0 Z<Z+50>
G26
-- END DEFINE
Questa struttura è destinata soprattutto ad editor evoluti, che inseriscano in un part-program (per esempio da inviare in DNC) anche macro o cicli fissi che possono non essere reperibili tra le macro o i cicli fissi di sistema.
All'interno di un DEFINE non può essere inserito un altro DEFINE, altrimenti viene allarme CN6C14 "DEFINE GIA APERTO".
Se si definisce un sottoprogramma con numero > 119,
oppure il programma o sottoprogramma in esecuzione, oppure uno dei programmi ai
quali si deve fare ritorno, viene errore CN7714
"ERRORE FILE NON SCRIVIBILE".
Se il numero file è irregolare (0 o con decimali o negativo …) viene
allarme CN1D14
"ERRORE PROGRAMMA"
Se si trova un END DEFINE con DEFINE non aperto
viene allarme
CN6A14 "DEFINE NON APERTO"
All'interno di un DEFINE possono esserci istruzioni qualsiasi, strutturate e non strutturate (ad eccezione di --OUT che serve per verificare la chiusura del DEFINE), ma anche addirittura errate, che sono completamente ignorate in questa fase di scrittura nel file di Z32. Se risulteranno errori di esecuzione saranno messi in evidenza quando il sottoprogramma sarà eseguito.
Attenzione: se manca lo END DEFINE la scrittura prosegue fino a fine file e quindi si possono avere allarmi vari di difficile interpretazione. Vedere l'istruzione --OUT che aiuta la comprensione di questi casi.
Istruzione OUT
Consente di dare allarme se l'esecuzione prosegue oltre la fine del file o del
programma in
DNC.
Sintassi:
-- OUT
Se viene incontrata questa istruzione viene un allarme CN 1D14 "ERRORE PROGRAMMA".
L'allarme viene in ogni caso, sia che questa riga debba
essere eseguita sia che questa riga
debba essere saltata per corpo di IF da non eseguire o per OTO (anche dentro un
DEFINE).
Scopo di questa istruzione è rendere più chiaro il fatto che c'è stato un
tentativo di leggere oltre
la fine del file. Se la programmazione è corretta questa riga è del tutto
inutile.
Se però questa riga non viene inserita e c'è un errore di programmazione tale da proseguire la lettura del programma oltre fine file (per esempio: un IF con condizione non vera che non è chiuso dallo END IF, un GOTO a una LN che non viene trovata, un DEFINE senza un END DEFINE) si ha:
- nel caso di esecuzione da file interno, viene un errore CN1D14 ERRORE
PROGRAMMA su una riga nulla, perché viene letto il
carattere 04 hex di chiusura del file che non è ammesso nelle righe di un
part-program
-nel caso di esecuzione da file interno con file chiuso irregolarmente
(mancante di carattere 04 hex) viene un errore CMOS 5, lettura oltre fine file.
Nota: il file di Z32 può essere chiuso irregolarmente (mancante di carattere 04
hex) se è creato con un editor esterno, e viene
inviato a Z32 con i normali mezzi di comunicazione
- nel caso di esecuzione da DNC si ha un arresto in
attesa di ulteriori istruzioni
In nessuno di questi casi è facile capire immediatamente che si sta leggendo
oltre fine file: se si inserisce la riga --OUT, che da' un errore programma e
viene evidenziata come riga errata, si ha una migliore comprensione del
problema.
Questa riga deve essere inserita a fine file, dopo l'ultima istruzione eseguibile (normalmente M2 o G26). Per esempio:
M2
-- OUT
oppure:
G26
-- OUT
Istruzione WAIT
La funzione strutturata "WAIT" (da usare dall'utente finale su
specifiche del costruttore) ha sintassi:
--WAIT condizione
dove la condizione è del tipo: espressione1 confronto espressione2
dove espressione1 ed espressione2 sono le espressioni matematiche accettate da Z32, e confronto è espresso da una delle condizioni "<", ">=", "=", ">=", ">". Per esempio:
--WAIT PAL[20] = 0
Dove le espressioni sono ridotte al loro essenziale (un parametro e una costante).
Lo scopo di questa istruzione, che arresta la lettura del part-program fino a che la condizione non è verificata, è sincronizzare il part-program col PLC di macchina con la minima perdita di tempo.
L'istruzione WAIT è compatibile anche con profili aperti, correzione raggio ecc., ma il progettista del PLC deve prendere tutte le precauzioni necessarie che tengano conto del fatto che la lettura del part-program può essere molti blocchi avanti rispetto all'esecuzione.
Per esempio, ammettiamo di trasmettere ordini al PLC con PAL[1] e di operare il sincronismo con G112. Il part-program potrebbe essere:
G112 (svuota dalle istruzioni in corso)
PAL[1]<1+8+64+256+512> (accende i bit 0,3,6,8,9)
PAL[20]1 (sync)
--WAIT PAL[20]=0 (il PLC conferma di aver letto i bit contenuti in
PAL[1])
Naturalmente il PLC deve operare velocemente (sezione a 2 millisecondi) per il massimo risparmio di tempo.
Subroutines temporanee
Per consentire una migliore gestione dei programmi e dei sottoprogrammi, delle
macro, dei cicli fissi, è stata introdotta una nuova importante risorsa per il
CNC Z32: le subroutines temporanee che nel seguito per brevità chiameremo
subtemp.
Questa risorsa è stata creata espressamente per l'uso nell’interfaccia utente Z-flash ma è disponibile anche per programmazione manuale.
Le subtemp sono files interni di Z32 molto simili come struttura ai files CMOS, ma con importanti differenze.
Nei paragrafi che seguono si descrivono le caratteristiche delle subtemp. 1)
Una subtemp si crea con un --DEFINE ed appartiene al
part-program che
S…
Per esempio:
…
-- DEFINE S20
(CICLO FISSO SEMPLICE DI FORATURA)
G0 Z<HA>
G1 Z<HB>
G0 Z<HA>
G26
-- END DEFINE
…
Si noterà che questo DEFINE si affianca a quello già introdotto per i files CMOS (DEFINE P…): una delle differenze sostanziali è che le subtemp sono risorse "nuove", che quindi non vanno a turbare la struttura dei files CMOS di installazioni già consolidate.
Una subtemp è generata da un part-program e ne segue la vita: è, come dice il nome, "temporanea" in quanto scompare quando il part-program cessa o, a maggior ragione, se la macchina viene spenta.
3) Sono possibili fino a 64 subtemp per ogni processo, come si cancella una subtemp
Contrariamente ai files CMOS che, una volta creati, sono accessibili da qualsiasi processo, una subtemp è accessibile solo dal part-program e dal processo che l'ha generata.
Per esempio, in una macchina multiprocesso, se sono contemporaneamente in esecuzione due part-program, uno sul processo 0 e uno sul processo 1, i due part-program possono definire due diverse subtemp con lo stesso numero (per esempio DEFINE S3) senza che le due subtemp interferiscano tra loro.
Sono possibili fino a 64 subtemp per ogni processo (numerate da
Non esiste un'istruzione specifica per cancellare una subtemp, ma in caso di necessità si può sovrascrivere una subtemp già definita con un'altra nuova. In pratica l'equivalente della cancellazione di una subtemp si può ottenere sovrascrivendo una subtemp con una nulla.
4) Lo spazio totale disponibile è 1 Mb, la singola subtemp può arrivare a max 240 kb
Lo spazio di memoria disponibile per le subtemp (comprensive di tutti i processi) è di 1Mb.
Una singola subtemp può avere una lunghezza massima di 240k.
E' da notare che le subtemp sono destinate all'uso come cicli fissi e macro di sistema, quindi nell'uso "normale" non dovrebbero essere di grande lunghezza.
5) Cautele nella cancellazione di subtemp
In prima approssimazione si consiglia, finché ciò è possibile, di non cancellare e non sovrascrivere mai le subtemp, anche se apparentemente già usate: si ricorda che per effetto dell'anticipo della lettura delle righe rispetto alla loro esecuzione, sono sempre presenti un certo numero di righe già lette ma in attesa di esecuzione.
Poiché l'operazione DEFINE è un'operazione di lettura, se si cancella immediatamente una subtemp dopo averla letta, si possono avere problemi di visualizzazione (che può risultare errata) se il vecchio file viene soprascritto con un altro.
Poiché lo spazio di 1 Mb complessivo e la possibilità di 64 subtemp per
processo appaiono più che sufficienti per le necessità di part-program
"normali", si consiglia di numerare le subtemp a partire da
Se ci fossero necessità diverse, si consiglia comunque di cancellare le subtemp più vecchi tra quelle che non servono più, per evitare i problemi di visualizzazione sopra descritti.
6) Nelle subtemp non è ammesso il carattere $ di concatenazione, le righe sono di 240 caratteri
All'interno di una subtemp la lunghezza massima della riga è quella standard di Z32, ossia di 240 caratteri.
Contrariamente a quello che accade per i files CMOS, una riga subtemp non può essere concatenata con un'altra riga col carattere "$".
7) Nuove istruzioni per le subtemp: !GOS…!, G27S…
Dopo essere stata installata in memoria con l'istruzione --DEFINE S… una subtemp può essere richiamata, con istruzioni analoghe a quelle che richiamano i files CMOS di Z32:
!GOS…! (analoga alla !GOP…! per i files CMOS), per esempio:
!GOS2!
per fare un salto alla subtemp come sottoprogramma (il G26 di fine subtemp provoca il ritorno al programma chiamante).
!GOS…-N…-N…! (analoga alla !GOP…-N…-N…! per i files CMOS), per esempio:
!GOS2-N1-N20!
per fare un salto alla subtemp come sottoprogramma ed eseguire una serie di righe (il raggiungimento della riga fine provoca il ritorno al programma chiamante).
G27S… (analoga alla G27P… per i files CMOS), per esempio:
G27S8
per attivare una subtemp come ciclo fisso.
Da notare che le istruzioni G27C0 e G27S0 che annullano il ciclo fisso sono
bivalenti, ossia entrambe annullano sia i cicli fissi di CMOS che i cicli fissi
di subtemp. In altre parole, sia per annullare un G27S… che per annullare
un G27C… si può usare indifferentemente G27C0 e
G27S0.
All'interno di una subtemp sono ammesse (con le stesse modalità valide per i
files CMOS) le
istruzioni !GON…!, !GON…-N…!, !GOP…!.
8) Le subtemp sono sempre di utente, non possono essere di sistema
Z32 ha dei meccanismi di protezione di prestazioni critiche di sistema che
sono ammesse in sottoprogrammi "di sistema" (file CMOS da
Le subtemp sono sempre di utente, quindi da una subtemp non sono utilizzabili le risorse protette di sistema.
9) Da una subtemp non si possono attivare sezioni locali di utensili, origini, parametri
All'interno di una subtemp non sono attivabili le sezioni locali utensili, origini, parametri.
Si ricorda che le sezioni locali si attivano, da un file CMOS, con le
istruzioni G37TL (utensili),
G37OL (origini) e G37PL (parametri); se si usano queste istruzioni in una
subtemp viene allarme
CN7914 ERRORE SUB TEMPORANEE.
10) La G110 (macro di vuotatura) è incompatibile con le subtemp
La G110 (macro di vuotatura) è del tutto incompatibile con le subtemp,
quindi viene allarme
CN7914 ERRORE SUB TEMPORANEE se la G110 è programmata all'interno di una
subtemp
oppure se il chiamante della G110 è una subtemp.
11) Non è possibile la ricerca blocco con stringa all'interno di una subtemp
Non è possibile una ricerca blocco con stringa all'interno di una subtemp, ossia non c'è il corrispondente del comando P… dell'attività 3 di ricerca blocco.
CICLI FISSI
I cicli fissi dello Z32 sono organizzati a sottoprogrammi: essi sono completamente modificabili e adattabili alle esigenze della macchina utensile controllata dallo Z32.
Abbiamo visto nel capitolo “Funzioni preparatorie G” che i cicli fissi sono attivati programmando:
G27C...
Dove
La C di seguito a G27 non è un parametro, ossia l'eventuale parametro C... programmato in precedenza non viene modificato, e il numero di ciclo fisso non può essere letto nel parametro C.
Sono possibili due tipi di ciclo fisso:
cicli fissi di SISTEMA (da
cicli fissi di UTENTE (da
I cicli fissi di sistema sono inseriti nella parte
protetta della memoria permanente dello Z32:
essi sono programmati dal costruttore della macchina utensile, e non devono
essere modificati dall'utente finale: quando il numero del ciclo fisso attivato
è da
Durante l'esecuzione di un ciclo fisso di sistema è arrestato il numero progressivo (ossia non si può ricercare un blocco all'interno di un ciclo fisso di sistema) e non sono visualizzate le righe di programma eseguite (salvo che il CN sia messo nel modo 'assistenza' con l'apposita procedura).
I cicli fissi di utente possono essere programmati direttamente dall'utente finale, secondo sue particolari esigenze di lavorazione: quando il numero di ciclo fisso attivato è 31 o superiore automaticamente lo Z32 ricerca un ciclo fisso di utente, che deve essere un sottoprogramma residente in memoria col numero uguale a quello del ciclo fisso attivato.
Per esempio, con l'istruzione:
G27C100 si attiva il ciclo fisso che sta nel 'file’ col numero 100.
I cicli fissi utente non arrestano il numero progressivo (salvo l'uso di G36H e G36S) e non arrestano la visualizzazione delle righe: può perciò essere ricercato (sempre salvo G36H/S) un blocco all'interno di un ciclo fisso utente.
I sottoprogrammi CICLO FISSO sono inseriti in memoria come tutti i programmi, sottoprogrammi e tabelle, ossia tramite EDITOR o tramite ingresso da periferica esterna.
Una volta attivato un ciclo fisso, esso è eseguito automaticamente dopo ogni posizionamento IN RAPIDO programmato. Gli eventuali movimenti in lavoro non fanno eseguire il ciclo fisso, anche se c'è un ciclo fisso attivo.
Non è possibile richiamare un ciclo fisso all'interno di un ciclo fisso: gli eventuali movimenti in rapido programmati all'interno del ciclo fisso non provocano, dopo la loro esecuzione, un salto al ciclo fisso.
All'interno di un sottoprogramma 'ciclo fisso' possono essere programmate tutte le funzioni dello Z32 (inclusi movimenti assi in rapido o in lavoro, soste, cambi utensili, funzioni ausiliarie...).
I cicli fissi sono disattivati programmando:
G27C0 ciclo fisso zero
G27X
Programmando : G27X si sospende il ciclo fisso attivo. G27X è valida solo nel blocco in cui è Stop programmata.
ciclo fisso
Il salto a un ciclo fisso consuma un livello di salto con ritorno. Vedere anche
il capitolo “Righe evolute” paragrafo ‘Salti’
(GON...-N...).
Nei paragrafi che seguono si danno alcuni esempi di cicli fissi, ed esempi di uso: nella compilazione dei sottoprogrammi di ciclo fisso si è fatto uso, per programmare i movimenti assi, esclusivamente dei parametri: AA AB AC al posto di X, Y, Z: ciò permette l'uso di cicli fissi standard, qualunque sia il PIANO DI LAVORO e l'ASSE su cui si svolgono i cicli fissi.
Poiché i cicli fissi sono inseriti nello Z32 direttamente dal costruttore della macchina utensile, è indispensabile che l'utente finale si riferisca alle istruzioni fornite dal costruttore stesso: i cicli fissi seguenti sono da considerarsi solo esempi didattici.
Esempi Se il programmatore vuole creare i suoi cicli fissi particolari, deve attentamente specificare il didattici di significato dei parametri usati, facendo attenzione di non usare parametri di sistema o parametri a cicli fissi cui siano stati assegnati, nell'organizzazione della macchina, altri significati.
Nel programma principale, prima di attivare il ciclo fisso, si dovranno assegnare ai vari parametri usati i valori voluti, in modo che il ciclo fisso sia eseguito in modo corretto.
Dopo aver attivato un ciclo fisso si possono modificare i valori dei parametri del ciclo fisso: per esempio nel ciclo fisso di foratura del paragrafo seguente si possono fare i primi 10 fori con HC=HA, mentre prima dell'undicesimo foro si può dichiarare una HC superiore in modo da scavalcare un ostacolo frapposto tra i fori 10 e 11.
I cicli fissi si possono richiamare dall'interno di un sottoprogramma, durante l'esecuzione ripetuta di righe ecc.
Foratura
G27C1.... . Composizione:
1. entrata in rapido fino a inizio foro
2. avanzamento in lavoro fino a fine foro
3. ritorno in rapido fino alla quota di uscita
Parametri:
HA inizio foro
HB fine foro
HC uscita lunga
Programma:
CICLO FISSO DI FORATURA%
N1 G0 AC<HA> terzo asse avanza in rapido fino a inizio foro
N2 G1 AC<HB> lavoro fino a fine foro
N3 G0 AC<HC> G26 ritorno rapido e fine sottoprogramma
Si noti il '%' iniziale (necessario), dopo la descrizione (non necessaria).
Foratura con sosta
G27C2.... . Composizione:
1. avanzamento in rapido fino a inizio foro
2. avanzamento in lavoro fino a fine foro
3. sosta
4. ritorno in rapido fino a uscita lunga
Parametri:
HA inizio foro
HB fine foro
HC uscita lunga
TT tempo di sosta
Programma:
FORATURA CON SOSTA %
N1 G0 AC<HA> avanza in rapido fino a inizio foro
N2 G1 AC<HB>G4 lavoro fino a fine foro e sosta TT secondi
N3 G0 AC<HC>G26 uscita lunga in rapido e fine
7.1.3 Foratura profonda
G27C3.... . Ciclo di foratura profonda a incremento costante.
Composizione:
1. avanzamento rapido fino a inizio foro
2. lavoro per una lunghezza pari al diametro punta
3. scarico in rapido fino a inizio foro
4. avanzamento rapido fino alla quota già forata
5. ripetizione del lavoro fino a fine foro
6. ritorno rapido fino a uscita lunga
Parametri:
HA inizio foro
HB fine foro
HC uscita lunga
R raggio utensile
HE uso interno
Programma:
FORATURA PROFONDA%
N1 HE<HA> mette HE a inizio foro
N2 G0 AC<HE> rapido fino a inizio foro da fare
N3 !HE=HE-2*R! incrementa HE di due volte il raggio,
N4 !IFHE<=HB;HE=HB! limitandolo a fine foro
N5 G1 AC<HE> fora fino ad HE
N6 G0 AC<HA> scarico rapido fino a inizio foro
N7 !IFHE>HB;GON2! se non ha finito il foro ripete
N8 G0 AC<HC> HE0 G26 rapido fino a uscita lunga
Maschiatura
G27C4.... . Composizione:
1. avanzamento in rapido fino a inizio foro
2. lavoro fino a fine foro
3. arresto mandrino e sosta
4. inversione mandrino e ritorno in lavoro fino a inizio foro
5. rapido fino a uscita lunga
6. ripristino senso moto mandrino
Parametri:
HA inizio foro
HB fine foro
HC uscita lunga
TT tempo di sosta
Programma:
MASCHIATURA%
N1 G0 AC<HA> M3
N2 G1 G84 AC<HB> M5
N3 G4
N4 AC<HA> M4
N5 G0 G80 AC<HC>
N6 M3 G26
Alesatura con ritorno in lavoro
G27C5..... . Composizione:
1. avanzamento in rapido fino a inizio foro
2. lavoro fino a fine foro
3. ritorno in lavoro fino a inizio foro
4. rapido fino a uscita lunga
Parametri:
HA inizio foro
HB fine foro
HC uscita lunga
Programma:
ALESATURA CON RITORNO IN LAVORO%
N1 G0 AC<HA>
N2 G1 AC<HB>
N3 AC<HA>
N4 G0 AC<HC>G26
Alesatura con ritorno a mandrino
fermo
G27C6.... . Composizione:
1. avanzamento rapido fino a inizio foro
2. lavoro fino a fine foro
3. arresto mandrino e sosta
4. ritorno in lavoro fino a uscita lunga
5. rapido fino a uscita lunga
Parametri:
HA inizio foro
HB fine foro
HC uscita lunga
TT tempo sosta
Programma:
ALESATURA CON RITORNO A MANDRINO FERMO%
N1 G0 AC<HA>
N2 G1 AC<HB> M5
N3 G4
N4 G0 AC<HC>
N5 M3 G26
Barenatura con ritorno a mandrino
orientato
G27C7... . Composizione:
1. avanzamento in rapido fino a inizio foro
2. lavoro fino a fine foro
3. orientamento mandrino
4. decentraggio utensile di
5. rapido fino a uscita lunga
6. marcia mandrino
Parametri:
HA inizio foro
HB fine foro
HC uscita lunga
Programma:
BARENATURA CON RITORNO A MANDRINO ORIENTATO%
N1 G0 AC<HA>
N2 G1 AC<HB> M19
N3 G0 AA<AA-0,1>
N4 AC<HC>
N5 M3 G26
Fresalesatura interna
G27C8.... .
Composizione:
1. avanzamento in lavoro fino a quota lavoro
2. fresalesatura circolare con ritorno al centro
3. rapido fino a uscita lunga
Parametri:
HA quota lavoro
HC uscita lunga
HD diametro foro
R raggio utensile
Programma:
FRESALESATURA INTERNA%
N1 !IFHD<=2*R;UT.GROSSO!
N2 G1 AC<HA>
N3 G2 AA<AA+HD/2-R> AB<AB> I<AA-HD/4+R/2> J<AB>
N4 AA<AA> AB<AB+.001> I<AA-HD/2+R> J<J>
N5 AA<I> AB<J> I<I+HD/4-R/2> J<J>
N6 G0 AC<HC> G26
Nota:
N1 dà errore (il campo !UT.GROSSO! è in errore
sintassi) se il diametro foro non è maggiore del diametro utensile; se invece
il diametro foro è superiore il campo errato non è eseguito, quindi l'errore di
sintassi non è rilevato e quindi il lavoro prosegue regolarmente.
Foratura con entrata/uscita in lavoro
e pausa a fine foro
G27C9.... . Composizione:
1. avanzamento in rapido fino a inizio foro
2. lavoro fino a fine foro
3. sosta
4. lavoro fino a inizio foro
5. rapido fino a uscita lunga
Parametri:
HA inizio foro
HB fine foro
HC uscita lunga
TT sosta
Programma:
FORATURA CON PAUSA E RITORNO IN LAVORO%
N1 G0 AC<HA>
N2 G1 G4 AC<HB>
N3 AC<HA>
N4 G0 AC<HC> G26
SOTTOPROGRAMMI PERMANENTI
G27P.... Nel capitolo precedente abbiamo visto come lo
Z32 permetta l'esecuzione di cicli fissi con un salto automatico al ciclo fisso
attivo dopo ogni posizionamento in G0.
In modo molto simile è possibile generare un salto automatico a un sottoprogramma (che chiameremo permanente) attivo senza necessità di eseguire posizionamenti in G0.
L'attivazione del sottoprogramma permanente (vedere anche capitolo
“Funzioni preparatorie G”) si ha programmando: G27P... dove
KG
esegue
spgr.
programmato in precedenza non viene modificato e il numero di sottoprogramma permanente attivo non può essere letto nel parametro P.
G27P0
disattiva i sottoprogrammi permanenti. All'accensione e dopo il reset è attivo G27P0.
Per il ciclo fisso il salto effettivo si otteneva, dopo l'attivazione, con la programmazione di un movimento in G0: per il sottoprogramma permanente il salto si ottiene programmando (con sottoprogramma attivato) il parametro KG in riga ISO. Per esempio:
...
N10 G27P50
N11 1X0 non esegue il sottoprogramma
N12 KG1 esegue
N13 X10 non esegue
N14 !KG=1! non esegue
N15 KG0 X50 esegue
...
Contrariamente a quanto accade per i cicli fissi (per i quali il salto al
sottoprogramma avviene DOPO l'esecuzione del posizionamento in rapido
programmato) nel caso di sottoprogrammi permanenti
Ciò perché i sottoprogrammi permanenti, come si vedrà nelle applicazioni, sono dedicati proprio alla gestione speciale dei movimenti assi, che possono essere manipolati all'interno del sottoprogramma.
Il valore del parametro KG che genera il salto può essere qualsiasi. Il valore viene passato al sottoprogramma così come programmato: KG può essere controllato all'interno del sottoprogramma ed usato per eseguire varianti di esecuzione.
Il sottoprogramma permanente può essere inserito in qualsiasi file, inclusi
i files protetti (oltre il 128). Anche i sottoprogrammi cicli fissi possono
essere richiamati come sottoprogrammi permanenti: in questo caso i cicli fissi
utente sono chiamati con lo stesso numero (oltre 30), mentre
i cicli fissi di sistema sono chiamati col numero del sottoprogramma (da
Durante l'esecuzione di un sottoprogramma permanente: - non sono visualizzate le righe del sottoprogramma ma resta visualizzata la riga del programma origine - il numero progressivo è regolarmente incrementato (salvo al solito G36H) e quindi è possibile ricercare un blocco all'interno del sottoprogramma permanente
Il salto a un sottoprogramma permanente consuma un livello di salto con
ritorno.
- esecuzione di tratti di profilo ripetitivi
- manipolazioni di moti assi
- geometria piana specializzata
- lavorazioni nello spazio e a 4 o 5 assi
- macchina a elettroerosione a filo a 5 assi
Nei paragrafi seguenti si danno due esempi di uso dei sottoprogrammi permanenti. Si noti come la stessa lavorazione poteva essere eseguita anche in altro modo (per esempio con !GOP...! o con salto a serie di righe): l'uso dei sottoprogrammi permanenti rende il programma più semplice e leggibile.
Esempio 1 - Riga dentata con due tipi di denti
Si deve eseguire un profilo dentato in XY. Ci sono due tipi di denti (uno a
fondo piano e uno a fondo triangolare). Il passo dei denti non è costante.
PROGRAMMA PRINCIPALE %
N0 X0 Y0 Z0 OX1 OY1 OZ1
N1 T10 M6 (FRESA RAGGIO 5)
N2 F500 S2000 M3
N3 G41 X20 Y0 QF0
N4 G1 G27P20 KG1 X50 (DENTE TIPO 1)
N5 X85 Y5 (QUI NON ESEGUE DENTE PERCHÈ NON C'È KG)
N6 KG2 X100 Y0 (DENTE TIPO 2)
N7 KG1 X130 (DENTE TIPO 1)
N8 KG2 X170 (DENTE TIPO 2)
N9 X200
N10 G40
N11 G27P0 M2
SOTTOPROGRAMMA 20
%
N1 G1 X<X> Y<Y>
N2 Y<Y-30>
N3 !IFKG=2;GON7!
N4 !IFKG<>1 ; ERRORE
KG PRG. 20
N5 X<X+20> (ESEGUE FONDO PIANO)
N6 !GON9!
N7 X<X+10> Y<Y-5> (ESEGUE FONDO INCLINATO)
N8 X<X+10> Y<Y+5>
N9 Y<Y+30> (RISALE ALLA QUOTA INIZIALE)
N10 G26
Si noti come non sarebbe stato possibile l'uso di un ciclo fisso per la presenza della correzione raggio (non possono esserci tratti in G0).
Esempio 2 - Programma in XY per macchina a coordinate polari
Si ha una macchina con due assi X (lineare in mm.) e B (rotativo in gradi). Si
vuole programmare il profilo da eseguire programmando i movimenti in X Y in mm., come per una macchina a coordinate rettangolari.
Si noti che il programma qui riportato vuole essere solo una dimostrazione di COME può essere usato il KG, NON una soluzione completa al problema esposto. In particolare nel caso dell'esempio si dovrebbe anche:
- collaudare il programma su una macchina reale
- gestire anche tratti circolari o meglio una geometria più completa (per
esempio
usando KG=1 per segmenti, KG=2 per cerchio orario, KG=3 per cerchio antiorario ecc.)
- controllare l'effetto sulla macchina del passaggio di B da
- gestire la correzione raggio
PROGRAMMA PEZZO
% OX1OB1 F200
N1 G0X50B0 G27P90
attiva le origini, si sposta in rapido al punto di partenza del profilo e attiva il sottoprogramma permanente
N2 G98
inizio interpolazione speciale a tratti rettilinei
N3 KG1 HA50 HB0 X100 Y50
con HA e HB si informa il sottoprogramma sulla posizione precedente degli assi X e Y
N4 KG1 X150 Y0
tratti lineari programmati in XY
...
N20 KG1 X30 Y10
N21 G99 X<X>
fine interpolazione speciale a tratti rettilinei
N22 G27P0 G0 X200 B0
N23 M2
fine sottoprogr. permanente e rapido fino al punto finale
SOTTOPROGRAMMA 90%
genera una sequenza di movimenti lineari nel piano XB risultanti in archi di
spirale nel piano
XY lunghi
!IFKG=1;GON10!
qui possono essere gestiti altri KG
....
ERRORE KG1 SU PROGR.90
N10 HC<X-HA> HD<Y-HB>
HE<RQ(HC*HC+HD*HD)>
distanze da percorrere e lunghezza tratto lineare
HG0 HF<0.5/HE>
HG varierà da
N20!HG=HG+HF!
programmato, HF è il suo incremento per dividere
!IFHG>1;HG=1!
il segmento in tratti di lunghezza costante di
!HX=HA+HC*HG;HY=HB+HD*HG;CP!
X<HR> B<HT>
raggiunge il punto XY incrementato di
!IFHG<1;GON20!
ripete fino a fine segmento
G26
FORMULE PERMANENTI
Caratteristica dello Z32 è di poter programmare parametri e quote assi tramite
formule matematiche, per esempio:
X<HA+Y*0,01>
che significa: assegna al parametro 'X' e alla quota programmata sull'asse X il valore risultante dal calcolo contenuto nella parentesi acuta (valore del parametro HA più un centesimo del valore del parametro Y). I valori dei parametri interessati alla formula sono quelli istantanei al momento in cui il CN analizza la riga.
È possibile imporre allo Z32, per i soli assi continui, di ricalcolare una formula in modo permanente, ossia in tempo reale, durante l'esecuzione dei movimenti programmati, assumendo come valore dei parametri assi il punto istantaneo interpolato, riferito alla origine attiva.
Questa funzione è ottenuta, all'interno di una riga ISO, programmando, sull'asse continuo desiderato, la formula tra doppia parentesi acuta.
Per esempio:
X<<X+0,1*Y>>
Dopo la formula si possono programmare profili, movimenti in rapido ecc. in modo assolutamente normale. I movimenti reali degli assi saranno però variati, al momento della loro esecuzione, secondo la formula introdotta. Nel caso dell'esempio (per terna G25XYZ) si avrà una INCLINAZIONE del 10% a destra di tutta la figura.
Possono essere programmate formule permanenti su tutti gli assi continui e vivi, anche sugli assi non direttamente interessati al movimento. Ciò significa che, se per esempio una macchina ha gli assi X, Y, Z e B, e tutti gli assi sono vivi (vedere funzione G28), programmando sull'asse B una formula che ne lega il movimento agli altri assi, si può avere il moto contemporaneo di quattro assi continui.
Le formule permanenti sono attive sia sui movimenti in lavoro sia sui movimenti in rapido.
L'introduzione di una formula permanente richiede al programmatore alcune precauzioni, che saranno spiegate poi in dettaglio, che derivano dal modo col quale le formule sono inserite nel sistema operativo Z32.
In assenza di formule permanenti, lo Z32 muove gli assi dopo aver compiuto
una serie di elaborazioni che sono:
1) analisi dei punti programmati ed eventuale loro ricalcolo con
rototraslazione, specularità, fattore di scala
2) determinazione delle traiettorie geometriche ed eventuale ricalcolo con
correzione raggio
3) controllo che le traiettorie calcolate siano entro i fine corsa della macchina
4) determinazione delle velocità di esecuzione e degli eventuali rallentamenti in funzione delle velocità programmate, delle curvature e degli spigoli delle traiettorie calcolate
5) interpolazione delle traiettorie in tempo reale (ossia con calcolo dei punti successivi al ritmo di circa 125 volte al secondo)
6) controllo degli errori fisici di inseguimento (sempre 125 volte al secondo) ed invio dei comandi di moto a tutti gli assi vivi, per mantenere la macchina in traiettoria col minimo errore.
A titolo di esempio, si riportano qui di seguito le figure ottenute con alcune formule semplici realizzando un part-program riferito alla figura normale (cerchio con scritta Z32) e introducendo poi le formule riportate in figura.
NORMALE X<<X*0.6>>
Y<<Y+0.03*X*X>>
Y<<Y*0.6>> X<<X+0.3*Y>> Y<<Y*0.6>>
L'introduzione di una formula permanente richiede, tra i punti 5 e 6, un ulteriore passo, che deve essere eseguito 125 volte al secondo:
5a) applicazione delle formule permanenti su tutti gli assi vivi interessati, e calcolo del punto, sulla traiettoria deformata, corrispondente al punto già calcolato sulla traiettoria originaria
Inconvenienti Gli inconvenienti che possono derivare dall'introduzione di una formula permanente sono in pratica:
Velocità - la velocità di esecuzione della traiettoria è costante e corrispondente alla velocità programmata sulla traiettoria originaria. Le accelerazioni sono calcolate per la traiettoria originaria. Sulla traiettoria deformata velocità e accelerazione sono anch'esse deformate e quindi possono risultare sia inferiori che superiori. Ciò impone un controllo ulteriore che la velocità non superi quella di rapido e può portare a errori di inseguimento nel caso che la velocità aumenti troppo in punti critici del profilo
Fine corsa - i fine corsa non devono essere controllati sulla traiettoria originaria ma sulla traiettoria deformata: ciò praticamente significa che i fine corsa devono essere controllati in tempo reale insieme al punto 5a)
- al momento della introduzione della formula permanente ci può essere una differenza anche rilevante tra il punto originario e il punto deformato: per ogni asse su cui è introdotta la formula lo Z32 genera automaticamente un tratto di raccordo iniziale.
Analoga operazione deve essere eseguita al momento della disattivazione
delle formule permanenti
Limitazioni di - tutte le formule permanenti devono essere ricalcolate 125
volte al secondo: ciò pone tempo limitazioni
abbastanza stringenti alla complessità delle formule introdotte.
Contenuto delle formule permanenti
Una formula permanente è costituita da una espressione
matematica, racchiusa tra doppie parentesi acute, contenente: - i quattro
operatori matematici fondamentali:
+ addizione
-sottrazione
* moltiplicazione
/ divisione
- fino a 10 livelli di parentesi
- costanti numeriche (segno, 5 interi, 3 decimali)
- costante 'PI' (PI greco = 3,141592...)
- parametri individuati dal loro indirizzo (es. R, HA ecc.)
- nomi assi individuati dal loro indirizzo (es. X, Y ecc.)
La sintassi di una formula permanente è sostanzialmente la stessa di una formula normale, salvo la esclusione (per ragioni di tempo di esecuzione) delle operazioni matematiche complesse (radice quadrata RQ, seno SN, coseno CS, arcotangente AT).
Esempi di formule formalmente corrette:
X<<X*0,9>> introduce un fattore di scala del 90% sull'asse X
X<<0>> serve a poco: tiene fermo a zero l'asse X
X<<X+1>> sposta di +1mm l'origine X :
appesantisce inutilmente il lavoro del calcolatore. Sarebbe meglio spostare
l'origine oppure introdurre una traslazione (DA)
X<<X+0,001*Y*Y>> introduce una deformazione parabolica sull'asse X
Sintassi della riga ISO con formule
permanenti
Le formule permanenti devono essere inserite in una riga ISO.
In una riga ISO possono essere introdotte più formule permanenti (relative ad
assi diversi).
Esempio:
N100 X<<X*0,95>> Y<<Y*0,965>> Z<<0,126/1000*X>>
Se in una riga ISO vengono definite (per errore!) più formule permanenti su uno stesso asse lo Z32 non dà allarme: resta attiva l'ultima formula permanente programmata.
Nella riga ISO che contiene le formule permanenti possono essere inserite altre istruzioni, che vengono eseguite normalmente: se però sono inseriti moti assi questi non sono eseguiti se compaiono prima della formula, mentre sono eseguiti se compaiono dopo (vedere anche prossimo paragrafo sui raccordi iniziali e finali).
Possono essere aggiunte formule in riga ISO successiva (carattere '!' iniziale, vedere paragrafo seguente).
Attivazione disattivazione variazione
di formule permanenti
Si ha una attivazione di formule permanenti quando si
passa da una situazione di moti assi normali a una situazione di formule
attive. La disattivazione si ha quando si passa da una
situazione di formule attive a una situazione normale. La variazione si ha quando si passa direttamente da un insieme di formule
permanenti a un altro, senza passaggio attraverso la situazione normale.
Abbiamo visto che si possono attivare più formule permanenti, una su ciascun asse continuo della macchina: con formule attive esiste nella memoria del CN un 'insieme' di formule, associate a ciascun asse della macchina. Con formule non attive l'insieme è nullo.
L'insieme delle formule permanenti è un blocco indivisibile, cioè non è possibile variare una sola delle formule (ossia la formula relativa ad un solo asse): una riga ISO che contenga anche una sola formula permanente provoca l'annullamento dell'intero insieme di formule e la sua ricompilazione dall'inizio.
X<<!...>> Se però la formula contiene un '!' iniziale essa viene aggiunta alle formule precedenti.
L'attivazione delle formule permanenti si ottiene con una riga ISO che contenga anche una sola formula permanente. La disattivazione si ottiene programmando tutte formule nulle, la variazione programmando semplicemente le formule.
Per le ragioni che saranno esposte meglio nel paragrafo che segue, al momento della eventuale disattivazione o variazione di formule, tutte le formule permanenti da annullare devono essere programmate.
Esempio:
N1 X<<X*0,96>> B<<B*RX/100>> attivazione: da ora in poi sono attive le formule sugli assi X e B
N50 X<<X*0,9>> Y<<Y*0.8>> B<<>> variazione sull'asse X, disattivazione su B e attivazione su Y
N100 X<<>> Y<<>> disattivazione su tutti gli assi che hanno formule attive, ossia X e Y
Se il programmatore ha necessità di aggiungere formule permanenti a formule già attive, può programmare una nuova formula col carattere '!' iniziale.
Per esempio:
N10 X<<X*.97>>
...
N12 Y<<!Y*.8>>
Se si programma una nuova formula su un asse che ha già una formula permanente, la vecchia formula viene disattivata ma non cancellata dalla memoria: da un punto di vista lunghezza perciò (e dell'allarme CN 3814 FORMULA LUNGA) la nuova formula si aggiunge alla precedente.
Raccordi iniziali e finali
Abbiamo visto che l'attivazione di una formula permanente comporta una
variazione del punto macchina (ossia il punto in cui lo Z32 porta e trattiene
gli assi della macchina) dal vecchio punto al nuovo calcolato con
l'applicazione della formula. Per esempio:
...
N1 X0 Y100 Z0
N2 X<<X*0,9>> Y<<Y*0,8>>
...
Prima dell'istruzione N2 i punti macchina sono 0 per l'asse X e +100 per
l'asse Y, dopo l'attivazione delle formule i nuovi punti sono 0 per X e +90 per
Y: si ha cioè una discontinuità sulla Y di
Il punto di partenza del movimento di raccordo è la quota dell'asse prima dell'attivazione della formula, e il punto di arrivo la nuova quota calcolata con la formula attivata.
Il raccordo viene eseguito come tratto rettilineo in lavoro alla velocità F attiva al momento.
Se sono introdotte più formule relative ad assi diversi, per ognuna delle formule introdotte è inserito un raccordo.
La programmazione di una formula permanente costituisce una ECCEZIONE nel comportamento dello Z32, che esegue il raccordo relativo IMMEDIATAMENTE durante la fase di analisi, e non attende la successiva fase di esecuzione (vedere capitolo "Sequenza di esecuzione di una riga ISO”). I moti dello stesso asse programmati nella stessa riga, ma prima della formula, non sono eseguiti ma sono conglobati nel raccordo.
Questa caratteristica permette, come si vedrà più avanti, di evitare il raccordo associato a una formula permanente.
La situazione è assolutamente analoga nel caso di disattivazione o variazione della formula permanente: anche in questo caso il punto macchina può subire uno spostamento dovuto alla formula e quindi è necessaria l'introduzione del raccordo.
Si noti che la presenza anche di una sola formula permanente in una riga ISO comporta l'annullamento di tutte le formule: poiché il raccordo è calcolato solo per le formule effettivamente programmate, se non vengono 'richiuse' tutte le formule in precedenza attivate, si possono avere allarmi CN 0113 o 0013 dovuti alla discontinuità di movimento risultante.
Negli esempi che seguono, anche con situazioni estreme probabilmente mai utili in pratica, è illustrato il comportamento dello Z32 per quanto riguarda i raccordi.
Esempio 1
...
N10 OX1 OY1 OZ1 X0Y0Z0 F1000 attivazione dell'origine 1 e spostamento degli assi nell'origine
N20 X<<X*0.9>> attivazione della formula permanente: il raccordo
iniziale è nullo perché il vecchio punto (X = 0)
coincide col nuovo punto (X = 0*0.9 = 0).
N30 X100 spostamento a X90 a causa della formula
N40 X<<>> disattivazione formula e raccordo finale da vecchio punto calcolato con la formula (X = 90) al nuovo punto (X = 100)
....
Esempio 2
...
N10 X100Y100Z0 OX1OY1OZ1 F1000
N20 X<<X*O.9>> Y<<Y*0.8>> si ha prima uno
spostamento parallelo dell'asse X da
N30 X200 spostamento dell'asse X da
N40 X<<>> disattivazione della formula X e raccordo finale da X160
a X200. È un errore non avere disattivato anche
N50 X100 l'asse X si sposta correttamente da
N60Y100 si ha un allarme CN 0013 dovuto alla mancata disattivazione della formula Y
...
Esempio 3
...
N10 X100Y100Z0 OX1OY1OZ1 F1000
N20 Y<<Y*0.8>> X<<X*0.9>> la sequenza dei raccordi è
diversa dall'esempio 2 perché diverso è l'ordine di programmazione: prima viene fatto il raccordo Y da
...
Esempio 4
...
N10 X100Y100Z0 OX1OY1OZ1 F1000
N20 !X=50! non si ha movimento dell'asse, ma solo un aggiornamento del parametro X al valore 50
N30 X<<X*0.8>> si ha un raccordo in X da 100 fino al risultato della formula (X=X*0.8) applicata al valore programmato (50), ossia a 40
...
Esempio 5
...
N10 X100Y100Z0 OX1OY1OZ1 F1000
N20 X50 X<<X*0.8>> il risultato è identico all'esempio precedente, ossia il raccordo iniziale va da X100 a X40
...
Esempio 6
...
N10 X100Y100Z0 OX1OY1OZ1 F1000
N20 X<<X*0.8>> X50 si ha un raccordo iniziale da X100 a X80, e successivamente il movimento programmato a X40 (pari a 50*0.8), fatto con formula attiva)
...
Esempio 7
...
N10 X100Y100Z0 OX1OY1OZ1 F1000
N20 X50 X<<X*0.8>> X100 si ha un raccordo iniziale a X40 e, successivamente il movimento programmato a X80 (pari a 100*0.8)
...
Esempio 8
...
N10 X100 Y100 Z0 OX1 OY1 OZ1 F1000
N20 X50 Y40 X<<X*0.7>> Y<<Y*0.6>> X30 Y60
... si ha prima il raccordo in X da
Il programmatore consideri gli esempi 6, 7 e 8 solo come mezzi per meglio comprendere il comportamento dello Z32: non sono esempi da seguire, in quanto complicano inutilmente una riga già complessa che contiene l'attivazione di formule permanenti. I movimenti programmati dopo le formule permanenti possono essere più realisticamente programmati in una riga SUCCESSIVA!
Compilazione delle formule permanenti
Abbiamo visto che le formule permanenti devono essere eseguite 125 volte al secondo. Per ridurre al massimo l'impegno del
microprocessore le formule stesse sono esaminate, ridotte ai minimi termini e
tradotte in linguaggio di macchina in fase di analisi della riga che le
contiene. Si ha cioè una 'compilazione' delle formule che permette la più
veloce esecuzione. In fase di compilazione, oltre agli operatori matematici, si
possono incontrare i seguenti tipi di operandi:
- costanti e parametri
- nomi assi (incognite)
I parametri sono considerati a tutti gli effetti come costanti, e sono introdotti nella formula compilata col valore che hanno al momento della compilazione della formula.
I nomi assi invece devono essere considerati incognite in quanto variano da istante a istante durante il movimento. La funzione del compilatore è quella di ottimizzare la formula eseguendo una volta sola, in fase di compilazione, tutti i calcoli possibili e lasciando (per essere eseguiti 125 volte al secondo) i soli calcoli che coinvolgono le incognite (nomi assi).
Per esempio le formule:
X<<X*0,9>> -X<<3*X*0,3>>
sono eseguite (a livello delle 125 volte al secondo) nello stesso identico tempo: la seconda
formula richiede solo un piccolo impegno supplementare (trascurabile perché eseguito una volta
sola in fase di compilazione) per calcolare il fattore moltiplicativo della incognita X.
In fase di compilazione lo Z32 controlla la lunghezza della formula compilata e il tempo che
richiederà la sua esecuzione: se l'una o l'altro superano il massimo ammesso lo Z32 dà messaggio
ed errore:
<<FORMULA LUNGA>> CN 3814
Tempi di esecuzione
Abbiamo visto che le formule permanenti sono eseguite dallo Z32 per 125 volte al secondo: è perciò necessario uno stretto controllo da
parte dello Z32 delle formule programmate, per evitare il sovraccarico del
microprocessore.
Il massimo di tempo che il microprocessore può dedicare alla esecuzione delle formule permanenti è stato stabilito in 8000 cicli macchina. Ciò corrisponde a circa il 12% del tempo CPU disponibile in totale. Il costruttore della macchina utensile può, se la complessità della macchina e quindi della logica programmabile che la gestisce lo richiede, ridurre questo tempo a un minimo più basso: il programmatore si informi presso il costruttore se è stata operata questa riduzione.
Il calcolo preventivo dei tempi di esecuzione di una formula permanente non è facile: bisogna infatti tenere conto delle semplificazioni e dei precalcoli che lo Z32 opera in fase di compilazione. Per chi voglia avere una idea dei tempi di esecuzione, qui di seguito diamo i tempi approssimativi delle operazioni fondamentali. I tempi sono espressi in cicli macchina: il totale dei tempi di tutte le formule introdotte non deve superare 8000 (o il limite più basso imposto dal costruttore).
Somma 270
Sottrazione 270
Moltiplicazione 620
Divisione 920
Programmazione di incognita170
Tempo fisso per ogni formula 160
Alcune regole di compilazione:
1) più costanti moltiplicate tra loro sono ridotte ad unica costante
moltiplicativa ) i parametri e PI sono da considerare costanti in fase di
compilazione
3) se all'interno di una parentesi sono contenute solo costanti
tutta la parentesi è da
considerare una costante.
Esempi:
X<<HA>> 1 formula = 160
X<<X*0.957>> 1 formula, 1 asse, moltiplicazione=160+170+620=950
X<<X>> 1 formula,1 asse=160+170=330
X<<X*0.9+0.1>> 1 form,1 asse,1 molt,1
som=160+170+620+270=1220
X<<X*0.9>Y<Y*0.8>> 2 form,2 assi,2 molt=320+340+1240=1900
X<<X*(HA+0.1*(HB+0.5))*0.05>> 1 form,1 asse,1 molt= 160+170+620 =950
X<<X-0.1*X>> 1 form,2 assi,1 molt,1 sott=160+340+620+270=1390
X<<X*0.9+Y*(HA+HB+0.1)/3>> 1 for,2 assi,2 molt,1 som=160+340+1240+270=2010
8.1.7 Controllo dei fine corsa
Quando sono attive le formule permanenti, i fine corsa normali dello Z32 (che
consistono nel controllo preventivo che i movimenti programmati non oltrepassino
i limiti) non sono efficienti.
Con formule permanenti attive (quando le formule permanenti sono non attive i fine corsa restano quelli normali) il controllo dei fine corsa è fatto in tempo reale, ossia deve effettivamente prodursi un movimento perché il fine corsa possa intervenire.
I fine corsa con formule attive non funzionano in ricerca blocco (ossia il programma può 'girare’ in ricerca blocco e poi dare errore fine corsa durante l'esecuzione).
Il calcolo dei fine corsa con formule attive tiene conto della velocità di avvicinamento al fine corsa, della distanza dal fine corsa e delle accelerazioni di taratura su ogni asse: l'allarme è dato se la velocità di avvicinamento supera quella che permette la frenatura entro il fine corsa.
L'allarme di fine corsa con formule attive è un allarme di tipo:
CNE.13
dove al posto del punto viene inserito il numero logico dell'asse sul quale il fine corsa è stato rivelato. Per esempio CN E113 significa errore fine corsa con formule attive sull'asse con numero logico 1 (normalmente asse Y).
Controllo delle velocità massime
Con formule attive, la velocità di esecuzione dei movimenti può essere diversa
(in più o in meno) rispetto alla velocità programmata. Per esempio, se si
attiva
A protezione della macchina, in presenza di formule attive, lo Z32 va in allarme se la velocità su uno qualsiasi degli assi supera del 2% il rapido. L'allarme relativo è:
CNF.13
dove al solito al posto del punto viene inserito il
numero logico dell'asse su cui si è rilevata
Con la G108 (vedere capitolo “Funzioni preparatorie G”) si può porre un limite alla velocità massima di interpolazione (la G108 agisce prima delle formule permanenti) e quindi evitare di superare le velocità massime tollerate dalla macchina utensile.
x<<*>> Un modo più efficace per gestire le velocità e le accelerazioni è quello di programmare la formula <<*>> che moltiplica le quote dell'asse per la costante contenuta nel parametro HX.
Per esempio:
HX2 X<<*>>
moltiplica le quote dell'asse X per il fattore 2. La stessa prestazione si può ottenere con la formula:
X<<X*2>>
Si ha però una sostanziale differenza nella gestione della velocità e delle accelerazioni.
Il movimento programmato viene interpolato dal CN sulla traiettoria originale e poi amplificato in funzione del fattore moltiplicativo imposto.
Le limitazioni di velocità e accelerazioni per non superare il rapido e la massima accelerazione di taratura della macchina sono operate sulla traiettoria originale.
La moltiplicazione per due delle quote ottenute con la formula permanente moltiplica anche velocità e accelerazioni: si devono adottare precauzioni per evitare errori di inseguimento eccessivi (per esempio prova pezzo per evitare il rapido).
Nel caso che il fattore moltiplicativo sia minore di 1, si ha l'opposto, ossia le prestazioni dinamiche della macchina non sono più sfruttate appieno.
Nel caso della formula con * le tarature di macchina relative all'asse interessato sono modificate automaticamente(in pratica Rapido e accelerazione massima dell'asse sono divisi per il fattore moltiplicativo) in modo da riportarle a quelle reali di macchina sulla traiettoria reale.
La formula <<*>> è di particolare utilità se usata nel caso di programmazione di profili cilindrici ottenuti con un asse rotante e uno lineare.
Formule attive e G53
Non è ammessa la programmazione di G53 o G54 con formule permanenti attive. Se
ciò viene fatto, il CN dà messaggio e allarme:
<<FORMULA + G53/54>> CN 3914
Tenere conto che spesso il cambio utensile (M6) e altre M speciali richiedono movimenti macchina riferiti all'origine base e che quindi comportano la esecuzione di G53 o G54 nel sottoprogramma automaticamente richiamato. In questi casi le formule permanenti dovranno essere DISATTIVATE PRIMA della programmazione della M.
Applicazioni
Le formule permanenti, pur con le obbiettive difficoltà e le limitazioni sopra
esposte, possono essere utili per eseguire lavori altrimenti difficili se non
impossibili.
Probabilmente la limitazione più sensibile delle formule permanenti è quella della velocità degli assi, che diventa diversa dalla velocità programmata. Come consiglio generale, si faccia in modo per quanto possibile che le formule RIDUCANO PIUTTOSTO CHE INGRANDIRE: per esempio, se si vuole ottenere un movimento ellittico del centro fresa, si moltiplichi l'asse più corto per un numero inferiore a 1, piuttosto che l'asse più lungo per un numero superiore ad 1.
Nel caso di formule che ingrandiscono, usare la G108 per riportare accelerazione e velocità entro limiti tollerabili.
Ellissi
Come mostrato negli esempi all'inizio del capitolo, un cerchio con assi a fattore di scala diverso diventa una ellisse.
ATTENZIONE:
La traiettoria del centro fresa nel caso della contornatura di una ellisse NON è una ellisse. Se si applica un diverso fattore di scala sui due assi e poi si attiva la correzione raggio, non si ottiene una vera ellisse. L'errore di forma è tanto più grande quanto più il raggio dell'utensile si avvicina ai raggi di curvatura del profilo.
Incisioni su un piano inclinato
Si devono fare incisioni su un piano inclinato. Si ammette che il piano di lavoro non sia orizzontale e che l'asse verticale sia lo Z (X e Y gli orizzontali).
L'equazione generica di un piano è:
Z = C1 + C2 * X + C3 * Y
Se si introduce la formula permanente:
Z<<Z+HA*X+HB*Y>>
si lega il movimento verticale dell'asse Z alla posizione orizzontale degli assi X e Y.
Variando opportunamente i coefficienti HA e HB l'utensile si muove esattamente sul piano inclinato.
Incisioni su un cilindro (assi ortogonali)
Si ha una macchina disposta come in figura e si devono eseguire incisioni sul fondo del semicilindro di raggio RB disposto orizzontalmente con asse parallelo alla Y. Le origini sono poste al centro del cilindro.
L'equazione esatta dei movimenti in Z è:
Z= RB*( 1 - (X/RB) - 1)
Mancando la radice quadrata, questa equazione può essere approssimata con una
serie:
Z= RB*[0.5*(X/RB)2+1/8*(X/RB)4+1/16*(X/RB) 6+....]
In prima approssimazione, la formula da programmare può contenere il solo primo
termine,
ossia:
Z<<Z+X*X/2/RB>>
In questo caso l'errore è circa: = RB/8*(X/RB) 4
ossia se RA=50, per X=10 l'errore è circa
GEOMETRIA
Lo Z32 dispone di un completo set di istruzioni per risolvere i problemi di
calcolo di un profilo geometrico comunque complesso.
Vengono programmati con facilità profili costituiti da tratti rettilinei, circolari, con smussi e raccordi.
Con G12 attiva è possibile coordinare ad un movimento nel piano anche un movimento nel terzo asse (vedere paragrafo 5”Profili su tre assi” più avanti su questo capitolo).
I programmi realizzati con la geometria di base dello Z32 con software precedente, possono essere eseguiti anche con la nuova geometria senza alcun cambiamento.
PROFILI GEOMETRICI NEL PIANO
Un profilo geometrico può essere costituito dai seguenti elementi:
- punti
- segmenti di retta
- archi di cerchio
- smussi
- raccordi
Le rette e i cerchi sono considerati tratti di profilo e possono essere definiti come aperti o chiusi; gli smussi e i raccordi possono comparire alla fine del tratto programmato.
La velocità di esecuzione del profilo è gestita dallo Z32 con accorgimenti particolari che vengono approfonditi nel paragrafo “Gestione della velocità” più avanti su questo capitolo.
Definizioni geometriche
È importante inserire a questo punto alcune definizioni che servono per
interpretare correttamente il testo e chiarire il significato della
terminologia specifica utilizzata.
Punto Il punto definito è un qualsiasi punto del piano programmato o calcolato dallo Z32. Un punto definito definito può essere un punto iniziale o un punto finale di un tratto.
Un tratto è un segmento di retta o un arco di cerchio, può essere aperto o chiuso.
Tratto di Una retta o un cerchio si dicono chiusi quando terminano con un punto definito, si dicono aperti profilo quando il punto finale non è definito, ma dovrà essere calcolato con le informazioni relative al tratto successivo.
Ogni tratto è caratterizzato dalle informazioni contenute nell'ente geometrico precedente e da quelle contenute nel blocco attuale; ogni tratto può terminare con uno smusso (solo tra tratti rettilinei) o con un raccordo.
Punto Un punto continuo è un punto di tangenza tra due tratti che possono essere sia rette che cerchi continuo sia combinazioni di retta/cerchio o cerchio/retta.
Ogni tratto può essere definito in diversi modi: tali forme sintattiche costituiscono le istruzioni di geometria dello Z32.
Elementi che individuano un profilo
Gli elementi che individuano un tratto di profilo sono i parametri geometrici
(quote, raggi, pendenze, ecc.) e le funzioni preparatorie che determinano il
tipo di tratto (G1, G2, G3).
Quote finali
Rappresentano le coordinate del punto finale da raggiungere nel piano di lavoro.
Sono programmate col nome asse (per es. X, Y, Z ...) oppure in modo assolutamente equivalente con i parametri AA (primo asse), AB (secondo asse), AC (terzo asse). Si usano i parametri AA AB AC quando si vogliono costruire dei sottoprogrammi generici, svincolati dall'effettivo piano di lavoro. Nel seguito, per brevità e chiarezza, si useranno normalmente i nomi espliciti degli assi, X per il primo asse, Y per il secondo, Z per il terzo asse (asse mandrino).
Il piano cartesiano è definito col primo asse orizzontale e il secondo asse verticale.
Coordinate del centro e raggio del cerchio I, J, RA
Le coordinate del centro del cerchio sono programmate con i parametri I (primo asse) e J (secondo asse).
Le norme ISO associano rigidamente la I all'asse X e la J all'asse Y, mentre per lo Z32 la I è associata al primo asse del piano di lavoro e la J al secondo asse, quali che siano gli assi del piano (X, Y, Z o altri).
Norme ISO Z32
I <=> X I <=> AA (primo asse)
J <=> Y J <=> AB (secondo asse)
K <=>Z K <=> non assegnato (passo filettatura)
Quindi per esempio per lo Z32 si ha:
con G25XYZ con G25XCZ
I <=> X I <=> X
J <=> Y J <=> C
Il raggio del cerchio è programmato col parametro RA.
Pendenza finale QF
È l'angolo compreso tra la direzione positiva dell'asse X e la direzione del movimento nel punto finale del tratto.
È programmata col parametro QF ed è espressa in gradi sessagesimali (1 giro = 360 gradi) e frazioni decimali di grado (es. QF 10,5 = 10 gradi e 30 primi).
QF è positivo se, partendo dall'asse X, si raggiunge la direzione muovendosi in senso antiorario; si ottiene lo stesso risultato programmando: QF 280 e QF -80
Ad ogni inizio di profilo, ossia dopo:
- tratto in G0
- funzione ausiliaria
- G1 con assi fuori dal piano
- cambio terna di lavoro
la pendenza finale è forzata a zero.
Raggio di raccordo RR
Alla fine di ogni tratto di profilo può essere programmato un raccordo col
parametro RR che viene inserito alla fine del blocco
nel quale è programmato .
Il segno di RR determina il senso del raccordo:
RR positivo raccordo antiorario (G3)
RR negativo raccordo orario (G2)
Il tratto di profilo con raccordo finale può essere chiuso o aperto.
Il raggio di raccordo non può essere programmato su un tratto di profilo che venga chiuso dal successivo con conservazione della pendenza
(punto continuo).
Se RR è programmato in un blocco in cui non è previsto provoca errore di
programmazione
CN4514 (RB/RR iniziali su cerchio).
Vedere il paragrafo “Raccordi automatici” più avanti su questo capitolo.
Raccordo corto Raccordo lungo
Un raccordo, di orientamento definito, può essere scelto tra due possibili
col parametro di selezione KA:
KA = 0 raccordo corto, quello più spontaneo (può essere omesso);
KA <>0 raccordo lungo.
Vedere la pagina seguente (parametro di selezione KA).
Smusso RB
Alla fine di un tratto rettilineo può essere programmato uno smusso col
parametro RB.
Il valore di RB programmato definisce la lunghezza dello smusso sul primo
tratto.
La lunghezza dello smusso sul secondo tratto è:
RB se non è programmato QA
RB * tg QA se è programmato QA
Il tratto seguente deve essere ancora rettilineo: lo smusso è ammesso solo tra
due tratti rettilinei. RB e QA devono essere obbligatoriamente programmati nel
tratto alla fine del quale deve essere inserito lo smusso. Vedere paragrafo
“Smussi automatici” più avanti su questo
capitolo.
Se RB è programmato in un blocco in cui non è previsto provoca errori di
programmazione:
CN4214 RB smusso iniziale su cerchio
CN4314 RB smusso finale su cerchio
CN4514 RB/RR iniziali su cerchio.
Parametro di selezione KA
Un tratto aperto può essere chiuso dal tratto successivo per intersezione dei due enti geometrici.
Se almeno uno di questi enti è un cerchio si hanno due soluzioni (o nessuna se gli enti non si intersecano).
Svolta a Se si osserva il movimento con riferimento al
primo ente programmato, una delle soluzioni fa destra una svolta a
destra e l'altra una svolta a sinistra.
-Se è programmato un raggio di raccordo RR, una delle due soluzioni provoca un
raccordo corto (lunghezza del raccordo minore di metà cerchio) e l'altra un
raccordo lungo (lunghezza del
raccordo maggiore di metà cerchio). Vedere paragrafo “Raccordi
automatici” più avanti su questo capitolo.
La scelta della soluzione viene fatta col parametro
KA (che deve essere programmato obbligatoriamente nel blocco aperto di cui si
vuole scegliere l'intersezione):
KA=0 raccordo corto nel caso di RR programmato gira a sinistra nel caso di RR
non programmato
KA<>0 raccordo lungo nel caso di RR programmato gira a destra nel caso di
RR non programmato
Se KA è programmato in un blocco in cui non è previsto non provoca allarmi: semplicemente non ha effetto; KA=0 può essere omesso.
KA=1 KA=Ø
KA=1
KA=Ø KA=1
Un caso particolare di KA è la chiusura di retta aperta su cerchio G2/G3 X Y RA
in questo caso KA=0 significa arco di cerchio corto e KA<>0 significa
arco di cerchio lungo (vedere paragrafo “Cerchi chiusi” più avanti
su questo capitolo).
RR programmato RR non programmato
KA=0 Raccordo corto Gira a sinistra
KA<>0 Raccordo lungo Gira a destra
Pendenza ausiliaria QA
Il parametro QA permette di programmare un angolo ausiliario orientato, come QF.
Una prima applicazione riguarda la programmazione degli smussi tra due rette, un'altra riguarda le combinazioni retta-cerchio tipo G1 G2/G3..QA. Il significato viene specificato nel paragrafo “Combinazioni retta cerchio” più avanti su questo capitolo.
Funzioni preparatorie
Le funzioni interessate sono G1, G2, G3 che sono modali e mutualmente esclusive.
Può non essere programmata la G , già attiva; in quanto segue tale possibilità verrà indicata con le parentesi tonde: (G1) oppure (G2/G3)
Le funzioni G2 e G3 programmate possono essere forzate, cioè lo Z32 può cambiare il senso di percorrenza, in tutti quei casi in cui l'arco di cerchio è raccordato al tratto precedente; viene così privilegiata la condizione di tangenza e vengono scartati punti spigolosi. Tale situazione verrà in seguito indicata con la notazione : [G2/G3]