CNI Engineering WRT-CNC User Manual

Page 1
WRT-CNC / NC
PARTE 6
RIFERIMENTO PER LA PROGRAMMAZIONE
CNI Engineering
Page 2
Page 3
INDICE
1 Istruzioni CNI-ISO ......................................................................................1
1.1 Lista delle Istruzioni .................................................................................. 1
1.2 Istruzione modale G .................................................................................. 5
2 Espressioni ................................................................................................9
2.1 Costanti ..................................................................................................... 9
2.2 Parametri e vettori .................................................................................. 10
2.3 Operatori e funzioni ................................................................................ 15
3 Programmazione .....................................................................................29
3.1 Etichette .................................................................................................. 29
3.2 Fine programma o subroutine ................................................................. 29
3.3 Commenti ............................................................................................... 29
3.4 Passi di programma ................................................................................ 29
3.5 Ripetizioni linea ....................................................................................... 29
3.6 Messaggi ................................................................................................ 30
3.7 Unità di misura ........................................................................................ 30
3.8 Assi ......................................................................................................... 31
3.9 Origini ..................................................................................................... 31
3.10 Zoom ....................................................................................................... 32
3.11 Triedro fondamentale .............................................................................. 33
3.12 Movimento assi ....................................................................................... 35
3.13 Lettura posizioni e origini assegnate ...................................................... 36
3.14 Lettura quota di tastatura dell’asse ......................................................... 36
3.15 Posizionamento ...................................................................................... 36
3.16 Interpolazione ......................................................................................... 42
3.17 Smussi e raccordi ................................................................................... 44
3.18 Modalità dinamiche di movimento .......................................................... 46
4 Programmazione di direzioni spaziali di lavoro ...................................51
4.1 Orientazione spaziale dei mandrini ......................................................... 51
4.2 Orientazione spaziale degli aggregati ..................................................... 51
5 P. G. A........................................................................................................53
5.1 Istruzioni per la Programmazione Geometrica ....................................... 53
5.2 Uso del discriminante ............................................................................. 54
H5816D0001ITA-01TOC.fm (10-10-07)
CNI Engineering
I
Page 4
INDICE
5.3 Elenco dei casi risolti dalla P.G.A. .......................................................... 55
5.4 Esempi di casi possibili di P.G. A. ........................................................... 58
5.5 Programma esempio .............................................................................. 69
6 Correzione Raggio Utensile................................................................... 71
6.1 Istruzioni per la Correzione Raggio Utensile .......................................... 71
6.2 Attacco e Stacco Lineare ....................................................................... 72
6.3 Attacco e Stacco Circolare ..................................................................... 73
6.4 Cambio immediato del verso di correzione ............................................ 73
6.5 Correzione per i diversi tipi di intersezione ............................................ 73
6.6 Esempi di lavorazione ............................................................................ 78
6.7 Controllo sulla velocità ........................................................................... 80
7 Traslazione dei Correttori Mandrini Pantografi.................................... 81
8 Mandrini e utensili .................................................................................. 83
8.1 Configurazione della testa ...................................................................... 83
8.2 Selezione dei mandrini ........................................................................... 83
8.3 Mandrino di riferimento .......................................................................... 83
8.4 Velocità di rotazione ............................................................................... 83
8.5 Ritardi ..................................................................................................... 84
8.6 Istruzioni relative al cambio utensili ........................................................ 84
9 Interfaccia con il PLC ............................................................................. 89
9.1 Istruzioni M per PLC ............................................................................... 89
9.2 Passaggio di valori al PLC ..................................................................... 89
9.3 Scrittura diretta nella memoria del PLC ................................................. 90
10 Salti di programma ................................................................................. 91
10.1 Salto Incondizionato ............................................................................... 91
10.2 Salto Condizionato ................................................................................. 91
10.3 Salto Condizionato da PLC .................................................................... 91
10.4 Salto alla sezione di contornatura di un altro centro di lavoro ................ 92
11 Sottoprogrammi...................................................................................... 93
11.1 Sottoprogrammi interni ........................................................................... 93
11.2 Sottoprogrammi esterni utente ............................................................... 93
11.3 Sottoprogrammi esterni ‘‘Cicli fissi’’ ........................................................ 93
11.4 Sezioni ottimizzate di foratura ................................................................ 93
11.5 Chiamata di un sottoprogramma ............................................................ 94
11.6 Livelli di subroutines ............................................................................... 94
II
CNI Engineering
H5816D0001ITA-01TOC.fm (10-10-07)
Page 5
INDICE
12 Tastatore...................................................................................................95
12.1 Rilevamento del sistema di riferimento del pezzo .................................. 96
13 Programmazione di coincidenze............................................................97
14 Asse Mandrino.........................................................................................99
14.1 Definizione di un Asse Mandrino ............................................................ 99
14.2 Programmazione di un Asse Mandrino ................................................... 99
14.3 Controllo di velocità ................................................................................ 99
14.4 Controllo di arresto ............................................................................... 100
15 Lettura e scrittura dati macchina e utensili ........................................101
16 Lettura e scrittura dei registri...............................................................103
17 Esempio di programma: panca ............................................................105
18 Interfaccia con Assistito .......................................................................107
H5816D0001ITA-01TOC.fm (10-10-07)
CNI Engineering
III
Page 6
INDICE
IV
CNI Engineering
H5816D0001ITA-01TOC.fm (10-10-07)
Page 7

1 Istruzioni CNI-ISO

1 Istruzioni CNI-ISO
Nei prossimi paragrafi sono riassunte tutte le istruzioni previste dal linguaggio di programmazione CNI-ISO. Tali paragrafi costituiscono un compendio di rapida consultazione.

1.1 Lista delle Istruzioni

Nella seguente tabella vengono riportate tutte le istruzioni CNI-ISO. Le istruzioni sono ordinate in modo alfabetico; accanto alla sintassi compare una breve descrizione della funzione svolta e il numero della sezione in cui sono descritte.
Istruzioni di Programmazione
Sintassi Significato Sezione
% fine di un programma e di un
sottoprogramma
%% uscita immediata dal programma 3.2 :label identificatore di un blocco (etichetta) 3.1 AR[=]expr angolo orizzontale di orientamento del
mandrino
array(expr[,exp,...])=expr assegnamento dell’elemento di un
vettore
array(expr[,expr,...])=? visualizzazione del valore
dell’elemento di un vettore
axis[=]expr assegnamento della posizione
dell’asse axis
axisI[=]expr incremento della posizione dell’asse
axis axis0[=]expr spostamento dell’origine dell’asse axis 3.9 AX=... selezione del set di assi della terna
principale
AZ[=]expr angolo verticale di orientamento del
mandrino
BA[=]expr angolo di inclinazione retta, ampiezza
di arco
BL[=]expr lunghezza del passo attuale 5.1 BM[=]expr passo smussato 3.17 BR[=]expr passo raccordato al successivoi in due
dimensioni
BR3D[=]expr (opzionale) passo raccordato al successivo in tre
dimensioni
BS[+|-] passo secante al successivo 5.1 BT[+|-] passo tangente al successivo 5.1 D[=]expr ritardo 8.5 Eaxis[=]expr accelerazione dell’asse axis 3.12 E[=]expr accelerazione degli assi interpolati 3.12 Faxis[=]expr assegnamento della velocità dell’asse
axis F[=]expr velocità degli assi interpolati 3.12
3.2
4.2
2.2
3.6
3.12
3.12
3.11
4.2
5.1
3.17
3.17
3.12
istruzi-it.fm (10-10-07)
CNI Engineering
1
Page 8
1 Istruzioni CNI-ISO
FREF(expr_xy,expr_xz,expr_yz)=expr calcolo del nuovo sistema di
12.1
riferimento
G[=]expr istruzione modale G 1.2 HC[=]expr numero di configurazione delle teste 8.1 Iaxis[=]expr dichiarazione di anticipo dell’arrivo
3.15
dell’asse axis
I[=]expr ascissa del centro della circonferenza 3.16 J[=]expr ordinata del centro della circonferenza 3.16 JM:expr istruzione di salto incondizionato 10.1 JM[!](expr):expr istruzione di salto condizionato 10.1 JP[!](expr1,expr2):expr3 istruzione di salto condizionato
10.3
controllata da byte PLC
K[=]expr altezza del centro della circonferenza 3.16 KA[=]expr istruzione per il PLC 9.2 KB[=]expr istruzione per il cambio utensile 8.6 KL[=]expr istruzione di programmazione degli
Capitolo 13
“assi car”
L=routine chiamata di un sottoprogramma
11.5
esterno
L:expr chiamata di un sottoprogramma
11.5
interno
LC:expr chiamata della sezione di contornatura
10.4
di un altro centro di lavoro
LO:[expr] chiamata di un sottoprogramma della
11.5
sezione di foratura
LS[=]expr$ chiamata indiretta di un
11.5
sottoprogramma esterno
LX[=]expr assegnamento della lunghezza del
2.2
pezzo da lavorare
LY[=]expr assegnamento della larghezza del
2.2
pezzo da lavorare
LZ[=]expr assegnamento dello spessore del
2.2
pezzo da lavorare
M[=]expr istruzione di tipo “M” per il passaggio
9.1
di variabili e comandi al PLC
MS[=]expr$ invio di messaggio alla consolle 3.6 N[=]nnnn numero del passo di programma 3.4 QBOX apertura di un box di inserimento
Capitolo 18
parametri
parm=expr assegnamento di un parametro 2.2 parm=expr$ assegnamento di un parametro
2.2
alfanumerico
parm=? visualizzazione del valore di un
3.6
parametro
R[=]expr assegnamento del raggio di una
3.16
circonferenza (elica)
2
CNI Engineering
istruzi-it.fm (10-10-07)
Page 9
1 Istruzioni CNI-ISO
RDM(expr$,expr$,expr$[,expr])=expr scrittura di un dato macchina numerico Capitolo 15 RDM(expr$,expr$,expr$[,expr])=expr$ scrittura di un dato macchina
Capitolo 15
alfanumerico
REGS(expr)=expr scrittura di un registro macchina Capitolo 16 Rnnn=expr scrittura di un registro macchina Capitolo 16 RI[=]expr assegnamento del semiasse di una
3.16
ellisse parallelo alla ascissa
RJ[=]expr assegnamento del semiasse di una
3.16
ellisse parallelo alla ordinata
ROTX[=]expr rotazione su x del nuovo sistema di
12.1
riferimento
ROTY[=]expr rotazione su y del nuovo sistema di
12.1
riferimento
ROTZ[=]expr rotazione su z del nuovo sistema di
12.1
riferimento
RP[=]expr numero di ripetizioni di un passo 3.5 RT[=]expr valore dell’angolo di rotazione 3.11 RTI[=]expr incremento del valore dell’angolo di
3.11
rotazione
RTO[=]expr origine dell’angolo di rotazione 3.11 S[=]expr assegnamento della velocità di un
8.4
mandrino
Saxis[=]expr assegnamento del fattore di scala
3.10
dell’asse axis
SF[=]expr fattore di scala totale degli assi 3.10 Taxis[=]expr assegnamento a parametro tastatore
Capitolo 12
per asse X
T[=]spindle[:]tool[,spindle,...] selezione dei mandrini verticali 8.2 T[=]expr[:expr] 8.2 T[=]expr$ 8.2 T[=]expr:<expr assegnamento di un utensile a un
8.6
mandrino verticale
T[=]expr:<expr$ 8.6 TH[=]spindle[:tool][,spindle,...]
selezione dei mandrini orizzontali
8.2
TH[=]expr[:expr] 8.2 TH[=]expr$ 8.2 TH[=]expr:<expr
assegnamento di un utensile a un mandrino orizzontale
8.6
TH[=]expr:<expr$ 8.6 TP[=]spindle[:tool][,spindle,...]
selezione dei mandrini pantografi
8.2
TP[=]expr[:expr] 8.2 TP[=]expr$ 8.2 TP[=]expr:<expr
assegnamento di un utensile a un mandrino pantografo
8.6
TP[=]expr:<expr$ 8.6 TR[=]expr
assegnazione del raggio utensile
6.7
istruzi-it.fm (10-10-07)
CNI Engineering
3
Page 10
1 Istruzioni CNI-ISO
TRSX[=]expr
TRSY[=]expr
traslazione in x del nuovo sistema di riferimento
traslazione in y del nuovo sistema di
12.1
12.1
riferimento
TRSZ[=]expr
TRX[=]expr
TRY[=]expr
traslazione in z del nuovo sistema di riferimento
traslazione del correttore nella direzione spaziale X
traslazione del correttore nella
12.1
Capitolo 7
Capitolo 7
direzione spaziale Y
TRZ[=]expr
WBT(expr1,expr2)=expr3
traslazione del correttore nella direzione spaziale Z
scrittura dato di 1 bit per PLC
Capitolo 7
9.3
WBT(expr1,expr2)=expr$ 9.3 WBY(expr1)=expr2 WW(expr1)=expr2
WL(expr1)=expr2
scrittura dato intero di 1 byte per PLC scrittura dato intero di 2 bytes per
PLC scrittura dato intero di 4 bytes per
9.3
9.3
9.3
PLC
WF(expr1)=expr2
Tabella 1 Legenda Lista delle Istruzioni di programmazione
scrittura dato floating di 4 bytes per PLC
9.3
Operando Significato
array nome vettore: massimo 3 caratteri alfanumerici axis nome asse: massimo 2 caratteri alfanumerici expr espressione con risultato numerico expr$ espressione con risultato alfanumerico label numero etichetta: massimo 2 cifre decimali remark descrizione di commento n cifra decimale (0,1,...,9) nn costante intera di massimo 2 cifre decimali nnnn costante intera di massimo 4 cifre decimali nnnnn costante intera di massimo 5 cifre decimali routine nome sottoprogramma: massimo 11 caratteri alfanumerici parm nome parametro (numerico o alfanumerico): massimo 3 caratteri alfanumerici spindle numero mandrino: massimo 3 cifre decimali tool numero utensile: massimo 3 cifre decimali
4
CNI Engineering
istruzi-it.fm (10-10-07)
Page 11

1.2 Istruzione modale G

