Abbiamo già visto come molte funzioni di macchina sono programmate con una o due lettere dell'alfabeto seguite da un valore numerico, per esempio: X100 .
Oltre agli indirizzi sopra elencati e che corrispondono a particolari funzioni, sono possibili molte altre combinazioni di due lettere: questi indirizzi identificano una entità, che chiameremo 'parametro’, di cui lo Z32 mette in memoria il valore, per poterlo poi utilizzare per scopi diversi.
Anche agli indirizzi di funzioni specifiche di macchina (esclusi N, G, O) corrispondono in memoria dello Z32 dei valori numerici, che sono via via aggiornati durante lo svolgimento del programma: anche queste entità possono essere considerate 'parametri'.
Nell'esempio fatto, dopo l'analisi della istruzione X100 (vedere anche capitolo “Esecuzione riga ISO”) lo Z32 contiene, nella locazione assegnata ad X il valore 100. Il fatto di aver programmato X implica anche che si dovrà muovere l'asse X, ma intanto nella locazione corrispondente a X è scritto il valore programmato.
Il valore 100 assegnato al parametro X viene conservato in memoria dallo Z32 fino a che un diverso valore non venga assegnato ad X, e può quindi essere utilizzato in seguito anche per scopi diversi da quelli di far muovere l'asse fino a quota 100.
I parametri sono identificati da un 'indirizzo' (X nell'esempio precedente) che può essere a 1 o 2 caratteri oppure dai parametri con indice PAR[ ]e PAL[ ] . Nella memoria dello Z32 sono predisposte le locazioni per i seguenti gruppi di parametri:
1) NOMI ASSI 2) PARAMETRI DI SISTEMA 3) PARAMETRI UTENTE 4) PARAMETRI CON INDICE
Tutti i parametri sono di processo cioè si possono usare tutti su ogni processo.
Nomi assi Sono sempre con indirizzo a una sola lettera, scelta tra:
A B C D H P Q U V W X Y Z .
Devono essere definiti nelle tarature di macchina.
Parametri di sistema Hanno un significato ben preciso nella programmazione Z32, essi sono: AE comunicazione da logica AM misura primo asse AN correzione tastatore primo asse negativo AP correzione tastatore primo asse positivo AU comunicazione a logica BM misura secondo asse BN correzione tastatore secondo asse negativo BP correzione tastatore secondo asse positivo CM misura terzo asse DA traslazione primo asse DB traslazione secondo asse DC traslazione terzo asse DM distanza di misura F feed HR appoggio coordinata polare raggio e G110 HT appoggio coordinata polare angolo e G110 HX appoggio coordinata cartesiana X e G speciali HY appoggio coordinata cartesiana Y e G110 I coordinata centro primo asse IR coordinata centro rotazione primo asse IS coordinata centro specularità primo asse J coordinata centro secondo asse JR coordinata centro rotazione secondo asse JS coordinata centro specularità secondo asse K passo di filettatura e G110 KA parametro di selezione KD fattore additivo singolo asse KG codice GEPI-2 e sottoprogrammi permanenti KM fattore moltiplicativo singolo asse KP fattore di scala nel piano KT fattore di scala terzo asse L lunghezza utensile (fresa) LX lunghezza utensile (tornio) LZ lunghezza utensile (tornio) M funzione ausiliaria MA funzione ausiliaria MB funzione ausiliaria MC funzione ausiliaria MS massima Speed in G96 P ordine della nurbs QA pendenza ausiliaria QF pendenza finale QR angolo di rotazione QS pendenza asse di specularità R raggio utensile RA raggio cerchio RB smusso RR raggio di raccordo S speed T utensile programmato TA posto dell'utensile sul mandrino TB posto dell'utensile programmato TT tempo della sosta # sincronizzatore part-program e logica ML #A sincronizzatore part-program e logica ML
La D.ELECTRON potrà definire in seguito altri parametri per ampliare le prestazioni di software dello Z32.
Parametri utente Max 60 L'utente può definire all'interno di un part-program fino ad un massimo di 60 "parametri parametri letterali" cioè costituiti da uno o due caratteri alfabetici e altri parametri con indice come viene precisato nel paragrafo successivo.
Parametri letterali I nomi dei parametri letterali possono essere una combinazione di uno o due caratteri stampabili qualsiasi, con queste limitazioni: - lo SPAZIO (BLANK) non può essere usato - i NUMERI non possono essere usati - i caratteri ! $ % ( ) * + , - . / ; < = > non possono essere usati - il primo carattere non deve essere nessuno dei seguenti: G N O : - sono vietate, perché hanno altri significati, come si vedrà anche in seguito, le seguenti combinazioni di caratteri: AA AB AC primo asse, secondo asse, terzo asse RQ SN CS AT radice quadrata, seno, coseno, arcotangente PI costante pi greco PC CP conversione polari/cartesiane e inversa IF condizionamento EB interruzione riga evoluta
- I caratteri minuscoli sono ammessi (anche se sconsigliati per ragioni di chiarezza).
Ad evitare possibili confusioni in presenza di simboli non alfabetici si consiglia di usare, per la definizione dei parametri solo caratteri alfabetici.
Sono possibili numerose altre combinazioni: alcune di queste sono usate dai costruttori di macchine utensili per cicli fissi, sottoprogrammi standard, macroistruzioni ecc. Perché sia possibile all'utente finale di usare senza problemi, così come sono, questi sottoprogrammi, è bene che i simboli usati in questi sottoprogrammi non siano usati nei programmi principali che ne fanno uso.
In particolare, per i cicli fissi, sono stati normalizzati i seguenti significati: HA inizio foro HB fine foro HC uscita lunga foro HD diametro lavoro HE uso interno cicli fissi HF uso interno cicli fissi HG uso interno cicli fissi HH uso interno cicli fissi HJ uso interno cicli fissi
La D.ELECTRON farà inoltre uso, anche nel seguito e per quanto possibile, sempre di simboli che iniziano per H nei sottoprogrammi standard.
L'utente finale può anche usare i simboli usati nei sottoprogrammi, ma dovrà tenere conto che, dopo una esecuzione del sottoprogramma, i valori di questi parametri VENGONO MODIFICATI (se ne sconsiglia quindi l'uso) .
Parametri con indice Array di parametri PAR[...]
Parametri Per aumentare il numero dei parametri e rendere più flessibile l'indirizzamento dei parametri con indice stessi lo Z32 mette a disposizione un array di parametri indicizzato PAR[...].
A tutti gli effetti, PAR[0], PAR[1], PAR[2], fino a PAR[512] sono parametri di part-program e possono essere usati come i parametri a indirizzo alfabetico. Il formato numerico dei parametri dell'array PAR[ ] è lo stesso floating-point dei parametri a indirizzo alfabetico.
I parametri a indirizzo alfabetico e i parametri PAR[ ] possono essere usati insieme nel partprogram. L'array PAR[ ] è completamente azzerato al reset.
L'indice che individua il parametro può essere una espressione aritmetica (stessa sintassi e stesse funzioni delle espressioni aritmetiche delle righe evolute e tra parentesi acute, vedere paragrafo seguente).
Per esempio è sintatticamente valido (ma è bene non esagerare nella complessità!):
!HX=12*HA/PAR[HA+PAR[HB+1]]!
Se l'indice programmato risulta non intero viene indirizzato l'elemento dell'array più vicino (ossia l'indice calcolato viene arrotondato all'intero più vicino).
Se l'indice programmato risulta maggiore di 512 o minore di 0 viene allarme di programmazione "INDICE NON VALIDO"
Array di parametri di logica PAL[...]
È disponibile anche un altro array di parametri, PAL[...], dedicato alla comunicazione con la logica programmabile.
Le modalità di indirizzamento e di uso in espressioni di part-program sono identiche a quelle dell'array PAR[ ]. Le differenze sono:
Il formato numerico è intero e non floating point.
Serve a rendere più veloce la lettura e scrittura da parte della logica programmabile (che può avere problemi di velocità).
Il parametro può essere usato in modo normale nel part-program: la conversione a intero è fatta automaticamente senza necessità di speciali funzioni.
Gli elementi di indice maggiore di 255 sono protetti
Gli elementi dell'array da 256 a 512 sono destinati a una speciale comunicazione con la logica programmabile: - da part-program utente sono solo leggibili (il tentativo di scrivere da part-program utente genera un allarme di programmazione "SCRITTURA VIETATA") - sono scrivibili e leggibili da sottoprogramma speciale (M speciale o ciclo fisso di sistema).
Parametri accessibili solo da sottoprogrammi di sistema In varie occasioni l’installatore, per i suoi sottoprogrammi di sistema, deve utilizzare parametri di part-program.
I parametri accessibili da sottoprogramma di sistema non sono distinti in nessun modo dai parametri accessibili da sottoprogrammi utente, con possibili interferenze.
Quindi sono stati resi disponibili 156 parametri riservati ai sottoprogrammi di sistema.
Sono parametri con indirizzo triletterale (non consentito dalle vecchie release di software, quindi tale da non generare equivoci) con queste specifiche:
- il primo carattere è la barra rovescia “\” - il secondo carattere è maiuscolo alfabetico da “A” a “F” (sei possibilità) - il terzo carattere è maiuscolo alfabetico da “A” a Z” (ventisei possibilità) Quindi in tutto sono 26x6 = 156 combinazioni
Questi parametri sono usabili nello stesso modo di tutti gli altri, sia in righe ISO che in righe evolute.
L’uso di questi parametri non fa aumentare il numero complessivo di parametri usato dal partprogram (se viene superato il numero massimo di 60 viene l’allarme CN 4B14 “TROPPI PARAMETRI”).
Uso dei parametri Al reset le quote assi (intese come parametri), i parametri di sistema e i parametri utente sono tutti inizializzati con valore zero, tranne i parametri KP e KT che sono forzati ad '1'.
Al reset inoltre viene preso atto dell'utensile sul mandrino, la sua descrizione nella tabella utensili è analizzata e i parametri relativi sono inizializzati secondo la descrizione utensile.
Al reset i parametri sono perciò tutti zero esclusi: KP e KT inizializzati col valore 1 T inizializzato con l'utensile sul mandrino TA e TB inizializzati col posto utensile sul mandrino i parametri definiti nella descrizione dell'utensile che è sul mandrino, inizializzati con i valori contenuti nella descrizione stessa (vedere anche gestione utensili)
Il valore dei parametri contenuto nella memoria dello Z32 è sempre l'ultimo programmato (in riga ISO o in riga evoluta).
In particolare, le quote assi restano quelle programmate anche se per varie ragioni (correzione lunghezza e raggio, origini, rototraslazioni ecc.) le quote effettivamente raggiunte sono diverse da quelle programmate.
Fanno eccezione TA e TB (posto utensile attuale e futuro) che sono aggiornati direttamente dallo Z32 in conseguenza di un cambio utensile o di una programmazione di T.
All'interno di una riga ISO possono essere assegnati valori a parametri qualsiasi, per utilizzarli in successive elaborazioni. Per esempio, se si programma:
X10 XA12 XB14 XC-20
ai parametri X, XA, XB, XC sono assegnati i valori 10, 12, 14, -20.
Il fatto di avere programmato l'asse X comporta anche un moto dell'asse per portarsi alla quota programmata, mentre il fatto di avere programmato XA XB XC non comporta movimenti assi, ma solo un aggiornamento dei valori dei parametri, e un'aggiunta di XA, XB, XC alla lista dei parametri noti se sono incontrati per la prima volta. Se un parametro mai definito viene incontrato in una espressione il CN non dà allarme, ma considera che il valore del parametro sconosciuto sia zero.
Durante l'esecuzione di un programma possono essere definiti al massimo 60 parametri diversi, ma se un parametro ha valore zero non entra nel conto dei 60.
In altre parole, se a un parametro è assegnato il valore zero, esso viene tolto dalla lista dei parametri noti e considerato come mai definito: ciò non genera errori perché al parametro mai definito viene assegnato proprio il valore zero.
In caso di necessità quindi, il programmatore può 'cancellare’ i parametri dalla lista dei parametri noti assegnando loro il valore zero. Ciò è consigliato soprattutto all'interno dei sottoprogrammi standard (del costruttore o dell'utente finale) per i parametri usati come appoggio di risultati intermedi per diminuire il numero dei parametri usati.
Programmazione di parametri con espressioni Abbiamo finora visto che ai parametri può essere assegnato un valore numerico programmandolo normalmente dietro all'indirizzo del parametro. Per esempio: X100
Lo Z32 permette di programmare il valore di un parametro anche come risultato di una espressione algebrica. Ciò si ottiene programmando l'indirizzo seguito dall'espressione racchiusa tra due parentesi acute:
X<X>
L'espressione può essere una formula matematica anche complessa, contenente:
- costanti: valori numerici con segno, 9 cifre significative prima o dopo la virgola o punto decimale PI (PI greco con precisione 9 cifre)
- altri parametri
- operatori matematici:
+ addizione
-sottrazione
* moltiplicazione
/ divisione RQ radice quadrata
SN seno
CS coseno
AT arcotangente
- apertura e chiusura di parentesi tonde Per esempio: X<100-R> significa che il parametro X assume il valore di 100 meno il valore del raggio utensile (non noto al momento della programmazione), e che l'asse X dovrà spostarsi di conseguenza. È lecito richiamare nella espressione lo stesso parametro a cui sarà assegnato il valore risultante: per tutta l'espressione il valore del parametro è quello precedente al calcolo della
espressione. Per esempio: X<X*X> elevare X al quadrato X<X-10> diminuire X di 10 X<PAR[1]+PAR[0]> sommare i due parametri PAR X<X+PAR[[PAR[0]]> sommare ad X il PAR con indice PAR[0]. Per esempio è sintatticamente valido (ma si consiglia di non esagerare nella complicazione!):
HX<12*HA/PAR[HA+PAR[HB+1]]>
Le operazioni di moltiplicazione e divisione sono prioritarie rispetto alle operazioni di somma e sottrazione.
Le parentesi devono essere prima aperte e poi chiuse, e devono essere tutte chiuse entro l'espressione. Per esempio sono errate: 3+(2*3 manca una parentesi chiusa (3+2)*3) troppe parentesi chiuse 3)+(2 prima chiusa e poi aperta
È lecito iniziare una espressione o un livello di parentesi con '+' o '-'. Per esempio:
-3*(-2*4+3) = -3*(-8+3) = -3*(-5) = +15
Gli operatori RQ (radice quadrata), SN (seno), CS (coseno), AT (arcotangente) si applicano al valore, o al parametro, o al risultato della parentesi che li segue immediatamente.
Esempio:
RQ16*2=4*2=8
RQ(X*X+Y*Y)=RQ(16+9)=RQ25=5 (ammesso che X=4, Y=3) I valori su cui operano SN, CS, AT sono espressi in gradi e frazioni decimali di grado. Esempio:
SN30 = 0,5 AT1 = 45
I calcoli numerici sono fatti in virgola mobile (FLOATING POINT) con circa 9 cifre significative e esponente di 10 da -16000 (numero con 16.000 zeri dopo la virgola) a +16.000 (numero con 16.000 cifre prima della virgola). Le eccezioni sono ricondotte ad operazioni lecite, per semplificare i calcoli e impedire arresti di macchina in condizioni recuperabili. In particolare:
1. La divisione di un numero per zero porta come risultato il massimo (numero con 16.000 cifre), che rappresenta praticamente l'infinito. Il segno è quello esatto. 2. Zero diviso zero porta come risultato zero 3. Se il risultato di una operazione supera il massimo gestibile (overflow) il risultato è riportato al massimo gestibile (16.000 cifre) 4. Se il risultato di una operazione è inferiore al minimo gestibile (underflow, 16.000 zeri dopo la virgola) il risultato è forzato a zero 5. La radice quadrata di un numero negativo è la radice quadrata del suo valore assoluto 6. Il seno e il coseno di un numero grande (più di circa 6 cifre) sono forzati rispettivamente a zero e ad uno.
Parametri in memoria permanente Può essere utile al programmatore salvare in memoria permanente uno o più parametri per rileggerli poi in punti successivi o addirittura in esecuzioni successive del programma. Ciò si può fare, come si vedrà anche più avanti al capitolo dedicato alle righe evolute, con le istruzioni ':R' e ':W'. Le tabelle globali dei parametri di processo sono riservate alla memorizzazione dei parametri. La tabelle inizia con una descrizione qualsiasi di una o più righe all'inizio. La riga:
: PA
segnala l'inizio della sezione attiva dei parametri. Le righe successive, con sintassi identica a quella delle origini (file 126, vedere capitolo “Origini e lunghezze”), contengono i valori dei vari parametri definiti. Per esempio:
Si noti che i parametri memorizzati in CMOS sono sempre a due caratteri e che il secondo carattere può essere un numero: i parametri usati nella programmazione invece possono avere uno o due caratteri di cui il secondo non può essere un numero.
Oltre alla sezione 'globale' (file 125) dei parametri ci possono essere una o più sezioni 'locali' in coda ad ogni programma o sottoprogramma. Con l'istruzione G37PL si attiva la sezione locale in coda al programma, mentre l'istruzione G37PG attiva la sezione globale. Al reset è sempre attiva la sezione globale.
Parametri # e #A in tempo reale Per sincronizzare il part-program con alcuni particolari eventi di macchina definiti nella logica programmabile, è possibile utilizzare i due parametri # e #A. La programmazione di funzioni ausiliarie (per esempio M o la G112) dà questa sincronizzazione, ma queste funzioni richiedono l'arresto e sono vietate durante alcune operazioni. I due parametri # e #A sono leggibili da logica ML in tempo sincronizzato e sono programmabili anche in correzione raggio, solo se sono programmati in riga ISO. Se usati in riga evoluta si comportano come qualsiasi altro parametro. Si rimanda al manuale M99 - Logica Programmabile per esempi e chiarimenti (ZZVALCANC[1]).