14.1Definizione di un Asse Mandrino ............................................................ 99
14.2Programmazione di un Asse Mandrino ................................................... 99
14.3Controllo di velocità ................................................................................ 99
14.4Controllo di arresto ............................................................................... 100
15Lettura e scrittura dati macchina e utensili ........................................101
16Lettura e scrittura dei registri...............................................................103
17Esempio di programma: panca ............................................................105
18Interfaccia 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.1Lista 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
SintassiSignificatoSezione
%fine di un programma e di un
sottoprogramma
%%uscita immediata dal programma 3.2
:labelidentificatore di un blocco (etichetta) 3.1
AR[=]exprangolo orizzontale di orientamento del
mandrino
array(expr[,exp,...])=exprassegnamento dell’elemento di un
vettore
array(expr[,expr,...])=?visualizzazione del valore
dell’elemento di un vettore
axis[=]exprassegnamento della posizione
dell’asse axis
axisI[=]exprincremento della posizione dell’asse
axis
axis0[=]exprspostamento dell’origine dell’asse axis3.9
AX=...selezione del set di assi della terna
principale
AZ[=]exprangolo verticale di orientamento del
mandrino
BA[=]exprangolo di inclinazione retta, ampiezza
di arco
BL[=]exprlunghezza del passo attuale 5.1
BM[=]exprpasso smussato 3.17
BR[=]exprpasso 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[=]exprritardo 8.5
Eaxis[=]expraccelerazione dell’asse axis 3.12
E[=]expraccelerazione degli assi interpolati 3.12
Faxis[=]exprassegnamento della velocità dell’asse
axis
F[=]exprvelocità 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)=exprcalcolo del nuovo sistema di
12.1
riferimento
G[=]expristruzione modale G 1.2
HC[=]exprnumero di configurazione delle teste 8.1
Iaxis[=]exprdichiarazione di anticipo dell’arrivo
3.15
dell’asse axis
I[=]exprascissa del centro della circonferenza 3.16
J[=]exprordinata del centro della circonferenza 3.16
JM:expristruzione di salto incondizionato 10.1
JM[!](expr):expristruzione di salto condizionato 10.1
JP[!](expr1,expr2):expr3istruzione di salto condizionato
10.3
controllata da byte PLC
K[=]expraltezza del centro della circonferenza 3.16
KA[=]expristruzione per il PLC 9.2
KB[=]expristruzione per il cambio utensile 8.6
KL[=]expristruzione di programmazione degli
Capitolo 13
“assi car”
L=routinechiamata di un sottoprogramma
11.5
esterno
L:exprchiamata di un sottoprogramma
11.5
interno
LC:exprchiamata 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[=]exprassegnamento della lunghezza del
2.2
pezzo da lavorare
LY[=]exprassegnamento della larghezza del
2.2
pezzo da lavorare
LZ[=]exprassegnamento dello spessore del
2.2
pezzo da lavorare
M[=]expristruzione di tipo “M” per il passaggio
9.1
di variabili e comandi al PLC
MS[=]expr$invio di messaggio alla consolle 3.6
N[=]nnnnnumero del passo di programma 3.4
QBOXapertura di un box di inserimento
Capitolo 18
parametri
parm=exprassegnamento di un parametro 2.2
parm=expr$assegnamento di un parametro
2.2
alfanumerico
parm=?visualizzazione del valore di un
3.6
parametro
R[=]exprassegnamento 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])=exprscrittura di un dato macchina numericoCapitolo 15
RDM(expr$,expr$,expr$[,expr])=expr$scrittura di un dato macchina
Capitolo 15
alfanumerico
REGS(expr)=exprscrittura di un registro macchinaCapitolo 16
Rnnn=exprscrittura di un registro macchinaCapitolo 16
RI[=]exprassegnamento del semiasse di una
3.16
ellisse parallelo alla ascissa
RJ[=]exprassegnamento del semiasse di una
3.16
ellisse parallelo alla ordinata
ROTX[=]exprrotazione su x del nuovo sistema di
12.1
riferimento
ROTY[=]exprrotazione su y del nuovo sistema di
12.1
riferimento
ROTZ[=]exprrotazione su z del nuovo sistema di
12.1
riferimento
RP[=]exprnumero di ripetizioni di un passo 3.5
RT[=]exprvalore dell’angolo di rotazione 3.11
RTI[=]exprincremento del valore dell’angolo di
3.11
rotazione
RTO[=]exprorigine dell’angolo di rotazione 3.11
S[=]exprassegnamento della velocità di un
8.4
mandrino
Saxis[=]exprassegnamento del fattore di scala
3.10
dell’asse axis
SF[=]exprfattore di scala totale degli assi 3.10
Taxis[=]exprassegnamento 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:<exprassegnamento di un utensile a un
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.
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.
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
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:
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.2Parametri 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:
CUSXCUSYCUSZCUSACUSPCUSMCUST.
Parametri di prelievo utensile:Tali parametri si riferiscono alla posizione di magazzino di prelievo
dell’utensile; essi sono:
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.3Operatori 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:
sx ⇒ dxindica 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.
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<2non 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. 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.
CodiceInformazioni
0modo di operazione 0=esecutore 1=grafica
1numero di elementi dato liberi
2numero di elementi dato usati
3numero totale di elementi dato
4numero di simboli utente liberi
5numero di simboli utente usati
6numero massimo di simboli utente
7numero assi effettivamente definiti
8numero massimo di assi definibili
9livello corrente di subroutine
10numero massimo livelli di subroutine
11indice del primo elemento di vettore
12fattore di scala corrente (obsoleto)
13numero di decimali per i millimetri (obsoleto)
14numero di decimali per i pollici (obsoleto)
15fattore di scala per i millimetri (obsoleto)
16fattore di scala per i pollici (obsoleto)
17unità di misura corrente 0=millimetri, 1=pollici
18massima differenza ammessa sui raggi
19massima tolleranza ammessa per l’ellisse
20massimo angolo considerato tangente
21raggio dell’utensile corrente
22massima discontinuità ammessa
23massimo errore di conversione della curva di Bezier
24ora di inizializzazione dell’interprete
25ora dell’ultimo reset dell’interprete
26ora 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
CodiceInformazioni
0stringa identificativa dell’interprete
1nome del file corrente
2numero di versione dell’interprete (es. 4.15.7)
3data di compilazione (es. Jan 31 1996)
4ora di compilazione (es. 10:12:46)
5data di compilazione in formato italiano (es. 31/01/1996)
6stringa 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.
CodiceSignificato
34cambia il numero del centro corrente
35abilita/disabilita la lettura e la scrittura dei dati macchina
37abilita/disabilita la correzione raggio utensile (interna)
38abilita/disabilita l’emissione immediata del codice di fine
39abilita/disabilita la correzione dei dati degli archi
40abilita/disabilita la conversione delle ellissi
41modifica lo stile di visualizzazione della linea
44abilita/disabilita la conversione delle minuscole
47abilita/disabilita la correzione di velocità in C.R.U.
53conversione 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.1Etichette
Una linea che comincia con il carattere “:” contiene una etichetta e non può contenere altre
istruzioni.
3.2Fine 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.3Commenti
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.4Passi 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 2147483647.
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.5Ripetizioni 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.6Messaggi
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.7Unità 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.8Assi
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;
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.10Zoom
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.11Triedro 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:
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.12Movimento 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.13Lettura 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.14Lettura 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.15Posizionamento
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.16Interpolazione
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:
In interpolazione elicoidale circolare la velocità di percorrenza impostata è riferita alla effettiva
traiettoria.
3.17Smussi 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.18Modalità 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:
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.
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.1Orientazione 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.2Orientazione 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.1Istruzioni 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.2Uso 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.3Elenco 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.
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.1Istruzioni 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
500900 1000
6.2Attacco e Stacco Lineare
In Fig. 6 è riportato un esempio.
Figura 6 Raggio utensile 100; Linea Continua: traiettoria non corretta; Linea a trattini: traiettoria corretta
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
500900 1000
6.3Attacco e Stacco Circolare
In Fig. 7 è riportato un esempio.
Figura 7 Raggio utensile 100; Linea Continua: traiettoria non corretta; Linea a trattini: traiettoria corretta
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.4Cambio 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.5Correzione 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.
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.6Esempi 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.7Controllo 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.1Configurazione 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.2Selezione 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.3Mandrino 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.4Velocità 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.5Ritardi
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.6Istruzioni 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.1Istruzioni 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.2Passaggio 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.3Scrittura 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)=expr2expr1 è 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)=expr2expr1 è 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)=expr2expr1 è 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)=expr2expr1 è 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.1Salto 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.2Salto 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.3Salto 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.4Salto 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.1Sottoprogrammi 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.2Sottoprogrammi 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.3Sottoprogrammi 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.4Sezioni 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.5Chiamata 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.6Livelli 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...
+ hidden pages
You need points to download manuals.
1 point = 1 manual.
You can buy points or you can get point for every manual you upload.