La sintassi di questa istruzione è:
G[=]expr
dove: expr è una espressione con risultato numerico.
Queste istruzioni sono definite “modali” poiché generalmente indicano la modalità di esecuzione di un passo di movimento, o il modo di interpretare alcuni dati del programma. Sono disponibili le seguenti istruzioni:
G0 * Movimento indipendente degli assi a velocità programmata. Resettata da: G1, G2, G3, G4, G5, G6, G7, G8, G9, G10, G11.
G1 Movimento interpolato lineare a velocità programmata. Resettata da: G0, G2, G3, G4, G5, G6, G7, G8, G9, G10, G11.
G2 Movimento interpolato circolare a velocità tangenziale programmata, date le coordinate
del centro. Resettata da: G0, G1, G3, G4, G5, G6, G7, G8, G9, G10, G11.
G3 Movimento interpolato circolare a velocità tangenziale programmata, date le coordinate
del centro. Resettata da: G0, G1, G2, G4, G5, G6, G7, G8, G9, G10, G11.
G4 Movimento interpolato circolare a velocità tangenziale programmata, dato il raggio.
Resettata da: G0, G1, G2, G3, G5, G6, G7, G8, G9, G10, G11.
G5 Movimento interpolato circolare a velocità tangenziale programmata, dato il raggio.
Resettata da: G0, G1, G2, G3, G4, G6, G7, G8, G9, G10, G11.
G6 Movimento interpolato circolare a velocità tangenziale programmata, tangente al
movimento precedente. Resettata da: G0, G1, G2, G3, G4, G5, G7, G8, G9, G10, G11.
G7 Movimento interpolato ellittico a velocità angolare programmata, dati i semiassi e le
cooordinate del centro. Resettata da: G0, G1, G2, G3, G4, G5, G6, G8, G9, G10, G11.
G8 Movimento interpolato ellittico a velocità angolare programmata dati i semiassi e le
cooordinate del centro. Resettata da: G0, G1, G2, G3, G4, G5, G6, G7, G9, G10, G11.
G9 Movimento interpolato circolare nello spazio, minore di 180 gradi, a velocità tangenziale
programmata, dato il centro. Resettata da: G0, G1, G2, G3, G4, G5, G6, G7, G8, G10, G11.
G10 Movimento interpolato circolare nello spazio, maggiore di 180 gradi, a velocità
tangenziale programmata, dato il centro. Resettata da: G0, G1, G2, G3, G4, G5, G6, G7, G8,
G9, G11.
G11 Movimento interpolato circolare nello spazio a velocità tangenziale programmata, dato un
punto intermedio. Resettata da: G0, G1, G2, G3, G4, G5, G6, G7, G8, G9, G10.
G27 Impone agli assi l’arresto a fine movimento, per passi non tangenti, senza attendere il
raggiungimento della quota obbiettivo entro la tolleranza di posizionamento.
G28 Impone agli assi un rallentamento a fine movimento, per passi non tangenti, funzione
dell’angolo formato con il passo successivo.
G30 * Serve per settare una modalità di funzionamento dell’istruzione Iaxis[=]expr. In tale
modalità l’anticipo programmato è attivo solo nel passo in cui è programmato assieme al posizionamento interessato. L’anticipo programmato si azzera automaticamente dopo essere stato utilizzato. Resettata dalla istruzione G31.
G31 Serve per settare una modalità di funzionamento dell’istruzione Iaxis[=]expr. In tale
modalità l’anticipo programmato rimane attivo fino a una successiva riprogrammazione.
G40 Annullamento correzione raggio utensile. Resettata da: G41, G42.
G41 Correzione raggio utensile a del profilo. Resettata da: G40, G42.
istmoda-it.fm (10-10-07)
CNI Engineering
5
Page 12
G42 Correzione raggio utensile a del profilo. Resettata da: G40, G41.
G46 Impone agli assi l’arresto a fine movimento, per passi non tangenti, mantenendo il
raggiungimento della quota obbiettivo entro la tolleranza di posizionamento. Resettata da
G47, G27, G28.
G47 Evita l’arresto o il rallentamento degli assi sullo spigolo formato tra passi non tangenti.
Resettata da G46, G27, G28.
G48 Asse C in rotazione indipendente. L’asse non interpola tangenzialmente. Può essere
interpolato con gli altri assi nei modi standard.
G49 Asse C di rotazione in interpolazione tangenziale. L’asse segue la tangente della
traiettoria seguita dagli assi X e Y. Se la direzione di partenza non coincide con la posizione di C viene eseguita una rotazione di allineamento. Questa funzione è attiva per default. Resettata dalla G48.
G50
G51 Entrata automatica utensile. Resettata a fine passo.
G52 Uscita automatica utensile. Resettata a fine passo.
G53 Disabilitazione delle correzioni utensili e degli spostamenti origine. Le quote degli assi e
del centro di circonferenza ed ellisse sono riferite all’origine macchina. Resettata da G54.
G54 Abilitazione delle correzioni utensili e degli spostamenti origine. Resettata da G53.
G55 Disabilitazione dell’uso dei correttori utensili su tutti gli assi. Resettata da G56 o da G54.
G56 Riattivazione dell’uso dei correttori utensili su tutti gli assi.
G58 Spostamento origine interno al pezzo. Resettata da G59.
G59 Spostamento origine esterno al pezzo. I successivi spostamenti origine saranno relativi
all’origine selezionata da PLC, oppure assoluti (riferiti all’origine macchina), a seconda che sia attiva G54 o G53. Resettata da G58.
G60 Definizione flusso di programma indipendente. La operatività di questa istruzione è
spiegata per esteso nel Capitolo
3
G61 Serve per attendere il posizionamento fisico di tutti gli assi su cui è stata programmata
una modalità G60.
G62 # Reset della G63.
G66 # Attivazione start contemporaneo a più cicli indipendenti.
G67 Forzatura fine ciclo a tutti i cicli aperti. È valida solo nel passo in cui è programmata. Se
programmata in un passo dove non ci sono cicli aperti, non ha effetto.
G68 Inserimento del passo di raccordo circolare in C.R.U. tra passi convessi non tangenti.
Resettata da G69.
G69 * Intersezione delle traiettorie corrette in C.R.U (se possibile). Resettata da G68.
G70 Introduzione dei dati in pollici. (solo ad inizio programma)
G71 * Introduzione dei dati in millimetri. (solo ad inizio programma)
G74 Disabilitazione dell’uso dei dati definizione origini su tutti gli assi. Resettata da G75 o da G54.
G75 * Riattivazione dell’uso dei dati di definizione origini su tutti gli assi. Resettata da G74.
G77 * Resetta l’azione programmata con la istruzione G78.
G78 Nel calcolo della posizione di lavoro dell’utensile dichiara attivo solo il contributo del
correttore del mandrino. Resettata da G77 o da G54.
6
CNI Engineering
istmoda-it.fm (10-10-07)
Page 13
G79 Attivazione compensazione utensile esterna.
G80 * Disattivazione compensazione utensile esterna.
G81 Attivazione rototraslazione esterna.
G82 * Disattivazione rototraslazione esterna.
G83 Attivazione sistema di riferimento mandrino.
G84 * Disattivazione sistema di riferimento mandrino.
G100 ($) camme elettroniche con raccordi di velocità.
G101 ($) camme elettroniche senza raccordi di velocità.
G102 ($) camma taglio al volo inizio pezzo (autoresettante).
G103 ($) camma taglio al volo fine pezzo (autoresettante).
G104 ($) attivazione asse slave a copiare.
G105 ($) disattivazione asse slave a copiare.
G106 ($) attivazione slave per inseguimento trasporto.
G107 ($) disattivazione slave per inseguimento trasporto.
G108 ($) camma taglio da fermo inizio pezzo (autoresettante).
G109 ($) camma taglio da fermo fine pezzo (autoresettante).
G110 ($) attivazione asse circonferenziale AUTORESETTANTE.
G197 ($) attivazione azzeramento su passo in corso.
G198 ($) ripulitura quota del modulo asse.
G199 ($) ripulitura quota assi con azzeramento su passo iniziale.
N.B.
Il simbolo (*) indica le funzioni attive all’inizio del programma.
Il simbolo (#) rimanda a ulteriori chiarimenti nei capitoli seguenti.
Il simbolo ($) contraddistingue le istruzioni G dedicate ad applicazioni con assi master-slave.
Queste istruzioni sono attive solo dopo aver dichiarato uno o più assi slave tramite l’istruzione
AX. Ad esempio, per dichiarare l’asse C slave dell’asse X con modalità camma con raccordo
di velocità, occorre programmare:
N10 AX=X:C,... G100
Questo tipo di istruzioni G sono opzionali e quindi sono attive solo in particolari versioni software.
istmoda-it.fm (10-10-07)
CNI Engineering
7
Page 14
8
CNI Engineering
istmoda-it.fm (10-10-07)
Page 15

2 Espressioni

2 Espressioni
Nella sintassi di alcune istruzioni si è indicato con i termini expr ed expr$ l’uso di espressioni con risultato, rispettivamente, numerico e alfanumerico.
Nella maggioranza dei casi reali tali espressioni si riducono ad una semplice costante, tuttavia la possibilità di assegnare un valore ottenuto da una espressione aumenta enormemente le possibilità di programmazione, ed in molti casi permette di snellire la costruzione di un programma o di una sua parte.
Inoltre è possibile assegnare il risultato di espressioni a parametri e vettori. Ciò può servire per esempio per conservare il valore di una espressione che ricorre con frequenza, oppure per operare dei controlli sul flusso del programma.
Si possono scrivere espressioni matematiche, alfanumeriche, o miste, con costanti, parametri e vettori, comunque complesse (almeno entro i limiti in seguito specificati).
Il risultato di una espressione sarà alfanumerico o numerico, a seconda degli operandi e delle operazioni eseguite. È spesso possibile utilizzare la sigla di una istruzione, come fattore o addendo, all’interno di una espressione ovvero come un parametro. In questo caso, quando il CN interpreta l’espressione, la sigla dell’istruzione viene sostituita con l’ultimo valore in essa programmato.
Ad esempio: supponiamo che gli ultimi valori programmati nelle istruzioni X ed F siano, rispettivamente, 100 e 50. L’espressione: AAA=F+X verrà interpretata dal CN come:
AAA=100+50. Non possono essere utilizzate come parametri all’interno di una espressione le
seguenti istruzioni: N, L, LC, LO, LS, JM, JP, T, TH, TP, TS, AX, MS, RP, RTI, BS, BT, RDM, FREF.

2.1 Costanti

Si distinguono due tipi di costanti: costanti numeriche, costanti alfanumeriche; entrambi i tipi possono essere utilizzati nella scrittura di espressioni.
Costanti numeriche
Una costante numerica è una sequenza di cifre decimali che può essere preceduta dal segno “+” o “-” e che può comprendere il punto decimale “.”. È ammessa anche la notazione scientifica. Esempi validi di costanti numeriche sono:
0, 9999, 0123, .003, -0.0, +123, 999.99, 001.23, -10, 123e2, 99999.9999, 00000.0123
mentre non sono valide le seguenti costanti:
0.0.0, 123A2
Nelle costanti numeriche possono trovarsi anche i caratteri finali “P” e “M” che indicano rispettivamente una quantità in pollici e una in millimetri. Questa caratteristica consente di scrivere direttamente le quote lette da un disegno senza doverle convertire nell’unità di misura del programma.
Per esempio, nel caso di un programma in millimetri, la costante 12.345P (pollici) è equivalente a
313.56 (millimetri) ed è quest’ultimo valore ad essere realmente usato, cioè la costante 12.345P viene convertita subito dopo la sua lettura, e tutto va esattamente come se al suo posto fosse stata scritta la costante 313.56.
Analogamente, nel caso di un programma in pollici, la costante 63.12M (mm) è equivalente a
2.485 (in) ed, anche in questo caso, è quest’ultimo valore ad essere realmente usato.
Ovviamente costanti in millimetri in programmi in millimetri, non subiscono alcuna conversione, e lo stesso vale per le costanti in pollici in programmi in pollici.
espress-it.fm (10-10-07)
CNI Engineering
9
Page 16
2 Espressioni
Nella scrittura di sottoprogrammi che possano essere usati indifferentemente in programmi in pollici o in millimetri è necessario che tutte le costanti numeriche che si riferiscono a dimensioni o quote siano definite con il relativo simbolo postfisso, in modo da forzarne l’unità di misura.
Infine, è possibile scrivere costanti ottali di massimo 3 cifre per facilitare la scrittura di espressioni in cui si fa riferimento ad indirizzi dell’area di memoria del PLC. Per far ciò è sufficiente far precedere i caratteri numerici dal simbolo “\”, così, per esempio, la costante \53 ottale equivale a 43 decimale. Diversamente dalle costanti decimali non e possibile far seguire ad una costante ottale uno specificatore di unità di misura.
Costanti alfanumeriche
Una costante alfanumerica o stringa è una sequenza di massimo 64 caratteri qualsiasi, esclusi i caratteri “@” e LINEFEED, racchiusi tra una coppia di virgolette; per esempio “STRINGA”.
In una stringa si possono anche inserire dei caratteri di spazio, ma bisogna fare attenzione al fatto che questi sono considerati ne più ne meno come qualsiasi altro carettere, e quindi, per esempio, le due stringhe “A B C” e “A B C “, con 5 e 7 caratteri rispettivamente, sono diverse.
La stringa "" (0 caratteri) è la stringa nulla ed è l’equivalente dello 0 per le costanti numeriche.

2.2 Parametri e vettori

Come per le costanti, vi sono due tipi possibili di parametri: numerici e alfanumerici.
Parametri numerici
I parametri numerici sono definibili dall’utente; il nome ad essi assegnato deve rispettare le seguenti regole:
Iniziare con la lettera P ed essere formato da un massimo di 4 caratteri alfanumerici. (Non è
strettamente necessario che il nome di un parametro inizi con la lettera P, tuttavia è opportuno. Un ampliamento del set delle istruzioni di programmazione può far sì che la sigla di alcune nuove istruzioni coincida con il nome di parametri utilizzati negli usuali programmi di lavoro o cicli fissi. In tal caso il CN produce un errore che si può eliminare solamente cambiando i nomi dei parametri. Questa spiacevole eventualità non si verifica se il nome del parametro inizia con la lettera P.)
Non può coincidere con il nome di una istruzione.
Non può coincidere con il nome di un asse seguito da “I”, “O” oppure preceduto da “E”, “F”, “I”,
“S” e “T".
Ad esempio sono nomi corretti di parametri numerici i seguenti:
PAAA, PBBB, PD1;
non sono nomi corretti di parametri numerici i seguenti:
XI, FY.
L’assegnamento ad un parametro numerico ha la seguente sintassi:
parm=expr
e richiede obbligatoriamente l’uguale. Ad esempio: PAA=3*1 oppure PB1=25
La prima istruzione di assegnamento a un parametro numerico, ovunque sia fatta, determina automaticamente la sua creazione; a meno che non sia esaurito lo spazio disponibile. Il valore di un parametro numerico non ancora assegnato, usato in una espressione, è 0. L’assegnamento di un risultato stringa ad un parametro numerico provoca un errore.
10
CNI Engineering
espress-it.fm (10-10-07)
Page 17
2 Espressioni
Informazione
La CNI si riserva la possibilità di ampliare il set delle istruzioni di programmazione in qualsiasi momento. Nel caso in cui si installi una nuova versione di CN occorre verificare se il set di istruzioni di programmazione sia stato modificato. Se ciò è avvenuto, è necessario assicurarsi che i programmi di lavoro che si utilizzano non contengano parametri, il cui nome non inizia con la lettera P, che coincidono con la sigla di una delle nuove istruzioni introdotte.
Parametri alfanumerici
Si può fare uso solo di 10 parametri alfanumerici predefiniti:
ST0, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9.
Fra questi parametri, il parametro ST0 viene utilizzato in modo speciale: esso viene precaricato all’inizio del programma con il contenuto del campo COMMENTO della linea di distinta. L’assegnamento ad un parametro alfanumerico ha la seguente sintassi:
parm=expr$
e richiede obbligatoriamente l’uguale. Ad esempio:
ST1=”PIPPO 1 34”
Il valore iniziale di un parametro alfanumerico è "" (stringa nulla).
Parametri speciali
Alcuni parametri, adibiti ad usi speciali, sono predefiniti e sono:
le dimensioni pezzo,
l’origine di lavorazione pezzo,
parametri relativi alla Distinta di lavoro,
parametri relativi al cambio utensile,
parametri relativi ai mandrini di riferimento,
la quota di parcheggio,
la quota di tastatura.
Dimensioni pezzo:
LPX Lunghezza pezzo
LPY Larghezza pezzo
LPZ Spessore pezzo
Questi parametri sono riservati alle dimensioni del pezzo da lavorare. Il loro valore viene presettato tramite le istruzioni LX, LY e LZ. Le dimensioni del pezzo sono utilizzabili in qualunque punto del programma senza necessità di assegnazione.
Origine di lavorazione pezzo:
ORGX Coordinata X origine del programma in esecuzione.
ORGY Coordinata Y origine del programma in esecuzione.
ORGZ Coordinata Z origine del programma in esecuzione.
espress-it.fm (10-10-07)
CNI Engineering
11
Page 18
2 Espressioni
ORTX, ORTY, ORTZ Tipo origine del programma in esecuzione. I possibili valori che questo
parametro puo’ assumere sono:
0: diritta
1: speculare
2: traslata
3: speculare traslata
Si veda la Sez. 3.9 di questo manuale.
Parametri della Distinta di lavoro:
PRST Valore impostato nel campo Q.TA della linea di distinta relativa al programma in
esecuzione.
CTPZ Valore impostato nel campo CONT della linea di distinta relativa al programma in
esecuzione.
Parametri relativi al cambio utensile:
I parametri relativi al cambio utensile vengono precaricati in seguito all’interpretazione dell’istruzione di predisposizione cambio utensile; informazioni più dettagliate sono contenute nella Sez.
3.9 di questo manuale. Di seguito riportiamo, a scopo riepilogativo i nomi di tali parametri.
Parametri Generali: CUFL.
Parametri di scaricamento utensile:Tali parametri si riferiscono alla posizione di magazzino di
scaricamento dell’utensile; essi sono:
CUSX CUSY CUSZ CUSA CUSP CUSM CUST.
Parametri di prelievo utensile:Tali parametri si riferiscono alla posizione di magazzino di prelievo dell’utensile; essi sono:
CUPX, CUPY, CUPZ, CUPA, CUPP, CUPM, CUPT, CUPI, CUSI.
Parametri relativi ai mandrini di riferimento:
Tali parametri vengono caricati automaticamente all’atto della interpretazione di una istruzione di tipo T, TH, TP con il numero (1, 2, 3, ...) che identifica il mandrino di riferimento di ogni testa. I vari parametri sono:
MR0 per il mandrino di riferimento relativo alla testa 1,
MR1 per il mandrino di riferimento relativo alla testa 2,
MR2 per il mandrino di riferimento relativo alla testa 3, ecc.
Una istruzione del tipo T0, TH0, TP0 azzera tutti i parametri MR.
Quota di parcheggio “PRK”:
Il parametro PRK è un parametro speciale il cui valore è definito nei dati macchina (DATI ASSI) accanto alla dicitura: QUOTA DI PARCHEGGIO. Il PRK è spesso utile, in fase di programmazione, quando si vuole spostare un asse, non interessato alla lavorazione, ad una quota a cui sicuramente non disturbi il movimento degli altri.
L’assegnamento del PRK si programma nel modo seguente:
axis=PRK
axisI=PRK
12
CNI Engineering
espress-it.fm (10-10-07)
Page 19
2 Espressioni
axisO=PRK
È possibile utilizzare il PRK all’interno di una espressione:
X=PRK-23
Non è ammesso utilizzare il PRK su un asse della coppia principale se è attiva una rotazione di assi oppure un blocco geometrico non ancora definito. Il valore del PRK non può essere, per quanto detto in precedenza, modificato da programma. Il PRK può essere assegnato, ad un asse, in modo indiretto tramite un parametro.
Ad esempio:
N10 AAA=PRK ...
...
...
N50 X=AAA ...
La particolarità di questa assegnazione consiste nel fatto che al parametro AAA non viene assegnato il valore del PRK definito nei dati macchina (che dipende dall’asse coinvolto), ma viene addirittura cambiato lo “status” di parametro in alias_PRK. Il parametro diventato alias_PRK è usabile nelle espressioni esattamente al posto di PRK, e differisce da questo solo per il fatto che può “riguadagnare” lo status di parametro semplicemente assegnandogli una espressione “normale”, cioè senza PRK o alias_PRK. L’assegnamento indiretto del parametro PRK è particolarmente utile nel caso in cui sia inserito in sottoprogrammi o subroutine interne.
Quota di tastatura “TST”, Taxis :
I parametri TST, Taxis, vengono assegnati dal ciclo di tastatura, e restano validi fino al ciclo successivo (che può essere su un asse diverso). La quota letta dal tastatore è relativa al sistema di riferimento del pezzo se G54, oppure assoluta se G53.
Vettori
I vettori permettono di associare più valori ad un unico oggetto, quindi indicato da un solo nome, ed identificare ciascuno dei valori associati al vettore mediante dei numeri, detti indici, eventualmente ottenuti come risultato di un calcolo.
E‘ possibile utilizzare solo vettori di tipo numerico.
L’elemento di un vettore è indicato da una scrittura del seguente tipo:
array(expr[,expr,...])=expr
dove array è il generico nome di un vettore e segue le stesse regole date per i nomi dei parametri. Gli elementi della sintassi indicati con expr rappresentano i possibili indici e sono espressioni numeriche.
Il massimo numero di indici, o dimensioni, che può avere un vettore è posto ad 8. Gli indici possono variare fra 0 e il valore massimo assegnato dall’utente, ma comunque limitato dalla quantità di memoria disponibile per i dati utente.
La definizione di un vettore e delle sue dimensioni viene fatta con il primo assegnamento, con un valore qualsiasi, di un suo elemento: gli indici di questo elemento saranno gli indici massimi desiderati.
Se vi è spazio sufficiente il vettore sarà creato ed inizializzato a 0 (tranne l’elemento con gli indici massimi che prenderà il valore assegnato), altrimenti verrà segnalato un errore.
espress-it.fm (10-10-07)
CNI Engineering
13
Page 20
2 Espressioni
Per esempio:
VET(15)=0 crea un vettore di nome VET e i valori contenuti sono indicati tramite un numero
variabile fra 0 e 15, quindi 16 elementi, e anche l’ultimo elemento vale 0; invece l’istruzione
MAT(9,9)=5 crea un vettore con due dimensioni, meglio detto “matrice”, di nome MAT con gli
indici entrambi variabili tra 0 e 9, per un totale quindi di 100 elementi, inizializzati tutti a 0 tranne l’ultimo inizializzato a 5. Gli elementi sono: MAT(0,0), MAT(0,1), ..., MAT(0,9),
MAT(1,0), MAT(1,1), ..., MAT(9,9). L’istruzione
PRP(2,3,4)=100 crea un vettore con tre dimensioni, di nome PRP con gli indici variabili: il
primo tra 0 e 2, il secondo tra 0 e 3, ed il terzo tra 0 e 4. Il numero totale di elementi è dato da 3x4x5 = 60 elementi. L’ultimo elemento vale 100.
Diversamente da quanto accade per i parametri non è possibile accedere in lettura all’elemento di un vettore non ancora definito; questo evento viene segnalato come errore. Ovviamente anche l’accesso sia in lettura che scrittura ad un elemento inesistente di un vettore già definito viene rilevato come errore.
Una limitazione dei vettori è che non è possibile, attualmente, assegnarli come alias_PRK, per il resto è possibile fare tutto ciò che è possibile fare con i comuni parametri.
Visibiltà di parametri e vettori
La visibilità di un parametro (sia numerico sia alfanumerico) o di un vettore si estende a tutto il programma e a tutti i sottoprogrammi usati nel programma, indipendentemente dal loro livello di annidamento.
Questa caratteristica permette di passare dei valori dal programma chiamante a un sottoprogramma o viceversa.
Ordine di assegnamento
All’interno di un passo di programma è data priorità assoluta all’assegnamento a parametri e vettori; se nel passo sussiste la contemporanea presenza di più assegnamenti a parametro l’ordine di esecuzione di tali assegnamenti è da sinistra a destra. Gli assegnamenti alle altre istruzioni presenti nel passo vengono fatti dopo aver fatto tutti gli assegnamenti a parametri.
Note sull’impiego della memoria per i dati utente
Vi è un certo quantitativo di memoria a disposizione dei dati definibili dall’utente; questa memoria è ripartita tra "simboli" ed “elementi dato" Un simbolo definibile dall’utente è il nome di un parametro o di un vettore, mentre un “elemento dato” è l’elemento base per la memorizzazione dei valori numerici. Il numero massimo di simboli a disposizione per l’utente è stato fissato a 100 (nel peggiore dei casi), mentre il numero massimo di “elementi dato” a disposizione è pari a 300. La mancanza di corrispondenza tra i due numeri citati dipende dal fatto che, diversamente dai parametri, che usano un simbolo e un “elemento dato” ognuno, il numero di “elementi dato” impiegato dai vettori è dipendente dalle loro dimensioni. In particolare, il numero di “elementi dato” usati, indicato con num_el, può essere calcolato nel seguente modo:
num_el = num_dim + dim1 x dim2 x ...
dove: num_dim è il numero di dimensioni (indici) del vettore e dim1, dim2, ... sono i valori massimi +1 che possono assumere il primo indice, il secondo, ecc. Quindi, nel caso dei tre vettori dell’esempio del precedente paragrafo si ha che:
VET(15) usa: 1 + 16 = 17 elementi dato
MAT(9,9) usa: 2 + 10 x 10 = 102 elementi dato
PRP(2,3,4) usa: 3 + 3 x 4 x 5 = 63 elementi dato
e complessivamente sono usati 182 elementi dato da tre simboli solamente.
14
CNI Engineering
espress-it.fm (10-10-07)
Page 21
2 Espressioni

2.3 Operatori e funzioni

Nella scrittura di espressioni possono essere usati gli operatori e le funzioni che sono di seguito elencati:
+ addizione
- sottrazione, inversione di segno
* moltiplicazione
/ divisione
% modulo
^ elevamento a potenza
<? minore fra due operandi
>? maggiore fra due operandi
< minore
> maggiore
= uguale
>=, => maggiore o uguale
<=, =< minore o uguale
<>, >< diverso
! negazione logica
~ and logico
# or logico
_B valore assoluto
_R radice quadrata
_S seno
_C coseno
_T tangente
_A arcotangente
_M modulo vettore
_I parte intera
_N arrotondamento
_E esponenziale
_LN logaritmo naturale
_LG logaritmo in base 10
+ concatenamento di due stringhe
$L sottostringa a sinistra
espress-it.fm (10-10-07)
CNI Engineering
15
Page 22
2 Espressioni
$R sottostringa a destra
$M sottostringa centrale
_D lunghezza di una stringa
_V valore di una stringa
_H codice ASCII
$S stringa di un numero
$C carattere ASCII
$D conversione secondi-data
$I conversione secondi-ore
_FO apertura file
_FC chiusura file
_FD cancellamento file
_FW scrittura stringa su file
_FP scrittura carattere su file
_FS riposizionamento su file
_FE errore su file
_FG lettura carattere
_FN lettura numero
_FT posizione su file
_FF fine file
_FL lunghezza file
_FV nessuna conversione
$FL lettura linea
_P lettura variabili del PLC
_ _ informazioni numeriche varie sul sistema
$_ informazioni alfanumeriche varie sul sistema
_# modifica di parametri di funzionamento
16
CNI Engineering
espress-it.fm (10-10-07)
Page 23
2 Espressioni
Livelli di priorità e associatività
Esistono livelli di priorità e versi di associatività; essi sono organizzati in Tab. 2 dove:
Tabella 2 Livelli di priorità e associatività
Priorità Descrizione operatori Simboli Verso associatività
8 operatori monadici, funzioni (+, -, !, _f, $f)
7 elevamento a potenza (^)
6 moltiplicazione, divisione, modulo (*, /, %)
5 somma, sottrazione (+, -)
4 operatori di selezione (<?, >?)
3 operatori relazionali (=, >, <, ...)
2 and (moltiplicazione logica) (~)
1 or (somma logica) (#)
sx ⇒ dx indica associatività da sinistra a destra,sx ⇐ dx indica associatività da destra a sinistra.
sx
sx
⇒ dx
sx
⇒ dx
sx
⇒ dx
sx
⇒ dx
sx
⇒ dx
sx
⇒ dx
sx
⇐ dx ⇐ dx
Le operazioni (funzioni) con priorità più alta vengono eseguite per prime, quelle con priorità più bassa per ultime. L’associatività indica il verso nel quale sono eseguite sequenze di operazioni (funzioni) che hanno la stessa priorità. Le priorità e associatività, descritte in Tab. essere modificate mediante l’uso di parentesi:
Una parentesi aperta “(“ indica l’inizio di un blocco a priorità più alta,
Una parentesi chiusa “)” indica la fine di un blocco a priorità più alta,
È possibile tenere in sospeso fino a 20 operazioni.
2, possono
Operatori aritmetici
Gli operatori aritmetici principali sono: l’addizione (+), la sottrazione (-), la moltiplicazione (*), la divisione (/). Questi operatori hanno tutti associatività da sinistra verso destra. Le priorità della moltiplicazione e della divisione sono uguali fra loro e sono maggiori delle priorità della somma e della sottrazione.
Inversione di segno:
L’inversione di segno (-) cambia il segno dell’operando che segue. È associabile da destra a sinistra annullandosi a coppie.
Modulo:
L’operazione di modulo (%) calcola il resto della divisione fra due operandi (anche non interi). Il valore ritornato da A%B è A - n x B, dove n è il quoziente di A/B, arrotondato a un intero, verso lo zero. Dividendo e resto hanno lo stesso segno.
Elevamento a potenza:
L’operatore di elevamento a potenza è individuato dal simbolo (^). L’esponente può anche essere frazionario, purché la base sia maggiore di zero. L’associatività va da destra a sinistra, quindi:
A^B^C equivale a A^(B^C).
espress-it.fm (10-10-07)
CNI Engineering
17
Page 24
2 Espressioni
Operatori di selezione
Gli operatori di selezione ( <?, >?) sono applicabili a due operandi entrambi o numerici o alfanumerici. Tali operatori ritornano, fra i due operandi presenti, rispettivamente, quello di valore minore o maggiore, nel suo formato originale.
Nel caso di operandi alfanumerici il confronto è di tipo alfabetico; cioè: una stringa è minore di un’altra se è vero che si troverebbe prima di questa in un ipotetico vocabolario che le contenesse entrambe. Gli operatori di selezione hanno associativit da sinistra a destra.
Operatori relazionali
Gli operatori relazionali sono: <, >, =, >=, =>, <=, =<, <>, ><.
Sono applicabili a due operandi entrambi numerici o alfanumerici, e danno un risultato pari a 1 se la relazione è verificata, 0 altrimenti.
Nel caso di operandi alfanumerici, per il confronto, vale quanto detto per gli operatori di selezione. Gli operatori relazionali hanno associatività da sinistra a destra, tuttavia tale associatività è raramente utilizzabile ai fini pratici.
Per esempio, la scrittura 0<A<2 non dà come risultato “VERO” se il valore di A è compreso strettamente tra 0 e 2, come invece ci si aspetterebbe, ma fornisce sempre il valore 1 (VERO), poiché il risultato del confronto 0<A, vero o falso che sia, è sempre minore di 2. Nel caso visto la scrittura corretta sarebbe 0<A~A<2.
Operatori logici
Negazione logica:
La negazione logica (!) è applicabile a qualsiasi operando sia numerico che alfanumerico e fornisce un risultato pari a 1 se l’operando vale 0 o è la stringa nulla, o pari a 0 altrimenti.
And e Or logici:
L’And (~) e l’Or (#) sono applicabili a due operandi qualsiasi e danno un risultato pari a 1 o a 0. L’And torna il valore 0 se almeno uno dei due operandi vale 0 o è la stringa nulla, altrimenti torna il valore 1. L’Or torna il valore 1 se almeno uno dei due operandi è diverso da 0 o dalla stringa nulla, altrimenti torna il valore 0.
Funzioni numeriche
Le funzioni numeriche sono: _B, _R, _S, _C, _T, _A, _M, _I, _E, _N.
Queste funzioni sono applicabili soltanto su operandi di tipo numerico. La associatività è da destra a sinistra.
Valore assoluto:
La funzione valore assoluto (_B) ritorna il valore del suo argomento con segno positivo. Ad esempio: _B(-4) ritorna il valore 4.
Radice quadrata:
La funzione radice quadrata (_R) ritorna un valore che moltiplicato per se stesso dà l’argomento iniziale. L’argomento non deve essere negativo. Ad esempio: _R(4) ritorna il valore 2.
Seno, coseno e tangente:
Le funzioni seno (_S), coseno (_C) e tangente (_T) hanno un argomento espresso in gradi sessadecimali, quindi, per esempio, un angolo di 20 gradi e 30 primi dovrà essere posto nella forma: 20.5.
18
CNI Engineering
espress-it.fm (10-10-07)
Page 25
2 Espressioni
Arcotangente:
La funzione arcotangente (_A) ritorna un risultato espresso in gradi sessadecimali compreso fra ­90 e +90. Se sono forniti due argomenti è ritornato un angolo compreso tra -180 e 180 gradi. Tale angolo è l’angolo che il vettore, che ha come componente in y il primo argomento e come componente in x il secondo argomento, forma con la direzione positiva delle x.
Modulo di vettore:
La funzione modulo di vettore (M) ritorna un valore pari alla lunghezza del vettore che ha come componenti gli argomenti della funzione.
Per esempio: _M(3,4) ritorna il valore 5.
Parte intera:
La funzione parte intera (_I) ritorna un risultato pari al più grande numero intero non maggiore dell’operando.
Per esempio: _I3 ritorna 3; _I3.7 ritorna ancora 3; _I-3.7 ritorna -4.
Funzione esponenziale:
La funzione esponenziale (_E) calcola il numero e (cioè la base dei logaritmi naturali) elevato all’argomento dato.
Per esempio: _E1 ritorna 2.71828..., cioè e.
Funzioni logaritmo:
Le funzioni (LN) e (_LG) ritornano, rispettivamente, il logaritmo naturale e il logaritmo in base 10 dei loro operandi. Gli operandi delle funzioni (_LN) e (_LG) possono essere delle generiche espressioni numeriche.
Per esempio: _LN(100+AAA), dove AAA è un parametro che supponiamo valga 233, ritorna
5.4510. _LG(100+AAA), dove AAA è un parametro che supponiamo valga 233, ritorna 2.5224.
Arrotondamento:
La funzione (_N) consente di arrotondare un numero scegliendo quanti decimali lasciare. La sintassi da utilizzare è la seguente:
_N(espr1,espr2)
espr1 è il valore da arrotondare, espr2 assegna il numero di decimali da lasciare. Ad esempio: _N(1.2345,2) ritorna il numero 1.23. Se expr2 è un numero negativo l’arrotondamento viene fatto
secondo le potenze intere positive del 10. Ad esempio: _N(123456,-2) ritorna il numero 123500.
Funzioni alfanumeriche
Il concatenamento di due stringhe si ottiene con l’operatore +.
Le funzioni $L, $R, $M, hanno un argomento principale di tipo alfanumerico e ritornano risultati alfanumerici.
Sottostringa a sinistra e a destra:
Le funzioni sottostringa a sinistra ($L) e sottostringa a destra ($R) ritornano una stringa ottenuta prelevando una porzione di un certo numero di caratteri a sinistra o a destra della stringa specificata. La sintassi è la seguente:
$L(expr$,expr)
$R(expr$,expr)
espress-it.fm (10-10-07)
CNI Engineering
19
Page 26
2 Espressioni
in cui, expr$ indica la stringa dalla quale prelevare i caratteri, ed expr indica il numero di caratteri da prelevare. Se la lunghezza della stringa è minore o uguale al numero di caratteri richiesti, viene ritornata la stessa stringa.
Sottostringa centrale:
La funzione sottostringa centrale ($M) ritorna una stringa ottenuta prelevando una porzione di un certo numero di caratteri della stringa specificata a partire dal carattere indicato. La sintassi è la seguente:
$M(expr$,expr1,expr2)
in cui, expr$ indica la stringa dalla quale prelevare i caratteri, expr1 indica il carattere da cui partire, ed expr2 indica il numero di caratteri da prelevare. Se la lunghezza della stringa è minore del numero che indica il carattere di partenza, viene ritornata la stringa nulla, e se il numero di caratteri che rimangono, partendo dal carattere indicato, è minore o uguale al numero di caratteri richiesti viene ritornata la sola parte residua.
Funzioni di conversione alfanumerico-numerico:
Le funzioni di conversione sono: _D, _V, _H, $S, $C. Queste funzioni ritornano risultati di tipo numerico partendo da argomenti alfanumerici o viceversa.
Lunghezza di un stringa:
La funzione lunghezza di una stringa (_D) ritorna un risultato che vale il numero di caratteri della stringa specificata.
Valore di una stringa:
La funzione valore di una stringa (_V) ritorna un risultato che vale la costante numerica espressa dai caratteri della stringa specificata. Valgono le stesse regole viste per le costanti numeriche ed in particolare la conversione di unità di misura. Per esempio, in un programma in millimetri, l’espressione _V"12.345P" ritorna il valore 313.56.
Codice ASCII:
La funzione codice ASCII (_H) ritorna un valore intero compreso fra 0 e 255 corrispondente al codice ASCII del primo carattere della stringa data come argomento.
Per esempio: _H("ABCD") ritorna 65. A differenza delle costanti numeriche, le stringhe che vengono convertite in numero non generano errori nel caso in cui queste siano delle cattive costanti. Una stringa errata viene convertita fin dove possibile e se è totalmente inconvertibile il valore ritornato è 0.
Per esempio:
_V”-12.3.45P” vale -12.3
_V” 12+3.45P” vale 12
_V”A-12.3.45P” vale 0
Stringa di un numero:
La funzione stringa di un numero ($S) ritorna una stringa di caratteri che esprimono il valore dell’argomento numerico. La sintassi è la seguente:
$Sexpr
dove expr è il valore numerico da convertire in stringa.
20
CNI Engineering
espress-it.fm (10-10-07)
Page 27
2 Espressioni
Per esempio, supponiamo che il parametro A contenga il valore 123.45, allora: $S(A) ritornerà la stringa “123.45”.
Conversione di ora e data:
La funzione $I interpreta il valore del suo operando, che può essere una qualsiasi espressione, come un numero di secondi e lo converte in una stringa alfanumerica che specifica il numero di giorni, ore, minuti, secondi e millesimi ad esso corrispondente. Ad esempio: $I(3245+AAA), dove
AAA è un parametro che supponiamo valga 4544.3, ritorna la stringa: 2h9’49.300". Ovvero il
numero 7789.3 espresso in secondi è stato convertito in 2 ore, 9 minuti, 49 secondi e 300 millesimi. In generale la stringa ritornata ha la forma:
<nr_1>d<nr_2>h<nr_3>’<nr_4>.<nr_5>"
Dove:
<nr_1>d indica il numero di giorni
<nr_2>h indica il numero di ore
<nr_3>’ indica il numero di minuti
<nr_4>.<nr_5>" indica il numero di secondi e millesimi
La funzione $D consente di convertire un numero di secondi in una stringa alfanumerica che specifica l’anno, il mese, il giorno e l’ora, a partire dall’1 gennaio 1970, ad esso corrispondente. La funzione $D ha una sintassi del tipo:
$D(expr[,expr$])
Nel caso in cui sia omesso il secondo operando, la stringa ritornata ha la seguente forma:
<str. 1> <str. 2> <nr. 1> <nr. 2>:<nr. 3>:<nr. 4> <str. 3> <str. 4> <nr. 5>
Dove:
<str. 1> è una stringa formata dalle prime tre lettere del nome inglese del giorno
<str. 2> è una stringa formata dalle prime tre lettere del nome inglese del mese
<nr. 1> è il numero corrispondente al giorno
<nr. 2>:<nr. 3>:<nr. 4> indica l’orario in ore, minuti, secondi
<str. 3> <str. 4> riportano le stringhe che indicano la zona oraria terrestre e l’eventuale
presenza dell’ora legale. (MET DST: Middle Europe Time Daylight Saving Time)
<nr. 5> indica l’anno
Ad esempio: la funzione $D(__26), essendo l’operando una delle funzioni speciali trattate nella Sez.
2.3, ritorna la data attuale ovvero una stringa del tipo:
Tue Jun 15 18:06:31 MET DST 1999
Mediante le due funzioni precedenti è possibile determinare il tempo impiegato da un programma o un sottoprogramma ad eseguire le istruzioni in esso contenuto. Ad esempio, nel seguente programma viene calcolato il tempo impiegato per l’esecuzione del sottoprogramma PIPPO.
N10 AAA=__26
N20 L=PIPPO
N30 MS=$I(__26-AAA)
Nella linea N10, tramite la funzione speciale __26 viene caricata nel parametro AAA la data attuale del sistema. Nella linea N20 viene chiamato il sottoprogramma PIPPO. Nella linea N30 viene stampata a video il tempo impiegato per l’esecuzione del sottoprogramma PIPPO.
espress-it.fm (10-10-07)
CNI Engineering
21
Page 28
2 Espressioni
Operazioni sui file
Mediante le funzioni che descriveremo nel seguito è possibile attuare delle semplici operazioni di scrittura su file. Il numero massimo di file che possono essere utilizzati simultaneamente è 5.
Funzione di apertura file:
L’apertura di un file si attua mediante la funzione _FO. La sintassi dell’istruzione è la seguente:
_FO(expr$)
dove expr$ indica il nome del file da aprire. I file sono aperti in lettura e scrittura (tranne i primi tre standard stderr, stdout, stdin).
Il valore ritornato è il numero corrispondente al file aperto oppure -1 nel caso di errore. Quando il file viene aperto, il puntatore al file si posiziona in corrispondenza del primo carattere. In questo modo, se si usa una funzione di scrittura, i caratteri del file vengono sovrascritti.
Funzione di chiusura file:
La chiusura di un file si attua mediante la funzione _FC. La sintassi dell’istruzione è la seguente:
_FC(expr)
dove expr è il numero corrispondente al file aperto mediante la funzione _FO. Viene ritornato il valore -1 in caso di errore.
Funzione di cancellazione file:
La cancellazione di un file si attua mediante la funzione _FD. La sintassi dell’istruzione è la seguente:
_FD(expr$)
dove expr$ indica il nome del file da cancellare. Viene ritornato il valore -1 in caso di errore.
Funzione di scrittura stringa su file:
La scrittura di una stringa di caratteri su un file si attua mediante la funzione _FW. La sintassi dell’istruzione è la seguente:
_FW(expr$,expr)
dove expr$ indica la stringa di caratteri da scrivere e expr è il numero corrispondente al file aperto. Viene ritornato il numero di caratteri scritti sul file in caso di successo oppure il valore -1 in caso di errore.
Funzione di scrittura carattere su file:
La scrittura di un carattere su un file si attua mediante la funzione _FP. La sintassi dell’istruzione è la seguente:
_FP(expr1,expr2)
dove expr1 indica il codice ASCII del carattere che si vuole scrivere e expr2 è il numero corrispondente al file aperto. Viene ritornato il numero corrispondente al codice ASCII del carattere scritto in caso di successo oppure il valore -1 in caso di errore.
Funzione di riposizionamento su file:
Il riposizionamento del punto di accesso a un file si attua mediante la funzione _FS. La sintassi dell’istruzione è la seguente:
_FS(expr1,expr2[,expr3])
22
CNI Engineering
espress-it.fm (10-10-07)
Page 29
2 Espressioni
dove expr1 è il numero corrispondente al file aperto e expr2 è il numero di byte di spostamento in avanti del punto di accesso. L’eventuale expr3 specifica come considerare l’offset assegnato per lo spostamento, in base ai seguenti codici:
0 : offset riferito all’inizio del file
1 : offset riferito alla posizione corrente del file
2 : offset riferito alla fine del file
Eventuali operazioni di lettura e/o scrittura, successive a un riposizionamento del punto di accesso al file, inizieranno dal nuovo punto di accesso. Per default lo spostamento è riferito all’inizio del file ma è possibile indicare una modalità diversa tramite il valore opzionale expr3. Se
expr3 vale 0 lo spostamento è riferito all’inizio del file se vale 1 lo spostamento è riferito al punto in
cui ci si trova, se vale 2 è riferito alla fine del file. Viene ritornato il valore -1 in caso di errore.
Funzione di rilevamento errore su file:
Il rilevamento di un errore che si è verificato su un file si ottiene mediante la funzione _FE. La sintassi dell’istruzione è la seguente:
_FE(expr)
dove expr è il numero corrispondente al file su cui si vuole rilevare la presenza di errore. Il valore ritornato è diverso da 0 in presenza di errore.
Funzione di lettura di un carattere da file:
Mediante la funzione _FG è possibile leggere un singolo carattere di un file. La sintassi dell’istruzione è la seguente:
_FG(expr)
dove expr è il numero corrispondente al file da cui si vuole leggere. Il valore ritornato è il codice ASCII del carattere letto (compreso fra 0 e 255). Il valore ritornato è -1 in presenza di errore o se viene incontrata la fine del file.
Funzione di lettura di un numero da file:
Mediante la funzione _FN è possibile leggere valori numerici da un file. La sintassi dell’istruzione è la seguente:
_FN(expr)
dove expr è il numero corrispondente al file da cui si vuole leggere. Questa funzione legge la prima sequenza di caratteri “non bianchi” del file interpretandone il valore numerico. La conversione (e quindi la lettura dei caratteri del file) si arresta all’occorrenza del primo carattere non interpretabile come numero. Ciò consente di leggere da un file, uno alla volta, una sequenza di numeri separati da “bianchi” o da “new-line”. Il valore ritornato è il numero letto. In caso di errore viene ritornato il valore 0 e la presenza di errore può essere accertata per mezzo della funzione
_FE.
Funzione di indicazione del punto di accesso di un file:
L’indice di posizione corrente su un file si ottiene con la funzione _FT(expr). La sintassi dell’istruzione è la seguente:
_FT(expr)
dove expr è il numero corrispondente al file in esame. In caso di errore viene ritornato il valore -1.
Funzione di lettura di una linea di un file:
espress-it.fm (10-10-07)
CNI Engineering
23
Page 30
2 Espressioni
La funzione $FL(expr) legge dei caratteri da un file arrestandosi al primo “new-line” incontrato oppure alla fine del file. La sintassi dell’istruzione è la seguente:
$FL(expr)
dove expr è il numero corrispondente al file da leggere. Il valore ritornato è la stringa di caratteri letti e comprende l’eventuale carattere “new-line”. In caso di errore viene ritornata la “stringa nulla”; la presenza di errore può essere accertata mediante la funzione _FE.
Funzione di ricerca fine file:
La funzione _FF ritorna la condizione di fine file del file il cui nome è specificato come operando. La sintassi dell’istruzione è la seguente:
_FF(expr)
dove expr è il nome del file da testare. I possibili valori ritornati sono i seguenti:
1 : condizione di fine file verificata
0 : condizione di fine file non verificata
-1 : condizione di errore
Funzione di calcolo lunghezza file:
La funzione _FL ritorna la lunghezza del file il cui nome è specificato come operando. La sintassi dell’istruzione è la seguente:
_FL(expr)
dove expr$ è il nome del file. I possibili valori ritornati sono i seguenti:
lunghezza del file in byte
-1 : condizione di errore
Funzione di test conversione:
La funzione _FV verifica se è stata effettuata una conversione a seguito della chiamata della funzione _FN. L’operando della funzione è il numero corrispondente al file processato da _FN. La sintassi dell’istruzione è la seguente:
_FV(expr)
dove expr è il numero corrispondente al file processato da _FN. I possibili valori ritornati sono i seguenti:
1 : nessuna conversione effettuata
0 : conversione effettuata
-1 : errore
In pratica, mediante questa funzione è possibile testare se l’eventuale valore 0 ritornato dalla funzione _FN è un valore numerico letto (in questo caso _FV ritornerebbe 0) oppure indica che non è stato letto alcun numero (inquesto caso _FV ritornerebbe 1).
Funzioni speciali
Lettura delle variabili del PLC:
La lettura delle variabili del PLC si attua mediante la funzione _P.
Le possibili sintassi di questa istruzione sono le seguenti:
_P(expr1[,expr2[,expr3[,expr4]]])
24
CNI Engineering
espress-it.fm (10-10-07)
Page 31
2 Espressioni
_P(expr$[,expr2[,expr3[,expr4]]])
Gli argomenti della funzione possono assumere diversi significati; di seguito riportiamo i possibili.
1. expr1 e expr$ indicano rispettivamente l’indirizzo della variabile da leggere, il nome simbolico della variabile; si ha allora che:
• expr2 è un intero maggiore, uguale o minore di 0. Se è minore o uguale a 0 rappresenta
l’indice, cambiato di segno, del bit da leggere per una variabile a bit. Se invece è un valore positivo indica un formato codificato nel seguente modo:
1: byte senza segno [0, ..., 255],
2: byte con segno [-128, ..., 127],
3: variabile long [-2.000.000.000, ..., -2.000.000.000],
4: variabile float,
5: variabile double,
6: byte booleano,
7: variabile unsigned long,
8: formato di default.
Nel caso in cui expr2 non sia fornito si considera il valore 1.
• expr3 ed expr4 non hanno significato.
2. expr1 è l’indirizzo del primo elemento di un vettore di variabili; si ha allora che:
• expr2 assume gli stessi significati già riportati nel caso precedente.
• expr3 è l’indice dell’elemento del vettore.
• expr4 non ha significato.
3. expr1 è l’indirizzo del primo elemento di una matrice di variabili; si ha allora che:
• expr2 assume gli stessi significati già riportati nei casi precedenti.
• expr3 è l’indice di riga della matrice.
• expr4 è l’indice di colonna della matrice.
Si può indicare un elemento di vettore/matrice con la stessa sintassi utilizzata nei programmi PLC. Per esempio: VET[3] o MAT[2,5]. In questo caso le eventuali espressioni expr3 ed expr4 della sintassi usuale vengono ignorate.
espress-it.fm (10-10-07)
CNI Engineering
25
Page 32
2 Espressioni
Informazioni numeriche sul sistema:
La funzione per ottenere informazioni numeriche sul sistema è indicata dal simbolo “_ _” seguito da un argomento numerico che dà il codice dell’informazione richiesta. Le informazioni ottenibili sono elencate nella tabella
Tabella 3 Codici per le informazioni sul sistema.
3, in ordine di codice.
Codice Informazioni
0 modo di operazione 0=esecutore 1=grafica 1 numero di elementi dato liberi 2 numero di elementi dato usati 3 numero totale di elementi dato 4 numero di simboli utente liberi 5 numero di simboli utente usati 6 numero massimo di simboli utente 7 numero assi effettivamente definiti 8 numero massimo di assi definibili
9 livello corrente di subroutine 10 numero massimo livelli di subroutine 11 indice del primo elemento di vettore 12 fattore di scala corrente (obsoleto) 13 numero di decimali per i millimetri (obsoleto) 14 numero di decimali per i pollici (obsoleto) 15 fattore di scala per i millimetri (obsoleto) 16 fattore di scala per i pollici (obsoleto) 17 unità di misura corrente 0=millimetri, 1=pollici 18 massima differenza ammessa sui raggi 19 massima tolleranza ammessa per l’ellisse 20 massimo angolo considerato tangente 21 raggio dell’utensile corrente 22 massima discontinuità ammessa 23 massimo errore di conversione della curva di Bezier 24 ora di inizializzazione dell’interprete 25 ora dell’ultimo reset dell’interprete 26 ora corrente
26
CNI Engineering
espress-it.fm (10-10-07)
Page 33
2 Espressioni
Informazioni alfanumeriche sul sistema:
La funzione per ottenere informazioni di tipo alfanumerico è indicata dal simbolo “$_” seguito da un argomento numerico che dà il codice dell’informazione richiesta.
Le informazioni ottenibili sono elencate nella tabella 4 in ordine di codice.
Tabella 4 Informazioni alfanumeriche sul sistema
Codice Informazioni
0 stringa identificativa dell’interprete 1 nome del file corrente 2 numero di versione dell’interprete (es. 4.15.7) 3 data di compilazione (es. Jan 31 1996) 4 ora di compilazione (es. 10:12:46) 5 data di compilazione in formato italiano (es. 31/01/1996) 6 stringa di identificazione standard
Funzione di Modifica parametri di funzionamento:
Mediante la funzione di modifica parametri di funzionamento (_#) è possibile alterare il comportamento dell’interprete del linguaggio di programmazione.
Informazione
Si sconsiglia l’uso di questa funzione a persone poco esperte. La modifica dei parametri di funzionamento dell’interprete deve essere attuata da tecnici molto specializzati in quanto tali modifiche possono avere ripercussioni sia sul funzionamento della macchina sia sulla sicurezza dell’operatore di macchina.
La sintassi della funzione di modifica dei parametri di funzionamento dell’interprete è:
_#(expr1,expr2)
dove: expr1 è il codice del parametro, expr2 è un numero intero. Nel caso in cui expr2 valga 0 si ha disabilitazione del parametro di funzionamento, negli altri casi abilitazione. In tabella
5 sono
riportati i codici dei parametri di funzionamento e il loro significato.
Tabella 5 Codici parametri di funzionamento.
Codice Significato
34 cambia il numero del centro corrente 35 abilita/disabilita la lettura e la scrittura dei dati macchina 37 abilita/disabilita la correzione raggio utensile (interna) 38 abilita/disabilita l’emissione immediata del codice di fine 39 abilita/disabilita la correzione dei dati degli archi 40 abilita/disabilita la conversione delle ellissi 41 modifica lo stile di visualizzazione della linea 44 abilita/disabilita la conversione delle minuscole 47 abilita/disabilita la correzione di velocità in C.R.U. 53 conversione Bezier in linee (0) o archi (1)
espress-it.fm (10-10-07)
CNI Engineering
27
Page 34
2 Espressioni
28
CNI Engineering
espress-it.fm (10-10-07)
Page 35

3 Programmazione

3 Programmazione
Una linea di programma valida deve sempre cominciare con uno di questi quattro caratteri: :, %, ;,
N.
La fine di una linea è individuata da un line-feed, purché non sia preceduto dal carattere @, infatti quest’ultimo carattere concatena la linea successiva a quella attuale formando un’unica linea.

3.1 Etichette

Una linea che comincia con il carattere “:” contiene una etichetta e non può contenere altre istruzioni.

3.2 Fine programma o subroutine

Una linea che contiene come unico carattere % indica la fine del programma o di una subroutine. Una linea che contiene i soli caratteri %% impone la fine immediata del programma, indipendentemente dal livello di annidamento in cui si trova.

3.3 Commenti

Una linea che comincia con il carattere “;” viene completamente ignorata qualsiasi cosa vi sia scritto, tuttavia è visualizzata durante l’esecuzione del programma, ciò puo essere utile per inserire dei commenti nel programma, o delle linee con indicazioni vistose per poter seguire meglio il flusso del programma.

3.4 Passi di programma

Le linee che cominciano con il carattere N sono i veri e propri “passi” di programma. La N è infatti l’istruzione di “numero passo” la cui sintassi è la seguente:
N[=]nnnn
dove nnnn è un qualsiasi intero compreso fra 0 e 2 147 483 647.
Il numero di passo di una linea può essere utilizzato per far partire l’esecuzione del programma da una linea particolare, invece che dall’inizio, inoltre è utile per seguire meglio l’esecuzione del programma in automatico. Tali numeri dovrebbero quindi essere diversi da passo a passo ed essere ordinati in maniera crescente.
Le varie istruzioni, in un passo di programma, sono separate fra loro da uno o più caratteri blank.
Tale carattere non può essere usato per nessun altro scopo, quindi non può trovarsi tra il nome di una istruzione ed il suo dato, né all’interno di espressioni, salvo il caso in cui si trovi dentro una costante stringa, cioè all’interno di una coppia di virgolette "".
È possibile inserire dei commenti anche nelle linee contenenti istruzioni facendoli precedere sempre dal carattere “;”. Ovviamente il commento deve essere posto dopo l’ultima istruzione del passo e deve essere separato da questa da almeno un blank.
È possibile condizionare la parte finale di un passo facendola precedere da una espressione condizionale chiusa fra parentesi tonde. Per esempio, nella linea:
N10 ... (expr) ...
la parte di linea che segue (expr) è presa in considerazione solo se expr è vera, cioè diversa da 0.

3.5 Ripetizioni linea

È possibile ripetere più volte la stessa linea tramite l’istruzione:
RP[=]expr
program-it.fm (10-10-07)
CNI Engineering
29
Page 36
3 Programmazione
Il valore dell’espressione viene convertito all’intero immediatamente precedente e dà il numero di ripetizioni della linea. Valori nulli o negativi generano una condizione di errore.
Durante l’esecuzione del programma, le linee ripetute, ad esclusione della prima, sono visualizzate insieme ad un numero racchiuso tra parentesi che indica quante linee (compresa la medesima) devono ancora essere eseguite. Per esempio la linea di programma: N10 RP4 provocherà la seguente visualizzazione:
N10 RP4
N10 RP4 [3]
N10 RP4 [2]
N10 RP4 [1]

3.6 Messaggi

Durante l’esecuzione del programma è possibile far inviare dei messaggi a video, per evidenziare il passaggio in determinati punti, oppure per controllare il valore di alcuni parametri.
Stampa di una stringa
L’invio al video di una stringa di messaggio si ottiene con l’istruzione:
MS[=]expr$
dove expr$ è il messaggio che si vuole inviare, che nel caso più semplice sarà una costante stringa, come per esempio nella seguente istruzione MS=”ERRORE DATI”. Oppure:
MS[=]expr
dove expr è una espressione numerica. In tal caso viene stampata a video il valore dell’espressione. Nel caso di stampa di una stringa, il messaggio non puo essere più lungo di 30 caratteri e, se sorpassa tale lunghezza, viene automaticamente tagliato.
Stampa del valore di un parametro
Il valore di un parametro in un dato punto del programma, può essere visualizzato tramite l’istruzione:
parm=?
dove parm è il nome di un qualsiasi parametro escluso PRK.
Il valore di un elemento di vettore può essere visualizzato tramite l’istruzione:
array(expr[,expr,... ])=?
dove array è il nome di un vettore ed expr valgono gli indici dell’elemento richiesto.
La richiesta di visualizzazione di un parametro stringa è effettuata nello stesso modo, così per esempio, supponendo che il parametro ST0 contenga la stringa “ABCDEF”, l’istruzione ST0=? darà come risultato la visualizzazione del messaggio: ST0 = “ABCDEF”.
Un parametro stringa può contenere fino a 256 caratteri, tuttavia la lunghezza massima del messaggio effettivamente visualizzato è di 30 caratteri.
La richiesta di visualizzazione di un alias_PRK genera il messaggio: parm= PRK.

3.7 Unità di misura

Il CN può essere programmato in pollici o in millimetri; l’unità di misura che all’accensione viene settata automaticamente è il millimetro. È comunque possibile scrivere dei programmi interamente
30
CNI Engineering
program-it.fm (10-10-07)
Page 37
3 Programmazione
in pollici, nonostante l’unità di misura settata siano i millimetri oppure intercalare quote in pollici in programmi in millimetri, o viceversa.
Programmazione in millimetri o in pollici
Per imporre la programmazione in pollici si deve utilizzare l’istruzione modale G70. Per imporre la programmazione in millimetri si deve utilizzare l’istruzione modale G71.
Le istruzioni G70 e G71 devono essere inserite nel programma principale prima di qualsiasi espressione. La prima valutazione di espressione implica infatti il bloccaggio automatico dell’unità di misura. Se non sono state programmate le istruzioni G70 oppure G71, si attiva la scelta dell’unità di misura di default.
Dopo il bloccaggio dell’unità di misura, che rimane valida anche per tutte le subroutine usate e fino al termine del programma, saranno ignorate eventuali istruzioni G70 e G71.

3.8 Assi

Ad ogni asse deve essere assegnato un nome formato, al massimo, da tre caratteri alfanumerici. Il primo carattere deve essere necessariamente una lettera.
Indicando con axis il generico nome di un asse, nessuna delle combinazioni alfanumeriche che seguono deve coincidere con il nome di una istruzione:
axis istruzione di posizionamento assoluto
axisI istruzione di posizionamento incrementale
axisO istruzione di spostamento origine
Faxis istruzione di assegnamento velocità
Saxis istruzione di assegnamento fattore di scala
Eaxis istruzione di assegnamento accelerazione
Iaxis istruzione di anticipo arrivo asse
Taxis istruzione di assegnamento quota di tastatura
Per esempio, se il sistema dispone di 16 assi, i cui nomi, definiti in un apposito file, sono:
X, Y, Z, U, V, W, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9;
sono associate automaticamente le istruzioni:
XI, XO, FX, SX, EX, IX, TX; YI, YO, ... SA8, EA8, IA8, TA8 ; A9I, A9O, FA9, SA9, EA9, IA9, TA9 .

3.9 Origini

Si possono distinguere diversi sistemi di riferimento, in base alle varie origini che si possono avere, che sono:
Origine macchina o assoluta,
Origini pezzo o esterne,
Origine programma o interna.
Origine macchina o assoluta
Questo è un punto preferenziale definito per ciascun asse, dal costruttore della macchina, tramite un dato macchina che ne fissa la sua posizione rispetto al punto che viene usato dal sistema per eseguire l’azzeramento automatico dell’asse.
program-it.fm (10-10-07)
CNI Engineering
31
Page 38
3 Programmazione
Origini pezzo o esterne
Questi sono dei punti riferiti alla origine assoluta, sui quali è possibile posizionare con precisione il pezzo da lavorare tramite l’accostamento ad opportune battute. L’origine pezzo deve essere selezionata, tra le origini fisse disponibili nei dati macchina, dall’operatore prima dell’esecuzione del programma. È tuttavia possibile assegnare un valore qualunque anche dall’interno del programma per mezzo di istruzione di cambio origine esterna.
Origine programma o interna
Questa origine è relativa alla origine pezzo attiva in quel momento, e per default coincide con quest’ultima. È possibile modificarla tramite le istruzioni di cambio origine interna.
All’origine interna sono riferite tutte le quote relative (non assolute) del programma, quindi lo spostamento dell’origine interna equivale alla traslazione del programma rispetto all pezzo.
Spostamento di origine
L’istruzione di spostamento origine per ogni asse è:
axis0[=]expr
dove axis è il nome dell’asse del quale si vuole modificare l’origine; l’uso dell’uguale è obbligatorio se l’espressione comincia con un parametro. Per esempio: WO300 YO=LPY/2 assegnano una nuova origine a W (300) e a Y (LPY/2).
Se è attivo il modo G58 lo spostamento origine è interno e rimane noto soltanto all’interprete, che considera la nuova origine come riferimento delle quote successive. Se invece è attivo il modo
G59 lo spostamento origine è esterno.

3.10 Zoom

La quota assegnata ad un asse viene normalmente considerata in scala reale, cioè si considera attivo, per default, un fattore di scala pari a 1 per ogni asse. È tuttavia possibile cambiare singolarmente o globalmente i fattori di scala degli assi per ottenere, automaticamente, la riduzione o l’ingrandimento di un programma.
Cambiamento del fattore di scala di un asse
L’istruzione di assegnamento del fattore di scala per un singolo asse è:
Saxis[=]expr
dove axis è il nome dell’asse per il quale si vuole modificare il fattore di scala.
Cambiamento del fattore di scala globale
L’istruzione di assegnamento del fattore di scala per tutti gli assi è:
SF[=]expr
l’uso dell’uguale è obbligatorio se l’espressione comincia con un parametro.
Per esempio: SW1.5 SY=LPY/1000 assegnano un nuovo fattore di scala a W (1.5) e a Y (LPY/
1000).
Le origini interne di ciascun asse al momento del cambio di scala, forniranno le coordinate dell’unico punto del disegno che conserverà la posizione, tale punto sarà quindi quello rispetto al quale si avvicineranno o allontaneranno, a seconda dei fattori di scala, i vari punti programmati.
È da notare a tal proposito che la proiezione di questo punto particolare sul piano xy attivo in quel momento, coincide sempre con il polo di rotazione. Quindi il cambio di fattore di scala di uno degli assi del piano principale può provocare lo spostamento del polo di rotazione e, viceversa, il
32
CNI Engineering
program-it.fm (10-10-07)
Page 39
3 Programmazione
cambio di angolo di rotazione può provocare il cambiamento delle coordinate x y del punto centrale di zoom.
Se i fattori di scala degli assi del piano principale sono diversi non sono permessi passi in interpolazione circolare.

3.11 Triedro fondamentale

Tra tutti gli assi della macchina se ne possono scegliere tre, che l’interprete del programma considererà formare, nell’ordine dato, una terna destra la cui origine è definita “polo di rotazione”. Questo triedro fondamentale gode di alcune proprietà:
Sul piano principale è possibile interpolare circolarmente ed ellitticamente e può essere
attivata la correzione del raggio utensile (a patto che gli assi del piano siano controllati dalla stessa scheda assi).
Sul piano principale si possono usare le istruzioni geometriche avanzate.
Il triedro fondamentale può essere ruotato attorno al suo asse z, ciò significa che le quote
assegnate agli assi del piano principale subiscono la trasformazione di coordinate corrispondente alla rotazione degli assi.
La definizione del terzo asse della terna è necessaria per l’uso dei modi di interpolazione G9, G10,
G11.
Per default, il triedro fondamentale è formato dagli assi X, Y, Z.
Selezione degli assi della terna ed asserviti
La selezione degli assi della terna si ottiene con la seguente istruzione:
AX=m1[:s1_1[:s1_2...]] [,m2[:s2_1[:s2_2...]]][,m3[:s3_1[:s3_2...]]][,...]
dove: m1, m2, m3 sono le sigle degli assi che formano il triedro principale e s1_n, s2_n, s3_n sono le sigle degli assi asserviti ai “master” m1, m2, m3, rispettivamente. Si possono indicare fino a 6 assi “master”, mentre il numero massimo di assi “slave” dichiarabili è pari a 12. Gli assi “slave” seguono il movimento dell’asse “master” a cui sono asserviti in tutti i movimenti di interpolazione. Gli assi m1 ed m2 definiscono il piano principale. L’asse m3 (facoltativo) completa la terna di riferimento principale. Per esempio: AX=U,V,W definisce la terna destra formata dagli assi U, V e W e la macchina potrà quindi interpolare circolarmente con gli assi U e V. Gli assi non appartenenti alla coppia principale ammettono solo interpolazione lineare.
È possibile dichiarare un solo asse master seguito dagli slave. In questo caso non esiste nessun piano principale (nessun asse principale x e y) ed è possibile la sola interpolazione lineare senza la C.R.U.
Rotazione degli assi della terna
La rotazione degli assi che formano il piano principale, attorno al polo di rotazione, si effettua mediante le seguenti istruzioni:
RT[=]expr
RTI[=]expr
RTO[=]expr
dove expr indica un valore in gradi sessadecimali, con orientamento positivo nel verso antiorario ; l’uso dell’uguale è obbligatorio se l’espressione comincia con un parametro.
Queste istruzioni possono servire anche per fissare il polo di rotazione (cioè l’origine del triedro). Tale punto viene infatti definito dalla posizione dell’origine interna al momento dell’esecuzione di una delle istruzioni citate. L’istruzione RTO serve a fissare l’angolo di origine da cui si considera di
program-it.fm (10-10-07)
CNI Engineering
33
Page 40
3 Programmazione
fare cominciare la rotazione, il cui angolo viene fissato tramite l’istruzione RT, o modificato di una certa quantita tramite l’istruzione RTI.
Per default l’angolo di origine e di rotazione sono posti a zero. Quindi, per esempio, se si ha questa sequenza di istruzioni:
RTO=15 RT14.5 RTI-2
alla fine gli assi del piano principale saranno stati ruotati in senso antiorario di 27.5 gradi sessadecimali (cioè 27 gradi e 30 primi), infatti l’origine della rotazione è stata posta a 15 gradi, l’angolo di rotazione posto inizialmente pari a 14.5 gradi è stato successivamente diminuito di 2 gradi, quindi 15+14.5-2 = 27.5
L’angolo di rotazione e la relativa origine sono indipendenti dalla selezione della terna e rimangono inalterati se questa viene successivamente cambiata; ciò significa che il nuovo piano principale continua ad avere gli assi ruotati dello stesso angolo di cui erano ruotati gli assi del piano principale della terna precedente.
Per cercare di chiarire meglio come funziona la rotazione degli assi e il “congelamento” del polo di rotazione, vediamo il seguente esempio di programma associato al disegno riportato in figura
1:
N10 XO200 YO200 RTO0 RT45
N20 G0 X0 Y0
N30 G1 X100
N40 X0400 RT45
N50 G1 X0
N60 G1 Y100
Figura 1
400
300
200
100
45
45
45
45
34
0
100
200
CNI Engineering
300
400
program-it.fm (10-10-07)
Page 41
3 Programmazione

3.12 Movimento assi

Indicando con axis il generico nome di asse, vediamo quali sono le istruzioni per il loro movimento.
Assegnamento di una quota assoluta
La successiva posizione di un asse viene assegnata tramite l’istruzione:
axis[=]expr
dove expr indica la posizione dell’asse rispetto all’origine valida in quel momento; tale origine è quella interna se è attivo il modo G54 e l’espressione non comprende il parametro PRK, altrimenti è l’origine macchina se viceversa è attivo il modo G53 o l’espressione comprende il parametro
PRK.
L’uso dell’uguale è obbligatorio se il nome dell’asse termina con un numero o se l’espressione comincia con un parametro.
Ad esempio: le istruzioni X100 Z=LPZ-50 provocano il movimento di X alla quota 100 e di Z alla quota LPZ-50.
Assegnamento di una quota incrementale
È anche possibile assegnare la posizione successiva di un asse rispetto alla sua ultima posizione programmata, invece che alla origine, usando l’istruzione:
axisI[=]expr
dove l’uso dell’uguale è obbligatorio se l’espressione comincia con un parametro.
Così per esempio: XI1000 ZI-10 incrementano l’ultima posizione programmata di 1000 per X e di ­10 per Z.
Assegnamento della velocità di regime
La velocità di regime per i movimenti indipendenti (modo G0) è selezionata, per ogni asse, tramite l’istruzione:
Faxis[=]expr
dove expr indica un valore di velocità espresso in metri/minuto o in millimetri/secondo, dipendendo dalla impostazione dei dati macchina, sia per la programmazione in millimetri che in pollici. L’uso dell’uguale è obbligatorio se il nome dell’asse termina con un numero o se l’espressione comincia con un parametro.
Per esempio: FX2.00 FZ0.5 assegnano le velocità di 2 m/min a X e di 0.5 m/min a Z.
La velocità di regime per i movimenti degli assi in interpolazione su una traiettoria (modi G1, G2,
G3, G4, G5, G6, G7, G8, G9, G10, G11) è scelta tramite l’istruzione:
F[=]expr
Anche in questo caso la velocità è sempre espressa in m/min., o mm/sec. L’uso dell’uguale è obbligatorio se l’espressione comincia con il nome di un parametro.
Assegnamento della accelerazione
Con particolari versioni di software è possibile assegnare anche le accelerazioni da usare nelle variazioni di velocità. Le istruzioni per ottenere quanto sopra, dove permesso, hanno le sintassi:
E[=]expr per i movimenti interpolati
Eaxis[=]expr per i movimenti indipendenti
program-it.fm (10-10-07)
CNI Engineering
35
Page 42
3 Programmazione
dove expr indica la percentuale di accelerazione da usare rispetto a quella dichiarata nei dati macchina.

3.13 Lettura posizioni e origini assegnate

È possibile inserire in una espressione il valore di posizione o di origine interna assegnate ad un asse nel corso di un programma. Questo si ottiene usando lo stesso nome della istruzione per l’assegnamento.
Così, per esempio, X=100 assegna la posizione 100 all’asse indicato da X e ABC=X assegna il valore della posizione di X al parametro ABC. Analogamente per le origini.
Occorre fare attenzione al fatto che, il valore di posizione asse letto è quello riferito al valore dell’origine interna corrente per lo stesso asse; questo significa che se si legge la posizione di un asse dopo aver cambiato l’origine dello stesso si legge un valore diverso da quello assegnato prima del cambio origine.
In ogni caso la posizione letta non ha alcuna attinenza con la posizione reale istantanea dell’asse durante l’esecuzione del programma.
La lettura della posizione di un asse durante una sequenza di passi che fanno uso delle istruzioni della Programmazione Geometrica Assistita (descritta oltre) può ritornare un valore non corretto, invece, dopo la fine della sequenza si può ottenere il valore richiesto.

3.14 Lettura quota di tastatura dell’asse

Nella tastatura in interpolazione, la quota di tastatura è depositata in una variabile indipendente per ognuno degli assi coinvolti nel movimento; la quota relativa ad un asse si ottiene con l’istruzione Taxis. Per esempio: AAA=TX legge la quota di tastatura dell’asse X e la deposita nel parametro AAA.

3.15 Posizionamento

Il posizionamento è un movimento degli assi della macchina da un dato punto verso il successivo punto programmato. I movimenti degli assi della macchina sono indipendenti fra loro, cioè ogni asse va verso la quota assegnata, con la sua velocità, indipendentemente dalla quota e dalla velocità degli altri assi. I posizionamenti sono effettuati quando è attivo il modo G0.
Le quote indicate per un asse subiscono la traslazione di origine dello stesso asse, tuttavia, in generale, il solo spostamento della origine di un asse non provoca il suo movimento, finché non venga espressamente dichiarata una istruzione di assegnamento di posizione, per quell’asse.
Se l’angolo di rotazione della terna è diverso da zero, le quote dei due assi che compongono il piano principale subiscono l’opportuna trasformazione di coordinate; in tal caso l’assegnamento di posizione di uno di questi due assi è sufficiente per obbligare l’interprete al ricalcolo completo delle quote effettive di entrambi gli assi del piano. Vediamo per esempio il seguente programma:
N10 G0 XO100 YO100 X0 Y0
N20 X50
N30 RT90 X50
Nella linea 10 viene impostato il modo G0 cioè posizionamento, viene posta l’origine interna alle coordinate x=100 y=100 e viene indicato il punto di coordinate x=0 y=0; rispetto al pezzo andremo alle coordinate 100,100. Nella linea 20 viene posto x=50; rispetto al pezzo andremo alle coordinate 150,100 e avremo il movimento di un solo asse. Nella linea 30 il piano xy è ruotato di 90 gradi in senso antiorario attorno all’origine interna (100,100) e viene ribadita la posizione x=50; stavolta rispetto al pezzo andremo alle coordinate 100,150 e avremo il movimento di entrambi gli assi del piano.
36
CNI Engineering
program-it.fm (10-10-07)
Page 43
3 Programmazione
Dichiarazione anticipata di “Assi posizionati”
Normalmente il passo di posizionamento viene dichiarato “eseguito” (e viene inviato un opportuno segnale al PLC) solo quando per ogni asse comandato la distanza dal suo punto di arrivo è minore di quella dichiarata nel dato macchina “Anticipo fine posizionamento”. In particolari applicazioni può essere utile dichiarare in anticipo il “passo eseguito”, questo si ottiene con l’istruzione:
Iaxis[=]expr
dove expr indica la distanza dal punto di arrivo per l’asse axis entro la quale l’asse si considererà già arrivato.
Istruzioni modali ‘‘Gexpr’’ per i posizionamenti
Alcune istruzioni modali (Gexpr) modificano l’esecuzione dei posizionamenti: vediamo quali sono.
Istruzioni G60 e G61Mediante la programmazione di posizionamenti in modalità G60 è possibile
realizzare dei “cicli” di posizionamento (riguardanti uno o più assi) eseguiti in maniera asincrona rispetto l’esecuzione del programma.
Il programma, mediante l’istruzione G61, può sincronizzarsi con i vari cicli programmati in modalità
G60. In corrispondenza di una istruzione G61 l’esecuzione del programma viene bloccata fino a
che non sono stati portati a termine i precedenti posizionamenti attuati con modalità G60. In un passo contenente l’istruzione G60 è possibile programmare:
istruzioni riguardanti posizionamento di assi, (velocità, accelerazione, anticipo, ritardo),
istruzioni T che vengono gestite SOLO per quanto riguarda i correttori degli assi, ma non per
quanto riguarda i segnali di scambio con il PLC.
Altri tipi di istruzioni che coinvolgono segnali con il PLC (M, KA, S, ...) non possono comparire nello stesso passo in cui è inserita l’istruzione G60.
Esempio 1
Nel seguente esempio sono programmati due posizionamenti asincroni relativamente agli assi X e Y (passi N20 e N30); il programma non attende il completamento dei posizionamenti programmati nelle linee N20 ed N30 ma passa immediatamente a comandare il posizionamento dell’asse Z (passo N40).
Nel passo N60 viene programmata l’istruzione G61; tale programmazione blocca la prosecuzione del programma fino a che non sono stati completati i posizionamenti presenti nel passo N30.
N10 X500 Y500 Z100
N20 X100 Y100 G60
N30 X400 Y400 G60
N40 Z300
N50 Z800
N60 Z1000 G61
N70 X200 Y200 Z200
Esempio 2
Il seguente programma è equivalente al programma riportato nell’Esempio 1 dato che la programmazione della istruzione G61 può avvenire in un passo non contenente istruzioni di posizionamento.
N10 X100 Y100 Z100
program-it.fm (10-10-07)
CNI Engineering
37
Page 44
3 Programmazione
N20 X100 Y100 G60
N30 X400 Y400 G60
N40 Z300
N50 Z800
N60 Z1000
N60 G61
N70 X200 Y200 Z200
Ripristino della modalità di posizionamento ‘‘normale”Con modalità di posizionamento “normale” si indica il posizionamento non in modalità G60. Un asse comandato in modalità G60 non può essere programmato in modalità “normale” se non dopo un’istruzione G61.
Esempio 3:
programmazione non corretta.
N10 X100 Y100 Z100
N20 X100 Y100 G60
N30 X400 Y400 G60
N40 Z300
N50 Z800
N60 X100 Z1000 ;PASSO SCORRETTO
Esempio 4:
di programmazione corretta.
N10 X100 Y100 Z100
N20 X100 Y100 G60
N30 X400 Y400 G60
N40 Z300
N50 Z800
N55 G61
N60 X100 Z1000
Programmazione di più cicli in modalità G60È possibile programmare più cicli in modalità G60 i
quali oltre che essere asincroni rispetto alla esecuzione del programma risultano asincroni tra loro.
Esempio 5:
passi di posizionamento asincroni rispetto al programma e sincroni fra loro.
Nell’esempio 4 sono stati programmati i seguenti passi:
N20 X100 Y100 G60
N30 X400 Y400 G60
38
CNI Engineering
program-it.fm (10-10-07)
Page 45
3 Programmazione
tali passi costituiscono un unico ciclo asincrono rispetto al programma; essi vengono eseguiti in sequenza: il passo N30 viene eseguito solo dopo che entrambi i posizionamenti di N20 sono stati completati.
Se si vuole rendere asincroni i posizionamenti di X e Y tra loro, occorre programmare 2 cicli in modalità G60 come segue:
N20 X100 G60
N30 X400 G60;PRIMO CICLO
;
N31 Y100 G60
N32 Y400 G60;SECONDO CICLO
I 2 cicli programmati risultano essere asincroni sia rispetto al programma sia fra loro. In particolare, poiché sono cicli costituiti ciascuno da un asse solo, i passi sono anche legati tra di loro (sono privi di fine ciclo).
Ulteriori informazioniSupponiamo di partire da una situazione in cui non c’è nessun ciclo di tipo
G60 in esecuzione.
Il primo passo di programma contenente l’istruzione G60 individua un insieme di assi che costituisce un ciclo di tipo G60. I successivi passi in modalità G60 in cui compaiono solo assi di quell’insieme fanno ancora parte di quel ciclo (ovvero sono sincronizzati tra loro).
Quando viene programmato un passo contenente l’istruzione G60 in cui compaiono solo assi non appartenti all’insieme precedente viene individuato un secondo ciclo.
I successivi passi contenenti l’istruzione G60 in cui compaiono solo assi appartenenti al secondo insieme vengono considerati appartenenti al secondo ciclo (ovvero saranno sincronizzati tra di loro).
Un passo programmato in modalità G60 in cui compaiono assi appartenenti all’ultimo insieme definito e almeno un asse non appartenente ad esso è considerato scorretto.
Un singolo ciclo programmato in modalità G60 non può essere costituito da più di 15 passi.
Esempio 7
programmazione corretta.
N10 X100 Y100 Z100 U100 V100 W100
;
N20 X100 Y100 G60
N30 X400 Y400 G60
N20 X100 Y100 G60
N30 X400 Y400 G60;PRIMO SET
;
N20 Z100 U100 G60
N30 Z400 U400 G60
N20 Z100 U100 G60;SECONDO SET
N20 V100 W100 G60
program-it.fm (10-10-07)
CNI Engineering
39
Page 46
3 Programmazione
N30 V400 W400 G60
N20 V100 W100 G60
N20 V100 W100 G60
N30 V400 W400 G60
N20 V100 W100 G60;TERZO SET
N40 A1=100 A2=100 A3=100
N40 A1=200 A2=200 A3=200
N40 A1=100 A2=100 A3=100
N55 G61;ATTESA DI TUTTI I 3 CICLI
;
N10 X100 Y100 Z100 U100 V100 W100
N60 X100 Z1000
;
;ETC. ETC.
Esempio 8
programmazione scorretta.
N10 X100 Y100 Z100 U100 V100 W100
;
N20 X100 Y100 G60
N30 X400 Y400 G60
N20 X100 Y100 G60
N30 X400 Y400 G60
;
N20 X100 Z100 U100 G60;QUESTO PASSO CONTIENE L’ASSE X
;(APPARTENENTE AL PRIMO SET) E Z,U
;CHE NON VI APPARTENGONO
Esempio 9
programmazione scorretta.
N10 X100 Y100 Z100 U100 V100 W100
;
N20 X100 Y100 G60
N30 X400 Y400 G60
N20 X100 Y100 G60
N30 X400 Y400 G60;PRIMO SET
40
CNI Engineering
program-it.fm (10-10-07)
Page 47
;
N20 Z100 U100 G60
N30 Z400 U400 G60
N20 Z100 U100 G60;SECONDO SET
;
N41 X500 Y500 G60
N42 X600 Y600 G60
N43 X700 Y700 G60;QUESTO CICLO HA ASSI CHE APPARTENGONO
;A UN CICLO PRECEDENTE
Programmazione corretta:
N10 X100 Y100 Z100 U100 V100 W100
;
N20 X100 Y100 G60
3 Programmazione
N30 X400 Y400 G60
N20 X100 Y100 G60
N30 X400 Y400 G60;PRIMO SET
;
N41 X500 Y500 G60
N42 X600 Y600 G60
N43 X700 Y700 G60
;
N20 Z100 U100 G60
N30 Z400 U400 G60
N20 Z100 U100 G60;SECONDO SET
È inoltre scorretto definire un ciclo di tipo G60 con assi gestiti da schede assi diverse in quanto i vari passi non possono essere mai sincronizzati. In tal caso occorre spezzare il ciclo in più cicli ognuno dei quali viene gestito dalla stessa scheda.
Istruzione G66L’istruzione G66 rende possibile dare lo start contemporaneo su vari cicli indipendenti.
Esempio:
N10 X0 Y0
N20 X100 Y100 [G66]
N30 X500 Y400 [G66]
N40 X600 Y700 [G66]
N50 X700
program-it.fm (10-10-07)
CNI Engineering
41
Page 48
3 Programmazione
In una sequenza del genere si avranno 2 cicli (su X e Y) costituiti ciascuno da 3 posizionamenti. È essenziale la presenza di G66 nel passo di apertura mentre negli altri è superfluo. Il ciclo si interrompe al primo passo che non contiene tutti gli assi presenti nel passo di apertura (nel nostro caso ci sarà un fine ciclo alla fine di N40) o per altre condizioni di fine ciclo. Se non fosse programmata la G66 nel passo N20 si avrebbe un fine ciclo alla fine di ogni passo. Nel passo in cui è presente la G66 un asse viene comandato anche se è programmata una quota ribadita (cosa che normalmente non avverrebbe).

3.16 Interpolazione

In interpolazione, nel movimento verso il successivo punto programmato, oltre al raggiungimento delle sue coordinate, importa la traiettoria seguita per arrivarci che, a seconda dei casi, può essere: un segmento di retta, un arco di cerchio o di ellisse, un arco di elica cilindrica.
I movimenti degli assi della macchina sono legati fra loro e fanno sì che il punto si muova lungo la traiettoria con la velocità di interpolazione fissata.
Anche per le interpolazioni vale il discorso che è stato fatto precedentemente per i posizionamenti, sulle traslazioni e rotazioni delle coordinate dei punti programmati.
Interpolazione lineare
Nell’interpolazione lineare la traiettoria è un segmento di retta, che congiunge il punto di partenza con il punto di arrivo. Per eseguire i movimenti in interpolazione lineare deve essere attivo il modo
G1.
Il sistema è in grado di interpolare contemporaneamente su 6 assi cioè muovere un punto lungo un segmento di retta di uno spazio a 6 dimensioni
Interpolazione circolare
Nell’interpolazione circolare la traiettoria è un arco di cerchio, che congiunge il punto di partenza con il punto di arrivo. Questa interpolazione può essere eseguita solamente su piani paralleli al piano principale. Vi sono 5 istruzioni modali (G2, G3, G4, G5, G6) per eseguire i movimenti in interpolazione circolare, a seconda dei dati forniti per completare la definizione dell’arco.
Dato per scontato che oltre al punto finale è sempre noto il punto di inizio, si hanno le seguenti possibilità:
• Arco noto il centro (G2 o G3)
Si esegue con la modalità G2 se il verso è orario o con la modalità G3 se il verso è antiorario . Le coordinate del centro sono definite mediante le istruzioni I e J, rispettivamente per gli assi x e y del piano principale. Il CN controlla che la distanza tra il punto iniziale e il centro sia uguale alla distanza tra il punto finale e il centro, entro la tolleranza assegnata dal dato macchina Toll. raggio
interpolazione. Il valore consigliato è 0.1 mm. Se tale controllo non è superato il CN esegue
una correzione delle coordinate del punto finale in modo tale da riportare la differenza fra le due distanze calcolate all’interno del range di tolleranza. Oltre tale valore il sistema segnala un errore fatale e si ferma. Se il punto finale coincide con quello iniziale viene eseguito un arco di 360 gradi.
• Arco noto il raggio (G4 o G5)
Si esegue con la modalità G4 se il verso è orario, o con la modalità G5 se il verso è antiorario . Il valore del raggio viene definito mediante l’istruzione R ed il segno di questo serve a stabilire quale dei due possibili archi deve essere usato. Se il raggio è positivo si percorre l’arco che ha il centro a destra della retta orientata che va dal punto di partenza al punto di arrivo, altrimenti si percorre l’arco con il centro a sinistra della stessa retta. Il sistema controlla che la distanza tra il punto iniziale e finale non sia maggiore del doppio del raggio impostato, entro la tolleranza specificata dal dato macchina Toll. raggio interpolazione. Oltre
42
CNI Engineering
program-it.fm (10-10-07)
Page 49
3 Programmazione
tale valore il sistema segnala un errore fatale e si ferma. Se il punto finale coincide con quello iniziale non viene eseguito alcun movimento.
• Arco tangente al passo precedente (G6)
Si esegue con la modalità G6. Il sistema genera automaticamente un arco di circonferenza (o al limite un segmento di retta) in tangenza continua con il passo precedente, fino al punto programmato. Il segmento di retta viene eseguito nel caso che il punto finale si trovi esattamente sulla tangente di uscita dal passo precedente.
Definizione delle coordinate del centro Le coordinate del centro sono definite con le istruzioni:
I[=]expr per il primo asse del triedro principale
J[=]expr per il secondo asse del triedro principale
K[=]expr per il terzo asse del triedro principale
dove expr indica il valore (espresso nell’unità scelta), della coordinta rispetto all’origine valida in quel momento; tale origine è quella interna se è attivo il modo G54, o è l’origine macchina se viceversa è attivo il modo G53. L’uso dell’uguale è obbligatorio se l’espressione comincia con un parametro.
Ad esempio, le istruzioni: I100 J=LPZ-5 fissano le coordinate del centro a (100, LPZ-50).
Le coordinate del centro subiscono le trasformazioni dovute alla traslazione e rotazione della terna, esattamente come le quote degli assi che formano il piano principale.
Definizione della lunghezza del raggio Il raggio è definito tramite l’istruzione:
R[=]expr
dove il modulo di expr indica la lunghezza del raggio, in millimetri o pollici a seconda dell’unità scelta, mentre il segno serve da discriminante per la soluzione dell’arco, come descritto in precedenza. L’uso dell’uguale è obbligatorio se l’espressione comincia con un parametro.
Se qualcuno dei valori richiesti non è stato definito, il sistema usa per questo l’ultimo dei valori impostati. Affinchè venga generato un movimento deve però essere stata impostata almeno una coordinata del punto di arrivo.
Interpolazione circolare nello spazio, dato il centroSi esegue con la modalità G9 se l’arco è minore di 180 gradi ovvero con modalità G10 se è maggiore di 180 gradi. Le coordinate del centro sono definite mediante le istruzioni I, J, K per gli assi x, y, z, della terna principale, rispettivamente. Il CN controlla che la distanza tra il punto iniziale e il centro sia uguale alla distanza tra il punto finale e il centro entro la tolleranza assegnata (il valore di tolleranza di default è 0.1 mm). Oltre tale valore il sistema segnala un errore fatale e si ferma. Se il punto iniziale, il centro e il punto finale sono allineati (arco di 180 gradi) è segnalato un errore fatale.
Interpolazione circolare nello spazio, dato un punto intermedioSi esegue con la modalità
G11. Le coordinate del punto intermedio sono definite mediante le istruzioni I, J, K per gli assi x, y,
z, della terna principale, rispettivamente. I punti iniziale, intermedio e finale devono essere distinti e non allineati. In caso contrario il sistema segnala un errore fatale.
Interpolazione ellittica
Nell’interpolazione ellittica la traiettoria è un arco di ellisse; la traiettoria avviene in un piano parallelo al piano principale. Vi sono 2 istruzioni modali (G7, G8) per eseguire i movimenti in interpolazione ellittica a seconda che l’arco debba essere percorso in senso orario (G7) o in senso antiorario (G8).
Per la definizione dell’arco di ellisse devono essere indicati: il punto finale, le coordinate del centro (come per la circonferenza) e le lunghezze dei semiassi, specificate tramite le istruzioni:
RI[=]expr per il semiasse parallelo a x (primo asse)
program-it.fm (10-10-07)
CNI Engineering
43
Page 50
3 Programmazione
RJ[=]expr per il semiasse parallelo a y (secondo asse)
dove il modulo di expr indica la lunghezza del semiasse, in millimetri o pollici a seconda dell’unità di misura scelta.
L’uso dell’uguale è obbligatorio se l’espressione comincia con un parametro.
Se qualcuno dei valori non è stato definito, il sistema usa l’ultimo dei valori impostati.
Il sistema controlla che i punti iniziali e finali appartengano all’ellisse, di centro e semiassi indicati, con una tolleranza di 0.05 mm; superato tale valore il sistema segnala un errore e si blocca.
Interpolazione elicoidale
Nell’interpolazione elicoidale la traiettoria è un arco di elica, con l’asse longitudinale perpendicolare al piano principale, che congiunge il punto di partenza con il punto di arrivo.
La proiezione del movimento sul piano principale può essere un arco di circonferenza o di ellisse. La definizione di un passo in interpolazione elicoidale è del tutto simile a quella di un passo in interpolazione circolare o ellittica, con l’unica differenza che viene impostato uno spostamento anche su uno o più assi (max 4) non appartenenti al piano principale, che interpolano linearmente fra loro e insieme a una quantità angolare usata dal sistema nella costruzione dell’arco.
Valgono ancora gli stessi controlli operati dal sistema nel caso di interpolazione circolare o ellittica, che sono eseguiti come se non fossero stati impostati spostamenti sugli assi dell’elica.
In G2 o G3 è possibile eseguire un arco di 360 gradi, e quindi un passo completo di elica. Volendo eseguire più passi è sufficiente ripetere n-volte il movimento; per esempio:
N10 X100 Y0 Z0 G0 ;POSIZIONAMENTO
N20 X100 I0 J0 ZI20 G3 RP10 ;10 GIRI COMPLETI DI PASSO 20MM
In interpolazione elicoidale circolare la velocità di percorrenza impostata è riferita alla effettiva traiettoria.

3.17 Smussi e raccordi

Smusso
Tra due segmenti contigui, giacenti su un piano parallelo al piano principale e non tangenti fra loro, è possibile inserire un passo che smussa l’angolo da loro formato. Questo passo viene calcolato automaticamente dal sistema tramite l’istruzione:
BM[=]expr
dove expr indica la lunghezza del tratto, in millimetri o pollici a seconda dell’unità scelta, di cui sarà accorciato ciascuno dei due segmenti, a partire dal loro punto di contatto. L’uso dell’uguale è obbligatorio se l’espressione comincia con un parametro.
Il sistema, naturalmente, controlla che la lunghezza di ciascuno dei segmenti interessati dallo smusso sia maggiore della lunghezza dello smusso stesso; se ciò non si verifica segnala un errore fatale e interrompe l’esecuzione del programma.
La condizione di giacenza dei segmenti su un piano parallelo al piano principale non è necessaria per il calcolo dello smusso, tuttavia questo viene eseguito correttamente solo in questo caso; diversamente il sistema calcola lo smusso rispetto alle proiezioni dei due segmenti sul piano parallelo a quello principale in cui giace il loro punto di contatto e lo smusso stesso giacerà su questo piano. Ciò comporterà anche una modifica dei rimanenti tratti dei segmenti rispetto alla traiettoria originale. L’esempio di programma che segue specifica quanto detto; in figura
2 è
rappresentato il movimento degli assi programmato.
G0 X=500 Y=100 Z=0
44
CNI Engineering
program-it.fm (10-10-07)
Page 51
3 Programmazione
G1 Y=600 Z=300 BM=100
G1 X=100 Z=500
Figura 2 segmento AB (1) smusso; X’Y’ piano parallelo al piano principale XY; Linea Continua: segmenti originali; Linea a trattini: traiettoria seguita dopo il calcolodello smusso; Linea a puntini:segmenti proiezione sull’asse principale
Z
F’’
O’
A’
O
X’
I
X
A
B’
C’
F
B’
C
1
Y’
Y
Raccordo
È possibile imporre che il CN raccordi automaticamente, mediante un passo circolare, due elementi qualsiasi contigui, giacenti nel piano o nello spazio. Nel caso in cui i due elementi giacciano su un piano parallelo al piano principale occorre utilizzare l’istruzione:
BR[=]expr
dove expr indica la lunghezza del raggio di raccordo, in millimetri o pollici a seconda dell’unità di misura scelta.
L’uso dell’uguale è obbligatorio se l’espressione comincia con un parametro. Il sistema, naturalmente, controlla che i punti di inizio e di fine del raccordo siano contenuti all’interno degli elementi da raccordare; se ciò non si verifica (probabilmente perchè il raggio del raccordo impostato è troppo grande) segnala un errore fatale e interrompe l’esecuzione del programma. Il calcolo del raccordo viene eseguito correttamente solo nel caso in cui i due elementi giacciano su un piano parallelo al piano principale. Se tale piano di giacenza non è parallelo a quello principale il raccordo è calcolato rispetto alle proiezioni dei due elementi sul piano principale.
Mediante l’istruzione:
BR3D[=]expr
è possibile inserire un passo di raccordo circolare fra due entità geometriche lineari contigue, non tangenti fra loro, giacenti nello spazio. expr indica la lunghezza del raggio di raccordo, in millimetri o pollici a seconda dell’unità di misura scelta. Nel caso in cui si sia assegnato un raggio tale per cui i punti di inizio e fine raccordo non siano contenuti all’interno degli elementi da raccordare il sistema diminuisce automaticamente il raggio di raccordo. Il minimo raggio di raccordo, corretto automaticamente dal sistema, è tale da far “assorbire”, al massimo, metà del più corto dei due segmenti dati. Il raccordo viene attuato solo fra segmenti il cui angolo è inferiore a 170 gradi.
program-it.fm (10-10-07)
CNI Engineering
45
Page 52
3 Programmazione
N.B. L’istruzione di raccordo BR3D non fa parte dell’insieme standard delle istruzioni del linguaggio CNI-ISO. Per poter utilizzare tale istruzione occorre richiedere alla CNI una versione non standard del software di gestione della programmazione geometrica.

3.18 Modalità dinamiche di movimento

Nella fase di interpolazione, durante un movimento continuo degli assi, il CN verifica se due passi consecutivi sono tangenti oppure formano uno spigolo. Il movimento degli assi in corrispondenza dello spigolo viene determinato mediante le seguenti istruzioni modali G46, G47, G27, G28.
Movimento in modalità G46
È la modalità dinamica di default. Con il settaggio della istruzione G46 viene imposto agli assi di rallentare fino fermarsi, in corrispondenza di spigoli, ed attendere che la posizione reale di tutti gli assi interpolanti entri nella tolleranza di posizione assegnata nei Dati Tecnici.
Questa modalità dinamica garantisce la miglior precisione di traiettoria e non introduce discontinuità sui riferimenti di velocità di tutti gli assi interpolanti.
I movimenti in G0 seguono sempre questa modalità di movimento.
Movimento in modalità G47
Con il settaggio della istruzione G47 la velocità nominale degli assi non viene modificata e quindi non si ha nessun rallentamento in corrispondenza di spigoli. In generale, gli assi presentano una discontinuità sul riferimento di velocità, dovuta al cambio di direzione. L’effettiva traiettoria seguita dipende dalla risposta dinamica degli asservimenti, i quali vengono sollecitati con riferimenti di velocità a gradino, la cui risposta dipende dalla taratura dell’anello di regolazione di velocità.
Questa modalità garantisce la continuità di movimento su una traiettoria non continua geometricamente ma introduce notevoli sollecitazioni meccaniche in risposta ai gradini di velocità.
Movimento in modalità G27
Con il settaggio della istruzione G27 viene imposto agli assi di rallentare fino fermarsi, in corrispondenza di spigoli, senza però attendere che la posizione reale di tutti gli assi interpolanti entri nella tolleranza di posizione assegnata nei Dati Tecnici.
Questa modalità dinamica garantisce la continuità sui riferimenti di velocità ma non l’assoluta fedeltà alla traiettoria geometrica.
L’istruzione G27 può essere utilizzata quando la fermata dell’utensile avviene in aria e non a contatto con il pezzo da lavorare.
Movimento in modalità G28
Con il settaggio della istruzione G28 viene imposto agli assi di rallentare, in corrispondenza di spigoli, senza però imporre che si fermino.
Questo realizza un compromesso fra la precisione geometrica e la velocità di esecuzione dei movimenti.
I riferimenti di velocità sono discontinui anche se in misura ridotta rispetto alla modalità G47.
L’istruzione G28 può settare 4 tipi di modalità diverse in funzione dei valori assegnati nei seguenti dati:
TABELLE → TABELLE MACCHINA → LINEE → Modo G28 TABELLE → TABELLE MACCHINA → LINEE → Primo parametro G28 TABELLE → TABELLE MACCHINA → LINEE → Secondo parametro G28
46
CNI Engineering
program-it.fm (10-10-07)
Page 53
3 Programmazione
Modo 0 (default):
TABELLE → TABELLE MACCHINA → LINEE → Modo G28 =0
la velocità degli assi in corrispondenza di uno spigolo è proporzionale all’angolo formato dai due passi contigui nell’intervallo da 0 a 180 gradi.
Modo 1:
TABELLE → TABELLE MACCHINA → LINEE → Modo G28 =1
la velocità degli assi in corrispondenza di uno spigolo è proporzionale all’angolo formato dai due passi contigui nell’intervallo compreso fra Primo parametro G28 e Secondo parametro G28. L’unità di misura dei dati Primo parametro G28 e Secondo parametro G28 sono i gradi.
Per angoli compresi fra 0 e Primo parametro la velocità nello spigolo è data da:
vel.=min{vel. passo n-1, vel. passo n}
dove vel. passo n-1 e vel. passo n sono le velocità di regime dei passi n-1 ed n rispettivamente. Per angoli compresi fra Secondo parametro G28 e 180 gradi la velocità nello spigolo è uguale a zero.
Modo 2:
TABELLE → TABELLE MACCHINA → LINEE → Secondo parametro G28 =2
Il rallentamento della velocità nello spigolo è dato dal valore assegnato a Primo parametro G28 (in percentuale).
Ad esempio: Primo parametro G28=20 impone un calo del 20% della velocità di regime in corrispondenza dello spigolo.
Modo 3:
TABELLE → TABELLE MACCHINA → LINEE → Modo G28 =3
La velocità nello spigolo viene calcolata automaticamente dal CN per garantire che la traiettoria rimanga alla minima distanza dallo spigolo.
Tale distanza minima è assegnata mediante il dato Primo parametro G28. L’unità di misura sono i mm. Per un corretto funzionamento di questa modalità è necessario stimare le caratteristiche dinamiche di ogni asse coinvolto nell’interpolazione.
In Fig. 3 sono riportati i diagrammi di velocità relativi a quattro passi consecutivi, formanti tre spigoli, nel caso in cui la velocità programmata non cambia.
program-it.fm (10-10-07)
CNI Engineering
47
Page 54
3 Programmazione
Figura 3 a) percorso nel piano (x,y), b) diagramma di velocità sul profilo, in dipendenza della modalità programmata, nel caso in cui la velocità programmata non cambi
y
a)
G46
G47
b)
G27
1
V
1
V
1
V
1
2
2
2
3
3
3
23
x
P
P
P
V
G28
1
In Fig. 4 sono riportati i diagrammi di velocità per gli assi x e y nel caso in cui percorrano un profilo quadrato con i lati paralleli agli assi coordinati.
48
CNI Engineering
2
3
P
program-it.fm (10-10-07)
Page 55
3 Programmazione
Figure 4 a) percorso nel piano (x,y), b) diagrammi di velocità per gli assi x e y durante la percorrenza del profilo quadrato.
3
y
a)
24
1
x
Vx
b)
G46
G47
Vy
Vx
Vy
Vx
P
1
2
3
4
P
P
1
2
3
4
P
G28
Vy
program-it.fm (10-10-07)
P
1
2
CNI Engineering
3
4
P
49
Page 56
3 Programmazione
Controllo su velocità e accelerazione
Il sistema effettua dei controlli sulle velocità e le accelerazioni degli assi allo scopo di rispettare i limiti imposti nei dati macchina e, se necessario, modifica la velocità nominale impostata nel programma.
Interpolazione lineareIn interpolazione lineare, velocità e accelerazione vengono proiettate su ogni asse proporzionalmente alla sua componente di moto e si verifica che ogni asse rispetti i limiti di velocità e accelerazione massime.
Nel caso in cui qualche asse non rispettasse i suoi valori massimi la velocità complessiva di avanzamento viene ridotta in modo tale da garantire che tutti gli assi rientrino nei limiti ammessi.
Interpolazione circolare (ed elicoidale)Vengono eseguiti tre controlli in sequenza:
verifica della massima velocità angolare. La massima velocità angolare viene limitata per
default da un valore legato al tempo di campionamento pari a:
Wmax=1/(20 * T)
dove T è il tempo di campionamento e Wmax è espressa in radianti al secondo. Ad esempio, con un tempo di campionamento di 2 msec. si ottiene una velocità angolare massima di 25 rad./sec. e quindi un cerchio di raggio R=3mm può essere percorso a una velocità tangenziale massima di 3*25=75 mm/sec. ovvero 4.5 m/min. Questo valore di default può essere modificato mediante il dato macchina:
DATI MACCHINA → ASSI → < nome asse > → Max velocità angol. interp.
Se questo dato è nullo, l’asse non contribuisce a modificare il valore di default. Un valore diverso da zero viene confrontato con i valori relativi agli altri assi e utilizzato per ricalcolare la velocità angolare massima considerando il valore minimo fra quelli non nulli.
verifica della accelerazione centripeta. Il sistema controlla che l’accelerazione centripeta, durante la fase in cui la velocità e pari alla velocità di regime, non superi quella massima degli assi appartenenti al piano principale di interpolazione (i due assi che interpolano circolarmente).
Per soddisfare questa condizione viene, eventualmente, ridotta la velocità nominale del passo.
verifica della massima velocità lineare. Su ogni asse che interpola circolarmente viene calcolata la massima velocità raggiunta lungo l’arco di circonferenza verificando che sia inferiore alla massima velocità ammessa. Di nuovo viene ridotta la velocità programmata se non sono rispettati i limiti massimi.
50
CNI Engineering
program-it.fm (10-10-07)
Page 57

