KR C...
Programmazione esperto
Release 4.1
1 di 214
e Copyright KUKA Roboter GmbH
E’ vietato riprodurre o consegnare a terzi questa documentazione o parti di essa salvo l’esplicita autorizzazione dell’editore.
Nell’unità di controllo possono essere operative ulteriori funzioni non descritte in questa documentazione. L’utente però non ha il diritto di
pretendere queste funzioni in caso di sostituzione o di assistenza.
Il contenuto di questa documentazione e stato verificato circa la sua conformità con l’hardware e il software descritto. Nonostante ciò non
possono essere escluse delle divergenze, per cui non viene garantita la conformità totale. Le informazioni di questa documentazione vengono
in ogni caso controllate regolarmente ed eventuali correzioni verranno integrate nelle edizioni successive.
Ci riserviamo il diritto di apportare modifiche tecniche che non hanno effetto sulla funzione.
PD Interleaf
2 di 214
Indice
2 Variabili e dichiarazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1 Variabili e nomi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.2 Oggetti di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2.1 Dichiarazione ed inizializzazione di oggetti di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2.2 Tipi di dati semplici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.2.3 Campi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.2.4 Catene di caratteri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.2.5 Strutture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.2.6 Tipi di enumerazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.3 Manipolazione dei dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.3.1 Operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.3.1.1 Operatori aritmetici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.3.1.2 Operatore geometrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.3.1.3 Operatori di confronto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.3.1.4 Operatori logici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.3.1.5 Operatori bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.3.1.6 Priorità di operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.3.2 Funzioni standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.4 Variabili di sistema e file di sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3 di 214
Programmazione esperto
4 di 214
6.3.1 Dichiarazione di segnali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
6.3.2 Settaggio di uscite nel punto di destinazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
6.4 Uscite a impulso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
6.5 Ingressi/uscite analogici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
6.5.1 Uscite analogiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
6.5.2 Ingressi analogici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
6.6 Ingressi digitali predefiniti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
5 di 214
Programmazione esperto
6 di 214
1 Generalità per quanto riguarda i programmi KRL
Mentre per l’utente tutti i file di sistema sono invisibili, l’esperto può vederli ora nella finestra
di programmazione ed anche editarli. Inoltre sul livello esperto vengono visualizzati oltre ai
nomi dei file ed ai commenti anche le estensioni, gli attributi e le dimensioni dei file.
Nella figura precedente vengono visualizzati nella finestra di programmazione i file e le direc-
tory del percorso “R1”.
7 di 214
Programmazione esperto
Come standard sono presenti dopo l’installazione del software KRC1 nella directory
“KRC:\R1\MADA\” i file riportati di seguito:
File Significato
$MACHINE.DAT Lista dei dati di sistema con variabili di sistema per l’adattamento
tra controllo e robot
$ROBCOR.DAT Lista dei dati di sistema con dati per il modello dinamico del robot
MACHINE.UPG File di sistema per upgrades futuri
ROBCOR.UPG File di sistema per upgrades futuri
File Significato
$CONFIG.DAT Lista dei dati di sistema con dati di configurazione generali
BAS.SRC Pacchetto base per il controllo del movimento
IR_STOPM.SRC Programma per la gestione errori in caso di anomalie
SPS.SUB Submitfile per la sorveglianza parallela
File Significato
A10.DAT Pacchetto tecnologico per la saldatura ad arco con tensioni pilota
A10.SRC analogiche
A10_INI.DAT Pacchetto tecnologico per l’inizializzazione della saldatura ad arco
A10_INI.SRC con tensioni pilota analogiche
A20.DAT Pacchetto tecnologico per la saldatura ad arco con numeri di
A20.SRC programma digitali
A50.DAT Pacchetto tecnologico per l’utilizzo del sensore dell’arco “Libo”
A50.SRC
ARC_MSG.SRC Programma per la programmazione di messaggi per la saldatura
sotto gas inerte.
ARCSPS.SUB Submitfile per saldatura ad arco
BOSCH.SRC Programma per la saldatura a punti con interfaccia seriale verso il
timer per saldatura a punti Bosch PSS5200.521C
COR_T1.SRC Programma per la correzione utensile (versione vecchia)
CORRTOOL.DAT Programma per la correzione utensile
CORRTOOL.SRC
FLT_SERV.DAT Programma per la gestione errori definita dall’utente per la
FLT_SERV.SRC saldatura ad arco
H50.SRC Pacchetto Gripper
H70.SRC Pacchetto Touchsensor
MSG_DEMO.SRC Programma con esempi di messaggi operativi
NEW_SERV.SRC Programma per la modifica di reazioni errori per FLT_SERV
P00.DAT Pacchetto di programmi per l’accoppiamento con un PLC
P00.SRC
8 di 214
1 Generalità per quanto riguarda i programmi KRL (segue)
9 di 214
Programmazione esperto
Il file “SRC” è il file con il codice di programma vero e proprio. Esistono le varianti DEF e
DEFFCT (con valore di ritorno). Il file “DAT” contiene invece i dati specifici di programma.
Questa divisione si basa sul concetto dei file del KRL: il programma include oltre al ciclo di
lavorazione anche diverse azioni che il robot industriale deve eseguire, che possono essere
determinati cicli di movimento, l’apertura o la chiusura di un gripper fino a processi complessi
come ad esempio il comando di una pinza per saldatura tenendo conto di determinate condi-
zioni marginali.
Per la prova di programmi è utile o magari indispensabile poter eseguire delle operazioni
parziali singolarmente. Il concetto dei file realizzato nel KRL soddisfa le esigenze particolari
della programmazione robot.
La struttura interna di un file KRL è costituita da una sezione delle dichiarazioni, una
sezione delle istruzioni come anche da un max. di 255 sottoprogrammi e funzioni locali.
DEF Il nome dell’oggetto senza estensione è allo stesso tempo il nome del file e viene quindi
riportato nella dichiarazione con DEF. Il nome puo essere composto da un max. di 24 caratteri
e non dev’essere una parola chiave (vedi capitolo [Variabili e dichiarazioni]). Ogni file inizia
con la dichiarazione “DEF” e finisce con “END”:
DEF NAME(x1:IN)
Dichiarazioni
Istruzioni
END
Dichiarazioni Le dichiarazioni vengono analizzate già prima dell’elaborazione del programma cioè durante
la traduzione. Nella sezione delle dichiarazioni non deve trovarsi quindi nessuna istruzione.
La prima istruzione è l’inizio della sezione delle istruzioni.
Istruzioni Le istruzioni sono delle dichiarazioni di carattere dinamico: vengono cioè eseguite durante
l’elaborazione del programma.
Lista dati Un programma robot può essere costituito solo da un file di programma o da un file di
programma con la relativa lista dati. L’appartenenza tra la lista dati e il file viene contrassegnata
tramite il nome comune. I nomi si distinguono soltanto nell’estensione, ad es.:
File: PROG1.SRC
Lista dati: PROG1.DAT
10 di 214
1 Generalità per quanto riguarda i programmi KRL (segue)
Nelle liste dati sono ammesse soltanto assegnazioni di valore con “=”. Se la lista dati
e il file hanno lo stesso nome, le variabili dichiarate nella lista dati possono essere utilizzate
nello stesso modo delle variabili dichiarate nel file SRC.
Informazioni dettagliate su questo argomento sono contenute nel paragrafo [Liste dati].
APPUNTI:
11 di 214
Programmazione esperto
Viene richiesto di selezionare un template. Utilizzare a questo scopo i tasti freccia e confer-
mare col softkey “OK” oppure col tasto return.
Ulteriori informazioni sui templates sono contenute nel Manuale d’uso, nella documen-
tazione [Operazione], capitolo [Navigatore], paragrafo [Apendice].
La riga DEF¼ e END e i nuclei di programma dei singoli templates sono contenuti ad es. per
il template Cell sotto “C:\KRC\ROBOT\TEMPLATE\CellVorgabe.src”.
12 di 214
1 Generalità per quanto riguarda i programmi KRL (segue)
Dopo aver selezionato il relativo template viene richiesto di immettere un nome per il file
creato.
Il nome del file è come unico elemento assolutamente necessario e puo essere composto da
max. 24 caratteri. L’estensione del file viene aggiunta automaticamente. Se si desidera inse-
rire un commento, spostare il cursore tramite il tasto freccia destra sul relativo campo e digi-
tare il testo.
Premere il softkey “OK” o il tasto return per confermare questa immissione.
La lista dati è assolutamente necessaria se si desidera inserire nel file SRC anche dei
comandi sotto guida del menù.
Ulteriori informazioni sulla gestione di errori di editazione sono contenute nel paragrafo
[Gestione errori].
Correlatore Al caricamento di un programma tramite il softkey “Selezionare” vengono uniti tutti i file e le
liste dati necessari in un programma. Durante il collegamento viene verificato se tutti i moduli
sono presenti, analizzati e privi di errori. Il correlatore verifica inoltre, al momento del
passaggio di parametri, la compatibilità tra i tipi dei parametri di passaggio. Se durante il
collegamento si presentano degli errori viene creato – come nel caso della compilazione –
un file errore con l’estensione “.ERR”.
13 di 214
Programmazione esperto
DEF PROG1()
FOR J=1 TO 5
PTP {A1 4}
PTP {A2 -7,A3 5}
PTP {A1 0,A2 -9,A3 9}
ENDFOR
APPUNTI:
14 di 214
1 Generalità per quanto riguarda i programmi KRL (segue)
1.3.2 Editor
Se si vuole modificare o inserire determinati comandi KRL o strutture di programma ciò viene
effettuato tramite l’editor. Siccome alla chiusura dell’editor viene compilato il codice
completo, possono essere riconosciuti anche degli errori che si presentano soltanto in
combinazione con più righe (ad es. delle variabili dichiarate in modo errato).
Le funzioni di blocco sono disponibili soltanto nell’editor a partire dal livello utente
“Esperto”. Un programma, il cui contenuto dev’essere modificato tramite le funzioni di
blocco, dev’essere aperto col softkey “Edit”. Le modalità per passare al livello utente
“Esperto” sono descritte nel capitolo [Configurazione del sistema], paragrafo “Gruppo
d’utente”.
Posizionare dapprima il cursore di editazione lampeggiante all’inizio o alla fine della parte di
programma da spostare. Tenere poi premuto il tasto “Shift” sulla tastiera mentre il cursore
viene spostato in giù o in su. In questo modo viene selezionata una parte del programma che
dev’essere modificata nel prossimo passo di lavoro tramite le funzioni di blocco. La parte
selezionata è riconoscibile dallo sfondo colorato.
Programma Azionare il tasto di menù “Programma” e selezionare dal menù che ora si apre la funzione
desiderata.
Se per le funzioni di blocco vengono usati il blocco numerico e la tastiera, la funzione NUM
dev’essere disattivata. Premere in questo caso il tasto “Num” sulla tastiera. La relativa
indicazione nella riga di stato è allora spenta.
15 di 214
Programmazione esperto
Come alternativa è possibile tener premuto il tasto CTRL sul blocco numerico e premere
il tasto C sulla tastiera. In seguito rilasciare entrambi i tasti.
Come alternativa è possibile tener premuto il tasto CTRL sul blocco numerico e premere
il tasto V sulla tastiera. In seguito rilasciare entrambi i tasti.
Come alternativa è possibile tener premuto il tasto CTRL sul blocco numerico e premere
il tasto X sulla tastiera. In seguito rilasciare entrambi i tasti.
1.3.2.5 Cancella
L’area selezionata può essere eliminata dal programma. In questo caso non avviene
nessuna bufferizzazione. La parte di programma eliminata è con ciò persa in modo irrevoca-
bile.
16 di 214
1 Generalità per quanto riguarda i programmi KRL (segue)
Per questo motivo viene posta una domanda di sicurezza nella finestra dei messaggi alla
quale occorre rispondere tramite la barra softkey.
1.3.2.6 Trova
Ulteriori informazioni sono contenute nel Manuale d’uso, nella documentazione [Pro-
grammazione utente], capitolo [Editazione di un programma], paragrafo [Lavorare
con l’editor di programma].
1.3.2.7 Sostituisci
17 di 214
Programmazione esperto
Inserire una sequenza di caratteri nella riga di ricerca e spostarsi tramite il tasto freccia in
basso nella riga di sostituzione. Inserire qui il termine che deve sostituire quello ricercato.
Se il termine ricercato è presente più volte nel documento e si desidera sostituirlo soltanto
in un determinato punto, azionare il softkey “Cerca” ripetutamente finché il punto desiderato
è stato trovato. Premere in seguito “Sostituire”. Il termine ricercato viene sostituito con quello
indicato.
Se si desidera sostituire il termine ricercato dappertutto oppure in un’area di programma se-
lezionata in precedenza, azionare dopo la compilazione del modulo di ricerca e di sostitu-
zione il softkey “Sost. tutto”.
18 di 214
1 Generalità per quanto riguarda i programmi KRL (segue)
Nella finestra dei messaggi appare il messaggio “L’area indicata/selezionata è stata esami-
nata” (conferma che la ricerca è stata effettuata nell’intero programma oppure nella sele-
zione). Dopo l’azionamento del softkey “Abbandona” si esce dalla funzione di sostituzione e
nella finestra dei messaggi viene visualizzato il numero delle sostituzioni effettuate dall’atti-
Abbandona vazione di questa funzione.
2 sostituzioni eseguite
APPUNTI:
19 di 214
Programmazione esperto
1.4.1 FOLD
L’interfaccia grafica KUKA si serve di una particolare tecnica per la chiara rappresentazione
di un programma. Le istruzioni effettuate come commenti KRL permettono di sopprimere la
visualizzazione di successive parti del programma. In questo modo il programma viene
suddiviso in sezioni che vengono chiamate “FOLDS” conformemente al loro carattere di
cartella.
I “FOLDS” sono come standard “chiusi” e possono essere “aperti” soltanto sul livello esperto.
Essi contengono informazioni invisibili per l’utente sull’interfaccia grafica KUKA. Sul livello
esperto esiste la possibilità di rendere invisibile un blocco KRL per l’utente. A questo scopo le
relative dichiarazioni e istruzioni vengono rinchiuse tra le denominazioni “;FOLD” e
“;ENDFOLD”.
Programma I folds in un programma possono essere visualizzati o nascosti premendo il tasto menù “Pro-
gramma” e selezionando successivamente “FOLD” e il comando desiderato.
Se viene resettato un programma selezionato nel quale sono aperti dei folds, questi
folds vengono automaticamente chiusi.
Dalla sequenza...
;FOLD RESET OUT
FOR I=1 TO 16
$OUT[I]=FALSE
ENDFOR
;ENDFOLD
20 di 214
1 Generalità per quanto riguarda i programmi KRL (segue)
...sono visibili, con i folds chiusi, sull’interfaccia grafica soltanto le parole “RESET OUT”. Con
questo comando è ad esempio possibile rendere invisibile per l’utente la sezione delle
dichiarazione e delle inizializzazioni.
1.4.1.1 Programma esemplare
DEF FOLDS()
;FOLD INITIALISATION
;---------- Inizializzazione ---------
INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
INTERRUPT ON 3
BAS (#INITMOV,0 ) ;inizializzazione di velocità,
;accelerazioni, $BASE, $TOOL, etc.
FOR I=1 TO 16
$OUT[I]=FALSE
ENDFOR
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 30,A6 0}
;ENDFOLD
END
Sezione principale
21 di 214
Programmazione esperto
Inizializzazione
inizializzazione di velocità,
accelerazioni,
Sezione principale
Nel FOLD chiuso è visibile soltanto l’espressione dopo la parola chiave “FOLD”. Nel FOLD
aperto sono invece visibili tutte le istruzioni e dichiarazioni.
22 di 214
1 Generalità per quanto riguarda i programmi KRL (segue)
Modo di Descrizione
esecuzione
GO
Vengono eseguite tutte le istruzioni del programma senza
ARRESTO fino alla fine del programma.
I modi di esecuzione programma GO, MSTEP e ISTEP possono essere selezionati sul KCP
tramite un tasto stato o la variabile “$PRO_MODE”. PSTEP e CSTEP possono essere impo-
stati invece soltanto tramite la variabile “$PRO_MODE”. Per modificare lo stato di questa
variabile richiamare la funzione menù “Visualizza” --> “Variabile” --> “Singolo”. Inserire in se-
guito nel campo di immissione “Nome” la variabile “$PRO_MODE” e nel campo “Valore
nuovo” il valore desiderato.
23 di 214
Programmazione esperto
APPUNTI:
24 di 214
1 Generalità per quanto riguarda i programmi KRL (segue)
Come esempio serve il file “ERROR.SRC” che è stato creato (in modo errato):
Dopo la chiusura dell’editor appare nella finestra dei messaggi un messaggio di avvertimento
che riguarda il numero degli errori.
Il softkey “Apri” carica il file nell’editor e all’azionamento del softkey “Edit DAT” (“Lista dati”) il
file Dat viene aperto con l’editor. Per cancellare i file errati premere “Cancella”. Tramite
“Nuovo” è possibile creare un nuovo file.
25 di 214
Programmazione esperto
Breve descrizione
Numero errore
*1
Numero della riga e colonna errata
NOTA *1
I numeri di riga indicati corrispondono ai numeri di riga assoluti nel programma come
li visualizzerebbe un normale editor ASCII. Per ottenere la concordanza tra i numeri
delle righe nella visualizzazione errore e i numeri delle righe sul KCP occorrerebbe
che tutti i folds siano aperti e che siano attive la visualizzazione dettagli e la riga DEF.
Questa rappresentazione è però poco chiara poiché vengono messe a disposizione
tutte le informazioni nonostante non siano necessarie. Ulteriori informazioni sulla vi-
sualizzazione dettagli e sulla riga DEF sono contenute nel paragrafo [Nascondere
parti di programma].
26 di 214
1 Generalità per quanto riguarda i programmi KRL (segue)
Il significato dei numeri di errore può essere visualizzato online tramite la funzione menù
“Visualizza” --> “Variabile” --> “Singolo”. Indicare a questo scopo nella finestra di stato nel
campo di immissione “Nome” il segno “&” seguito dal numero di errore, in questo caso ad
esempio “&2263” ed azionare il tasto Enter.
Se il file SRC (in questo caso “ERROR.SRC”) viene caricato nell’editor, è possibile effettuare
le relative correzioni. Per comodità, il cursore si posiziona lampeggiante nella prima riga er-
rata. Occorre prestare attenzione che la visibilità limitata sia disattivata e che la riga DEF sia
visibile. Ulteriori informazioni sono contenute nel paragrafo [Nascondere parti di pro-
gramma].
Nell’esempio presente non è necessario aprire i fold, ma se si desidera ciò utilizzare il
comando menù “Edit” --> “Folds” --> “Aprire tutti i FOLDs”.
Cancellare un segno
d’uguaglianza
Aggiorna Dopo la chiusura dell’editor e la memorizzazione del file corretto è possibile azionare il soft-
key “Aggiorna” e la lista errori scompare quando tutti gli errori sono rimossi.
27 di 214
Programmazione esperto
1.7 Commenti
I commenti sono una parte importante di ogni programma di computer perché permettono di
rendere il programma chiaro e comprensibile anche per altri. La velocità di esecuzione del
programma non viene influenzata dai commenti.
I commenti possono essere inseriti in una posizione qualsiasi del programma. Vengono
sempre preceduti da un punto e virgola “;”, ad es.:
¼
PTP P1 ;Movimento verso il punto di partenza
¼
;--- Reset uscite ---
FOR I = 1 TO 16
$OUT[I] = FALSE
ENDFOR
¼
APPUNTI:
28 di 214
2 Variabili e dichiarazioni
2 Variabili e dichiarazioni
2.1 Variabili e nomi
Oltre all’utilizzo di costanti, cioè l’indicazione diretta del valore sotto forma di cifre, caratteri,
ecc., nel KRL possono anche essere usate delle variabili ed altre forme di dati nel
programma.
Nel caso della programmazione di robot industriali, le variabili sono ad esempio necessarie
per l’elaborazione dei valori dei sensori. Esse permettono di memorizzare il valore letto dal
sensore e di analizzarlo in diversi punti del programma. Inoltre è possibile effettuare delle
operazioni aritmetiche, ad es. per calcolare una nuova posizione.
Una variabile viene rappresentata nel programma tramite un nome la cui denominazione può
essere scelta liberamente entro certi limiti.
Siccome tutte le variabili di sistema (vedi paragrafo 2.4) iniziano col carattere ’$’ si consiglia
di non usare questo carattere come primo carattere nel nome definito da Voi.
29 di 214
Programmazione esperto
Durata Con durata di una variabile si intende il tempo durante il quale alla variabile è assegnata una
posizione di memoria. Essa dipende dal fatto se la variabile è dichiarata in un file SRC o in
una lista dati:
G Variabile dichiarata in un file SRC
La durata si limita al tempo di esecuzione del programma. Dopo il termine dell’esecuzione
l’area di memoria viene disallocata e il valore della variabile viene perso.
G Variabile dichiarata in una lista dati (vedi capitolo “Liste dati”)
La durata non dipende dal tempo di esecuzione del programma. La variabile esiste finché
esiste la lista dati. Tali variabili sono quindi permanenti (fino alla prossima
attivazione/disattivazione).
APPUNTI:
30 di 214
2 Variabili e dichiarazioni (segue)
Nel caso della dichiarazione di variabili e campi di un tipo di dati predefinito, la parola chiave
DECL può essere omessa. Oltre ai semplici tipi di dati INT, REAL, CHAR e BOOL (vedi
paragrafo 2.2.2) sono predefiniti tra l’altro i tipi di dati di struttura POS, E6POS, FRAME, AXIS
e E6AXIS (vedi paragrafo 2.2.5).
Per variabili (non campi!) del tipo di dati POS, la dichiarazione può essere omessa
completamente. Il tipo di dati POS è un tipo di dati standard per variabili.
Non è possibile rinunciare alla parola chiave DECL nel caso della dichiarazione di tipi di
struttura o di enumerazione liberamente definibili (vedi paragrafo 2.2.5 e 2.2.6).
Inizializzazione Dopo la dichiarazione di una variabile, il suo valore è per il momento impostato su invalido,
altrimenti dipenderebbe dall’occupazione di memoria casuale. Per poter lavorare con la
variabile, ad essa dev’essere assegnato in anticipo un determinato valore. Questa prima
assegnazione di un valore ad una variabile viene chiamata inizializzazione.
Nel momento della creazione di file nuovi tramite il softkey “Nuovo” sull’interfaccia grafica
KUKA viene anche generata automaticamente una sequenza INI. La dichiarazione di va-
riabili dev’essere effettuata sempre prima di questa sequenza.
Un’assegnazione di un valore ad una variabile è un’istruzione e quindi per principio non si
deve trovare nella sezione delle dichiarazioni. Ma l’inizializzazione può avvenire in qualsiasi
posizione nella sezione delle istruzioni. E’ opportuno però inizializzare tutte le variabili
dichiarate in una sezione di inizializzazione direttamente dopo la sezione delle dichiarazioni
(vedi Fig. 1).
31 di 214
Programmazione esperto
Soltanto nelle liste dati è ammesso inizializzare delle variabili direttamente nella riga di
dichiarazione.
DEF NAME()
END
32 di 214
2 Variabili e dichiarazioni (segue)
INT Il tipo di dati Integer è un sottoinsieme dell’insieme dei numeri interi. Può essere soltanto un
sottoinsieme poiché nessun calcolatore è in grado di rappresentare l’insieme teoricamente
infinito dei numeri interi. I 32 bit previsti nel KR C... per i tipi Integer producono 231 numeri
interi più segno. Il numero 0 viene considerato appartenente ai numeri positivi.
Con
NUMERO = -23456
alla variabile NUMERO viene assegnato il valore -23456.
Se ad una variabile INTEGER viene assegnato un valore REAL, il valore viene arrotondato
secondo le regole generali (da x.0 fino a x.49 in giù, da x.5 fino a x.99 in su). Tramite l’istru-
zione
NUMERO = 45.78
la variabile INTEGER NUMERO ottiene il valore 46.
Eccezione: In caso di divisione Integer, il numero dopo la virgola viene tagliato, ad es.:
7/4 = 1
Mentre l’uomo calcola e pensa nel sistema decimale, un computer conosce solo lo zero e
l’uno che rappresentano i due stati Off e On. Uno stato (Off o On) viene quindi indicato con
un bit. Per motivi di velocità il calcolatore accede generalmente ad un intero pacchetto di tali
zeri e uni. Grandezze tipiche di pacchetti sono 8 bit (=1 Byte), 16 bit o 32 bit. Per operazioni
Sistema binario orientate alla macchina è quindi spesso opportuna la rappresentazione nel sistema binario
Sistema (cifre 0 e 1) o nel sistema esadecimale (cifre 0--9 e A--F). I valori interi binari o esadecimali
esadecimale possono essere indicati nel KRL con l’aiuto dell’apice (’) e dell’indicazione di B per rappresen-
tazione binaria eppure H per rappresentazione esadecimale.
D 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
H 0 1 2 3 4 5 6 7 8 9 A B C D E F 10
33 di 214
Programmazione esperto
Il numero 90 può essere assegnato nel KRL in tre diversi modi ad una variabile Integer:
NUMEROINT = 90 ;Sistema decimale
NUMEROINT = ’B1011010’ ;Sistema binario
NUMEROINT = ’H5A’ ;Sistema esadecimale
Bin ® Dec La conversione di numeri binari nel sistema decimale avviene nel modo seguente:
1 0 1 1 0 1 0
= 1S26+0S25+1S24+1S23+0S22+1S21+0S20= 90
26 25 24 23 22 21 20
Esa ® Dec Per trasferire dei numeri dal sistema esadecimale nel sistema decimale si procede come
segue:
5 A
=5S161+10S160=90
161 160
REAL Col termine della rappresentazione a virgola mobile si intende la suddivisione di un numero
in mantissa ed esponente e la loro rappresentazione in forma normalizzata. Viene ad es.
rappresentato
5.3 come 0.53000000 E+01
-100 come -0.10000000 E+03
0.0513 come 0.51300000 E-01
Calcolando con valori Real occorre tener conto, a causa del limitato numero di posizioni a
virgola mobile e dell’imprecisione che ne deriva, che le abituali leggi dell’algebra non sono
più valide in tutti i casi. Nell’algebra vale ad esempio:
1⋅3 = 1
3
Se si fa calcolare ciò successivamente da un computer può darsi che il risultato sia soltanto
0.99999999 E+00. Da un paragone logico di questo numero con la cifra 1 risulterebbe il
valore FALSE. Per le applicazioni pratiche nell’ambito dei robot questa precisione è però
generalmente sufficiente considerando che il test logico dell’uguaglianza nel caso di
grandezze Real può essere effettuato con senso soltanto all’interno di un piccolo range di
tolleranza.
Delle assegnazioni ammesse a variabili Real sono ad es.:
NUMEROREAL1 = -13.653
NUMEROREAL2 = 10
NUMEROREAL3 = 34.56 E-12
Se ad una variabile REAL viene assegnato un valore INTEGER, viene effettuata automati-
camente una conversione del tipo in REAL. La variabile NUMEROREAL2 ha quindi secondo
l’assegnazione sopra indicata il valore 10.0!
BOOL Le variabili di Boole servono per la descrizione di stati logici (ad es. ingressi/uscite). Possono
assumere soltanto i valori TRUE (vero) e FALSE (falso):
STATO1 = TRUE
STATO2 = FALSE
34 di 214
2 Variabili e dichiarazioni (segue)
2.2.3 Campi
Con campi si intende il raggruppamento di oggetti dello stesso tipo di dati in un oggetto di
dati con la possibilità di richiamare i singoli componenti di un campo per mezzo di indici.
Tramite la dichiarazione
DECL INT OTTO[7]
Indice di campo è possibile ad es. depositare 7 diversi numeri Integer nel campo OTTO[]. L’accesso ad ogni
singola componente del campo è possibile tramite l’indicazione dell’indice corrispondente (il
prima indice è sempre l’1):
OTTO[1] = 5 ; al 1. elemento viene assegnato il numero 5
OTTO[2] = 10 ; al 2. elemento viene assegnato il numero 10
OTTO[3] = 15 ; al 3. elemento viene assegnato il numero 15
OTTO[4] = 20 ; al 4. elemento viene assegnato il numero 20
OTTO[5] = 25 ; al 5. elemento viene assegnato il numero 25
OTTO[6] = 30 ; al 6. elemento viene assegnato il numero 30
OTTO[7] = 35 ; al 7. elemento viene assegnato il numero 35
Ci si può immaginare il campo col nome OTTO[] come scaffale con 7 ripiani. L’occupazione
dei ripiani sarebbe, secondo le assegnazioni precedenti, la seguente:
5 10 15 20 25 30 35
Se tutti gli elementi di un campo devono essere inizializzati con lo stesso numero, ad es. 0,
non è necessario programmare ogni assegnazione esplicitamente, ma è possibile “automa-
tizzare” la riservazione per mezzo di un loop e di una variabile di conteggio:
FOR I = 1 TO 7
OTTO[I] = 0
ENDFOR
35 di 214
Programmazione esperto
Piano 1
Fila 1
Fila 2
1
Fila 3 5
2 9
6 13
Fila 4 10 17
3
7 14
4 11 18
8 15
12 19
Colonna 1
16
Colonna 2
20
Colonna 3
Colonna 4
Colonna 5
36 di 214
2 Variabili e dichiarazioni (segue)
Tridimens. Ci si può infine immaginare i campi tridimensionali come diversi matrici bidimensionali poste
una dietro all’altra. La terza dimensione indica per così dire il piano nel quale si trova la
matrice (vedi Fig. 4). La dichiarazione di un campo tridimensionale avviene in modo analogo
a quella dei campi unidimensionali o bidimensionali, ad es.:
DECL BOOL CAMPO_3D[3,5,4]
La sequenza di inizializzazione potrebbe essere la seguente:
FOR PIANO = 1 TO 3
FOR COLONNA = 1 TO 5
FOR FILA = 1 TO 4
CAMPO_3D[PIANO,COLONNA,FILA] = FALSE
ENDFOR
ENDFOR
ENDFOR
Piano 3
Piano 2
41
Piano 1 45
42 49
21 46 53
Fila 1 25 50 57
22 29 54
Fila 2 26 33 58
1
5 30 37 55
Fila 3 34 59
2 9
6 13 38 56
Fila 4 10 17 35 60
3
7 14 39
4 11 18 36
8 15 40
12 19
Colonna 1
16
Colonna 2
20
Colonna 3
Colonna 4
Colonna 5
37 di 214
Programmazione esperto
A B C D E F G
2.2.5 Strutture
Se devono essere raggruppati diversi tipi di dati, allora il campo è inappropriato e bisogna
STRUC ricorrere alla forma più generale del collegamento. Con la proposizione dichiarativa STRUC
è possibile raggruppare diversi tipi di dati, che sono stati definiti precedentemente o che sono
dei tipi di dati predefiniti, in un nuovo tipo dati di collegamento. In particolare anche altri colle-
gamenti e campi possono far parte di un collegamento.
Un esempio tipico per l’utilizzo di collegamenti è il tipo di dati standard POS. E’ composto da
6 valori REAL e 2 valori INT ed è stato definito nel file $OPERATE.SRC nel modo seguente:
STRUC POS REAL X, Y, Z, A, B, C, INT S, T
Punto Se viene utilizzata ad es. una variabile POSIZIONE del tipo di dati di struttura POS, allora
separatore è possibile occupare gli elementi o singolarmente tramite il punto separatore, ad es.:
POSIZIONE.X = 34.4
POSIZIONE.Y = -23.2
POSIZIONE.Z = 100.0
POSIZIONE.A = 90
POSIZIONE.B = 29.5
POSIZIONE.C = 3.5
POSIZIONE.S = 2
POSIZIONE.T = 6
Aggregato oppure insieme per mezzo del cosiddetto aggregato
38 di 214
2 Variabili e dichiarazioni (segue)
Per variabili POS sono quindi ammesse ad esempio anche le seguenti assegnazioni:
La variabile S_PARA dev’essere composta da 3 elementi di diverso tipo di dati. Prima di tutto
dev’essere definito un nuovo tipo di dati che soddisfa queste richieste:
Con ciò è stata creata una variabile S_PARA del tipo di dati TIPOSALDATURA. I singoli
elementi possono essere richiamati, come già illustrato, per mezzo del punto separatore o
dell’aggregato:
S_PARA.V_FILO = 10.2
S_PARA.CURVA = 66
S_PARA.ARCO = TRUE
oppure
Per poter distinguere meglio i tipi di dati autodefiniti dalle variabili, i nomi dei nuovi tipi di
dati dovrebbero terminare o iniziare con ...TIPO.
39 di 214
Programmazione esperto
Con i componenti E1...E6 nella struttura E6POS possono essere pilotati degli assi addizionali.
Tipi di dati I tipi AXIS, E6AXIS, POS, E6POS e FRAME vengono chiamati anche tipi di dati geometrici
geometrici poiché il programmatore può descrivere con essi in modo semplice delle relazioni
geometriche.
40 di 214
2 Variabili e dichiarazioni (segue)
APPUNTI:
41 di 214
Programmazione esperto
2.3.1 Operatori
Con operatori si intendono gli usuali operatori matematici al contrario di funzioni come ad
Operando esempio SIN(30) che fornisce il seno dell’ angolo 30_. Nell’operazione 5+7 si chiamano
quindi 5 e 7 operandi e + operatore.
Ad ogni operazione il compilatore verifica l’ammissibilità degli operandi. Così ad esempio 7
-- 3 è un’operazione ammessa trattandosi della sottrazione di due numeri Integer, 5 + “A” è
un’operazione invalida trattandosi dell’addizione di un valore Integer con un carattere.
In caso di alcune operazioni come 5 + 7.1, cioè l’addizione di valori Integer con valori Real,
viene effettuato un adattamento del tipo e trasformato il valore Integer 5 nel valore Real 5.0.
Questo argomento sarà trattato più in dettaglio quando si parlerà dei singoli operatori.
Operatore Descrizione
+ Addizione o segno positivo
-- Sottrazione o segno negativo
* Moltiplicazione
/ Divisione
Il risultato di un’operazione aritmetica è soltanto INT se tutti i due operandi sono del tipo
INTEGER. Se il risultato di una divisione Integer non è intero, allora i numeri dopo la virgola
vengono eliminati. Se almeno uno dei due operandi è REAL anche il risultato è del tipo REAL
(vedi Tab. 4).
42 di 214
2 Variabili e dichiarazioni (segue)
DEF ARITH()
END
43 di 214
Programmazione esperto
Se l’operando sinistro è del tipo di dati POS, allora avviene un adattamento del tipo. La
posizione indicata tramite la struttura POS viene trasformata in un frame. Ciò significa
che il sistema rileva il frame dell’utensile per questa posizione.
In seguito viene illustrato il modo di azione dell’operatore geometrico con un semplice
esempio (vedi Fig. 5):
In una stanza si trova un tavolo. Il sistema di coordinate dello SPAZIO è definito come un
sistema di coordinate fisso nell’angolo anteriore sinistro della stanza.
Il tavolo si trova parallelamente alle pareti della stanza. L’angolo anteriore sinistro del tavolo
dista esattamente 600 mm dalla parete anteriore e 450 mm dalla parete sinistra della stanza.
L’altezza del tavolo è di 800 mm.
Sul tavolo si trova un pezzo in lavorazione di forma parallelepipeda. Il sistema di coordinate
del PEZZO viene posto come mostrato in Fig. 5 in un angolo del pezzo. Per poter manipolare
il pezzo in un secondo tempo in modo opportuno, l’asse Z del sistema di coordinate del
PEZZO è rivolto verso basso. Il pezzo è ruotato di 40˚ rispetto all’asse Z del sistema di
coordinate del TAVOLO. La posizione del sistema di coordinate del PEZZO rispetto al
sistema di coordinate del TAVOLO è di X=80 mm, Y = 110 mm e Z = 55 mm.
Base=Tavolo:Pezzo
ZR
XB
YR YB
ZB
Base
Pezzo
ZT YT
XT
Tavolo
XR
Il compito ora è di descrivere il sistema di coordinate del PEZZO rispetto al sistema di coordi-
nate dello SPAZIO. A questo scopo occorre dichiarare prima le seguenti variabili di tipo
frame:
FRAME TAVOLO, PEZZO, BASE
Il sistema di coordinate dello SPAZIO è già definito in modo specifico del sistema. I sistemi
di coordinate TAVOLO e PEZZO vengono ora inizializzati conformemente alle condizioni
marginali:
TAVOLO = {X 450,Y 600,Z 800,A 0,B 0,C 0}
PEZZO = {X 80,Y 110,Z 55,A -40,B 180,C 0}
44 di 214
2 Variabili e dichiarazioni (segue)
Il sistema di coordinate del PEZZO rispetto al sistema di coordinate dello SPAZIO risulta
essere ora per mezzo dell’operatore geometrico
BASE = TAVOLO:PEZZO
Nel nostro caso BASE è occupato come segue:
BASE = {X 530,Y 710,Z 855,A 140,B 0,C -180}
Un’altra possibilità sarebbe:
BASE = {X 530,Y 710,Z 855,A -40,B 180,C 0}
45 di 214
Programmazione esperto
DEF GEOM_OP ( );
46 di 214
2 Variabili e dichiarazioni (segue)
I confronti possono essere usati in istruzioni di esecuzione programma (vedi capitolo 5), il
risultato di un confronto può essere assegnato ad una variabile di Boole.
Il confronto di valori numerici (INT, REAL) e caratteri (CHAR) è possibile perché ad ogni
carattere ASCII è assegnato un codice ASCII. Questo codice è un numero che determina
l’ordine dei caratteri nella sequenza dei caratteri.
Le singole costanti di un tipo di enumerazione vengono numerate al momento della loro
dichiarazione nell’ordine della loro apparizione. Gli operatori di confronto si riferiscono a
questi numeri.
Oltre ai confronti semplici sono ammessi anche i confronti multipli. In seguito alcuni esempi
al riguardo:
¼
BOOL A,B
¼
B = 10 < 3 ;B=FALSE
A = 10/3 == 3 ;A=TRUE
B = ((B == A) <> (10.00001 >= 10)) == TRUE ;B=TRUE
A = “F” < “Z” ;A=TRUE
¼
47 di 214
Programmazione esperto
Gli operandi di una connessione logica devono essere del tipo BOOL, il risultato è anch’esso
sempre del tipo BOOL. In Tab. 8 sono rappresentati i possibili risultati delle relative connes-
sioni in base al valore degli operandi.
48 di 214
2 Variabili e dichiarazioni (segue)
0 1 0 1 = 5
1 1 0 0 = 12
AND 0 1 0 0 = 4
OR 1 1 0 1 = 13
EXOR 1 0 0 1 = 9
Nel caso dell’inversione per bit non vengono semplicemente invertiti tutti i bit. In caso di
utilizzo di B_NOT viene invece sommato 1 all’operando e il segno viene invertito, ad es.:
B_NOT 10 = -11
B_NOT -10 = 9
Gli operatori bit vengono impiegati ad esempio per interconnettere dei segnali I/O digitali
(vedi 6.3).
Poiché i caratteri ASCII sono anche attivabili tramite il codice ASCII di numeri interi, il
tipo di dati degli operandi può essere oltre a INT anche CHAR. Il risultato è sempre del
tipo INT.
49 di 214
Programmazione esperto
50 di 214
2 Variabili e dichiarazioni (segue)
Priorità Operatore
1 NOT B_NOT
2 * /
3 + -
4 AND B_AND
5 EXOR B_EXOR
6 OR B_OR
7 == <> < > >= <=
Esempi:
¼
INT A,B
BOOL E,F
¼
A = 4
B = 7
E = TRUE
F = FALSE
¼
E = NOT E OR F AND NOT (-3 + A * 2 > B) ;E=FALSE
A = 4 + 5 * 3 - B_NOT B / 2 ;A=23
B = 7 B_EXOR 3 B_OR 4 B_EXOR 3 B_AND 5 ;B=5
F = TRUE == (5 >= B) AND NOT F ;F=TRUE
¼
51 di 214
Programmazione esperto
52 di 214
2 Variabili e dichiarazioni (segue)
degli angoli nei quadranti III e IV. Per questo motivo, per il calcolo dell’arcotangente nella
funzione ATAN2(Y,X) sono necessarie anche queste due indicazioni, ad es.:
A = ATAN2(0.5,0.5) ;A=45
B = ATAN2(0.5,-0.5) ;B=135
C = ATAN2(-0.5,-0.5) ;C=225
D = ATAN2(-0.5,0.5) ;D=315
II I
X=COS(a)
Y=SIN(a)
a
0
III IV
APPUNTI:
53 di 214
Programmazione esperto
Le variabili di sistema sono integrate completamente nel concetto delle variabili del KRL.
Dispongono di un tipo di dati opportuno e possono essere lette e scritte come ogni altra
variabile nel programma se non esistono delle limitazioni a causa del tipo di dati. La posizione
attuale del robot può essere ad es. soltanto letta ma non scritta. Tali limitazioni vengono
verificate dal controllo.
Per quanto possibile per motivi tecnici di sicurezza si dispone perfino dell’accesso per
scrittura ai dati di sistema. Con ciò nascono molte possibilità per la diagnosi poiché una
pluralità di dati di sistema può essere caricata o influenzata dal KCP e dal sistema di
programmazione.
Delle variabili di sistema utili con accesso per scrittura sono ad esempio $TIMER[] e
$FLAG[].
Timer Le 16 variabili Timer $TIMER[1]...$TIMER[16] servono per la misurazione di cicli tempo-
rali e possono essere impiegate come “cronometro”. L’avvio e l’arresto del processo di misu-
razione avviene tramite le variabili di sistema $TIMER_STOP[1]...$TIMER_STOP[16]:
$TIMER_STOP[4] = FALSE
avvia ad esempio il timer 4,
$TIMER_STOP[4] = TRUE
arresta il timer 4. Tramite una normale assegnazione di valore, la rispettiva variabile timer
può essere resettata in qualsiasi momento, ad es.:
$TIMER[4] = 0
Se il valore di una variabile timer cambia da meno a più, allora viene settato un corrispon-
dente flag su TRUE (condizione timer out), ad es.:
$TIMER_FLAG[4] = TRUE
Al caricamento del controllo vengono preimpostate tutte le variabili timer con 0, i flag
$TIMER_FLAG[1]...$TIMER_FLAG[16] con FALSE e le variabili
$TIMER_STOP[1]...$TIMER_STOP[16] con TRUE.
L’unità delle variabili timer sono i millesimi di secondo (ms). L’aggiornamento di
$TIMER[1]...$TIMER[16] e $TIMER_FLAG[1]...$TIMER_FLAG[16]
avviene ogni 12 ms.
54 di 214
2 Variabili e dichiarazioni (segue)
Flags I 1024 flags $FLAG[1]...$FLAG[1024] vengono impiegati come merker globali. Queste
variabili di Boole vengono preimpostate con FALSE. Il valore attuale dei flags può essere
visualizzato in ogni momento sull’interfaccia grafica sotto il punto menù “Visualizza”.
Flags ciclici Inoltre nel KR C... sono disponibili 32 flags ciclici $CYCFLAG[1]¼$CYCFLAG[32]. Dopo
il caricamento del controllo essi sono tutti preimpostati su FALSE.
I flags sono attivi ciclicamente soltanto sul livello robot. In un submitfile i flags ciclici sono
ammessi ma non avviene nessuna analisi ciclica.
I flags ciclici possono essere definiti ed attivati anche in sottoprogrammi, funzioni e sottopro-
grammi interrupt.
$CYCFLAG[1]...$CYCFLAG[32] sono del tipo di dati BOOL. Per un’assegnazione ad un flag
ciclico può essere utilizzata una qualsiasi espressione di Boole.
Sono ammesse
G delle variabili di sistema di Boole e
G delle variabili di Boole che sono state dichiarate ed inizializzate in una lista dati.
Non sono ammesse
G delle funzioni che forniscono un valore di Boole.
L’istruzione
$CYCFLAG[10] = $IN[2] AND $IN[13]
comporta ad esempio che l’espressione di Boole “$IN[2] AND $IN[13]” venga
analizzata ciclicamente. Ciò vuol dire che appena varia l’ingresso 2 o l’ingresso 13 varia
anche $CYCFLAG[10], indipendentemente dal fatto in quale posizione si trova il puntatore
di programma dopo l’esecuzione della suddetta espressione.
Tutti i flags ciclici definiti rimangono validi finché un modulo viene deselezionato o viene
eseguita una selezione di frase con reset. Al raggiungimento della fine del programma tutti
i flag ciclici rimangono attivi.
$ -- carattere Generalmente i nomi delle variabili predefinite sono scelti in modo da poterli ricordare
facilmente. In effetti, tutti cominciano con un carattere $ seguito da un’abbreviazione inglese
caratteristica. Siccome vengono trattate come delle variabili usuali non è necessario
ricordarsi comandi insoliti o delle opzioni strane.
55 di 214
Programmazione esperto
Sull’interfaccia grafica KUKA appare il drive del robot nel quale i dati rilevanti per il controllo
sono depositati nella directory “Steu” e i dati rilevanti per il robot nella directory “R1”.
Durante la programmazione del KR C... è possibile creare dei file di programma e delle liste
dati. Nei file di programma si trovano delle definizioni di dati e delle istruzioni eseguibili, le
liste dati contengono soltanto delle definizioni di dati ed eventualmente delle inizializzazioni.
Oltre alle liste dati create durante la programmazione, nel KR C... esistono anche delle liste
dati definite da KUKA che vengono fornite con il software di controllo. Queste liste dati
vengono chiamate liste dati predefinite e contengono principalmente le variabili predefinite.
Le liste dati predefinite non possono essere né cancellate né create da Voi. Esse vengono
generate nel momento dell’installazione del software e sono poi sempre presenti. Anche i
nomi delle liste dati predefinite iniziano come i nomi dei dati predefiniti con un carattere $.
Nel KR C... esistono le seguenti liste dati predefinite:
G $MACHINE.DAT
è una lista dati predefinita con delle variabili di sistema esclusivamente predefinite.
Tramite i dati macchina il controllo viene adattato al robot collegato (cinematica,
parametri di regolazione, ecc.). Esiste una $MACHINE.DAT sia nel sistema di controllo
che nel sistema robot. Non è possibile creare delle variabili nuove o cancellare delle
variabili esistenti.
Esempi:
$ALARM_STOP Segnale per Emergenza (specifico del controllo)
$NUM_AX Numero degli assi robot (specifico del robot)
G $CUSTOM.DAT
è una lista dati presente soltanto nel sistema di controllo. Contiene dei dati con i quali
è possibile progettare o parametrizzare determinate funzioni di controllo. Per il
programmatore esiste soltanto la possibilità di modificare i valori delle variabili
predefinite. Non è possibile creare delle variabili nuove o cancellare delle variabili
esistenti.
Esempi:
$PSER_1 Parametri di protocollo dell’interfaccia seriale 1
$IBUS_ON Attivazione di gruppi interbus alternativi
56 di 214
2 Variabili e dichiarazioni (segue)
G $CONFIG.DAT
è una lista dati predefinita da KUKA che però non contiene delle variabili di sistema
predefinite. Esiste una $CONFIG.DAT sul livello del controllo e sul livello robot. Lì
possono essere definiti delle variabili, delle strutture, dei canali e dei segnali che sono
validi per più tempo e che sono di importanza superiore per molti programmi.
La lista dati è suddivisa nei seguenti blocchi:
-- BAS
-- AUTOEXT
-- GRIPPER
-- PERCEPT
-- SPOT
-- A10
-- A20
-- TOUCHSENSE
-- USER
Delle dichiarazioni globali dell’utente dovrebbero essere inserite preferibilmente nel
blocco USER poiché soltanto le dichiarazioni contenute qui vengono mantenute in caso
di un successivo aggiornamento del software.
G $ROBCOR.DAT
Il file $ROBCOR.DAT contiene dei dati specifici del robot per il modello dinamico del
robot. Questi dati sono necessari per la programmazione della traiettoria. Anche qui
non è possibile creare delle variabili nuove o cancellare delle variabili esistenti.
APPUNTI:
57 di 214
Programmazione esperto
58 di 214
3 Programmazione del movimento
Fig. 8 Sistema di coordinate specifico per asse di un robot a 6 assi con braccio flessibile
59 di 214
Programmazione esperto
La descrizione di una posizione specifica per asse avviene nel KR C... tramite il tipo di strut-
tura predefinito AXIS, i cui componenti hanno a seconda del tipo di asse il significato di angoli
o di lunghezze.
Delle posizioni specifiche per asse possono essere raggiunte soltanto insieme a frasi di mo-
vimento PTP. Se un movimento lungo la traiettoria viene programmato con una posizione
robot specifica per asse, ciò provoca un errore.
Trasforma- Poiché il programmatore pensa in coordinate cartesiane, la programmazione nel sistema di
zione di coordinate specifico per asse è quasi sempre molto scomodo. Il controllo offre quindi diversi
coordinate sistemi di coordinate cartesiani per la programmazione le cui coordinate vengono trasfor-
mate prima dell’esecuzione del movimento automaticamente nel sistema specifico per asse
(vedi Fig. 9).
Trasformazione in avanti
X, Y, Z, A, B, C (, S, T)
Trasformazione indietro
60 di 214
3 Programmazione del movimento (segue)
La posizione di un punto nello spazio è definita nel sistema di coordinate cartesiano in modo
univoco tramite l’indicazione delle coordinate X, Y e Z. Queste risultano dalle distanze trasla-
torie di ogni valore delle coordinate rispetto all’origine delle coordinate (vedi Fig. 10).
Z
P
Z1
Y1
X1 X
Per poter raggiungere ogni punto nello spazio con un orientamento qualsiasi sono necessa-
rie oltre ai tre valori traslatori anche tre indicazioni rotatorie:
Gli angoli denominati A, B e C nel KR C... descrivono delle rotazioni intorno agli assi delle
coordinate Z, Y e X. Occorre rispettare l’ordine delle rotazioni:
1. Rotazione intorno all’asse Z dell’angolo A
2. Rotazione intorno al nuovo asse Y dell’angolo B
3. Rotazione intorno al nuovo asse X dell’angolo C
Questo ordine di rotazione corrisponde agli angoli roll--pitch--yaw (rullare--beccheggiare--
imbardare) noti dall’aviazione. L’angolo C corrisponde al rullare, l’angolo B al beccheggiare
e l’angolo A all’imbardare (vedi Fig. 11).
61 di 214
Programmazione esperto
A B C
Z’ Y’
Z B
A Y ’’
Z ’’
Y X’ Y ’’’
Z ’’’
X
C
X ’’ X ’’’
In caso di movimenti lungo la traiettoria, l’indicazione delle coordinate FRAME è sempre uni-
voca e sufficiente. Per lo spostamento da punto a punto può però essere raggiunto in caso
di determinate cinematiche del robot (ad es. braccio flessibile a 6 assi) il medesimo punto
(posizione ed orientamento) nello spazio con diverse posizione degli assi. Tramite le due ul-
teriori indicazioni “S” e “T” questa ambiguità può essere evitata. Nel KR C... è prevista la
struttura POS per un frame ampliato di “S” e “T”.
62 di 214
3 Programmazione del movimento (segue)
Nel KR C... sono predefiniti i seguenti sistemi di coordinate cartesiani (Tab. 13 e Fig. 12):
y
z
Sistema di
z x coordinate utensile
z y
Sistema di x
y coordinate base
Sistema di
coordinate mondo Sistema di
z coordinate robot
y x
63 di 214
Programmazione esperto
X
Z
z
$TOOL
y
z
x
$POS_ACT
y
$BASE x
x
$ROBROOT
z y
$WORLD x
64 di 214
3 Programmazione del movimento (segue)
Utensile fisso Nella prassi industriale si tende però sempre di più ad ancorare l’utensile (ad es. cannello
di saldatura) saldamente nello spazio e di far passare il pezzo stesso tramite un gripper
adatto lungo l’utensile fisso.
La variabile $TOOL si riferisce sempre all’utensile oppure al pezzo che si trova sul robot. La
variabile $BASE si riferisce invece sempre all’utensile oppure al pezzo esterno.
Interpolazione Poiché ora il pezzo e l’utensile hanno cambiato la loro posizione, ma il movimento deve avve-
riferita al nire ancora con riferimento al pezzo, è necessario effettuare l’interpolazione della traiettoria
gripper di movimento tramite il sistema di coordinate $TOOL. Questa assegnazione del tipo di inter-
polazione avviene implicitamente all’utilizzo di un TCP normale o esterno. Tramite la varia-
bile di sistema $IPO_MODE è possibile definire questo tipo di interpolazione. La riga di pro-
gramma
$IPO_MODE = #TCP
consente una interpolazione riferita al gripper nel sistema di coordinate $TOOL. La posizione
attuale $POS_ACT viene ora calcolata rispetto a $TOOL (vedi Fig. 14). Con
$IPO_MODE = #BASE
il tipo di interpolazione viene di nuovo impostato sull’interpolazione riferita alla base per il
caso normale. Ciò è anche l’impostazione standard al caricamento del controllo.
$TOOL y
x
z z
$POS_ACT
z y
x
$BASE
x
$ROBROOT
z y
$WORLD x
65 di 214
Programmazione esperto
66 di 214
3 Programmazione del movimento (segue)
67 di 214
Programmazione esperto
END
68 di 214
3 Programmazione del movimento (segue)
Se durante l’indicazione delle coordinate degli assi vengono omessi dei singoli componenti,
il robot sposta soltanto gli assi indicati mentre la posizione degli altri rimane invariata. Con
A3 = 0_
PTP {A3 45}
A3 = 90_
69 di 214
Programmazione esperto
Lo spostamento in coordinate specifiche per asse è quasi sempre scomodo poiché l’uomo
pensa ed agisce nello spazio cartesiano. A questo scopo serve l’indicazione delle coordinate
cartesiane tramite una struttura POS utilizzata nel seguente esempio:
DEF PTP_POS()
PTP {POS:X 1025,Y 0,Z 1480,A 0,B 90,C 0,S ’B 010’,T ’B 000010’}
END
70 di 214
3 Programmazione del movimento (segue)
Per lo spostamento relativo del robot si usa di nuovo il comando PTP_REL. Con
PTP_REL {Z 180, B -90}
è dunque possibile riportare il robot nella sua posizione originaria. Occorre osservare che
i movimenti relativi non devono essere nuovamente selezionati dopo un’interruzione.
ZBASE
YBASE
200
150
100
50
XBASE
50 100 150 200
71 di 214
Programmazione esperto
Ad un TouchUp con il pacchetto base fornito come standard vengono depositati per ogni
punto automaticamente $BASE e $TOOL nella lista dati.
Nel seguente esempio viene eseguito nel secondo comando PTP uno spostamento delle
coordinate del punto di destinazione di 300 mm in direzione X, di --100 mm in direzione Y,
come anche una rotazione di 90° intorno all’asse Z.
DEF FR_VERS ( )
72 di 214
3 Programmazione del movimento (segue)
SAK Prima di poter eseguire un programma dev’essere ottenuta la coincidenza frase (SAK), cioè
la corrispondenza della posizione attuale del robot con la posizione programmata. Siccome
il movimento SAK non rappresenta un movimento programmato e sperimentato, esso
dev’essere effettuato tenendo premuto il tasto start (funzione uomo morto) e con velocità
automaticamente ridotta. Al raggiungimento della traiettoria programmata il movimento
viene arrestato e il programma può essere ripreso azionando nuovamente il tasto start.
SeT I valori “S” e “T” in un’indicazione POS servono per scegliere tra diverse posizioni robot possi-
bili per la medesima posizione nello spazio (a causa delle singolarità di cinematica) una posi-
zione precisa e definita in modo univoco.
Per la prima istruzione di movimento è quindi, in caso di utilizzo di coordinate cartesiane,
molto importante programmare anche “Status” e “Turn” affinché venga definita una posi-
zione di partenza univoca. Siccome per movimenti lungo la traiettoria (vedi 3.3) “S” e “T” non
vengono considerati, la prima istruzione di movimento di un programma (movimento Home)
dovrebbe essere in ogni caso un’istruzione PTP completa con l’indicazione di “Status” e
“Turn” (o un’istruzione PTP completa con le coordinate degli assi).
Nelle seguenti istruzioni PTP possono essere omesse le indicazioni “S” e “T” se non è neces-
saria una determinata posizione degli assi, ad es. a causa di ostacoli. Il robot mantiene il vec-
chio valore S e sceglie il valore T con il quale risulta il percorso assiale più breve, il quale,
a causa dell’unica programmazione di “S” e “T” nella prima frase PTP, è sempre lo stesso
per i diversi processi di programmazione.
Status e Turn richiedono entrambi dei valori Integer che dovrebbero essere fatti per motivi
pratici in forma binaria.
Turn L’integrazione di una indicazione di posizione cartesiana con il valore Turn consente anche
di poter raggiungere degli angoli assiali maggiori di +180_ oppure minore di --180_ senza una
particolare strategia di traslazione (ad es. punti intermedi). I singoli bit determinano in caso
di assi rotatori il segno del valore degli assi nel modo seguente:
Bit x = 0: Angolo dell’asse x ³ 0_
Bit x = 1: Angolo dell’asse x < 0_
L’indicazione T ’B 10011’ significa quindi che gli angoli degli assi 1, 2 e 5 sono negativi, gli
angoli degli assi 3, 4 e 6 invece positivi (tutti i bit 0 di maggior peso possono essere omessi).
Status Con lo Status S vengono gestite delle ambiguità riguardo alla posizione degli assi (vedi
Fig. 18). S dipende dunque dalla relativa cinematica del robot.
73 di 214
Programmazione esperto
Ambiguità
Asse 5
Asse 3
Asse 2
Asse 5
Asse 4 Asse 6
I bit vengono settati per tutti i robot a 6 assi con braccio flessibile secondo la tabella seguente:
74 di 214
3 Programmazione del movimento (segue)
Il bit 1 indica la posizione del braccio. Il settaggio del bit dipende dal relativo tipo di robot. In
caso di robot i cui assi 3 e 4 si intersecano vale: il bit 1 ha il valore 0 se l’asse 3 < 0_, altrimenti
il bit 1 = 1. In caso di robot con un offset tra l’asse 3 e 4 (ad es. KR 30, vedi Fig. 19), la posi-
zione angolare nella quale varia il valore del bit 1 dipende dalla dimensione di questo offset.
Offset
75 di 214
Programmazione esperto
76 di 214
3 Programmazione del movimento (segue)
APPUNTI:
77 di 214
Programmazione esperto
Anche alle velocità e alle accelerazioni per i movimenti lungo la traiettoria vengono
assegnati al richiamo della sequenza di inizializzazione del pacchetto base i valori massimi
definiti nei dati macchina o in $CONFIG.DAT.
78 di 214
3 Programmazione del movimento (segue)
79 di 214
Programmazione esperto
In caso di movimenti circolari oltre all’orientamento costante e variabile si può scegliere an-
che tra l’orientamento riferito allo spazio e quello riferito alla traiettoria:
Il treppiede accompagnante la traiettoria è composto dal vettore della tangente del cerchio
t, dal vettore normale n e dal vettore binormale b. L’orientamento dell’utensile segue in
Fig. 22 col treppiede accompagnante la traiettoria sul segmento circolare. Riferito al trep-
piede accompagnante la traiettoria, per le posizioni dell’utensile non risulta nessun cambia-
mento dell’orientamento. Ciò è tra l’altro un importante prerequisito per la saldatura ad arco.
Nell’esempio mostrato, l’orientamento dell’utensile relativamente al treppiede accompa-
gnante la traiettoria non viene variato durante il movimento dal punto di partenza al punto
di destinazione ($ORI_TYPE=#CONST).
80 di 214
3 Programmazione del movimento (segue)
81 di 214
Programmazione esperto
Costante + In caso dell’orientamento riferito allo spazio, l’orientamento viene guidato relativamente al
riferito allo sistema base attuale ($BASE).
spazio
L’orientamento riferito allo spazio è adatto particolarmente per applicazioni focalizzate sul
movimento lungo la traiettoria, cioè la punta dell’utensile viene guidata sulla traiettoria circo-
lare, e per applicazioni con poco cambiamento dell’orientamento tra il punto di partenza ed
il punto di destinazione oppure per applicazioni con orientamento esattamente costante nello
spazio (vedi Fig. 24) durante un movimento circolare (ad es. spalmatura di colla con un
ugello di rotazione).
82 di 214
3 Programmazione del movimento (segue)
In Tab. 17 sono elencate ancora una volta le preimpostazioni delle variabili di sistema per
la gestione dell’orientamento in caso di movimenti lungo la traiettoria:
83 di 214
Programmazione esperto
LIN Nel caso di un movimento lineare il KR C... calcola una retta dalla posizione attuale (nel pro-
gramma corrisponde all’ultimo punto programmato) alla posizione indicata nel comando di
movimento.
DEF LIN_BEW ()
PTP HOME
END
84 di 214
3 Programmazione del movimento (segue)
Il valore dell’angolo circolare non è limitato. Soprattutto è possibile anche programmare dei
cerchi interi (> 360_).
CA > 0° CA < 0°
Punto ausiliario
´
Punto ausiliario
´ Punto di
destinazione
programmato
CA = 235°
´ Punto di destinazione
programmato ´
Punto di destinazione
effettivo
CA = --235°
Punto di partenza Punto di partenza
85 di 214
Programmazione esperto
DEF CIRC_BEW ( )
$ORI_TYPE=#VAR
LIN {A 100} ; riorientamento del TCP
PTP HOME
END
86 di 214
3 Programmazione del movimento (segue)
Il tempo di inattività tra i movimenti può essere ridotto elaborando le complesse istruzioni
aritmetiche e logiche tra le frasi di movimento durante il movimento del robot, cioè elaboran-
dole in un processo avanzato (le istruzioni “anticipano” il movimento).
$ADVANCE Tramite la variabile di sistema $ADVANCE è possibile stabilire un massimo di frasi di movi-
mento che il processo avanzato deve anticipare rispetto al processo principale (cioè la frase
di movimento attualmente in esecuzione). Il puntatore principale visibile sull’interfaccia gra-
fica durante l’esecuzione del programma mostra sempre la frase di movimento che viene
attualmente eseguita.
Il puntatore avanzato invece non è visibile e può indicare sia delle istruzioni che vengono
elaborate completamente dal controllo, sia delle frasi di movimento che vengono soltanto
preparate dal controllo ed eseguite in un secondo tempo nel processo principale (vedi
Fig. 27).
Puntatore principale
87 di 214
Programmazione esperto
Le preimpostazioni di $ADVANCE:
Arresto Istruzioni e dati che hanno influenza sulle periferiche (ad es. istruzioni di entrata
automatico
del processo e di uscita) o che si riferiscono allo stato attuale del robot provocano un arresto
avanzato del processo avanzato (vedi Tab. 18). Ciò è necessario per assicurare la cor-
retta sequenza temporale delle istruzioni e dei movimenti del robot.
88 di 214
3 Programmazione del movimento (segue)
Tab. 18 Istruzioni e variabili che provocano un arresto automatico del processo avanzato
CONTINUE In casi di applicazione dove dev’essere impedito questo arresto del processo avanzato oc-
corre programmare direttamente prima della relativa istruzione il comando CONTINUE. Il
controllo in questo caso prosegue con il processo avanzato. L’effetto è però limitato soltanto
alla prossima riga di programma (anche una riga vuota !!).
APPUNTI:
89 di 214
Programmazione esperto
Ulteriori informazioni sull’istruzione TRIGGER come rimedio sono contenute nel capitolo
[Trigger -- Azioni di commutazione riferite alla traiettoria].
Appros-
simazione
Punto intermedio
Punto di destinazione
Punto di partenza
90 di 214
3 Programmazione del movimento (segue)
91 di 214
Programmazione esperto
DEF UEBERPTP ( )
PTP HOME
END
92 di 214
3 Programmazione del movimento (segue)
x=1296,61
y=133,41
x=1246,93
y=--98,86
x=1209,5
y=381,09
x=1159,08
y=--232,06
x=1109,41
y=--0,51
x=988,45
y=238,53
93 di 214
Programmazione esperto
Inizio di Per la determinazione dell’inizio di approssimazione esistono tre variabili predefinite (vedi
approssima- Tab. 19):
zione
Variabile Tipo di Unità Significato Parola chiave
dati nel comando
$APO.CDIS REAL mm Criterio di distanza traslatorio C_DIS
$APO.CORI REAL _ Distanza di orientamento C_ORI
$APO.CVEL INT % Criterio di velocità C_VEL
Criterio di Alla variabile $APO.CDIS può essere assegnata una distanza traslatoria. Se l’approssima-
distanza zione viene triggerata su questa variabile, allora il controllo abbandona il profilo della frase
singola esattamente quando la distanza fino al punto di destinazione è inferiore al valore in
$APO.CDIS.
Criterio di Alla variabile $APO.CORI può essere assegnata una distanza di orientamento. Il profilo della
orientamento frase singola viene abbandonato in questo caso esattamente quando l’angolo di orienta-
mento dominante (oscillazione o rotazione dell’asse longitudinale dell’utensile) è inferiore
alla distanza stabilita in $APO.CORI fino al punto di approssimazione programmato.
Criterio di Alla variabile $APO.CVEL può essere assegnata una percentuale. Questo valore indica a
velocità quale percentuale della velocità programmata ($VEL) viene iniziato il processo di approssi-
mazione nella fase di frenatura della frase singola. Viene analizzato quel componente di tra-
slazione, oscillazione e rotazione che raggiunge durante il movimento il valore di velocità pro-
grammato oppure si avvicina di più.
94 di 214
3 Programmazione del movimento (segue)
DEF UEBERLIN ( )
PTP HOME
END
x=1296,61
y=133,41
x=1246,93
y=--98,86
x=1209,5
y=381,09
x=1159,08
y=--232,06
x=1109,41
y=--0,51
x=988,45
y=238,53
95 di 214
Programmazione esperto
La posizione alla quale il profilo di approssimazione sbocca nella successiva frase LIN
viene calcolata automaticamente dal controllo. Se $ACC e $VEL sono identici per entrambi
le frasi singole e le lunghezze delle frasi sono sufficienti, la parabola di approssimazione
è simmetrica alla bisettrice tra le due frasi singole. In caso di frasi singole brevi, l’inizio
dell’approssimazione viene limitato alla metà della lunghezza frase. La velocità viene
ridotta in modo che un arresto preciso eventualmente successivo possa essere sempre
rispettato.
96 di 214
3 Programmazione del movimento (segue)
L’impostazione per l’approssimazione tra frasi CIRC ed altri frasi CP (LIN oppure CIRC) è
quasi identica all’approssimazione tra due frasi LIN. Sia il movimento di orientamento che
il movimento traslatorio devono essere raccordati senza salti di velocità da un profilo di frase
singola nell’altro. L’inizio di approssimazione viene anche in questo caso definito tramite le
variabili $APO.CDIS, $APO.CORI o $APO.CVEL la cui interpretazione viene effettuata in
modo completamente identico alle frasi LIN. L’impostazione del criterio di approssimazione
desiderato avviene anche tramite le parole chiavi C_DIS, C_ORI o C_VEL (vedi 3.5.2).
DEF UEBERCIR ( )
97 di 214
Programmazione esperto
PTP HOME
END
x=980
y=--238
150_
x=867
y=--192
A causa della richiesta di passaggi tangenziali in caso dell’approssimazione con frasi CIRC
generalmente non è possibile calcolare un profilo di approssimazione simmetrico. La
traiettoria di approssimazione consiste quindi in due segmenti parabolici che si raccordano
in modo tangenziale e che sboccano contemporaneamente in modo tangenziale nelle frasi
singole (vedi Fig. 32).
98 di 214
3 Programmazione del movimento (segue)
Appros--
simazione
LIN--CIRC
Fine di approssimazione
Inizio di approssimazione
99 di 214
Programmazione esperto
I vantaggi derivanti dall’interpolazione specifica per asse possono però essere sfruttati pie-
namente soltanto se è possibile un passaggio continuo tra frasi specifiche per asse e frasi
cartesiane, perché nel caso di un arresto preciso la maggior parte del tempo guadagnato
altrove viene nuovamente persa.
La programmazione dell’approssimazione di traiettoria PTP avviene in modo completa-
mente analogo ai procedimenti illustrati finora. L’area di approssimazione viene stabilita nel
modo seguente:
Esempio:
Se è necessaria una traiettoria precisa, ad es. un movimento CP parallelamente al tavolo,
occorre prestare attenzione con la combinazione CP--PTP durante l’approssimazione
quando questa traiettoria viene abbandonata. Lo stesso vale per un movimento PTP--CP
per accedere a questa traiettoria.
P3
Programma:
CP--PTP
...
LIN P1
LIN P2 C_DIS
PTP P3 P1 P2
...
In questo caso sorge il problema che il movi-
mento di approssimazione non è prevedibile.
Una collisione col tavolo sarebbe possibile.
Tavolo
100 di 214
3 Programmazione del movimento (segue)
L’approssimazione CP--PTP può essere però garantita soltanto se nessuno degli assi
robot ruota più di 180˚ nella frase della traiettoria e se non cambia lo Status S perché
queste variazioni di posizione non sono prevedibili al momento della programmazione del
profilo di approssimazione. Se un tale cambio di configurazione avviene nella frase della
traiettoria prima dell’approssimazione (variazione di S o T), la frase della traiettoria viene
portata a termine come una frase singola raggiungendo il punto di destinazione
programmato e viene emesso il messaggio errore “Approssimazione CP/PTP non
eseguibile” che può essere resettato. L’utente dovrebbe allora suddividere la frase CP in
diverse frasi singole in modo che la frase singola prima dell’approssimazione CP--PTP sia
sufficientemente breve da poter escludere una variazione di S o T in tutti gli assi del robot.
101 di 214
Programmazione esperto
DEF UEBERB_P ( )
$APO.CDIS=25
LIN {X 1183.15,Y -52.64,Z 716,A 79.11,B 68.13,C 79.73} C_DIS
CIRC {POS: X 1134,Y 53.63,Z 716},{X 1019.21,Y 124.02,Z 716,A
79.11,B 68.12,C 79.73}
PTP HOME
END
x=1209,74
y=--153,44
x=1183,15
y=--52,64
x=1108,78 x=1134
y=267,16 y=53,63
HP
x=1087,47
y=218,67
HP
x=1037,81
x=1019,31 x=1019,21 y=--117,83
y=306,71 y=124,02
102 di 214
3 Programmazione del movimento (segue)
Esempio
In questo esempio è richiesto che all’inizio del movimento di approssimazione da P1 a
P2 l’utensile TOOL_DATA1[1] venga sostituito con TOOL_DATA[2].
$TOOL=TOOL_DATA[1]
PTP P0_TOOL1; il punto viene acquisito con l’utensile TOOL_DATA[1]
LIN P1_TOOL1 C_DIS; il punto viene acquisito con l’utensile TOOL_DATA[1]
$TOOL=TOOL_DATA[2]
LIN P2_TOOL2; il punto viene acquisito con l’utensile TOOL_DATA[2]
TOOL2
brida
TOOL1 TOOL1
inizio approssimazione 1
P2_TOOL2
P0_TOOL1 P1_TOOL1
TOOL2
termine approssimazione 2
P1_TOOL2
P0_TOOL2
inizio approssimazione 2
103 di 214
Programmazione esperto
Ulteriori informazioni sulle liste dati sono contenute nel capitolo [Liste dati].
Se un’istruzione di movimento è stata creata tramite i moduli inline, i punti acquisiti tramite
il modulo possono essere usati in un secondo tempo anche in un’istruzione di movimento
KRL:
I punti vengono depositati nella relativa lista dati col nome indicato nel modulo e un prefisso
X (quindi per i nomi dei punti nei moduli inline sono ammessi soltanto max. 11 caratteri
invece di 12).
E’ possibile quindi richiamare il punto P7 nel modulo inline
104 di 214
3 Programmazione del movimento (segue)
Come alternativa l’utente stesso può stabilire di quanto il momento nominale può divergere
dal momento reale. In caso di superamento il robot viene arrestato.
Esempio
Nel modulo inline è stato stabilito per gli assi A1¼A6 il 50%. Se il momento reale differisce
di più del 50% del momento massimo dal momento nominale calcolato, il robot viene
arrestato e viene emesso un relativo messaggio nella finestra dei messaggi.
MMax
+50% di MMax
Tunnel di sorveglianza
Momento (reale)
effettivo
--50% di MMax
Momento
nominale
0
Ulteriori informazioni per quanto riguarda la sorveglianza di collisione sono contenute nel
Manuale di programmazione nella documentazione [Configurazione] nel capitolo
[Configurazione del sistema esperto].
105 di 214
Programmazione esperto
106 di 214
4 KRL assistent
4 KRL assistent
I pacchetti tecnologici KUKA contengono le funzioni più importanti per abituali applicazioni
di robot. Funzioni speciali che non sono contenute nei pacchetti tecnologici KUKA possono
essere realizzate dall’utente tramite la programmazione diretta del sistema robot in “KRL”,
il “KUKA Robot Language”.
Per rendere possibile la programmazione effettiva di funzioni speciali anche ad utenti che
non utilizzano spesso questo linguaggio di programmazione è stato integrato il “KRL
assistent”.
Il “KRL assistent” offre all’utente la programmazione supportata da sintassi. Dopo la sele-
zione del comando KRL desiderato vengono fornite delle indicazioni di accompagnamento
comando sotto forma di maschere. I contenuti di queste maschere vengono confermati o
modificati. Tutti i contenuti possono sempre essere modificati successivamente.
Comando
Aprire il menù tramite il tasto menù “Istruzione”. Selezionare “KRL assistent”. Appare la
seguente immagine:
Ultima istruzione
Movimento
Muoviparams
Logica
Uscita analog.
Commento
KRL assistent
107 di 214
Programmazione esperto
Il tieniposto “!”
Conferma Se durante l’esecuzione successiva del programma nella finestra dei messaggi
appare “Istruzione non permessa” , cancellare questo messaggio tramite il softkey
“Conferma”.
Premere ora il softkey “Touch Up”. Osservare l’avviso nella finestra di messaggio.
La registrazione della posizione viene indicata nella finestra di messaggio.
Conferma Anche questo messaggio può essere cancellato premendo il softkey “Conferma”.
Invece del tieniposto può essere inserito anche un nome di variabile valido. Una lista delle
parole chiave riservate per KRL che non possono essere utilizzate è contenuta nella
[KRL Reference Guide].
Il sistema robot dovrebbe essere spostato già prima della programmazione di questa
funzione nella posizione desiderata.
Delle informazioni sul movimento manuale del robot sono contenute nel Manuale d’uso
nella documentazione [Operazione], nel capitolo [Spostamento manuale del robot].
Se il nome immesso non dovesse essere ancora conosciuto nel sistema appare il softkey
“VAR” nella barra softkey. Tramite esso viene richiesto di assegnare un formato dati al nome.
Dopo la sua conferma cambia la barra softkey:
108 di 214
4 KRL assistent (segue)
La barra softkey è disponibile soltanto se oltre al file “.SRC” esiste anche una lista dati
“.DAT”.
Dopo aver azionato uno dei softkey “E6POS”, “POS”, “FRAME”, “E6AXIS” o “AXIS”, la
posizione attuale del sistema robot viene registrata nel formato dati selezionato. Ciò viene
confermato tramite un avviso nella finestra di messaggio.
Prima di poter registrare in un programma delle posizioni tramite “Touch Up”, al controllo
devono essere comunicati i dati sulla posizione del sistema di coordinate robot valido
nonché i dati dell’utensile e del pezzo valido.
A questo scopo occorre eseguire la sequenza INI all’inizio del programma.
Il sistema robot dovrebbe essere spostato già prima della programmazione di questa
funzione nella posizione desiderata.
Premere il softkey “Touch Up” per registrare la posizione attuale del sistema robot.
Conferma Questo messaggio può essere poi cancellato azionando il softkey “Conferma”.
Oltre alla possibilità di registrare delle posizioni già raggiunte è possibile anche indicare
manualmente dei punti spaziali.
Premere a questo scopo il softkey “{ ? }” dopo che appare il modulo inline. Cambia l’assegna-
zione della barra softkey:
Dopo aver selezionato un formato dati azionando il relativo softkey, la posizione attuale viene
registrata nel modulo inline.
109 di 214
Programmazione esperto
Con l’operatore geometrico “:” vengono collegate delle indicazioni di posizione del tipo POS
e FRAME. Ciò è necessario sempre quando dev’essere spostata ad es. l’origine di un sis-
tema di coordinate di un valore correttivo.
110 di 214
4 KRL assistent (segue)
Continua Indietro
Approssimazione tra due
movimenti PTP
Approssimazione tra PTP e
LIN o istruzioni CIRC. Criteri:
distanza (DIS), velocità (VEL)
ed orientamento dell’utensile/
pezzo (ORI)
111 di 214
Programmazione esperto
Indietro
Continua Indietro
Approssimazione tra due
movimenti PTP
Approssimazione tra PTP e
LIN o istruzioni CIRC. Criteri:
distanza (DIS), velocità (VEL)
ed orientamento dell’utensile/
pezzo (ORI)
112 di 214
4 KRL assistent (segue)
Continua Indietro
113 di 214
Programmazione esperto
Commutazione tra
LIN_REL e LIN
Continua Indietro
114 di 214
4 KRL assistent (segue)
Continua Indietro
115 di 214
Programmazione esperto
Continua Indietro
116 di 214
5 Controllo dell’esecuzione del programma
APPUNTI:
117 di 214
Programmazione esperto
APPUNTI:
118 di 214
5 Controllo dell’esecuzione del programma (segue)
5.1.3 Smistatore
Se esistono più di 2 alternative, la programmazione può avvenire o con una costruzione IF
intercalata o -- in maniera molto più confortevole -- con lo smistatore SWITCH.
SWITCH L’istruzione SWITCH è un’istruzione di selezione per diversi rami di programma. Ad un criterio
di selezione viene assegnato prima dell’istruzione SWITCH un determinato valore. Se questo
Identificativo valore corrisponde ad un identificativo di blocco, allora il relativo ramo di programma viene
dei blocchi eseguito e il programma salta all’istruzione ENDSWITCH senza tener conto dei successivi
identificativi di blocco. Se nessun identificativo di blocco corrisponde al criterio di selezione,
viene eseguito un blocco DEFAULT, se esistente. Altrimenti viene continuato con l’istruzione
che segue l’istruzione ENDSWITCH.
E’ ammesso assegnare ad un ramo di programma più identificativi di blocco. Al contrario non
è opportuno utilizzare più volte un identificativo di blocco poiché viene considerato sempre
soltanto il primo ramo di programma con il relativo identificativo di blocco.
I tipi di dati ammessi del criterio di selezione sono INT, CHAR e ENUM. Il tipo di dati del criterio
di selezione e quello dell’identificativo di blocco devono corrispondere.
L’istruzione DEFAULT può anche mancare, ma dev’essere unica all’interno di un’istruzione
SWITCH.
Tramite l’istruzione SWITCH è ad es. possibile richiamare diversi sottoprogrammi in base ad
un numero di programma. Il numero di programma potrebbe ad esempio essere applicato
dal PLC agli ingressi digitali del KR C... (vedi paragrafo 6.3 per quanto riguarda l’istruzione
SIGNAL). In questo modo è disponibile come criterio di selezione sotto forma di un valore
Integer.
DEF MAIN()
¼
SIGNAL PROG_NR $IN[1] TO $IN[4]
;Il PLC deposita ora il numero di programma
;desiderato nella variabile INT PROG_NR
¼
SWITCH PROG_NR
CASE 1 ;se PROG_NR=1
PARTE_1()
CASE 2 ;se PROG_NR=2
PARTE_2()
PARTE_2A()
CASE 3,4,5 ;se PROG_NR=3, 4 o 5
$OUT[3]=TRUE
PARTE_345()
DEFAULT ;se PROG_NR<>1,2,3,4 o 5
ERROR_UP()
ENDSWITCH
¼
END
119 di 214
Programmazione esperto
5.2 Loop
La prossima struttura di base per il controllo dell’esecuzione del programma sono i loop che
contengono l’esecuzione ripetuta di una o più istruzioni fino al presentarsi di una determinata
condizione. I loop vengono distinti in base alla forma della condizione e alla posizione
dell’interrogazione per la continuazione.
Un salto dall’esterno in una struttura di loop non è ammesso e viene rifiutato dal
controllo (messaggio di errore).
120 di 214
5 Controllo dell’esecuzione del programma (segue)
DEF FOR_PROG()
¼
INT I,J
INT CAMPO[10,6]
¼
FOR I=1 TO 6
$VEL_AXIS[I] = 100 ;tutte le velocità degli assi su 100%
ENDFOR
¼
FOR I=1 TO 9 STEP 2
FOR J=6 TO 1 STEP -1
CAMPO[I,J] = I*2 + J*J
CAMPO[I+1,J] = I*2 + I*J
ENDFOR
ENDFOR
;I ha ora il valore 11, J il valore 0
¼
END
Indice I =
1 2 3 4 5 6 7 8 9 10
6 38 8 42 24 46 40 50 56 54 72
5 27 7 31 21 35 35 39 49 43 63
4 18 6 22 18 26 30 30 42 34 54
J =
3 11 5 15 15 19 25 23 35 27 45
2 6 4 10 12 14 20 18 28 22 36
1 3 3 7 9 11 15 15 21 19 27
APPUNTI:
121 di 214
Programmazione esperto
DEF WHILE_PR()
¼
INT X,W
¼
WHILE $IN[4] == TRUE ;Esecuzione mentre l’ingresso 4 è settato
PTP PALLET
$OUT[2] = TRUE
PTP POS_2
$OUT[2] = FALSE
PTP HOME
ENDWHILE
¼
X = 1
W = 1
WHILE W < 5; ;Esecuzione mentre W è minore di 5
X = X * W
W = W + 1
ENDWHILE
;W ora è 5
¼ ;X ora è 1S2S3S4 = 24
W = 100
WHILE W < 100 ;Esecuzione mentre W è minore di 100
$OUT[15] = TRUE W = W + 1
ENDWHILE
¼ ;Loop non viene mai eseguito, W rimane 100
END
APPUNTI:
122 di 214
5 Controllo dell’esecuzione del programma (segue)
REPEAT
Istruzioni
UNTIL Condizione di arresto
DEF REPEAT_P()
¼
INT W
¼
REPEAT
PTP PALETTE
$OUT[2]=TRUE
PTP POS_2
$OUT[2]=FALSE
PTP HOME
UNTIL $IN[4] == TRUE ;Esecuzione finché venga settato
l’ingresso 4
¼
X = 1
W = 1
REPEAT
X = X * W
W = W + 1
UNTIL W == 4 ;Esecuzione finché W diventi uguale a 4
;W ora è 4
¼ ;X ora è 1S2S3S4 = 24
W = 100
REPEAT
$OUT[15] = TRUE
W = W + 1
UNTIL W > 100 ;Esecuzione finché W diventi maggiore 100
¼ ;almeno 1 esecuzione di loop, cioè
;W ora è 101, l’uscita 15 è settata
END
123 di 214
Programmazione esperto
Con WHILE e REPEAT si dispone di uno strumento molto potente per la programmazione
strutturata con il quale è possibile sostituire la maggior parte delle istruzioni GOTO.
La sequenza di istruzioni
¼
X = 0
G = 0
MERKER:
X = X + G
G = G + 1
IF G > 100 THEN
GOTO PRONTO
ENDIF
GOTO MERKER:
PRONTO:
¼
può essere realizzata con REPEAT in modo molto più elegante:
¼
X = 0
G = 0
REPEAT
X = X + G
G = G + 1
UNTIL G > 100
¼
APPUNTI:
124 di 214
5 Controllo dell’esecuzione del programma (segue)
LOOP
Istruzioni
ENDLOOP
L’esecuzione ripetuta di questo blocco di istruzioni può essere terminata soltanto con
l’istruzione EXIT.
Ulteriori informazioni per quanto riguarda l’istruzione Exit sono contenute nel
prossimo paragrafo.
DEF EXIT_PRO()
PTP HOME
LOOP ;Start del loop continuo
PTP POS_1
LIN POS_2
IF $IN[1] == TRUE THEN
EXIT ;Arresto, se l’ingresso 1 è settato
ENDIF
CIRC HELP_1,POS_3
PTP POS_4
ENDLOOP ;Fine del loop continuo
PTP HOME
END
APPUNTI:
125 di 214
Programmazione esperto
Tempo è un’espressione REAL aritmetica con la quale viene indicata la durata in secondi
durante la quale l’esecuzione del programma dev’essere interrotta. Se il valore è negativo
non avviene nessuna attesa.
Esempi:
WAIT SEC 17.542
WAIT SEC TEMPO*4+1
APPUNTI:
126 di 214
5 Controllo dell’esecuzione del programma (segue)
HALT
L’istruzione di movimento eseguita per ultima viene però ancora completata. L’esecuzione
del programma può essere continuata soltanto premendo il tasto start. In seguito viene
eseguita l’istruzione successiva ad HALT.
Caso speciale:
In una routine di interrupt, l’esecuzione del programma viene arrestata
tramite un’istruzione HALT soltanto dopo l’esecuzione completa del
processo avanzato (vedi paragrafo 8 Interrupt).
Eccezione: Alla programmazione di un istruzione BRAKE avviene immediatamente
l’arresto.
APPUNTI:
127 di 214
Programmazione esperto
CONFIRM V_Numero
DEF AUTO_QUIT()
INT M
DECL STOPMESS MLD ;tipo di struttura predefinito per
messaggi stop
IF $STOPMESS AND $EXT THEN ;verificare messaggio stop e
modo operativo
M=MBX_REC($STOPMB_ID,MLD) ;leggere stato attuale in MLD
IF M==0 THEN ;verificare se conferma può avvenire
IF ((MLD.GRO==2) AND (MLD.STATE==1)) THEN
CONFIRM MLD.CONFNO ;conferma di questo messaggio
ENDIF
ENDIF
ENDIF
END
APPUNTI:
128 di 214
6 Istruzioni di immissione/emissione
6 Istruzioni di immissione/emissione
6.1 Generalità
Il KR C... conosce 1026 ingressi e 1024 uscite. Nell’armadio di controllo standard KUKA sono
disponibili per l’utente sul connettore X11 (modulo MFC) i seguenti ingressi ed uscite:
Ingressi 1 ¼16
Uscite 1 ¼16 (applicabili max. 100 mA; 100% simultaneità)
Uscite 17 ¼20 (applicabili max. 2 A; 100% simultaneità)
Come opzione possono essere progettati ulteriori ingressi/uscite ad es. tramite bus di
campo.
Gli ingressi possono essere letti, le uscite lette e scritte. Si accede ad essi tramite le variabili
di sistema $IN[Nr] oppure $OUT[Nr]. Le uscite non utilizzate possono essere utilizzate
come merker.
Gli ingressi e le uscite del modulo MFC possono essere smistati nel file “IOSYS.INI” in altri
aree.
APPUNTI:
129 di 214
Programmazione esperto
Ulteriori informazioni sono contenute nel capitolo [Controllo dell’esecuzione del pro-
gramma], capitolo [Trattamento interrupt], capitolo [Trigger -- Azioni di commuta-
zione riferite alla traiettoria].
Le sequenze di istruzioni
BOOL INTERRUTTORE
⋮
INTERRUTTORE = $IN[6]
IF INTERRUTTORE == FALSE THEN
⋮
ENDIF
e
IF $IN[6] == FALSE THEN
⋮
ENDIF
hanno quindi lo stesso significato.
SIGNAL Nel KR C... è inoltre possibile assegnare dei nomi a singoli ingressi o uscite. A questo scopo
serve la dichiarazione di segnale. Essa deve trovarsi come tutte le dichiarazioni nella sezione
delle dichiarazioni del programma. Si può quindi anche programmare
SIGNAL INTERRUTTORE $IN[6]
⋮
IF INTERRUTTORE == FALSE THEN
⋮
ENDIF
La variabile Interruttore viene dichiarata internamente come BOOL.
Gli ingressi e le uscite del sistema possono essere richiamati anche con $IN e $OUT. Le
uscite del sistema sono però protette da scrittura.
L’ingresso 1025 è sempre TRUE, l’ingresso 1026 è sempre FALSE. Questi ingressi
vengono utilizzati ad es. nei dati macchina come variabili “Dummy”. E’ ammesso un utilizzo
multiplo.
130 di 214
6 Istruzioni di immissione/emissione (segue)
DEF BINSIG ( )
;--------- Sezione delle dichiarazioni ---------
EXT BAS (BAS_COMMAND:IN,REAL:IN )
DECL AXIS HOME
SIGNAL ARRESTO $IN[16]
SIGNAL SINISTRA $OUT[13]
SIGNAL CENTRO $OUT[14]
SIGNAL DESTRA $OUT[15]
;---------- Inizializzazione ---------
BAS (#INITMOV,0 ) ;inizializzazione di velocità,
;accelerazioni, $BASE, $TOOL, etc.
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}
Settando gli ingressi 1, 2 o 3, il robot può essere spostato in tre diverse posizioni. Se il robot
ha raggiunto la posizione desiderata ciò viene indicato tramite il settaggio delle relative uscite
13, 14 o 15.
Poiché queste uscite indicano sempre la posizione attuale del robot, con l’interrogazione
131 di 214
Programmazione esperto
$OUT[Nr]
$IN [Nr] AND NOT $OUT[Nr]
TRUE FALSE
TRUE FALSE TRUE
$IN[Nr]
FALSE FALSE FALSE
APPUNTI:
132 di 214
6 Istruzioni di immissione/emissione (segue)
G Gli ingressi e le uscite devono essere indicati nella dichiarazione di segnali in modo
completo e in ordine crescente.
G Possono essere raggruppati in un segnale digitale un massimo di 32 ingressi oppure
uscite.
G Un’uscita può essere contenuta in diverse dichiarazioni di segnale.
133 di 214
Programmazione esperto
DEF BINSIG_D ( )
ENDWHILE
PTP HOME
END
APPUNTI:
134 di 214
6 Istruzioni di immissione/emissione (segue)
Normalmente possono essere utilizzate le uscite 1 ... 1024. Tramite l‘appropriato settaggio
della variabile “$SET_IO_SIZE” sono disponibili 2048 oppure 4096 uscite.
Al raggiungimento del puntatore principale, l’uscita viene settata sul relativo valore boo-
leano che era valido al momento dell’interpretazione, anche se questo valore nel frattempo
è cambiato.
Un‘istruzione “$OUT_C[x]” non ha, contrariamente a “$OUT[x]”, nessun effetto sul pro-
cesso avanzato del calcolatore.
$OUT_C[x] può essere scritto soltanto, per leggere un’uscita dev’essere utilizzato
“$OUT[x]”.
135 di 214
Programmazione esperto
PTP P1
$OUT_C[10]=TRUE
$OUT_C[11]=FALSE
$OUT_C[12]=TRUE
LIN P2
Se sul punto “P1” avviene un arresto preciso, in quel momento vengono settate le
uscite 10 ... 12 secondo le loro definizioni.
Se il movimento sul punto “P1” avviene invece con approssimazione, le uscite 10 ... 12
vengono settate soltanto quando è stato raggiunto il centro dell’area di approssima-
zione. Se l’approssimazione non è possibile, le uscite vengono settate nel punto “P1”.
Nei modi di esecuzione programma “Single--Step” (MSTEP) e “I--Step” (ISTEP), sul punto
P1 viene effettuato dapprima un arresto del processo avanzato. Le uscite definite vengono
settate soltanto dopo il rilascio e il nuovo azionamento del tasto start.
Anche un movimento di coincidenza frase provoca un arresto del processo avanzato. Sol-
tanto dopo il riavvio del programma, le uscite vengono settate secondo la loro definizione.
$OUT_C[x]:
PTP P1 C_PTP
$OUT_C[5]=TRUE
PTP P2
Trigger:
TRIGGER WHEN DISTANCE=1 DELAY=0 DO $OUT[5]=TRUE
PTP P1 C_PTP
PTP P2
In entrambi i casi l’uscita 5 viene settata quando viene raggiunto il centro dell’area di appros-
simazione di “P1”.
Puntatore principale
Se il puntatore avanzato e quello principale sono identici, cioè se il robot attualmente non
esegue nessuna frase di movimento, l’assegnazione avviene immediatamente al raggiungi-
mento dell’istruzione “$OUT_C[]”.
PTP P1
WAIT FOR $IN[22]==TRUE
$OUT_C[12]=FALSE
PTP P2
Nell’esempio viene provocato un arresto del processo avanzato nella riga “WAIT...”, finché
l‘ingresso 22 è “FALSE”. Appena l’ingresso 22 presenta “TRUE”, l‘uscita 12 viene settata.
136 di 214
6 Istruzioni di immissione/emissione (segue)
Segnale
Un’uscita può essere settata anche tramite una dichiarazione di segnale a 1 bit.
PTP P1
Test = TRUE
PTP P2
APPUNTI:
137 di 214
Programmazione esperto
Le durate di impulso che possono essere realizzate sono da 0.012 fino a 231 secondi. La
matrice è di 0.1 secondi. Il controllo arrotonda tutti i valori a un decimo.
138 di 214
6 Istruzioni di immissione/emissione (segue)
Nel prossimo programma sono contenuti alcuni esempi per quanto riguarda l’applicazione
dell’istruzione PULSE:
DEF PULSIG ( )
FOR I=1 TO 16
$OUT[I]=FALSE ;settare tutte le uscite su LOW
ENDFOR
FOR I=1 TO 4
PULSE ($OUT[I],TRUE,1) ;di seguito le uscite 1-4
WAIT SEC 1 ;per 1s su High
ENDFOR
PTP HOME
CONTINUE ;impedire arresto del processo
;avanzato per l’uscita 15
PULSE ($OUT[15],TRUE,3) ;impulso viene direttamente (nel
;processo avanzato)
;sull’uscita 16
PULSE ($OUT[16],TRUE,3) ;impulso soltanto dopo movimento HOME
END ;e rimane ancora dopo END
Osservare in questi esempi attentamente a partire da quando gli impulsi programmati sono
presenti sulle uscite: in linea di massima l’istruzione PULSE porta sempre ad un arresto del
processo avanzato del calcolatore. L’impulso è dunque presente soltanto dopo il termine del
movimento.
Esistono due modi per evitare l’arresto del processo avanzato:
G Programmazione di un’istruzione CONTINUE direttamente prima dell’istruzione PULSE
G Utilizzo dell’istruzione PULSE in un’istruzione TRIGGER (azione di commutazione riferita
alla traiettoria)
139 di 214
Programmazione esperto
140 di 214
6 Istruzioni di immissione/emissione (segue)
I parametri opzionali “Minimum” e “Maximum” non sono disponibili nei moduli Inline poiché
vengono utilizzati esclusivamente per la tecnologia “Applicazione di colla”.
141 di 214
Programmazione esperto
In questo esempio è stato definito sia un valore minimo che un valore massimo. Le relative
impostazioni sono “MINIMUM=0.3” e “MAXIMUM=0.95”.
10 000
Maximum
Tensione analogica [mV]
8 000
UFilo [mV]
6 000
4 000
Minimum
2 000
UStandard [mV]
APPUNTI:
142 di 214
6 Istruzioni di immissione/emissione (segue)
143 di 214
Programmazione esperto
Nel seguente esempio sono illustrate le istruzioni per l’immissione e l’emissione analogica.
Tramite la variabile di sistema $TECHIN[1] ed un sensore che segue la traiettoria e che è
collegato ad un ingresso analogico è ad es. possibile effettuare una correzione della
traiettoria durante il movimento. La variabile $VEL_ACT che contiene sempre la velocità di
avanzamento attuale può essere utilizzata, ponderata con i relativi fattori, per un’emissione
analogica proporzionale alla velocità, quindi ad es. per comandare la quantità di colla durante
la spalmatura.
DEF ANSIG ( )
FOR I=1 TO 16
$ANOUT[I]=0 ;settare tutte le uscite su 0V
ENDFOR
LIN POS2
CIRC POSAUSILIA,POS3
ANOUT OFF COLLA
ANIN OFF CORREZIONE
PTP POS4
ENDIF
PTP HOME
END
144 di 214
6 Istruzioni di immissione/emissione (segue)
Mentre diversi ingressi digitali possono accedere al medesimo ingresso, i segnali strobe
NON devono descrivere la medesima uscita.
145 di 214
Programmazione esperto
APPUNTI:
146 di 214
7 Sottoprogrammi e funzioni
7 Sottoprogrammi e funzioni
Affinché per delle sezioni di programma uguali e ricorrenti possa essere ridotto il lavoro di
scrittura durante la programmazione come anche la lunghezza del programma, sono stati
introdotti dei sottoprogrammi e delle funzioni come costrutti di linguaggio.
Un effetto dei sottoprogrammi e delle funzioni non da sottovalutare in caso di programmi
piuttosto grandi è la riutilizzabilità di algoritmi una volta annotati in altri programmi e in
particolare l’impiego di sottoprogrammi per la strutturazione del programma. Questa
strutturazione può portare ad una struttura gerarchica in modo che dei singoli
sottoprogrammi richiamati da un programma superiore eseguono dei processi parziali in
modo completo e trasmettono i risultati.
7.1 Dichiarazione
Un sottoprogramma o una funzione è una parte di programma a se stante con intestazione
del programma, sezione delle dichiarazioni e sezione delle istruzioni che può essere
richiamata da una posizione qualsiasi nel programma principale. Dopo l’esecuzione del
sottoprogramma o della funzione avviene un ritorno al comando successivo al richiamo del
sottoprogramma (vedi Fig. 35).
Da un sottoprogramma o una funzione possono essere richiamati ulteriori sottoprogrammi
e/o funzioni. La profondità di annidamento ammessa è di 20. Superandola viene emesso il
messaggio di errore “TROPPI PROGRAMMI SELEZIONATI”. Il richiamo ricorsivo di
sottoprogrammi o funzioni non è permesso, cioè un sottoprogramma o una funzione non
possono richiamare sé stessi.
DEF Tutti i sottoprogrammi vengono dichiarati, in modo identico ai programmi principali, con
l’istruzione DEF più il nome e terminati con END, ad es.:
DEF UNTERPR()
¼
END
PROG.SRC
147 di 214
Programmazione esperto
Una funzione è una specie di sottoprogramma, il nome del programma è però allo stesso
tempo una variabile di un determinato tipo di dati. In questo modo il risultato della funzione
può essere trasferita ad una variabile tramite semplice assegnazione di valore. Durante la
DEFFCT dichiarazione di funzioni con la parola chiave speciale DEFFCT dev’essere indicato quindi
oltre al nome della funzione anche il tipo di dati della funzione. Una funzione viene terminata
con ENDFCT. Poiché una funzione deve trasmettere un valore, questo valore dev’essere
specificato prima dell’istruzione ENDFCT con l’istruzione RETURN. Esempi:
DEFFCT INT FUNZIONE()
¼
RETURN(X)
ENDFCT
Locale Per principio si distingue tra sottoprogrammi o funzioni locali e globali. In caso di
sottoprogrammi o funzioni locali, il programma principale e i sottoprogrammi/funzioni si
trovano nello stesso file SRC. Il file ha il nome del programma principale. Il programma
principale si trova nelle frasi sorgenti sempre al primo posto, mentre i sottoprogrammi e le
funzioni seguono in ordine e numero qualsiasi dopo il programma principale.
Globale Dei sottoprogrammi/funzioni locali possono essere richiamati soltanto all’interno del file SRC
nel quale sono stati creati. Se i richiami di sottoprogrammi/funzioni devono essere possibili
anche da altri programmi, essi devono essere globali, cioè devono essere memorizzati in un
file SRC proprio. Di conseguenza ogni programma è un sottoprogramma se viene richiamato
da un altro programma (programma principale, sottoprogramma o funzione).
G Nei sottoprogrammi oppure nelle funzioni locali sono note tutte le variabili dichiarate
nella lista dati del programma principale. Le variabili dichiarate nel programma
principale (file SCR) sono delle cosiddette “Variabili Runtime” e possono essere
utilizzate soltanto nel programma principale. Il tentativo di utilizzare queste variabili
nel sottoprogramma comporta un relativo messaggio di errore.
In sottoprogrammi o funzioni globali, le variabili dichiarate nel programma principale
non sono note.
G Nel programma principale non sono note le variabili dichiarate in sottoprogrammi o
funzioni.
G Un programma principale non può accedere a sottoprogrammi o funzioni locali di un
altro programma principale.
G Il nome di sottoprogrammi/funzioni locali può essere composto da un max. di 24
caratteri. In caso di sottoprogrammi/funzioni globali il nome dev’essere composto da
un max. di 20 caratteri (a causa delle estensioni).
GLOBAL Affinché il sottoprogramma sia conosciuto al programma principale, il sottoprogramma
dev’essere definito come GLOBAL, ad es.: Global Def PROG_2( ). Se non è definito
come GLOBAL, tutti i nomi e percorsi dei sottoprogrammi esterni e delle funzioni da richia-
mare come anche i parametri utilizzati devono essere resi riconoscibili al compiler tramite
la dichiarazione EXT oppure EXTFCT. Indicando la lista di parametri (vedi 7.2) è determinata
in modo univoco anche lo spazio di memoria necessario. Esempi:
EXT PROG_3()
EXTFCT FUNZIONE(REAL:IN)
Nel caso della stesura di un nuovo programma si lavorerà sempre con GLOBAL. La possibi-
lità di rendere noto un sottoprogramma ad un programma principale con EXT è qui riportato
perché nella versione precedente di KRL ciò era possibile esclusivamente con EXT, cioè
GLOBAL non esisteva.
148 di 214
7 Sottoprogrammi e funzioni (segue)
PROG.SRC PROG_1.SRC
In questa figura è riconoscibile che il programma Prog_1 che non è dichiarato come GLOBAL
dev’essere reso noto nel programma principale Prog con EXT. I programmi e le funzioni
Prog_2 e Prog_3 dichiarati come GLOBAL possono essere richiamati invece nel pro-
gramma principale senza EXT.
149 di 214
Programmazione esperto
150 di 214
7 Sottoprogrammi e funzioni (segue)
X Call by value
15 GLOBAL DEFFCT INT QUA-
15 DRATO(NUMERO:IN)
15 NUMERO INT NUMERO
225 NUMERO=NUMERO*NUMERO
225 RETURN(NUMERO)
DEF PROG() ENDFCT
INT X,Y,E
¼
X=5*3
Þ X=15
Y=QUADRATO(X) Y= 225
;Y=225 E=15
E=Y/X
¼
END 15
225
X,NUMERO Call by reference
15
Þ X=225
Y= 225
E=1
“Call by value” viene indicato nell’intestazione del sottoprogramma o della funzione tramite
la parola chiave IN dopo ogni variabile nella lista di parametri. “Call by reference” si ottiene
indicando OUT. OUT è anche l’impostazione default. Esempio:
DEF CALCOLA(X:OUT,Y:IN,Z:IN,B)
Se il sottoprogramma globale o la funzione globale da richiamare non sono dichiarati come
GLOBAL, allora durante la dichiarazione Extern nel programma principale dev’essere
indicato quale tipo di dati devono avere le relative variabili e quale metodo di passaggio
dev’essere utilizzato. OUT è l’impostazione default. Esempio:
EXTFCT REAL FUNZ1(REAL:IN,BOOL:OUT,REAL,CHAR:IN)
L’utilizzo di IN e OUT viene illustrato in base al seguente esempio. Il sottoprogramma e la
funzione sono globali.
151 di 214
Programmazione esperto
DEF PROG()
EXT CALCOLA (INT:OUT,INT:IN,INT:IN)
EXTFCT REAL FUNZ1(REAL:IN,REAL:OUT,REAL:OUT,REAL:IN,REAL:OUT)
INT A,B,C
REAL D,E,F,G,H,X
A = 1
B = 2
C = 3
D = 1
E = 2
F = 3
G = 4
H = 5
CALCOLA (A,B,C)
;A è ora 11
;B è ora 2
;C è ora 3
X = FUNZ1(H,D,E,F,G)
;D è ora 3
;E è ora 8
;F è ora 3
;G è ora 24
;H è ora 5
;X è ora 15
END
DEF CALCOLA(X1:OUT,X2:IN,X3:IN) ;SP globale
INT X1,X2,X3
X1=X1+10
X2=X2+10
X3=X3+10
END
DEFFCT REAL FUNZ1(X1:IN,X2:OUT,X3:OUT,X4:IN,X5:OUT);funzione
globale
REAL X1,X2,X3,X4,X5
X1 = X1*2
X2 = X2*3
X3 = X3*4
X4 = X4*5
X5 = X5*6
RETURN(X4)
ENDFCT
152 di 214
7 Sottoprogrammi e funzioni (segue)
DEF ARRAY ( )
EXT BAS (BAS_COMMAND:IN,REAL:IN)
INT X[5] ;dichiarazione campo
INT I
EXT DOPPEL (INT[]:OUT)
BAS (#INITMOV,0)
FOR I=1 TO 5
X[I]=I ;inizializzare array X[]
ENDFOR ;X[1]=1,X[2]=2,X[3]=3,X[4]=4,x[5]=5
Neppure durante il passaggio di campi multidimensionali vengono indicati degli indici, però
la dimensione del campo dev’essere specificata tramite virgole, esempi:
A[,] per campi bidimensionali
A[,,] per campi tridimensionali
APPUNTI:
153 di 214
Programmazione esperto
154 di 214
8 Trattamento interrupt
8 Trattamento interrupt
Impiegando dei robot in impianti di produzione complessi sussiste la necessità che il robot
possa reagire in modo mirato ed immediatamente a determinati eventi esterni o interni e che
possano essere effettuate delle azioni parallelamente al processo del robot. Ciò vuol dire che
occorre interrompere un programma robot in corso ed avviare un programma oppure una
funzione di interruzione. Dopo l’esecuzione del programma di interruzione, il programma
robot interrotto dev’essere ripreso se non dichiarato altrimenti.
Questa interruzione oppure l’avvio mirato di un programma viene reso possibile tramite
l’istruzione interrupt. Essa permette all’utente di reagire per ogni programma ad un evento
che non si presenta in modo temporalmente sincrono all’esecuzione del programma.
Degli interrupt possono essere provocati da
G dispositivi come sensori, unità periferiche, ecc.,
G messaggi errore,
G dall’utente, o tramite
G circuiti di sicurezza.
Ad esempio dopo aver premuto il pulsante di emergenza può essere richiamata una routine
di interrupt che resetta determinati segnali di uscita (programma predisposto
IR_STOPM.SRC).
APPUNTI:
155 di 214
Programmazione esperto
8.1 Dichiarazione
Prima di poter attivare un interrupt devono essere definite le possibile cause di interruzione
e la relativa reazione del sistema.
INTERRUPT Ciò avviene tramite la dichiarazione interrupt dove ad ogni interruzione occorre assegnare
una priorità, un evento e la routine di interrupt da richiamare. La sintassi completa è:
L’istruzione
INTERRUPT DECL 4 WHEN $IN[3]==TRUE DO UP1()
dichiara ad es. un interrupt della priorità 4 che richiama il sottoprogramma UP1() appena
l’ingresso 3 va su High.
La dichiarazione interrupt è un’istruzione. Non deve quindi trovarsi nella sezione delle
dichiarazioni!
Un interrupt viene riconosciuto soltanto a partire dal livello di programma sul quale è stato
dichiarato. Su livelli di programma superiori l’interrupt non viene riconosciuto nonostante l‘at-
tivazione. Ciò significa che un interrupt dichiarato in un sottoprogramma non è noto nel pro-
gramma principale (vedi Fig. 38).
GLOBAL Se l’interrupt viene invece dichiarato come GLOBAL, allora può essere dichiarato in un sotto-
programma qualsiasi e non perde la sua validità abbandonando questo livello (vedi Fig. 38).
GLOBAL INTERRUPT DECL 4 WHEN $IN[3]==TRUE DO UP1()
156 di 214
8 Trattamento interrupt (segue)
Programma principale
DEF MAIN()
⋮
INTERRUPT DECL 1 ¼
INTERRUPT DECL 3 ¼ Sottoprogramma
⋮
UP()
DEF UP()
⋮
⋮
END
GLOBAL INTERRUPT DECL 23
¼
INTERRUPT DECL 2 ¼
⋮
END
Validità interrupt 2
APPUNTI:
157 di 214
Programmazione esperto
Disattivare Nello stesso modo dell’attivazione viene effettuata anche la disattivazione di singoli o di tutti
interrupt gli interrupt:
INTERRUPT OFF 4
oppure
INTERRUPT OFF
Disabilitare / Tramite le parole chiavi ENABLE e DISABLE, degli interrupt attivati possono essere abilitati
Abilitare o disabilitati singolarmente o globalmente.
L’istruzione di disabilitazione permette la protezione di determinati parti del programma
dall’interruzione. Un interrupt disabilitato viene riconosciuto e memorizzato, ma non viene
eseguito. Soltanto dopo l’avvenuta abilitazione, gli interrupt presenti vengono eseguiti
nell’ordine della loro priorità.
DISABLE 4
oppure
DISABLE
Non avviene nessuna reazione ad un evento memorizzato se l’interrupt viene disattivato
prima dell’avvio. Se un interrupt si presenta più volte mentre è disabilitato, dopo la sua abilita-
zione viene eseguito soltanto una volta.
Priorità In caso di comparsa contemporanea di interrupt viene eseguito dapprima l’interrupt con la
priorità maggiore e in seguito gli interrupt di priorità inferiore. Il livello di priorità 1 ha la
massima priorità, il livello 128 la minore.
Al riconoscimento di un evento viene memorizzata la posizione attuale del robot e viene
richiamata la routine di interrupt. L’interrupt presentatosi come anche tutti gli interrupt di
priorità inferiore vengono disabilitati per l’intera durata dell’esecuzione. Al ritorno dal
programma interrupt viene annullata la disabilitazione implicita anche per l’interrupt attuale.
L’interrupt può quindi ora essere di nuovo eseguito alla ricomparsa (anche durante il
programma interrupt). Per evitare ciò, l’interrupt dev’essere disabilitato o disattivato in modo
esplicito prima del ritorno.
158 di 214
8 Trattamento interrupt (segue)
Un interrupt può essere interrotto dopo il primo comando nel programma interrupt da degli
interrupt di priorità maggiore. Nel primo comando il programmatore ha dunque la possibilità
di evitare ciò disabilitando/disattivando uno o tutti gli interrupt. Se un interrupt nel programma
interrupt si disattiva da solo, naturalmente l’esecuzione viene portata a termine.
Dopo la conclusione di un interrupt con priorità maggiore, il programma interrupt interrotto
viene proseguito dal punto dove è stato interrotto.
Casi speciali:
Un movimento del robot in corso non viene interrotto al richiamo di un programma interrupt.
Durante l’esecuzione del programma interrupt vengono ancora effettuati tutti i movimenti
preparati nel programma interrotto. Se il programma interrupt durante questo periodo è stato
eseguito completamente, il programma interrotto viene ripreso senza arresto dei movimenti,
cioè senza prolungamento del tempo di esecuzione. Se invece l’operazione interrupt non è
terminata, il robot si ferma fino a quando, dopo il ritorno, sarà preparato e continuato il
prossimo movimento.
Se nel programma interrupt stesso si trovano delle istruzioni di movimento, allora il
programma interrupt si ferma sulla prima istruzione di movimento fino a quando il processo
avanzato del programma principale sarà eseguito.
L’impiego di istruzioni interrupt e l’utilizzo delle variabili di sistema speciali vengono illustrati
in base al seguente esempio. Durante un movimento lineare vengono continuamente
sorvegliati due sensori (sugli ingressi 1 e 2). Appena un sensore rivela un pezzo (va su High),
viene richiamato un programma interrupt memorizzando la posizione del pezzo e settando
una relativa uscita. Il movimento del robot non viene interrotto. In seguito i pezzi riconosciuti
vengono nuovamente raggiunti.
159 di 214
Programmazione esperto
DEF INTERRUP ( )
PTP HOME
FOR I=1 TO 2
IF $OUT[I] THEN
LIN PEZZO[I] ; movimento su pezzo riconosciuto
$OUT[I]=FALSE
PTP HOME
ENDIF
ENDFOR
END
Oltre al pacchetto base (BAS.SRC) è presente come standard nel controllo anche un file
IR_STOPM(). Questo sottoprogramma esegue in caso di errore alcune istruzioni
fondamentali. Ne fa parte oltre ad alcune azioni specifiche della tecnologia anche il
riposizionamento del robot sulla traiettoria di movimento. Mentre il robot rimane sulla
traiettoria dopo che è stato premuto il pulsante di EMERGENZA, in caso di dispositivi di
protezione che riguardano direttamente l’operatore (come ad es. porta di protezione) da
parte dell’hardware viene provocato un arresto che non segue la traiettoria.
Si consiglia quindi di implementare nella sezione di inizializzazione dei Vostri programmi
sempre la seguente sequenza (si trova come standard nel fold BAS INI):
160 di 214
8 Trattamento interrupt (segue)
Nel file IR_STOPM() viene predisposto con l’istruzione PTP $POS_RET il riposizionamento
e quindi viene nuovamente creata la coincidenza frase.
Ulteriori variabili di sistema utili per il lavoro con degli interrupt sono riportate in Tab. 26. Le
posizioni si riferiscono sempre ai sistemi di coordinate attuali nel processo principale.
$POS_RET
$POS_INT
$AXIS_RET P2
$AXIS_INT
$POS_FOR
$AXIS_FOR
P1 P3
$POS_BACK $POS_ACT
$AXIS_BACK $AXIS_ACT
P2
$POS_INT $POS_RET
$AXIS_INT $AXIS_RET
$POS_FOR
$AXIS_FOR
$POS_BACK $POS_ACT
$AXIS_BACK $AXIS_ACT
P1 P3
161 di 214
Programmazione esperto
APPUNTI:
162 di 214
8 Trattamento interrupt (segue)
163 di 214
Programmazione esperto
DEF SEARCH ( )
;--------- Sezione delle dichiarazioni ---------
EXT BAS (BAS_COMMAND :IN,REAL :IN )
DECL AXIS HOME
;---------- Inizializzazione ---------
INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
INTERRUPT ON 3 ;gestione errori standard
BAS (#INITMOV,0 ) ;inizializzazione di velocità,
;accelerazioni, $BASE, $TOOL, etc.
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 30,A6 0}
INTERRUPT DECL 11 WHEN $IN[1] DO IR_PROG ( )
I[1]=0 ;settare contatore predefinito su 0
;------------- Sezione principale ------------
PTP HOME ;movimento SAK
INTERRUPT ON 11
MOVEP ( ) ;movimento lungo il percorso di ricerca
$ADVANCE=3 ;resettare processo avanzato
INTERRUPT OFF 11
GRIP ( )
PTP HOME
END
;-------- Sottoprogramma ------------
DEF MOVEP ( ) ;sottoprogramma per il movimento lungo il
;percorso di ricerca
PTP {X 1232,Y -263,Z 1000,A 0,B 67,C -90}
LIN {X 1232,Y 608,Z 1000,A 0,B 67,C -90}
$ADVANCE=0 ;arrestare processo avanzato
END ;
;------ Programma interrupt ---------
DEF IR_PROG ( ) ;memorizzare posizione dei pezzi
;INTERRUPT OFF 11
I[1]=I[1]+1
POSITION[I[1]]=$POS_INT ;memorizzazione della posizione
IF I[1]==4 THEN ;vengono riconosciuto 4 pezzi
BRAKE ;arresto del movimento
RESUME ;annullamento di IR_PROG & MOVE
ENDIF
;INTERRUPT ON 11
END
;-------- Sottoprogramma ------------l
164 di 214
8 Trattamento interrupt (segue)
Se sussiste il pericolo che un interrupt venga avviato erroneamente due volte a causa di
sensori sensibili, ciò può essere evitato disattivando l’interrupt nella prima riga del
programma interrupt. Però in questo caso anche un interrupt effettivamente presente non
può più essere riconosciuto durante l’elaborazione dell’interrupt. Prima del ritorno
l’interrupt dev’essere riattivato -- se deve rimanere attivo.
Se, come nell’esempio sopra, un movimento viene interrotto con RESUME, il movimento
successivo non dovrebbe essere un movimento CIRC, poiché il punto iniziale è ogni volta
un altro (Þ cerchi diversi).
Per la ricerca programmata nell’esempio 8.2, gli ingressi vengono interrogati nel ciclo di inter-
polazione (attualmente 12 ms). Esiste un’imprecisione massima di circa 12 ms moltiplicata
per la velocità di avanzamento.
“Misurazione Per evitare questa imprecisione occorre non collegare l’iniziatore agli ingressi utente ma
veloce” utilizzare degli ingressi speciali (4 disponibili) sul connettore periferico X11. Questi ingressi
possono essere attivati tramite le variabili di sistema $MEAS_PULSE[1]...MEAS_PULSE[4]
(tempo di risposta 125 ms).
All’attivazione dell’interrupt non dev’essere presente l’impulso di misurazione, altrimenti
appare un relativo messaggio di errore.
APPUNTI:
165 di 214
Programmazione esperto
APPUNTI:
166 di 214
9 Trigger -- Azioni di commutazione riferite alla traiettoria
167 di 214
Programmazione esperto
--
PUNTO3
1
Fig. 41 Ambiti di commutazione e valori di ritardo possibili se il punto di partenza e il
punto di destinazione sono dei punti con arresto preciso
168 di 214
9 Trigger -- Azioni di commutazione riferite alla traiettoria (segue)
0 0 -- 1a +
+
1 1a -- 1b ±
1a
-- 1
1b
PUNTO3 PUNTO4
+
PUNTO2
DISTANCE Ambito di DELAY
commutazione
0 0 -- 1a +
1 1a -- 1b ±
0
+
1a
-- 1
1b
PUNTO3 PUNTO4
+
169 di 214
Programmazione esperto
0
+
--
1
PUNTO3
APPUNTI:
170 di 214
9 Trigger -- Azioni di commutazione riferite alla traiettoria (segue)
171 di 214
Programmazione esperto
Sequenza di istruzioni:
⋮
LIN PUNTO2 C_DIS
TRIGGER WHEN PATH = Y DELAY= X DO $OUT[2]=TRUE
LIN PUNTO3 C_DIS
LIN PUNTO4 C_DIS
LIN PUNTO5
⋮
Poiché il punto di commutazione può essere spostato a partire dal punto di movimento prima
del quale è stato programmato e passando per tutti i punti di approssimazione successivi fino
al prossimo punto con arresto preciso è possibile uno spostamento del punto di commuta-
zione dall’inizio di approssimazione PUNTO2 fino al PUNTO5. Se in questa sequenza di istru-
zioni il PUNTO2 non fosse con approssimazione, il punto di commutazione potrebbe essere
spostato soltanto fino al punto con arresto preciso PUNTO2.
PUNTO2
--
DELAY X
-- PUNTO5
+
PATH Y<0
DELAY X
-- +
PUNTO3 PUNTO4
DELAY=0
PATH=0 PATH Y>0 +
PUNTO2
Punto di
commutazione
DELAY= -10
PUNTO5
PATH= -20
PUNTO4
PUNTO3
172 di 214
9 Trigger -- Azioni di commutazione riferite alla traiettoria (segue)
Casi speciali:
G Movimento SAK
Se viene effettuata una selezione di frase su un movimento lungo la traiettoria, esso
avviene come movimento SAK. Siccome per questo movimento SAK il punto di partenza
è uno qualsiasi, non è opportuno utilizzarlo come punto di partenza per un’indicazione di
distanza. Se prima di un tale movimento sono programmati dei comandi TRIGGER con
indicazione PATH e se avviene una selezione frase su questi comandi, allora questi
vengono eseguiti tutti sul punto di destinazione.
G Approssimazione non possibile
Se l’approssimazione non è possibile, in questo punto avviene un movimento con arresto
preciso. Questo viene però trattato in questo contesto come un movimento di
approssimazione. Delle azioni di commutazione presenti in seguito sulla traiettoria
rimangono memorizzate e vengono avviate al punto opportuno. Però di regola non saranno
più esatte poiché ora risulta un’altra traiettoria e quindi un’altra lunghezza di traiettoria.
Delle azioni di commutazione predisposte tramite un valore PATH negativo sulla prima
metà dell’area di approssimazione possono ora essere avviate al più presto sul punto di
approssimazione:
⋮
LIN P1 C_DIS
TRIGGER WHEN PATH=-120 DELAY=0 DO UP1() PRIO=-1
TRIGGER WHEN PATH=-70 DELAY=0 DO $OUT[2]=TRUE
LIN P2 C_DIS
⋮
Nell’esempio sopra la distanza tra il punto di partenza e quello di destinazione dev’essere
di 100 mm. Se è possibile effettuare un’approssimazione su P1, allora il richiamo di
sottoprogramma UP1() viene effettuato 20 mm prima del raggiungimento del punto di
traiettoria più vicino al punto di approssimazione P1. L’uscita 2 viene settata 30 mm dopo
questo punto di traiettoria. Se su P1 non è stato possibile effettuare l’approssimazione, la
traiettoria attraversa il punto P1 sul quale avviene anche il posizionamento. Il richiamo di
sottoprogramma UP1() viene ora effettuato immediatamente dopo l’abbandono di P1 e
l’uscita 2 viene settata a distanza di 30 mm da P1.
G Interruzione di un movimento
Se un movimento viene interrotto ad es. tramite una selezione frase o un reset e non
portato a termine, allora, come in caso dell’indicazione DISTANCE, le azioni di
commutazione non ancora effettuate non verranno più eseguite ma cancellate.
G Istruzione TRIGGER riferita al percorso per un movimento PTP
Se un’istruzione PATH-TRIGGER con indicazione del percorso viene programmata con un
movimento PTP, ciò viene rifiutato dall’interpreter durante l’esecuzione.
G Approssimazione PTP -- trajettoria
Se un’istruzione PATH-TRIGGER viene programmata con un movimento il cui punto di par-
tenza è un punto di approssimazione traiettoria -- PTP, l’azione di commutazione può avve-
nire al più presto alla fine di quest’area di approssimazione perché tutta l’area di approssi-
mazione verrà effettuata come PTP.
In caso di un’area di approssimazione traiettoria -- PTP, tutte le istruzioni TRIGGER ancora
attive e non ancora commutate vengono avviate sul punto iniziale dell’area di approssima-
zione. A partire da lì viene effettuato il movimento PTP e un’assegnazione della traiettoria
non è più possibile.
173 di 214
Programmazione esperto
Nel seguente esempio sono programmate sia delle azioni di commutazione con indicazione
DISTANCE, sia con indicazione PATH. I singoli punti di commutazione e la traiettoria di
movimento sono rappresentati in Fig. 46.
DEF TRIG ( )
;--------- Sezione delle dichiarazioni ---------
EXT BAS (BAS_COMMAND :IN,REAL :IN)
DECL AXIS HOME
INT I
SIGNAL COLLA $OUT[3]
;---------- Inizializzazione ---------
INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
INTERRUPT ON 3
BAS (#INITMOV,0 ) ;inizializzazione di velocità,
;accelerazioni, $BASE, $TOOL, ecc.
$APO.CDIS=35 ;stabilire distanza di approssimazione
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 30,A6 0}
POS0={POS: X 1564,Y -114,Z 713,A 128,B 85,C 22,S 6,T 50}
POS1={X 1383,Y -14,Z 713,A 128,B 85,C 22}
POS2={X 1383,Y 200,Z 713,A 128,B 85,C 22}
POS3={X 1527,Y 200,Z 713,A 128,B 85,C 22}
POS4={X 1527,Y 352,Z 713,A 128,B 85,C 22}
FOR I=1 TO 16
$OUT[I]=FALSE
ENDFOR
;------------- Sezione principale ------------
PTP HOME ;movimento SAK
PTP POS0
TRIGGER WHEN DISTANCE=0 DELAY=40 DO $OUT[1]=TRUE
TRIGGER WHEN PATH=-30 DELAY=0 DO UP1(2) PRIO=-1
LIN POS1
TRIGGER WHEN DISTANCE=1 DELAY=-50 DO COLLA=TRUE
TRIGGER WHEN PATH=180 DELAY 55 DO PULSE($OUT[4],TRUE,0.9)
TRIGGER WHEN PATH=0 DELAY=40 DO $OUT[6]=TRUE
LIN POS2 C_DIS
TRIGGER WHEN DISTANCE=0 DELAY=40 DO PULSE ($OUT[5],TRUE,1.4 )
TRIGGER WHEN PATH=-20 DELAY=-15 DO $OUT[8]
LIN POS3 C_DIS
TRIGGER WHEN DISTANCE=1 DELAY=-15 DO UP1 (7 ) PRIO= -1
LIN POS4
PTP HOME
END
DEF UP1 (NR :IN )
INT NR
IF $IN[1]==TRUE THEN
$OUT[NR]=TRUE
ENDIF
END
174 di 214
9 Trigger -- Azioni di commutazione riferite alla traiettoria (segue)
$OUT[2] 2’E
$OUT[5]
3’B
180
8
$OUT[1] $OUT[8]
20
POS 0 $OUT[4] $OUT[7]
3’
3’E
POS 3
POS 4
APPUNTI:
175 di 214
Programmazione esperto
176 di 214
10 Liste dati
10 Liste dati
10.1 Liste dati locali
Le liste dati servono per mettere a disposizione delle dichiarazioni specifiche per programma
o anche superiori. Ne fanno parte anche le informazioni su punti, ad es. le coordinate:
G Per ogni file SRC può essere creata una lista dati. Essa ha lo stesso nome del file SRC
e termina con l’estensione “.DAT”.
G La lista dati è locale nonostante sia un proprio file.
G In una lista dati devono trovarsi soltanto dichiarazioni ed inizializzazioni.
G E’ possibile dichiarare ed inizializzare in una riga.
G Delle variabili di sistema non vengono accettate.
La dichiarazione di liste dati avviene in modo analogo alla dichiarazione di file SRC: la
DEFDAT dichiarazione viene iniziata con la parola chiave DEFDAT ed il nome del programma e
terminata con la parola chiave ENDDAT.
L’inizializzazione di variabili avviene tramite un’assegnazione di valore alla relativa variabile
direttamente nella riga della dichiarazione.
PROG_1.SRC PROG_1.DAT
DEF PROG_1 ( )
¼ DEFDAT PROG_1
HALT OTTO è all’inizio “0” INT OTTO = 0
¼ ENDDAT
OTTO = 25
¼
HALT
END
DEFDAT PROG_1
Dopo l’esecuzione del INT OTTO = 25
programma OTTO = 25 ENDDAT
177 di 214
Programmazione esperto
PROG_1.SRC PROG_1.DAT
DEF PROG_1 ( )
¼ DEFDAT PROG_1 PUBLIC
HALT INT OTTO = 0
¼ ENDDAT
OTTO = 25
¼
END
PROG_2.SRC
DEF PROG_2 ( )
IMPORT INT OTTO_2 IS /R1/PROG_1 .. OTTO
¼
¼
END
178 di 214
10 Liste dati (segue)
Global G La variabile viene dichiarata come “Variabile globale” , ad es. DECL GLOBAL INT
OTTO = 0 ed è accessibile da ogni programma principale ignoto senza comando di
importazione.
Dopo aver dichiarata una variabile globale non è possibile modificare il nome della va-
riabile in un programma principale ignoto.
PROG_1.SRC PROG_1.DAT
DEF PROG_1 ( )
¼ DEFDAT PROG_1 PUBLIC
HALT DECL GLOBAL INT OTTO = 0
¼ ENDDAT
OTTO = 25
¼
END
PROG_2.SRC
DEF PROG_2 ( )
¼
¼
END
La dichiarazione di una variabile globale è ammessa solo in liste dati, se viene usata in
file SRC o SUB avviene un messaggio di errore.
Nella lista dei dati del sistema predefinita e globale $CONFIG.DAT possono essere definite
variabili, strutture, canali e segnali che sono validi per più tempo e che sono significativi per
molti programmi. Le variabili in $CONFIG.DAT non devono essere dichiarate con IMPORT,
poiché sono automaticamente note a tutti i programmi applicativi.
Ulteriori informazioni per quanto riguarda $CONFIG.DAT sono contenute nel capitolo
[Variabili e dichiarazioni], paragrafo [Variabili di sistema e file di sistema].
179 di 214
Programmazione esperto
180 di 214
11 Editor esterno
11 Editor esterno
Questo programma addizionale amplia il software del robot di funzioni che non sono
disponibili sull’interfaccia grafica.
Pulizia di un programma
Punti di traiettoria e parametri di movimento non calibrati vengono cancellati dalla lista
dati.
Manipolazioni di blocco
-- Selezionare e copiare, cancellare o tagliare un blocco.
-- Invertire la traiettoria del robot nell’area selezionata, cioè il punto programmato
precedentemente per primo del segmento di traiettoria selezionato viene raggiunto
per ultimo e il punto programmato per ultimo per primo.
-- Specchiare la traiettoria del robot nell’area selezionata nel piano XZ del sistema di
coordinate mondo.
-- Modificare i parametri di movimento (velocità, accelerazione, ecc.) nell’area selezio-
nata.
-- Spostamento di tutti i punti all’interno del segmento di traiettoria selezionato nel
sistema di coordinate pezzo (BASE), utensile (TOOL) o mondo (WORLD). Lo
spostamento o la rotazione possono essere effettuati tramite l’immissione manuale
di un offset nel relativo sistema di coordinate o tramite l’insegnamento di punti di
riferimento.
-- Spostamento specifico per asse di tutti i punti nell’area selezionata.
181 di 214
Programmazione esperto
Immediatamente dopo l’avvio dell’editor appare il dialogo “file selezionati”. Selezionare a que-
sto punto con i tasti cursore “¯” e “” il file da editare. Sono disponibili tutti i file SRC della directory
R1, tranne quei file standard che sono definiti in “HotEdit.ini” (percorso “C:\Krc\Util\”).
182 di 214
11 Editor esterno (segue)
Se l‘ “Editor esterno” viene avviato come programma offline, addizionalmente sono dispo-
nibili dei campi di selezione per l’indicazione del percorso.
File selezionati
Dopo aver evidenziato il file desiderato in questo modo, esso viene caricato nell’editor
azionando il relativo softkey o il tasto Enter. La durata di questa operazione di caricamento
dipende dalla dimensione del file.
Se appare il messaggio “File *.DAT non trovato”, è stato cercato di caricare un programma
nell’editor per il quale non esiste nessuna lista dati. Questa funzione non è disponibile nella
presente versione dell’editor. Resettare il messaggio premendo il tasto Enter. Aprire il
menù “File” e selezionare l’opzione “Aprire file” per accedere alla finestra “file selezionati”.
Se il file è stato caricato con successo, il programma viene visualizzato in modo simile che
nell’editor dell’interfaccia grafica.
183 di 214
Programmazione esperto
11.2 Comando
Gli elementi dell’interfaccia grafica normale si ritrovano anche su quella dell’editor esterno.
Anche qui sono disponibili tasti menù, tasti stato, softkey, una finestra di programmazione,
una finestra dei messaggi e una riga di stato.
I menù possono essere aperti alternativamente tenendo premuto il tasto “ALT” e azionando
in seguito la lettera sottolineata sul tasto menù. Per quanto riguarda la selezione di un co-
mando menù si procede in modo analogo.
Tasti stato
Tramite i tasti stato “Su” oppure “Giù” è possibile spostare il focus per righe in direzione
dell’inizio oppure della fine della lista. I tasti cursore “"” oppure “#”, nonché i tasti “PGUP”
oppure “PGDN” hanno la stessa funzione.
Focus
Focus
I tasti “PgUp” oppure “PgDn” consentono di sfogliare in avanti o indietro di una pagina. A
questo scopo occorre disattivare la funzione “NUM” oppure utilizzare una tastiera esterna.
Azionando il tasto stato “KRL”, il programma viene visualizzato come nel modo esperto con
le impostazioni “Aprire tutti i folds” e “Limited Visibility off”.
Nel campo “FOLD” viene visualizzato il comando evidenziato col focus (file ”SRC”). Nel
campo “Dati” vengono visualizzati i dati appartenenti al comando evidenziato (file ”DAT”).
184 di 214
11 Editor esterno (segue)
Premendo il tasto stato “Lente --” si ritorna alla rappresentazione dell’intero programma.
Barra softkey
Questo softkey corrisponde al comando menù “Chiudi” che chiude il programma attuale, ma
lascia attivato l’editor.
Barra stato
Nella barra stato vengono visualizzate delle informazioni addizionali.
185 di 214
Programmazione esperto
APPUNTI:
186 di 214
11 Editor esterno (segue)
11.3.1 Apri
All’azionamento di questa opzione appare la finestra “file selezionati” come già descritto nel
paragrafo precedente 11.1.
11.3.2 Salva
Se il contenuto del file caricato nell’editor è stato modificato con le funzioni proposte, prima
della memorizzazione della nuova versione di questo file o prima di terminare la sessione con
l’editor viene posta la domanda se le modifiche devono essere salvate.
Sí No
Per salvare le modifiche apportate è sufficiente azionare il tasto Enter per confermare la
preselezione.
I contenuti della versione già esistente del file editato vengono in questo caso, almeno in
parte, persi in modo irrevocabile.
Per annullare l’operazione occorre dapprima premere uno dei tasti cursore per spostare il
focus sul pulsante “No”. In seguito è possibile confermare questa selezione premendo il tasto
Enter. La versione già esistente del file editato rimane in questo caso invariata.
11.3.3 Chiudi
Se il file presente nell’editor è stato modificato dal caricamento, è possibile in un primo mo-
mento salvare le modifiche (come descritto nel paragrafo 11.3.2).
Dopo che il file presente nell’editor è stato chiuso, è possibile caricare un altro file nell’editor
tramite la voce di menù “File” e l’opzione proposta “Apri” (vedi anche paragrafo 11.3.1).
187 di 214
Programmazione esperto
11.3.4 Esci
Se il file presente nell’editor è stato modificato dal caricamento, è possibile in un primo mo-
mento salvare le modifiche (come descritto nel paragrafo 11.3.2).
La finestra dell’editor viene chiusa e ritorna l’interfaccia grafica del software robot.
APPUNTI:
188 di 214
11 Editor esterno (segue)
Per evidenziare un’area, tener premuto il tasto “SHIFT” ed azionare uno dei due tasti stato
“Su” o “Giù” oppure il relativo tasto cursore.
Area evidenziata
(selezione blocco)
ESC
La selezione di un blocco può essere nuovamente disattivata tramite il tasto “ESC”.
Cancella il segmento di traiettoria selezionato dal programma e lo tiene pronto nella memoria
intermedia per l’inserimento.
Copia il segmento di traiettoria selezionato nella memoria intermedia e lo tiene pronto per
l’inserimento.
189 di 214
Programmazione esperto
11.4.4 Cancella
Il segmento di traiettoria selezionato viene cancellato senza essere salvato nella memoria
intermedia.
APPUNTI:
190 di 214
11 Editor esterno (segue)
Spostare tramite i tasti cursore “” oppure “¯” il segno di inserimento da un campo di immis-
sione all’altro.
Tramite questo softkey è possibile salvare i valori impostati.
11.5.1 Mirror
Piano mirroring
X
Dopo la selezione dell’opzione viene aperta una finestra di dialogo dove occorre indicare il
nome del file nel quale verrà salvato il programma caricato con i punti di traiettoria specchiati.
Premendo il tasto Enter, il processo viene avviato e il programma viene salvato col nome
indicato. Questo programma può essere successivamente caricato nell’editor.
191 di 214
Programmazione esperto
Tramite questa funzione è possibile spostare la posizione dei punti di traiettoria programmati nel:
Dopo la selezione di una delle possibili opzioni viene visualizzata una finestra per l’immis-
sione dei valori desiderati. In base al sistema di coordinate occorre inserire o lo spostamento
e l’orientamento oppure gli angoli degli assi.
BASE
Con ‘Shift punti in cartesiano base‘ si intende che un punto qualsiasi nello spazio viene spo-
stato in modo relativo nel sistema di coordinate di origine (WORLD) che si trova nella base
del robot. Il seguente esempio illustra lo shift punti in cartesiano BASE:
Valori di immissione =
valori relativi
--Y [mm]; --X [mm]; A+[°]
Z+
A+
Pnuovo
Y+
X+
Pvecchio --Xr Xvecchio
Yvecchio --Yr
ESC Il vettore di spostamento dev’essere inserito in modo numerico nel relativo campo di immis-
sione. Tramite i tasti cursore “¯ “ e “ “ è possibile spostarsi da un campo di immissione all’al-
tro. Lo spostamento viene avviato con “Istruz. Ok” e può essere annullato in qualsiasi mo-
mento tramite “Abbandona” oppure “Esc”.
Inserire i valori per lo spostamento (X, Y, Z) in [mm] e per l’orientamento (A, B, C) in [gradi]
nei campi di immissione.
192 di 214
11 Editor esterno (segue)
TCP
Con ‘Shift punti in cartesiano TCP‘ si intende che un punto qualsiasi nello spazio viene spo-
stato in modo relativo con riferimento al sistema di coordinate TOOL. Il seguente esempio
illustra lo shift punti in cartesiano TCP:
Pnuovo
Zvecchio
--Zr
--Yr Y+
C°r
C°
Pvecchio X+
Yvecchio
Z+ Valori di immissione =
valori relativi
In questo esempio avrebbe luogo uno
--Y [mm]; --Z [mm]; C+[°]
spostamento relativo negativo in Y, Z
e una rotazione relativa positiva in-
torno a X [°].
Uno spostamento relativo in X non
viene preso in considerazione!
Il vettore di spostamento dev’essere inserito in modo numerico nel relativo campo di immis-
sione. Tramite i tasti cursore “¯ “ e “ “ è possibile spostarsi da un campo di immissione all’al-
tro. Lo spostamento viene avviato con “Istruz. Ok” e può essere annullato in qualsiasi mo-
mento tramite “Abbandona” oppure “Esc”.
Inserire i valori per lo spostamento (X, Y, Z) in [mm] e per l’orientamento (A, B, C) in [gradi]
nei campi di immissione.
193 di 214
Programmazione esperto
WORLD
Con ‘Shift punti WORLD‘ si intende che il sistema di coordinate di origine che si trova come
standard nella base del robot viene spostato in modo relativo. Il seguente esempio illustra lo
shift punti WORLD:
Valori di immissione =
valori relativi
+Y [mm]; +X [mm]; A--[°]
Z+
Z+nuovo
Y+
Pnuovo +Xr
X+
X+nuovo
+Yr A--
Y+nuovo
Inserire i valori per lo spostamento (X, Y, Z) in [mm] e per l’orientamento (A, B, C) in [gradi]
nei campi di immissione.
194 di 214
11 Editor esterno (segue)
Assi
Con ‘Shift punti assi‘ si intende che un punto qualsiasi nello spazio viene raggiunto tramite un
movimento relativo degli assi. In base alla figura qui rappresentata dev’essere effettuato uno
spostamento relativo dell’asse 5.
Pvecchio
a A5 a A5 vecchio
nuovo
Pnuovo
Valori di immissione =
In questo esempio avrebbe luogo una valori relativi
rotazione relativa positiva dell‘A5 [°]. +A5 [°]
Una rotazione relativa degli altri assi
non viene presa in considerazione!
La rotazione dell’asse dev’essere immessa in gradi o incrementi per il relativo asse. Tramite
i tasti cursore “¯ “ e “ “ è possibile spostarsi da un campo di immissione all’altro. Lo sposta-
mento viene avviato con “Istruz. Ok” e può essere annullato in qualsiasi momento tramite
“Abbandona” oppure “Esc”.
Inserire i valori per gli angoli degli assi (A1 ... A6) in [gradi].
195 di 214
Programmazione esperto
Spostare tramite i tasti cursore “®” oppure “¬” il segno di inserimento da un campo di
immissione all’altro.
Campi di lista vengono aperti tramite la combinazione di tasti “ALT”+“¯” oppure “ALT”+“”.
196 di 214
11 Editor esterno (segue)
Vengono visualizzati tutti i programmi con i relativi punti che sono interessati dalla
regolazione Tool oppure Base.
Per poter spostare il segno di inserimento da un campo all’altro devono essere attivate le
funzioni di controllo cursore del blocco numerico. Azionare a questo scopo brevemente il
tasto “NUM”. In seguito è possibile spostare il cursore di immissione tramite il tasto “SHIFT”
da un campo all’altro.
Campi di lista vengono aperti tramite la combinazione di tasti “ALT”+“¯”, oppure “ALT”+“”.
APPUNTI:
197 di 214
Programmazione esperto
Spostare tramite i tasti cursore “” oppure “¯” il segno di inserimento da un campo di
immissione all’altro.
Dopo aver effettuate tutte le immissioni (numeri interi) necessarie per lo spostamento, pre-
mere il softkey “Ok”.
Per terminare l’operazione senza effettuare uno spostamento di programma, premere il soft-
key “Esci”.
In seguito la finestra di dialogo viene evidenziata in grigio e vengono visualizzati due softkey
addizionali.
198 di 214
11 Editor esterno (segue)
Ora è possibile l’assegnazione dei valori immessi premendo il relativo softkey. Le modifiche
dei dati non vengono ancora salvate a questo punto e possono quindi essere annullate.
Se avete cambiato idea, l’assegnazione può essere annullata. A questo scopo utilizzare il
softkey indicato a lato. Questo è disponibile soltanto dopo aver assegnato i valori. Questa
funzione è particolarmente utile se un programma si trova in esecuzione e l’effetto dello spo-
stamento puo essere osservato immediatamente.
Se lo spostamento soddisfa le richieste, la modifica delle coordinate di punto può essere sal-
vata nel file “DAT”.
Tramite il softkey “Abbandona” è possibile terminare l’immissione in qualsiasi momento
senza salvare le modifiche.
Se uno dei valori inseriti si trova fuori tolleranza, nella finestra di spostamento programma
appare un avvertimento oppure un messaggio di errore che il valore inserito supera le tolle-
ranze.
199 di 214
Programmazione esperto
11.6.2 Limits
Selezionando la voce di menù “Limits” appare la finestra nella quale sono contenute e pos-
sono essere modificate le tolleranze di spostamento.
Per apportare una modifica portare il cursore tramite i tasti freccia “” oppure “¯” sul punto
desiderato ed inserire la nuova tolleranza tramite il blocco numerico.
APPUNTI:
200 di 214
11 Editor esterno (segue)
Ad ogni correzione di punti vengono cercati nella lista dati locale (*.DAT) i punti necessari. Se
uno dei punti necessari non viene trovato, appare un messaggio di errore.
La ricerca del punto che definisce la direzione della traiettoria inizia sempre dalla posizione
nella quale si trova il punto da correggere in avanti. Ne fa eccezione il punto finale di un profilo
di saldatura o applicazione di colla, poiché in questo caso la ricerca viene effettuata nei nu-
meri di frase inferiori.
Un cambio di base tra due frasi di movimento viene ignorato.
L‘opzione “Config Point In TTS” viene proposta soltanto se è selezionata una frase di movi-
mento per saldatura o applicazione di colla.
201 di 214
Programmazione esperto
Utilizzare i tasti cursore “” oppure “¯” per spostare il focus sulla posizione desiderata. Inse-
rire i nuovi valori tramite i tasti del blocco numerico.
Asse X
L’asse X nel sistema di coordinate TTS corrisponde ad un vettore unitario lungo la tangente di
traiettoria.
+Z
+Y P2
+X
+Z
+Y
+X
+Z
+Y
+Z
+Y +X
+X
P2
L’asse X del sistema di coordinate utensile non dev’essere parallelo alla tangente di traiet-
toria, altrimenti il sistema di coordinate di correzione non può essere formato. In questo
caso viene emesso un relativo messaggio di errore.
Asse Y
Dal vettore unitario lungo la tangente di traiettoria (+X) e l’asse X del sistema di coordinate
utensile (+XTool) si crea un piano. L’asse Y è perpendicolare a questo piano.
202 di 214
11 Editor esterno (segue)
+Z
+Y
+X
+XTool P2
L’asse Y è perpendicolare al
piano che attraversa “+X” e
“+XTool”
P1
Asse Z
Dal vettore unitario lungo la tangente di traiettoria (+X) e l’asse Y (+Y) si crea un piano. L’asse
Z è perpendicolare a questo piano.
+Z
+Y
+X
P2
L’asse Z è perpendicolare al
piano che attraversa “+X” e “+Y”
P1
Dopo aver inserito le modifiche nei campi di immissione, premere il softkey “OK”.
Ora è possibile l’assegnazione dei valori immessi premendo il relativo softkey. Le modifiche
dei dati non vengono ancora salvate a questo punto e possono quindi essere annullate.
Se avete cambiato idea, l’assegnazione può essere annullata. A questo scopo utilizzare il
softkey indicato a lato. Questo è disponibile soltanto dopo aver assegnato i valori.
Premere nuovamente il softkey “OK” e confermare la successiva domanda di sicurezza per
salvare le modifiche.
203 di 214
Programmazione esperto
Sí No
Selezionare con questo softkey il punto di destinazione dopo aver inserito le modifiche nei
campi di immissione.
Ora è possibile l’assegnazione dei valori immessi premendo il relativo softkey. Le modifiche
dei dati non vengono ancora salvate a questo punto e possono quindi essere annullate.
Se avete cambiato idea, l’assegnazione può essere annullata. A questo scopo utilizzare il
softkey indicato a lato. Questo è disponibile soltanto dopo aver assegnato i valori.
Se lo spostamento soddisfa le esigenze, è possibile salvare la modifica delle coordinate di
punto confermando la domanda di sicurezza.
Sí No
204 di 214
11 Editor esterno (segue)
11.6.3.2 Limits--TTS
Qui è possibile stabilire i valori limite della correzione TTS. Questi valori limite vengono sor-
vegliati automaticamente durante la correzione di punti.
Per la correzione TTS non sono opportuni dei valori limite maggiori di 5mm.
Utilizzare i tasti cursore “” oppure “¯” per spostare il focus sulla posizione desiderata. Inse-
rire la nuova tolleranza tramite i tasti del blocco numerico.
205 di 214
Programmazione esperto
2 Punti
6 Punti
Questo menù è disponibile soltanto finché non è caricato nessun programma nell’editor
esterno.
A differenza della funzione “Mirroring” (paragrafo 11.5.1) tramite la quale è possibile rispec-
chiare dei punti di traiettoria evidenziati di frasi di movimento selezionate, la funzione “File--
Mirror” consente il mirroring di programmi di movimento completi.
Dopo l’avvio della funzione indicare dapprima il file di origine da rispecchiare.
Selezionare tramite i tasti cursore “"” oppure “#” un file per il mirroring.
Dopo aver evidenziato il file desiderato, azionare il softkey “Freccia destra”.
206 di 214
11 Editor esterno (segue)
207 di 214
Programmazione esperto
Ora esiste la possibilità di inserire un commento che sarà visualizzato nel navigator.
Tramite questo softkey si ritorna all’ultima pagina sulla quale è possibile inserire il nome del
file (rispecchiato) da creare.
Dopo aver inserito il commento desiderato, azionare questo softkey.
Successivamente viene creato il relativo programma. Ora è possibile sfogliare all’indietro tra-
mite il softkey “Freccia sinistra”, ad esempio per creare un altro programma o per modificare
il commento.
Inoltre esiste la possibilità di uscire dalla funzione “File--Mirror”. Utilizzare a questo scopo il
softkey “Chiudere”.
208 di 214
11 Editor esterno (segue)
Shift 2 punti
Per la funzione spostamento 2 punti dev’essere insegnato un file di riferimento (nome qual-
siasi; .src, .dat). In questo file di riferimento vengono depositati due punti. Questi punti defini-
scono il vettore di spostamento (X, Y, C) del quale i punti selezionati vengono spostati.
Shift 6 punti
La funzione spostamento 6 punti applica lo stesso principio. Nel relativo file di riferimento
devono essere insegnati sei punti in totale. I primi tre punti definiscono la base sorgente, gli
ultimi tre punti una base di destinazione. Per la sorgente e la destinazione occorre rilevare
i punti identici. Tramite questi valori vengono calcolate le basi. Lo spostamento e l’orienta-
mento tra la base sorgente e quella di destinazione determinano il valore del quale dev’es-
sere effettuato lo shift dei punti evidenziati.
Il vettore dev’essere già stato memorizzato in un file prima del richiamo della funzione.
Inoltre devono essere selezionate le frasi di movimento da spostare.
209 di 214
Programmazione esperto
Selezionare dapprima il file di riferimento tramite i tasti cursore ed azionare in seguito il soft-
key “Freccia destra”.
Tramite questo softkey si ritorna alla pagina precedente.
Utilizzare di nuovo i tasti cursore per evidenziare il file da spostare. Premere in seguito nuo-
vamente il softkey “Freccia destra”.
210 di 214
11 Editor esterno (segue)
211 di 214
Programmazione esperto
212 di 214
11 Editor esterno (segue)
Tramite questa funzione è possibile adattare i finecorsa software dei singoli assi ai
programmi di movimento.
A questo scopo avviare la funzione “Settaggio limiti software” e ritornare successivamente
tramite il tasto di selezione finestra all’interfaccia grafica del software robot. Lì possono es-
sere avviati i programmi di movimento i cui valori degli assi vengono monitorati in back-
ground. Dopo aver eseguito tutti i programmi rilevanti, richiamare la funzione. I valori così
rilevati possono essere settati come finecorsa software.
I valori minimi e massimi che si sono presentati, nonché le posizioni attuali degli assi A1 ... A6
vengono inseriti nei relativi campi.
Tramite un checkbox è possibile contrassegnare gli assi per i quali devono essere settati i
finecorsa. Per la selezione degli assi desiderati utilizzare i tasti cursore. La barra spaziatrice
consente l’inserimento oppure il disinserimento del relativo asse. Un segno di spunta signi-
fica che per quell’ asse è possibile settare il finecorsa software.
Tramite “Reset”, i finecorsa software possono essere resettati sui loro valori originari.
Premendo il softkey “Set” vengono settati i nuovi finecorsa software degli assi selezionati.
Questa operazione può essere annullata in qualsiasi momento, anche in un secondo tempo,
premendo il softkey “Reset”.
213 di 214
Programmazione esperto
11.8.1 Versione
Nella finestra dei messaggi viene visualizzato il numero di versione dell’editor esterno.
Numero di versione
APPUNTI:
214 di 214
Index
Simboli $VEL.CP, 78
.ERR, 13 $VEL.ORI1, 78
!, 108 $VEL.ORI2, 78
!--carattere, 104 $VEL_AXIS, 66
?, 109 $WORLD, 63, 70
:, 110
# -- carattere, 41
A
#BASE, 65, 80
#CONSTANT, 79 A10.DAT, 8
#INITMOV, 79, 80 A10.SRC, 8
#PATH, 80 A10_INI.DAT, 8
#TCP, 65 A10_INI.SRC, 8
#VAR, 79 A20.DAT, 8
$ -- carattere, 55 A20.SRC, 8
$ACC.CP, 78 A50.DAT, 8
$ACC.ORI1, 78 A50.SRC, 8
$ACC.ORI2, 78 ABS(X), 52
$ACC_AXIS, 66 Accelerazione, 78
$ADVANCE, 87 Accelerazioni degli assi, 68
$ALARM_STOP, 55, 56 ACOS(x), 52
$APO.CDIS, 94, 97 Aggregato, 38
$APO.CORI, 94, 97 Ambiguità, 74
$APO.CPTP, 91 Angolo circolare, 85
$APO.CVEL, 94, 97 ANIN, 143
$APO_DIS_PTP, 91 ANIN OFF, 143
$BASE, 63, 70 ANIN ON, 143
$CIRC_TYPE, 80, 83 ANIN/ANOUT, 140
$CONFIG.DAT, 8, 57 ANOUT OFF, 140
$CUSTOM.DAT, 56
ANOUT ON, 140
$CYCFLAG, 55
Apprendimento di punti, 104
$FLAG, 54
Approssimazione, 90
$IBUS_ON, 56
Approssimazione CIRC--CIRC, 97
$IPO_MODE, 65
Approssimazione CIRC--LIN, 97
$MACHINE.DAT, 8, 56
Approssimazione LIN--CIRC, 99
$NULLFRAME, 70
Approssimazione LIN--LIN, 94
$NUM_AX, 56
Approssimazione PTP--PTP, 91
$ORI_TYPE, 79, 83
Approssimazione PTP--traiettoria, 100
$OUT_C, 135
$POS_ACT, 64, 65 Approssimazione traiettoria--PTP, 100, 101
$PRO_MODE, 23 Aprire tutti i FOLDs, 20
$PSER, 56 Arcocoseno, 52
$ROBCOR.DAT, 8, 57 Arcoseno, 52
$ROBROOT, 63, 70 Arcotangente, 52
$SET_IO_SIZE, 135 ARCSPS.SUB, 8
$TIMER, 54 Arresto automatico del processo avanzato, 88
$TIMER_FLAG, 54 Arresto del processo avanzato, 88, 129
$TIMER_STOP, 54 Assegnazione valore, 29
$TOOL, 63, 70 ATAN2(Y,X), 52
Index -- i
Index
Index -- ii
Index
Index -- iii
Index
N
R
Nascondere parti di programma, 20
Radice, 52
NEW_SERV.SRC, 8
REAL, 33, 34
Nomi, 29
Regolazione BASE, 197
Regolazione TCP, 197
O REPEAT, 123
Oggetti di dati, 31 RESUME, 163
Operando, 42
Operatore, 42 S
Operatore geometrico, 43 S e T, 73
Operatore geometrico “:”, 110 SAK, 73
Operatori aritmetici, 42 Salto condizionato, 118
Operatori bit, 49 Seno, coseno, tangente, 52
Operatori di confronto, 47 Sezione delle dichiarazioni, 10
Operatori logici, 48 Sezione delle istruzioni, 10
Operazione AND, 49 SIGNAL, 130
Operazione di anticoincidenza, 49 SIN(X), 52
Singolarità di cinematica, 73
P Sistema binario, 33
Sistema decimale, 33
P00.DAT, 8
Sistema di coordinate, 59, 70
P00.SRC, 8
Sistema di coordinate BASE, 64
Parametri di movimento, 105
Sistema di coordinate di correzione, 201
Passaggio di parametri, 150
Sistema di coordinate mondo, 63
PERCEPT.SRC, 9 Sistema di coordinate robot, 63
POS, 40, 109 Sistema di coordinate specifico per asse, 59
Posizione zero meccanica, 68 Sistema di coordinate utensile, 63
Priorità, 51, 158, 167, 171 Sistema esadecimale, 33
Priorità di operatori, 51 Sostituisci, 17
Processo avanzato, 87 Sottoprogrammi, 10, 147
Processo avanzato del calcolatore, 87 Sovrapporre bit, 50
Processo principale, 87 SPS.SUB, 8
Profilo di approssimazione, 90 SQRT(X), 52
Profilo di traslazione superiore, 67 Status, 70, 73
Programmazione del movimento, 59 Stesura di un nuovo programma, 12
PROKOR, 15 Stesura ed editazione di programmi, 12
PSTEP, 23 STRUC, 38
PTP, 66, 69, 111 Struttura del file, 10
PTP !, 104 Struttura e stesura di programmi, 7
Index -- iv
Index
T
Taglia, 16 W
TAN(X), 52 WAIT, 126
TCP, 65 WEAV_DEF.SRC, 9
Tieniposto, 108
WHILE, 122
Timer, 54
Tipi di dati geometrici, 40
Tipi di dati semplici, 33 Z
Tipi di enumerazione, 40 Zona base, 74
Tipo di dati, 31
Zona sopratesta, 74
Tool Center Point, 66
Touch Up, 109
Trasformazione di coordinate, 60
Trasformazione di coordinate cartesiana, 60
Trasformazione in avanti, 60
Trasformazione indietro, 60
Traslazioni, 62
Trattamento interrupt, 155
Treppiedi accompagnante la traiettoria, 201
Tridimensionale, 37
Trigger, 167
Triggerato al fronte di salita, 158
TTS, 201
Turn, 70, 73
U
Unire, 13
UNTIL, 123
Uscite a impulso, 138
Uscite analogiche, 140
USER_GRP.DAT, 9
USER_GRP.SRC, 9
USERSPOT.SRC, 9
Utensile fisso, 65
V
VAR, 108
Variabile + riferito alla traiettoria, 80
Variabile + riferito allo spazio, 83
Variabile globale, 179
Variabili di sistema, 54
Variabili e dichiarazioni, 29
Index -- v