In aggiunta alle istruzioni ISO lo Z32 esegue anche una quantità di istruzioni EVOLUTE che non provocano un effetto fisico immediato sulla macchina utensile, ma svolgono funzioni di predisposizione (calcolo di espressioni, salto a sottoprogrammi, condizionamenti ...).Per evitare possibili confusioni, le righe di programmazione possono essere o solo ISO o solo "evolute", ossia non è possibile inserire nella stessa riga istruzioni ISO ed EVOLUTE.
Le righe "evolute" si distinguono dalle righe ISO perché, subito dopo l'eventuale numero di riga (N...), hanno un punto esclamativo '!' che apre il primo campo della riga evoluta.
Un programma-pezzo è costituito nell'ordine dalle seguenti parti: - un titolo (che può essere qualsiasi ma non deve contenere il carattere '%') - il carattere '%' - le righe significative del programma, che possono essere ISO o EVOLUTE senza ordine fisso.
Quando il programma-pezzo viene eseguito, i primi 40 caratteri della prima riga del programma (che possono contenere un conciso codice di identificazione) vengono presentati sul video, in modo da permettere all'operatore di riconoscere immediatamente il programma in corso di esecuzione.
PROGRAMMA-PEZZO TITOLO 1 o più righe senza il carattere percento %
Il carattere % è indicato dalle norme ISO come contrassegno dell'inizio del part-program. Z32 ignora tutti i caratteri eventualmente presenti nel programma da eseguire prima del % iniziale.
Se il carattere % viene omesso Z32 esegue ugualmente il programma, partendo dalla prima riga.
ATTENZIONE
Si ricorda che la prima riga di un part-program non può essere una destinazione di salto: questa limitazione può risultare più evidente se manca il % iniziale perché la prima riga diventa operativa a tutti gli effetti.
1.2.3 Blocco opzionale Se una riga di programma inizia col carattere '/' la riga stessa viene eseguita solo se l'apposito comando (commutatore sul pannello frontale) ne abilita l'esecuzione.
Esempio:
/N28 X0 Y0
Il movimento degli assi al punto 0,0 è fatto solo se sono abilitati i blocchi opzionali.
/N30 !GOP20!
Il salto al sottoprogramma P20 è fatto solo se sono abilitati i blocchi opzionali. Il blocco opzionale può costituire destinazione di salto: in questo caso deve essere ricercato con la barra iniziale.
Per esempio:
N60!GO/N30!
L'efficacia del comando di blocco opzionale può non essere immediata, per la presenza nello Z32 di un 'serbatoio’ di istruzioni preelaborate che consentono una maggiore rapidità di esecuzione: la scelta se un blocco opzionale deve o no essere eseguito viene fatta al momento
Ricerca blocco veloce
della preelaborazione, per cui se il comando di blocco opzionale viene cambiato mentre il blocco è già elaborato ma non ancora eseguito il nuovo comando non è eseguito.
I blocchi contenuti nel serbatoio possono essere intorno a una decina.
Alcune funzioni dello Z32 svuotano il serbatoio prima della loro esecuzione: se una di queste funzioni (per esempio una 'M' o una sosta G4, anche di tempo nullo) viene programmata prima del blocco opzionale non si ha più questa incertezza.
Per esempio:
... N10 G0 X0 Y0 N11 G4 TT0 sosta di tempo zero /N12 X10 ...
Poiché il G4 al blocco N11 svuota il serbatoio, il comando di blocco opzionale è immediatamente attivo sul blocco N12. Blocco doppio barrato
Se una riga di programma inizia con due caratteri '/' consecutivi (ossia con '//'), la riga stessa viene eseguita solo in ricerca blocco. Ciò consente al programmatore di stabilire il 'percorso' da fare in ricerca blocco e quindi, eventualmente, di saltare serie intere di operazioni.
Sezionamento di programma
Una riga che inizia col carattere ':' indica un sezionamento di programma. Dopo il carattere ':' deve essere programmato un numero che indica la sezione.
Esempio:
...
:10
N38 T10 M6
N39 X50
...
Il sezionamento di programma serve a rendere molto più rapida la ricerca blocco, in quanto non vengono elaborate tutte le istruzioni appartenenti a sezioni diverse da quella cercata. Per questo è necessario che, dopo un sezionamento programma, siano programmate tutte le istruzioni necessarie a una corretta ripresa della lavorazione. In particolare, dopo un sezionamento programma è obbligatoria la programmazione (o la conferma) dell'utensile programmato e dell'utensile sul mandrino (T... M6).
Dopo il reset è attiva la sezione zero: tutte le istruzioni contenute nella sezione zero sono comunque elaborate durante la ricerca blocco, anche se si ricerca una sezione diversa dalla zero. Ciò accorcia il programma perché evita di dover riprogrammare a inizio di ogni sezione le informazioni 'fisse’.
Esempio:
LAVORAZIONE COPERCHIO%
N1 G37OL
:1
N10 T1 M6
Numero sezione
Azzera numero progressivo
N11 S1000 M3
N12 OX1 OY1 OZ1 G0 X0 Y0
...
:2
N20 T2 M6
N21 OX2 OY2 OZ2
...
Non è necessario riprogrammare G37OL all'inizio di ogni sezione perché è contenuto nella sezione zero, che viene sempre eseguita in ricerca blocco. È lecito, e non porta problemi particolari, richiamare in una sezione righe appartenenti a un'altra sezione. Il numero di sezione non è un parametro e deve essere intero (senza virgola né punto decimale). Il numero sezione (programmato con i ":" a inizio riga ISO) può arrivare fino al massimo di 99999. Non è necessario che le sezioni siano in ordine crescente di numero, ma per ragioni di chiarezza si consiglia di mantenere questo ordine. Le righe di sezionamento, quelle con il ":", non devono avere il numero di blocco N (devono iniziare con ':'). Un sezionamento di programma opera anche l'azzeramento del numero progressivo (numero di blocco). Qui di seguito si dà un esempio di struttura di programma con sezionamento. Le regole da seguire per ottenere un buon risultato sono molto semplici. Nella sezione zero (che viene sempre letta in ricerca blocco):
- mettere le informazioni valide per tutto il programma - non mettere cambio utensile (non è un errore, ma non è utile) - mettere un sezionamento prima di ogni cambio utensile - ricordarsi di programmare tutte le funzioni di macchina dopo ogni sezionamento
PROVA PER SEZIONAMENTO%
N1 G37OL G25XYZ OX1 OZ1
le informazioni della sezione zero vengono sempre lette in ricerca blocco
.... :1 N2 T1 M6
per certi tipi di cambio utensile si può anticipare la ricerca del prossimo utensile
N3 T2
...
devono essere date tutte le funzioni di macchina programma dell'utensile T1
N4 S100 M3 M41
:2
N20 T2 M6
qui si deve riconfermare T perché è nuova sezione
N21 T3
1-6
N22 S500 M3
N23 !GON6-N8!
le righe N6-N8 appartengono a un'altra sezione
N24 ...
In un programma sezionato come sopra, si può ricercare, con grande rapidità, qualsiasi inizio sezione.
Per esempio:
3 ENTRA: :2
Il CN esegue le seguenti operazioni:- legge ed acquisisce tutta la sezione zero- salta le sezioni diverse dalla 2 - si posiziona all'inizio della sezione 2
Righe di sezionamento programma sono anche le righe introduttive delle sezioni locali di parametri, origini ed utensili: esse sono fuori dal part-program e sono usate solo come contrassegno.
Esempio:
...
:OS segnale inizio sezione locale origini
X1= 10.121
...
La riga :OS non genera operazioni né deve essere elaborata come riga di part-program: serve solo per contrassegnare l'inizio della sezione locale origini.