4 Programmazione di direzioni spaziali di lavoro

4 Programmazione di direzioni spaziali di lavoro

4.1 Orientazione spaziale dei mandrini

Ogni mandrino può assumere una qualunque direzione spaziale determinata dai suoi offset spaziali (Angolo sul piano orizzontale e Angolo sul piano verticale) definiti nelle tabelle dei Correttori presenti nel programma applicativo Dati Tecnici. Il punto di lavoro dell’utensile viene calcolato in base agli offset del mandrino e alla lunghezza dell’utensile montato.

4.2 Orientazione spaziale degli aggregati

Un aggregato è un oggetto costituito da uno o più sottomandrini. La geometria dell’aggregato è definita nella Tabella Aggregati presente nell’insieme dei dati di Attrezzaggio del programma applicativo Dati Tecnici. Questi dati di definizione sono relativi a una terna cartesiana destrorsa avente l’origine coincidente con la presa di forza dell’aggregato stesso.
Ogni sottomandrino appartenente ad un aggregato può assumere una qualunque direzione spaziale determinata dai suoi offset angolari (Angolo sul piano orizzontale e Angolo sul piano verticale) definiti nelle tabelle dei Sottomandrini presenti nel programma applicativo Dati Tecnici.
È possibile anche programmare rotazioni che si sommano algebricamente a quelle di default. Queste rotazioni sono relative al centro di rotazione dell’aggregato e sono programmate mediante le istruzioni:
AR[=]expr
AZ[=]expr
dove expr è una espressione che deve avere come risultato un numero la cui unità di misura sono i gradi sessadecimali.
Esempio di programmazione
N20 TP2:2 AR=90 AZ=45
Nel passo N20 è programmata la rotazione dell’aggregato montato sul mandrino pantografo 2; l’orientazione finale è data dalla somma algebrica degli angoli di rotazione programmati e degli offset angolari del sottomandrino 2.
N.B.: ogni volta che si programma una istruzione di tipo TP è buona norma programmare anche le istruzioni AR e AZ opportunamente.
orienta-it.fm (10-10-07)
CNI Engineering
51
Page 58
4 Programmazione di direzioni spaziali di lavoro
52
CNI Engineering
orienta-it.fm (10-10-07)
Page 59

5 P. G. A.

5 P. G. A.
La Programmazione Geometrica Assistita (P.G.A.) è una facilitazione, attiva solo sul piano principale, che permette di impostare dei passi dei quali non si conoscono le coordinate del punto finale, ma si conoscono però dei legami rispetto al passo successivo, (per esempio tangente o secante), il valore di un angolo, di una lunghezza, o più in generale dei dati ricavabili direttamente dal disegno, ma non direttamente impostabili nella usuale maniera di programmazione.
L’insieme dei blocchi necessari e sufficienti a permettere al sistema di calcolare tutte le coordinate di un elemento geometrico (punto di arrivo e/o centro di un cerchio) costituisce una sequenza geometrica.
Una sequenza geometrica ha come origine il punto di partenza del suo primo elemento. Tale punto può essere o programmato nel passo precedente, o calcolato dal sistema; infatti il primo blocco di una sequenza geometrica può essere l’ultimo della sequenza precedente.
Il sistema è in grado di risolvere fino a sequenze di tre passi incompleti, tuttavia non è capace di risolvere una sequenza con tutte le innumerevoli combinazioni di dati che la rendono geometricamente determinata, cioè non è in grado di inventare la risoluzione sul momento (questo in generale è un problema di non facile soluzione). Il sistema conosce soltanto la risoluzione di un certo numero di sequenze diverse che gli sono state messe in memoria, ed è solo di queste che si può fare uso; il loro numero dovrebbe essere tuttavia sufficiente a racchiudere se non tutti, almeno la maggior parte dei casi che si possono realmente presentare.
L’elenco delle sequenze riconosciute è riportato alla fine del presente capitolo.

5.1 Istruzioni per la Programmazione Geometrica

Nella definizione dei passi con la programmazione geometrica assistita si aggiungono altre istruzioni che sono:
BS[+|-] passo secante al successivo
BT[+|-] passo tangente al successivo
nelle quali [+|-] indica la presenza facoltativa di un segno “+“o di un segno “-“, che serve come discriminante tra due soluzioni possibili, quando la sequenza impostata offre questa alternativa. Nel caso sia necessario, se il discriminante è omesso viene considerato “+“.
Altre istruzioni usate sono:
BA[=]expr
dove expr è un valore in gradi sessadecimali che indica l’angolo che la retta orientata passante tra punto iniziale e finale di un segmento forma con l’asse x, oppure la ampiezza angolare di un arco di circonferenza; e infine:
BL[=]expr
dove expr è un valore in millimetri o in pollici, a seconda dell’unità di misura usata, che indica la lunghezza sia per un segmento che per un arco di circonferenza. L’uso dell’uguale è obbligatorio se l’espressione comincia con un parametro.
Il valore delle espressioni presenti nelle precedenti istruzioni può anche essere negativo. Nel caso di BA applicato ad un segmento il significato è ovvio; non altrettanto si può dire per l’arco e per l’istruzione BL. L’effetto prodotto da tale situazione verrà descritto più avanti con l’aiuto di qualche esempio.
Affinché un passo non completamente definito possa far parte di una sequenza nella programmazione geometrica assistita è nesessario che sia presente almeno una di queste quattro istruzioni. Diversamente le sue informazioni riguardanti i due assi del piano principale poterebbero essere ignorate e/o male interpretate.
geometr-it.fm (10-10-07)
CNI Engineering
53
Page 60
5 P. G. A.
L’istruzione di passo tangente al successivo (BT) può essere omessa qualora nel passo vi sia anche una istruzione BA. L’istruzione di passo secante il successivo (BS) invece non può mai essere omessa.
Infine, alcune istruzioni non sono eseguibili all’interno di una sequenza in P.G.A., come per esempio: lo spostamento origine del piano principale, il cambiamento della terna degli assi, e il salto di programma o la chiamata a subroutine. In questi casi l’interprete blocca l’esecuzione del programma.

5.2 Uso del discriminante

Nella risoluzione di alcune sequenze si può avere più di una soluzione, come nel caso di intersezione retta-cerchio o cerchio-cerchio, in cui ne sono possibili due, o nel calcolo di elementi tangenti, in cui vi potrebbero essere anche più di due soluzioni. A tal proposito, occorre tuttavia precisare che il numero delle soluzioni viene comunque limitato a un massimo di due, dal fatto che il sistema realizza solo delle tangenze “continue” cioè senza arretramento.
Dove sono possibili due soluzioni, un discriminante consente di sopprimere l’indeterminazione. La programmazione del discriminante è inclusa nelle istruzioni BT e BS tramite l’aggiunta di un segno ”+” o “-“. Tali segni servono a precisare la posizione di un punto caratteristico (intersezione, tangenza, centro di cerchio) di ambedue le soluzioni rispetto ad una particolare retta orientata (che indicheremo con D). La retta orientata (D) è:
1. la retta a cui appartiene un segmento definito tramite l’istruzione BA, se vi è un elemento così definito tra i due elementi interessati, e nel caso siano entrambi definiti in tal modo vale il primo dei due, altrimenti è:
2. la retta che congiunge un punto noto del primo elemento, (prioritariamente un centro di arco se noto, altrimenti il punto iniziale), con il primo dei punti noti reperibili tra secondo e ultimo elemento, (sempre con priorità per un eventuale centro di arco rispetto al punto finale).
Il punto caratteristico soggetto a discriminazione è:
il punto di tangenza/intersezione nel caso in cui la retta (D) sia determinata come nel caso 1),
altrimenti è
il centro di un arco se questo non è noto o, diversamente da ciò,
il punto di tangenza/intersezione.
Individuata la retta orientata (D) e il punto caratteristico, possono presentarsi due casi:
1. i due possibili punti soluzione si trovano sulla retta orientata (D); in tal caso “+“ definisce il punto più vicino a “ “
− ∞“.
+ ∞“ sulla retta orientata, mentre viceversa “-“ definisce il punto più vicino a
2. i due possibili punti soluzione si trovano da una parte e dall’altra della retta orientata (D); in tal caso “+“ definisce il punto a sinistra della retta orientata, e viceversa “-“ definisce il punto a destra .
Infine, un caso particolare di discriminate è quello che sfrutta il segno dell’espressione di BL quando si calcola un segmento di cui si conosce, oltre al punto iniziale, solo una delle coordinate del punto finale. In tal caso un valore positivo dell’espressione indicherà tra le due coordinate possibili quella di valore maggiore e viceversa per un valore negativo.
Le tavole di esempi, presentate nel paragrafo 5.4, associate all’elenco dei casi possibili, serviranno a rendere più chiaro il modo in cui sono applicate queste regole dal sistema.
54
CNI Engineering
geometr-it.fm (10-10-07)
Page 61
5 P. G. A.

5.3 Elenco dei casi risolti dalla P.G.A.

Quando si attiva la programmazione geometrica le istruzioni G4 e G5 vengono automaticamente convertite in G2 e G3, rispettivamente, ed in tal modo sono dall’interprete geometrico. Per quanto detto, nella seguente tabella non comparirà mai l’istruzione G4(5) che comunque è ammessa.
Le istruzioni X e Y indicano gli assegnamenti ai due assi del piano principale.
I blocchi contrassegnati con (*) danno la soluzione per quelli che lo precedono ma rimangono incompleti, per cui diventano il primo blocco nella successiva descrizione del programma. La tabella
Tabella 6 Tabella P.G.A.
6 organizza tutti i casi previsti dalla programmazione geometrica.
PRIMO BLOCCO RETTILINEO
Step 1 Step 2 Step 3
G1 BA... X... G1 BA... Y...
GA BA... BL...
G1 BL[+|-]... X...
G1 BL[+|-]... Y... GA BA... BS G1 BA... X... Y...
G1 BA... [BT] G2(3) I... J... R... BT(*)
G1 BA... BS...[+|-] G2(3) I... J... R... BT(*)
G2(3) I... J... R... BS(*)
G2(3) I... J... R... BA...
G2(3) I... J... R... BL...
G2(3) I... J... X... Y... G2(3) I... J... BT G1 BA... X... Y... G2(3) I... J... BT...[+|-] G2(3) I... J... R... BT(*)
G2(3) I... J... R... BS(*)
G2(3) I... J... R... BA...
G2(3) I... J... R... BL...
G2(3) I... J... X... Y...
G2(3) I... J... R... BS(*)
G2(3) I... J... R... BA...
G1 BA... [BT] G2(3) I... J... BT(*)
G2(3) I... J... BS(*)
G2(3) I... J... BA...
G2(3) I... J... BL...
geometr-it.fm (10-10-07)
CNI Engineering
G2(3) I... J... R... BL...
G2(3) I... J... X... Y...
55
Page 62
5 P. G. A.
Step 1 Step 2 Step 3
G1 BA... [BT[+|-]] G2(3) R... X... Y... G1 BA... [BT] G2(3) R... BT G1 BA... X... Y... G1 BA... [BT[+|-]] G2(3) R... BT G2(3) I... J... R... BT(*)
G2(3) I... J... R... BS(*)
G2(3) I... J... R... BA...
G2(3) I... J... R... BL...
G2(3) I... J... X... Y...
G1 BT... G2(3) I... J... R... BT(*)
G2(3) I... J... R... BS(*)
G2(3) I... J... R... BA...
G2(3) I... J... R... BL...
G2(3) I... J... X... Y... G2(3) I... J... BT... G1 BA... X... Y... G2(3) I... J... BT[+|-] G2(3) I... J... R... BT(*)
PRIMO BLOCCO CIRCOLARE
Step 1 Step 2 Step 3
G2(3) BL... I... J... G2(3) BA... I... J... G2(3) BT I... J... G1 BA... [BT](*)
G1 BA... BS(*)
G1 BA... BL...
G1 BA... X... G1 BA... Y...
G1 X... Y... G1 BT G2(3) I... J... R... BT(*)
G2(3) I... J... R... BS(*)
G2(3) I... J... R... BA...
G2(3) I... J... R... BL...
G2(3) I... J... X... Y...
G2(3) I... J... R... BS(*)
56
CNI Engineering
G2(3) I... J... R... BA...
G2(3) I... J... R... BL...
G2(3) I... J... X... Y...
geometr-it.fm (10-10-07)
Page 63
Step 1 Step 2 Step 3
G2(3) BT[+|-] I... J... G2(3) I... J... BT(*)
G2(3) I... J... BS(*)
G2(3) I... J... BA...
G2(3) I... J... BL...
G2(3) R... X... Y... G2(3) R... BT G1 BA... X... Y...
G2(3) BS[+|-] I... J... G1 BA... X... Y...
G1 BA... [BT] G2(3) I... J... R... BT(*)
5 P. G. A.
G2(3) I... J... R... BT(*)
G2(3) I... J... R... BS(*)
G2(3) I... J... R... BA...
G2(3) I... J... R... BL...
G2(3) I... J... X... Y...
G2(3) I... J... R... BT(*)
G2(3) I... J... R... BS(*)
G2(3) I... J... R... BA...
G2(3) I... J... R... BL...
G2(3) I... J... X... Y... G2(3) I... J... BT G1 BA... X... Y... G2(3) I... J... BT[+|-] G2(3) I... J... R... BT(*)
G2(3) BT[+|-] R ... G1 BA... X...Y...
G1 BA... [BT] G2(3) I... J... R... BT(*)
G2(3) I... J... R... BS(*)
G2(3) I... J... R... BA...
G2(3) I... J... R... BL...
G2(3) I... J... X... Y...
G2(3) I... J... R... BS(*)
G2(3) I... J... R... BA...
G2(3) I... J... R... BL...
G2(3) I... J... X... Y...
geometr-it.fm (10-10-07)
CNI Engineering
G2(3) I... J... R... BS(*)
G2(3) I... J... R... BA...
G2(3) I... J... R... BL...
G2(3) I... J... X... Y...
57
Page 64
5 P. G. A.
Y
X
Y
X
Step 1 Step 2 Step 3
G2(3) I... J... R... BT(*)
G2(3) I... J... R... BS(*)
G2(3) I... J... R... BA...
G2(3) I... J... R... BL...
G2(3) I... J... X... Y... G2(3) I... J... BT G1 BA... X... Y... G2(3) I... J... BT[+|-] G2(3) I... J... R... BT(*)
G2(3) I... J... R... BS(*)
G2(3) I... J... R... BA...
G2(3) I... J... R... BL...
G2(3) I... J... X... Y...

5.4 Esempi di casi possibili di P.G. A.

XY
G1 BA... BS G1 BA... X... Y...
BA
BA
BA
BA
R
IJ
G1 BA... BS G1 BA...[BT]
G2 I...J...R...BT(*)
G2 I...J...R...BS(*)
G2 I...J...R...BA...
 
G2 I...J...R...BL...
G2 I...J...X...Y...
58
CNI Engineering
geometr-it.fm (10-10-07)
Page 65
Y
X
BS-
Y
X
Y
X
Y
X
BA
BA
G2
IJ
IJ
R
BS+
R
XY
G2
D
D
G1 BA... BS
G1 BA... BS[+]
G2 I...J...R...BT(*)
 
G2 I...J...R...BS(*)
G2 I...J...R...BA...
G2 I...J...R...BL...
 
G2 I...J...X...Y...
G2 I...J...R...BT(*)
 
G2 I...J...R...BS(*)
G2 I...J...R...BA...
G2 I...J...R...BL...
 
G2 I...J...X...Y...
5 P. G. A.
BS[+]
D
XY
BS-
IJ
BA
G3
XY
BA
IJ
G3
D
BA
G1 BA... BS- G3 I... J... BT G1 BA... X... Y...
BA
G1 BA... BS[+] G3 I... J... BT G1 BA... X... Y...
geometr-it.fm (10-10-07)
CNI Engineering
59
Page 66
5 P. G. A.
Y
X
Y
X
Y
X
Y
X
BS-
BA
BA
G3
BS-
IJ
G3
IJ
G3
D
G2
G2 I...J...R...BT(*) G2 I...J...R...BS(*) G2 I...J...R...BA... G2 I...J...R...BL... G2 I...J...X...Y...
G2 I...J...R...BT(*) G2 I...J...R...BS(*) G2 I...J...R...BA... G2 I...J...R...BL... G2 I...J...X...Y...
IJ
R
R
IJ
G1 BA... BS- G3 I... J... BT[+]
D’
G1 BA... BS- G3 I... J... BT-
D
      
      
BA
BA
IJ
G3
G2
G1 BA... [BT]
IJ
XY
G1 BA... [BT] G3 R... BT G1 BA X... Y...
BA
R
      
G2 I...J...BT(*) G2 I...J...BS(*) G2 I...J...BA... G2 I...J...BL...
60
CNI Engineering
geometr-it.fm (10-10-07)
Page 67
5 P. G. A.
Y
X
X
Y
Y
X
Y
X
BA
BA
BT-
BA
BT-
G3
R
XY
R
G3
R
XY
BT+
D
D
G2
IJ
R
G3
G1 BA... BT- G3 R... X... Y...
D
G1 BA... [BT[+]] G3 R... X... Y...
G1 BA... BT- G2 R... BT
      
G3 I...J...R...BT(*) G3 I...J...R...BS(*) G3 I...J...R...BA... G3 I...J...R...BL... G3 I...J...X...Y...
D
BT[+]
BA
geometr-it.fm (10-10-07)
G3
G2
R
G1 BA... [BT[+]] G2 R... BT
IJ
R
CNI Engineering
      
G3 I...J...R...BT(*) G3 I...J...R...BS(*) G3 I...J...R...BA... G3 I...J...R...BL... G3 I...J...X...Y...
61
Page 68
5 P. G. A.
Y
X
Y
X
Y
X
Y
X
BA
BT
IJ
G3
IJ
G2 I...J...R...BT(*)
G2
R
XY
G1 BT...
G1 BT... G3 I... J... BT G1 BA... X... Y...
BA
 
G2 I...J...R...BS(*)
G2 I...J...R...BA...
G2 I...J...R...BL...
 
G2 I...J...X...Y...
BT
G3
BT
IJ
BT-
IJ
G2
G3
 
IJ
G3
D
IJ
R
G1 BT... G2 I... J... BT
R
G1 BT... G3 I... J... BT-
    
      
G3 I...J...R...BT(*) G3 I...J...R...BS(*) G3 I...J...R...BA... G3 I...J...R...BL... G3 I...J...X...Y...
G3 I...J...R...BT(*) G3 I...J...R...BS(*) G3 I...J...R...BA... G3 I...J...R...BL... G3 I...J...X...Y...
62
CNI Engineering
geometr-it.fm (10-10-07)
Page 69
5 P. G. A.
Y
X
Y
X
X
Y
X
Y
G2
G2
IJ
IJ
BA
XY
G1 BA...[BT](*) G1 BA...BS(*) G1 BA...BL... G1 BA...X... G1 BA...Y...
G2 BT I... J...
      
G2 BT I... J... G1 X... Y...
G2
G2
IJ
IJ
BT
BT
IJ
IJ
 
XY
G3
G2
R
G2 BT I... J... G1 BT
G2 BT I... J... G1 BT
    
      
G3 I...J...R...BT(*) G3 I...J...R...BS(*) G3 I...J...R...BA... G3 I...J...R...BL... G3 I...J...X...Y...
G2 I...J...R...BT(*) G2 I...J...R...BS(*) G2 I...J...R...BA... G2 I...J...R...BL... G2 I...J...X...Y...
geometr-it.fm (10-10-07)
CNI Engineering
63
Page 70
5 P. G. A.
X
Y
Y
X
Y
X
Y
X
G2
G2
BT-
G2
IJ
IJ
IJ
G3
IJ
G2 BT I... J...
G2 BT- I... J...
D
      
      
G3 I...J...R...BT(*) G3 I...J...R...BS(*) G3 I...J...R...BA... G3 I...J...R...BL...
G2 I...J...R...BT(*) G2 I...J...R...BS(*) G2 I...J...R...BA... G2 I...J...R...BL...
G2
IJ
G2
IJ
BT[+]
G3
R
D
G3
R
BT[+]
G2 BT[+] I... J... G3 R... X... Y...
D
XY
BA
G2 BT[+] I... J... G3 R... BT G1 BA... X... Y...
64
CNI Engineering
geometr-it.fm (10-10-07)
Page 71
5 P. G. A.
Y
X
Y
X
Y
X
Y
X
G2
G2
IJ
IJ
BT-
BT[+]
G2
R
G3
R
G2
R
IJ
IJ
G2 BT[+] I... J... G3 R... BT
D
D
G2 BT- I... J... G2 R... BT
G3
     
      
G2 I...J...R...BT(*) G2 I...J...R...BS(*) G2 I...J...R...BA... G2 I...J...R...BL... G2 I...J...X...Y...
G3 I...J...R...BT(*) G3 I...J...R...BS(*) G3 I...J...R...BA... G3 I...J...R...BL... G3 I...J...X...Y...
G2
G2
BS-
IJ
IJ
BS[+]
BA
IJ
XY
D
BA
D
G2
R
G2 BS[+] I... J... G1 BA... X... Y...
 
G2 BT- I... J... G1 BA... [BT]
    
G2 I...J...R...BT(*) G2 I...J...R...BS(*) G2 I...J...R...BA... G2 I...J...R...BL...
G2 I...J...X...Y....
geometr-it.fm (10-10-07)
CNI Engineering
65
Page 72
5 P. G. A.
Y
X
Y
X
Y
X
Y
X
G2
G2
IJ
IJ
BS[+]
BS-
G2
G2
IJ
IJ
 
R
D
G2 BT[+] R...
D
G2 BS- I... J... G3 I... J... BT G1 BA... X... Y...
XY
BA
    
G2 I...J...R...BT(*) G2 I...J...R...BS(*) G2 I...J...R...BA... G2 I...J...R...BL... G2 I...J...X...Y...
G2
IJ
G2
IJ
BS-
BS[+]
G3
IJ
G3
IJ
IJ
D
G2
R
G3
R
G2 BS[+] I... J..............G3 I... J... BT
IJ
D
G2 BS- I... J......... G3 I... J... BT[+]
D’
G2 I...J...R...BT(*)
G2 I...J...R...BS(*)
G2 I...J...R...BA...
 
G2 I...J...R...BL...
G2 I...J...X...Y...
G3 I...J...R...BT(*)
 
G3 I...J...R...BS(*)
G3 I...J...R...BA...
G3 I...J...R...BL...
 
G3 I...J...X...Y...
66
CNI Engineering
geometr-it.fm (10-10-07)
Page 73
Y
X
BT[+]
X
Y
Y
X
Y
X
G2
5 P. G. A.
D
XY
BA
R
XY
G2 BT[+] R... G1 BA... X... Y...
D
BT-
G2
BT[+]
G2
BA
G2 BT- R... G1 BA... X... Y...
R
XY
IJ
G2 BT[+] R... G1 BA... [BT]
D
BA
R
      
G3 I...J...R...BT(*) G3 I...J...R...BS(*) G3 I...J...R...BA... G3 I...J...R...BL... G3 I...J...X...Y...
G3 I...J...R...BT(*)
 
D
G2
R
BT-
geometr-it.fm (10-10-07)
IJ
R
G3
G2 BT- R...
CNI Engineering
G3 I...J...R...BS(*)
G3 I...J...R...BA...
G3 I...J...R...BL...
 
G3 I...J...X...Y...
67
Page 74
5 P. G. A.
Y
X
Y
X
X
Y
Y
X
G2
BT-
XY
BA
IJ
R
G3
G2 BT- R... G3 I... J... BT G1 BA... X... Y...
D
BT-
R
BT[+]
G2
G2
XY
BA
IJ
G3
G2
R
IJ
IJ
R
D
G3
G2 BT[+] R... G3 I... J... BT G1 BA... X... Y...
D
G2 I...J...R...BT(*)
 
G2 I...J...R...BS(*)
G2 BT- R... G3 I... J... BT
G2 I...J...R...BA...
 
G2 I...J...R...BL...
G2 I...J...X...Y...
G2 I...J...R...BT(*)
 
D
G2
R
BT-
IJ
IJ
G3
68
G2 BT- R... G3 I... J... BT[+]
XY
G3
D’
CNI Engineering
G2 I...J...R...BS(*)
G2 I...J...R...BA...
G2 I...J...R...BL...
 
G2 I...J...X...Y...
geometr-it.fm (10-10-07)
Page 75

5.5 Programma esempio

Figura 5
Y
5 P. G. A.
55
19.2
25
R32
40
R5
R7
3
R50
30
R6
A
10
X
R10
15
4
11
R15
30
R5
N10 PAX=55+6 PAY=10 X=PAX Y=PAY
N20 G2 BT I55 J=PAY
N30 G1 BT
N40 G3 I30+7 J-3 R7 BT
N50 G1 BA-90 BS+
N60 G2 I0 J0 R50 BT
N70 G2 RR=50-5 AN1=-90-30 I=RR*_CAN1 J=RR*_SAN1 BA180
N80 G3 I0 J0 BS-
N90 G1 BA90-11+15
N100 G2 R15 I0 J0 BT
N110 G1 BA90-11 Y40 BR10
N120 G1 BA0 BS+
N130 G2 I4 J19.2 R32 BS-
geometr-it.fm (10-10-07)
CNI Engineering
69
Page 76
5 P. G. A.
N140 G1 BA180
N150 G3 I25 J=PAY+6+5 R5 BT
N160 G1 BT
N170 G2 I55 J=PAY X=PAX Y=PAY
70
CNI Engineering
geometr-it.fm (10-10-07)
Page 77

6 Correzione Raggio Utensile

6 Correzione Raggio Utensile
Ad ognuno degli utensili presenti nella macchina è associato un diametro utensile, del quale viene tenuto conto quando il controllo lavora con la correzione raggio utensile settata. Cioè il sistema compensa automaticamente il diametro dell’utensile, permettendo all’utilizzatore di crearsi un programma di lavoro indipendente dai diametri degli utensili usati.
La correzione raggio utensile viene eseguita solo su piani paralleli al piano principale. Se si interpola con più di due assi contemporaneamente la correzione viene eseguita solo sulla proiezione della traiettoria sul piano principale.

6.1 Istruzioni per la Correzione Raggio Utensile

La correzione raggio utensile (C.R.U.) oltre alle istruzioni modali G1, ..., G8, necessarie all’interpolazione, usa le seguenti istruzioni modali.
G40* Annullamento C.R.U.. Resettata da: G41, G42
G41 C.R.U a sinistra del profilo. Resettata da: G40, G42
G42 C.R.U. a destra del profilo. Resettata da: G40, G41
G68 Inserimento del passo di raccordo circolare in C.R.U. tra passi convessi non tangenti.
Resettata da G69.
G69* Intersezione delle traiettorie corrette in C.R.U. (se possibile). Resettata da G68.
L’asterisco (*) indica le funzioni attive all’inizio del programma.
Un programma di lavoro con la C.R.U. deve iniziare con un passo di attacco al profilo, lineare o circolare, in cui vengono programmate le istruzioni G41 o G42 e terminare con un passo di stacco dal profilo, anche questo lineare o circolare, in cui viene programmata l’istruzione G40.
L’utensile interessato alla lavorazione deve essere attivato prima del settaggio della C.R.U. e disattivato al reset della stessa o dopo.
Un programma che utilizza le istruzioni G41, G42, può essere usato senza la correzione raggio utensile, semplicemente impostando come raggio dell’utensile il valore 0.
correzi-it.fm (10-10-07)
CNI Engineering
71
Page 78
6 Correzione Raggio Utensile
200
500 900 1000

6.2 Attacco e Stacco Lineare

In Fig. 6 è riportato un esempio.
Figura 6 Raggio utensile 100; Linea Continua: traiettoria non corretta; Linea a trattini: traiettoria corretta
Y
700
600
400
200
O
X
N10 G0 X200 Y400 T5
N20 G1 X500 Y700 G42 F2 ; PASSO DI ATTACCO LINEARE
N30 X900
N40 X1000 Y200 G40 T0 ; PASSO DI STACCO LINEARE
Vengono eseguiti degli attacchi e stacchi non tangenti rispetto al profilo e ciò implica una fermata dopo il passo di entrata e prima del passo di uscita.
72
CNI Engineering
correzi-it.fm (10-10-07)
Page 79
6 Correzione Raggio Utensile
200
500 900 1000

6.3 Attacco e Stacco Circolare

In Fig. 7 è riportato un esempio.
Figura 7 Raggio utensile 100; Linea Continua: traiettoria non corretta; Linea a trattini: traiettoria corretta
Y
700
600
400
200
O
R660
R660
X
N10 G0 X200 Y400 T5
N20 G4 X500 Y700 R660 G42 F2 ; PASSO DI ATTACCO CIRCOLARE
N30 G1 X900
N40 G4 X1000 Y200 R660 G40 T0 ; PASSO DI STACCO CIRCOLARE
La traiettoria corretta in questo caso effettua un ingresso e una uscita tangenti al profilo del pezzo e non sono eseguite fermate.
Non ha alcuna importanza come sono definiti i passi N20 e N40, l’essenziale è soltanto che siano eseguiti anche senza correzione utensile con una interpolazione circolare.
Quindi la variazione dei G4 in G5, o del raggio da 660 a -500, per esempio, avrebbe provocato soltanto la variazione della traiettoria non corretta, mentre in correzione utensile sarebbe rimasta invariata.

6.4 Cambio immediato del verso di correzione

L’inserimento di una istruzione G41 mentre è attiva l’istruzione G42 viceversa l’inserimento di una istruzione G42 mentre è attiva l’istruzione G41, provoca il cambio immediato del lato di correzione. Nel caso in cui le istruzioni G42, G41 operino su un passo di programma in cui è settata la modalità G1, il cambio del verso di correzione è fatto in modo lineare. Negli altri casi è attuato mediante due archi di circonferenza. Tali archi sono tangenti fra loro: uno all’ingresso e uno all’uscita del profilo. Se il cambio del verso di correzione non viene eseguito linearmente è bene provarlo con estrema cautela.

6.5 Correzione per i diversi tipi di intersezione

La correzione del raggio utensile viene attuata in modi diversi a seconda della forma di traiettoria programmata. Di seguito riportiamo i vari casi di correzione previsti. La casistica è organizzata in base al tipo di intersezione delle entità geometriche utilizzate per programmare la traiettoria e all’angolo da esse formato. Nell’elenco seguente è indicata con (*) una istruzione data per default.
correzi-it.fm (10-10-07)
CNI Engineering
73
Page 80
6 Correzione Raggio Utensile
C
A
0
C
A
0
C1
0
N1
A
C
A
C
C1
A
Tabella 7 Intersezione Retta-Retta
Angolo Concavo: La compensazione è compiuta sulla
A
B
bisettrice delle due linee rette AB e BC come evidenziato in figura.
G42
C
G41
G41
G41
N1
Angolo Convesso < 120 gradi e
G69 *: Se l’angolo è
minore o uguale a 120 gradi e G69, la compensazione è
B
fatta sulla bisettrice delle due linee rette AB e BC come evidenziato in figura.
<12
Angolo Convesso < 120 gradi e
G68: Se l’angolo è
minore o uguale a 120 gradi e G68, il sistema genera
N2
B
<12
C1
B
N2
>12
automaticamente un raccordo circolare, arco C1, tra le due normali N1 e N2 erette al punto di intersezione B come evidenziato in figura. (Vedi anche raccordo circolare addizionale).
Angolo Convesso > 120 gradi:
Se l’angolo fra le linee rette
è maggiore di 120 gradi, il sistema genera automaticamente un raccordo circolare, arco C1, tra le due normali N1 e N2 erette al punto di intersezione B. La traiettoria corretta in
G41 sarà il segmento della linea retta parallela ad AB, l’arco
circolare C1 e il segmento di linea retta parallelo a BC, come evidenziato in figura. (Vedi anche raccordo circolare addizionale).
Tabella 8 Intersezione Retta-Circonferenza
Angolo Convesso < 90 gradi e
C
tangente alla circonferenza nel punto di intersezione con la
G69 *: Se l’angolo tra la
linea retta e la retta stessa è minore di 90 gradi e G69, la compensazione è effettuata sulla intersezione D delle due
<90
B
curve compensate come evidenziato in figura.
Angolo Convesso < 90 gradi e
G68: Se l’angolo tra la
tangente alla circonferenza nel punto di intersezione con la retta e la retta stessa è minore di 90 gradi e G68, il sistema genera automaticamente un raccordo circolare, arco C1, tra le
<90
B
G42
74
N2
N1
due normali N1 e N2 erette al punto di intersezione B come evidenziato in figura.
CNI Engineering
correzi-it.fm (10-10-07)
Page 81
6 Correzione Raggio Utensile
A
N1
A
N1
1
C
A
A
A
C
0
Angolo Convesso > 90 gradi: Se l’angolo tra la tangente alla
C
circonferenza nel punto di raccordo con la linea retta e la retta stessa è maggiore di 90 gradi, il sistema genera automaticamente un raccordo circolare tra le due normali N1
G42
>90
N2
B
C1
ed N2 erette all’intersezione del punto B.
G41
C
G41
Angolo = 180 gradi:
Se l’angolo tra la tangente alla
circonferenza nel punto di raccordo con la linea retta e la retta
N2
stessa è uguale a 180 gradi, la compensazione è eseguita nello stesso modo (circonferenza tangenziale con il punto di ritorno) come evidenziato nella figura.
B
C
G42
Angolo Concavo:
C
tangente alla circonferenza nel punto di raccordo e la retta, la compensazione è eseguita all’intersezione delle due curve compensate come evidenziato nelle figure.
B
B
Qualunque sia il valore dell’angolo tra la
Tabella 9 Intersezione Circonferenza-Circonferenza
Angolo Convesso < 10 gradi e
G41
D
B
<1
intersecando le due traiettorie corrette come evidenziato in figura.
G69*: La correzione è fatta
correzi-it.fm (10-10-07)
CNI Engineering
75
Page 82
6 Correzione Raggio Utensile
A
1
A
A
C
A
C
C1
A
Angolo Convesso > 10 gradi e G68: Il sistema genera
G41
N1
B
N2
automaticamente un raccordo circolare C1 tra le due normali N1 e N2 erette al punto di intersezione B come evidenziato in figura.
C
C
C
G42
G42
>10
Angolo Concavo:
Comunque sia l’angolo tra le due tangenti alla circonferenza nel punto B, la compensazione è effettuata all’intersezione delle due curve compensate come evidenziato nelle figure.
B
B
Tabella 10 Intersezione Retta-Ellisse
C
tangente della ellisse nel punto dell’intersezione con la linea
Angolo Convesso < 90 gradi e
G69 * : Se l’angolo tra la
retta e la retta stessa è minore di 90 gradi e G69, la compensazione è effettuata sulla intersezione delle due curve
<90
B
compensate come evidenziato in figura.
Angolo Convesso < 90 gradi e
G68: Se l’angolo tra la
tangente alla ellisse nel punto di intersezione con la retta e la retta stessa è minore di 90 gradi e G68, il sistema genera
B
G42
N1
<90
N2
76
automaticamente un raccordo circolare arco C1 tra le due normali N1 e N2 erette al punto di intersezione B come evidenziato in figura.
CNI Engineering
correzi-it.fm (10-10-07)
Page 83
6 Correzione Raggio Utensile
A
N1
A
N1
1
C
A
A
A
Angolo Convesso > 90 gradi: Se l’angolo tra la tangente alla
C
ellisse nel punto di raccordo con la linea retta e la retta stessa è maggiore di 90 gradi, il sistema genera automaticamente un raccordo circolare tra le due normali N1 e N2 erette in B come evidenziato in figura.
G42
>90
N2
B
C1
G41
C
G41
Angolo = 180 gradi:
Se l’angolo tra la tangente alla ellisse nel
punto di raccordo con la linea retta e la retta stessa è uguale a
N2
B
180 gradi, la compensazione è eseguita nello stesso modo.
C
G42
Angolo Concavo:
C
tangente alla ellisse nel punto di raccordo e la retta, la compensazione è eseguita all’intersezione delle due curve compensate come evidenziato nelle figure.
B
B
Qualunque sia il valore dell’angolo tra la
Tabella 11 Intersezione con Ellissi
Intersezione Ellisse-Circonferenza:
Il raccordo tra
ellisse e circonferenza e circonferenza ellisse è permesso
BC
A
solo quando le traiettorie hanno la stessa tangente nel punto di intersezione come evidenziato in figura.
Intersezione Ellisse-Ellisse:
Il raccordo tra ellisse ed ellisse è permesso solo quando le traiettorie hanno la stessa tangente nel punto di intersezione come
BC
evidenziato in figura.
correzi-it.fm (10-10-07)
CNI Engineering
77
Page 84
6 Correzione Raggio Utensile
A
2
C
N1
G41
C1
B
N
Raccordo circolare addizionale: Nella fase di inserzione di un passo circolare di raccordo, il centro dell’utensile viaggerà su una traiettoria parallela ad AB, percorrerà l’arco C1 e la traiettoria parallela a BC senza fermarsi sulla normale N1 e sulla normale N2, come evidenziato in figura.

6.6 Esempi di lavorazione

Esempio di lavorazione (interna ed esterna) di un profilo quadrato con due lati raccordati con traiettorie ellittiche e due con traiettorie circolari; il programma è impostato in modo da non fermare mai l’utensile quando è a contatto con il profilo come evidenziato nelle figure
Esempio di lavorazione esterna
Figura 8
8 e 9.
N10 G0 X0 Y0 Z0 F5 T1
N20 G1 Y300 G41
N30 G3 X200 Y500 I0 J500
N40 G1 Y1100
N50 G7 X400 Y1500 I400 J1100 RI200 RJ400
N60 G1 X1100
N70 G7 X1300 Y1100 I1100
N80 G1 Y500
N90 G2 X1100 Y300 J500
N100 G1 X400
78
CNI Engineering
correzi-it.fm (10-10-07)
Page 85
N110 G2 X200 Y500 I400
N120 G3 X0 Y700 I0
N130 G1 X0 Y0 G40 T0
Esempio di lavorazione interna
Figura 9
6 Correzione Raggio Utensile
N10 G0 X400 Y1100 Z0 F5 T1
N20 G1 Y900 G42
N30 G2 X200 Y1100 I400 J1100
N40 G7 X400 Y1500 I400 J1100 RI200 RJ400
N50 G1 X1100
N60 G7 X1300 Y1100 I1100
N70 G1 Y500
N80 G2 X1100 Y300 J500
N90 G1 X400
N100 G2 X200 Y500 I400
N110 G1 Y1100
N120 G2 X400 Y1300 J1100
N130 G1 Y1100 G40 T0
correzi-it.fm (10-10-07)
CNI Engineering
79
Page 86
6 Correzione Raggio Utensile

6.7 Controllo sulla velocità

Come riportato nella Sez. 3.18, il sistema effettua dei controlli su velocità e accelerazioni degli assi allo scopo di rispettare i limiti imposti dai dati macchina e, se necessario, modifica la velocità nominale impostata nel programma. Con la Correzione Raggio Utensile attiva può intervenire un ulteriore meccanismo di modifica della velocità programmata. Dato che i passi circolari subiscono una variazione di raggio, la velocità programmata viene diminuita proporzionalemente alla diminuzione del raggio per gli archi concavi mentre non viene modificata la velocità per gli archi convessi, cioè quelli per cui il raggio viene aumentato.
Questa riduzione di velocità può essere disattivata tramite speciali funzioni.
Modifica del raggio utensile da programma
È possibile modificare da programma il valore del raggio utensile utilizzato dal CN per le lavorazione in C.R.U. L’impostazione del nuovo valore può essere effettuata mediante l’istruzione
TR la cui sintassi è la seguente:
TR[=]expr
Si tenga presente che anche le istruzioni T, TP, TH, TS settano il valore del raggio utensile utilizzato per le lavorazioni in C.R.U.. Dato che il livello di esecuzione di tutte queste istruzioni è identico, occorre fare attenzione all’ordine con cui esse vengono scritte in una stessa linea di programma. Il CN, infatti, assegna al raggio utensile un valore pari a quello settato dall’ultima istruzione interpretata. L’istruzione TR la maggior parte delle istruzioni con argomento numerico, può far parte di una espressione. Ad esempio: TR=TR+1 incrementa di 1 il valore del raggio utensile corrente.
80
CNI Engineering
correzi-it.fm (10-10-07)
Page 87

7 Traslazione dei Correttori Mandrini Pantografi

7 Traslazione dei Correttori Mandrini Pantografi
Per i mandrini di tipo TP è possibile modificare da programma i valori dei correttori di default mediante le seguenti istruzioni:
TRX[=]expr
TRY[=]expr
TRZ[=]expr
dove expr è una espressione che indica una distanza in millimetri o pollici a seconda dell’unità scelta.
I valori programmati si sommano algebricamente ai correttori del mandrino attivo. Ogni volta che viene programmata una istruzione di questo tipo, il ricalcolo dei correttori viene effettuato a partire valore dei correttori di default.
Le correzioni programmate mediante le istruzioni descritte rimangono attive fino a una successiva loro riprogrammazione. Tali correzioni sono disattivate in caso di spegnimento della macchina, salvataggio dei Dati Tecnici, esecuzione di un cambio utensile.
traslaz-it.fm (10-10-07)
CNI Engineering
81
Page 88
7 Traslazione dei Correttori Mandrini Pantografi
82
CNI Engineering
traslaz-it.fm (10-10-07)
Page 89

8 Mandrini e utensili

8 Mandrini e utensili
Vediamo quali sono le istruzioni che riguardano mandrini e utensili.

8.1 Configurazione della testa

La configurazione della testa è selezionabile tra quelle in memoria, tramite l’istruzione:
HC[=]expr
dove expr è una espressione con risultato intero positivo. Questa istruzione deve essere posta all’inizio del programma.

8.2 Selezione dei mandrini

La selezione dei mandrini che devono operare in un certo istante viene fatta con le seguenti istruzioni:
T[=]spindle[:]tool[,spindle,...]
TH[=]spindle[:tool][,spindle,...]
TP[=]spindle[:tool][,spindle,...]
dove: spindle,spindle,... indica la serie dei numeri di identificazione dei mandrini che saranno attivati da quel punto in avanti e :tool, che può opzionalmente seguire solo il primo dei numeri di identificazione dei mandrini, indica nel caso di un mandrino multiutensile quale degli utensili deve essere attivato. L’uso del segno uguale è facoltativo. Il numero massimo di mandrini attivabili simultaneamente è 128.
Con la sintassi sopra indicata sia spindle che tool rappresentano costanti numeriche intere. E’ anche possibile selezionare i mandrini in modo indiretto utilizzando espressioni. Vi sono due possibilità, la prima è:
T[=]expr$
dove expr$ è una espressione con risultato alfanumerico che vale l’elenco dei mandrini come se fossero dichiarati direttamente, cioè del tipo “spindle:tool,spindle,...”. L’altra possibilità è la seguente:
T[=]expr[:expr]
dove expr è una espressione con risultato numerico che indica il numero di un unico mandrino, eventualmente seguita da una espressione che indica il numero di utensile se il mandrino è multiutensile. L’uso del segno “=” è facoltativo se le espressioni non iniziano con un parametro. Tali modi di selezione funzionano anche per le istruzioni TH, TP.
La selezione rimane attiva fino alla prossima selezione che la modifichi, oppure fino al reset delle selezioni, che si ottiene con le istruzioni T[=]0, TH[=]0, ecc..., cioè indicando come unico mandrino “0”.

8.3 Mandrino di riferimento

Quando sono selezionati più mandrini contemporaneamente, la quota programmata è rispettata dal primo dei mndrini selezionati, cioè vengono usati i suoi correttori. Per esempio: N300 G0 X300
Y200 Z=PRK T5,2,12 serve a posizionare tre punte verticali, pronte per una foratura, alle
coordinate 300, 200; tale punto sarà effettivamente raggiunto dalla punta numero 5.

8.4 Velocità di rotazione

È possibile assegnare la velocità di rotazione dei mandrini pantografi mediante l’istruzione:
S[=]expr
utensil-it.fm (10-10-07)
CNI Engineering
83
Page 90
8 Mandrini e utensili
dove expr indica la velocità di rotazione in giri/minuto e l’uso dell’uguale è obbligatorio se l’espressione comincia con un parametro. E’ anche possibile utilizzare questa istruzione per i mandrini di tipo T e TH purché sia attivata la gestione degli inverter relativa ad essi. Per ulteriori informazioni si rimanda alla consultazione del Manuale di Servizio ed in particolare alla Sez. relativa alla descrizione della Tabella Gestione inverter per T, TH.

8.5 Ritardi

Se le fasi di lavorazione richiedono la attesa di intervalli di tempo definiti, questi possono essere impostati tramite l’istruzione di ritardo:
D[=]expr
dove: expr ha un valore maggiore di 0 ed esprime il tempo di ritardo in centesimi di secondo, prima della esecuzione del passo successivo.
N.B. Questa istruzione ha effetto solo nei passi in cui è programmato almeno un posizionamento. Il ritardo viene attuato solo dopo che l’asse ha completato il posizionamento.

8.6 Istruzioni relative al cambio utensili

Il cambio utensile è una funzione attivabile solo per i mandrini pantografi ovvero di tipo TP.
Istruzioni di predisposizione cambio utensili
La sintassi è la seguente:
TP[=]expr:<expr$
dove:
expr è il numero del mandrino pantografo interessato dal cambio utensile,
expr$ è il nome dell’utensile o dell’aggregato che si vuole montare sul mandrino pantografo.
La stringa expr$, oltre a contenere il nome dell’utensile, può contenere informazioni aggiuntive che specificano il tipo di magazzino in cui scaricare e/o prelevare l’utensile. La sintassi da utilizzare è la seguente:
expr$="<ut.>[#[m_1][#m_2]]"
dove:
• ut. è il nome dell’utensile
• m_1 è il tipo di magazzino in cui depositare l’utensile
• m_2 è il tipo di magazzino da cui prelevare l’utensile
I possibili tipi di magazzino sono codificati come segue:
• 0 random
• 1 fisso
• 2 revolver
expr è il numero del mandrino pantografo interessato dal cambio utensile,
se si imposta expr$"", (stringa nulla), si effettua solo lo scaricamento dell’utensile presente. Questa istruzione produce 2 effetti:
1. fa assumere come mandrino di riferimento il mandrino indicato da expr,
2. precarica tutti i parametri speciali relativi al cambio utensile.
84
CNI Engineering
utensil-it.fm (10-10-07)
Page 91
8 Mandrini e utensili
Esempio 1:caricamento dell’utensile LAMA1 sul mandrino pantografo TP2 senza specifica dei tipi di magazzino coinvolti nel cambio utensile.
TP2:<"LAMA1"
Esempio 2:caricamento dell’utensile LAMA1 sul mandrino pantografo TP2 specificando come revolver il tipo magazzino in cui scaricare l’utensile presente sul mandrino.
TP2:<"LAMA1#2"
Esempio 3:caricamento dell’utensile LAMA1 sul mandrino pantografo TP2 specificando come revolver il tipo magazzino in cui scaricare l’utensile e come fisso il tipo di magazzino da cui prelevare l’utensile LAMA1
TP2:<"LAMA1#2#1"
Esempio 4:caricamento dell’utensile LAMA1 sul mandrino pantografo TP2 specificando come fisso il tipo magazzino da cui prelevare l’utensile LAMA1
TP2:<"LAMA1##1"
Per ulteriori informazioni sulla classificazione dei magazzini portautensili si veda la Sez. di Attrezzaggio della parte di uso del software di questo manuale.
Descrizione parametri speciali:
Parametro CUFL:Si può considerare una variabile a tre stati che viene precaricata con i seguenti valori:
0 se l’utensile da montare è già presente sul mandrino, (comprende anche il caso di mandrino
vuoto e di nome utensile nullo),
1 se c’è comunque un utensile già presente sul mandrino,
-1 se il mandrino non ha nessun utensile montato all’atto della esecuzione della istruzione di
cambio utensile.
In base ai valori del parametro CUFL vengono precaricati diversi insiemi di parametri come descritto nei paragrafi successivi.
Parametri relativi al caricamento:Questi parametri vengono precaricati solo se il parametro
CUFL=-1; essi sono:
CUPX, CUPY, CUPZ Coordinate di prelievo dell’utensile da montare,
CUPA Orientazione in prelievo,
CUPP Nr. posizione magazzino in prelievo,
CUPI Nr. di colonna della tabella MAGAZZINO CAMBIO UTENSILE, presente nel menù DATI MACCHINA del P.A. Dati Tecnici, relativa alla posizione di prelievo,
CUPM Nr. magazzino in prelievo,
CUPT Tipo magazzino in prelievo,
CUPN Ingombro utensile o aggregato in prelievo.
Parametri relativi allo scaricamento:Questi parametri vengono precaricati solo se il parametro
CUFL=1; essi sono:
CUSX, CUSY, CUSZ eventuali coordinate di scaricamento utensile attualmente montato,
CUSA Orientazione in scaricamento,
CUSP Numero posizione magazzino in scaricamento,
utensil-it.fm (10-10-07)
CNI Engineering
85
Page 92
8 Mandrini e utensili
CUSI Nr. di colonna della tabella MAGAZZINO CAMBIO UTENSILE, presente nel menù DATI MACCHINA del P.A. Dati Tecnici, relativa alla posizione di scaricamento,
CUSM Numero magazzino in scaricamento,
CUST Tipo magazzino in scaricamento,
CUSN Ingombro utensile o aggregato in scaricamento.
Nel caso ora descritto, qualora il nome dell’utensile sia diverso da ““ (stringa nulla), viene anche precaricato l’insieme dei parametri speciali relativi al prelievo utensile.
Istruzioni di aggiornamento dati cambio utensili
La sintassi è la seguente:
KB[=]expr
Questa istruzione va comunque eseguita sempre dopo un’istruzione di predisposizione.
KB=0 stabilisce che il mandrino interessato non ha nessun utensile montato,
KB=1 stabilisce che sul mandrino è montato un utensile il cui nome è stato definito
nell’istruzione di predisposizione.
Esempio: programmazione di una routine di cambio utensile
:
;--------------------------
; ROUTINE DI CAMBIO UTENSILE
;--------------------------
;
; INPUT: NMAN = NUMERO MANDRINO TP INTERESSATO (0,1,...)
; ST1 = STRINGA CONTENENTE IL NOME DELL’UTENSILE DA MONTARE
;
;
;
;PREDISPOSIZIONE CAMBIO UTENSILE
;
N10 TP=NMAN:<ST1
;
; TEST SE UTENSILE DA MONTARE = UTENSILE MONTATO ATTUALMENTE
;
;
N20 JM(CUFL):20 ;IN TAL CASO SALTA IL PRELIEVO E LO SCARICAMENTO
;;MA NON IL KB
;
;
86
CNI Engineering
utensil-it.fm (10-10-07)
Page 93
8 Mandrini e utensili
; ;UTENSILE DA MONTARE = UTENSILE MONTATO
;
N21 JM(ST1=""):21
N22 KB=1
N23 JM:22
:21
N24 KB=0
N24 JM:22
;
;
; NOTA: G74 DISATTIVA LA CORREZIONE TRAMITE ORIGINI,
; G78 CONSIDERA COME CORRETTORE UTENSILE IL CONTRIBUTO
;DEL SOLO MANDRINO.
; BISOGNA PORTARSI ALLE COORDINATE
;DELLA POSIZIONE MAGAZZINO (COORDINATE ASSOLUTE) COL
;SOLO MANDRINO
;
:20
N25 G74 G78
N30 JM(CUFL<0):10 ; SE NESSUN UTENSILE ATTUALMENTE MONTATO SALTA LA
;; fase di scaricamento
;
;
; GESTIONE SCARICAMENTO
;
N40 X=CUSX Y=CUSY
N50 Z=CUSZ
;
;
; ;QUI CI SARANNO PASSI PER IL PLC (M,..)
;
N60 KB=0 ;COMUNICA AL CN L’AVVENUTO SCARICAMENTO.
;
;
utensil-it.fm (10-10-07)
CNI Engineering
87
Page 94
8 Mandrini e utensili
;
N65 JM(ST1=””):22
;
; GESTIONE PRELIEVO
;
; POSIZIONAMENTO ALLE COORDINATE DI PRELIEVO
;
:10
N70 X=CUPX Y=CUPY
N80 Z=CUPZ
;
; QUI CI SARANNO PASSI PER IL PLC (M,..)
;
N90 KB=1 ;COMUNICA AL CN L’AVVENUTO PRELIEVO
N100 G54 ;RIATTIVA TUTTE LE CORREZIONI (ORIGINI+PUNTA) (OLTRE CHE
;; MANDRINO)
:22
;
88
CNI Engineering
utensil-it.fm (10-10-07)
Page 95

9 Interfaccia con il PLC

9 Interfaccia con il PLC

9.1 Istruzioni M per PLC

Le istruzioni M per PLC hanno la sintassi:
M[=]expr
dove expr è una qualsiasi espressione con la parte intera risultato compresa tra 0 e 65535.
Questa istruzione permette di inviare dei comandi al PLC. Si possono distinguere 3 categorie di comandi per il PLC, in base al loro numero.
M00-M63, M256-M16383 Provocano fermata degli assi a fine passo. Forniscono il segnale STROBE_M[] e necessitano del segnale PAESE[]. Valori particolari:
M256 Tastatura a battuta con mantenimento comando all’asse;
M257 Tastatura a battuta;
M258 Attivazione del tastatore (il microinterruttore del tastatore è normalmente chiuso e si
apre in fase di acquisizione del dato);
M259 Attivazione del tastatore (il microinterruttore del tastatore è normalmente aperto e si
chiude in fase di acquisizione del dato).
M128-M191, M32768-M49151 Non provocano fermata degli assi a fine passo. Non forniscono il
segnale STROBE_M[] e non necessitano del segnale PAESE[]. Valori particolari:
M32768 Tastatura a battuta con mantenimento comando all’asse;
M32769 Tastatura a battuta;
M32770 Attivazione del tastatore (il microinterruttore del tastatore è normalmente chiuso e si
apre in fase di acquisizione del dato);
M32771 Attivazione del tastatore (il microinterruttore del tastatore è normalmente aperto e si
chiude in fase di acquisizione del dato).
M192-M255 M49152-65535 Provocano fermata degli assi a fine passo. Forniscono il segnale STROBE_M[] e necessitano del segnale PAESE[]. Provocano inoltre il blocco dell’interpretazione
dei passi successivi, fino alla effettiva esecuzione del passo corrente (sincronizzazione dell’interpretazione con l’esecuzione). Valori particolari:
M252 Tastatura a battuta con mantenimento comando all’asse;
M253 Tastatura a battuta;
M254 Attivazione del tastatore (il micro tastatore è normalmente chiuso e si apre in fase di
acquisizione del dato);
M255 Attivazione del tastatore (il micro tastatore è normalmente aperto e si chiude in fase di
acquisizione del dato).

9.2 Passaggio di valori al PLC

L’istruzione KA serve per scrivere dei valori nella memoria del PLC. La sintassi è la seguente:
KA[=]expr
dove expr è una qualsiasi espressione con la parte intera del risultato compresa tra 0 e 65535.
Questa istruzione non provoca fermata degli assi, non fornisce il segnale STROBE[] e non necessita del segnale PAESE[]. Per ulteriori dettagli si rimanda al manuale del PLC.
plc-it.fm (10-10-07)
CNI Engineering
89
Page 96
9 Interfaccia con il PLC

9.3 Scrittura diretta nella memoria del PLC

È possibile alterare il contenuto delle variabili della zona dei segnali di scambio da CN a PLC direttamente dal programma mediante istruzione di scrittura di singoli bit, byte, word (2 bytes), long-word (4 bytes) e floating (4 byte). La zona dei segnali di scambio a cui si fa riferimento è costituita da 256 byte ed è indicata con il nome convenzionale GENERAL. Nelle istruzioni che seguono, gli operandi racchiusi fra parentesi sono espressioni il cui risultato è un numero intero; essi costituiscono indici di identificazione dei byte e dei bit che si vogliono scrivere nella zona dati GENERAL.
WBT(expr1,expr2)=expr3 expr1 è una espressione che deve fornire come risultato un
numero compreso fra 0 e 255 e rappresenta l’indice del byte che si vuole scrivere. expr2 è una espressione che deve fornire un numero compreso fra 0 e 7 e rappresenta l’indice del bit, che si vuole scrivere, appartenente al byte selezionato da expr1. expr3 è una espressione che viene utilizzata come valore logico. Ad esempio: l’istruzione WBT(200,4)=10 scrive un 1 nel bit 4 del byte 200.
WBT(expr1,expr2)=expr$ Questa istruzione è simile alla precedente; l’unica differenza
consiste nel fatto che expr$ ha valore logico 0 nel caso sia la stringa nulla, 1 negli altri casi.
WBY(expr1)=expr2 expr1 è una espressione che deve fornire come risultato un numero
compreso fra 0 e 255 e rappresenta l’indice del byte che si vuole scrivere. expr2 è una espressione che deve fornire un numero compreso fra 0 e 255 e rappresenta il dato che si vuole scrivere nel byte selezionato da expr1.
WW(expr1)=expr2 expr1 è una espressione che deve fornire come risultato un numero
compreso fra 0 e 127 e rappresenta l’indice della word che si vuole scrivere. expr2 è una espressione che deve fornire un numero compreso fra 0 e 65535 e rappresenta il dato che si vuole scrivere nella word selezionata da expr1.
WL(expr1)=expr2 expr1 è una espressione che deve fornire come risultato un numero
compreso fra 0 e 63 e rappresenta l’indice del long che si vuole scrivere. expr2 è una espressione che deve fornire un numero compreso fra 0 e 256
4
-1 e rappresenta il dato che si
vuole scrivere nel long selezionato da expr1.
WF(expr1)=expr2 expr1 è una espressione che deve fornire come risultato un numero
compreso fra 0 e 63 e rappresenta l’indice del float che si vuole scrivere. expr2 è una espressione che deve fornire un numero reale (floating-point) rappresenta il dato che si vuole scrivere nel float selezionato da expr1.
Normalmente queste istruzioni provocano la fermata degli assi, forniscono il segnale
STROBE_W[] e necessitano del segnale PAESE[]. Ponendo a 1 il dato No strobe su WBT,WBY,..,
presente nella tabella CENTRI del gruppo MACCHINA del P.A. Dati Tecnici, si può fare in modo che le istruzioni descritte non provochino la fermata degli assi, non forniscano il segnale
STROBE_W[] e non necessitino del segnale PAESE[].
90
CNI Engineering
plc-it.fm (10-10-07)
Page 97

10 Salti di programma

10 Salti di programma
Il flusso di un programma è modificabile mediante istruzioni di salto. Le istruzioni di salto sono di 4 tipi:
incondizionato,
condizionato,
condizionato da PLC,
alla sezione di contornatura di un altro centro di lavoro.

10.1 Salto Incondizionato

L’istruzione di salto incondizionato ha la seguente sintassi:
JM:expr
Questa istruzione comporta il proseguimento dell’esecuzione del programma a partire dalla etichetta indicata dal valore di expr. La possibilità di inserire espressioni per definire l’etichetta a cui saltare permette di scrivere programmi più compatti nel caso in cui il punto di prosecuzione deve essere scelto fra tanti in base al valore di un parametro.

10.2 Salto Condizionato

L’istruzione di salto condizionato ha la sintassi:
JM[!](expr):expr
Questa istruzione comporta il proseguimento dell’esecuzione del programma a partire dalla etichetta indicata dal valore di expr, se l’espressione tra parentesi è vera. In caso contrario, il programma prosegue dal passo successivo. Se è presente l’operatore negazione (!) davanti alle parentesi tonde, il salto viene effettuato se l’espressione è falsa.
Una espressione si intende falsa quando il suo valore è zero, altrimenti è vera. Gli operatori relazionali (<, >, =, ecc.) applicati tra due valori danno come risultato:
“1” se la relazione è verificata,
“0” se la relazione è falsa.

10.3 Salto Condizionato da PLC

La sintassi è la seguente:
JP[!](expr1,expr2):expr3
Nella istruzione descritta, gli operandi racchiusi fra parentesi sono espressioni il cui risultato è un numero intero; essi costituiscono indici di identificazione dei byte e dei bit che si vogliono testare e che appartengono alla zona dei segnali di scambio convenzionalmente denominata “GENERAL”.
expr1 è una espressione che deve fornire come risultato un numero intero compreso fra 0 e 63 e
indica una long-word; expr2 è una espressione che deve fornire come risultato un numero intero compreso fra 0 e 31 e indica il bit all’interno della long-word identificata da expr1. Questa istruzione comporta il proseguimento dell’esecuzione del programma a partire dalla etichetta indicata dal valore di expr3, se il livello logico del bit indicato è 1 (o 0 se c’è “!”); in caso contrario il programma prosegue dal passo successivo.
Se il livello logico del segnale di test non è fisso, occorre bloccare l’interpretazione del programma tramite una M opportuna (da 192 a 255 oppure da 49152 a 65535), per sincronizzare la lettura del livello del segnale con l’avanzamento dell’interprete.
salti-it.fm (10-10-07)
CNI Engineering
91
Page 98
10 Salti di programma
Se invece il segnale di test è una preselezione, non occorre sospendere l’interpretazione, poiché è indifferente il momento in cui avviene la lettura del segnale.
N.B.: La programmazione di una qualsiasi istruzione di salto all’etichetta 0 (ad esempio JM:0), nel caso in cui l’etichetta 0 non esista, provoca un salto all’inizio della sezione di contornatura del programma. Ciò è possibile solo se tale istruzione è contenuta nel programma principale e non in un sottoprogramma (interno o esterno) o in un ciclo fisso.

10.4 Salto alla sezione di contornatura di un altro centro di lavoro

Mediante questa istruzione è possibile effettuare un salto di programma in corrispondenza dell’inizio della sezione di contornatura del centro specificato. La sintassi è la seguente:
LC:expr
dove expr è il numero corrispondente al centro di lavoro. I valori assegnabili a expr sono: 1,2, ..., n dove n è il numero di centri della macchina. All’interno di una generica sezione del programma relativa al centro i non è ammesso programmare LC:i. In altre parole è ammesso solo il salto alla sezione di contornatura di un centro diverso da quello della sezione in cui compare l’istruzione LC. È possibile programmare l’istruzione LC a qualsiasi livello di annidamento. All’atto dell’esecuzione dell’istruzione il livello di annidamento viene resettato.
N.B.: se nel flusso di programma una istruzione di tipo LC è stata interpretata una volta, ogni altra sua istanza non ha più effetto.
92
CNI Engineering
salti-it.fm (10-10-07)
Page 99

11 Sottoprogrammi

11 Sottoprogrammi
I sottoprogrammi possono essere dei seguenti tipi:
interni,
esterni utente,
esterni “Cicli Fissi”,
sezioni ottimizzate di foratura.

11.1 Sottoprogrammi interni

Sono costituiti da una sezione di programma contraddistinta da una etichetta e delimitata dal carattere “%”. Questo tipo di sottoprogramma è quindi contenuto nello stesso file del programma principale.

11.2 Sottoprogrammi esterni utente

Sono in pratica un altro programma completo, residente in un file distinto. Il loro nome non deve iniziare con la lettera G o P. Ciò che lo distingue da un programma principale è il trovarsi nel direttorio dei sottoprogrammi ed avere i passi di programma contenenti le dimensioni del pezzo preceduti dal carattere di commento.

11.3 Sottoprogrammi esterni ‘‘Cicli fissi’’

Sono simili ai sottoprogrammi utente, ma si trovano in un direttorio particolare. Il loro nome deve iniziare con la lettera G o P.

11.4 Sezioni ottimizzate di foratura

Sono sottoprogrammi generati dall’ottimizzatore delle forature. È quindi possibile eseguire la parte di foratura in qualunque punto del programma, se si vuole modificare il normale ordine di esecuzione (prima la contornatura e poi la foratura ottimizzata).
sottopr-it.fm (10-10-07)
CNI Engineering
93
Page 100
11 Sottoprogrammi

11.5 Chiamata di un sottoprogramma

Sottoprogramma esterno
La chiamata di un sottoprogramma esterno, sia utente che ciclo fisso, si effettua con l’istruzione:
L=routine
dove routine è il nome del sottoprogramma utente se la sua iniziale non è G o P, altrimenti è il nome di un ciclo fisso.
Si può effettuare una chiamata indiretta di un sottoprogramma esterno, sia utente che ciclo fisso, tramite l’istruzione:
LS[=]expr$
dove expr$ è una espressione con risultato alfanumerico uguale al nome del sottoprogramma che si intende chiamare; il motivo della denominazione “indiretta” data a questa istruzione è dovuto al fatto che è possibile passare il nome del sottoprogramma da chiamare attraverso un parametro stringa, o modificarlo a seconda delle necessità o delle lavorazioni.
Sottoprogramma interno
La chiamata di un sottoprogramma interno si effettua invece con l’istruzione:
L:expr
dove expr vale il numero dell’etichetta che segna l’inizio del sottoprogramma interno.
Sezione di foratura
Infine, la chiamata di una sezione di foratura si effettua con l’istruzione:
L0:[expr]
dove, analogamente al caso precedente, expr vale il numero dell’etichetta che segna l’inizio della sezione di foratura desiderata.
L’etichetta è opzionale: se omessa si esegue la prima sezione di foratura fino al primo “%” trovato. Se la sezione di foratura è divisa in più blocchi, l’etichetta permette di eseguirli separatamente in punti diversi.

11.6 Livelli di subroutines

Da dentro un sottoprogramma è possibile chiamarne un altro e da questo un altro ancora, fino ad un livello massimo di annidamento a 10. Durante l’esecuzione il livello di annidamento è ben visibile grazie ai nomi dei sottoprogrammi che precedono l’inizio del passo di programma.
94
CNI Engineering
sottopr-it.fm (10-10-07)
Loading...