Sei sulla pagina 1di 284

Comau Robotics

Manuale di istruzioni

Unità di controllo

PROGRAMMAZIONE DEL MOVIMENTO

Software di Sistema Rel. 1.17.011

Movimentazione del robot in programmazione, controllo del movimento, prestazioni opzionali


(movimento sincrono, cooperativo, sensor tracking, conveyor tracking, weaving, path governor,
smartmove, compensazione cinematica, collision detection), movimento attraverso singolarità,
posizionatori e portali, programma TO_SET, Regioni d’Interferenza.

CR00757608_it-08/2012.11
Le informazioni contenute in questo manuale sono di proprietà di COMAU S.p.A.

E’ vietata la riproduzione, anche parziale, senza preventiva autorizzazione scritta di COMAU S.p.A.

COMAU si riserva il diritto di modificare, senza preavviso, le caratteristiche del prodotto presentato in questo
manuale.

Copyright © 2008 by COMAU - Pubblicato in data 11/2012


Sommario

SOMMARIO

PREFAZIONE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
Simbologia adottata nel manuale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Documentazione di riferimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Modification History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1. PRESCRIZIONI DI SICUREZZA GENERALI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...14


Responsabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Prescrizioni di sicurezza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Scopo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Definizioni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Applicabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Modalità operative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Prestazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2. MODALITA’ OPERATIVE
E STATI DEL SISTEMA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...24
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Modalità operative del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Stati del sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Stato HOLD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Stato AUTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Stato PROGR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Stato ALARM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Funzione Stand-by. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3. TURN-SET E CALIBRAZIONE -
CONCETTI DI BASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...31
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Terminologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Turn-set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Turn-set su posizione di calibrazione di sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Turn-set su posizione di calibrazione utente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Turn-set per assi robot con corsa multigiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Calibrazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Calibrazione di sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Calibrazione utente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

lb-rc-c5e-motion_itTOC.fm
1
Sommario

4. MOVIMENTAZIONE DEL ROBOT


NELLO STATO PROGRAMMAZIONE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..36
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Terne di riferimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Terne di riferimento del sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Movimento manuale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Movimento manuale in modalità WRIST_JNT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Movimento manuale di un sistema singolo arm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Movimento manuale di assi ausiliari, slitte e colonne rotanti . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Movimento manuale con configurazione multiarm del Controllore . . . . . . . . . . . . . . . . . . . . . . 40
Istruzione di movimento in stato di programmazione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

5. CONTROLLO DEL MOVIMENTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..44


Generalita’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Terne di Riferimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Terne di Riferimento del Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Definizione del Sistema di Riferimento di Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Definizione dell’attrezzatura montata sulla flangia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Calcolo degli spiazzamenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
Calcolo degli angoli di rotazione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
PRIMO METODO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
SECONDO METODO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
Definizione del Sistema di Riferimento Utente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
Traiettoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Interpolazione Giunti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Interpolazione Lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Interpolazione Circolare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Evoluzione dell’orientamento durante movimenti Lineari o Circolari . . . . . . . . . . . . . . . . . . . 52
Flag di Attitudine durante movimentI Lineari e Circolari. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Flag di Turn e strada minima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Verifica della posizione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Prestazione di On Trajectory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Prestazione di On Position (ON POS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Esempio di On Pos e On Trajectory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
Controllo della Velocità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Override sulla velocità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Controllo della Velocità Cartesiana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Opzioni del controllo della velocità cartesiana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
Variazione Run-Time della velocità lineare (Run-Time Speed Override). . . . . . . . . . . . . . .61
Controllo della Velocità Giunti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Controllo della velocità in movimento manuale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Accelerazione e Decelerazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Override sull’accelerazione e decelerazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Interpolazione giunti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Interpolazione cartesiana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

lb-rc-c5e-motion_itTOC.fm
2
Sommario

Movimenti manuali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Entrata in soglia (precisione di posizionamento) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Arresto COARSE e FINE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Arresto JNT_COARSE e JNT_FINE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Arresto NOSETTLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Ripristino della traiettoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Metodo di ripristino. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Condizione di movimento in attesa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
Spazio di ripristino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
Ambiente di esecuzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
Ripristino del Processo (Process Resume) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Ripristino del Processo (Process Resume) Automatico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Movimento Continuo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Traiettoria durante il movimento continuo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Modalità di movimento continuo (FLY). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
FLY_NORM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
FLY_CART (Controller Aided Resolved Trajectory) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
Controllo dello stress dinamico sulla macchina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
Mantenimento della velocità costante. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
Controllo della traiettoria durante il FLY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
Debug dei movimenti in FLY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
Variabili utilizzate con il movimento FLY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
Sistema con Tool Remoto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Movimento integrato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Asse Integrato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Movimento manuale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
Sistemi di riferimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
Limitazioni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
Funzionalità di Pallettizzazione (prestazione opzionale) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Attivazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Disattivazione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Esempio di programma di pallettizzazione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

6. MOVIMENTO SINCRONO
(PRESTAZIONE OPZIONALE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...87
Sincronizzazione con gli assi ausiliari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Arm sincronizzati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Limitazioni nel movimento dei due Arm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Spostamento manuale di arm sincronizzati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Apprendimento e modifica dei punti (REC/MOD) con arm sincronizzati . . . . . . . . . . . . . . . . . . 89
Perdita della sincronizzazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Variazione Run-Time della velocità lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

lb-rc-c5e-motion_itTOC.fm
3
Sommario

7. MOVIMENTO COOPERATIVO
(PRESTAZIONE OPZIONALE). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..92
Movimento cooperativo con assi ausiliari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Arm cooperativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Movimento multi-cooperativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Movimento manuale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

8. SENSOR TRACKING
(PRESTAZIONE OPZIONALE). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..97
Principio di funzionamento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Configurazione su diversi arm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Interfaccia del sensore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Sensori Integrati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Sensori esterni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Sistema di riferimento del sensore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Sensore solidale con l’attrezzo (TOOL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Sensore solidale con il sistema di riferimento utente (USER) . . . . . . . . . . . . . . . . . . . . . . . 102
Sensore solidale con il sistema di riferimento mondo (WORLD) . . . . . . . . . . . . . . . . . . . . . 102
Sensore solidale con il sistema di riferimento weaving (WEAVE) . . . . . . . . . . . . . . . . . . . . 102
Tipologia delle informazioni acquisite dal sensore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Criteri di attuazione delle correzioni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Scostamenti relativi ed assoluti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Attuazione dello scostamento nel tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Controllo degli scostamenti totali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Modalità di abilitazione del sensor tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Malfunzionamenti del sensore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Arresto del robot in caso di malfunzionamento del sensore. . . . . . . . . . . . . . . . . . . . . . . . . 109
Ridefinizione degli scostamenti totali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Gestione degli scostamenti totali accumulativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Sessione di sensor tracking interrotta (INTERRUPTED) . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Sessione di sensor tracking sospesa (SUSPENDED) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Condizione di azzeramento al volo (RESETTING SPREAD). . . . . . . . . . . . . . . . . . . . . . . . 112
Limitazioni nel cambiamento dei parametri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Esempio di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

9. CONVEYOR TRACKING
(PRESTAZIONE OPZIONALE). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..116
Configurazione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Principio di funzionamento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Monitoraggio del processo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Finestra di inseguimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Istruzioni di movimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

lb-rc-c5e-motion_itTOC.fm
4
Sommario

Apprendimento delle posizioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123


Interruzione dell’inseguimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Limitazioni durante il Conveyor Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Utilizzo del Conveyor roto-traslante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Parametri di configurazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

10. MOVIMENTO CON WEAVING


(PRESTAZIONE OPZIONALE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...129
Modalità di weaving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Attivazione del weaving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Parametri del weaving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Forma d’onda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Piano di weaving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Amplificazione del weaving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Arresto del movimento con weaving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Programmazione del weaving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Weaving in assenza di movimento programmato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Modalità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Attivazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Parametri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Esempio di uso del weaving in assenza di movimento programmato . . . . . . . . . . . . . . . . . 141
Weaving su sistemi multiarm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

11. PATH GOVERNOR (PRESTAZIONE OPZIONALE). . . . . . . . . . . . . . . . . . . . . . . . ...143


Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Abilitazione del Path Governor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Disabilitazione del Path Governor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

12. SMARTMOVE
(PRESTAZIONE OPZIONALE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...146
Descrizione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Jerk Limitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Movimenti Cartesiani . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

13. ALGORITMO DI
MODULAZIONE DEL FLUSSO
(FLOW MODULATE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...148

lb-rc-c5e-motion_itTOC.fm
5
Sommario

14. PRESUPPOSTI PER LA


PROGRAMMAZIONE DEI ROBOT
SMART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..151
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Glossario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Algoritmo di Compensazione con Modello Dinamico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Algoritmo di Compensazione Cinematica (prestazione opzionale) . . . . . . . . . . . . . . . . . . . . . 153
Movimento attraverso le singolarità dell’asse 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Uso della modalità WRIST_JNT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Uso della modalità WRIST_JNT per muovere attraverso le singolarità . . . . . . . . . . . . . . .155
Movimento manuale (tasti di jog) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Robot senza compensazione (effetti della cinematica inversa) . . . . . . . . . . . . . . . . . . . . . . . . 157
Conversione inversa per i robot SMART NJ4 (polso non sferico) . . . . . . . . . . . . . . . . . . . . 157
Approssimazione nell’orientamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158
Movimento verso una POSITION appresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158
Movimento in fly tra MOVE LINEAR/CIRCULAR e MOVE JOINT . . . . . . . . . . . . . . . . . . .158
Singolarità dell’asse 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159
Posizione Cartesiana fuori limite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160
TCP nella zona posteriore del robot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161
TCP dietro l’asse 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .163
WCP in prossimità dell’asse 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .164
Conversione inversa per i modelli SMART NJ (solo polso sferico) . . . . . . . . . . . . . . . . . . . 165
Singolarità dell’asse 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165
Regole di programmazione per i robot con polso non sferico (SMART NJ4) . . . . . . . . . . . . . 165
Come stare fuori da una zona di singolarità. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Modifica dell’orientamento nei punti lungo il percorso . . . . . . . . . . . . . . . . . . . . . . . . . . . .166
Progettazione accurata del layout di cella . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168
Modifica del tool inserendo un piccolo angolo tra flangia robot e flangia tool . . . . . . . . . .170
Conclusioni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

15. COLLISION DETECTION (PRESTAZIONE OPZIONALE) . . . . . . . . . . . . . . . . . . . ..174


Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Concetti di base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Attivazione/disattivazione della funzione di Collision Detection. . . . . . . . . . . . . . . . . . . . . . . . 175
Tipo di sensibilità alla Collision Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
$COLL_TYPE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
$ARM_SENSITIVITY (soglie di sensibilità degli assi) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Affidabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Note sulla procedura di utilizzo del collision detection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Procedura di utilizzo del collision detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Programmi d’esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Abilitazione della prestazione di collision detection su singola MOVE. . . . . . . . . . . . . . . . . 184
Riabilitazione del collision detection da programma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Calcolo automatico delle soglie di sensibilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

lb-rc-c5e-motion_itTOC.fm
6
Sommario

Gestione dell’evento di ‘rilevata collisione’. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187


Utilizzo della libreria open source CDetect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

16. USO DEI POSIZIONATORI


GESTITI DA C5G . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...190
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Sommario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Convenzioni Generali. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Versi di rotazione degli assi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Convenzione per il posizionamento meccanico dei punti P1, P2 e P3 . . . . . . . . . . . . . . . . 191
Calcolo del valore di override di programmazione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Posizionatori ad 1 asse rotante tipo MP, PTDO, PTDV, TR3000/6000 . . . . . . . . . . . . . . . . . . 193
Definizione dei sistemi di riferimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Calibrazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Descrizione cinematica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
PTORB - Posizionatori a 2 assi perpendicolari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Posizionatore a due assi basculante-rotante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Definizione dei sistemi di riferimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195
Calibrazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195
Descrizione cinematica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196
Posizionatore a due assi ad L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Definizione dei sistemi di riferimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197
Calibrazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198
Descrizione cinematica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198
Posizionatori a 2 assi non perpendicolari tipo PTORB-alfa . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Definizione dei sistemi di riferimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Calibrazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Descrizione cinematica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Assi integrati di posizionamento robot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Slitta integrata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Definizione dei sistemi di riferimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203
Calibrazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204
Descrizione cinematica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204
Colonna rotante integrata. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Definizione dei sistemi di riferimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205
Calibrazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .206
Descrizione cinematica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .206
Portale 3 assi lineari. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Definizione dei sistemi di riferimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .208
Calibrazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209
Decrizione cinematica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209
Portale 2 assi lineari. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Definizione dei sistemi di riferimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210
Calibrazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .211
Decrizione cinematica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .211
Colonna traslo-rotante integrata. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Definizione dei sistemi di riferimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
Calibrazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213

lb-rc-c5e-motion_itTOC.fm
7
Sommario

Decrizione cinematica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213

17. PROGRAMMA TO_SET -


GESTIONE DEL TOOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..215
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Attivazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Videata iniziale del TO_SET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Calcolo Automatico TOOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Attrezzi necessari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Attrezzo Calibrato (Tool Master). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219
Punto di riferimento (o cubo di controllo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219
Caratteristiche generali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Calcolo orientamento dell'attrezzo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .220
Come individuare il "sistema di riferimento fittizio" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .220
Procedura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Calcolo del tool con il metodo standard - Procedura totale . . . . . . . . . . . . . . . . . . . . . . . . . 223
Verifica del Tool con il metodo standard - Procedura parziale. . . . . . . . . . . . . . . . . . . . . . . 225
Calcolo del Tool con il "metodo 4 punti" - Procedura totale . . . . . . . . . . . . . . . . . . . . . . . . . 230
Verifica del Tool Locale con il "metodo 4 punti" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234
Calcolo Automatico TOOL REMOTO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Attrezzi necessari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235
Attrezzo di dimensioni note montato sulla Flangia del Robot . . . . . . . . . . . . . . . . . . . . .235
Caratteristiche generali. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235
Calcolo Automatico UFRAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Attrezzi necessari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Attrezzo di dimensioni note montato sulla Flangia del Robot. . . . . . . . . . . . . . . . . . . . . . .236
3 Punti di Riferimento (ORIGIN, Xpos e XYpos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236
Caratteristiche generali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Procedura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Calcolo Automatico UFRAME REMOTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Attrezzi necessari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242
Attrezzo di dimensioni note montato sulla Flangia del Robot . . . . . . . . . . . . . . . . . . . . .242
3 Punti di riferimento (ORIGIN, Xpos e XYpos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242
Caratteristiche generali. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242
Procedura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .243
Calcolo automatico BASE per POSIZIONATORI (prestazione opzionale) . . . . . . . . . . . . . . . 248
Attrezzi necessari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Attrezzo di dimensioni note montato sulla flangia del robot . . . . . . . . . . . . . . . . . . . . . . . .248
3 punti di riferimento (P1, P2, P3) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .248
Caratteristiche generali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Autodeterminazione del carico (prestazione opzionale) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Concetti di base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Procedura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Requisiti per la modifica dei programmi di Autodeterminazione del Carico . . . . . . . . . . . .259
Attivazione ed esecuzione della procedura di Autodeterminazione del Carico . . . . . . . . .259
Software per la validazione del carico (SMART Payload) . . . . . . . . . . . . . . . . . . . . . . . . . . 268

lb-rc-c5e-motion_itTOC.fm
8
18. INTERFERENCE REGIONS (PRESTAZIONE OPZIONALE) . . . . . . . . . . . . . . . . . ...269
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Tipologia delle Regioni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Regioni Proibite e Consentite Cartesiane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Regioni Sorvegliate Cartesiane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Regioni Proibite Giunti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Regioni Sorvegliate Giunti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Forma e definizione delle Regioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Forma e definizione delle Regioni cartesiane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Sfera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .271
Cilindro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .272
Parallelepipedo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .272
Piano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .273
Forma e definizione delle Regioni giunti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Libreria IR_LIB di supporto alla creazione di Regioni di Interferenza . . . . . . . . . . . . . . . . . . . 274
Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Esempio di programma per Interference Regions Cartesiane . . . . . . . . . . . . . . . . . . . . . . . 276
Esempio di programma per un’Interference Region Giunti . . . . . . . . . . . . . . . . . . . . . . . . . 277

19. INSEGUIMENTO TRA ASSI - AXES PURSUIT (PRESTAZIONE OPZIONALE) . . ...278


Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Axes Pursuit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Gestione degli errori con la funzione Axes Pursuit attiva. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Configurazione dell’opzione software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Esempio istruzioni PDL2 per la configurazione della funzionalità Axes Pursuit. . . . . . . . . . 280

20. BASSA RISOLUZIONE ANGOLI DI EULERO (PRESTAZIONE OPZIONALE). . . ...281

lb-rc-c5e-motion_itTOC.fm
00/0110 9
Prefazione

PREFAZIONE
– Simbologia adottata nel manuale
– Documentazione di riferimento
– Modification History

Simbologia adottata nel manuale


Di seguito vengono riportati i simboli che rappresentano: AVVERTENZE, ATTENZIONE
e NOTE ed il loro significato

Il simbolo indica procedure di funzionamento, informazioni tecniche e


precauzioni che se non vengono rispettate e/o correttamente eseguite possono
causare lesioni al personale.

Il simbolo indica procedure di funzionamento, informazioni tecniche e


precauzioni che se non vengono rispettate e/o correttamente eseguite possono
causare danni alle apparecchiature.

Il simbolo indica procedure di funzionamento, informazioni tecniche e


precauzioni che è essenziale mettere in evidenza.

HS-0-0-0-mot_01.fm
08/1112 10
Prefazione

Documentazione di riferimento
Il presente documento si riferisce all’Unità di Controllo C5G.
Il set completo dei manuali del C5G è composto da:

Comau Unità di Controllo – Specifche Tecniche


C5G – Trasporto e installazione
– Manutenzione
– Uso dell’Unità di Controllo.

Questi manuali devono essere integrati con i seguenti documenti:

Comau Robot – Specifche Tecniche


– Trasporto e installazione
– Manutenzione
Programmazione – PDL2 Programming Language
– Programmazione del Movimento
– VP2 - Visual PDL2
Applicativi – Secondo il tipo di applicativo necessario.

HS-0-0-0-mot_01.fm
11 08/1112
Prefazione

Modification History
– Versione 02/0710:
• Modificato il capitolo Programma TO_SET - gestione del Tool - cambiato il
livello di chiamata della procedura di Autodeterminazione del carico
(prestazione opzionale) e il formato delle videate del Programma TO_SET.
• Aggiunto il nuovo Cap.18. - Interference Regions (prestazione opzionale).
– Versione 03/0111:
• aggiunto il par. 15.7.5 Utilizzo della libreria open source CDetect a pag. 188
nel Cap.15. - Collision Detection (prestazione opzionale),
• aggiunto il Cap.19. - Inseguimento tra assi - Axes Pursuit (prestazione
opzionale),
• aggiunta descrizione del Weaving con forma d’onda Circolare, nel Cap.10. -
Movimento con Weaving (prestazione opzionale).
– Versione 04/0611:
• aggiunto il par. 7.3 Movimento multi-cooperativo a pag. 94 nel Cap.7. -
Movimento Cooperativo (prestazione opzionale), per la gestione della
cooperazione tra due Arm e lo stesso gruppo di assi ausiliari (ad esempio un
posizionatore).
• migliorata la descrizione del Cap.18. - Interference Regions (prestazione
opzionale) e gli esempi relativi.
– Versione 05/0312:
• aggiunti dettagli sull’utilizzo del movimento sincronizzato con movimento
cooperativo abilitato (vd. Nota nel par. 6.2 Arm sincronizzati a pag. 87)
• aggiunto il Cap.9. - Conveyor Tracking (prestazione opzionale), che descrive
la funzionalità opzionale di Conveyor Tracking
• aggiunto il par. 10.7 Weaving su sistemi multiarm a pag. 142. A tale
proposito, leggere attentamente la nota seguente (riportata anche nel
paragrafo suddetto):

ATTENZIONE - C’è una possibile incompatibilità con le versioni precedenti: se è


stato scritto
– $WEAVE_NUM := 1
– MOVE TO p1 -- è l’arm di default, quindi il weaving si attiva
– $WEAVE_NUM := 2
– MOVE ARM[2] TO p2 -- nella versione attuale l’ARM 2 non esegue il weaving
perchè $WEAVE_NUM è stata settata per il $PROG_ARM cioè l’ARM 1.

– Versione 07/0912:
• aggiunta descrizione per nuovo tipo di Interference Region: regione
Consentita (vd. par. 18.2.1 Regioni Proibite e Consentite Cartesiane a
pag. 270).
– Versione 08/1112:
• aggiunti riferimenti incrociati tra le descrizioni delle opzioni software e i relativi
codici Comau
• aggiunta descrizione della configurazione della variabile predefinita
$AX_PURSUIT_LINKED (vd. par. 19.4 Configurazione dell’opzione software
a pag. 279).

HS-0-0-0-mot_01.fm
08/1112 12
Prescrizioni di Sicurezza Generali

1. PRESCRIZIONI DI SICUREZZA
GENERALI

Il presente capitolo ha carattere generale e si applica all’intero Sistema Robotico.


Considerando la sua importanza, tale capitolo è richiamato incondizionatamente
in ogni manuale di istruzioni del sistema.

In questo capitolo sono riportati i seguenti argomenti:


– Responsabilità
– Prescrizioni di sicurezza.

1.1 Responsabilità
– L'integratore dell'impianto deve eseguire l'installazione e la movimentazione del
Sistema robotico (Robot e Unità di Controllo) in accordo alle Norme di Sicurezza
vigenti nel paese dove viene realizzata l’installazione. L’applicazione e l’utilizzo dei
necessari dispositivi di protezione e sicurezza, l'emissione della dichiarazione di
conformità e l’eventuale marcatura CE dell'impianto, sono a carico dell'Integratore.

– COMAU Robotics declina ogni responsabilità da incidenti causati dall'uso scorretto


o improprio del Sistema robotico (Robot e Unità di Controllo), da manomissioni di
circuiti, di componenti, del software e dall'utilizzo di ricambi non presenti nella lista
ricambi.
– La responsabilità dell’applicazione delle presenti Prescrizioni di Sicurezza è a
carico dei preposti che dirigono / sovrintendono alle attività citate al paragrafo
Applicabilità, i quali devono accertarsi che il Personale Autorizzato sia a
conoscenza ed osservi scrupolosamente le prescrizioni contenute in questo
documento oltre alle Norme di Sicurezza di carattere generale applicabili al
Sistema robotico (Robot e Unità di Controllo) vigenti nel Paese dove viene
realizzata l’installazione.
– La mancata osservanza delle Norme di Sicurezza può causare lesioni permanenti
o morte al personale e danneggiare il Sistema robotico (Robot e Unità di Controllo).

L’installazione deve essere eseguita da Personale qualificato all’installazione e


deve essere conforme alle norme Nazionali e Locali

ge-0-0-0_01.FM
12 00/1011
Prescrizioni di Sicurezza Generali

1.2 Prescrizioni di sicurezza


1.2.1 Scopo
Le presenti prescrizioni di sicurezza hanno lo scopo di definire una serie di
comportamenti ed obblighi ai quali attenersi nell’eseguire le attività elencate al
paragrafo Applicabilità.

1.2.2 Definizioni
Sistema robotico (Robot e Unità di Controllo)
Si definisce Sistema robotico l’insieme funzionale costituito da: Robot, Unità di
Controllo, Terminale di Programmazione ed eventuali opzioni.

Spazio Protetto
Si definisce spazio protetto l’area delimitata dalle barriere di protezione e destinata
all’installazione e al funzionamento del robot

Personale Autorizzato
Si definisce personale autorizzato l’insieme delle persone opportunamente istruite e
delegate ad eseguire le attività elencate al paragrafo Applicabilità.

Personale Preposto
Si definisce preposto il personale che dirige o sovrintende alle attività alle quali siano
addetti lavoratori subordinati definiti al punto precedente

Installazione e Messa in Servizio


Si definisce installazione l'integrazione meccanica, elettrica, software del Sistema
Robot e Controllo in un qualsiasi ambiente che richieda la movimentazione controllata
degli assi Robot, in conformità con i requisiti di sicurezza previsti nella Nazione dove
viene installato il Sistema.

Funzionamento in Programmazione
Modo operativo sotto controllo dell’operatore, che esclude il funzionamento automatico
e che permette le seguenti attività: movimentazione manuale degli assi robot e
programmazione di cicli di lavoro a velocità ridotta, prova del ciclo programmato a
velocità ridotta e, quando ammesso, a velocità di lavoro.

Funzionamento in Auto / Remote


Modo operativo in cui il robot esegue autonomamente il ciclo programmato alla velocità
di lavoro, con personale all’esterno dello spazio protetto, con barriere di protezione
chiuse e inserite nel circuito di sicurezza, con avviamento/arresto locale (posto
all’esterno dello spazio protetto) o remoto.

Manutenzione e Riparazione
Si definisce intervento di manutenzione e riparazione l’attività di verifica periodica e/o di
sostituzione di parti (meccaniche, elettriche, software) o componenti del Sistema Robot
e Controllo e l’attività per identificare la causa di un guasto sopraggiunto, che si
conclude con il ripristino del Sistema Robot e Controllo nelle condizioni funzionali di
progetto.

ge-0-0-0_01.FM
00/1011 13
Prescrizioni di Sicurezza Generali

Messa Fuori Servizio e Smantellamento


Si definisce messa fuori servizio l’attività di rimozione meccanica ed elettrica del
Sistema Robot e Controllo da una realtà produttiva o ambiente di studio.
Lo smantellamento consiste nell’attività di demolizione e smaltimento dei componenti
che costituiscono il Sistema Robot e Controllo.

Integratore
Si definisce Integratore la figura professionale responsabile dell’installazione e messa
in servizio del Sistema Robot e Controllo.

Uso Scorretto
Si definisce uso scorretto l’utilizzo del sistema al di fuori dei limiti specificati nella
Documentazione Tecnica.

Campo d’Azione
Per campo d'azione del Robot si intende il volume di inviluppo dell'area occupata dal
Robot e dalle sue attrezzature durante il movimento nello spazio.

1.2.3 Applicabilità
Le presenti Prescrizioni devono essere applicate nell’esecuzione delle seguenti attività:
– Installazione e Messa in Servizio
– Funzionamento in Programmazione
– Funzionamento in Auto / Remote
– Sfrenatura degli assi robot
– Manutenzione e Riparazione
– Messa Fuori Servizio e Smantellamento.

ge-0-0-0_01.FM
14 00/1011
Prescrizioni di Sicurezza Generali

1.2.4 Modalità operative


Installazione e Messa in Servizio
– La messa in servizio è permessa solo quando il Sistema Robot e Controllo è
installato correttamente e in modo completo.
– L’installazione e messa in servizio del sistema è consentita unicamente al
personale autorizzato.
– L’installazione e la messa in servizio del sistema è ammessa esclusivamente
all’interno di uno spazio protetto con dimensioni adeguate ad ospitare il robot e
l’attrezzatura con la quale è allestito, senza fuori uscite dalle barriere. Occorre
verificare inoltre che nelle condizioni di normale movimento del robot si eviti la
collisione dello stesso con parti interne allo spazio protetto (es. colonne della
struttura, linee di alimentazione, ecc.) o con le barriere. Se necessario limitare
l’area di lavoro del robot per mezzo di tamponi meccanici di finecorsa (vedere
gruppi opzionali).
– Eventuali postazioni fisse di comando del robot devono essere posizionate fuori
dallo spazio protetto e in un punto tale da consentire la più completa visione dei
movimenti del robot.
– Per quanto possibile, l’area di installazione del robot deve essere sgombra da
materiali che possano impedire o limitare la visuale.
– Durante le fasi di installazione, il robot e l’Unità di Controllo devono essere
movimentati come indicato nella Documentazione Tecnica del prodotto; in caso di
sollevamento, verificare il corretto fissaggio dei golfari ed utilizzare unicamente
imbracature ed attrezzature adeguate.
– Fissare il robot al supporto di sostegno, con tutti i bulloni e le spine previsti, serrati
alle coppie di serraggio riportate sulla Documentazione Tecnica del prodotto.
– Se presenti, rimuovere le staffe di fissaggio degli assi e verificare il corretto
fissaggio dell’attrezzatura con cui il robot è allestito.
– Verificare che i ripari del robot siano correttamente fissati e che non vi siano
particolari mobili o allentati, controllare inoltre l’integrità dei componenti dell’Unità
di Controllo.
– Installare l’Unità di Controllo all’esterno dello spazio protetto: l’Unità di Controllo
non deve essere utilizzata come parte delle recinzioni.
– Verificare la coerenza tra la tensione predisposta nell’Unità di Controllo indicata
sull’apposita targhetta ed il valore di tensione della rete di distribuzione energia.
– Prima di procedere all’allacciamento elettrico dell’Unità di Controllo, verificare che
il disgiuntore sulla rete di distribuzione sia bloccato in posizione d’apertura.
– Il collegamento tra l’Unità di Controllo e la rete di alimentazione trifase dello
stabilimento, deve essere realizzato tramite un cavo armato quadripolare (3 fasi +
terra) di dimensioni adeguate alla potenza installata sull’Unità di Controllo vedere
la Documentazione Tecnica del prodotto.
– Il cavo d’alimentazione deve entrare nell’Unità di Controllo attraverso l’apposito
passacavo ed essere correttamente bloccato.
– Collegare il conduttore di terra (PE) e di seguito collegare i conduttori di potenza
all’interruttore generale.
– Collegare il cavo d’alimentazione, collegando per primo il conduttore di terra al
disgiuntore sulla rete di distribuzione energia dopo avere verificato con apposito

ge-0-0-0_01.FM
00/1011 15
Prescrizioni di Sicurezza Generali

strumento che i morsetti del disgiuntore siano fuori tensione. Si raccomanda di


connettere l’armatura del cavo alla terra.
– Collegare i cavi di segnali e potenza tra Unità di Controllo e robot.
– Collegare il robot a terra o all’Unità di Controllo o ad una vicina presa di terra.
– Verificare che la/le porta/e dell’Unità di Controllo siano chiuse con l’apposita
chiave.
– L’errato collegamento dei connettori può provocare danni permanenti ai
componenti dell’Unità di Controllo.
– L’Unità di Controllo C5G gestisce al suo interno i principali interblocchi di sicurezza
(cancelli, pulsante di abilitazione, ecc.). Collegare gli interblocchi di sicurezza
dell’Unità di Controllo C5G con i circuiti di sicurezza della linea avendo cura di
realizzarli come richiesto dalle Norme di Sicurezza. La sicurezza dei segnali di
interblocco provenienti da linea trasferta (arresto d’emergenza, sicurezza cancelli,
ecc.), ossia la realizzazione di circuiti corretti e sicuri è a carico dell’integratore del
Sistema Robot e Controllo.

Nel circuito di arresto di emergenza della cella/linea è necessario includere i


contatti dei pulsanti di arresto di emergenza dell'unità di controllo, disponibili su
X30. I pulsanti non sono interbloccati internamente al circuito di arresto
d'emergenza dell'Unità di Controllo.

– Non si garantisce la sicurezza del sistema in caso di realizzazione errata,


incompleta o mancante di tali interblocchi.
– Nel circuito di sicurezza è previsto l’arresto controllato (IEC 60204-1, arresto di
categoria 1) per gli ingressi di sicurezza Auto Stop/ General Stop ed Emergenza.
L’arresto controllato è attivo solo in stato Automatico; in Programmazione
l’esclusione della potenza (apertura dei contattori di potenza) avviene in modo
immediato. La modalità per la selezione del tempo dell’arresto controllato
(impostabile sulla scheda SDM) è riportato nel Manuale d’Installazione.
– Nella realizzazione delle barriere di protezione, specialmente per le barriere ottiche
e le porte d’ingresso, tenere presente i tempi e gli spazi di arresto del robot in
funzione della categoria di arresto (0 oppure 1) e della massa del robot.

Verificare che il tempo di arresto controllato sia coerente con il tipo di Robot
collegato all’Unità di Controllo. Il tempo di arresto si seleziona attraverso i
selettori SW1 e SW2 sulla scheda SDM.

– Verificare che le condizioni ambientali e operative di lavoro non eccedano i limiti


specificati nella Documentazione Tecnica del prodotto specifico.
– Le operazioni di calibrazione devono essere eseguite con la massima attenzione,
come riportato nella Documentazione Tecnica del prodotto specifico, e si devono
concludere con la verifica della corretta posizione della macchina.

ge-0-0-0_01.FM
16 00/1011
Prescrizioni di Sicurezza Generali

– Per le fasi di caricamento o aggiornamento del software di sistema (per esempio


dopo la sostituzione di schede), utilizzare unicamente il software originale
consegnato da COMAU Robotics. Attenersi scrupolosamente alla procedura di
caricamento del software di sistema descritta nella Documentazione Tecnica
fornita con il prodotto specifico. Dopo il caricamento eseguire sempre alcune prove
di movimentazione del Robot, a velocità ridotta rimanendo al di fuori dello spazio
protetto.
– Verificare che le barriere dello spazio protetto siano correttamente posizionate.

Funzionamento in Programmazione
– La programmazione del robot è consentita unicamente al personale autorizzato.
– Prima di procedere alla programmazione, l’operatore deve controllare il Sistema
robotico (Robot e Unità di Controllo) per assicurarsi che non sussistano condizioni
anomale potenzialmente pericolose e che nello spazio protetto non siano presenti
persone.
– Per quanto possibile la programmazione deve essere comandata restando
all’esterno dello spazio protetto.
– Prima di operare all’interno dello Spazio Protetto, l’operatore deve accertarsi,
rimanendo all’esterno dello spazio protetto, che tutte le necessarie protezioni e i
dispositivi di sicurezza siano presenti e funzionanti e in particolare che il Terminale
di Programmazione funzioni correttamente (velocità ridotta, enabling device,
dispositivo di arresto d’emergenza, ecc.).
– Durante le fasi di programmazione, la presenza all’interno dello Spazio Protetto è
consentita al solo operatore in possesso del Terminale di Programmazione.
– Se è indispensabile la presenza di un secondo operatore nell'area di lavoro
durante la verifica del programma, questi dovrà disporre di un suo enabling device
(dispositivo di abilitazione) interbloccato con i dispositivi di sicurezza.
– L’attivazione dei motori (DRIVE ON) deve essere comandata sempre da posizione
esterna al campo d’azione del robot, dopo aver verificato che nell’area interessata
non vi sia la presenza di persone. L’operazione di attivazione motori si considera
conclusa alla comparsa della relativa indicazione di stato macchina.
– Durante la programmazione l’operatore deve mantenersi ad una distanza dal robot
tale da permettergli di scansare eventuali movimenti anomali della macchina, e
comunque in posizione tale da evitare possibili rischi di costrizione tra il robot e
parti della struttura (colonne, barriera, ecc.), o tra parti mobili del robot stesso.
– Durante la programmazione l’operatore deve evitare di trovarsi in corrispondenza
di parti del robot che possono, per effetto della gravità, compiere dei movimenti
verso il basso oppure verso l’alto o lateralmente (nel caso di montaggio su piano
inclinato).
– La prova del ciclo programmato alla velocità di lavoro, in alcune situazioni in cui si
renda necessario un controllo visivo a breve distanza, con la presenza
dell’operatore all’interno dello spazio protetto, deve essere attivato solo dopo aver
effettuato un ciclo completo di prova a velocità ridotta. La prova deve essere
comandata da una distanza di sicurezza.
– Occorre prestare particolare attenzione quando si programma mediante Terminale
di Programmazione: in tal caso, benché tutti i dispositivi di sicurezza hardware e
software siano in funzione, il movimento del robot dipende comunque
dall’operatore.

ge-0-0-0_01.FM
00/1011 17
Prescrizioni di Sicurezza Generali

– La prima esecuzione di un nuovo programma può comportare il movimento del


robot lungo una traiettoria diversa da quella attesa.
– La modifica di passi del programma (es. spostamento di un passo da un punto ad
un altro del flusso, registrazione errata di un passo, modifica della posizione del
robot fuori dalla traiettoria che raccorda due passi del programma), può dare
origine a movimenti non previsti dall’operatore in fase di prova del programma
stesso.
– In entrambi i casi operare con attenzione, mantenendosi comunque al di fuori del
campo d’azione del robot e provare il ciclo a velocità ridotta.

Funzionamento in Auto / Remote


– L’attivazione del funzionamento in automatico (stati AUTO e REMOTE) è
consentita unicamente con il Sistema robotico (Robot e Unità di Controllo)
integrato in un’area dotata di barriere di protezione correttamente interbloccate,
come prescritto dalle Norme di Sicurezza vigenti nel Paese dove viene realizzata
l’installazione.
– Prima di attivare il funzionamento in automatico l’operatore deve verificare il
Sistema Robot e Controllo e lo spazio protetto per accertarsi che non sussistano
condizioni anomale potenzialmente pericolose.
– L’operatore può attivare il funzionamento automatico solo dopo aver verificato:
• che il Sistema Robot e Controllo non si trovi in stato di manutenzione o
riparazione;
• che le barriere di protezione siano correttamente collocate;
• che non vi sia personale all’interno dello spazio protetto;
• che le porte dell’Unità di Controllo siano chiuse con l’apposita chiave;
• che i dispositivi di sicurezza (arresto d’emergenza, sicurezze delle barriere di
protezione) siano funzionanti;
– Particolare attenzione deve essere posta alla selezione dello stato remote, in cui il
PLC della linea può compiere operazioni automatiche di accensione motori e avvio
del programma.

Sfrenatura degli assi robot


– In assenza della forza motrice, lo spostamento degli assi del robot è possibile per
mezzo di dispositivi opzionali per sfrenatura e adeguati mezzi di sollevamento. Tali
dispositivi permettono unicamente la disattivazione del freno di ciascun asse. In
questo caso, tutte le sicurezze del sistema (compreso l’arresto d’emergenza e il
pulsante di abilitazione) sono escluse inoltre gli assi robot possono muoversi verso
l’alto oppure verso il basso a causa di forze generate dal sistema di bilanciamento
oppure per gravità.

Prima di utilizzare i dispositivi per sfrenatura manuale si raccomanda


l’imbragatura del robot oppure l’aggancio ad un carroponte.

– L’impiego dello sfrenatore genera rischio di caduta assi soggetti a gravità e rischio
di urto determinato da un ripristino non corretto a seguito dell’uso del modulo
sfrenatore. La procedura per il corretto uso dello sfrenatore (sia lo sfrenatore
integrato sia il modulo sfrenatore) è riportata nei manuali di manutenzione.
– Alla successiva ripresa del movimento dopo una interruzione di una MOVE non
completata, la funzione tipica del recupero di traiettoria può generare percorsi non
prevedibili con conseguente rischio di urto. La stessa condizione è presente alla

ge-0-0-0_01.FM
18 00/1011
Prescrizioni di Sicurezza Generali

successiva ripresa del ciclo automatico. Evitare di spostare il Robot in posizioni


distanti da quelle previste alla ripresa del movimento; in alternativa disattivare i
programmi e/o le istruzioni di MOVE pendenti.

Manutenzione e Riparazione
– Al montaggio in COMAU Robotics, il robot viene rifornito con lubrificanti che non
contengono sostanze pericolose per la salute tuttavia in alcuni casi, l’esposizione
ripetuta e prolungata al prodotto può provocare manifestazioni cutanee irritative
oppure, in caso di ingestione, malessere.
Misure di Pronto Soccorso. In caso di contatto con gli occhi e con la pelle: lavare
con abbondante acqua le zone contaminate; in caso persistessero fenomeni
irritativi consultare un medico.
In caso di ingestione non indurre il vomito o somministrare prodotti per via orale;
consultare un medico al più presto.
– Le operazioni di manutenzione, ricerca guasti e riparazione sono consentite
unicamente al personale autorizzato.
– L’attività di manutenzione e riparazione in corso deve essere segnalata con
apposito cartello indicante lo stato di manutenzione, posto sul pannello comandi
dell’Unità di Controllo, fino ad operazione ultimata anche se temporaneamente
sospesa.
– Le operazioni di manutenzione e sostituzione di componenti o dell’Unità di
Controllo, devono essere eseguite con l’interruttore generale in posizione di aperto
e bloccato per mezzo di un lucchetto di sicurezza.
– Anche se l’Unità di Controllo non è alimentata (interruttore generale aperto),
possono essere presenti tensioni interconnesse, provenienti dal collegamento con
unità periferiche o con sorgenti di alimentazioni esterne (es. input/output a 24 Vcc).
Disattivare le sorgenti esterne quando si opera sulle parti del sistema interessate.
– La rimozione di pannelli, schermi protettivi, griglie ecc. è consentita solo con
interruttore generale aperto e bloccato con lucchetto di sicurezza.
– I componenti guasti devono essere sostituiti con altri dello stesso codice oppure
equivalenti definiti dalla COMAU Robotics.

Dopo la sostituzione del modulo SDM, sul nuovo modulo verificare che
l’impostazione del tempo di arresto sui selettore SW1 e SW2 sia coerente con il
tipo di Robot collegato all’Unità di Controllo.

– Le attività di ricerca guasti e di manutenzione devono essere eseguite, per quanto


possibile, all’esterno dello spazio protetto.
– Le attività di ricerca guasti eseguite sul controllo devono, per quanto possibile,
essere eseguite in assenza di alimentazione.
– Qualora si renda necessario, nel corso dell’attività di ricerca guasti, eseguire
interventi con l’Unità di Controllo alimentata, devono essere prese tutte le
precauzioni richieste dalle Norme di Sicurezza quando si opera in presenza di
tensioni pericolose.
– L’attività di ricerca guasti sul robot deve essere eseguita con alimentazione di
potenza disattivata (DRIVE OFF).
– Al termine dell’intervento di manutenzione e ricerca guasti, devono essere
ripristinate le sicurezze disattivate (pannelli, schermi protettivi, interblocchi, ecc.).

ge-0-0-0_01.FM
00/1011 19
Prescrizioni di Sicurezza Generali

– L’intervento di manutenzione, riparazione e ricerca guasti deve essere concluso


con la verifica del corretto funzionamento del Sistema robotico (Robot e Unità di
Controllo) e di tutti i dispositivi di sicurezza, eseguita restando al di fuori dello
spazio protetto.
– Durante le fasi di caricamento del software (per esempio dopo la sostituzione di
schede elettroniche) è necessario utilizzare il software originale consegnato da
COMAU Robotics. Attenersi scrupolosamente alla procedura di caricamento del
software di sistema descritta nella Documentazione Tecnica del prodotto specifico;
dopo il caricamento eseguire sempre un ciclo di prova per sicurezza, restando al
di fuori dello spazio protetto.
– Lo smontaggio di componenti del robot (es. motori, cilindri per bilanciamento, ecc.)
può provocare movimenti incontrollati degli assi in qualsiasi direzione: prima di
iniziare una procedura di smontaggio è quindi necessario fare riferimento alle
targhette di avvertenze applicate sul robot e alla Documentazione Tecnica fornita.
– È assolutamente vietato rimuovere la copertura di protezione delle molle del robot.

Messa Fuori Servizio e Smantellamento


– La messa fuori servizio e la rimozione del Sistema Robot e Controllo è consentita
unicamente al Personale Autorizzato.
– Portare il robot in posizione di trasporto e montare le staffe di bloccaggio assi
(quando previsto) facendo riferimento alla targhetta applicata sul robot e alla
Documentazione Tecnica del robot stesso.
– Prima di procedere alla messa fuori servizio è obbligatorio togliere la tensione di
rete all’ingresso dell’Unità di Controllo (disinserire il disgiuntore sulla rete di
distribuzione energia e bloccarlo in posizione aperta).
– Dopo aver verificato con apposito strumento che i morsetti siano fuori tensione,
scollegare il cavo di alimentazione dal disgiuntore sulla rete di distribuzione
energia, staccando prima i conduttori di potenza e successivamente quello di terra.
Scollegare il cavo di alimentazione dall’Unità di Controllo e rimuoverlo.
– Scollegare prima i cavi di collegamento fra il robot e l’Unità di Controllo e
successivamente il conduttore di terra.
– Se è presente, scollegare l’impianto pneumatico del robot dalla rete di
distribuzione dell’aria.
– Verificare che il robot sia correttamente bilanciato e se necessario imbracarlo
correttamente quindi smontare i bulloni di fissaggio del robot dal supporto di
sostegno.
– Rimuovere il robot e l’Unità di Controllo dall’area di lavoro, adottando tutte le
prescrizioni indicate nella Documentazione Tecnica dei prodotti; se si rende
necessario il sollevamento, verificare il corretto fissaggio dei golfari e utilizzare
unicamente imbracature ed attrezzature adeguate.
– Prima di effettuare operazioni di smantellamento (smontaggio, demolizione e
smaltimento) dei componenti che costituiscono il Sistema Robot e Controllo,
consultare la COMAU Robotics, o una delle sue filiali, che indicherà, in funzione
del tipo di robot e di Unità di Controllo, le modalità operative nel rispetto dei principi
di sicurezza e di salvaguardia ambientale.
– Le operazioni di smaltimento rifiuti devono essere eseguite in accordo con la
legislazione della Nazione in cui è installato il Sistema Robot e Controllo.

ge-0-0-0_01.FM
20 00/1011
Prescrizioni di Sicurezza Generali

1.2.5 Prestazioni
Le presenti prestazioni devono essere considerate prima di installare il sistema robotico:
– Spazi di arresto
– Mission time (valore tipico).

Spazi di arresto
– Considerando il Robot in modalità programmazione (T1), a seguito pressione del
pulsante di stop (fungo rosso su WiTP) in categoria 0 (secondo norma
EN60204-1), si ottiene:

Tab. 1.1 - Spazi di arresto in programmazione (T1)


Velocità Tempo di Spazio di
Modo Caso
aspettata arresto arresto
Nominale 120 ms 30 mm
T1 250 mm/s
Caso limite 500 ms 125 mm

Tab. 1.2 - Tempi di reazione dell’elettronica di sicurezza in


programmazione (T1)
Velocità Tempo di
Modo Caso
aspettata reazione
Per gli input di sicurezza del modulo SDM (es.
pulsante di stop del TP in versione wired)
Per input di stop e di enabling device dal TP in 150 ms
versione wireless, quando la trasmissione del
T1 250 mm/s telegramma di sicurezza è attiva.
Per time-out dell’input di stop e di enabling
device dal TP in versione wireless, quando
350 ms
viene persa o interrotta la trasmissione del
telegramma di sicurezza.

– Considerando il Robot in modalità automatico, nelle condizioni di massima


estensione, massimo carico e massima velocità, a seguito pressione del pulsante
di stop (fungo rosso su WiTP) in categoria 1 (secondo norma EN60204-1) si ottiene
la completa fermata del Robot con rampa di decelerazione controllata.
Esempio: per Robot NJ 370-2.7 si ottiene la completa fermata in circa 85 ° di
movimento, corrispondenti a circa 3000 mm di spostamento misurati sulla flangia
TCP. Nelle condizioni indicate, il tempo di fermata del Robot NJ 370-2.7 è di 1,5
secondi.
– Per ogni tipo Robot possono essere richiesti alla COMAU Robotics gli spazi di
arresto limite.

Mission time (valore tipico)


– Si segnala che il periodo di tempo nel quale si ha la copertura dell’efficienza del
sistema di sicurezza è di 20 anni (mission time of safety-related parts of control
systems (SRP/CS), secondo norma EN ISO 13849-1).

ge-0-0-0_01.FM
00/1011 21
Modalita’ operative e stati del Sistema

2. MODALITA’ OPERATIVE
E STATI DEL SISTEMA

2.1 Introduzione
Nel presente capitolo sono descritti i seguenti argomenti:
– Modalità operative del sistema
– Stati del sistema
– Funzione Stand-by

2.2 Modalità operative del sistema


L’Unità di Controllo Robot C5G può operare in tre modi, selezionabili mediante il
selettore modale posto sul Terminale di Programmazione:
– Programmazione (sel. di stato in posizione T1),

– Automatico Locale (sel. di stato in posizione AUTO) e

– Automatico Remoto (sel. di stato in posizione REMOTE).

Il modo Automatico Locale consente l’esecuzione dei programmi di produzione che,


contenendo istruzioni per il movimento del robot, richiedono, per essere avviati, la
pressione del tasto START posto sul Terminale di Programmazione. Il selettore di stato
deve essere impostato sulla posizione AUTO.
Il TOOL, la BASE e il FRAME attivi, non possono essere cambiati quando si lavora in
AUTO.
Il modo Automatico Remoto (REMOTE) è analogo a quello Automatico Locale
(AUTO), ma i comandi (ad esempio quello per l’avvio) vengono inoltrati da un dispositivo
remoto (ad esempio un PLC).
Il selettore di stato deve essere impostato sulla posizione REMOTE. Il TOOL, la BASE
e il FRAME attivi, non possono essere cambiati quando si lavora in REMOTE.
Il modo Programmazione (T1) è quello utilizzato in fase di creazione e verifica dei

HS-0-C5E-USO_32.fm
24 08/0912
Modalita’ operative e stati del Sistema

programmi. I movimenti del robot, per ragioni legate alla sicurezza, sono eseguiti ad una
velocità ridotta rispetto al modo automatico (la velocità massima di un robot consentita
in programmazione è di 250 mm/s sul centro della flangia).
Quando il selettore di stato è impostato sulla posizione T1, i programmi possono essere
sviluppati utilizzando l’ambiente di editor e i punti possono essere appresi da Terminale
di Programmazione muovendo il robot manualmente con i tasti di movimento; i
programmi possono essere messi a punto utilizzando gli strumenti di debug offerti dal
sistema. In programmazione, l’esecuzione di una istruzione di movimento richiede la
pressione, da parte dell’operatore, del tasto START e del dispositivo di abilitazione posti
sul Terminale di Programmazione.
Quando il selettore di stato è impostato su T1, il sistema è sotto il controllo
dell’operatore. Quando il selettore si trova sulla posizione REMOTE, il sistema è
controllato da comandi provenienti da remoto (ad esempio da PLC).
Il TOOL, la BASE e il FRAME attivi, non possono essere cambiati quando si lavora in
REMOTE.
Prima che possa essere eseguita qualsiasi operazione che richieda del movimento, è
necessario accendere gli azionamenti:
– se il selettore di stato è in posizione T1, l’accensione degli azionamenti avviene
tenendo premuto in posizione intermedia il Dispositivo di Abilitazione (Enabling
Device) del Terminale di Programmazione; per spegnere gli azionamenti ed
attivare i freni su tutti gli assi gestiti dall’Unità di Controllo, è sufficiente rilasciare il
Dispositivo di Abilitazione (Enabling Device) del Terminale di Programmazione.

Esiste inoltre uno stato (indicato come T1P) che permette di gestire al meglio
alcuni Processi Tecnologici in Programmazione, con velocità massima limitata a
250 mm/s e soggetto ad alcuni vincoli descritti nel par. Stato T1P a pag. 54 sul
manuale USO dell’Unità di Controllo C5G.
Tale stato può essere attivato solo quando il selettore di stato è in posizione T1 e
gli azionamenti sono spenti, premendo il tasto R1 nel menu di destra del
Terminale di Programmazione.
Effettuata l’attivazione, è possibile accendere gli azionamenti e quindi
movimentare il robot.

– Se il selettore di stato è in posizione AUTO, l’accensione degli azionamenti


avviene mediante la pressione del tasto R5 del Menu destro (che in questo caso
ha il significato di DRIVE ON) del Terminale di Programmazione; per spegnere gli
azionamenti ed attivare i freni su tutti gli assi gestiti dall’Unità di Controllo, occorre
premere nuovamente il tasto R5 del Menu destro (che in questo caso ha il
significato di DRIVE OFF) del Terminale di Programmazione.
Il TOOL, la BASE e il FRAME attivi, non possono essere cambiati quando si lavora
in AUTO.
– Se il selettore di stato è in posizione REMOTE, l’accensione e lo spegnimento degli
azionamenti sono comandati da remoto.
Segue una descrizione dettagliata dei possibili stati del sistema.

2.3 Stati del sistema


Lo stato in cui si trova il sistema dipende principalmente da:
– selettore di stato

HS-0-C5E-USO_32.fm
08/0912 25
Modalita’ operative e stati del Sistema

– DRIVE ON, DRIVE OFF e HOLD


– allarme di sistema
La transizione da uno stato all’altro del sistema è inoltre influenzata dal dispositivo di
abilitazione presente sul Terminale di Programmazione.
L’Unità di Controllo può trovarsi in uno dei seguenti stati:
– Stato HOLD: in questo stato il robot viene decelerato gradualmente fino a
raggiungere il punto di arresto; il movimento viene sospeso così come l’esecuzione
dei programmi di movimento (detti holdable). Quando tutte le condizioni
necessarie per uscire dallo stato HOLD sono soddisfatte, il sistema ritorna allo
stato precedente (programmazione o automatico), ma per riprendere l’esecuzione
dei programmi di movimento, occorre premere il tasto START.
– Stato AUTO: questo è lo stato utilizzato generalmente per l’esecuzione dei
programmi di produzione che comandano la movimentazione del robot (selettore
di stato posizionato su AUTO o REMOTE).
Il TOOL, la BASE e il FRAME attivi, non possono essere cambiati quando si lavora
in AUTO o REMOTE.
– Stato PROGR: In questo stato il robot può essere mosso manualmente tramite i
tasti di jog o eseguendo istruzioni di programma (da ambiente di editor o da
comando EXECUTE). In quest’ultimo caso, il movimento, per poter essere
eseguito, richiede di mantenere premuto il tasto START ed il Dispositivo di
Abilitazione (Enabling Device).
Se è attiva la funzione di arresto controllato in categoria 1 (EN 60204-1), l’esclusione
della potenza (apertura del contattore di potenza) può avvenire con un ritardo che va da
un minimo di 1 secondo ad un massimo di 2 secondi.
Con il selettore di stato in posizione T1, l’esclusione della potenza avviene in modo
immediato (EN 60204-1, arresto di categoria 0).
– Stato ALARM: si entra in questo stato in seguito al verificarsi di un allarme nel
sistema. A seconda della gravità dell’errore, il sistema intraprende diverse azioni
quali la sospensione dell’esecuzione del programma, la disattivazione degli
azionamenti, ecc. Può accadere una situazione in cui l’allarme non sia resettabile,
quindi l’accensione degli azionamenti può non essere consentita.
Lo stato corrente del sistema è visualizzato sulla prima riga di stato del Terminale di
Programmazione (o nella finestra Terminale del programma WinC5G su PC).
La figura riporta uno schema semplificato delle azioni che determinano il passaggio del
sistema da uno stato ad un altro.

HS-0-C5E-USO_32.fm
26 08/0912
Modalita’ operative e stati del Sistema

Fig. 2.1 - Schema semplificato degli stati del sistema

1. Selettore di stato su T1 + HOLD rilasciato


2. HOLD o DRIVE OFF o cambio selettore
3. HOLD o DRIVE OFF o cambio selettore
4. Selettore di stato su AUTO o REMOTE + HOLD rilasciato
N.B.: per effettuare la transizione 4 occorre anche che il dispositivo di abilitazione sia premuto

2.3.1 Stato HOLD


Le regole legate alla sicurezza nell’operare con l’Unità di Controllo fanno sì che il
sistema entri nello stato HOLD ogni volta che si effettua un cambiamento nel modo di
operare, passando ad esempio dalla modalità di Automatico a quella di
Programmazione.
Per uscire dallo stato HOLD, al fine di abilitare una certa modalità di operare, occorre
che tutte le condizioni legate alla sicurezza siano soddisfatte. Un tipico esempio si ha
quando l’operatore porta il selettore di stato sulla posizione T1 per lavorare vicino al
robot, impugnando il Terminale di Programmazione per effettuare operazioni quali
l’apprendimento dei punti.
In PROGR, l’uscita dallo stato di HOLD può avvenire anche con la pressione del tasto
START, quando esso viene asservito dal sistema e quindi quando viene eseguita
un’istruzione o un programma di movimento. Il successivo rilascio del tasto START fa
ritransitare il sistema nello stato di HOLD.
L’ingresso nello stato HOLD fa sì che il corrispondente tasto HOLD, presente sul
terminale di programmazione, sia considerato premuto. Una successiva pressione di
tale tasto provoca l’uscita del sistema dallo stato HOLD.
Qualora lo stato HOLD sia stato causato dalla richiesta di DRIVE OFF sul Terminale di
Programmazione (Dispositivo di Abilitazione (Enabling Device) rilasciato o tasto R5
premuto con funzione di DRIVE OFF), occorrerà premere nuovamente il tasto HOLD
per uscire dallo stato HOLD, e riaccendere gli azionamenti (pressione intermedia del
Dispositivo di Abilitazione (Enabling Device) o pressione di R5 con significato di DRIVE
ON).

2.3.2 Stato AUTO


Condizione necessaria affinchè il sistema si trovi in stato AUTO è che il selettore di stato

HS-0-C5E-USO_32.fm
08/0912 27
Modalita’ operative e stati del Sistema

posto sul Robot Control Cabinet sia posizionato sulla posizione AUTO o REMOTE. Il
TOOL, la BASE e il FRAME attivi, non possono essere cambiati quando si lavora in
AUTO o REMOTE.
Nello stato AUTO, l’avvio dei programmi che sono pronti per essere eseguiti richiede la
pressione del tasto START posto sul terminale di programmazione o dell’input START
da remoto.
Le condizioni che possono portare lo stato del sistema dallo stato AUTO allo stato
HOLD sono:
– commutazione del selettore di stato su una qualsiasi altra posizione;
– richiesta di DRIVE OFF o pressione del tasto di HOLD;
– allarme di sistema.
Per ritornare allo stato AUTO, occorre riportare il selettore sulla posizione desiderata,
richiedere l’accensione degli azionamenti e premere nuovamente il tasto di HOLD. Per
far continuare l’esecuzione dei programmi di movimento occorre premere il tasto
START dopo aver appurato che gli azionamenti siano alimentati (cioè in DRIVE ON).

2.3.3 Stato PROGR


Lo stato PROGR si ha quando:
– il selettore di stato è impostato su T1.
In questo stato è possibile muovere manualmente il robot, utilizzando i tasti di
movimento presenti sul Terminale di Programmazione. È inoltre possibile eseguire i
programmi da ambiente di IDE (vd. IDE Page sul manuale USO dell’Unità di Controllo
C5G) al fine di verificarne la correttezza ed apportare, se necessario, delle modifiche. I
movimenti vengono eseguiti a velocità ridotta.

2.3.4 Stato ALARM


Il sistema entra nello stato ALARM quando si verifica un allarme. Un messaggio di
errore viene visualizzato sulla seconda riga di stato dello schermo di sistema ed il led
dedicato, posto vicino al tasto ALARM sul terminale di programmazione, si illumina.
Diverse sono le condizioni che possono provocare un allarme e le azioni da
intraprendere, per uscire dallo stato ALARM e riportare il sistema nello stato
precedente, variano a seconda della gravità dell’errore.

2.4 Funzione Stand-by


La funzione Stand-by permette di ridurre il consumo di corrente quando il robot è fermo.
La funzione viene automaticamente attivata quando l’Unità di Controllo si trova nello
stato automatico locale o automatico remoto e dopo che il robot è fermo da un tempo
definibile nella variabile $TUNE [27]; l’effetto è quello di attivare i freni motore per
mantenere la posizione statica del robot. Il valore della variabile $TUNE [27] impostato
da COMAU è 120 secondi; ponendo a 0 tale variabile la funzione viene disattivata.
La funzione di Stand-by viene automaticamente disattivata alla prima richiesta di
riprendere il movimento (START, RESUME) da parte del sistema.
Lo stato di Stand-by del sistema è visualizzato nella barra di stato del Terminale di
Programmazione. Per visualizzare lo stato del singolo arm, occorre leggere tale stato
nella sottopagina Stato, della Pagina di Motion.

HS-0-C5E-USO_32.fm
28 08/0912
Modalita’ operative e stati del Sistema

Rispettare rigorosamente, in termini di sicurezza, quanto previsto per questa


condizione di funzionamento del Controllore.

HS-0-C5E-USO_32.fm
08/0912 29
Modalita’ operative e stati del Sistema

HS-0-C5E-USO_32.fm
30 08/0912
Turn-set e Calibrazione - Concetti di Base

3. TURN-SET E CALIBRAZIONE -
CONCETTI DI BASE

3.1 Introduzione
Lo scopo di questo capitolo è di fornire i concetti di base e la terminologia relativi alla
gestione delle informazioni di posizione degli assi robot. La descrizione delle procedure
operative è demandata al capitolo TURN-SET E CALIBRAZIONE - PROCEDURE
OPERATIVE, specifico del robot utilizzato.
Nel presente capitolo si forniscono informazioni di base sui seguenti argomenti:
– Terminologia utilizzata
– Turn-set
– Calibrazione.

3.2 Terminologia
– TRASDUTTORE: Sono supportati due tipi di trasduttori di posizione: encoder e
resolver.
– NUMERO DI GIRI DEL TRASDUTTORE: durante il movimento dell’asse robot, il
trasduttore può compiere più giri; il numero di giro viene inizializzato tramite
l’operazione di calibrazione o quella di turn-set.
– QUOTA DI UN ASSE: la quota di un asse contiene tutte le informazioni necessarie
per determinare l’esatta posizione di un asse nello spazio;
– RICOSTRUZIONE DELLA QUOTA: quando l’Unità di Controllo viene accesa, il
software di sistema provvede, tra le varie inizializzazioni, a ricostruire la quota degli
assi robot.
Il software di sistema esegue un controllo su questa quota; verifica infatti che la
differenza tra posizione ricostruita e posizione prima dello spegnimento sia
inferiore ad una soglia. Se la soglia viene superata, l’Unità di Controllo visualizza
l’errore 59411 - 08 Ax <num_asse> Arm <num_arm> movimento dopo lo
spegnimento e lascia all’operatore la responsabilità di controllare che la posizione
fisica del robot corrisponda alla nuova quota.
– POSIZIONE DI CALIBRAZIONE: è una posizione prestabilita e verificata mediante
appositi attrezzi (comparatori, supporti, attrezzatura di calibrazione). La posizione
di calibrazione è una posizione di riferimento nello spazio di lavoro del robot che
serve a inizializzare la quota di ogni asse.
– COSTANTI DI CALIBRAZIONE: la costante di calibrazione è la differenza fra il
dato letto dal trasduttore e la posizione teorica che lo stesso trasduttore dovrebbe
assumere in quella particolare posizione dell’asse del robot. Infatti, siccome il
posizionamento del trasduttore rispetto al giunto del robot è casuale (in quanto
dipende da come è avvenuto il montaggio del trasduttore stesso), occorre
correggere la posizione reale del trasduttore in funzione della posizione teorica
richiesta dall’asse robot.
La costante di calibrazione è espressa all’interno di un giro trasduttore e viene
memorizzata nella variabile $CAL_DATA. E’ rappresentata in giri motore ed è un

HS-0-C5E-USO_35.fm
00/0811 31
Turn-set e Calibrazione - Concetti di Base

valore compreso tra -0.5 (escluso) e +0.5 (compreso). La costante di calibrazione


descritta nella variabile $CAL_DATA può essere letta da Terminale di
Programmazione, pagina SETUP, sottopagina Calib.
– FILE ASCII DI CALIBRAZIONE: il file di calibrazione
UD:\SYS\<$SYS_ID>_CAL<num_arm>.PDL (dove $SYS_ID indica l’identificativo
di sistema, come ad esempio NJ4_001) è un file ASCII con sintassi di un file PDL2
nel quale vengono memorizzate le costanti di calibrazione ($CAL_DATA[n]) ed altri
dati tipici del robot.
– NVRAM: è la memoria utilizzata per salvare le informazioni caratteristiche del robot
associato all’Unità di Controllo, le costanti di calibrazione e la lunghezza degli assi.
Si trova sulla scheda CPU del Controllore.

3.3 Turn-set
Lo scopo dell’operazione di turn-set è quello di aggiornare soltanto il numero di
giri del trasduttore nel caso in cui l’Unità di Controllo, alla riaccensione, abbia
perso tale valore.
L’operazione consiste nel portare l’asse interessato nella posizione di calibrazione,
mediante l’uso delle tacche di riferimento, e nel dare l’opportuno comando. Non
necessita di alcuna attrezzatura specifica in quanto l’unico valore inizializzato è il
numero di giri del trasduttore.
L’operazione di turn-set è richiesta quando
– si verificano movimenti degli assi a controllore spento (ad esempio quando viene
segnalato l’errore 59411 - 08 Ax <num_asse> Arm <num_arm> movimento
dopo lo spegnimento)
– si verificano degli eventi che portano alla perdita del solo numero di giri, e quindi
non richiedono l’esecuzione della procedura di calibrazione. Sulla finestra di stato
del Terminale di Programmazione o sul video del PC compare la dicitura Ar:TURN.
A seconda che il turn-set venga effettuato con il robot in posizione di calibrazione di
sistema o in posizione di calibrazione utente, si avrà:
– Turn-set su posizione di calibrazione di sistema
– Turn-set su posizione di calibrazione utente
– Turn-set per assi robot con corsa multigiro

3.3.1 Turn-set su posizione di calibrazione di sistema


Permette di inizializzare il numero di giri del trasduttore dei singoli assi robot, nella
posizione di calibrazione di sistema (posizione di calibrazione predefinita da COMAU
Robotics & Final Assembly).
Per ulteriori informazioni riferirsi a Calibrazione di sistema ($CAL_SYS).

3.3.2 Turn-set su posizione di calibrazione utente


Permette di inizializzare il numero di giri del trasduttore dei singoli assi robot, nella
posizione di calibrazione utente (posizione di calibrazione “fuori ingombro” definita
dall’utente).
Per ulteriori informazioni riferirsi a Calibrazione utente ($CAL_USER).

HS-0-C5E-USO_35.fm
32 00/0811
Turn-set e Calibrazione - Concetti di Base

3.3.3 Turn-set per assi robot con corsa multigiro


Negli assi robot aventi possibilità di compiere la corsa multigiro, può verificarsi che, in
fase di effettuazione della procedura di Turn-set, le tacche meccaniche per calibrazione
risultino disallineate (tale condizione può verificarsi quando l'asse robot, avendo
compiuto una o più rotazioni complete, si posiziona in un giro meccanico diverso da
quello della calibrazione originale).

Fig. 3.1 - Posizionamento Errato Asse in TURN SET.

Nella condizione sopra specificata, muovendo l'asse per allineare le tacche, sul
terminale compare il seguente messaggio d'errore di posizionamento:
5409 - 02 Ax <num_asse> Arm <num_arm> posizione giunti non
sufficientemente accurata

In caso si verifichino le condizioni sopra specificate, non inviare il comando di Turn-set


(l'asse risulterebbe calibrato in una posizione errata), ma ripristinare la corretta
posizione eseguendo, in alternativa, una delle seguenti procedure:
1. Ruotare l'asse e ricercare per tentativi la posizione di giro asse dove è stata fatta
la calibrazione iniziale. Riprendere l'allineamento delle tacche e dare il comando di
TURN SET. Ripristinata la corretta posizione, sul Terminale si rileva il messaggio
Comando Completato.
oppure in alternativa
2. Effettuare la calibrazione completa dell'asse (vedere Capitolo - Turn-set e
Calibrazione - Procedure Operative nel Manuale di Manutenzione del Robot
interessato)

HS-0-C5E-USO_35.fm
00/0811 33
Turn-set e Calibrazione - Concetti di Base

3.4 Calibrazione
Lo scopo della procedura di calibrazione è quello di stabilire la posizione degli assi di un
robot riferendola ad un robot ideale. Ciò permette di inizializzare le quote degli assi robot
e di rendere universali le variabili posizionali usate nei programmi robot.
Durante la procedura di calibrazione, quando l’asse desiderato è nella posizione di
calibrazione, vengono memorizzati due valori:
– lo scostamento, all’interno di un giro del trasduttore, tra il valore nella posizione
reale e quello nella posizione teorica dell’asse,
– il numero di giri del trasduttore.
Le tacche presenti sui singoli assi permetteranno di eseguire future operazioni di
turn-set di un robot già installato.

Si ricorda che effettuare l’operazione di calibrazione (da Terminale di


Programmazione, pagina SETUP, sottopagina Calib, comando Calibra) avendo
semplicemente posizionato gli assi robot sulle tacche di riferimento, senza l’uso
degli opportuni attrezzi, è un’operazione che non garantisce la necessaria
precisione di posizionamento del robot.

Il recupero della calibrazione (eseguita da COMAU), se necessario, deve essere


effettuato all’atto della prima messa in funzione del robot.

Successivamente, la calibrazione non dovrà più essere eseguita, a meno di un


guasto meccanico che porti alla sostituzione di un componente della catena
cinematica, o a meno di eventuali urti che danneggino la struttura del robot.

Sono di seguito descritti i concetti base relativi a:


– Calibrazione di sistema
– Calibrazione utente

3.4.1 Calibrazione di sistema


Permette di inizializzare le quote degli assi robot, nella posizione di calibrazione di
sistema (posizione di calibrazione predefinita da COMAU Robotics & Final Assembly -
$CAL_SYS).

Per determinare la corretta posizione di calibrazione, devono essere utilizzati


specifici attrezzi (comparatori, supporti, etc.) atti a determinare con la necessaria
precisione la posizione di ogni singolo asse.

3.4.2 Calibrazione utente


La calibrazione utente consente di definire una nuova posizione di calibrazione
diversa da quella di sistema.
Questo tipo di calibrazione (detta comunemente calibrazione fuori ingombro) può
essere impiegato nel caso in cui la posizione di sistema sia difficilmente raggiungibile
una volta che il robot è inserito nell’applicazione finale, e quindi sia necessario definire
una diversa posizione di calibrazione, detta posizione di calibrazione utente
($CAL_USER).

HS-0-C5E-USO_35.fm
34 00/0811
Turn-set e Calibrazione - Concetti di Base

Sarà cura dell’utente realizzare strumenti idonei a verificare il corretto


posizionamento del robot in eventuali ricalibrazioni utente, in particolare per
quanto riguarda la disposizione delle tacche di riferimento.

Fig. 3.2 - Riepilogo Operazioni di Calibrazione e Turn-Set

SALVATAGGIO DELLE COSTANTI DI CALIBRAZIONE


1. NVRAM
2. UD:\SYS nel file.C5G
3. UD:\SYS nel file ASCII di calibrazione ($<SYS_ID>_CAL<num_arm>.PDL)
4. su carta

HS-0-C5E-USO_35.fm
00/0811 35
Movimentazione del robot nello stato Programmazione

4. MOVIMENTAZIONE DEL ROBOT


NELLO STATO PROGRAMMAZIONE

4.1 Introduzione
Nel corso del presente capitolo si farà riferimento al Terminale di Programmazione
come dispositivo mediante il quale comandare movimenti del robot nello stato
programmazione (selettore di stato in posizione T1).

Per qualsiasi ulteriore informazione e/o delucidazione, consultare lo specifico


capitolo USO DEL TERMINALE DI PROGRAMMAZIONE, nel Manuale di Uso
dell’Unità di Controllo C5G.

Segue una descrizione dettagliata di:


– Terne di riferimento
– Terne di riferimento del sistema
– Movimento manuale
– Movimento manuale in modalità WRIST_JNT
– Movimento manuale di un sistema singolo arm
– Movimento manuale di assi ausiliari, slitte e colonne rotanti
– Movimento manuale con configurazione multiarm del Controllore
– Istruzione di movimento in stato di programmazione

4.2 Terne di riferimento


Un sistema di riferimento Cartesiano, o terna di riferimento, è un concetto geometrico
che consente di rappresentare un oggetto nello spazio. Ad esempio, l’angolo di un
tavolo può essere scelto come sistema di riferimento per rappresentare il tavolo stesso.
Lo stesso può essere fatto con un libro appoggiato sul tavolo così come per una pinza
di saldatura montata sulla flangia del robot.
Una trasformazione di coordinate descrive la posizione di un sistema di riferimento
rispetto ad un altro. Essa è descritta da una variabile di tipo POSITION. Ad esempio, se
un tavolo è collocato in una stanza, la sua posizione rispetto alla stanza è espressa dalla
POSITION p_tavolo, che descrive la trasformazione di coordinate tra i due sistemi di
riferimento. La trasformazione di coordinate inoltre può essere utilizzata per calcolare la
posizione di un oggetto rispetto a diversi sistemi di riferimento. Ad esempio, un libro la
cui posizione rispetto all’angolo del tavolo è p_libro avrà la posizione (p_tavolo:p_libro)
rispetto all’angolo della stanza. Il segno (:) rappresenta l’operazione di posizione
relativa, e consente di comporre l’effetto di diverse trasformazioni di coordinate. Per
ulteriori informazioni consultare il manuale PDL2 Programming Language Manual.

4.3 Terne di riferimento del sistema


Il Controllore ha tre variabili di sistema ($BASE, $TOOL e $UFRAME) che consentono

HS-0-C5E-USO_33.fm
36 00/0110
Movimentazione del robot nello stato Programmazione

di descrivere le principali trasformazioni di coordinate. Prima di passare alla spiegazione


di queste trasformazioni, occorre definire alcune terne di riferimento.

Terna mondo – Terna di riferimento dell’officina rispetto alla quale


vengono posizionate le macchine
Terna di base – Terna che indica la base del robot
Terna utente – Terna che indica il pezzo da lavorare
Terna della flangia – Terna che indica la flangia del robot
Terna TCP – Terna che indica la punta dell’utensile

La variabile $TOOL descrive la posizione della terna TCP rispetto alla terna della
flangia; la variabile $BASE descrive la posizione della terna base rispetto alla terna
mondo; infine, la variabile $UFRAME descrive la posizione del pezzo da lavorare
rispetto alla terna mondo.
La trasformazione POS indica il punto appreso P sul quale il TCP andrà a posizionarsi
durante l’esecuzione del programma. Si ricorda che tutte le POSITION apprese sono
definite rispetto alla terna di riferimento utente (definita da $UFRAME, con certi valori di
$BASE e $TOOL).

Attenzione che, modificando $TOOL o $BASE o $UFRAME, la stessa posizione


(POS) corrisponde ad una diversa posizione reale del robot!

Fig. 4.1 - Terne di riferimento del sistema e spostamento delle


coordinate

1. Terna della flangia


2. Terna utensile
3. Punto appreso
4. Terna utente
5. Terna di base
6. Terna mondo

Si immagini ora una penna montata sulla flangia del robot il quale deve scrivere la parola

HS-0-C5E-USO_33.fm
00/0110 37
Movimentazione del robot nello stato Programmazione

COMAU sul tavolo. La trasformazione $BASE definisce il punto il cui si trova la base del
robot, lo spostamento $TOOL indica la penna e lo spostamento $UFRAME indica la
posizione del tavolo.

4.4 Movimento manuale


Lo spostamento manuale dell’arm è necessario in diverse circostanze tra cui
l’apprendimento di posizioni o la manutenzione dell’attrezzatura montata sull’arm. Al
movimento manuale sono dedicati i tasti di colore nero sul Terminale di
Programmazione. Condizioni necessarie per effettuare il movimento sono lo stato di
programmazione, cioè con selettore di stato in posizione T1, e il Dispositivo di
Abilitazione premuto.
Prima di iniziare il movimento è opportuno scegliere la modalità di spostamento e la
velocità.
Dalla Pagina di Motion del Terminale di Programmazione, sottopagina Basic (campo
COORD), è possibile selezionare una delle seguenti modalità di spostamento dell’arm:
– JOINT - modalità giunti. I tasti ‘+/-’ risultano associati a ciascuno degli assi dell’arm
selezionato; i tasti associati agli assi ausiliari eventualmente presenti, seguono
quelli dell’arm (tipicamente sono i tasti 7 e 8 (‘+/-’) ). La pressione di uno dei tasti
determina lo spostamento del corrispondente asse nella direzione positiva o
negativa secondo le direzioni indicate dalle targhette poste sull’arm.
– BASE - modalità di spostamento lineare secondo la terna di riferimento x,y,z del
mondo (la terna di riferimento dell’officina). I primi tre tasti ‘+/-’ (quelli di sinistra)
consentono spostamenti di tipo lineare nella direzione dei tre assi del sistema di
riferimento mondo; i successivi tre tasti ‘+/-’ (quelli di destra) consentono rotazioni
dell’attrezzo intorno agli stessi assi mantenendo invariata la posizione del TCP. Si
ricordi che la terna mondo non è direttamente definita da alcuna variabile di
sistema; infatti è la base del robot che viene rappresentata rispetto al mondo
mediante la variabile $BASE.
– TOOL - modalità di spostamento lineare secondo la terna di riferimento x,y,z
dell’utensile (o terna TCP). I primi tre tasti ‘+/-’ consentono spostamenti di tipo
lineare nella direzione dei tre assi del sistema di riferimento dell’utensile (definito
dalla variabile $TOOL); i successivi tre tasti ‘+/-’ consentono rotazioni dell’attrezzo
intorno agli stessi assi mantenendo invariata la posizione del TCP (punto di lavoro
dell’utensile).
– UFRAME - modalità di spostamento lineare secondo la terna di riferimento x,y,z
utente (ad esempio la terna che descrive il pezzo in lavorazione). I primi tre tasti
‘+/-’ consentono spostamenti di tipo lineare nella direzione dei tre assi del sistema
di riferimento utente (definito dalla variabile $UFRAME); i successivi tre tasti ‘+/-’
consentono rotazioni dell’attrezzo intorno agli stessi assi mantenendo invariata la
posizione del TCP.
La velocità con cui verrà effettuato il movimento manuale può essere selezionata
mediante i tasti +% e -% che agiscono su un valore percentuale visibile sulla barra di
stato del Terminale di Programmazione. Questo valore percentuale è chiamato general
override e non agisce solo sulla velocità di movimento manuale ma su tutti i tipi di
movimento, sia in stato programmazione, sia in automatico.
La velocità di spostamento del TCP, durante il movimento manuale, è sempre inferiore
alla velocità di sicurezza di 250 mm/s anche nella modalità giunti. Nelle modalità
cartesiane (Tool, Uframe, Base) la velocità massima raggiungibile è limitata dalla
variabile di sistema $JOG_SPD_OVR che ha normalmente valore pari al 50% (cioè la

HS-0-C5E-USO_33.fm
38 00/0110
Movimentazione del robot nello stato Programmazione

metà della velocità di sicurezza). Questo valore può essere liberamente modificato per
adattare la normale velocità di spostamento manuale alle singole esigenze di
programmazione.

Si noti che prima di effettuare uno spostamento nelle modalità cartesiane (Tool,
Uframe, Base) è opportuno verificare la corretta definizione dei sistemi di
riferimento ed in particolare la dichiarazione della terna utensile mediante la
variabile $TOOL. Una non corretta descrizione dell’attrezzo determina errori
nell’apprendimento dei punti e non consente di mantenere invariata la posizione
del TCP durante i movimenti di puro orientamento. Un buon metodo per verificare
la correttezza di $TOOL è verificare che il TCP rimanga fisso mentre si cambia
l’orientamento dell’attrezzo.

La procedura per il movimento manuale dei bracci di una cella robotizzata presenta
piccole varianti a seconda della configurazione del controllore di cella. Nei seguenti
paragrafi si presentano maggiori dettagli per alcune situazioni tipiche.

4.5 Movimento manuale in modalità WRIST_JNT


Nella movimentazione in modalità cartesiana (Tol, Usr, Bas) di certi tipi di bracci risulta
più comodo modificare l’orientamento dell’attrezzo in una modalità che non produce una
rotazione intorno ad un asse cartesiano ma fa muovere direttamente gli assi del polso
del robot (gli assi del polso, per un robot a 6 assi, sono gli ultimi tre). Questa prestazione
è tipicamente utile per macchine con meno di 6 assi poiché la loro capacità di ruotare
l’attrezzo è limitata e non è possibile ottenere esattamente quanto richiesto. E’ anche
utile per il passaggio attraverso delle singolarità. Per alcuni tipi di robot la modalità
WRIST_JNT potrebbe non esistere.
Sul Terminale di Programmazione, la modalità è selezionabile dalla Pagina di Motion,
sottopagina Basic, campo COORD. La modalità WRIST_JOINT modifica il
comportamento delle modalità BASE, TOOL e UFRAME; le corrispondenti diciture
cambiano in WR-BASE, WR-TOOL e WR-UFRAME. La modalità Joint rimane
invariata.
La differenza nel movimento del robot riguarda in modo più evidente i tasti dedicati alla
variazione dell’assetto e cioè i tasti 4+/-, 5+/- e 6+/-. Nelle modalità WR-BASE,
WR-TOOL e WR-UFRAME questi tasti sono associati direttamente a ciascun asse del
polso e la pressione di uno di essi muove l’asse corrispondente lasciando invariata la
posizione degli altri assi polso. Questa operazione tuttavia mantiene la posizione del
TCP poiché i primi tre assi si spostano per compensare la variazione dell’orientamento.
Si noti che se il robot possiede solo 2 assi polso (ad esempio il 4 ed il 5) saranno
attivabili solo i tasti 4+/- e 5+/-, mentre solo il 4 sarà utilizzabile per un robot con quattro
assi. Per quanto riguarda i tasti 1X+/-, 2Y+/- e 3Z+/- la differenza è meno appariscente:
lo spostamento è lineare nella direzione richiesta ma l’assetto dell’attrezzo non è
costante durante il percorso poiché gli assi polso non vengono spostati.

4.6 Movimento manuale di un sistema singolo


arm
Per effettuare il movimento manuale di un arm singolo è sufficiente porre il selettore di
stato nella posizione T1, scegliere la modalità più appropriata e premere i tasti ‘+/-’
tenendo premuto il Dispositivo di Abilitazione sul Terminale di Programmazione.

HS-0-C5E-USO_33.fm
00/0110 39
Movimentazione del robot nello stato Programmazione

4.7 Movimento manuale di assi ausiliari, slitte e


colonne rotanti
Gli assi ausiliari possono essere aggiunti ad un arm allo scopo di movimentare
posizionatori di vario genere. Un altro esempio di asse ausiliario è la pinza per saldatura
a punti motorizzata.
Un esempio di gruppo di assi ausiliari integrati è una colonna traslante o un portale.
La movimentazione manuale di un asse ausiliario è normalmente possibile solo in
modalità giunti (JOINT) utilizzando i corrispondenti tasti AUX A/AUX B + e -.
Per impostare l’asse al quale sono associati i tasti AUX A e AUX B, si utilizza l’ambiente
di Motion - sottopagina COOP, nella sezione AUX Jog, sul Terminale di
Programmazione

Per ulteriori informazioni riferirsi al manuale USO dell’Unità di Controllo C5G - cap.
Motion Page - par. Coop (prestazione opzionale), sottopar. AUX JOG).

Nel caso in cui il Terminale di Programmazione sia il WiTP, è inoltre disponibile il tasto
(hardware) AUX.

Per ulteriori informazioni riferirsi al manuale USO dell’Unità di Controllo C5G - cap.
Uso del Terminale di Programmazione - par. WiTP).

Tuttavia, se l’asse ausiliario movimenta una slitta, una colonna o una pinza integrate, è
possibile effettuarne la movimentazione anche nelle modalità cartesiane (BASE, TOOL
e UFRAME) utilizzando gli stessi tasti della modalità JOINT.
La movimentazione manuale (jog) in modalità cartesiana, permette di muovere l’asse
integrato mantenendo ferma la posizione del TCP (quindi i giunti del robot sono liberi di
muoversi e di adattarsi alla movimentazione dell’asse/degli assi ausiliari, in modo tale
che il TCP rimanga nella posizione iniziale).

Si noti che quando si vogliono apprendere posizioni, utilizzando assi ausiliari, è


consigliabile che siano delle XTNDPOS.

4.8 Movimento manuale con configurazione


multiarm del Controllore
Nel caso di configurazione multi-arm del Controllore è necessario scegliere l’arm che si
intende muovere, utilizzando la Pagina di Motion sul Terminale di Programmazione e
controllando il valore corrente sulla barra di stato.
È anche possibile attivare contemporaneamente due bracci appartenenti a due
macchine diverse. Per fare questo è necessario essere in stato di DRIVE OFF e
modificare l’arm corrente, nella Pagina di Motion, sottopagina Basic (campo Arm).
Per la movimentazione manuale di bracci integrati (un caso particolare di sistema
multi-arm) si veda l’apposito Cap. Controllo del movimento.

HS-0-C5E-USO_33.fm
40 00/0110
Movimentazione del robot nello stato Programmazione

4.9 Istruzione di movimento in stato di


programmazione
La programmazione del movimento di un robot richiede una certa conoscenza del
sistema C5G e del linguaggio di programmazione PDL2. Tuttavia, prima ancora di
creare un vero e proprio programma, è possibile effettuare alcuni semplici movimenti
mediante l’esecuzione immediata di una istruzione. Per fare questo il sistema deve
essere in stato di programmazione e deve essere richiamato il comando EXECUTE
(dalla Service Page del Terminale di Programmazione) che consente di eseguire una
istruzione in modo immediato.
Nella sua forma più semplice l’istruzione è composta dalle parole chiave MOVE TO
seguite dalla posizione di destinazione. L’istruzione di movimento più utile nelle prime
fasi di utilizzo è:
MOVE TO $CAL_SYS
Essa produce uno spostamento di ciascun asse fino alla sua posizione di calibrazione.
Nella sua forma più completa è possibile selezionare l’arm che si desidera
movimentare, il tipo di traiettoria e la destinazione.
L’arm si assegna mediante la parola chiave ARM[num_arm] che trova posto subito dopo
la parola MOVE. La definizione può essere omessa se il sistema ha un solo arm (ad
esempio un robot NH4 (6 assi) è un solo arm) oppure se si intende muovere l’arm di
default predefinito dal sistema.
Il tipo di traiettoria può essere di tipo giunti, lineare o circolare ed è descritto
rispettivamente dalle costanti predefinite JOINT, LINEAR e CIRCULAR (consultare il
Cap. Controllo del movimento per maggiori dettagli). Se il tipo di traiettoria non è
indicato, vale il valore definito nella variabile di sistema $MOVE_TYPE che è
normalmente impostato a JOINT dal sistema.
I punti di destinazione sono tipicamente appresi all’interno di un programma ma è
possibile anche assegnarli direttamente nella linea di istruzione del comando
EXECUTE. Si riportano nel seguito due modi di assegnare il punto di destinazione
particolarmente utili per l’installazione e la manutenzione. Un punto di tipo cartesiano
può essere assegnato mediante la built-in POS che ammette, come parametri, le tre
coordinate x, y e z in cui si desidera portare il TCP, tre angoli per l’orientamento
dell’attrezzo ed una stringa detta di configurazione. Tutte le posizioni di questo tipo si
chiamano POSITION e sono riferite sempre ai sistemi di riferimento; la stringa di
configurazione generalmente può essere lasciata vuota. La seguente è una posizione
valida che definisce un punto a 100 mm dal riferimento utente nella direzione z:
POS (0,0,100,0,0,0,’’). Per maggiori dettagli si consultino il Cap. Controllo del
movimento e il manuale PDL2 Programming Language. Un punto di destinazione può
anche definire direttamente la posizione che deve essere raggiunta da ciascun asse
dell’arm (compresi gli assi ausiliari). A questo scopo è sufficiente scrivere i valori
separati da una virgola (nel corretto ordine) e racchiudere l’intera dichiarazione tra
parentesi graffe. Un valore mancante lascia invariata la posizione dell’asse
corrispondente. La seguente è una posizione di tipo giunti che richiede all’asse 1 di
muoversi a 10 gradi dalla posizione di zero, lascia fermo l’asse 2, porta l’asse 3 a -30
gradi e lascia il polso invariato: {10, ,-30}.
Seguono alcuni esempi di istruzioni di movimento valide (per maggiori dettagli si
consulti il manuale PDL2 Programming Language).

HS-0-C5E-USO_33.fm
00/0110 41
Movimentazione del robot nello stato Programmazione

MOVE LINEAR TO POS(100,200,300,0,0,0,’’) movimento lineare dell’arm predefinito su un punto


cartesiano di coordinate x=100, y=200 e z=300 e
terna dell’attrezzo con il medesimo orientamento
della terna utente
MOVE JOINT TO POS(0,0,0,0,180,0,’’) movimento di tipo giunti dell’arm predefinito su un
punto cartesiano di coordinate x=0, y=0 e z=0 e
asse z della terna attrezzo rivolto in direzione
opposta alla z del riferimento utente
MOVE JOINT TO {0,0,0,0,0,0} movimento di tipo giunti dei primi sei assi dell’arm di
default sulle posizioni di zero
MOVE JOINT TO {, , , , ,90} movimento del solo asse 6 dell’arm di default sulla
posizione di 90 gradi
MOVE LINEAR TO {45} movimento lineare che porta l’arm in una posizione
che differisce dalla iniziale per il solo asse 1 che
viene portato a 45 gradi. Durante il movimento
lineare del TCP tutti gli assi dell’arm possono
muoversi
MOVE ARM[1] LINEAR TO POS(100,100,100,0,0,0,’’) movimento lineare dell’arm 1 che porta il TCP alla
data posizione cartesiana rispetto alla terna utente
MOVE ARM[2] JOINT TO POS(0,0,0,0,180,0,’’) movimento giunti dell’arm 2 che porta il TCP alla
data posizione cartesiana rispetto alla terna utente
MOVE ARM[1] LINEAR TO {0,0,0, , ,} movimento lineare che porta il primo arm in una
posizione cartesiana in cui i primi tre assi hanno
valore nullo mentre gli assi del polso ritornano nella
posizione iniziale. Durante il movimento lineare del
TCP tutti gli assi dell’arm possono muoversi
MOVE ARM[2] JOINT TO {-90} movimento del secondo arm che muove il solo asse
1 alla posizione di 90 gradi in direzione negativa
MOVE CIRCULAR TO POS(100,100,0,0,0,0,’’) VIA movimento dell’arm predefinito che unisce il punto
POS(0,200,0,0,0,0,’’) di partenza a POS (100,100,0,0,0,0,’’) con una
circonferenza che passa per POS (0,200,0,0,0,0,’’)

HS-0-C5E-USO_33.fm
42 00/0110
Movimentazione del robot nello stato Programmazione

Prima di effettuare un movimento è opportuno verificare la corretta definizione


dei sistemi di riferimento ed in particolare la dichiarazione della terna utensile e
del riferimento utente ($TOOL, $BASE e $UFRAME). Queste dichiarazioni
possono essere trascurate solo nel caso di movimenti di tipo giunti su punti
giunti come ad esempio la MOVE JOINT TO $CAL_SYS oppure la MOVE TO
{0,90,-100,20,20,200}, oppure MOVE TO JOINTPOS. In tutti gli altri casi le
conseguenze possono essere pericolose con rischi per il personale e
l’attrezzatura. In particolare se la descrizione dell’attrezzo non è corretta ($TOOL
errata) il TCP non raggiungerà il punto desiderato, né eseguirà una corretta
traiettoria lineare o circolare. Per quanto riguarda la descrizione della terna utente
($UFRAME) è importante verificare che, al momento dell’esecuzione del
movimento, essa sia identica a quella attiva nel momento della memorizzazione
del punto. In caso contrario il posizionamento avverrà in modo diverso da quanto
memorizzato. È comunque lasciata libertà di rieseguire le stesse traiettorie con
diversi valori di $UFRAME in quanto questa prestazione è indispensabile per
alcune applicazioni che richiedano in modo specifico lo spostamento dell’intero
programma all’interno dello spazio di lavoro (applicazioni di pallettizzazione).
E’ inoltre indispensabile verificare sempre la corretta definizione del carico
utilizzato per ciò che riguarda la massa, il baricentro e le inerzie. Questi dati
possono essere calcolati automaticamente dal Controllore, dato un Tool (anche
un Tool più un pezzo), applicando la procedura di Autodeterminazione del carico
(prestazione opzionale) presente nell’applicativo di TO_SET (attivabile dal
Terminale di Programmazione WiTP, Pagina di Setup, sottopagina ToolFrame).
La verifica riguarda la corrispondenza dei dati del carico archiviati con le variabili
$TOOL_MASS, $TOOL_CNTR e $TOOL_INERTIA[1..6] correntemente in uso.

HS-0-C5E-USO_33.fm
00/0110 43
Controllo del movimento

5. CONTROLLO DEL MOVIMENTO

5.1 Generalita’
Questo capitolo contiene la descrizione dell’ambiente di movimento del’Unità di
Controllo Robot C5G, eccezion fatta per la movimentazione manuale (tasti di jog del
Terminale di Programmazione) che viene descritta nel Cap. Movimentazione del robot
nello stato Programmazione, e per le prestazioni opzionali che vengono trattate in
successivi capitoli del presente manuale.
In particolare, vengono fornite informazioni sui seguenti argomenti:
– Terne di Riferimento e trasformazione di coordinate
– Traiettoria e Ripristino della traiettoria
– Verifica della posizione
– Controllo della Velocità
– Accelerazione e Decelerazione
– Entrata in soglia (precisione di posizionamento)
– Ripristino del Processo (Process Resume)
– Movimento Continuo
– Sistema con Tool Remoto;
– Movimento integrato;
– Funzionalità di Pallettizzazione (prestazione opzionale)
In questo capitolo sono presenti numerosi riferimenti a variabili predefinite ed istruzioni
del linguaggio PDL2. Per ulteriori informazioni, consultare il manuale del linguaggio
PDL2 Programming Language Manual.

5.2 Terne di Riferimento


Per maggiore chiarezza verrà definita la seguente terminologia.
Un sistema di riferimento Cartesiano, o terna di riferimento, è un concetto geometrico
che consente di rappresentare un oggetto nello spazio. Ad esempio, l’angolo di un
tavolo può essere scelto come sistema di riferimento per rappresentare il tavolo stesso.
Lo stesso può essere fatto con un libro appoggiato sul tavolo così come per una pinza
di saldatura montata sulla flangia del robot.
Una trasformazione di coordinate descrive la posizione di un sistema di riferimento
rispetto ad un altro. Essa è descritta da una variabile di tipo POSITION. Ad esempio, se
un tavolo è collocato in una stanza, la sua posizione rispetto alla stanza è espressa dalla
POSITION p_tavolo, che descrive la trasformazione di coordinate tra i due sistemi di
riferimento. La trasformazione di coordinate inoltre può essere utilizzata per calcolare la
posizione di un oggetto rispetto a diversi sistemi di riferimento. Ad esempio, un libro la
cui posizione rispetto all’angolo del tavolo è p_libro avrà la posizione (p_tavolo:p_libro)
rispetto all’angolo della stanza. Il segno (:) rappresenta l’operazione di posizione
relativa, e consente di comporre l’effetto di diverse trasformazioni di coordinate. Per
ulteriori informazioni consultare il manuale PDL2 Programming Language Manual.

pr-0-0-gpr_04.fm
44 08/1112
Controllo del movimento

5.2.1 Terne di Riferimento del Sistema


L’Unità di Controllo C5G ha tre fondamentali variabili di sistema ($BASE, $TOOL e
$UFRAME) che consentono di descrivere le trasformazioni di coordinate. Prima di
passare alla spiegazione di queste trasformazioni, occorre definire alcune terne di
riferimento.

Terna mondo Terna di riferimento dell’officina rispetto alla quale vengono


posizionate le macchine
Terna di base Terna che indica la base del robot
Terna utente Terna che indica il pezzo da lavorare
Terna della flangia Terna che indica la flangia del robot
Terna TCP Terna che indica la punta dell’utensile

La variabile $TOOL descrive la posizione della terna TCP rispetto a quella della terna
della flangia; la variabile $BASE descrive la posizione della terna base rispetto alla terna
mondo; infine, la variabile $UFRAME descrive la posizione del pezzo da lavorare
rispetto alla terna mondo. La trasformazione POS indica il punto appreso P sul quale il
TCP andrà a posizionarsi durante l’esecuzione del programma. Si ricorda che tutte le
POSITION apprese sono definite rispetto alla terna di riferimento utente (definita da
$UFRAME).
Per una migliore comprensione, si immagini l’angolo della stanza indicato dalla terna
mondo ed un robot posizionato vicino ad un tavolo, come illustrato nella Fig. 5.1 - Terne
di riferimento del sistema e spostamento delle coordinate.

Fig. 5.1 - Terne di riferimento del sistema e spostamento delle


coordinate

Si immagini ora una penna montata sulla flangia del robot il quale debba scrivere la
parola COMAU sul tavolo. La trasformazione $BASE definisce il punto il cui si trova la
base del robot, lo spostamento $TOOL indica la penna e lo spostamento $UFRAME
indica la posizione del tavolo rispetto alla stanza.
Queste terne di sistema semplificano alcune operazioni, ad esempio:

pr-0-0-gpr_04.fm
08/1112 45
Controllo del movimento

– se il robot venisse spostato dalla parte opposta del tavolo, basterebbe definire
nuovamente $BASE e lanciare il programma senza modificare altri punti;
– se la penna fosse sostituita con una penna più grande, basterebbe definire
nuovamente $TOOL e lanciare il programma senza modificare altri punti;
– se il tavolo venisse spostato in un altro punto della stanza, sarebbe sufficiente
definire nuovamente $UFRAME.
Si noti che in alcune applicazioni il valore di $BASE e $UFRAME può essere lasciato a
zero: in questo caso, la terna mondo e la terna relativa al pezzo da lavorare sono poste
alla base del robot e tutte le POSITION apprese sono riferite alla base del robot. Lo
spostamento $TOOL, invece, deve essere sempre definito correttamente in modo da
ottenere il percorso corretto del TCP (Tool Center Point) lungo le traiettorie lineari e
circolari.

5.2.2 Definizione del Sistema di Riferimento di Base


La variabile predefinita $BASE descrive la posizione della base del robot rispetto al
mondo.
E’ utile per compensare il riposizionamento del robot all’interno della cella o per ripetere
lo stesso programma sullo stesso pezzo ma con robot differenti. Inoltre un riferimento di
base ben definito semplifica il calcolo dei punti (POSITION) nella programmazione fuori
linea.
Per calcolare correttamente $BASE si può usare la funzione POS_FRAME nel modo
seguente (il programma deve essere eseguito in ambiente di PROGRAM EDIT e con
modalità di Step impostata su Statement):

PROGRAM setbase
VAR corner, x, xy : POSITION
BEGIN
$UFRAME := POS (0,0,0,0,0,0,")
$TOOL := ... -- correttamente definito
-- Muovere il TCP su tre punti del pezzo mediante i
-- tasti di jog e memorizzare
-- le POSITION corner, x e xy premendo il tasto MOD del TP.
-- Quindi eseguire la seguente istruzione.
$UFRAME := POS_FRAME(corner, x, xy)
END setbase

5.2.3 Definizione dell’attrezzatura montata sulla flangia


I movimenti Cartesiani (ad esempio delle linee rette) vengono definiti solo per il TCP
(Tool Center Point). Ad esempio, quando un movimento del TCP lungo una linea retta
comporta grandi cambiamenti nell’orientamento dell’utensile durante il movimento
stesso, la flangia utensile non si sposterà necessariamente lungo una linea retta.
Quindi, per fare in modo che il movimento Cartesiano avvenga correttamente, occorre
definire sia la posizione che l’orientamento del TCP rispetto alla flangia utensile nel
modo più accurato possibile.
Una corretta impostazione dell’orientamento del TCP è inoltre necessaria per
consentire un’accurata definizione del vettore di avvicinamento utilizzato nelle istruzioni
MOVE NEAR e MOVE AWAY.
La posizione del TCP è stabilita definendo la trasformazione dalla terna di riferimento
del TCP rispetto alla terna posizionata sulla flangia. La variabile predefinita $TOOL è in
grado di definire questa conversione. La posizione della terna di riferimento della flangia

pr-0-0-gpr_04.fm
46 08/1112
Controllo del movimento

è fissa per ciascun modello di robot ed è descritta nel manuale relativo ad ogni singolo
robot. E’ invece responsabilità dell’operatore la definizione della variabile $TOOL per
l’attrezzatura specifica che deve essere montata sulla flangia.
Due serie di parametri utensile definiscono la posizione di $TOOL:
– tre dimensioni dell’utensile definiscono la componente posizionale di $TOOL. Tali
valori, misurati in millimetri, rappresentano lo spiazzamento del centro dell’utensile
(TCP) rispetto al centro della flangia;
– tre rotazioni utensile definiscono la componente orientamento di $TOOL. Tali
valori, misurati in gradi, rappresentano i tre angoli di rotazione di Eulero.

5.2.3.1 Calcolo degli spiazzamenti


Gli spiazzamenti dell’utensile possono essere calcolati sull’arm stesso o teoricamente
in base al disegno dell’utensile. I parametri possono variare a seconda della posizione
di montaggio dell’utensile in quanto devono essere definiti in base all’asse z dell’utensile
(riferimento z Tool), solitamente inteso come vettore di avvicinamento.
Per la misurazione delle dimensioni dell’utensile procedere come segue:

a. Iniziare la misurazione senza utensili montati sul robot. Assegnare il valore zero a
tutti e sei i parametri dell’utensile in $TOOL.

$TOOL := POS (0, 0, 0, 0, 0, 0, ‘ ‘)

b. Individuare le direzioni degli assi x, y e z del tool. (Nota: nel caso del robot SMART,
gli assi della base sono paralleli agli assi del Tool quando il robot è puntato verso
l’alto e gli assi piccoli sono a metà corsa).

c. Portare il robot ad una posizione nota, ad esempio quella di calibrazione (la


Fig. 5.2 - Posizione nota mostra il robot SMART nella posizione nota di
calibrazione). Si noti che per alcuni modelli di robot, la posizione di calibrazione
potrebbe essere diversa da quella illustrata.

d. Controllare la direzione dei tre assi utensile spostando manualmente il robot in


modalità TOOL (jog).

e. Montare l’utensile e misurare gli spiazzamenti (positivi o negativi) del centro


dell’utensile rispetto al centro della flangia su tutti e tre gli assi. Le misurazioni
devono essere effettuate in millimetri.

f. Assegnare i valori misurati a $TOOL mediante la seguente istruzione di


assegnazione PDL2:

$TOOL := POS (x, y, z, e1, e2, e3, ‘ ‘ )

pr-0-0-gpr_04.fm
08/1112 47
Controllo del movimento

Fig. 5.2 - Posizione nota

5.2.3.2 Calcolo degli angoli di rotazione


I valori di rotazione sono indipendenti dagli spiazzamenti e devono in ogni caso essere
ricavati dopo aver assegnato i parametri di spiazzamento dell’utensile. A seconda
dell’applicazione, questi valori non sono indispensabili e possono anche non essere
inseriti: in tal caso l’orientamento dell’utensile si troverà lungo un asse parallelo all’asse
della flangia avente come origine il TCP. I valori di rotazione sono positivi in caso di
rotazione antioraria con l’asse di rotazione rivolto verso l’osservatore. Tali valori
possono essere calcolati secondo i due metodi descritti qui di seguito.

5.2.3.2.1 PRIMO METODO


Calcolare tre rotazioni che allineino l’asse z della flangia con l’asse z dell’utensile. Le
rotazioni, corrispondenti agli angoli di Eulero, sono denominate (e1) rotazione attorno a
z, (e2) rotazione attorno a y e (e3) rotazione attorno a z nuovo.
Si noti che:
– non è possibile ruotare l’asse x;
– la rotazione attorno a y deve essere compresa fra 0 e 180 gradi;
– la rotazione attorno a z deve essere compresa fra -180 e 180 gradi.
Assegnare i valori di rotazione a $TOOL utilizzando l’istruzione di assegnazione PDL 2
seguente:
$TOOL := POS (x, y, z, e1, e2, e3, ‘ ‘)
Qui di seguito sono illustrati alcuni esempi di questi calcoli, dove u indica l’asse z
dell’utensile.

pr-0-0-gpr_04.fm
48 08/1112
Controllo del movimento

Esempio A
L’asse z dell’utensile (u) coincide con l’asse z della
flangia.
In questo caso non è necessario assegnare nessun
valore di rotazione:
(e1, e2, e3) = (0, 0, 0)

Esempio B
L’asse z dell’utensile (u) coincide con l’asse y della
flangia.

Eseguire le seguenti rotazioni:

a. Effettuare una rotazione di 90 gradi attorno all’asse


z.

b. Effettuare una rotazione di 90 gradi attorno all’asse


y.

c. Effettuare una rotazione di 180 gradi attorno al


nuovo asse z.
L’asse z dell’utensile (u) ora coincide con l’asse z della
flangia. Gli angoli di rotazione (e1, e2, e3) sono (90, 90,
180).

pr-0-0-gpr_04.fm
08/1112 49
Controllo del movimento

Esempio C
L’asse z dell’utensile (u) è a 90 gradi rispetto all’asse z
della flangia in direzione -y.
Gli angoli di rotazione sono (-90, 90, 180).

Esempio D
L’asse z dell’utensile (u) è a 90 gradi rispetto all’asse z
della flangia in direzione x.
Gli angoli di rotazione sono (0, 90, 180).

Esempio E
L’asse z utensile (u) è a 90 gradi rispetto all’asse z della
flangia in direzione -x.
Gli angoli di rotazione sono (180, 90, 180).

5.2.3.2.2 SECONDO METODO


Utilizzando i tre comandi per la rotazione presenti sul Terminale di Programmazione si
sposta:
– l’asse z del Tool in modo che sia parallelo e conforme con l’asse z della terna
utente;
– l’asse destinato a diventare l’asse x del Tool in modo che sia parallelo e conforme
all’asse x della terna utente.
Dopo questi due movimenti l’asse y del Tool finale risulta parallelo all’asse y della terna
utente.
I parametri angolari alfa, beta, epsilon possono essere letti da Terminale di
Programmazione, Motion Page - sottopagina Generale - colonna ARM_POS
(comando di sistema: DAP).
I parametri utensile sono dati da:
– rotazione 1 = 180 gradi - epsilon (-360 gradi);
– rotazione 2 = beta;
– rotazione 3 = 180 gradi - alfa (-360 gradi).
(Il termine (-360 gradi) dovrà essere aggiunto solo se il valore di rotazione supera
i 180 gradi).

pr-0-0-gpr_04.fm
50 08/1112
Controllo del movimento

I valori angolari da inserire sono ricavati arrotondando i valori calcolati (solitamente


l’arrotondamento è a 0, 90 o 180 gradi).

Il centro dell’utensile è calcolato sul punto di chiusura dell’utensile. Da un punto


di vista logico, qualsiasi flangia di sicurezza appartiene all’utensile e quindi ne
aumenta lo spiazzamento in z.

5.2.3.3 Definizione del Sistema di Riferimento Utente


La variabile predefinita $UFRAME può essere usata per descrivere la posizione del
pezzo in lavorazione rispetto al riferimento mondo. E’ utile per compensare il
riposizionamento del pezzo o per ripetere lo stesso programma su pezzi in differenti
posizioni. Inoltre un riferimento utente ben definito semplifica il calcolo dei punti
(POSITION) nella programmazione fuori linea.
Per calcolare correttamente $UFRAME si può usare la funzione POS_FRAME nel modo
seguente (il programma deve essere eseguito in ambiente di PROGRAM EDIT e con
modalità di Step impostata su Statement):

PROGRAM setframe
VAR corner, x, xy : POSITION
BEGIN
$UFRAME := POS(0,0,0,0,0,0,")
$TOOL := ... -- correttamente definito
-- Muovere il TCP su tre punti del pezzo mediante i tasti
-- di jog e memorizzare le POSITION corner, x e xy premendo
-- il tasto MOD del TP.
-- Quindi eseguire la seguente istruzione.
$UFRAME := POS_FRAME(corner, x, xy)
END setframe

5.3 Traiettoria
Rappresenta un movimento dell’Arm da una posizione iniziale a una posizione finale.
La traiettoria di un movimento fra due posizioni apprese viene generata mediante
interpolazione di diversi gruppi di variabili dai loro valori iniziali sulla posizione di
partenza fino ai rispettivi valori finali, sulla posizione finale. La variabile predefinita
$MOVE_TYPE indica il tipo di interpolazione che deve essere utilizzata ed è una
variabile specifica del programma (una per ciascun programma attivo). A questa
variabile è possibile assegnare le costanti predefinite JOINT, LINEAR o CIRCULAR.
JOINT è il valore di default di $MOVE_TYPE. La traiettoria può anche essere
esplicitamente espressa nella istruzione di movimento, associando le parole riservate
JOINT, LINEAR o CIRCULAR all’istruzione MOVE.
Le traiettorie si suddividono in:
– traiettoria articolare : GIUNTI
– traiettoria lineare: LINEARE
– traiettoria circolare: CIRCOLARE.

5.3.1 Interpolazione Giunti


Nel caso di interpolazione giunti ($MOVE_TYPE := JOINT o MOVE JOINT TO), gli
angoli di ogni giunto dell’arm vengono interpolati linearmente dai valori iniziali a quelli

pr-0-0-gpr_04.fm
08/1112 51
Controllo del movimento

finali. Gli assi si muovono partendo insieme ciascuno dalla propria posizione iniziale e
arrivando insieme ciascuno alla relativa posizione finale. Il percorso seguito dal TCP
(centro dell’utensile), sebbene ripetibile, non è prevedibile.
I movimenti fra due posizioni mediante interpolazione giunti sono sempre possibili.

5.3.2 Interpolazione Lineare


Durante l’interpolazione lineare ($MOVE_TYPE := LINEAR o MOVE LINEAR TO), il
centro dell’utensile (TCP) si sposta lungo una linea retta dalla posizione iniziale a quella
finale. L’orientamento dell’attrezzo varia anch’esso dalla posizione iniziale a quella
finale secondo la modalità definita dalla variabile $ORNT_TYPE. Questa variabile
specifica del programma può assumere i valori espressi dalle seguenti costanti
predefinite: RS_WORLD, RS_TRAJ, EUL_WORLD, WRIST_JNT.
Per ulteriori informazioni fare riferimento al par. 5.3.4 Evoluzione dell’orientamento
durante movimenti Lineari o Circolari a pag. 52, nel presente capitolo.

5.3.3 Interpolazione Circolare


Nel caso dell’interpolazione circolare ($MOVE_TYPE := CIRCULAR o MOVE
CIRCULAR TO), il centro dell’utensile segue una traiettoria ad arco dalla posizione
iniziale a quella finale. Per definire l’arco occorre specificare una posizione aggiuntiva,
la posizione di VIA. Di questa posizione viene utilizzata solo la localizzazione della
posizione; il suo assetto non influisce sul movimento.
Come per l’interpolazione lineare, la variabile predefinita $ORNT_TYPE indica il tipo di
evoluzione dell’assetto che deve essere effettuata.

5.3.4 Evoluzione dell’orientamento durante movimenti Lineari o


Circolari
L’orientamento dell’attrezzo durante i movimenti lineari e circolari, evolve dalla
posizione iniziale a quella finale secondo la modalità indicata dalla variabile
$ORNT_TYPE. Questa variabile specifica del programma può assumere i seguenti
valori:
– RS_WORLD (due angoli rispetto al riferimento mondo)
L’evoluzione dell’assetto viene effettuata interpolando in modo lineare i valori di
due angoli di rotazione: scivolamento e avvitamento dell’utensile. Lo scivolamento
dell’utensile (TOOL) è l’angolo attorno alla perpendicolare comune fra il vettore di
avvicinamento iniziale e il vettore di avvicinamento finale. L’avvitamento
dell’utensile è rappresentato dall’angolo attorno al vettore di avvicinamento dalla
posizione iniziale a quella finale. L’evoluzione dell’assetto è riferita al sistema di
riferimento utente indipendentemente dalla traiettoria.
RS_WORLD è il valore di default per $ORNT_TYPE.
– RS_TRAJ (due angoli rispetto alla traiettoria)
L’interpolazione dell’orientamento è eseguita con lo stesso criterio della modalità
RS_WORLD ma gli angoli di rotazione ed avvitamento sono riferiti alla traiettoria.
Questo è particolarmente utile durante le traiettorie circolari con angolo al centro
maggiore di 180 gradi quando si vuole mantenere un assetto costante rispetto alla
traiettoria. Durante i movimenti lineari l’evoluzione dell’assetto è la stessa di
RS_WORLD.
– EUL_WORLD (a tre angoli)
L’evoluzione dell’assetto viene effettuata interpolando in modo lineare i valori dei

pr-0-0-gpr_04.fm
52 08/1112
Controllo del movimento

tre angoli di rotazione di Eulero: E1, E2 e E3.


– WRIST_JNT (giunti polso)
Per l’evoluzione dell’assetto, si utilizza in questo caso una combinazione fra
l’interpolazione giunti e l’interpolazione lineare. Ciò consente lo spostamento
dell’utensile lungo una linea retta, mentre i giunti del polso sono interpolati in
coordinate giunti. Gli orientamenti iniziale e finale vengono utilizzati come posizioni
apprese, ma a causa dell’interpolazione giunti, l’evoluzione durante il movimento,
sebbene ripetibile, non è prevedibile. Ad esempio, utilizzando EUL_WORLD
oppure RS_WORLD, se l’orientamento iniziale e quello finale sono uguali,
l’orientamento dell’utensile non subirà modifiche durante il movimento. Usando
WRIST_JNT, invece, ciò non è sempre garantito. Tuttavia, grazie a questa
modalità di evoluzione dell’assetto è possibile ottenere un movimento più regolare
in prossimità delle singolarità del polso.

5.3.5 Flag di Attitudine durante movimentI Lineari e Circolari


Durante traiettorie Cartesiane (LINEARI e CIRCOLARI) I flag di attitudine del punto
iniziale e finale di un movimento devono corrispondere altrimenti il movimento non verrà
eseguito. Con flag di attitudine si intende la parte S, E, W, A, B di una posizione
cartesiana (consultare il manuale PDL2 Programming Language Manual per ulteriori
dettagli).
– S indica che il WCP (Wrist Center Point) si trova nella zona retrostante rispetto al
piano definito dal primo e dal secondo asse;
– E indica che il WCP è nella zona retrostante rispetto al prolungamento del secondo
asse;
– W indica che il valore del quinto asse è negativo.
– A indica che il TCP (Tool Center Point) è nella zona retrostante rispetto al
prolungamento del secondo asse;
– B indica che il TCP (Tool Center Point) si trova nella zona retrostante rispetto al
piano definito dal primo e dal secondo asse.
L’unica eccezione è quella del passaggio sopra ad un punto di singolarità, in cui il flag
W viene invertito dal software di sistema. Esiste comunque un modo per consentire
l’esecuzione del movimento anche nel caso in cui i flag non corrispondano: occorre
impostare la variabile predefinita $CNFG_CARE a FALSE ed il flag del punto finale
verrà assunto pari a quello del punto iniziale.
Questa impostazione è utile principalmente nel caso in cui si mescolino movimenti che
utilizzano variabili di tipo JOINTPOS e variabili di tipo POSITION i cui valori siano stati
direttamente impostati da programma PDL2 e non appresi tramite il tasto REC del
Terminale di Programmazione.
Nel caso in cui il punto iniziale sia una JOINTPOS, non si conosce il valore della stringa
di configurazione e quindi risulta utile impostare al valore FALSE la variabile
$CNFG_CARE.

5.3.6 Flag di Turn e strada minima


I flag di turn (T1, T2, T3, T4) sono parte della stringa di configurazione e sono associati
a quegli assi dotati di capacità multi-turn, cioè che possono ruotare per più di 360 gradi
($STRK_END_P[asse] - $STRK_END_N[asse] > 360) (consultare anche il manuale
PDL2 Programming Language Manual per ulteriori dettagli).
Una traiettoria cartesiana (LINEARE o CIRCOLARE) segue solitamente il cammino più

pr-0-0-gpr_04.fm
08/1112 53
Controllo del movimento

breve per i giunti, quindi può succedere che la stringa di configurazione del punto finale
raggiunto differisca da quella presente nell’istruzione di movimento. In tal caso il sistema
esegue comunque il movimento, a meno che la variabile predefinita $TURN_CARE sia
impostata a TRUE; in tal caso un messaggio di errore segnalerà la differenza sul
numero di giri.
Può succedere che variabili di tipo POSITION, apprese con un certo $UFRAME,
abbiano un numero di giri diverso dopo aver cambiato $UFRAME. Se ad esempio un
punto P0 viene appreso con l’asse 4 a 170 gradi e P1 con l’asse 4 a 179 gradi, nessun
numero di giri comparirà nelle variabili posizionali (stringa di configurazione vuota ‘’‘’).
Potrebbe però succedere che, cambiando leggermente $UFRAME i giunti associati a
P0 e P1 cambino. Ad esempio P0 potrebbe avere ora l’asse 4 a 172 gradi e P1 con
l’asse 4 a 181 gradi. In tal caso, il cammino più breve è da 172 a 181 gradi ma la
posizione P1, per muovere l’asse 4 a 181 gradi dovrebbe avere il flag T1:1. P1 ha però
una stringa di configurazione priva di flag di turn, quindi, per evitare l’errore sulla MOVE
LINEAR da P0 a P1 con un nuovo $UFRAME, la variabile predefinita $TURN_CARE
dovrà essere impostata a FALSE.
Una traiettoria giunti (JOINT) o un movimento cartesiano con evoluzione WRIST_JNT,
effettuata su punti dichiarati come POSITION, determina un cammino che segue
l’evoluzione dei giunti, senza considerare la strada minima o massima. Per far
percorrere la strada minima (<180 gradi), è necessario impostare la variabile
$JNT_MTURN a FALSE.
Da notare che la variabile $JNT_MTURN non ha effetto in un movimento giunti su punti
dichiarati come JOINTPOS.

5.4 Verifica della posizione


Esistono due prestazioni, dette ON TRAJECTORY e ON POS, che consentono di
verificare la posizione del robot rispetto alla traiettoria programmata o a posizioni
predefinite. Questo può essere utile in particolar modo per il monitoraggio della linea da
dispositivi esterni, quali un PLC. Tramite opportune chiamate a built-in routine
ON_TRAJ_SET, ON_JNT_SET, ON_POS_SET, ON_TRAJ_DIG, ON_JNT_DIG,
ON_POS_DIG è infatti possibile definire dei bit di porte analogiche (ad esempio
$WORD) che verranno impostati ad 1 durante il movimento del robot lungo la traiettoria
programmata o al raggiungimento di una posizione predefinita.

5.4.1 Prestazione di On Trajectory


Questa prestazione, sempre abilitata, consente di capire, in qualsiasi momento, se il
robot si trova sulla traiettoria programmata del programma PDL2 in esecuzione.
$CRNT_DATA[arm].OT_JNT e $CRNT_DATA[arm].OT_POS indicano la posizione del
robot lungo la traiettoria programmata. La variabile $CRNT_DATA[arm].OT_JNT
include l’informazione relativa agli assi ausiliari eventualmente presenti.
$CRNT_DATA[arm].OT_COARSE vale TRUE quando il robot si trova sulla traiettoria
programmata e FALSE in caso contrario.
Lo scostamento tra la posizione corrente del robot e la posizione
$CRNT_DATA[arm].OT_POS viene calcolato, per ragioni di sicurezza, considerando la
soglia in millimetri rispetto alla flangia ($ARM_DATA[arm].OT_TOL_DIST) e la soglia in
gradi rispetto all’orientamento della flangia ($ARM_DATA[arm].OT_TOL_ORNT). In
caso di presenza di un tool molto lungo (ad esempio 1 metro in direzione Z del tool) e di
robot fermo in corrispondenza di $CRNT_DATA[arm].OT_POS, basta una piccola
rotazione del tool per muovere di molto la flangia, rendendo così la variabile
$CRNT_DATA[arm].OT_COARSE impostata a FALSE. In caso di assi ausiliari rotanti

pr-0-0-gpr_04.fm
54 08/1112
Controllo del movimento

viene utilizzata la soglia $ARM_DATA[arm].OT_TOL_ORNT. In caso di assi ausiliari


traslanti viene utilizzata la soglia $ARM_DATA[arm].OT_TOL_DIST.
Se l’arm presenta assi ausiliari integrati, nel caso di jog in riferimento giunti, tutti gli assi
abilitati, compresi gli ausiliari, contribuiscono alla modifica della posizione cartesiana
con conseguente uscita dalla traiettoria ($CRNT_DATA[arm].OT_COARSE = FALSE);
in jog cartesiano (Base, Tool, etc.) il movimento dell’asse ausiliare viene compensato
dagli assi del robot per il mantenimento del punto cartesiano, ma poichè l’intera
configurazione degli assi dell’arm risulta modificata, anche in questo caso viene
decretata l’uscita dalla traiettoria ($CRNT_DATA[arm].OT_COARSE = FALSE),
estendendo il concetto di posizione in traiettoria alla posizione estesa.
Se l’arm presenta assi ausiliari non integrati, nel caso di jog in riferimento giunti l’asse
non modifica la posizione cartesiana, ma la configurazione complessiva dell’arm risulta
modificata, quindi viene decretata l’uscita dalla traiettoria
($CRNT_DATA[arm].OT_COARSE = FALSE). In jog in riferimento cartesiano l’asse
ausiliare non può essere mosso e l’arm si comporta analogamente al caso di robot 6
assi.
Risulta comunque sempre possibile il ritorno sulla traiettoria
($CRNT_DATA[arm].OT_COARSE = TRUE) mediante l’esecuzione di un movimento
sulle variabili $CRNT_DATA[arm].OT_JNT (o $CRNT_DATA[arm].OT_POS, per robot
senza assi ausiliari).
Esempio:
MOVE TO $CRNT_DATA[arm].OT_JNT
o
MOVE TO $CRNT_DATA[arm].OT_POS
WITH $TOOL=$CRNT_DATA[arm].OT_TOOL,
WITH $UFRAME = $CRNT_DATA[arm].OT_UFRAME
ENDMOVE
La funzionalità non cambia in presenza di Remote Tool. La disattivazione del
programma comporta il reset della variabile $CRNT_DATA[arm].OT_COARSE.
Vd. Tab. 5.1 - On Pos e On Trajectory
Questa prestazione non è disponibile nelle seguenti tipologie di macchine: robot con
compensazione cinematica attiva (file .ROB in UD), robot con conveyor tracking,
movimento cooperativo abilitato.

Interrompendo l’esecuzione di una istruzione NON di movimento di un


programma aperto in ambiente di editing, il flag $CRNT_DATA[arm].OT_COARSE
rimane impostato a TRUE anche se l’istruzione interrotta è compresa tra due
movimenti raccordati in FLY. Se l’utente poi sposta il cursore su una certa
istruzione da cui continuare l’esecuzione del programma saltando dei movimenti
in esso programmati, potrebbe anche danneggiare il robot e/o causare danni alla
partenza del ciclo di lavoro (eseguita in Remoto o in Locale). Tale responsabilità
è demandata all’utente che in quel momento opera e controlla la cella.

Per ulteriori dettagli relativi alle variabili di sistema $OT_xxx ed alla built-in routine
ON_TRAJ_SET si rimanda al manuale PDL2 Programming Language Manual.

5.4.2 Prestazione di On Position (ON POS)


Questa prestazione permette di sapere, in ogni momento, se il Tool Center Point (TCP)
del robot si trova in corrispondenza di una certa posizione predefinita quale la posizione
Home, la posizione di ravvivatura elettrodi (Tip-dressing) per applicazione di SPOT, la

pr-0-0-gpr_04.fm
08/1112 55
Controllo del movimento

posizione di manutenzione (Service). Le posizioni predefinite devono essere


memorizzate:
– nel campo $OP_JNT nel caso in cui anche gli assi ausiliari, o alcuni di essi (vedi
variabile predefinita $ON_POS_TBL[indice].OP_JNT_MASK), debbano essere
controllati;
– nel campo $OP_POS nel caso in cui sia coinvolta la sola posizione cartesiana.
Questa informazione è principalmente utilizzata per comunicare a dispositivi esterni,
quale un PLC di linea, che il robot si trova nelle suddette posizioni.
Per rendere operativa la prestazione di On Pos, il programma applicativo deve
effettuare, ad ogni ripartenza dell’Unità di Controllo, la seguente sequenza di operazioni
nell’ordine indicato:
– Inizializzare i campi predefiniti, aventi prefisso OP_, della tabella $ON_POS_TBL.
– Eseguire la built-in routine ON_JNT_SET o ON_POS_SET o ON_JNT_DIG o
ON_POS_DIG per definire la porta ed il bit da assegnare al raggiungimento delle
posizione notevole.
– Eseguire la ON_POS(ON) per abilitare la prestazione che rimarrà abilitata fino alla
successiva ON_POS(OFF) sullo stesso elemento della $ON_POS_TBL o alla
successiva ripartenza del sistema.
Per ulteriori dettagli relativi alle variabili di sistema $ON_POS_TBL e $OP_xxx, alle
built-in routine ON_JNT_SET, ON_POS_SET, ON_JNT_DIG, ON_POS_DIG e
ON_POS, agli eventi di CONDITION si rimanda al manuale PDL2 Programming
Language Manual.
Questa prestazione è disabilitata nel caso di: robot con compensazione cinematica
attiva (file .ROB) in UD, robot con cooperative o conveyor tracking abilitati.

5.4.2.1 Esempio di On Pos e On Trajectory


Per riassumere il comportamento del sistema, supponiamo che un programma in corso
di esecuzione venga fermato:
– in una configurazione in cui l’arm si trova in traiettoria;
– su una position predeterminata;
– su una joint position predefinita per tutti gli assi dell’arm (la maschera dei giunti
sulla ON_JNT_SET corrisponda alla $JNT_MASK).
Si supponga di muovere l’arm, in modalità jog, di quantità superiori alla soglia prefissata:

Tab. 5.1 - On Pos e On Trajectory


On Trajectory On Pos con JOINTPOS On Pos con POSITION
($OP_JNT) ($OP_POS)
Valore di: Valore di: Valore di:
$CRNT_DATA[ ].OT_COARSE $ON_POS_TBL[ ].OP_REACHED $ON_POS_TBL[ ].OP_REACHED
Stato iniziale TRUE TRUE TRUE
Move giunti di un asse
FALSE FALSE FALSE
del robot
Move giunti di un asse
FALSE FALSE FALSE
ausiliario integrato
Move giunti di un asse
FALSE FALSE TRUE
ausiliario non integrato

pr-0-0-gpr_04.fm
56 08/1112
Controllo del movimento

Tab. 5.1 - On Pos e On Trajectory (Continua)


Move in riferimento
cartesiano di X, Y, Z FALSE FALSE FALSE
e/o E1, E2, E3
Move in riferimento
cartesiano dell’asse FALSE FALSE TRUE
ausiliario integrato
Disattivazione del
programma di FALSE TRUE TRUE
movimento

5.5 Controllo della Velocità


La velocità massima o costante del movimento viene controllata mediante variabili
predefinite alcune delle quali sono comuni per l’intero sistema, altre invece sono
specifiche del programma, altre ancora sono specifiche dell’arm. Vengono usati due tipi
di controllo della velocità:
– valori assoluti di velocità o valori limite, misurati nelle unità di misura di velocità
come radianti o metri al secondo;
– percentuali (override) che agiscono sui valori assoluti di velocità.
Nel caso del sistema C5G, l’utente può controllare non solo la velocità, ma anche
l’accelerazione e la decelerazione; per tutte esistono controlli indipendenti sui valori
assoluti e sugli override.
I valori assoluti e percentuali sull’accelerazione e decelerazione sono descritti nel
par. 5.6 Accelerazione e Decelerazione a pag. 62 presente in questo capitolo.

5.5.1 Override sulla velocità


Valori percentuali relativi alla velocità del movimento modulano i valori di velocità
assoluti (descritti nel par. 5.5.2 Controllo della Velocità Cartesiana a pag. 58 di questo
capitolo).
I valori di velocità percentuale di movimentazione validi per tutti i movimenti sono i
seguenti:
– $GEN_OVR consente ad un operatore di modificare contemporaneamente i valori
di accelerazione, velocità e decelerazione dei programmi di Movimento. Poichè ciò
influisce sui valori di accelerazione, velocità e decelerazione in modo coordinato,
le traiettorie vengono in genere mantenute (a meno degli errori di inseguimento
servo) quando questa variabile viene modificata.
$GEN_OVR è una variabile di tipo INTEGER.
E’ comune a tutto il sistema e può essere modificata dal Terminale di
Programmazione. I programmi PDL2 possono accedervi in sola lettura.
– $ARM_OVR consente la modifica, da programma, dei valori di accelerazione,
velocità e decelerazione relativi ad un arm specifico. Poichè ciò influisce sui valori
di accelerazione, velocità e decelerazione in modo coordinato, le traiettorie
vengono in genere mantenute (a meno degli errori di inseguimento servo) quando
questa variabile viene modificata.
$ARM_OVR è un campo di tipo INTEGER appartenente al vettore di strutture
$ARM_DATA [ ] comune all’intero sistema. Esiste un elemento per ciascun arm e
il campo ARM_OVR ha un valore di default di 100%.
Si noti che se durante le transizioni fra movimenti continui si considera più
importante mantenere costante la velocità piuttosto che lasciare invariata la

pr-0-0-gpr_04.fm
08/1112 57
Controllo del movimento

traiettoria al variare degli override, è opportuno utilizzare le variabili


$ARM_SPD_OVR o $PROG_SPD_OVR invece di $ARM_OVR (i valori
dell’accelerazione e della decelerazione non saranno modificati con la riduzione di
questi override di velocità).
Consultare il par. 5.10.1 Traiettoria durante il movimento continuo a pag. 73 in
questo capitolo.
– $ARM_SPD_OVR consente la modifica, da programma, dei valori di velocità
relativi ad un arm specifico senza influenzare i valori di accelerazione e di
decelerazione. Ciò significa che il profilo delle traiettorie per i movimenti in FLY
potrebbe subire delle variazioni qualora vengano apportate delle modifiche a
questa variabile.
Consultare il par. 5.10.1 Traiettoria durante il movimento continuo a pag. 73 in
questo capitolo.
$ARM_SPD_OVR è un campo di valori INTEGER appartenente alla matrice di
elementi comune all’intero sistema, $ARM_DATA[ ].
Esiste un elemento per ciascun arm e il valore di default per il campo
ARM_SPD_OVR è di 100%.
– $PROG_SPD_OVR consente la modifica, da programma, della velocità per tutti i
movimenti di un programma senza modificare i valori di accelerazione e di
decelerazione. Ciò significa che il profilo delle traiettorie per i movimenti continui
potrebbe subire delle variazioni qualora vengano apportate delle modifiche a
questa variabile.
E’ un valore specifico del programma, con un default del 100%.
L’override totale sulla velocità (total speed override) per un qualsiasi movimento di
un arm particolare viene determinata nel modo seguente:

total speed override[arm] = $GEN_OVR * $ARM_DATA[arm].ARM_OVR *


$ARM_DATA[arm].ARM_SPD_OVR * $PROG_SPD_OVR
$GEN_OVR e $ARM_OVR hanno effetto durante il movimento stesso. Ciò significa che
in caso di modifica di una delle variabili durante l’esecuzione del movimento, si avrà una
conseguente accelerazione o decelerazione del movimento stesso. Al contrario, una
modifica alle variabili $PROG_SPD_OVR o $ARM_SPD_OVR avrà effetto solamente
all’istruzione di movimento successiva a quella in corso, nell’ambito del programma a
cui sono riferite.
Per una descrizione di altri effetti di queste variabili, consultare anche il par. 5.10.1
Traiettoria durante il movimento continuo a pag. 73 in questo capitolo.
$ARM_SPD_OVR, $ARM_OVR ed altre variabili descritte in questo capitolo sono campi
appartenenti al vettore di struttura $ARM_DATA che è comune a tutto il sistema. I
dettagli di tale struttura e il modo in cui fare riferimento ai vari campi che essa contiene
sono forniti nel capitolo relativo alle variabili predefinite del manuale PDL2
Programming Language Manual.

5.5.2 Controllo della Velocità Cartesiana


In condizioni operative normali, la velocità del movimento Cartesiano (lineare o
circolare), con qualsiasi modalità di evoluzione dell’assetto, è controllata mediante due
variabili predefinite.
– $LIN_SPD_LIM definisce la velocità limite di traslazione lineare. E’ una variabile
per ciascun Arm, il cui valore dipende dal Robot e non è modificabile dall’utente.
Si tratta di un campo di tipo REAL appartenente al vettore comune all’intero
sistema, $ARM_DATA[ ], il cui valore di default dipende dalla macchina

pr-0-0-gpr_04.fm
58 08/1112
Controllo del movimento

(normalmente: 1,5 m/s).


– $ROT_SPD_LIM definisce la velocità limite di rotazione. E’ una variabile per
ciascun Arm, il cui valore dipende dal Robot e non è modificabile dall’utente.
Si tratta di un campo di tipo REAL appartenente al vettore comune all’intero
sistema, $ARM_DATA[ ], composto da una struttura per ciascun arm, il cui valore
di default dipende dalla macchina.
La velocità effettiva del movimento relativa ad un arm specifico si determina calcolando
il valore massimo dei tempi di movimento per ciascuna rotazione possibile in base a
$ROT_SPD_LIM e il tempo di traslazione del TCP (centro utensile) in base a
$LIN_SPD_LIM. Ad esempio, usando un controllo di assetto RS_WORLD, vengono
eseguite tre valutazioni:
– tempo impiegato dal vettore di avvicinamento per muovere dall’assetto iniziale
all’assetto finale in base a $ROT_SPD_LIM;
– tempo impiegato dall’avvitamento intorno al vettore di avvicinamento per muovere
dall’orientamento iniziale a quello finale;
– tempo impiegato dal TCP per traslare dalla sua posizione iniziale alla sua
posizione finale in base a $LIN_SPD_LIM.
La componente del movimento che impiega più tempo per muovere dalla posizione
iniziale a quella finale, si sposterà in base al limite di velocità programmato, ridotto
dall’override totale. Tutte le altre componenti si sposteranno ad una velocità inferiore ai
limiti programmati in modo che tutti i movimenti abbiano inizio e si concludano assieme.
Se una delle rotazioni richiede un tempo maggiore, verrà utilizzata la variabile
$ROT_SPD_LIM. Se invece è la traslazione a richiedere un tempo maggiore, verrà
utilizzata la variabile $LIN_SPD_LIM. La componente che si sposta secondo il limite di
velocità programmato è denominata componente “a massimo stress” e si sposta alla
“velocità di massimo stress”, o SMS (“Speed of Maximum Stress”).
Mediante l’uso di questa terminologia, si definisce la velocità Cartesiana (cartesian
speed) di un arm specifico, come indicato qui di seguito:

cartesian speed[arm] = SMS[arm] * total speed override[arm]


dove SMS[arm] è $ARM_DATA[arm].ROT_SPD_LIM, se è la rotazione a richiedere il
tempo maggiore, oppure $ARM_DATA[arm].LIN_SPD_LIM, nel caso sia la traslazione
ad impiegare un tempo superiore (vedere il par. 5.5.1 Override sulla velocità a pag. 57
per una definizione di “velocità percentuale di movimentazione totale”).

5.5.2.1 Opzioni del controllo della velocità cartesiana


Il procedimento con il quale si determina la componente che dovrà controllare la velocità
Cartesiana è denominato prepianificazione e si verifica immediatamente prima
dell’effettivo svolgimento del movimento (cioè prima di ogni MOVE). E’ possibile forzare
il prepianificatore ad utilizzare una particolare componente del movimento mediante la
variabile predefinita $SPD_OPT; si tratta di una variabile specifica del programma
(ciascun programma può avere il proprio valore) alla quale possono essere assegnate
le seguenti costanti predefinite:
– SPD_CONST è il valore di default. Sposta l’arm ad una velocità costante mentre il
valore SMS viene scelto dal prepianificatore.
– SPD_JNT sposta l’arm lungo la traiettoria Cartesiana richiesta, alla massima
velocità di almeno un giunto; il centro dell’utensile non si sposterà ad una velocità
costante.

pr-0-0-gpr_04.fm
08/1112 59
Controllo del movimento

– SPD_LIN trasla il centro dell’utensile in base alla $LIN_SPD richiesta, forzando la


componente di rotazione a spostarsi in modo coordinato.
E’ da notare che in questo caso $LIN_SPD sostituisce $LIN_SPD_LIM nel calcolo
della velocità. $LIN_SPD E’ un campo di valori REAL appartenente al vettore di
struttura, $ARM_DATA.
– SPD_ROT ($ORNT_TYPE=RS_WORLD) ruota l’utensile in base alla $ROT_SPD
richiesta, forzando la componente di traslazione a spostarsi in modo coordinato.
E’ da notare che in questo caso $ROT_SPD sostituisce $ROT_SPD_LIM nel
calcolo della velocità. $ROT_SPD è un campo di tipo REAL appartenente a
$ARM_DATA.
– SPD_SPN ($ORNT_TYPE=RS_WORLD) ruota il vettore di avvicinamento intorno
al proprio asse con $ROT_SPD, forzando tutte le altri componenti a spostarsi in
modo coordinato. (Vedere SPD_ROT per una spiegazione di $ROT_SPD)
– SPD_AZI ($ORNT_TYPE=EUL_WORLD) ruota la componente di azimuth con
$ROT_SPD, forzando tutte le altre componenti a spostarsi nello stesso momento.
(Vedere SPD_ROT per una spiegazione di $ROT_SPD)
– SPD_ELV ($ORNT_TYPE=EUL_WORLD) ruota la componente di elevazione con
$ROT_SPD, forzando tutte le altre componenti a spostarsi nello stesso momento.
(Vedere SPD_ROT per una spiegazione di $ROT_SPD)
– SPD_ROLL ($ORNT_TYPE=EUL_WORLD) ruota il vettore di avvicinamento
attorno al proprio asse con $ROT_SPD, forzando tutte le altre componenti a
spostarsi nello stesso momento. (Vedere SPD_ROT per una spiegazione di
$ROT_SPD)
– SPD_FIRST ($ORNT_TYPE=WRIST_JNT) ruota il primo giunto del polso con
$ROT_SPD, forzando tutte le altre componenti a spostarsi nello stesso momento.
(Vedere SPD_ROT per una spiegazione di $ROT_SPD).
– SPD_SECOND ($ORNT_TYPE=WRIST_JNT) ruota il secondo giunto del polso
con $ROT_SPD, forzando tutte le altre componenti a spostarsi nello stesso
momento. (Vedere SPD_ROT per una spiegazione di $ROT_SPD).
– SPD_THIRD ($ORNT_TYPE=WRIST_JNT) ruota il terzo giunto del polso (quello
più vicino all’utensile) con $ROT_SPD, forzando tutte le altre componenti a
spostarsi nello stesso momento. (Vedere SPD_ROT per una spiegazione di
$ROT_SPD).
– SPD_AUX1 sposta a velocità costante il primo asse ausiliario forzando le altre
componenti a spostarsi in modo coordinato. Se il giunto è rotante, si dovrà usare
la variabile predefinita $ROT_SPD per specificare la velocità desiderata dell’asse
ausiliario. Se invece il giunto è lineare, la velocità dovrà essere specificata
mediante la variabile predefinita $LIN_SPD. Nel caso in cui vi fossero più assi
ausiliari, sarà possibile spostare a velocità costante solo uno di essi mentre gli altri
si muoveranno a velocità ridotta in modo da iniziare e terminare il movimento nello
stesso momento.
Se con $SPD_OPT impostata a SPD_AUXn vengono eseguiti movimenti fly, l’asse
ausiliario si sposterà sempre a velocità costante, indipendentemente dal valore di
$FLY_TYPE. Se a $SPD_OPT viene assegnato un valore SPD_AUXn, con n che
rappresenta un asse ausiliario non valido, si verificherà un errore.
– SPD_AUX2 ha la stessa funzione di SPD_AUX1, ma la velocità del secondo asse
ausiliario viene mantenuta ad un valore costante.
– SPD_AUX3 sposta il terzo asse ausiliario a velocità costante mentre tutti gli altri
componenti si muoveranno a velocità ridotta in modo da iniziare e terminare il

pr-0-0-gpr_04.fm
60 08/1112
Controllo del movimento

movimento nello stesso momento. Tutti gli altri aspetti di questa opzione sono
identici a quelli di SPD_AUX1.

– SPD_SM4C - il movimento cartesiano è eseguito utilizzando SmartMove


Cartesiano (prestazione opzionale).
Per informazioni, vd.Cap.12. - SmartMove (prestazione opzionale).
In questo caso i valori di accelerazione, velocità e decelerazione sono calcolati in
automatico e non è possibile impostare una velocità di traslazione ($LIN_SPD) o
rotazione ($ROT_SPD).
Per l’utilizzo di tale opzione è necessario acquistare l’opzione software di
SmartMove.
Se il valore della $SPD_OPT non ha alcun significato riferito all’attuale tipo di traiettoria,
viene assunto per default il valore SPD_CONST. Ad esempio,
$SPD_OPT=SPD_SECOND non ha alcun significato se $ORNT_TYPE=RS_WORLD,
quindi verrà utilizzata SPD_CONST.
Le modifiche a $SPD_OPT, $LIN_SPD e $ROT_SPD diverranno effettive solo all’inizio
del movimento successivo. Le modifiche non hanno alcun effetto sul movimento attuale
dell’arm.

Esiste una funzionalità che, in particolari condizioni, permette di variare la


velocità Run-Time (vd. il successivo paragrafo Variazione Run-Time della velocità
lineare (Run-Time Speed Override))

5.5.2.2 Variazione Run-Time della velocità lineare (Run-Time Speed


Override)
E’ possibile variare Run-Time la velocità del TCP, solo se sono presenti le due
condizioni seguenti:
– il movimento è CARTESIANO
– il tipo di controllo del movimento è $SPD_OPT := SPD_LIN
Tali condizioni devono essere ENTRAMBE valide, altrimenti non è consentita alcuna
variazione Run-Time. Pertanto sono esclusi da tale funzionalità gli Arm per i quali NON
è possibile eseguire dei movimenti cartesiani.
La variabile predefinita che permette di variare Run-Time l’override di velocità, è

$LIN_SPD_RT_OVR
Essa è riferita alla variabile predefinita $LIN_SPD impostata sul movimento e
rappresenta, in percentuale, la nuova velocità che si vuole ottenere a partire dal
movimento in corso.
Il valore di default è 100: ciò significa che il movimento è eseguito con una velocità
massima pari alla $LIN_SPD. Il valore massimo assegnabile a $LIN_SPD_RT_OVR
dipende dal valore di $LIN_SPD, ed è dato dalla seguente formula:

MAX = ($LIN_SPD_LIM / $LIN_SPD) * 100

Ovvero, permette di raggiungere il valore limite di velocità cartesiana consentita al


Robot.
La variazione richiesta è attiva sin dal movimento in corso, ed è applicata in modo da
non generare variazioni brusche di tale movimento, anche per variazioni elevate del
Run-Time Speed Override.

pr-0-0-gpr_04.fm
08/1112 61
Controllo del movimento

Per le variazioni Run_time della velocità lineare nei movimenti sincronizzati,


riferirsi al Cap.6. - Movimento Sincrono (prestazione opzionale) del presente
manuale.

5.5.3 Controllo della Velocità Giunti


Per i movimenti in interpolazione giunti, la velocità effettiva del movimento di un arm si
determina calcolando il valore massimo dei tempi di movimento per ciascun giunto che
si sposta alla massima velocità. Il vettore predefinito di valori di tipo INTEGER,
$MTR_SPD_LIM[ ], definisce la velocità massima di ciascun motore, che a sua volta
definisce la velocità massima di ciascun giunto. $MTR_SPD_LIM è un campo
appartenente al vettore $ARM_DATA[ ] comune a tutto il sistema. In questo modo si
avrà un valore per ciascun asse di ciascun arm.
La velocità percentuale di ciascun giunto è determinata da $JNT_OVR che consente di
modificare contemporaneamente da programma i valori di accelerazione, velocità e
decelerazione.
Questa variabile, campo di $ARM_DATA, consta di un vettore di valori di tipo INTEGER.
Esiste un override per ciascun asse di ciascun arm con un valore di default del 100%.
La velocità giunti (joint speed) di un arm specifico si determina nel seguente modo:

joint speed[axis] =
$MTR_SPD_LIM[axis] * gear ratio[axis] * $JNT_OVR[axis] *
total speed override[arm]
dove “gear ratio” indica il rapporto di trasmissione.
Il giunto che impiega il tempo più lungo per percorrere la distanza fra la posizione iniziale
e quella finale si sposterà alla velocità calcolata sopra. Tutti gli altri giunti si muovono a
velocità inferiori in modo che tutti possano partire dalla posizione iniziale e raggiungere
quella finale nello stesso momento.

5.5.4 Controllo della velocità in movimento manuale


Se vengono eseguiti movimenti mentre l’Unità di Controllo si trova in stato PROGR
(selettore di stato in posizione T1) o si muove in manuale (jog) in AUTO-T (selettore di
stato in posizione T2), viene utilizzato un valore ulteriore di velocità, $MAN_SCALE, per
limitare la velocità massima entro i valori di sicurezza.
Se la variabile predefinita $SPD_OPT viene impostata a SPD_LIN, la velocità dell’arm
sarà determinata dal valore della variabile predefinita $LIN_SPD. Se il valore di
quest’ultima è superiore a 0,25 metri al secondo, la velocità dell’arm sarà ridotta a 0,25
metri al secondo. $MAN_SCALE viene impostata al momento della fabbricazione e non
può essere modificata dal Cliente.

5.6 Accelerazione e Decelerazione


Nel Controllore C5G, l’accelerazione e la decelerazione sono suddivise ciascuna in tre
fasi: una fase in cui l’accelerazione cresce linearmente (jerk), una fase di accelerazione
costante ed infine un’altra fase in cui l’accelerazione decresce linearmente
(Fig. 5.3 - Profili dell’accelerazione e della velocità).

pr-0-0-gpr_04.fm
62 08/1112
Controllo del movimento

Fig. 5.3 - Profili dell’accelerazione e della velocità

1. velocità
2. accelerazione

Attualmente, C5G forza il profilo di accelerazione e quello di decelerazione in modo che


siano simmetrici.
Ciò significa che le fasi di jerk costante durante l’accelerazione (T1 e T2) hanno la
stessa durata e le fasi di jerk costante durante la decelerazione (T3 e T4) hanno la
stessa durata.
Per i movimenti in interpolazione giunti, il tempo totale dell’accelerazione e della
decelerazione viene stabilito mediate due variabili predefinite:
– $MTR_ACC_TIME determina il tempo di accelerazione totale in millisecondi;
– $MTR_DEC_TIME determina il tempo di decelerazione totale in millisecondi.
Queste variabili sono campi di valori INTEGER di $ARM_DATA, un elemento per
ciascun asse di ciascun arm. Per un movimento in interpolazione giunti, il tempo relativo
al giunto che impiega il periodo più lungo per accelerare/decelerare dalla posizione
iniziale a quella finale è prescelto per essere utilizzato per tutti i giunti in modo da
coordinare i valori di accelerazione e decelerazione.
Per i movimenti Cartesiani, $LIN_ACC_LIM e $LIN_DEC_LIM sono usate in modo
simile per poter stabilire il tempo totale per l’accelerazione e la decelerazione. Le unità
che costituiscono queste variabili, però, sono metri al secondo quadro.
Il valore percentuale del tempo di accelerazione e decelerazione utilizzato nelle fasi jerk
costante è definito dal campo predefinito di valori INTEGER di $ARM_DATA, $JERK[ ],
nel seguente modo:
– $JERK[1] definisce la percentuale del tempo di accelerazione percorso nella fase
di jerk costante (T1 + T2);
– $JERK[2] non è attualmente utilizzato;
– $JERK[3] non è attualmente utilizzato;
– $JERK[4] definisce la percentuale del tempo di decelerazione percorso nella fase
di jerk costante (T3 + T4).
Ad esempio, se $JERK[1] è impostato a 40, il 20% del tempo specificato nella variabile
$MTR_ACC_TIME sarà T1, il 60% sarà in accelerazione costante e il 20% sarà T2.
Il programma PDL2 può accedere a $JERK[ ] in caso di lettura.

pr-0-0-gpr_04.fm
08/1112 63
Controllo del movimento

5.6.1 Override sull’accelerazione e decelerazione


Come la velocità, anche l’accelerazione e la decelerazione possono essere modificate
mediante variabili percentuali (override).
Come già detto precedentemente nel par. 5.5.1 Override sulla velocità a pag. 57,
$GEN_OVR e $ARM_OVR agiscono non solo sulla velocità, ma anche
sull’accelerazione e la decelerazione.
Tuttavia esistono alcune variabili che influenzano ulteriormente l’accelerazione e la
decelerazione. Queste variabili sono specifiche dell’arm o del programma:
– $PROG_ACC_OVR consente la modifica, da programma, dell’accelerazione di
tutti i movimenti di un dato programma. E’ un valore INTEGER specifico del
programma con un valore di default del 100%;
– $PROG_DEC_OVR consente la modifica, da programma, della decelerazione di
tutti i movimenti di un dato programma. E’ un valore INTEGER specifico del
programma con un valore di default del 100%;
– $ARM_ACC_OVR consente la modifica, da programma, dell’accelerazione di un
arm specifico. E’ un campo INTEGER di $ARM_DATA con un campo per ciascun
arm. Il valore di default è 100%;
– $ARM_DEC_OVR consente la modifica, da programma, della decelerazione di un
arm specifico. E’ un campo INTEGER di $ARM_DATA con un campo per ciascun
arm. Il valore di default è 100%.
Le equazioni relative alla velocità percentuale di movimentazione per l’accelerazione e
la decelerazione sono le seguenti:
total acceleration override[arm] =
$GEN_OVR*$ARM_DATA[arm].ARM_OVR*$ARM_DATA[arm].ARM_ACC_OVR*
$PROG_ACC_OVR
total deceleration override[arm] =
$GEN_OVR*$ARM_DATA[arm].ARM_OVR*$ARM_DATA[arm].ARM_DEC_OVR*
$PROG_DEC_OVR
$PROG_ACC_OVR e $PROG_DEC_OVR sono valori INTEGER specifici del
programma con valori di default del 100%. $ARM_ACC_OVR e $ARM_DEC_OVR sono
campi INTEGER con un campo per ciascun arm in caso di sistemi ad arm multipli (multi
arm).
La modifica di queste quattro variabili avrà effetto solamente sui movimenti successivi,
non sul movimento in corso.
Al contrario, come nel caso della velocità, eventuali modifiche di $GEN_OVR e di
$ARM_OVR agiranno sul movimento corrente.
Qualora vengano utilizzate istruzioni di HOLD, CANCEL, LOCK o DEACTIVATE, sarà
usato il valore massimo della decelerazione, indipendentemente dai valori di velocità
percentuali già impostati.
Inoltre, è possibile utilizzare una variabile predefinita, $HLD_DEC_PER, per aumentare
la velocità della decelerazione oltre le normali impostazioni massime. Alle alte velocità,
la decelerazione massima normale potrebbe richiedere alcune centinaia di millimetri per
arrestare l’arm. $HLD_DEC_PER è compresa fra 100 e 400 %, permettendo così di
moltiplicare il valore massimo normale fino ad un massimo di 4. $HLD_DEC_PER è un
campo di valori INTEGER disponibile in sola lettura appartenente a $ARM_DATA[ ]. In
questo modo, si ha un elemento per ciascun asse di ciascun arm.

5.6.2 Interpolazione giunti


Dopo aver individuato il giunto limitante (in base alla velocità), la velocità di ciascuno

pr-0-0-gpr_04.fm
64 08/1112
Controllo del movimento

degli altri giunti viene ridotta in scala del rapporto fra il tempo originale relativo al giunto
e il tempo del movimento del giunto limitante. Ogni giunto deve accelerare fino alla
velocità riscalata e non fino a quella richiesta.
Per determinare il giunto che dovrà governare l’accelerazione (non necessariamente lo
stesso che governa anche la velocità), si valuta il tempo di accelerazione per ciascun
giunto.
Questo tempo è il risultato della combinazione di $MTR_ACC_TIME[axis] e
$JNT_OVR[axis]. Per la definizione del giunto che governa la decelerazione, si utilizza
una combinazione di $MTR_DEC_TIME e $JNT_OVR analogamente a quanto fatto per
la velocità.
In seguito alla definizione dei giunti limitanti per l’accelerazione e la decelerazione (non
necessariamente gli stessi), tutti i giunti vengono ridotti in scala per ottenere lo stesso
tempo di accelerazione e di decelerazione.
A ciascun giunto vengono ugualmente applicati gli override sull’accelerazione e
decelerazione precedentemente descritti.

5.6.3 Interpolazione cartesiana


Lo stesso tipo di analisi effettuata per l’accelerazione e la decelerazione giunti, viene
eseguita anche per l’accelerazione e la decelerazione Cartesiana, con la differenza che
si esegue la comparazione fra la traslazione e la rotazione invece della comparazione
fra i giunti.
L'accelerazione e la decelerazione del movimento Cartesiano (lineare o circolare), con
qualsiasi modalità di evoluzione dell'assetto, è controllata mediante le variabili
predefinite:
– $LIN_ACC_LIM definisce l'accelerazione limite traslazione lineare. E' una variabile
per ciascun arm, il cui valore dipende dal modello del robot e non è modificabile
dall'utente.
– $ROT_ACC_LIM definisce l'accelerazione limite di rotazione. E' una variabile per
ciascun arm, il cui valore dipende dal modello del robot e non è modificabile
dall'utente.
– $LIN_DEC_LIM definisce la decelerazione limite traslazione lineare. E' una
variabile per ciascun arm, il cui valore dipende dal modello del robot e non è
modificabile dall'utente.
– $ROT_DEC_LIM definisce la decelerazione limite di rotazione. E' una variabile per
ciascun arm, il cui valore dipende dal modello del robot e non è modificabile
dall'utente.
Le variabili predefinite $LIN_ACC_LIM, $ROT_ACC_LIM, $LIN_DEC_LIM e
$ROT_DEC_LIM sono utilizzate per il calcolo della componente che impiega il tempo
maggiore. Queste variabili sono costituite da campi di valori REAL $ARM_DATA[ ], con
un campo per ciascun arm e sono modificabili solamente mediante comandi a livello di
sistema.
Le altre componenti vengono ridotte in scala in modo che i tempi di accelerazione e di
decelerazione della rotazione e della traslazione siano uguali. Anche gli overrides
vengono tenuti in considerazione.

5.6.4 Movimenti manuali


Se vengono inseriti movimenti programmati o immediati mentre l’Unità di Controllo si
trova in stato PROGR, vengono utilizzati i valori percentuali delle velocità descritti prima.

pr-0-0-gpr_04.fm
08/1112 65
Controllo del movimento

Quando tuttavia vengono eseguiti movimenti manuali dal Terminale di


Programmazione, per arrestare l’arm viene utilizzato il valore massimo di
decelerazione.
Inoltre, viene utilizzato un valore ulteriore di velocità percentuale, $MAN_SCALE, per
limitare la velocità massima entro i valori corretti. Questa percentuale di
movimentazione manuale agisce anche sull’accelerazione e sulla decelerazione in
modo da conservare il profilo della traiettoria per tutti i movimenti emessi in stato
Programmazione, ad eccezione dei movimenti manuali. Per questi ultimi,
$MAN_SCALE agisce solo sul movimento. $MAN_SCALE viene impostata dal
produttore al momento della fabbricazione e non può essere modificata dal Cliente.

5.7 Entrata in soglia (precisione di


posizionamento)
Determina la precisione di posizionamento del robot sul punto finale di un movimento
NON in fly, prima che possa essere effettuata l’operazione successiva.
Viene utilizzata la variabile predefinita $TERM_TYPE per la definizione del momento in
cui il movimento deve essere considerato finito; tale definizione si basa sulla distanza a
cui deve trovarsi l’arm dal punto di destinazione.
Alla variabile $TERM_TYPE è possibile assegnare alcune costanti predefinite
COARSE, FINE, JNT_COARSE, JNT_FINE o NOSETTLE.
Quest’ultima è l’assegnazione di default.

5.7.1 Arresto COARSE e FINE


I valori COARSE e FINE indicano due diverse soglie che possono essere utilizzate per
la definizione dell’arresto del movimento (cioè l’entrata in soglia) cartesiano. Queste
soglie rappresentano, nel mondo cartesiano, il raggio di una sfera avente come centro
il punto target. Più precisamente:
– COARSE - deve essere utilizzato nei movimenti cartesiani e indica che il
movimento è considerato finito quando il TCP rimane nella sfera centrata nel punto
finale, con raggio definito dalla variabile $TOL_COARSE per un tempo maggiore
o uguale a $TOL_ABT (tempo di anti-rimbalzo).
– FINE - deve essere utilizzato nei movimenti cartesiani e indica che il movimento è
considerato finito quando il TCP rimane nella sfera centrata nel punto finale, con
raggio definito dalla variabile $TOL_FINE per un tempo maggiore o uguale a
$TOL_ABT (tempo di anti-rimbalzo).
Le variabili predefinite $TOL_COARSE e $TOL_FINE indicano i valori di tolleranza. Il
valore di default per $TOL_COARSE e per $TOL_FINE dipende dall’arm.
La variabile predefinita $TOL_ABT (tempo di anti-rimbalzo) indica il tempo durante il
quale l’arm deve trovarsi all’interno della tolleranza specificata prima che il movimento
venga dichiarato completato/finito.
Può variare tra 0 e 2000 millisecondi e il valore di default è di 0 millisecondi. Il valore 0
indica che il movimento viene rilasciato non appena l’arm si trova all’interno della
tolleranza specificata.
La variabile predefinita $TOL_TOUT (time out) determina l’arco di tempo durante il
quale C5G verificherà se l’arm rientra nel valore di tolleranza specificato. Può variare tra
0 e 20000 millisecondi e il valore di default dipende dal tipo di robot. Questo valore viene
arrotondato al colpo di interpolazione ($IPERIOD) più prossimo, in modo tale che un
valore inferiore a tale frequenza sia interpolato come un colpo.

pr-0-0-gpr_04.fm
66 08/1112
Controllo del movimento

Se l’arm non rientra nelle soglie di tolleranza entro il tempo specificato, verrà
visualizzato un messaggio d’errore con severità hold.

5.7.2 Arresto JNT_COARSE e JNT_FINE


I valori JNT_COARSE e JNT_FINE specificano le due diverse tolleranze che possono
essere utilizzate per la definizione della conclusione del movimento.
Le variabili predefinite $TOL_JNT_COARSE e $TOL_JNT_FINE indicano i valori di
tolleranza rispettivamente COARSE e FINE, per ciascun giunto, misurati in gradi.
Rappresentano dunque, per ciascun giunto, la finestra di gradi di accettabilità per poter
dire che il movimento si è concluso sul punto finale. Sono vettori a una dimensione.
E’ da notare che le impostazioni della tolleranza si riferiscono ai giunti, non al centro
utensile. Per ottenere i corretti valori di tolleranza al centro utensile nel caso in cui
l’utensile stesso sia di grosse dimensioni, è necessario utilizzare tolleranze inferiori a
quando l’utensile ha dimensioni più ridotte; in tal caso fare riferimento alle soglie del
mondo cartesiano (Fine, Coarse).

5.7.3 Arresto NOSETTLE


Il valore NOSETTLE indica che il movimento dovrà essere dichiarato concluso non
appena il profilo di decelerazione sarà completato. Non è stato definito nessun tempo
per far si che l’arm si posizioni con precisione entro determinate tolleranze.
Non viene effettuato alcun controllo; è l’assegnazione di default.

5.8 Ripristino della traiettoria


Se necessario, è possibile arrestare i movimenti anche prima del loro completamento.
Ad esempio, un operatore può premere il tasto HOLD o la softkey DRIVE OFF. Quando
è premuto il tasto HOLD, gli assi subiranno una graduale decelerazione e si
arresteranno esattamente sulla traiettoria. Per riprendere il movimento lungo la
traiettoria basterà premere il tasto START. Non è necessario nessun ripristino di
traiettoria. La stessa cosa accade quando viene richiesto il DRIVE OFF ma viene anche
tolta l’alimentazione agli azionamenti e vengono attivati i freni. E’ possibile arrestare il
robot con l’apertura dei cancelli: in tal caso si effettuerà una frenata con arresto sulla
traiettoria. E’ possibile arrestare il robot con il fungo di sicurezza. In tal caso si effettuerà
una frenata con arresto sulla traiettoria, ma senza controllo dell’entrata in soglia.
Con il selettore di stato in posizione T2, la pressione del fungo provoca un arresto
SENZA controllo della traiettoria, con chiusura della potenza e apertura dei freni.

5.8.1 Metodo di ripristino


Sono disponibili due metodi di ripristino della traiettoria, a raggio lungo e a raggio corto.
Con il ripristino a raggio corto, il movimento può essere ripristinato da una posizione
molto vicina alla traiettoria originale, secondo quanto definito dal vettore,
$TOL_JNT_FINE [ ] o $TOL_JNT_COARSE [ ]. Il ripristino a raggio corto avviene
mediante un movimento in interpolazione giunti completamente trasparente all’utente.
Quando si preme il tasto START per ripristinare un movimento, viene inserito un
movimento di ripristino a raggio corto immediatamente prima della ripresa del
movimento originale. In molti casi, questo movimento di ripristino non sarà neanche
percepito dall’operatore.
Se la distanza tra la posizione corrente e quella teorica è superiore ad un certo limite
(raggio corto), la ripresa del movimento avviene secondo le modalità definite dal valore
impostato della variabile predefinita $RCVR_TYPE. I possibili valori di tale variabile

pr-0-0-gpr_04.fm
08/1112 67
Controllo del movimento

predefinita sono mostrati nella tabella seguente:

0 Riportare l’arm sul punto di interruzione della traiettoria mediante l’interpolazione giunti
1 Riportare l’arm sulla posizione iniziale del movimento interrotto utilizzando
l’interpolazione giunti.
2 Portare l’arm sulla posizione di destinazione del movimento interrotto utilizzando
l’interpolazione giunti.
3 Non ripristinare; generare un messaggio d’errore.
4 Se il movimento interrotto era Cartesiano, ripristinare la traiettoria interrotta mediante un
movimento in linea retta. Altrimenti utilizzare l’interpolazione giunti.
5 Se il movimento interrotto era Cartesiano, riportare l’arm alla posizione iniziale del
movimento interrotto mediante un’interpolazione in linea retta. In caso contrario utilizzare
l’interpolazione giunti.
6 Se il movimento interrotto era Cartesiano, portare l’arm alla posizione di destinazione del
movimento interrotto mediante un’interpolazione in linea retta. In caso contrario utilizzare
l’interpolazione giunti.
7-8 reserved

Ovunque è possibile interrompere un movimento di un programma eseguito in modo


Automatico, ad esempio ponendolo in HOLD, passare allo stato Programmazione e
muovere il robot manualmente quindi tornare al modo Automatico. Alla pressione del
tasto START, viene determinato se si debba effettuare un ripristino a raggio corto o a
raggio lungo; quindi viene eseguito il ripristino della traiettoria.
Quando il sistema si trova in stato Programmazione e si interrompe un movimento
mediante il DRIVE OFF, il ripristino del movimento stesso avverrà in base alle condizioni
presenti nel momento in cui gli azionamenti vengono riattivati e si preme il tasto START
o il tasto BACK. Il tipo di ripristino dipenderà dalla presenza o meno di movimenti in
attesa di esecuzione e dal punto in cui questi sono stati eseguiti. L’esatto tipo di ripristino
viene definito in base ai seguenti punti.

5.8.1.1 Condizione di movimento in attesa


Nessuno spostamento verrà eseguito se non vi sono movimenti in attesa quando
vengono premuti i tasti START o BACK. Il ripristino può essere eseguito soltanto se vi
è un movimento in attesa di essere eseguito ed avverrà in base allo spazio di ripristino.

5.8.1.2 Spazio di ripristino


Nello stato Programmazione viene usata la stessa strategia dello stato Automatico. Se
la distanza tra la posizione di arresto e quella teorica è limitata, viene utilizzato un
movimento ad interpolazione giunti per riportare l’arm sul punto in cui il movimento era
stato interrotto (raggio corto); in caso contrario viene utilizzata la variabile
$RCVR_TYPE (recupero a raggio lungo) per effettuare il movimento di recupero.

5.8.1.3 Ambiente di esecuzione


Se l’esecuzione avviene da un ambiente di modifica del programma, vengono
visualizzati dei messaggi relativi al ripristino. Dopo aver riportato l’arm sulla posizione in
cui il movimento era stato interrotto, premere il tasto START, quindi premerlo una
seconda volta per proseguire il movimento lungo il percorso originale. Se il comando di
movimento è stato inoltrato da un ambiente di esecuzione ma non di modifica, non
apparirà nessun messaggio e non è richiesto l’intervento dell’utente per ripristinare il
movimento.

pr-0-0-gpr_04.fm
68 08/1112
Controllo del movimento

Se il robot viene spostato manualmente immediatamente dopo un’interruzione, la


funzione di ripristino non verrà eseguita. Se invece l’Unità di Controllo viene posta in
stato AUTO durante un’interruzione, verranno seguite tutte regole di ripristino.

5.9 Ripristino del Processo (Process Resume)


Il ripristino del processo consente al robot di ritornare indietro lungo la traiettoria in corso
prima di riprendere il movimento programmato. Questo movimento viene detto, nel
seguito, movimento di ritorno. La distanza massima richiesta deve essere definita nella
variabile di sistema $RCVR_DIST (in millimetri). Il valore zero assegnato a
$RCVR_DIST disabilita la prestazione.
Questa prestazione è utile nelle applicazioni in cui il robot effettua l’attività di processo
durante il movimento (esempi tipici sono l’arco saldatura e la spalmatura di sigillante).
In alcune di queste applicazioni, se il movimento viene interrotto per qualsiasi ragione,
è preferibile ripercorrere una parte della traiettoria già effettuata per evitare ogni rischio
di lasciare lacune nel processo.
Il movimento di ritorno viene abilitato dopo una qualsiasi fermata: HOLD da Terminale
di Programmazione, HOLD dovuto ad un errore, LOCK, commutazione del selettore di
stato, DRIVE OFF, arresto di emergenza.
Se l’interruzione è dovuta ad una emergenza o ad un DRIVE OFF, è probabile che
venga effettuato un recupero della traiettoria prima di iniziare il movimento di ritorno. In
questi casi il movimento di ritorno ha inizio dopo la fine dell’eventuale ripristino della
traiettoria. E’ bene considerare che il movimento di ritorno è possibile solo nelle modalità
di ripristino della traiettoria sul punto interrotto ($RCVR_TYPE=0 o 4); viene disabilitato
se si effettua un ritorno sul punto iniziale o finale.
Il movimento di ritorno si interrompe in anticipo se si incontra un punto non in fly (Fig. 5.7
- Movimenti di ritorno - esempio D) o se si esaurisce il movimento precedente a quello
in corso (Fig. 5.5 - Movimenti di ritorno - esempio B e Fig. 5.6 - Movimenti di ritorno -
esempio C).

Fig. 5.4 - Movimenti di ritorno - esempio A

Nota: caso più semplice


1. Punto di fly programmato tra due movimenti 2. Fine del fly 1^ movimento
3. Inizio del fly 2^ movimento 4. Fine del fly 2^ movimento
5. Punto di arresto del movimento 6. Direzione di avanzamento
7. Inizio del fly 1^ movimento

pr-0-0-gpr_04.fm
08/1112 69
Controllo del movimento

Fig. 5.5 - Movimenti di ritorno - esempio B

Nota: $RCVR_DIST programmato ad un valore superiore a quello massimo recuperabile

1. Massima distanza
2. Punto di arresto del movimento

Fig. 5.6 - Movimenti di ritorno - esempio C

Nota: se viene interrotto un fly è possibile tornare indietro di due

1. Punto di arresto del movimento


2. Massima distanza recuperabile

Fig. 5.7 - Movimenti di ritorno - esempio D

Nota: il movimento di ritorno si interrompe se si incontra un punto

1. Massima distanza recuperabile (in quanto c’è un punto senza fly)

pr-0-0-gpr_04.fm
70 08/1112
Controllo del movimento

2. Punto di arresto

Si noti che il movimento di ritorno è possibile solo sui movimenti di tipo lineare o
circolare.
Il valore della distanza da recuperare viene letta dal sistema dopo ogni fermata.
Dunque, se si modifica $RCVR_DIST durante il movimento di ritorno, il valore avrà
effetto solo dopo la successiva fermata.
Se si interrompe il movimento di ritorno, il valore di $RCVR_DIST viene riletto ma la
distanza da recuperare viene calcolata sempre a partire dal punto di interruzione
originario (Fig. 5.8 - Esempio nel caso di modifica di $RCVR_DIST).

Fig. 5.8 - Esempio nel caso di modifica di $RCVR_DIST

1. Punto finale del movimento di ritorno


2. Primo valore di $RCVR_DIST=20mm
3. Interruzione del ritorno: il valore di $RCVR_DIST viene riletto
4. $RCVR_DIST=30 mm dopo la modifica
5. Punto di arresto

Eventuali CONDITION locali al movimento in corso vengono riabilitate alla successiva


ripartenza dopo il movimento di ritorno. Tuttavia se non sono state dichiarate con la
clausola NODISABLE esse potranno scattare una volta soltanto.
L’evento WHEN RESUME, eventualmente abilitato sul movimento in corso, verrà
segnalato al termine del movimento di ritorno subito prima di riprendere la traiettoria
interrotta.
Come per i normali movimenti di ripristino della traiettoria, è possibile attivare la
prestazione di LOCK automatico mediante la variabile
$CRNT_DATA[num_arm].RCVR_LOCK. Impostando tale variabile al valore TRUE, il
sistema si pone automaticamente in stato di LOCK dopo aver terminato il movimento di
ritorno. Esistono quattro eventi di sistema, uno per arm, che segnalano l’entrata nello
stato di LOCK automatico (vedere SYSTEM EVENTs n.130, 131, 132 e 133 nel
manuale PDL2 Programming Language Manual). Per riprendere il movimento è
necessario eseguire una istruzione di RESUME mediante un programma PDL2 o il
comando EXECUTE presente nella Pagina di Service del Terminale di
Programmazione (in stato PROGR).

5.9.1 Ripristino del Processo (Process Resume) Automatico


Esiste una modalità di Process Resume il cui funzionamento è simile alla modalità 4 di
ripristino della traiettoria ($RCVR_TYPE := 4), ma la distanza percorsa nel movimento

pr-0-0-gpr_04.fm
08/1112 71
Controllo del movimento

di ritorno è data dalla somma del valore di $RCVR_DIST e della distanza percorsa, nella
fase di decelerata, tra il comando di stop e l’effettivo arresto della macchina.
Per abilitare questa modalità occorre impostare la variabile predefinita $RCVR_TYPE
al valore 9.

1. direzione del movimento


2. traiettoria
3. movimento di ritorno calcolato
4. $RCVR_DIST
5. spazio decelerata
6. comando di arresto del movimento
7. punto di arresto del movimento

5.10 Movimento Continuo


Il movimento continuo permette l’esecuzione del programma senza provocare l’arresto
dell’arm sulle posizioni memorizzate.
Per indicare un movimento continuo, viene utilizzata l’istruzione MOVEFLY al posto
dell’istruzione MOVE. Se a MOVEFLY segue un altro movimento, l’arm non si arresterà
alla prima destinazione, ma si sposterà dal punto di partenza del primo movimento fino
al punto finale del secondo movimento senza fermarsi sul punto in comune ai due
movimenti.

Non si devono fare movimenti in Fly tra traiettorie Giunti e Cartesiane (nessun
FLY misto).

L’istruzione MOVEFLY può essere utilizzata per specificare un movimento continuo:


l’arm si sposterà da un punto appartenente ad un segmento ad un punto appartenente
ad un altro segmento senza soffermarsi sul punto comune ai due segmenti
(vd. Fig. 5.9 - Esempio di movimento continuo in caso di movimento lineare).
Se MOVEFLY è seguita da un altro movimento, l’arm non si fermerà sulla prima
destinazione.

pr-0-0-gpr_04.fm
72 08/1112
Controllo del movimento

Fig. 5.9 - Esempio di movimento continuo in caso di movimento


lineare

1. Inizio movimento verso c


2. Fine movimento verso b

5.10.1 Traiettoria durante il movimento continuo


La Fig. 5.9 - Esempio di movimento continuo in caso di movimento lineare illustra un
angolo smussato durante la transizione (fly) fra il movimento da A a B e il movimento da
B a C. Questo arrotondamento risulta dalla combinazione della decelerazione del primo
movimento e dell’accelerazione del secondo. Il profilo e la dimensione di tale
arrotondamento è funzione dei seguenti fattori: le impostazioni dell’utente ($FLY_PER,
$FLY_DIST, $FLY_TRAJ); la velocità dei due movimenti; i valori di accelerazione e
decelerazione; l’algoritmo di controllo assi dell’arm; il carico.
In caso di modifica di $GEN_OVR o di $ARM_OVR (oppure di $JNT_OVR nel caso di
movimenti in interpolazione giunti), il profilo rimarrà pressochè identico ad eccezione
dell’effetto dell’errore di inseguimento servo. Lo scopo di questa prestazione è di
consentire l’apprendimento dei punti a bassa velocità, riducendo al minimo successive
modifiche per funzionare alla velocità di produzione.
Un altro effetto del mantenimento della traiettoria al variare degli override è che vengono
ridotte proporzionalmente anche l’accelerazione e la decelerazione. Naturalmente
questo non avviene nel caso di HOLD, LOCK, CANCEL o DEACTIVATE. In questi casi
l’arm si arresta con il massimo valore di decelerazione.
Se vengono modificati gli override sulla sola velocità, $PROG_SPD_OVR e
$ARM_SPD_OVR, l’accelerazione e la decelerazione non vengono modificate e il
profilo subirà conseguentemente una modifica. Questi override vengono utilizzati nei
programmi dove si intende modificare solo la velocità e si ritiene che il profilo della
traiettoria non abbia alcuna importanza durante il fly.

5.10.2 Modalità di movimento continuo (FLY)


La variabile predefinita $FLY_TYPE determina quale sarà l’algoritmo che controllerà il
movimento continuo. Tale algoritmo non solo influenzerà la velocità e il profilo della
traiettoria durante il movimento continuo, ma anche l’entità delle sollecitazioni esercitate
sull’arm e sul componente o utensile collegato ad esso.
I valori previsti di $FLY_TYPE sono FLY_NORM e FLY_CART.

5.10.2.1 FLY_NORM
Quando $FLY_TYPE è impostata a FLY_NORM, MOVEFLY fa sì che la decelerazione

pr-0-0-gpr_04.fm
08/1112 73
Controllo del movimento

del movimento in corso vada a sovrapporsi con l’accelerazione del movimento


successivo.
La variabile predefinita $FLY_PER (l’unica variabile legata a FLY_NORM) può essere
utilizzata per ridurre il tempo del fly avvicinando la traiettoria alla posizione intermedia
appresa.
FLY_NORM è il valore di default.
Il Fly inizierà all’istante di partenza della decelerazione più un tempo uguale al 100%
meno la percentuale specificata in $FLY_PER.
Ad esempio, se il valore di $FLY_PER è 100%, il fly comincia all’inizio della
decelerazione del movimento in fly. Se il valore di $FLY_PER è 75%, il fly inizierà solo
quando il 25% del tempo di decelerazione è stato percorso (il restante 75% sarà unito
al movimento successivo).
Di norma, la velocità del movimento durante il fly non è costante. Se due movimenti
lineari raccordati in fly sono allineati, il TCP si sposterà a velocità costante passando
sulla posizione intermedia come se si trattasse di un unico lungo segmento. Se però
l’angolo fra i due segmenti aumenta, il TCP rallenterà in prossimità della posizione
intermedia per accelerare nuovamente una volta entrato nel segmento successivo.
L’esempio più tipico è certamente quello dell’angolo di 180 gradi (il TCP inverte la
propria direzione). In questo caso, il TCP si arresta del tutto, ma non sulla posizione
intermedia appresa.
In genere questo tipo di controllo del movimento continuo è quello che causa le minori
sollecitazioni sull’arm e sul componente o utensile in corrispondenza dei cambiamenti
di direzione. FLY_NORM è quindi il valore di default assegnato a $FLY_TYPE.
Se l’angolo fra i due segmenti di movimento è estremamente acuto, le sollecitazioni su
di esso possono essere minimizzate utilizzando FLY_CART (vd.di seguito).

5.10.2.2 FLY_CART (Controller Aided Resolved Trajectory)


$FLY_TYPE viene impostata a FLY_CART quando è necessario realizzare la velocità
costante del TCP.
Inoltre permette di avere il controllo del profilo della traiettoria durante il fly o quando si
richiede un migliore controllo delle sollecitazioni sull’arm, sul componente o sull’utensile
ad esso collegato.
Per rendere effettivo FLY_CART, $SPD_OPT deve essere impostata al valore
SPD_LIN e tutti i movimenti devono essere cartesiani.
Il valore di default di $SPD_OPT è SPD_CONST.
La velocità del TCP viene mantenuta ad un livello costante durante il fly fra segmenti
Cartesiani (lineari o circolari) mediante FLY_CART, purchè non vengano superati
determinati limiti (descritti di seguito). FLY_CART può anche essere utilizzata durante
movimenti path fra segmenti Cartesiani; non ha alcun effetto, invece, quando uno od
entrambi i movimenti sono eseguiti in interpolazione giunti.

5.10.2.2.1 Controllo dello stress dinamico sulla macchina


L’algoritmo per il controllo di FLY_CART suggerisce il concetto di una sollecitazione
generalizzata che si compone di tre elementi di sollecitazione sull’arm e relativa
attrezzatura.
Ampi cambiamenti nell’orientamento dell’utensile, velocità elevate del TCP oppure
variazioni nella direzione di quest’ultimo possono provocare grandi forze di
accelerazione sui singoli componenti dell’arm, sul particolare o sull’attrezzatura. Viene
quindi stabilito un limite per questa sollecitazione generalizzata: tale limite è
proporzionale alla velocità programmata, all’angolo fra traiettorie contigue e al cambio
di orientamento richiesto e può essere impostato dall’utente mediante la variabile

pr-0-0-gpr_04.fm
74 08/1112
Controllo del movimento

predefinita $STRESS_PER.
Il valore di default per $STRESS_PER è 50% e deve essere compreso fra 1% e 100%.
Valori maggiori di $STRESS_PER denotano una sollecitazione più elevata, mentre
valori più bassi una sollecitazione inferiore.
I valori più alti indicano al sistema che possono essere utilizzati valori di accelerazione
e di decelerazione maggiori. Il fly, quindi, inizierà e terminerà in un punto più vicino al
punto appreso. Con un valore di $STRESS_PER del 100%, il movimento tenterà di
passare direttamente attraverso il punto intermedio, eseguendo un fly piccolissimo o
non eseguendolo affatto.
Nel caso in cui $STRESS_PER = 50%, con due segmenti in linea retta a 90 gradi l’uno
rispetto all’altro e una piccola variazione nell’orientamento, la traiettoria in fly
assomiglierà molto a quella che verrebbe eseguita se $FLY_TYPE fosse impostato a
FLY_NORM. A differenza di questo, tuttavia, la velocità del TCP rimarrebbe costante.
Incrementando l’angolo fra le due rette (cioè allineando quasi completamente i due
segmenti), la distanza percorsa dal fly, in modalità FLY_CART, sarà più breve e quindi
la traiettoria risulterà più vicina alla posizione intermedia appresa rispetto a
FLY_NORM. Se invece l’angolo viene ridotto, la traiettoria risulterà più distante dal
punto intermedio rispetto a FLY_NORM, ma la sollecitazione esercitata sarà inferiore
rispetto quest’ultimo.
Vedere la Fig. 5.10 - Confronto fra FLY_CART e FLY_NORM ($STRESS_PER=50) per
una rappresentazione grafica di queste situazioni.

Fig. 5.10 - Confronto fra FLY_CART e FLY_NORM


($STRESS_PER=50)

Un simile controllo viene eseguito sulla generazione delle traiettorie circolari. Per poter
mantenere le sollecitazioni sull’arm entro i limiti specificati da $STRESS_PER si riduce
la velocità dei movimenti circolari, specialmente in caso di movimenti con un raggio
ridotto (è da notare che questa riduzione viene eseguita sull’intera circonferenza, non
solo sulla traiettoria fra la circonferenza stessa e il movimento successivo).
Per la definizione del valore di $STRESS_PER, tenere sempre presenti i seguenti punti.
– Impostando un valore maggiore per $STRESS_PER si aumentano le probabilità di
mantenere costante la velocità. Inoltre, un valore maggiore di $STRESS_PER
avvicinerà la traiettoria alla posizione intermedia appresa. Tuttavia, quanto più alto
è il valore di $STRESS_PER, tanto più elevate sono le sollecitazioni che si
richiedono alla meccanica, riducendo così la qualità della traiettoria.
– Quando $STRESS_PER è impostata a 100%, le traiettorie diventano
estremamente acute poichè attraversano il punto programmato senza ridurre la
velocità. Ciò può causare sollecitazioni molto alte sul robot, sul componente o
sull’utensile ad esso collegato.
– Valori minori di $STRESS_PER possono essere utilizzati per ridurre le
sollecitazioni provocate da ampi cambiamenti nell’orientamento del polso, anche

pr-0-0-gpr_04.fm
08/1112 75
Controllo del movimento

se questa traiettoria “ammorbidita” passerà ben oltre la posizione intermedia


appresa.

5.10.2.2.2 Mantenimento della velocità costante


Come già detto, FLY_CART consente di mantenere la velocità del TCP ad un livello
costante durante il movimento in fly purchè non vengano superati i limiti imposti da
$STRESS_PER. E’ consigliabile utilizzare questa funzione per sfruttare la capacità del
sistema nell’ottimizzare la traiettoria. Il controllo della velocità viene influenzato dalle
seguenti regole:
– Come per tutti i movimenti in fly, se il movimento è troppo corto non è possibile
raggiungere la velocità prevista. In una tale situazione, la velocità durante il
movimento in fly è la stessa che si aveva all’inizio del fly.
– Se si utilizzano velocità lineari elevate, alcuni movimenti risulteranno troppo brevi
e non consentiranno l’esecuzione dei calcoli preliminari necessari. In questo caso,
FLY_CART si comporta esattamente come tutte le altre modalità di fly, cioè non
rende sempre possibile il mantenimento della velocità costante.
– Se la traiettoria programmata comporta sollecitazioni superiori a quelle impostate
in $STRESS_PER la velocità non verrà mantenuta costante.

5.10.2.2.3 Controllo della traiettoria durante il FLY


Quando la modalità fly viene impostata a FLY_CART, la traiettoria può essere
controllata impostando:
– $FLY_DIST rappresenta una distanza (in millimetri, default 5mm) fra la posizione
intermedia appresa ed un punto sulla traiettoria. Il significato esatto della distanza
è definito da
– $FLY_TRAJ che può essere a impostata a
• FLY_AUTO è il controllo che seleziona la traiettoria il più vicino possibile alla
posizione intermedia ma tale da consentire di mantenere la velocità costante
senza superare i limiti impostati da $STRESS_PER.
Il raggiungimento e il mantenimento della velocità programmata sono
privilegiate rispetto all’avvicinamento alla posizione intermedia.

Attenzione! $FLY_DIST viene usato solo se $FLY_TRAJ è DIVERSO da


FLY_AUTO

• FLY_TOL forza il movimento in fly in modo che il TCP passi sul punto
intermedio della traiettoria ad una distanza inferiore a quella impostata in
$FLY_DIST.
La traiettoria viene pianificata in modo simile a FLY_AUTO. Se la traiettoria
così generata rientra nel valore di $FLY_DIST, non subirà ulteriori modifiche.
Se invece la traiettoria supera questo limite, la distanza verrà rispettata e la
velocità verrà ridotta per poter osservare i valori impostati da $STRESS_PER
e $FLY_DIST.
• FLY_PASS forza il movimento in fly in modo che il TCP passi alla distanza
esatta dal punto intermedio, impostata in $FLY_DIST.
Se la distanza pianificata, impostata in $FLY_DIST, è troppo elevata rispetto
alla lunghezza delle traiettorie, il percorso in fly viene calcolato in modo da
essere eseguito alla massima distanza possibile. Se invece la distanza
specificata è inferiore a quella che verrebbe generata da FLY_AUTO, la

pr-0-0-gpr_04.fm
76 08/1112
Controllo del movimento

velocità sarà ridotta per poter rispettare i limiti impostati da $STRESS_PER


(la distanza specificata viene comunque mantenuta).
• FLY_FROM forza il movimento in fly in modo che abbia inizio alla distanza
dalla posizione appresa, impostata in $FLY_DIST, misurata sulla traiettoria.
E’ da notare che la dinamica della macchina potrebbe rendere impossibile il
mantenimento della distanza programmata. Questo diventa più probabile diminuendo il
valore di $STRESS_PER.

Fig. 5.11 - Movimenti in FLY

La Fig. 5.11 - Movimenti in FLY illustra un esempio dell’uso di queste impostazioni di


sistema. Impostando $FLY_DIST a 20 mm, si ottengono i seguenti risultati.
Quando il valore di $FLY_TRAJ è impostato a:
– FLY_TOL, la distanza A sarà uguale o inferiore a 20 mm;
– FLY_PASS, la distanza A sarà pari a 20 mm;
– FLY_FROM, la distanza B sarà pari a 20 mm.

5.10.2.2.4 Debug dei movimenti in FLY


Durante la procedura di debug dei movimenti FLY_CART, può essere utilizzato un
campo di $CRNT_DATA per definire lo stato dell’ultimo movimento. Il nome del campo
in questione è FLY_DBUG. Questo campo avrà un valore pari a zero nel caso in cui sia
stata ottenuta la traiettoria ottimale, oppure un altro valore per indicare lo stato del
movimento.
Il campo FLY_DBUG può essere utilizzato in un programma NOHOLD, da istruzioni di
CONDITION, ecc...
I programmi possono semplicemente scrivere il valore sul dispositivo di visualizzazione
per consentirne la valutazione o intraprendere qualche azione correttiva. Al termine
della configurazione, tutti questi supporti di debug devono essere rimossi onde evitare
di rallentare inutilmente il sistema. Il programma seguente è un semplice esempio di
come un campo FLY_DBUG può essere usato in una CONDITION.

PROGRAM mov_cart
CONST
arm_num = 1
cond_num = 1

pr-0-0-gpr_04.fm
08/1112 77
Controllo del movimento

ROUTINE print_debug
BEGIN
WRITE ($CRNT_DATA[arm_num].FLY_DBUG, NL)
END print_debug
BEGIN
$CRNT_DATA[arm_num].FLY_DBUG := 0
CONDITION[cond_num] NODISABLE :
WHEN AT END DO
print_debug
ENDCONDITION
-- inizializzazione
ENABLE CONDITION[cond_num]
-- istruzioni move
END mov_cart

Tab. 5.2 - Codici del campo FLY_DBUG della variabile


$CRNT_DATA
Codice Descrizione
0 Situazione ottimale indicante che la velocità è mantenuta costante e che la traiettoria definita
con $FLY_DIST è assicurata.
1 Il movimento fly ha una durata inferiore ai 40 ms. E’ impossibile attivare l’algoritmo della
velocità costante. Questo codice ha solo una funzione informativa, infatti la velocità è
mantenuta costante.
2 L’angolo fra le traiettorie è troppo piccolo (inferiore a 5 gradi) perciò è impossibile attivare
l’algoritmo della velocità costante.
3 Riduzione dell’accelerazione dovuta ad un’elevata evoluzione dell’orientamento. Ciò è
dovuto all’evoluzione dell’orientamento dell’utensile durante il fly. In questa condizione, il fly
viene arrotondato e la velocità è mantenuta costante.
4 Ripianificazione dovuta al movimento di pendolamento (weaving) che dà come risultato il
passaggio ad una distanza superiore a quella programmata dall’utente ($FLY_DIST). La
velocità è mantenuta costante.
5 La velocità viene ridotta per passare alla distanza specificata. Per poter rispettare il vincolo di
passaggio ($FLY_DIST) e quello sulle sollecitazioni ($STRESS_PER), la velocità viene
ridotta automaticamente durante il fly. Per default, $FLY_DIST è impostata a 5 e $FLY_TRAJ
è impostata a FLY_TOL. Per evitare questa riduzione di velocità occorre aumentare la
tolleranza sulla traiettoria pianificata (aumentando il valore di $FLY_DIST) oppure aumentare
il valore di $STRESS_PER.
6 Riduzione della velocità su un movimento circolare dovuta a sollecitazioni eccessive. Questo
codice indica che la limitazione sulla sollecitazione massima ($STRESS_PER) impone una
riduzione di velocità sull’intera traiettoria circolare. Per evitare questo inconveniente occorre
aumentare il raggio della circonferenza, o aumentare il valore di $STRESS_PER, oppure
ridurre la velocità programmata.
7 Riduzione della velocità provocata da un’elevata evoluzione dell’orientamento. L’evoluzione
dell’orientamento richiesta durante il fly impone velocità superiori al limite massimo
consentito, quindi la velocità viene ridotta durante l’esecuzione della traiettoria. Per evitare
questo inconveniente, distribuire la variazione dell’orientamento sul movimento precedente e
su quello successivo oppure aumentare il valore di $STRESS_PER.

pr-0-0-gpr_04.fm
78 08/1112
Controllo del movimento

Tab. 5.2 - Codici del campo FLY_DBUG della variabile


$CRNT_DATA (Continua)
Codice Descrizione
8 E’ impossibile eseguire il passaggio alla distanza pianificata, quindi la distanza effettiva viene
ridotta. Questo accade solamente nel caso in cui $FLY_TRAJ è impostata a FLY_PASS o a
FLY_FROM. L’esecuzione del passaggio è stata pianificata su un punto troppo distante. Una
soluzione possibile consiste nel ridurre la velocità o nell’aumentare il valore di
$STRESS_PER.
9 e 10 Movimento troppo corto per mantenere una velocità costante durante il fly. La velocità
pianificata viene raggiunta durante il movimento. Per cambiare questa condizione,
aumentare (se possibile) la distanza fra i punti pianificati e aumentare il valore di
$STRESS_PER.
11 Il movimento è troppo corto per poter raggiungere la velocità pianificata in quanto non è
possibile portare a termine la fase di accelerazione. Se possibile, aumentare la distanza fra i
due punti pianificati. In alcuni casi, può essere utile aumentare il valore di $STRESS_PER.
12 Sollecitazione eccessiva per un movimento corto. Il movimento risultante è troppo corto
perchÈ il movimento fly possa rimanere entro i limiti della sollecitazione massima. Le
sollecitazioni risultanti sono superiori a quelle pianificate e si può verificare un cambiamento
della velocità durante il fly. Per evitare questa condizione, aumentare (se possibile) la
distanza fra i punti pianificati e aumentare anche il valore di $STRESS_PER.
13 Sollecitazioni eccessive sull’evoluzione dell’orientamento a causa di un movimento corto. Il
movimento risultante è troppo corto perchÈ il movimento fly possa rimanere entro i limiti della
sollecitazione massima durante l’evoluzione dell’orientamento. Le sollecitazioni risultanti
sono superiori a quelle pianificate e si può verificare un cambiamento della velocità durante il
fly.
14 e 15 Non è possibile ripianificare il fly a causa di mancanza di tempo. La durata del movimento
non è sufficiente a consentire il completamento dei conteggi preliminari. Le sollecitazioni
risultanti sono superiori a quelle pianificate e si può verificare un cambiamento della velocità
durante il fly. Se possibile, aumentare la distanza fra i due punti pianificati. In alcuni casi è
utile aumentare il valore di $STRESS_PER.
16 Non è possibile ripianificare il fly a causa di sollecitazioni eccessive sull’evoluzione
dell’orientamento. Le sollecitazioni risultanti sono superiori a quelle pianificate e si può
verificare un cambiamento della velocità durante il fly. Se possibile, aumentare la distanza fra
i punti pianificati e ridurre la velocità programmata ($LIN_SPD). In alcuni casi può essere utile
aumentare il valore di $STRESS_PER.

5.10.2.2.5 Variabili utilizzate con il movimento FLY


Se $FLY_TYPE è uguale a FLY_CART, il seguente elenco ricapitola gli altri valori che
devono essere definiti.
– $STRESS_PER { valore da 1% a 100% }
– $CRNT_DATA[arm].FLY_DBUG per scopi tipicamente di sola lettura
– $FLY_TRAJ valori: FLY_AUTO, FLY_TOL, FLY_PASS, FLY_FROM
– $FLY_DIST, valori in mm, viene usato solo se $FLY_TRAJ è diverso da
FLY_AUTO

5.11 Sistema con Tool Remoto


Il sistema Tool Remoto è una configurazione particolare nella quale il robot viene
considerato come un posizionatore rispetto ad un utensile fisso. Il pezzo di lavoro è
installato direttamente sul robot, cosicchè il TCP dell’utensile fisso può seguire la

pr-0-0-gpr_04.fm
08/1112 79
Controllo del movimento

traiettoria corretta sul pezzo.


Si tratta di una configurazione molto comune nei casi in cui l’utensile sia più pesante del
pezzo da lavorare oppure, per qualche ragione, sia fisso.
Il sistema con tool remoto viene abilitato impostando la variabile di sistema
$TOOL_RMT a TRUE: si tratta di una variabile di $ARM_DATA che non viene azzerata
alla disattivazione del programma e il cui valore, inoltre, viene memorizzato nel
‘file.C5G’ mediante il comando Config. (F1) (CS) nella pagina SETUP del Terminale di
Programmazione.
Si noti che, con tool remoto abilitato, la terna relativa al pezzo da lavorare viene definita
rispetto alla flangia del robot mediante $UFRAME, mentre $TOOL rappresenta la
posizione del TCP remoto rispetto alla terna mondo (vd. Fig. 5.12 - Sistema con tool
remoto).

Fig. 5.12 - Sistema con tool remoto

1. Terna della flangia


2. Terna utente
3. Terna TCP
4. Utensile fisso
5. Terna di base
6. Terna mondo

Nel movimento in cartesiano ($BASE, $TOOL, $UFRAME), CON IL TOOL REMOTO


ABILITATO, programmando il movimento del robot occorre tenere conto del
movimento virtuale del tool remoto, e NON del movimento reale del robot stesso.
Esempio: CON IL TOOL REMOTO ABILITATO, per soddisfare il movimento Z+ in
$BASE (movimento in Z verso l’ALTO), il robot DEVE muovere in Z verso il BASSO
poichè, in questo modo, è come se il tool remoto (che in realtà è fisso) si
spostasse virtualmente verso l’alto (ossia Z+ in $BASE come richiesto
dall’utente).

pr-0-0-gpr_04.fm
80 08/1112
Controllo del movimento

5.12 Movimento integrato


Quando la base di un robot è montata su un altro meccanismo allo scopo di estenderne
l’area di lavoro, la movimentazione delle due meccaniche può essere gestita in modo
integrato. Si possono distinguere due situazioni a seconda che il meccanismo che
trasporta il robot sia costituito da un singolo asse ausiliario (asse integrato) o da un
secondo robot (arm integrati).

1. Riferimento di base sulla slitta


2. base del robot
3. Riferimento utente
4. Riferimento mondo
5. Vista laterale
6. Vista dall’alto
7. Rotazione della colonna
8. Colonna rotante
9. Riferimento della base della colonna
10. Base del robot
11. Riferimento utente
12. Riferimento mondo
13. Colonna rotante
14. Rotazione della colonna
15. Slitta

pr-0-0-gpr_04.fm
08/1112 81
Controllo del movimento

5.12.1 Asse Integrato


Un robot può essere montato su un asse ausiliario per estenderne l’area di lavoro.
L’asse può corrispondere ad una slitta (asse traslante) o ad una colonna rotante.
In questa situazione è possibile integrare l’asse ausiliario nel movimento del robot.
Questo significa che la posizione cartesiana del robot viene calcolata tenendo conto
della posizione dell’asse ausiliario e quindi rispetto ad un riferimento solidale con il
pavimento della cella (riferimento MONDO), piuttosto che con la base del robot. In
pratica sarà possibile muovere il TCP lungo un percorso lineare o circolare mentre la
slitta/colonna è in movimento oppure muovere la slitta/colonna tenendo il TCP fermo
rispetto al pavimento: in entrambi i casi gli assi del robot compenseranno lo
spostamento dell’asse ausiliario.
L’insieme degli assi dei due meccanismi viene visto dal sistema come un unico
manipolatore. Per l’assegnazione delle posizioni di destinazione dei movimenti è
possibile utilizzare tutti i tipi disponibili: JOINTPOS, POSITION, XTNDPOS. Nel caso di
XTNDPOS è possibile specificare contemporaneamente la posizione cartesiana del
TCP oltre alla posizione dell’asse ausiliario.

Per i parametri di configurazione fare riferimento al Cap. Uso dei Posizionatori


gestiti da C5G.

5.12.1.1 Movimento manuale


Muovendo manualmente la slitta/colonna integrata (jog), il robot si comporta
diversamente a seconda della modalità di movimentazione impostata: in modalità giunti,
premendo il tasto corrispondente alla slitta/colonna, gli assi del robot non muovono;
muove solamente l’asse ausiliario. Al contrario nelle modalità cartesiane di movimento
manuale (BASE, TOOL, UFRAME) il tasto 7 sposta la slitta/colonna mantenendo il TCP
fermo, ovunque gli assi del robot compensano lo spostamento dell’asse ausiliario.

5.12.1.2 Sistemi di riferimento


Con la slitta/colonna integrata il riferimento della base del sistema di assi (definito
mediante la variabile $BASE) si trova in corrispondenza della base della slitta/colonna.
Gli altri sistemi di riferimento rimangono invariati secondo quanto descritto nel paragrafo
Terne di Riferimento e riportato nella seguente Fig. 5.13 - Sistema di riferimento BASE
- assi integrati.

Fig. 5.13 - Sistema di riferimento BASE - assi integrati

pr-0-0-gpr_04.fm
82 08/1112
Controllo del movimento

1. Raggio dell’arm rotante (R)


2. Rotazione destrorsa della colonna
3. Altezza della colonna (H)
4. Rotazione sinistrorsa della colonna

5.12.1.3 Limitazioni
Il movimento integrato tra slitta/colonna e robot è possibile nelle seguenti condizioni:
– non vi sono limitazioni sul modello di robot, tuttavia esso può essere posizionato
rispetto alla flangia della slitta/colonna solo in otto posizioni e cioè: l’asse
Zbase_robot sempre parallelo a Zbase_slitta/colonna (nei due versi) e l’asse Xbase_robot
allineato con l’asse Xbase_slitta/colonna o Ybase_slitta/colonna (quattro possibili
direzioni);
– l’asse corrispondente alla slitta/colonna deve essere il primo asse ausiliario
disponibile;
– è possibile integrare una sola slitta o colonna per ciascun robot;
– non è possibile abilitare o disabilitare l’integrazione della slitta/colonna in tempo
reale (è necessaria una ripartenza dell’Unità di Controllo).

5.13 Funzionalità di Pallettizzazione (prestazione


opzionale)

Palletizing Motion
Il codice dell’opzione è CR17926214.

Questa prestazione opzionale permette di utilizzare come PALLETTIZZATORE


qualsiasi robot antropomorfo o a parallelogramma, a 6 assi con polso sferico.
Il robot si muove in modo tale che la flangia sia mantenuta sempre parallela al terreno
(con la z del TOOL) verso il basso; l’asse 4 NON è utilizzato.
Questa funzionalità permette inoltre di ridurre il tempo ciclo e rende possibili traiettorie
eterogenee (in fly e non).
I flag di configurazione del polso (W) NON sono tenuti in considerazione, rendendo più
agevole la programmazione.

Si noti che è possibile utilizzare il robot sia con il normale funzionamento


(antropomorfo/a parallelogramma con 6 gradi di libertà) o come pallettizzatore
(4 gradi di libertà), modificando la configurazione della macchina, senza
necessità di riavviarla.

Per utilizzare questa funzionalità è necessario:


– avere acquistato la prestazione software,
– disporre di un robot SMART con polso sferico,
– posizionare il robot in modo che:
• l’asse 4 sia pari a 0
• l’orientamento sia pari a <0, 180°, E3> (composto, a seconda del robot, dalla
somma dei giunti 2, 3 e 5);
– non avere movimenti pendenti sull’Arm,

pr-0-0-gpr_04.fm
08/1112 83
Controllo del movimento

– impostare a FALSE il flag $JNT_MTURN (traiettoria giunti a strada minima).


Nel caso in cui una o più di queste condizioni non siano soddisfatte il sistema genererà
un errore.
Vengono ora descritti in dettaglio i seguenti argomenti:
– Attivazione
– Disattivazione
– Esempio di programma di pallettizzazione.

5.13.1 Attivazione
a. Portare il robot (con l’opzione disattivata) nella posizione richiesta per attivarla,

b. introdurre il comando di attivazione in uno dei due modi seguenti:


– da Programma PDL2 - chiamare la built-in routine ARM_PALLETIZING (ON,
<arm_num>) per attivare l’opzione sull’Arm “arm_num”

Per ulteriori informazioni su questa Built-in, riferirsi al manuale PDL2


Programming Language - capitolo BUILT-IN Routines List.

– da Terminale di Programmazione - selezionare l’Arm desiderato e spostare il


focus sullo stato relativo al Pallettizzatore (vd.Fig. 5.14 - campo evidenziato
in giallo), perchè venga visualizzati il corrispondente tasto funzionale
Abilita(F1). Premerlo (vd.Fig. 5.14 - tasto evidenziato in rosso).

Fig. 5.14 - Funzionalità di Pallettizzazione su TP - abilitazione

c. Verificare che sul TP sia presente la dicitura Pallet nel sesto campo della barra di
stato (vd.Fig. 5.15 - campo evidenziato in viola).

pr-0-0-gpr_04.fm
84 08/1112
Controllo del movimento

NOTA
Dal momento dell’attivazione NON sarà più possibile muovere in jog gli assi del
robot che sono vincolati a mantenere l’assetto del secondo angolo di Eulero pari
a 180° (equivalente ad avere la posizione della flangia parallela al terreno), e
l’asse 4.

Nella generazione delle traiettorie, il sistema prenderà automaticamente carico di


calcolare le traiettorie ottimizzate per la pallettizzazione.

È possibile utilizzare il robot come pallettizzatore, in programmazione e in ciclo


automatico.

5.13.2 Disattivazione

Innanzitutto è necessario che NON CI SIANO MOVIMENTI PENDENTI.

Per disabilitare la funzionalità di Pallettizzazione e ripristinare il normale funzionamento


del robot, occorre:

a. introdurre il comando di attivazione in uno dei due modi seguenti:


– da Programma PDL2 - chiamare la built-in routine
ARM_PALLETIZING (OFF, <arm_num>) per disattivare l’opzione sull’Arm
“arm_num”

Per ulteriori informazioni su questa Built-in, riferirsi al manuale PDL2


Programming Language - capitolo BUILT-IN Routines List.

– da Terminale di Programmazione - spostare il focus sullo stato relativo al


Pallettizzatore (vd.Fig. 5.15 - campo evidenziato in giallo), perchè venga
visualizzato il tasto funzionale Disabilita (F2). Premerlo (vd.Fig. 5.15 - tasto
evidenziato in rosso).

Fig. 5.15 - Funzionalità di Pallettizzazione su TP - disabilitazione

pr-0-0-gpr_04.fm
08/1112 85
Controllo del movimento

5.13.3 Esempio di programma di pallettizzazione


PROGRAM test_arm_palletizing HOLD

VAR pnt0006P, pnt0007P : POSITION


pnt0001P, pnt0002P, pnt0003P, pnt0004P, pnt0005P : POSITION

BEGIN

$JNT_MTURN := FALSE

ARM_PALLETIZING(ON,1)
MOVE JOINT NEAR pnt0002P BY 300
MOVEFLY LINEAR TO pnt0002P ADVANCE
MOVEFLY LINEAR NEAR pnt0003P BY 20 ADVANCE
MOVE LINEAR TO pnt0003P
MOVEFLY LINEAR AWAY 400 ADVANCE
MOVEFLY JOINT TO pnt0004P ADVANCE
MOVEFLY LINEAR TO pnt0005P ADVANCE
MOVEFLY LINEAR NEAR pnt0006P BY 300 ADVANCE
MOVEFLY LINEAR TO pnt0006P ADVANCE
MOVEFLY LINEAR NEAR pnt0007P BY 20 ADVANCE
MOVE LINEAR TO pnt0007P
MOVEFLY LINEAR AWAY 1000
ARM_PALLETIZING(OFF,1)

END test_arm_palletizing

pr-0-0-gpr_04.fm
86 08/1112
Movimento Sincrono (prestazione opzionale)

6. MOVIMENTO SINCRONO
(PRESTAZIONE OPZIONALE)

Synchronized Arms
Il codice dell’opzione è CR17926204.

Nel presente capitolo viene descritta la prestazione opzionale di Movimento Sincrono,


cioè il movimento sincronizzato tra un robot ed altri assi.
In particolare, vengono trattati i seguenti argomenti:
– Sincronizzazione con gli assi ausiliari
– Arm sincronizzati
– Limitazioni nel movimento dei due Arm
– Spostamento manuale di arm sincronizzati
– Apprendimento e modifica dei punti (REC/MOD) con arm sincronizzati
– Perdita della sincronizzazione
– Variazione Run-Time della velocità lineare

6.1 Sincronizzazione con gli assi ausiliari


Quando gli assi appartengono allo stesso arm del robot vengono denominati assi
ausiliari e si spostano sempre in modo sincronizzato con il robot: essi, cioè, iniziano e
terminano un movimento tutti insieme.
Il movimento può essere programmato mediante la classe dati JOINTPOS, nella quale
è indicata la posizione giunti di ciascun asse, oppure mediante la classe dati XTNDPOS,
formata da una posizione cartesiana per il robot e da un ARRAY di valori giunto per gli
altri assi. Si consiglia l’uso della classe dati XTNDPOS.

6.2 Arm sincronizzati


Si dice che due arm sono sincronizzati quando entrambi iniziano e terminano un
movimento insieme. Per poter programmare movimenti sincronizzati di due arm è stata
implementata la clausola SYNCMOVE sull’istruzione MOVE.
Questa prestazione è utile, ad esempio, in una cella di lavoro nella quale lo stesso pezzo
da lavorare sia installato su due arm. E’ necessaria inoltre nel caso di movimenti
cooperativi (par. 7.1 Movimento cooperativo con assi ausiliari a pag. 92).
Gli Arm coinvolti in un movimento sincronizzato, sono:
– Arm MASTER - è sempre l’Arm che esegue la MOVE;
– Arm SERVER - è sempre l’Arm che esegue la SYNCMOVE.
Nella seguente MOVE sincronizzata:

MOVE ARM[1] LINEAR TO PNT0001P SYNCMOVE ARM[2] JOINT TO PNT001J

pr-0-0-gpr_07.fm
08/1012 87
Movimento Sincrono (prestazione opzionale)

l’Arm MASTER è ARM[1] e l’Arm SERVER è ARM[2]; mentre nella MOVE sincronizzata
successiva:

MOVE ARM[2] LINEAR TO PNT0001J SYNCMOVE ARM[1] JOINT TO PNT001P

l’Arm MASTER è ARM[2] e l’Arm SERVER è ARM[1].

Se si esegue una SYNCMOVE con movimento cooperativo fra Arm abilitato


(ARM_COOP o ARM_MCOOP), l'ordine degli Arm è importante e non è
equivalente: l’Arm MASTER deve essere l’Arm WORKER, mentre l’Arm SERVER
deve essere l’Arm POSITIONER, dove con Arm POSITIONER si intende o l’Arm
posizionatore vero e proprio (nel caso di ARM_COOP) o l’Arm proprietario degli
assi ausiliari che fungono da posizionatore nel caso di ARM_MCOOP.
Per ulteriori dettagli sui concetti di Arm Positioner e Arm Worker, riferirsi al
par. 7.3 Movimento multi-cooperativo a pag. 94.

Tutto ciò è indipendente dall’Arm dichiarato (o sottinteso), PROG_ARM, in testa al


programma.
La variabile di sistema $SYNC_ARM specifica l’arm sincronizzato di default per la
clausola SYNCMOVE (ciò è simile a quanto accade con $PROG_ARM che definisce
l’arm di default per l’istruzione MOVE). $SYNC_ARM è una variabile specifica per il
programma, che deve essere inizializzata dall’utente. Così come, scrivendo
MOVE TO p1 senza specificare un arm, viene considerato il valore di $PROG_ARM,
analogamente, scrivendo SYNCMOVE TO p2, viene considerato il valore di
$SYNC_ARM in quanto l’arm per la SYNCMOVE non è stato specificato
Segue un esempio di programma che controlla due Arm che muovono in modo
sincronizzato:

PROGRAM esempio
BEGIN
-- l’arm principale è l’arm 1, l’arm sincronizzato
-- è l’arm 2
MOVE ARM[1] TO p1 SYNCMOVE ARM[2] TO p2
MOVE TO p1 SYNCMOVE ARM[2] to p2
-- $PROG_ARM si sposta su p1
MOVE ARM[1] TO p1 SYNCMOVE TO p2
-- ERRORE: $SYNC_ARM non è inizializzata
$SYNC_ARM := 2 -- $SYNC_ARM viene inizializzata
MOVE ARM[1] TO p1 SYNCMOVE TO p2
-- $SYNC_ARM (arm 2) si sposta su p2
MOVE TO p1 SYNCMOVE TO p2
-- sono usate $PROG_ARM e $SYNC_ARM
END esempio
La clausola ADVANCE viene applicata all’intera MOVE... SYNCMOVE. Per eseguire un
fly occorre specificare la clausola FLY sul movimento principale e inserire la ADVANCE
prima della SYNCMOVE:

MOVEFLY TO p1 ADVANCE,
SYNCMOVEFLY ARM[2] TO p2,
ENDMOVE
Se la ADVANCE viene inserita dopo p2, il traduttore visualizza un messaggio di
avvertimento e corregge automaticamente l’istruzione.

pr-0-0-gpr_07.fm
88 08/1012
Movimento Sincrono (prestazione opzionale)

6.3 Limitazioni nel movimento dei due Arm


Il movimento combinato dei due Arm impone delle limitazioni di movimento. La
seguente tabella evidenzia quali siano i parametri limitanti del movimento in due
situazioni frequenti:

Traiettoria Arm MASTER Valore di $SPD_OPT Arm limitante

giunti o cartesiana SPD_JNT o SPD_CONST Arm con i parametri più stringenti

cartesiana diversa da SPD_JNT e da SPD_CONST Arm MASTER

Sarà cura dell’utilizzatore specificare un’opzione di velocità compatibile con il


movimento combinato, in quanto per ambedue gli Arm valgono tutte le limitazioni
presenti sul singolo robot: ad esempio una traslazione breve dell’Arm MASTER, con
$SPD_OPT:=SPD_LIN, combinata con un’ampia variazione dell’orientamento dell’Arm
SERVER, impone all’Arm SERVER una sovravelocità non controllabile con i soli valori
di override.
Si noti che nella programmazione di un sistema multiarm composto da due robot che
muovano entrambi in cartesiano con
$SPD_OPT:=SPD_LIN e con
$LIN_SPD uguale,
ma su percorsi di diversa lunghezza, solo l’Arm MASTER rispetterà il vincolo di velocità,
mentre l’Arm SERVER si muoverà più velocemente se dovrà compiere un percorso
maggiore, più lentamente se dovrà compiere un percorso minore.

6.4 Spostamento manuale di arm sincronizzati


In un sistema a due arm, l’utente può attivare (DRIVE ON) e spostare manualmente
ciascuno di essi. Prima di passare allo stato DRIVE ON occorre specificare l’arm
principale (memorizzato in $TP_SYNC_ARM[1]) e l’arm sincronizzato (memorizzato in
$TP_SYNC_ARM[2]). Questo deve essere fatto dalla Pagina di Motion, sottopagina
Basic, sul Terminale di Programmazione se l’opzione SYNCARM è stata acquistata. Se
$TP_SYNC_ARM[2] è impostata a zero, verrà usato solo un arm, cioè
$TP_SYNC_ARM[1].
L’arm specificato nella barra di stato del Terminale di Programmazione, può essere
spostato con i tasti di movimentazione manuale. Per passare da un arm all’altro, occorre
specificare l’arm desiderato nel campo Arm della sottopagina Basic della Pagina di
Motion, oppure utilizzare il tasto Arm (eventualmente SHIFT+Arm) presente nel Menu
di Destra del Teach Pendant. Per ulteriori informazioni riferirsi al manuale Uso
dell’Unità di Controllo, Menu Destro.

6.5 Apprendimento e modifica dei punti


(REC/MOD) con arm sincronizzati
L’abilitazione e la disabilitazione dell’apprendimento della SYNCMOVE vengono
selezionate da Pagina IDE, comando ‘Selezione - Impostazioni tasto REC’, oppure da

pr-0-0-gpr_07.fm
08/1012 89
Movimento Sincrono (prestazione opzionale)

Program Edit e Memory Debug, sotto la voce DEBUG SETUP SYNC.


In condizione di disabilitazione, premendo il tasto REC si apprende MOVE ARM[#] TO
p1, dove # è il numero dell’arm selezionato. Abilitando l’apprendimento della
SYNCMOVE, la pressione del tasto REC apprende MOVE ARM[#] TO p1 SYNCMOVE
ARM[&] TO p2, dove # è il numero del valore di $TP_SYNC_ARM[1] e & è il valore di
$TP_SYNC_ARM[2] (indipendentemente dall’ARM attualmente selezionato).
La Tab. 6.1 - Esempi di apprendimento (tasto REC) illustra, appunto, alcuni esempi di
apprendimento.

Tab. 6.1 - Esempi di apprendimento (tasto REC)


Arm principale Azione
1 apprende “MOVE ARM[1] TO p1"
2 apprende “MOVE ARM[2] TO p2"
1 apprende “MOVE ARM[1] TO p3 SYNCMOVE ARM[2] TO p4"
2 apprende “MOVE ARM[2] TO p4 SYNCMOVE ARM[1] TO p5"

Per ulteriori informazioni consultare il manuale Uso dell’Unità di Controllo C5G - IDE
Page.

6.6 Perdita della sincronizzazione


Qui di seguito vengono illustrati i casi in cui si verifica la perdita della sincronizzazione
tra più arm. Il primo caso è quello della clausola TIL che può essere applicata sia all’arm
principale sia a quello sincronizzato. Quando scatta l’evento associato alla clausola TIL
il movimento corrispondente viene cancellato e si perde la sincronizzazione. Un
secondo caso è quello dell’esecuzione dell’istruzione CANCEL che durante un
movimento sincronizzato, provoca la cancellazione del movimento dell’arm principale,
mentre quello dell’arm sincronizzato prosegue, con la conseguente perdita della
sincronizzazione. Se è necessario annullare entrambe le impostazioni, occorre
cancellare il movimento su tutti e due gli arm (utilizzando la clausola FOR con
l’istruzione CANCEL).
Se uno dei due arm viene bloccato tramite l’istruzione LOCK, durante un movimento
sincronizzato, si perde la sincronizzazione. Per fare in modo che ciò non avvenga, gli
arm devono essere bloccati entrambi mediante l’istruzione:

LOCK ARM[1], ARM[2]


e non:

LOCK ARM[1]
LOCK ARM[2]
Una volta bloccati simultaneamente entrambi gli arm, la ripresa del movimento sull’arm
1 mediante l’istruzione RESUME ARM[1] non ristabilisce il movimento sincronizzato.
Quest’ultimo viene ristabilito solo riprendendo il movimento anche sul secondo arm
(RESUME ARM[2]).

pr-0-0-gpr_07.fm
90 08/1012
Movimento Sincrono (prestazione opzionale)

6.7 Variazione Run-Time della velocità lineare


Esiste una funzionalità che, in particolari condizioni, permette di variare la
velocità lineare Run-Time di un Robot (vd. il par. 5.5.2.2 Variazione Run-Time della
velocità lineare (Run-Time Speed Override) a pag. 61)

Nei sistemi con singolo Arm, esiste un’unica variabile predefinita da utilizzare per la
variazione Run-Time della velocità lineare: $LIN_SPD_RT_OVR.
Viceversa, nei sistemi multi-arm si ha una $LIN_SPD_RT_OVR per ognuno degli Arm
e, per la variazione Run-Time della velocità lineare occorre identificare quale di esse
utilizzare durante l’esecuzione di una SYNCMOVE tra gli Arm.
E’ importante capire esattamente su quale Arm sia attiva tale funzionalità. A tal fine si
opera come descritto di seguito.
Data l’istruzione PDL2 :

MOVE ARM[i] TO P1 SYNCMOVE ARM[j] TO P2


si hanno le seguenti possibilità:

a. ENTRAMBI gli Arm NON SONO Robot

b. solo UNO dei due Arm È un Robot

c. ENTRAMBI gli Arm SONO Robot.

Caso a. non è consentita alcuna variazione Run-Time della velocità


Caso b. la variazione Run-Time della velocità è consentita solo sul
Robot (e si agisce sulla variabile predefinita
$LIN_SPD_RT_OVR ad esso associata)
Caso c. la variazione Run-Time è consentita sull’Arm che esegue
un movimento Cartesiano. In qualsiasi caso, occorre agire
sulla variabile predefinita $LIN_SPD_RT_OVR associata
all’ARM sul quale è attiva la funzionalità.

Per capire se la variazione Run-Time della velocità è applicabile e quindi su quale ARM
agire, è sufficiente testare il secondo bit del campo

$CRNT_DATA[num_arm].C_ALONG_1D[50]
opportunamente impostato dal sistema, sull’ARM sul quale è attiva la funzionalità di
variazione Run-Time della velocità. Se tale bit è TRUE, significa che l’ARM ad esso
associato è quello che governa la variazione Run-Time della velocità lineare durante
l’esecuzione della SYNCMOVE, mentre l’altro ARM si adeguerà alle variazioni. In tal
modo è garantita la sincronizzazione del movimento.

pr-0-0-gpr_07.fm
08/1012 91
Movimento Cooperativo (prestazione opzionale)

7. MOVIMENTO COOPERATIVO
(PRESTAZIONE OPZIONALE)

Cooperative Motion
Il codice dell’opzione è CR17926200.

Questa prestazione semplifica la programmazione delle applicazioni in cui una cella di


lavoro è composta da un robot e da uno o più posizionatori (es.: una tavola rotante).
Abilitando il movimento cooperativo, la posizione del robot viene definita rispetto al
posizionatore: la traiettoria cartesiana può quindi essere eseguita a velocità costante
mentre viene spostato il pezzo da lavorare. Ciò è molto utile per la saldatura di forme
complesse o di grandi pezzi da lavorare.
In caso di movimenti cooperativi può essere adottata la seguente regola generale: la
trasformazione $UFRAME definisce la posizione del pezzo da lavorare rispetto alla
terna della flangia del posizionatore attivo e non rispetto alla terna mondo (Fig. 7.1
- Terne di sistema con movimento cooperativo degli assi ausiliari e Fig. 7.2 - Terna
utente con movimento cooperativo degli assi ausiliari). Questo perchè la terna utente
non è fissa, ma è correlata al posizionatore.
Il movimento cooperativo può essere abilitato fra un robot e i relativi assi ausiliari oppure
fra due arm diversi.
Nel presente capitolo vengono descritti i seguenti argomenti:
– Movimento cooperativo con assi ausiliari
– Arm cooperativi
– Movimento multi-cooperativo
– Movimento manuale.

7.1 Movimento cooperativo con assi ausiliari


Se il robot e il posizionatore formano una cella di lavoro ad arm singolo, gli assi del
posizionatore sono controllati mediante le classi dati XTNDPOS come assi ausiliari. Il
movimento cooperativo per questo tipo di posizionatore può essere abilitato soltanto
dopo aver correttamente configurato il posizionatore. La variabile di sistema
$AUX_BASE è un array di POSITION ed è utilizzata per definire le posizioni delle basi
dei posizionatori rispetto alla terna mondo.
Per abilitare e disabilitare il movimento cooperativo, può essere chiamata da
programma la seguente built-in:
AUX_COOP(flag, joint_aus <, arm>)
Flag è un parametro booleano che può essere impostato a ON o a OFF, rispettivamente
per abilitare o disabilitare il movimento cooperativo. Il campo joint_aus rappresenta il
numero dell’ultimo asse di cui è formato il posizionatore.
Il campo arm indica l’arm su cui deve essere eseguito il movimento cooperativo; se non
esplicitamente definito, viene usato il valore di $PROG_ARM.
Ad esempio, in un sistema con un robot a 5 assi, un primo posizionatore a 2 assi (asse
6, 7) e un secondo posizionatore a 1 asse (asse 8), la sintassi sarà la seguente:

pr-0-0-gpr_08.fm
92 08/1112
Movimento Cooperativo (prestazione opzionale)

AUX_COOP(ON, 7) -- abilita il movimento cooperativo sul primo


-- posizionatore
AUX_COOP(ON, 8) -- disabilita il movimento cooperativo precedente
-- ed abilita il movimento cooperativo sul
-- secondo posizionatore
AUX_COOP(OFF) -- disabilita il movimento cooperativo

Fig. 7.1 - Terne di sistema con movimento cooperativo degli assi


ausiliari

1. Terna della flangia del posizionatore


2. Posizionatore 1
3. Posizionatore 2

Fig. 7.2 - Terna utente con movimento cooperativo degli assi


ausiliari

1. Terna utente
2. Terna della flangia del posizionatore
3. Terna di base del posizionatore

7.2 Arm cooperativi


E’ possibile abilitare il movimento cooperativo fra due arm di una stessa cella di lavoro
controllata dal C5G, definendo l’uno come arm di lavoro e l’altro come arm
posizionatore. La traiettoria dell’arm di lavoro verrà calcolata in relazione alla flangia

pr-0-0-gpr_08.fm
08/1112 93
Movimento Cooperativo (prestazione opzionale)

dell’arm posizionatore.
Per abilitare e disabilitare il movimento cooperativo fra due arm, può essere utilizzata la
seguente built-in

ARM_COOP(flag <, arm_posizionatore <, arm_lavoro>>)


flag è un parametro booleano che può essere impostato a ON o a OFF, rispettivamente
per abilitare o disabilitare il movimento cooperativo. Il secondo parametro è opzionale e
specifica l’arm del posizionatore. Se l’arm del posizionatore non viene specificato, viene
considerato il valore della variabile di sistema $SYNC_ARM. Anche il terzo parametro
è opzionale e indica l’arm di lavoro. Se l’arm di lavoro non è specificato, viene
considerato il valore della variabile di sistema $PROG_ARM.
Il movimento cooperativo può essere eseguito indipendentemente dalla
sincronizzazione degli arm: è sufficiente abilitarlo e muovere l’arm del posizionatore e
quello di lavoro. Dal punto di vista della programmazione, comunque, è preferibile
utilizzare la sincronizzazione.
La Fig. 7.3 - Terne di sistema con arm cooperativi illustra la definizione delle diverse
terne di riferimento per i due arm. Il posizionatore (arm 2) muove il proprio TCP (definito
da $ARM_DATA[2].TOOL) rispetto alla relativa terna utente
($ARM_DATA[2].UFRAME), mentre il TCP dell’arm di lavoro ($ARM_DATA[1].TOOL)
si muove in relazione ad una terna di riferimento utilizzata dal TCP del posizionatore
(mediante $ARM_DATA[1].UFRAME).

Fig. 7.3 - Terne di sistema con arm cooperativi

1. Arm di lavoro
2. Arm del posizionatore

7.3 Movimento multi-cooperativo


Con il termine Multi-Cooperativo si intende la possibilità, per 2 ARM, di cooperare sullo
stesso gruppo di assi ausiliari (ad esempio un posizionatore) appartenente ad uno dei
2 ARM.
Nella multi-cooperazione NON possono essere coinvolti più di 2 ARM.

pr-0-0-gpr_08.fm
94 08/1112
Movimento Cooperativo (prestazione opzionale)

Per abilitare/disabilitare il movimento multi-cooperativo, deve essere utilizzata la


seguente built-in:

ARM_MCOOP(flag<, aux_joint<, positioner_arm<, working_arm>>>)


dove
flag è un parametro booleano che può essere impostato a ON o a OFF, rispettivamente
per abilitare o disabilitare il movimento multi-cooperativo;
aux_joint è il numero dell’asse ausiliario. Se flag è OFF, questo parametro può essere
omesso; se flag è ON, aux_joint deve essere specificato;
positioner_arm, se presente, specifica il numero dell’arm posizionatore. Se non
presente, viene utilizzato $SYNC_ARM;
working_arm, se presente, specifica il numero dell’arm lavoratore. Se non presente,
viene utilizzato $PROG_ARM.
Per ulteriori informazioni, riferirsi al manuale PDL2 Programming Language,
cap.BUILT-IN Routines List.

Fig. 7.4 - Terne di sistema con multi-cooperazione

1. Arm di lavoro
2. Arm del posizionatore

Pre-requisito fondamentale, per l’utilizzo della multi-cooperazione, è il corretto


posizionamento, nella cella, di tutti gli oggetti coinvolti, quindi l’assegnazione
delle $BASE e $AUX_BASE (vd. Fig. 7.4).

Questa prestazione richiede l’opzione software di ‘Movimento Cooperativo’ -


vd. cap. Appendice - Opzioni Software nel manuale Uso dell’Unità di Controllo
C5G.

7.4 Movimento manuale


Il movimento cooperativo facilita la programmazione in quanto, movimentando
manualmente l’arm posizionatore, l’arm di lavoro segue lo stesso movimento in modo

pr-0-0-gpr_08.fm
08/1112 95
Movimento Cooperativo (prestazione opzionale)

da mantenere costante l’impostazione della torcia (posizione e orientamento) rispetto al


pezzo da lavorare. Questa caratteristica semplifica la programmazione di traiettorie
complesse, riducendo il tempo necessario e il numero di punti che devono essere
appresi.
Il movimento cooperativo durante la movimentazione manuale può essere abilitato
mediante le procedure ARM_COOP (per arm cooperativi), AUX_COOP (per il
movimento cooperativo di assi ausiliari) e ARM_MCOOP (per il movimento
multicooperativo). Queste procedure possono essere eseguite da programma in
ambiente di programmazione, premendo il tasto RUN, oppure mediante il comando
Esegui dalla Pagina di Service (softkey Esegui) del Terminale di Programmazione.

pr-0-0-gpr_08.fm
96 08/1112
Sensor Tracking (prestazione opzionale)

8. SENSOR TRACKING
(PRESTAZIONE OPZIONALE)

Sensor Tracking
Il codice dell’opzione è CR17926205.

L’ambiente di “Sensor Tracking” consente di effettuare una correzione in tempo reale


della traiettoria cartesiana sulla base delle indicazioni provenienti da sensori di vario
genere. Le principali caratteristiche sono:
– possibilità di interfacciarsi con una vasta gamma di sensori (integrati in C5G, I/O
analogici, porte seriali);
– proiezione delle correzioni in tutti i principali sistemi di riferimento (tool, user, world,
weaving);
– correzioni in traslazione e variazione di assetto;
– correzioni relative ed assolute;
– possibilità di asservimento con e senza movimento programmato;
– sensori dedicati a ciascun arm in applicazioni multi-arm;
– possibilità di configurare la risposta dinamica del robot;
– rispondenza ai vincoli di sicurezza;
– piena compatibilità con le altre prestazioni di C5G.
Seguono informazioni dettagliate sui seguenti argomenti:
– Principio di funzionamento
– Configurazione su diversi arm
– Interfaccia del sensore
– Sistema di riferimento del sensore
– Tipologia delle informazioni acquisite dal sensore
– Criteri di attuazione delle correzioni
– Modalità di abilitazione del sensor tracking
– Malfunzionamenti del sensore
– Gestione degli scostamenti totali accumulativi
– Esempio di programmazione

8.1 Principio di funzionamento


Durante il normale funzionamento, il robot risulta asservito su una posizione
programmata che viene aggiornata ciclicamente ad ogni periodo di interpolazione
($IPERIOD). L’ambiente di sensor tracking consente al robot di discostarsi
progressivamente da questa posizione concordemente con le richieste provenienti da
un sensore. Questo viene ottenuto mantenendo un vettore di scostamento (scostamenti

pr-0-0-gpr_10.fm
08/1112 97
Sensor Tracking (prestazione opzionale)

totali) che viene applicato alla posizione teorica programmata.


Il vettore è composto da 6 componenti di cui le prime tre rappresentano gli scostamenti
nelle direzioni X, Y e Z e le ultime le rotazioni intorno agli stessi assi. Per comprendere
meglio l’effetto del sensor tracking prendiamo in considerazione una applicazione in cui
vi sia una traiettoria programmata ed un sensore in grado di portare il TCP su una
traiettoria ottimizzata diversa da quella programmata. Supponiamo che il programma
sia composto da un movimento giunti su una posizione iniziale, seguita da due
movimenti lineari raccordati in fly e da un ultimo movimento giunti per portarsi su una
posizione di fuori-ingombro.
Il programma potrebbe essere il seguente:

PROGRAM sensor
VAR
p1, p2, p3, p4 : POSITION
BEGIN
$SPD_OPT:=LIN_SPD--Per controllare la velocità lineare
$LIN_SPD:=0.1 --Velocità lineare espressa in m/s
MOVE JOINT TO p1
MOVEFLY LINEAR TO p2 ADVANCE
MOVE LINEAR TO p3
MOVE JOINT TO p4
END sensor
Se lungo il tratto cartesiano da p1 a p3 viene abilitato il sensore, l’effetto potrà essere
quello rappresentato in Fig. 8.1 - Traiettoria programmata e controllo sensori in cui la
linea tratteggiata rappresenta la traiettoria programmata mentre la linea continua è la
traiettoria realmente percorsa da TCP sotto il controllo del sensore; la freccia tra le due
traiettorie rappresenta il vettore degli scostamenti. Nell’esempio si noti che
l’inseguimento termina quando la posizione teorica raggiunge il punto p3; su questo
punto l’Unità di Controllo riacquisisce la posizione reale e azzera gli scostamenti
accumulati lungo il percorso, quindi il successivo movimento giunti terminerà
esattamente sul punto programmato p4 come desiderato. Nei seguenti paragrafi
verranno esposte tutte le caratteristiche dell’ambiente di sensor tracking e verrà
spiegato l’uso delle variabili di sistema e delle Built-In con cui è possibile programmare
applicazioni che utilizzano sensori.

Fig. 8.1 - Traiettoria programmata e controllo sensori

1. Punto di partenza 2. Punto di arrivo


3. Traiettoria programmata 4. Traiettoria controllata dal sensore

pr-0-0-gpr_10.fm
98 08/1112
Sensor Tracking (prestazione opzionale)

8.2 Configurazione su diversi arm


C5G può controllare più robot contemporaneamente (sistema multi-arm); per questo le
prestazioni di sensor tracking possono essere abilitate indipendentemente su diversi
arm mediante variabili di sistema che sono campi di $ARM_DATA e Built-In che
ammettono come parametro opzionale l’arm a cui si riferiscono. Tutte le variabili sono
elencate nella Tab. 8.1 - Variabili di sistema per Sensor Tracking; essa illustra anche i
limiti, il valore di default e se le variabili possono essere usate con clausola WITH. Si
noti che, dal momento che tutte le variabili sono campi di $ARM_DATA, esse non
vengono azzerate disattivando il programma, in cui sono state modificate. Inoltre,
eseguendo il comando Config. (F1) - Salva nel file di configurazione, pagina SETUP
del TP, esse vengono salvate nel file ‘file.C5G’ con il loro valore corrente. La Tab. 8.2
- Built-In per Sensor Tracking illustra le built-in per la gestione dei sensori.

Tab. 8.1 - Variabili di sistema per Sensor Tracking


Nome Tipo Limiti Default WITH
$SENSOR_ENBL BOOLEAN True-False False YES
$SENSOR_TYPE INTEGER [ 0, 30 ] 0 YES
$SENSOR_CNVRSN ARRAY [6] OF REAL [ -inf, +inf ] 0 NO
$SENSOR_GAIN ARRAY [6] OF INTEGER [ 0, 100 ] 0 NO
$SENSOR_TIME INTEGER [ 0, 10000 ] 0 ms YES
$SENSOR_OFST_LIM ARRAY [2] OF REAL [ 0, +inf ] [0,0] mm, gradi NO
$SFRAME POSITION Pos.null YES

Tab. 8.2 - Built-In per Sensor Tracking


SENSOR_SET_DATA ( err_track <,arm> )
SENSOR_GET_DATA ( sens_read <,flag <,arm>> )
SENSOR_GET_OFST ( ofst_tot <,arm> )
SENSOR_TRK ( bool <,arm> )
Dove:
– errp_track, sens_read, ofst_tot sono ARRAY[6] OF
REAL
– flag è un valore INTEGER in lettura
– arm è di tipo INTEGER

8.3 Interfaccia del sensore


Un sensore è idoneo ad applicazioni di sensor tracking se è in grado di misurare una o
più grandezze fisiche e dedurre da esse informazioni di tipo geometrico sulla traiettoria
ottimale, cioè calcolare l’errore tra la posizione reale del TCP e la posizione ottimale sul
pezzo di lavoro. Un sensore può essere integrato nel sistema a diversi livelli; si può
quindi distinguere tra sensori INTEGRATED e sensori EXTERNAL. La variabile di
sistema $SENSOR_TYPE consente di distinguere tra queste due possibilità.

8.3.1 Sensori Integrati


Alcune categorie di sensori sono predisposte per essere integrate nell’hardware del
sistema di controllo. Questi dispositivi sono sensori integrati se la comunicazione tra

pr-0-0-gpr_10.fm
08/1112 99
Sensor Tracking (prestazione opzionale)

sensore e sistema di controllo viene gestita dal software di sistema e non


esclusivamente mediante programmi PDL2. La gestione consente di correggere in
tempo reale la traiettoria del robot sfruttando la lettura della corrente/tensione d’arco
durante un pendolamento ad elevata frequenza (weaving cartesiano o giunti). In questa
configurazione la torcia viene mantenuta sul giunto da saldare mediante successive
correzioni in due direzioni: trasversale e verticale rispetto alla traiettoria.
I valori di $SENSOR_TYPE riservati a questo tipo di sensore sono compresi tra 1 e 4. I
valori 1 e 2 sono riservati alla prima scheda mentre il valore 3 e 4 alla seconda (vedi
Tab. 8.3 - Correction_Speed=Factor*Reference_Speed).
Nel caso dei sensori integrati la comunicazione delle informazioni del sensore avviene
a livello di software di sistema e quindi i valori non sono direttamente noti a livello di
PDL2. Per leggerli è stata prevista la seguente Built-In SENSOR_GET_DATA:

$SENSOR_GET_DATA ( sens_read <, flag <, arm>> )


Essa copia nel parametro sens_read le sei componenti del vettore proveniente dal
sensore: i primi tre elementi corrispondono alle traslazioni nelle direzioni X, Y e Z mentre
gli ultimi rappresentano le rotazioni intorno agli assi X, Y e Z.
Se il sensore è in grado di controllare solo alcune delle sei componenti, le altre
rimarranno al valore zero. Il parametro opzionale flag viene impostato al valore 1 se i
dati sono nuovi e cioè se non sono mai stati letti da una precedente istruzione
SENSOR_GET_DATA. Diversamente è impostato al valore 0. Il parametro opzionale
arm seleziona i dati relativi ad un arm diverso da quello di default.

8.3.2 Sensori esterni


Vengono considerati esterni quei sensori che che non sono integrati nell’hardware del
sistema di controllo. Esempi di questa categoria di sensori sono:
– semplici interruttori di finecorsa o sensori di prossimità binari che forniscono
un’unica informazione digitale (commutano il segnale quando la distanza misurata
supera una certa soglia);
– sensori di prossimità capacitivi o induttivi che comunicano mediante un input
analogico o mediante una informazione codificata su diversi input digitali;
– sensori connessi al sistema di controllo mediante una linea di comunicazione
gestita da un programma PDL2. Le telecamere bi-tridimensionali possono
appartenere a questa categoria in quanto dispongono generalmente di un
controllore dedicato, che esegue i calcoli necessari ad interpretare l’immagine, e
di una linea di comunicazione per ricevere i comandi e trasmettere le informazioni.
Questi tipi di sensori sono caratterizzati dal fatto che la lettura delle informazioni viene
effettuata da un programma PDL2 (generalmente NOHOLD), creato appositamente per
il sensore.
I valori di $SENSOR_TYPE riservati a questo tipo di sensore sono compresi tra 5 e 12
(vedi Tab. 8.3 - Correction_Speed=Factor*Reference_Speed). Per inviare la richiesta di
correzione all’ambiente di movimento è stata introdotta la seguente Built-In:

SENSOR_SET_DATA ( err_track <, arm> )


Il parametro err_track è il vettore delle correzioni richieste di cui i primi tre elementi
corrispondono alle traslazioni nelle direzioni X, Y e Z mentre gli ultimi rappresentano le
rotazioni intorno agli stessi assi.
Le componenti di err_track non utilizzate dovranno essere comunque inizializzate al

pr-0-0-gpr_10.fm
100 08/1112
Sensor Tracking (prestazione opzionale)

valore zero. Il parametro opzionale “arm” consente di inviare le correzioni ad un arm


diverso da quello di default. Si noti che la Built-In SENSOR_GET_DATA, esposta al
paragrafo precedente, può essere utilizzata anche con questo tipo di sensori. In questo
caso la variabile sens_read conterrà gli stessi dati inviati con SENSOR_SET_DATA.

8.4 Sistema di riferimento del sensore


I sensori misurano gli scostamenti rispetto ad un sistema di riferimento che dipende
dalle caratteristiche del sensore stesso, cioè dalla sua posizione e dal tipo di grandezza
fisica misurata. Per prendere in considerazione tutte le possibilità possiamo distinguere
i seguenti casi: riferimento TOOL, USER, WORLD e WEAVE. Per selezionare questi
diversi casi viene utilizzata la variabile di sistema $SENSOR_TYPE.

8.4.1 Sensore solidale con l’attrezzo (TOOL)


Viene utilizzato questo tipo di riferimento quando il sensore è montato sull’attrezzo
stesso.
– E’ il caso di un sensore di prossimità montato sulla punta dell’attrezzo o di una
telecamera laser sulla torcia di saldatura. Il caso più frequente consiste nel sensore
a parametri d’arco nelle modalità di controllo di altezza d’arco o con weaving di tipo
giunti; in quest’ultimo caso è necessario usare il riferimento TOOL perchè se il
pendolamento è di tipo giunti non è definito un sistema di riferimento di weaving
(non ha senso quindi usare la modalità nel riferimento WEAVE).
I valori di $SENSOR_TYPE riservati a questo riferimento sono: 1 per per seam tracking
(NON DISPONIBILE NELLA VERSIONE 1.0), 5 e 9 per i sensori esterni (Tab. 8.3
- Correction_Speed=Factor*Reference_Speed).
In queste modalità di inseguimento (riferimento TOOL) è possibile distinguere il sistema
di riferimento che descrive la posizione del TCP (variabile $TOOL) dal riferimento in cui
il sensore effettua le misurazioni.
Per fare questo è disponibile la variabile di sistema $SFRAME. Essa rappresenta una
trasformazione di coordinate riferita al sistema di riferimento del TCP e cioè segue
$TOOL nella catena cinematica (vedi Fig. 8.2 - Trasformazione terna utensile).

Fig. 8.2 - Trasformazione terna utensile

1. Flangia
2. Utensile
3. Sensore
4. Terna sensore
5. Terna TCP

pr-0-0-gpr_10.fm
08/1112 101
Sensor Tracking (prestazione opzionale)

8.4.2 Sensore solidale con il sistema di riferimento utente


(USER)
Questa possibilità consente di proiettare le correzioni rispetto al sistema di riferimento
utente definito dalla variabile di sistema $UFRAME.
– Si riconducono a questo caso i sensori che sono montati in una posizione fissa
rispetto alla stazione di lavoro oppure che sono movimentati da cinematismi tali per
cui è possibile ricondurre al sistema di riferimento USER le misure effettuate.
$SENSOR_TYPE può abilitare questa modalità solo per i sensori esterni con i codici 6
e 10 (vedi Tab. 8.3 - Correction_Speed=Factor*Reference_Speed).
Anche in questo caso può essere necessario definire un sistema di riferimento proprio
al sensore calcolato rispetto al sistema USER. Questo può essere ottenuto con la
stessa viariabile $SFRAME che, in queste modalità, rappresenta una trasformazione
rispetto al riferimento USER (cioè segue $UFRAME nella catena cinematica, vedi
Fig. 8.3 - Trasformazione terna utente).

Fig. 8.3 - Trasformazione terna utente

1. Terna mondo

$SFRAME serve anche per selezionare il centro di rotazione per le correzioni


sull’assetto dell’attrezzo. Se $SFRAME è diversa da zero, il centro di rotazione è definito
dalla $SFRAME stessa, mentre se tutte le componenti sono nulle il centro di rotazione
coincide con il TCP.

8.4.3 Sensore solidale con il sistema di riferimento mondo


(WORLD)
Rappresenta una estesione del caso USER. Questa modalità consente di proiettare le
correzioni rispetto al sistema di riferimento mondo cioè quel sistema rispetto al quale
sono riferiti $BASE e $UFRAME. I valori di $SENSOR_TYPE riservati a queste
modalità, solo per i sensori esterni, sono 7 e 11 (Tab. 8.3
- Correction_Speed=Factor*Reference_Speed).

8.4.4 Sensore solidale con il sistema di riferimento weaving


(WEAVE)
Questa possibilità riguarda esclusivamente il caso di sensori a parametri d’arco con
weaving di tipo cartesiano. In questo caso il sensore effettua la misura attraverso la
torcia ma è indipendente dal suo orientamento mentre dipende dalla direzione in cui

pr-0-0-gpr_10.fm
102 08/1112
Sensor Tracking (prestazione opzionale)

avviene il pendolamento. Per questo le correzioni calcolate devono essere proiettate


non nel sistema di riferimento della torcia (TOOL) ma rispetto a weaving (WEAVE).
I valori di $SENSOR_TYPE riservati a questo riferimento sono: 2 per seam tracking
(NON DISPONIBILE NELLA VERSIONE 1.0), 8 e 12 per i sensori esterni (vedi Tab. 8.3
- Correction_Speed=Factor*Reference_Speed).

8.5 Tipologia delle informazioni acquisite dal


sensore
I sensori più sofisticati forniscono correzioni cartesiane direttamente in millimetri, altri
invece eseguono semplicemente la misura della grandezza fisica che, nel casi più
frequenti, è direttamente proporzionale alla distanza misurata. In questi casi C5G
trasforma automaticamente i dati letti dal sensore (ad esempio ampere, newton, ecc.)
in correzioni in millimetri mediante la variabile di sistema $SENSOR_CNVRSN. Essa è
un vettore di 6 elementi di tipo REAL che contiene i fattori di conversione. Ogni
componente dei dati del sensore viene moltiplicata per il corrispondente fattore di
conversione prima di essere applicata alla traiettoria.
– Ad esempio un sensore di prossimità fornisce una corrente o una tensione che può
essere convertita in millimetri moltiplicando per un apposito fattore mm/A o mm/V;
– i sensori di forza rappresentano una categoria a sè, in quanto non misurano una
posizione o un grandezza fisica ad essa direttamente collegata, ma danno
un’indicazione della “necessità di correggere la traiettoria” in una certa direzione.
Per questi sensori il fattore per cui il segnale viene moltiplicato assume il significato
di guadagno in quanto a parità di segnale si calcola una correzione in millimetri
senza poter conoscere l’entità esatta della correzione necessaria.
Si noti che se si desidera escludere l’effetto di questa conversione è sufficiente
impostare le componenti di $SENSOR_CNVRSN al valore 1 (valore di default).
$SENSOR_CNVRSN consente inoltre di disabilitare l’applicazione di una o più
componenti della correzione: questo si ottiene azzerando il corrispondenete elemento
del vettore ($SENSOR_CNVRSN[n]:=0).

8.6 Criteri di attuazione delle correzioni


Ci sono tre elementi che riguardano l’attuazione delle correzioni: il primo consente di
distinguere tra scostamenti relativi ed assoluti; il secondo riguarda la modalità con cui
una correzione viene attuata nel tempo; il terzo consente di controllare gli scostamenti
totali tra la posizione programmata e la posizione raggiunta sotto il controllo del sensore.
Vengono quindi descritti i seguenti argomenti:
– Scostamenti relativi ed assoluti
– Attuazione dello scostamento nel tempo
– Controllo degli scostamenti totali

8.6.1 Scostamenti relativi ed assoluti


Gli scostamenti si intendono ASSOLUTI se la correzione è richiesta rispetto alla
traiettoria teorica del robot e cioè quella programmata (Fig. 8.4 - Scostamento
assoluto). Con il termine di scostamenti RELATIVI si intende invece che una correzione
viene attuata riferendosi alla posizione corrente del robot e cioè senza prendere in
considerazione l’errore già accumulato durante le precedenti letture del sensore

pr-0-0-gpr_10.fm
08/1112 103
Sensor Tracking (prestazione opzionale)

(Fig. 8.5 - Scostamento relativo).

Fig. 8.4 - Scostamento assoluto

1- Traiettoria programmata 2 - Traiettoria controllata dal sensore


3- Correzione richiesta = +3 mm 4 - Richiesta = +1 mm
5- Richiesta = -2 mm 6 - Scostamento finale = 0 mm
7- Richiesta = 0 mm

Fig. 8.5 - Scostamento relativo

1- Traiettoria programmata 2 - Traiettoria controllata dal sensore


3- Correzione richiesta = +3 mm 4 - Richiesta = +1 mm
5- Richiesta = -2 mm 6 - Scostamento finale = 0 mm
7- Richiesta = 0 mm

Per i sensori integrati la scelta tra le due modalità (assoluta o relativa) dipende dal tipo
di sensore ed è gestita a livello di software di sistema. Per i sensori esterni, invece, viene
lasciata la possibilità di scegliere mediante la variabile di sistema $SENSOR_TYPE: i
valori da 5 a 9 abilitano il funzionamento in modo relativo mentre da 9 a 12 abilitano il
modo assoluto (Tab. 8.3 - Correction_Speed=Factor*Reference_Speed).
– nella maggior parte delle applicazioni industriali i sensori misurano degli
scostamenti RELATIVI in quanto riescono a determinare la posizione della
traiettoria ottimale rispetto alla loro stessa posizione. Anche nel caso di sensori di
forza l’utilizzo più frequente è di considerare in modo relativo le informazioni
misurate. Questo significa che fino a che l’output del sensore è diverso da zero la
traiettoria viene continuamente modificata aggiungendo i nuovi scostamenti ai
vecchi mentre quando l’output è nullo le correzioni accumulate vengono
mantenute e la traiettoria del robot rimane parallela a quella teorica (Fig. 8.4
- Scostamento assoluto);
– la correzione in modalità ASSOLUTA è utile per ottenere un effetto di cedevolezza
sul TCP mediante sensori di forza. In pratica si applica alla traiettoria del robot uno
scostamento proporzionale all’output del sensore di forza. Questo porta l’intero
robot a comportarsi come una molla in tutte le direzioni in quanto al crescere
dell’intensità della forza misurata, aumenta lo scostamento del robot dalla

pr-0-0-gpr_10.fm
104 08/1112
Sensor Tracking (prestazione opzionale)

traiettoria programmata; per sollecitazioni nulle il robot ritorna a seguire il percorso


programmato (Fig. 8.5 - Scostamento relativo).

8.6.2 Attuazione dello scostamento nel tempo


Le correzioni misurate dal sensore possono essere anche di alcuni millimetri soprattutto
se la frequenza con cui queste informazioni vengono lette è bassa. Per questo, in alcuni
casi, non è possibile applicare l’intero scostamento in un solo colpo di interpolazione. Ci
sono due possibili leggi con cui distribuire lo scostamento durante l’esecuzione del
movimento:
– definire la velocità (SPEED) con cui la correzione verrà effettuata;
– definire un periodo di tempo (TIME PERIOD) durante il quale l’intero scostamento
verrà assorbito.
Il primo criterio garantisce l’esaurimento della correzione nel minore tempo possibile ed
è utile in tutti i casi in cui il tempo che intercorre tra due letture del sensore è molto basso
(frequenza elevata) o non è noto.
Tuttavia, in alcune applicazioni, questo metodo determina un comportamento a “scatti”
dal momento che, per piccoli scostamenti, le correzioni vengono applicate con rapido
movimento del robot in breve tempo. In questi casi è più efficace il secondo criterio
perchÈ consente di distribuire l’intero scostamento in un tempo prefissato.
Per scegliere tra queste due modalità viene utilizzata la variabile $SENSOR_TIME. Se
$SENSOR_TIME è uguale a zero si utilizza il criterio della velocità. Un valore diverso
da zero seleziona la seconda modalità ed indica il periodo di tempo (in millisecondi)
durante il quale la correzione deve essere applicata.
Si noti che per i sensori esterni i nuovi dati verranno letti dal sensore solo dopo
l’esaurimento di questo tempo a partire dalle ultime correzioni. La Fig. 8.6 - Effetti di
$SENSOR_TIME (con correzioni relative) illustra l’effetto dei due diversi criteri.

Fig. 8.6 - Effetti di $SENSOR_TIME (con correzioni relative)

1. Traiettoria programmata
2. Traiettoria controllata dal sensore

pr-0-0-gpr_10.fm
08/1112 105
Sensor Tracking (prestazione opzionale)

In entrambe le modalità di distribuzione delle correzioni, la velocità può essere


assegnata mediante la variabile di sistema $SENSOR_GAIN. Essa è un vettore di 6
elementi di tipo INTEGER che hanno significato di percentuale (variabilità da 0 a 100
con default 50). Essa consente al programma di rapportare la velocità di correzione con
la velocità di esecuzione del movimento programmato.
I primi tre elementi riguardano le traslazioni nelle direzioni X, Y e Z e nel caso di
$SPD_OPT=SPD_LIN, rappresentano una misura dell’angolo tra la traiettoria
programmata e quella risultante dalla correzione. Il valore 50% corrisponde alla
pendenza di 45 gradi (velocità di correzione pari alla velocità di avanzamento,
$LIN_SPD), mentre i valori 0% e 100% rappresentano i casi estremi di correzione nulla
(0%) e di assorbimento immediato della correzione (100%).
Se $SPD_OPT è impostato ad una delle modalità di controllo della rotazione
(SPD_ROT, SPD_SPN, SPD_AZI, SPD_ELV, SPD_ROLL, SPD_FIRST,
SPD_SECOND, SPD_THIRD) la velocità di riferimento per le prime tre componenti di
$SENSOR_GAIN è un quarto della velocità lineare massima per quell’arm
($LIN_SPD_LIM/4).
Gli ultimi tre elementi di $SENSOR_GAIN servono per controllare la velocità delle
rotazioni intorno agli assi X, Y e Z. Se $SPD_OPT=SPD_LIN, la velocità di riferimento
è un quarto della velocità rotazionale massima ($ROT_SPD_LIM/4) per cui il valore
50% corrisponde ad una velocità pari a $ROT_SPD_LIM/4 mentre i valori 0% e 10%
rappresentano i casi estremi di correzione nulla (0%) e di assorbimento immediato della
variazione di assetto (100%). Se $SPD_OPT è impostato ad una delle modalità di
controllo della rotazione (SPD_ROT, SPD_SPN, ecc.) la velocità di riferimento per
queste componenti è $ROT_SPD.
La Tab. 8.3 - Correction_Speed=Factor*Reference_Speed riporta i fattori moltiplicativi
che, applicati alla velocità di riferimento, consentono di ricavare la velocità
effettivamente programmata. Si noti che questi valori hanno puro scopo esplicativo dato
che, nei casi pratici, il valore di $SENSOR_GAIN verrà determinato in modo
sperimentale.

Tab. 8.3 - Correction_Speed=Factor*Reference_Speed


$SENSOR_GAIN[ i ] Fattore
0 0.0
10 0.11
20 0.25
30 0.43
40 0.67
50 1.0
60 1.5
70 2.3
80 4.0
90 9.0
100 infinito

Si noti che la variabile $SENSOR_GAIN viene presa in considerazione anche nel caso
in cui il criterio di distribuzione degli scostamenti è il tempo ($SENSOR_TIME diverso
da zero). In questo caso le componenti di $SENSOR_GAIN saranno utilizzate per
definire la velocità massima di correzione (Fig. 8.7 - Effetti di $SENSOR_GAIN). Per
evitare ogni tipo di limitazione il valore del corrispondente $SENSOR_GAIN può essere
impostato al 100%.

pr-0-0-gpr_10.fm
106 08/1112
Sensor Tracking (prestazione opzionale)

Fig. 8.7 - Effetti di $SENSOR_GAIN

1. Traiettoria programmata
2. Traiettoria controllata dal sensore
3. massima velocità
4. aumento di tempo

L’uso che si farà di questa variabile dipenderà dall’accuratezza delle misure del sensore
utilizzato e dalla cadenza con cui queste misure verranno fornite. Se il sensore fornisce
un’indicazione precisa dello scostamento che deve essere assorbito (in millimetri) ma
con una cadenza bassa, allora il valore di $SENSOR_GAIN è direttamente legato alla
velocità di correzione. Se invece il sensore è in grado di dare solo un’indicazione
generica sulla direzione in cui è necessaria la correzione, la variabile $SENSOR_GAIN
potrà essere utilizzata come guadagno e cioè come un parametro da tarare sulla base
delle oscillazioni che si osservano durante l’applicazione.

8.6.3 Controllo degli scostamenti totali


Lo scostamento totale è già stato definito come un vettore di 6 elementi che rappresenta
la posizione reale del robot rispetto alla sua posizione programmata. E’ possibile
leggere questo vettore mediante la seguente Built-In:

SENSOR_GET_OFST ( ofst_tot <, arm> )


Le prime tre componenti di ofst_tot rappresentano gli scostamenti nelle direzioni X, Y e
Z e le ultime tre componenti le rotazioni intorno agli stessi assi. Il parametro opzionale
arm consente di leggere i dati relativi ad un arm diverso da quello di default.
Si noti che questo vettore di scostamento sarà sempre riferito al sistema di riferimento
USER (cioè il sistema definito da $UFRAME rispetto al quale sono definite tutte le
POSITION) qualsiasi sia il valore di $SENSOR_TYPE.

8.7 Modalità di abilitazione del sensor tracking


Le prestazioni di sensor tracking possono essere attivate solo su traiettorie cartesiane
(LINEAR o CIRCULAR) o, in particolari condizioni, in assenza di movimento
programmato. L’abilitazione delle prestazioni di sensor tracking avviene mediante la
variabile di sistema $SENSOR_ENBL. Ad essa può essere assegnato un valore di tipo
BOOLEAN e cioè TRUE per abilitare e FALSE per disabilitare. E’ possibile utilizzare la
variabile da sola in una singola linea di programma (cioè
$SENSOR_ENBL:=TRUE/FALSE) oppure insieme ad un’istruzione MOVE con clausola
WITH (MOVE LINEAR TO p1 WITH $SENSOR_ENBL=TRUE/FALSE). Si noti che
l’abilitazione e disabilitazione dell’inseguimento è strettamente legato al mantenimento
o all’azzeramento degli scostamenti totali (vedi par. 8.9 Gestione degli scostamenti

pr-0-0-gpr_10.fm
08/1112 107
Sensor Tracking (prestazione opzionale)

totali accumulativi a pag. 111”).


La modalità standard di abilitazione del sensor tracking consente di applicare le
correzioni lette dal sensore solo durante l’esecuzione di un movimento programmato e
quindi il sensore viene trascurato nelle condizioni di robot fermo (anche se in DRIVE
ON). Questa è la modalità più frequentemente utilizzata nelle applicazioni pratiche.
Esistono tuttavia particolari applicazioni in cui è necessario che la posizione del robot
sia asservita al sensore anche in assenza del movimento programmato.
– tipicamente si tratta di casi in cui il robot deve essere agganciato ad un oggetto in
movimento, oppure interagisce con il pezzo di lavoro senza il movimento di
nessuno degli assi controllati ma chiudendo pinze o muovendo assi aggiuntivi;
– esistono poi sensori che possono muovere il robot in modo autonomo senza
bisogno di un movimento programmato.
C5G è predisposto per questo tipo di applicazioni offrendo la possibilità di abilitare l’arm
in uno stato particolare in cui è completamente asservito al sensore pur mantenendo la
possibilità di riprendere il movimento programmato in qualsiasi momento.
Nell’introduzione di questa prestazione si è conservata una totale coerenza di
comportamento con quanto già possibile in C5G nel rispetto dei requisiti di sicurezza. In
particolare si evidenziano i seguenti punti:

a. l’asservimento del robot ad un sensore senza movimento programmato può


essere abilitato solo da un programma HOLDABLE con l’Unità di Controllo in stato
AUTO;

b. l‘inizio dell’asservimento è sempre condizionato dalla pressione del tasto START,


fino a quel momento l’utente ha la sicurezza che la macchina non si può muovere;

c. il movimento sotto il controllo del sensore può essere fermato mediante la


pressione del tasto HOLD e può ripartire solo alla pressione del tasto START;

d. l’asservimento termina disattivando il programma che vi ha dato inizio.


Queste prestazioni sono state ottenute introducendo una Built-In di tipo particolare che
può essere eseguita solo da programmi di tipo HOLDABLE. La sintassi è:

SENSOR_TRK ( boolean <, arm> )


L’esecuzione dell’istruzione SENSOR_TRK(TRUE) seleziona una opzione particolare
in modo che, abilitando il sensor tracking con la variabile $SENSOR_ENBL, l’arm si trovi
in una modalità estesa che consente l’asservimento anche in assenza di movimento
programmato.
Il parametro opzionale ‘arm’ consente di abilitare la prestazione su un arm diverso da
quello di default.
Si notino le seguenti limitazioni (esse si riferiscono alla Built-In eseguita sempre sul
medesimo arm):

a. l’effettiva abilitazione dell’asservimento senza movimento programmato è


subordinato al valore di $SENSOR_ENBL (tuttavia non è necessario rieseguire
SENSOR_TRK(TRUE) dopo aver portato $SENSOR_ENBL a FALSE e poi a
TRUE);

b. dato che SENSOR_TRK può essere eseguita solo all’interno di programmi


HOLDABLE essa non può essere neanche eseguita mediante il comando Esegui

pr-0-0-gpr_10.fm
108 08/1112
Sensor Tracking (prestazione opzionale)

(F1) dalla Pagina Service (softkey EseguiIstr) nè mediante SYS_CALL del


comando EXECUTE;

c. la disabilitazione della prestazione mediante SENSOR_TRK(FALSE) può essere


effettuata solo dallo stesso programma che la ha abilitata;

d. SENSOR_TRK non può essere eseguita se la presentazione risulta già abilitata da


un secondo programma HOLDABLE contemporaneamente attivo;

e. la modalità di SENSOR_TRK viene automaticamente disabilitata alla


disattivazione del programma che la aveva abilitata.
Si noti che l’abilitazione e la disabilitazione dell’inseguimento in queste modalità ha
effetti particolari sul mantenimento o l’azzeramento degli scostamenti totali (vedi
par. 8.9 Gestione degli scostamenti totali accumulativi a pag. 111).

8.8 Malfunzionamenti del sensore


Ci sono due caratteristiche dell’ambiente di sensor tracking che consentono di
minimizzare le conseguenze negative di un malfunzionamento del sensore: la prima
consente di fermare il robot, la seconda di ridefinire i corretti scostamenti prima di
riprendere il programma interrotto.
Vengono quindi descritti i seguenti argomenti:
– Arresto del robot in caso di malfunzionamento del sensore
– Ridefinizione degli scostamenti totali

8.8.1 Arresto del robot in caso di malfunzionamento del


sensore
Nei casi in cui il sensore non sia affidabile o sia soggetto a disturbi è possibile che il robot
si allontani eccessivamente dalla posizione programmata con il rischio di danneggiare
l’attrezzatura. Per questo è stata prevista la variabile di sistema $SENSOR_OFST_LIM.
Essa è composta di 2 elementi di tipo REAL che indicano il massimo scostamento
consentito tra la traiettoria programmata e il robot guidato dal sensore. Il primo elemento
è per le traslazioni (lungo gli assi X, Y e Z) ed è espresso in millimetri; il secondo è per
le rotazioni ed è espresso in gradi. Quando questo limite viene superato da una
qualsiasi delle componenti viene inviato un messaggio di errore e il robot viene fermato
in stato di HOLD.

8.8.2 Ridefinizione degli scostamenti totali


Nell’esaminare le situazioni di errore dovute al malfunzionamento dei sensori sono stati
riscontrati casi in cui è necessario riassegnare il valore degli scostamenti accumulati. In
particolare questa prestazione è indispensabile quando per un errore del sensore, il
robot viene portato lontano dalla traiettoria ottimale fino a che non si ferma per aver
superato le soglie massime ($SENSOR_OFST_LIM). In queste condizioni è possibile
riportare il robot sulla posizione corretta e riprendere l’esecuzione del programma
utilizzando due particolari modalità di ripristino della traiettoria ($RCVR_TYPE).
Impostando $RCVR_TYPE=7 è possibile ridefinire la corretta posizione portando il
robot in traiettoria mediante il Terminale di Programmazione e quindi ripartendo: il
movimento interrotto verrà ripreso esattamente da quella posizione senza nessun
recupero. Gli scostamenti risulteranno automaticamente ridefiniti con un nuovo valore.
La Fig. 8.8 - Effetto di $RCVR_TYPE = 7 illustra il procedimento.

pr-0-0-gpr_10.fm
08/1112 109
Sensor Tracking (prestazione opzionale)

Fig. 8.8 - Effetto di $RCVR_TYPE = 7

1. Traiettoria programmata
2. Traiettoria controllata dal sensore
3. Traiettoria conseguente a guasto del sensore
4. Traiettoria ottimale
5. HOLD causato da messaggio di errore

Si noti che vengono ridefiniti non solo gli scostamenti di traslazione (prime tre
componenti) ma anche quelli di variazione di assetto, quindi, se si vuole riprendere il
movimento con il medesimo assetto col quale ci si era fermati esso non deve essere
cambiato durante la sessione di jog.
La modalità $RCVR_TYPE=8 è utile in casi analoghi e consente di riprendere il
movimento riportandosi esattamente sulla traiettoria programmata azzerando gli
scostamenti accumulati dal sensore; in questa modalità il C5G pianifica una traiettoria
di recupero della posizione attuale alla corrispondente sulla traiettoria programmata per
riprendere quindi il movimento interrotto.
Dopo il recupero gli scostamenti risulteranno azzerati. La Fig. 8.9 - Effetto di
$RCVR_TYPE = 8 illustra il funzionamento di questa modalità.
Si noti che il funzionamento delle modalità da 0 a 6 di $RCVR_TYPE non subisce
variazioni nel caso di sensor tracking abilitato. Si noti quindi che le modalità 0 e 4
riportano il TCP esattamente sulla posizione interrotta mantenendo gli scostamenti
accumulati fino a quel momento, mentre le modalità 1, 2, 5 e 6 riportano il robot sulle
posizioni iniziali e finali programmate azzerando gli scostamenti.

Fig. 8.9 - Effetto di $RCVR_TYPE = 8

1. Traiettoria programmata
2. Traiettoria controllata dal sensore
3. Traiettoria di recupero
4. HOLD causato da messaggio di errore

pr-0-0-gpr_10.fm
110 08/1112
Sensor Tracking (prestazione opzionale)

8.9 Gestione degli scostamenti totali


accumulativi
Nel par. 8.1 Principio di funzionamento a pag. 97 è stato esposto, in modo sintetico, il
procedimento mediante il quale la posizione del robot viene modificata secondo le
indicazioni di un sensore. Nel seguito si spiega come l’abilitazione e la disabilitazione
dell’inseguimento possono interagire con il mantenimento o l’azzeramento degli
scostamenti totali. Per fare questo bisogna introdurre i concetti di: sessione di sensor
tracking interrotto (INTERRUPTED), sessione sospesa (SUSPENDED) e condizione di
azzeramento al volo (RESETTING SPREAD) degli scostamenti.
Vengono quindi descritti i seguenti argomenti:
– Sessione di sensor tracking interrotta (INTERRUPTED)
– Sessione di sensor tracking sospesa (SUSPENDED)
– Condizione di azzeramento al volo (RESETTING SPREAD)
– Limitazioni nel cambiamento dei parametri

8.9.1 Sessione di sensor tracking interrotta (INTERRUPTED)


Una sessione di sensor tracking si considera interrotta quando, in condizioni di
SENSOR_TRK(FALSE), il robot si ferma su una posizione senza che il movimento che
lo ha portato su quel punto fosse in ADVANCE e le clausole FLY non sono definite.
L’interruzione dell’inseguimento è importante perchè in corrispondenza di questo
evento viene fatta una acquisizione della posizione reale del TCP con conseguente
azzeramento degli scostamenti.
Per capire l’effetto di una interruzione si confronti la Fig. 8.10 - Sessione di sensor
tracking INTERROTTA con la Fig. 8.1 - Traiettoria programmata e controllo sensori; la
differenza nei due programmi consiste nel fatto che è stato rimosso il fly (e anche
l’ADVANCE) sul punto intermedio p2.
L’effetto pratico è che il movimento lineare verso p3 verrà eseguito non più a partire dal
punto p2 programmato ma dal punto p2’; in p2 gli scostamenti vengono azzerati.

Fig. 8.10 - Sessione di sensor tracking INTERROTTA

1. Traiettoria programmata
2. Traiettoria controllata dal sensore
3. Punto di partenza
4. Punto di arrivo
5. Nuova traiettoria teorica

Se si è abilitato l’inseguimento con l’opzione di SENSOR_TRK(TRUE) il

pr-0-0-gpr_10.fm
08/1112 111
Sensor Tracking (prestazione opzionale)

comportamento cambia in quanto questa opzione consente proprio di lasciare il robot


asservito al sensore che in assenza di movimento programmato e durante le fasi di
interruzione. Riconsiderando l’esempio nel caso di SENSOR_TRK(TRUE), si osserverà
un comportamento in tutto analogo alla Fig. 8.1 - Traiettoria programmata e controllo
sensori nonostante sia stato rimosso il fly e l’ADVANCE; in altre parole, su p2 non ha
luogo un’interruzione. Si noti che l’azzeramento avverrà nel momento in cui la
condizione di asservimento verrà interrotta con l’istruzione SENSOR_TRK(FALSE) o
$SENSOR_ENBL:=FALSE.
Da quanto detto si dimostra cha la Built-In SENSOR_TRK(TRUE) può essere utilizzata
per evitare l’azzeramento degli scostamenti su punti dove il robot si ferma (dove non c’è
fly).

8.9.2 Sessione di sensor tracking sospesa (SUSPENDED)


Ci sono alcuni casi in cui è necessario trascurare le correzioni del sensore lungo un
intero movimento pur mantenendo gli scostamenti acquisiti fino a quel momento.
Questo può essere ottenuto impostando $SENSOR_TYPE:=0 lungo il movimento in
questione (naturalmente l’interruzione deve essere evitata raccordando i movimenti in
fly o ponendo SENSOR_TRK(TRUE)). La Fig. 8.11 - Sessione di sensor tracking
SOSPESA illustra questo comportamento.

Fig. 8.11 - Sessione di sensor tracking SOSPESA

1. Traiettoria programmata
2. Traiettoria controllata dal sensore
3. Sensor tracking sospeso

8.9.3 Condizione di azzeramento al volo (RESETTING SPREAD)


L’azzeramento al volo è la condizione opposta rispetto al sospendere la sessione di
sensor tracking. Quest’ultima consente di mantenere gli scostamenti lungo un
movimento raccordato in fly, mentre l’azzeramento al volo consente di azzerare gli
scostamenti progressivamente terminando il movimento molto vicino al punto teorico
programmato. Questo solitamente viene ottenuto introducendo una interruzione (come
già illustrato in Fig. 8.10 - Sessione di sensor tracking INTERROTTA); dove però si
richiede di conservare il fly tra i movimenti è possibile impostare la variabile
$SENSOR_ENBL al valore FALSE, modalità di azzeramento al volo, lungo il
movimento; questo può essere fatto anche con clausola WITH sul movimento
desiderato. Si noti che, durante il movimento, il sensore viene trascurato. L’effetto è
illustrato in Fig. 8.12 - RESETTING SPREAD durante un Movimento.

pr-0-0-gpr_10.fm
112 08/1112
Sensor Tracking (prestazione opzionale)

Fig. 8.12 - RESETTING SPREAD durante un Movimento

1. Traiettoria programmata
2. Traiettoria controllata dal sensore
3. OFFSET RESET senza interrupt

Tab. 8.4 - Sintesi dei valori di $SENSOR_TYPE


$SENSOR_TYPE SIGNIFICATO
0 Sensore sospeso
1 Sensore seam tracking nel riferimento TOOL (NON
DISPONIBILE NELLA VERSIONE 1.0)
2 Sensore seam tracking nel riferimento WEAVING (NON
DISPONIBILE NELLA VERSIONE 1.0)
5 Sensore esterno nel riferimento TOOL, modalità relativa
6 Sensore esterno nel riferimento UFRAME, modalità relativa
7 Sensore esterno nel riferimento WORLD, modalità relativa
8 Sensore esterno nel riferimento WEACING, modalità relativa
9 Sensore esterno nel riferimento TOOL, modalità assoluta
10 Sensore esterno nel riferimento UFRAME, modalità assoluta
11 Sensore esterno nel riferimento WORLD, modalità assoluta
12 Sensore esterno nel riferimento WEAVING, modalità assoluta;
13-14 Riservati
15 Riservato alla gestione di un particolare tipo di telecamera Laser
16-30 Riservati

8.9.4 Limitazioni nel cambiamento dei parametri


Nell’utilizzo delle prestazioni di sensor tracking ci sono alcune condizioni che
determinerebbero delle discontinuità nel movimento e che quindi vengono monitorate
mediante messaggi di errore.
– Non è possibile abilitare il sensor tracking su movimenti di tipo giunti; quindi
$SENSOR_ENBL deve essere impostato a FALSE prima di eseguire il movimento.
– Un movimento giunti non può essere raccordato in fly, né essere in ADVANCE, con
movimenti cartesiani su cui era abilitato il sensor tracking. Analogamente un
movimento giunti non può seguire una fase di asservimento senza movimento
programmato senza che sia prima stata eseguita la Built-In
SENSOR_TRK(FALSE) per disabilitarla.

pr-0-0-gpr_10.fm
08/1112 113
Sensor Tracking (prestazione opzionale)

– Nelle modalità assolute di inseguimentro ($SENSOR_TYPE=9, 10, 11 o 12) non è


consentito cambiare $BASE, $TOOL, $USER o $SFRAME senza interrompere la
sessione di sensor tracking (vedi par. 8.9.1 Sessione di sensor tracking interrotta
(INTERRUPTED) a pag. 111). Al contrario il cambiamento dei sistemi di
riferimento nelle modalità relative non genera nessun problema.
– Non è consentito cambiare dalle modalità relative alle assolute, e viceversa, senza
interrompere la sessione di Sensor Tracking. Allo stesso modo non è possibile,
nelle modalità assolute, cambiare il tipo di sistema di riferimento nel quale si
richiede l’inseguimento, senza interrompere l’asservimento (vedi par. 8.9.1
Sessione di sensor tracking interrotta (INTERRUPTED) a pag. 111).

8.10 Esempio di programmazione


Nel seguito viene riportato il programma già esposto al par. 8.1 Principio di
funzionamento a pag. 97 completato con le istruzioni necessarie per configurare ed
abilitare le prestazioni di sensor tracking. Si assume di utilizzare un sensore esterno
montato sulla torcia che è in grado di calcolare correzioni nelle direzioni Y e Z rispetto
al riferimento TOOL. Le variabili di sistema che non compaiono nell’esempio vengono
lasciate al loro valore di default. La routine GET_CORR, che non viene riportata, sarà
scritta in PDL2 in modo da leggere le informazioni del sensore, elaborarle e copiarle nei
due parametri corr_y e corr_z.

PROGRAM sensor
VAR
p1, p2, p3, p4:POSITION
corr_y, corr_z:REAL
corr, ofst:ARRAY[6] OF REAL

ROUTINE send_corr
BEGIN
get_corr(corr_y, corr_z)
corr[2]:=corr_y; corr[3]:=corr_z
SENSOR_SET_DATA(corr)

SENSOR_GET_OFST(ofst)
WRITE (‘X:‘, ofst[1], ‘ Y; ‘, ofst[2], ‘ Z: ‘, ofst[3], NL)

$TIMER[1] := 0
ENABLE CONDITTRUE[1]
END send_corr

BEGIN
CONDITION[1] :
WHEN $TIMER[1] > 500 DO
send_corr --Invio delle correzioni ogni 500 ms
ENDCONDITION
corr[1]:=0; corr[2]:=0; corr[3]:= 0
corr[4]:=0; corr[5]:=0; corr[6]:= 0

--Configurazione dell’ambiente di sensor tracking


$SPD_OPT := SPD_LIN --per controllare la velocità lineare
$LIN_SPD := 0.1 --Velocità lineare espressa in m/s

pr-0-0-gpr_10.fm
114 08/1112
Sensor Tracking (prestazione opzionale)

$SENSOR_TYPE := 5 --Sens. Esterno in modo relativo e rif. TOOL

$SENSOR_CNVRSN[2] := 0.2 --Esempio di fattore di conversione Y


$SENSOR_CNVRSN[3] := 0.2 -- Esempio di fattore di conversione
Z

$SENSOR_GAIN[2] := 60 -- Esempio di guadagno Y


$SENSOR_GAIN[3]:= 80 -- Esempio di guadagno Z

$SENSOR_TIME := 500 -- Distribuz. scostamenti in tempo

$SENSOR_OFST_LIM[1] := 50 --Limite massimo in traslazione

-- Programma in movimento
MOVE JOINT TO p1

-- Sessione di sensor tracking


$TIMER[1] := 0
ENABLE CONDITION[1]
$SENSOR_ENBL := TRUE

MOVEFLY LINEAR TO p2 ADVANCE


MOVE LINEAR TO p3

$SENSOR_ENBL := FALSE
DISABLE CONDITION[1]

MOVE JOINT TO p4

END sensor

pr-0-0-gpr_10.fm
08/1112 115
Conveyor Tracking (prestazione opzionale)

9. CONVEYOR TRACKING
(PRESTAZIONE OPZIONALE)

Conveyor Tracking
Il codice dell’opzione è CR17926206.

L'ambiente di Conveyor Tracking consente di scrivere semplici programmi per


raggiungere posizioni definite su di un carrello convogliatore in movimento: l'Unità di
Controllo C5G compensa automaticamente la posizione istantanea del convogliatore.
Per calcolare la posizione istantanea di un carrello, il motore del convogliatore deve
essere equipaggiato con un trasduttore di posizione connesso all'Unità di Controllo
C5G.
Possono essere gestiti fino a quattro convogliatori. Quando l'inseguimento è abilitato
possono essere eseguiti solo movimenti di tipo cartesiano (lineari e circolari).
Sono previsti due tipi di inseguimento:
– inseguimento Cartesiano (Cartesian Tracking) - in questo caso il robot è fisso e
l'inseguimento viene ottenuto mediante un sistema di riferimento variabile (terna di
riferimento del carrello) che viene spostato in funzione della posizione del carrello.
In questa modalità è possibile inseguire carrelli montati su convogliatori traslanti o
rotanti: nel primo caso si parla di inseguimento cartesiano lineare, nel secondo di
inseguimento cartesiano circolare. Non c'è nessuna limitazione sulla posizione ed
orientamento del convogliatore. Siccome il robot è fisso mentre il pezzo si muove,
l'area di lavoro risulta ridotta (il robot può lavorare sul pezzo per tempo molto
breve) quindi l'inseguimento cartesiano è consigliabile per applicazione di
prelievo-deposito;
– inseguimento su Slitta (Rail Tracking) - questo tipo di inseguimento può essere
utilizzato quando il robot è montato su slitta. In questo caso è la slitta ad attuare
l'inseguimento e quindi il convogliatore deve essere di tipo lineare e la slitta deve
essere parallela ad esso. Il movimento della slitta risulta dalla somma di due
componenti:
• una componente di inseguimento
• una componente dovuta al movimento programmato.
Per questo l'inseguimento su slitta consente di allargare l'area di lavoro del robot
controllando velocità ed orientamento dell'attrezzo su pezzi di grosse dimensioni.
Nel presente capitolo vengono trattati dettagliatamente i seguenti argomenti:
– Configurazione
– Principio di funzionamento
– Monitoraggio del processo
– Finestra di inseguimento
– Istruzioni di movimento
– Apprendimento delle posizioni
– Interruzione dell’inseguimento

pr-0-0-gpr_11.fm
116 08/1112
Conveyor Tracking (prestazione opzionale)

– Limitazioni durante il Conveyor Tracking


– Utilizzo del Conveyor roto-traslante.

9.1 Configurazione
Per configurare l’inseguimento su convogliatore, utilizzare il programma IO_CNFG
(Cap.12.1 del manuale USO dell’Unità di Controllo C5G - par.Conveyor Tracking
Kit) per definire eventuali kit associati al convogliatore stesso.
Succesivamente utilizzare l’ambiente Conveyor nella pagina di SETUP del Terminale
di Programmazione, per impostare i parametri base (par.5.17.7 - Conveyor
(prestazione opzionale) del manuale USO dell’Unità di Controllo C5G).
Le variabili di sistema per configurare l'inseguimento su convogliatore sono campi della
struttura di dati $TRK_TBL che è un array di strutture generiche per le funzioni di
tracking.
Per configurare la connessione hardware del convogliatore con C5G sono disponibili le
seguenti variabili:
– $TRK_TBL[nTbl].TT_APPL_ID identifica il tipo di applicazione che si sta
configurando (conveyor = 2):
$TRK_TBL[nTbl].TT_APPL_ID := 2
– $TRK_TBL[nTbl].TT_PORT_TYPE[1] identifica il tipo di porta in input a cui è stato
collegato il trasduttore di posizione (si tratta sempre di una porta FMI, identificata
con il numero 27):
$TRK_TBL[nTbl].TT_PORT_TYPE[1] := 27
– $TRK_TBL[nTbl].TT_PORT_IDX[1] identifica l’indice della porta configurata per la
lettura del trasduttore di posizione. Nel caso di kit predefinito, tale indice viene
assegnato automaticamente dal sistema. Nel caso di kit personalizzato, l’utente
deve indicare l’indice di un FMI già precedentemente mappato.
– Nel caso in cui il trasduttore sia un encoder, è necessario indicare il numero di
impulsi sin/cos del trasduttore mediante l'istruzione:
$TRK_TBL[nTbl].TT_I_PRMS[1] := 0 -- se resolver
$TRK_TBL[nTbl].TT_I_PRMS[1] := 1024 -- se encoder

– Per il rapporto di trasmissione, è necessario utilizzare l'istruzione:


$TRK_TBL[nTbl].TT_R_PRMS[1] := <valore_rapporto_di_tx>
la sua unità di misura è [mm/giri motore] nel caso di inseguimento lineare
cartesiano, inseguimento roto-traslante, o su slitta, mentre è [giri motore/giro
tavola] nel caso di convogliatore rotante.
– Il tipo di conveyor che si sta configurando lo si indica con l'istruzione:
$TRK_TBL[nTbl].TT_I_PRMS[2] := <conv_cnfg_value>
dove <conv_cnfg_value> può essere uno dei seguenti valori:
• 0: inseguimento cartesiano lineare;
• 1: inseguimento cartesiano circolare;
• 3: inseguimento Cartesiano Roto-Traslante (Asservimento Robot ad una
Pressa-Piegatrice).
• 4: inseguimento su slitta con la direzione positiva della slitta del robot nella
direzione di avanzamento del convogliatore;
• 5: inseguimento su slitta con la direzione negativa della slitta del robot nella
direzione di avanzamento del convogliatore.

pr-0-0-gpr_11.fm
08/1112 117
Conveyor Tracking (prestazione opzionale)

– Nei casi di Conveyor circolare o roto-traslante, è necessario anche indicare il


raggio del conveyor, modificabile run-time, mediante l'istruzione:
$TRK_TBL[nTbl].TT_R_PRMS[2] := <raggio_del_conveyor>
– Su un controllo possono essere configurati diversi arm e non necessariamente con
tutti gli arm si prevede di inseguire il conveyor o non è corretto utilizzarli per
l'inseguimento, è necessario configurare una maschera di bit che indichi al C5G
quali sono gli arm abilitati all'inseguimento mediante l'istruzione:
$TRK_TBL[nTbl].TT_ARM_MASK := <maschera_degli_arm>
Solo gli arm riportati nella maschera saranno abilitati all'inseguimento, per gli altri
sarà generato un messaggio di errore se si cercherà di attivare il conveyor.
– Per il corretto inseguimento del conveyor da parte del robot, è necessario definire
il sistema di riferimento alla base del conveyor:
$TRK_TBL[nTbl].TT_FRAMES[1] := <base1>
$TRK_TBL[nTbl].TT_FRAMES[2] := <base2>
$TRK_TBL[nTbl].TT_FRAMES[3] := <base3>
Si hanno 3 valori di riferimento per il conveyor con i seguenti utilizzi:
1. <base1> è usata per i diversi tipi di conveyor ad eccezione del caso
roto-traslante per il quale tale riferimento è utilizzato solo durante
l'inseguimento lineare della pressa;
2. <base2> è utilizzata per inseguire la pressa verso l'alto durante il movimento
di presso-piegatura;
3. <base3> è utilizzata per inseguire la pressa verso il basso durante il
movimento di presso-piegatura.
Per discriminare tra le diverse <baseX>, nel caso di conveyor roto-traslante, prima
di attivare l'inseguimento è necessario impostare la variabile, modificabile
run-time:
$TRK_TBL[nTbl].TT_I_PRMS[3] := <modalità>
Dove i valori che possono essere assegnati alla variabile sono i seguenti:
• 0: inseguimento lineare della pressa;
• 1: inseguimento in roto-traslazione verso l'alto;
• 2: inseguimento in roto-traslazione verso il basso.
Essa deve essere misurata quando il carrello è nella sua posizione di zero (vedi
nel seguito) o in una posizione nota. La scelta della posizione dell'origine del
riferimento e della direzione degli assi, deve seguire alcuni criteri che sono
leggermente diversi nel caso lineare, circolare o roto-traslante. Nel caso di
conveyor roto-traslante consultare il par. 9.9 Utilizzo del Conveyor roto-traslante a
pag. 126.
Nel caso di convogliatori lineari l'asse X del riferimento di base deve essere
allineato con la direzione di avanzamento del convogliatore; il piano X-Y deve
coincidere con il piano del carrello e l'origine deve essere posizionata nel punto in
cui un sensore rileva il passaggio del carrello.
Nel caso circolare l'asse X deve essere tangenziale alla tavola rotante; l'asse Y
deve essere in direzione radiale rispetto alla tavola ed orientato verso il centro di
rotazione; l'asse Z risulta dalla posizione dei primi due assi applicando la regola
della mano destra e risulta rivolto verso l'alto se la tavola ruota in senso antiorario
e verso il basso in caso contrario. Nel caso circolare l'origine del sistema di
riferimento deve essere ad una distanza nota dal centro di rotazione e non
esattamente coincidente con essa; questa distanza rappresenta il raggio della
tavola e deve essere assegnata alla variabile

pr-0-0-gpr_11.fm
118 08/1112
Conveyor Tracking (prestazione opzionale)

$TRK_TBL[nTbl].TT_R_PRMS[2] := <raggio>
(in caso di Conveyor Roto-Traslante vd. par. 9.9 Utilizzo del Conveyor
roto-traslante a pag. 126). La circonferenza passante per l'origine del riferimento
di base della tavola svolge un ruolo importante nella gestione delle rotazioni in
quanto tutte le distanze e le velocità sono misurate rispetto a questa circonferenza
di base.
– È possibile configurare il valore limite per l'accelerazione e la velocità del robot
durante le fasi di inseguimento tramite le istruzioni:
$TRK_TBL[nTbl].TT_R_PRMS[3] := <limite_velocità>
$TRK_TBL[nTbl].TT_R_PRMS[4] := <limite_accelerazione>
– Inoltre, è possibile definire delle finestre di inseguimento specificando il range di
delimitazione:
$TRK_TBL[nTbl].TT_R_PRMS[5] := <primo_valore>
$TRK_TBL[nTbl].TT_R_PRMS[6] := <secondo_valore>
Dove <primo_valore> indica la quota iniziale del conveyor a partire dal quale il
robot deve iniziare l'inseguimento, mentre <secondo_valore> indica la quota
del conveyor dopo la quale non si deve eseguire nessun inseguimento con il robot
– È possibile configurare un encoder virtuale, ovvero attivare il conveyor su una
porta di input impostando la seguente variabile:
$TRK_TBL[nTbl].TT_R_PRMS[17] := <fattore_di_conversione>
Tale variabile, se diversa da zero, attiva l'inseguimento da una porta in input anche
senza hardware conveyor e rappresenta il fattore di conversione dall'unità di
misura in cui è espresso il valore della porta di input e l'unità di misura in cui deve
essere espresso il conveyor (senza tener in conto il
<valore_rapporto_di_tx> che dovrà comunque essere indicato).

9.2 Principio di funzionamento


Il convogliatore non è controllato da C5G ma solo monitorato leggendo la posizione del
trasduttore di posizione solidale con il motore del conveyor. Il valore del trasduttore di
posizione viene scritto nella variabile
$CRNT_DATA[narm].CONV_ENC[nTbl]
ad ogni periodo di interpolazione.
Ad una certa distanza dall'area di lavoro deve essere installato un sensore (ad esempio
una fotocellula) che rileva il passaggio del carrello. Questa è la posizione di zero e,
quando il carrello attraversa questo punto è necessario procedere con la calibrazione
(azzeramento) della posizione conveyor attraverso la built-in CONV_TRACK
(vd. manuale PDL2 Programming Language - cap.11 BUILT-IN Routines List),
richiamabile anche dall’ambiente Conv nella pagina Motion del Terminale di
Programmazione (par.5.9.8 - Conveyor Tracking (prestazione opzionale) del
manuale USO dell’Unità di Controllo C5G).
Ad ogni colpo di interpolazione il sistema calcola la posizione corrente del carrello e
aggiorna il sistema di riferimento spostandolo nella direzione X+ della distanza indicata
da
$CRNT_DATA[n].CONV_SHIFT[nTbl]
Tale distanza è espressa in millimetri. Quando l'inseguimento è attivo, il sistema di
riferimento utente (indicato da $UFRAME) è riferito alla terna solidale con il carrello,
cosicchè tutte le posizioni (POSITION) risultano riferite al pezzo in movimento (vedi
Fig. 9.1 - Terne di riferimento per l'inseguimento lineare cartesiano su slitta e Fig. 9.2

pr-0-0-gpr_11.fm
08/1112 119
Conveyor Tracking (prestazione opzionale)

- Terne di riferimento per l'inseguimento circolare).

Fig. 9.1 - Terne di riferimento per l'inseguimento lineare


cartesiano su slitta

1. Finestra di tracking 2. Terna utente


3. Terna di base del convogliatore 4. Terna carrello
5. Terna mondo 6. Sensore

Fig. 9.2 - Terne di riferimento per l'inseguimento circolare

1. Terna utente 2. Terna di base del convogliatore


3. Terna utente 4. Terna carrello
5. Sensore 6. Terna utente

pr-0-0-gpr_11.fm
120 08/1112
Conveyor Tracking (prestazione opzionale)

Nel caso di inseguimento su slitta, il valore di $CRNT_DATA[n].CONV_SHIFT[nTbl]


viene aggiunto alla posizione corrente della slitta ed il risultato è che il sistema di
riferimento mondo viene spostato insieme al convogliatore.

9.3 Monitoraggio del processo


Per il monitoraggio del conveyor, si utilizzeranno degli array in $CRNT_DATA:
– Numero conveyor attivo sull'arm (0=nessuno)
$CRNT_DATA[narm].CONV_ACT
– Posizione encoder conveyor in giri --> $CRNT_DATA[narm].CONV_ENC[nTbl]
– Angolo di piega conveyor roto-traslante in rad
$CRNT_DATA[narm].CONV_BEND_ANGLE[nTbl]
Questo garantisce il monitoraggio di tutti i conveyor configurati da parte di tutti gli arm
abilitati a lavorare con il conveyor, monitoraggio che risulterà sempre attivo
indipendentemente dallo stato del conveyor.
Quest'ultima, essendo una variabile di tipo INTEGER, si presta meglio di
$CRNT_DATA[n].CONV_SHIFT[nTbl] per essere inserita in una CONDITION
garantendo la massima efficienza.

Si noti che l'Unità di Controllo considera nulla la velocità del carrello, nel caso in
cui questo inverta il suo moto.

9.4 Finestra di inseguimento


Per ulteriori informazioni si fa riferimento al par.5.17.7.1 - Procedura di editing di una
Tabella di Tracking - sottoambiente Cinematics, nel manuale USO dell’Unità di
Controllo C5G .

La finestra di inseguimento è un'area che indica dove il robot è abilitato ad inseguire il


pezzo.
La finestra ha un limite iniziale ed uno finale definiti dalle variabili di sistema
$TRK_TBL[nTbl].TT_R_PRMS[5] e
$TRK_TBL[nTbl].TT_R_PRMS[6].
$TRK_TBL[nTbl].TT_R_PRMS[5] contiene la distanza del limite iniziale dall'origine
della terna di base del convogliatore (dove è posizionato il sensore), mentre
$TRK_TBL[nTbl].TT_R_PRMS[6] contiene la distanza del limite finale (nel caso di
tavola rotante queste distanze sono lette lungo la circonferenza di base).
Quando l'inseguimento è attivo, nessun movimento avrà inizio fino a che l'origine della
terna del carrello non sarà all'interno della finestra di inseguimento.
Se il robot cerca di muovere su una certa posizione quando il carrello non è ancora
entrato nella finestra, l'Unità di Controllo aspetta fino a che non vi sia entrato e cioè fino
a che $CRNT_DATA[n].CONV_SHIFT[nTbl] non sia maggiore di
$TRK_TBL[nTbl].TT_R_PRMS[5].
Se il robot cerca di muovere quando il carrello è già uscito dalla finestra
($CRNT_DATA[n].CONV_SHIFT[nTbl] > $TRK_TBL[nTbl].TT_R_PRMS[6]), l'Unità di
Controllo genera un errore. Generalmente la finestra di inseguimento viene definita
durante la fase di configurazione, muovendo il robot sui due limiti estremi.

pr-0-0-gpr_11.fm
08/1112 121
Conveyor Tracking (prestazione opzionale)

9.5 Istruzioni di movimento


La configurazione del conveyor prescinde dall'arm, ovvero, si indica solo un insieme di
arm che possono essere abilitati all'inseguimento del conveyor. Ciò significa che sullo
stesso conveyor possono lavorare diversi arm, sia contemporaneamente sia
consecutivamente, a seconda dell'applicazione richiesta e della programmazione
utente.
È necessario, pertanto, attivare e disattivare il conveyor in associazione ad un
particolare arm. Al fine di eseguire tale associazione, si usa la seguente built-in:
CONV_TRACK(cmd, nTbl, <narm>, <dist>)
dove i parametri inseriti hanno il seguente significato:
– cmd - comando per il conveyor che può assumere i seguenti valori:
• -1 inizializza (CONV_INIT)
• 0 disattiva (CONV_OFF)
• 1 inizializza e attiva (CONV_INIT_ON)
• 2 attiva (CONV_ON)
– nTbl - numero della tabella configurata per il conveyor;
– narm - numero dell'arm con cui si vuol fare conveyor; è un parametro opzionale in
mancanza del quale si assume essere pari al prog_arm;
– dist - distanza tra il sensore e l'oggetto da inseguire nel momento in cui si richiede
l'inizializzazione del conveyor, il valore di default è 0
Se, prima della chiamata di questa built-in, alcuni parametri di configurazione del
conveyor (solo i parametri modificabili run-time) sono cambiati, essa aggiornerà i dati
per eseguire l'inseguimento in modo corretto.
L'esecuzione di questa built-in, a seconda del valore assegnato al parametro cmd,
attiva/disattiva l'inseguimento ma non ha l'effetto di azzerare la quota encoder del
conveyor se si usa il comando di CONV_ON. L'utilizzo del comando CONV_INIT_ON
ha l'effetto di azzeramento della quota conveyor e istantanea attivazione del conveyor;
al contrario, il comando CONV_INIT esegue l'azzeramento del conveyor senza
l'attivazione dello stesso. Per la disattivazione è necessario usare il comando
CONV_OFF.
Se sull'arm è già attivo l'inseguimento di un conveyor, la built-in restituirà errore se si
cerca di inizializzare o attivare un nuovo conveyor.
Segue un esempio di programma per prelevare pezzi da un convogliatore e posarli su
un piano d'appoggio:

PROGRAM conv
BEGIN
CONDITION[1]:
WHEN $DIN[1] DO
CONV_TRACK(-1, 1) - azzeramento conveyor da tabella 1
ENDCONDITION
CYCLE
ENABLE CONDITION[1]
WAIT FOR $DIN[1] -- attesa del pezzo
CONV_TRACK(2, 1) -- abilitazione dell'inseguimento
MOVEFLY LINEAR NEAR P1 BY 100 ADVANCE -- movimento di
-- approccio al carrello
MOVE LINEAR TO P1 -- movimento sul pezzo
CLOSE HAND -- prelievo

pr-0-0-gpr_11.fm
122 08/1112
Conveyor Tracking (prestazione opzionale)

MOVE AWAY 100


CONV_TRACK(0, 1) -- disabilitazione dell'inseguimento
MOVEFLY LINEAR NEAR P2 BY 100 ADVANCE -- movimento sul piano
-- d'appoggio
MOVE LINEAR TO P2
OPEN HAND -- rilascio del pezzo
MOVE AWAY 100
END conv

9.6 Apprendimento delle posizioni


I punti non possono essere memorizzati con il convogliatore in movimento in quanto
l'inseguimento non è abilitato in stato Programmazione.
Prima di iniziare la sessione di apprendimento deve essere eseguita la built-in
CONV_TRACK con il comando di azzeramento (eventualmente con attivazione
istantanea se necessario). Il modo migliore è fermare il convogliatore dopo il passaggio
del carrello attraverso la posizione di zero e cioè dopo che la built-in CONV_TRACK sia
stata eseguita correttamente.
Altrimenti l'utente deve misurare la distanza tra il pezzo ed il sensore e quindi assegnare
la posizione di zero sempre mediante la built-in CONV_TRACK indicando il parametro
opzionale <dist>, dove dist è la distanza misurata (nel caso di inseguimento circolare va
calcolata lungo la circonferenza).
Nello stato Programmazione con inseguimento abilitato, ogni volta che inizia un
movimento il trasduttore di posizione viene letto e la posizione cartesiana viene
aggiornata.

9.7 Interruzione dell’inseguimento


L'istruzione di LOCK ed alcuni allarmi dovuti al movimento, fermano l'esecuzione del
programma ma il robot continua ad inseguire; questo significa che il robot si muove per
mantenere il TCP fermo rispetto al carrello in movimento.
Gli allarmi gravi, i comandi di HOLD e di DRIVE OFF, fermano sia l'esecuzione del
programma sia l'inseguimento. Un segnale in uscita dovrebbe essere alzato per fermare
e far ripartire il movimento del convogliatore.

9.8 Limitazioni durante il Conveyor Tracking


Si precisano alcune limitazioni che riguardano tutti i casi di Conveyor Tracking:
– durante l'inseguimento è possibile eseguire solo traiettorie cartesiane (lineari e
circolari) su punti di tipo POSITION
– siccome non sono ammessi movimenti di tipo giunti, anche le traiettorie di recupero
devono essere di tipo cartesiano. Pertanto la variabile $RCVR_TYPE può
assumere solo i valori 3, 4, 5, 6
– non devono esserci movimenti attivi quando si chiama la built-in CONV_TRACK
per attivare o disattivare l’inseguimento
– non è possibile effettuare il controllo delle tolleranze sui punti di arresto durante
l'inseguimento, poichè lo spostamento del carrello comporta il continuo movimento
degli assi del robot anche durante le soste. Pertanto l'unico valore ammesso per la
variabile di sistema $TERM_TYPE è NOSETTLE

pr-0-0-gpr_11.fm
08/1112 123
Conveyor Tracking (prestazione opzionale)

– dopo ogni errore che determina lo sgancio della traiettoria del robot dal carrello,
deve essere eseguita la built-in CONV_TRACK con comando di CONV_OFF
– non è possibile riprendere l'esecuzione dell'inseguimento dopo una caduta di
tensione senza aver portato il robot su una posizione fissa (cioè eseguendo la
built-in CONV_TRACK con comando di CONV_OFF)
– si sconsiglia l'uso della built-in CONV_TRACK come prima istruzione di un
programma HOLDABLE.

Tab. 9.1 - Variabili di sistema per Conveyor Tracking


Nome Descrizione Tipo
Identifica il tipo di applicazione di tracking che si sta
TT_APPL_ID INTEGER
configurando: conveyor = 2
Su un Controllore possono essere configurati diversi arm e non
necessariamente si prevede di inseguire il conveyor con tutti gli
arm o a volte non è corretto utilizzarli per l'inseguimento; è
necessario quindi configurare una maschera di bit che indichi al
C5G quali siano gli arm abilitati all'inseguimento, mediante
TT_ARM_MASK INTEGER
l'istruzione:
$TRK_TBL[nTbl].TT_ARM_MASK := arm_mask
Solo gli arm riportati nella maschera saranno abilitati
all'inseguimento; per gli altri sarà generato un messaggio di
errore se si cercherà di attivare il conveyor.
Per il corretto inseguimento del conveyor da parte del robot, è
necessario definire il sistema di riferimento alla base del
conveyor:
$TRK_TBL[nTbl].TT_FRAMES[1] := <base1>
$TRK_TBL[nTbl].TT_FRAMES[2] := <base2>
$TRK_TBL[nTbl].TT_FRAMES[3] := <base3>
Si hanno 3 valori di riferimento per il conveyor con i seguenti
utilizzi:
1 <base1> è la BASE utilizzata per i diversi tipi di conveyor ad
eccezione del caso roto-traslante per il quale tale
riferimento è utilizzato solo durante l'inseguimento lineare
della pressa;
2 <base2> è la BASE utilizzata per inseguire la pressa verso ARRAY[3] OF
TT_FRAMES
l'alto durante il movimento di presso-piegatura; POSITION
3 <base3> è la BASE utilizzata per inseguire la pressa verso
il basso durante il movimento di presso-piegatura.
Nel caso di convogliatori lineari l'asse X del riferimento di base
deve essere allineato con la direzione di avanzamento del
convogliatore; il piano X-Y deve coincidere con il piano del
carrello e l'origine deve essere posizionata nel punto in cui un
sensore rileva il passaggio del carrello.
Nel caso circolare l'asse X deve essere tangenziale alla tavola
rotante; l'asse Y deve essere in direzione radiale rispetto alla
tavola ed orientato verso il centro di rotazione; l'asse Z risulta
dalla posizione dei primi due assi applicando la regola della

pr-0-0-gpr_11.fm
124 08/1112
Conveyor Tracking (prestazione opzionale)

Tab. 9.1 - Variabili di sistema per Conveyor Tracking (Continua)


Nome Descrizione Tipo
mano destra e risulta rivolto verso l'alto se la tavola ruota in
senso antiorario e verso il basso in caso contrario. Nel caso
circolare l'origine del sistema di riferimento deve essere ad una
distanza nota dal centro di rotazione e non esattamente
coincidente con essa; questa distanza rappresenta il raggio della
tavola e deve essere assegnata alla variabile TT_R_PRMS[2].
Parametri di tipo INTEGER per la configurazione del tracking
– TT_I_PRMS[1] numero di impulsi sin/cos
– TT_I_PRMS[2] conveyor configuration (lineare, circolare,
rail tracking, conveyor roto-traslante)
– TT_I_PRMS[3] modalità rt
Per discriminare tra le diverse BASE (vd.TT_FRAMES), nel caso
di conveyor roto-traslante, prima di attivare l'inseguimento è
necessario impostare la variabile, modificabile run-time:
$TRK_TBL[nTbl].TT_I_PRMS[3] := <modalità>
Dove i valori che possono essere assegnati alla variabile sono i
ARRAY[20] OF
TT_I_PRMS seguenti: INTEGER
– 0: inseguimento lineare della pressa;
– 1: inseguimento in roto-traslazione verso l'alto;
– 2: inseguimento in roto-traslazione verso il basso.
Essa deve essere misurata quando il carrello è nella sua
posizione di zero (vedi nel seguito) o in una posizione nota. La
scelta della posizione dell'origine del riferimento e della direzione
degli assi, deve seguire alcuni criteri che sono leggermente
diversi nel caso lineare, circolare o roto-traslante. Nel caso di
conveyor roto-traslante consultare il par. 9.9 Utilizzo del
Conveyor roto-traslante a pag. 126.
Indice della porta di I/O per il tracking:
TT_PORT_IDX ARRAY[5] OF INTEGER
– TT_PORT_IDX[1] numero porta encoder conveyor
Codice del tipo di porta di I/O per il tracking:
TT_PORT_TYPE ARRAY[5] OF INTEGER
– TT_PORT_TYPE[1] tipo porta encoder conveyor
Parametri di tipo REAL per la configurazione del tracking
– TT_R_PRMS[1] tx_rate
– TT_R_PRMS[2] radius (circolare / roto-traslante)
– TT_R_PRMS[3] limite velocità
– TT_R_PRMS[4] limite accelerazione
– TT_R_PRMS[5] limite iniziale finestra di inseguimento
– TT_R_PRMS[6] limite finale finestra di inseguimento
TT_R_PRMS – TT_R_PRMS[7] spessore lamiera in mm ARRAY[20] OF REAL
– TT_R_PRMS[8] angolo cava matrice in rad
– TT_R_PRMS[9] raggio spalla matrice in mm
– TT_R_PRMS[10] larghezza cava matrice in mm
– TT_R_PRMS[11] raggio coltello in mm
– TT_R_PRMS[12] max angolo di rotazione piegatura in rad
– TT_R_PRMS[13] parametro 1 del filtro arma
– TT_R_PRMS[14] parametro 2 del filtro arma
– TT_R_PRMS[15] arma_filter_3 (rt)
– TT_R_PRMS[16] arma_filter_4 (rt)

pr-0-0-gpr_11.fm
08/1112 125
Conveyor Tracking (prestazione opzionale)

Tab. 9.2 - Built-in per Conveyor Tracking


Nome della built-in Parametri
CONV_TRACK cmd, nTbl, <narm>, <dist>
dove:
– cmd - comando per il conveyor che può assumere i seguenti valori (da sostituire
con delle predefined):
• -1 inizializza (CONV_INIT)
• 0 disattiva (CONV_OFF)
• 1 inizializza e attiva (CONV_INIT_ON)
• 2 attiva (CONV_ON)
– nTbl - numero della tabella configurata per il conveyor
– narm - opzionale; numero dell'arm con cui si vuol fare conveyor; in mancanza di
esso, viene utilizzato il prog_arm
– dist - opzionale; distanza tra il sensore e l'oggetto da inseguire nel momento in
cui si richiede l'inizializzazione del conveyor, il valore di default è 0

9.9 Utilizzo del Conveyor roto-traslante


Il riferimento $TRK_TBL[nTbl].TT_FRAMES, in generale, non può essere ricavato in
sede di configurazione in modo definitivo, poiché dipendente dalla direzione della piega
verso l'alto, piuttosto che verso il basso. È, comunque, possibile definire delle linee
guida utili per la sua determinazione in questo caso.
L'asse X del riferimento di base deve essere allineato con la direzione di avanzamento
del conveyor (in questo caso il coltello della pressa-piegatrice); il piano X-Y deve essere
ortogonale con il piano di movimento della piegatrice e l'origine deve essere posizionata
nel punto di massima apertura della piegatrice.
Se la direzione della piega del pezzo è verso l'alto, l'asse Y deve essere entrante nel
piano di movimento della piegatrice, altrimenti uscente.
Il valore della variabile $TRK_TBL[nTbl].TT_R_PRMS[2] rappresenta la distanza del
robot dal punto di piega ed è espresso in mm; questo valore dovrà essere calcolato
riferito alla posizione del robot ad inizio piega rispetto al punto contatto lamiera
(vd. Fig. 9.3).

Fig. 9.3 - Posizione di inizio piega

1. Pressa-piegatrice 2. Lamiera 3. Robot

pr-0-0-gpr_11.fm
126 08/1112
Conveyor Tracking (prestazione opzionale)

Fig. 9.4 - Rappresentazione tridimensionale della Piegatrice

Fig. 9.5 - Rappresentazione grafica della Piegatrice

9.9.1 Parametri di configurazione


I parametri necessari per la configurazione del corretto inseguimento sono i seguenti:

$TRK_TBL[nTbl].TT_R_PRMS[7] Spessore Lamiera in mm


$TRK_TBL[nTbl].TT_R_PRMS[8] Angolo Cava Matrice in rad
$TRK_TBL[nTbl].TT_R_PRMS[9] Raggio Spalla Matrice in mm

pr-0-0-gpr_11.fm
08/1112 127
Conveyor Tracking (prestazione opzionale)

$TRK_TBL[nTbl].TT_R_PRMS[10] Larghezza Cava Matrice in mm


$TRK_TBL[nTbl].TT_R_PRMS[11] Raggio Coltello in mm
$TRK_TBL[nTbl].TT_R_PRMS[12] Massimo angolo di rotazione piegatura in rad

pr-0-0-gpr_11.fm
128 08/1112
Movimento con Weaving (prestazione opzionale)

10. MOVIMENTO CON WEAVING


(PRESTAZIONE OPZIONALE)

Weaving Motion
Il codice dell’opzione è CR17926207.

Il Weaving è un movimento oscillatorio eseguito lungo una traiettoria cartesiana e


trasversalmente ad essa. E’ utile in applicazioni di arco-saldatura, di incollaggio e di
sigillatura in quanto la torcia viene mossa da una parte all’altra del giunto di saldatura
distribuendo materiale lungo la traiettoria programmata.
Il weaving può essere applicato sul movimento cartesiano (lineare o circolare) e su più
movimenti continui. La forma d’onda è definita da un insieme di parametri (weaving
parametrico). Esistono due modalità di weaving: cartesiano e giunti.
Gli argomenti descritti nel presente capitolo sono i seguenti:
– Modalità di weaving
– Attivazione del weaving
– Parametri del weaving
– Arresto del movimento con weaving
– Programmazione del weaving
– Weaving in assenza di movimento programmato
– Weaving su sistemi multiarm

10.1 Modalità di weaving


La modalità di weaving può essere selezionata tramite la variabile $WEAVE_TYPE.
Lasciando questa variabile impostata al valore zero di default, si seleziona il weaving
cartesiano. In questa modalità, il weaving è definito relativamente ad un riferimento
definito dalla traiettoria stessa e non è influenzato da cambiamenti dell’orientamento
dell’attrezzo lungo la traiettoria. Se $WEAVE_TYPE ha un valore compreso tra 1 e 10,
il weaving selezionato è di tipo giunti. In questo caso, il valore della variabile predefinita
indica l’asse interessato dal weaving; la direzione del pendolamento dipende dalla
posizione di tutti gli assi. Il weaving giunti consente di ottenere frequenze di
pendolamento maggiori rispetto al weaving cartesiano.

10.2 Attivazione del weaving


Il weaving viene abilitato e disabilitato mediante la variabile predefinita $WEAVE_NUM.
Questa variabile contiene il numero della tabella di weaving attiva. Il valore iniziale è
zero che indica che il weaving è disabilitato.
Per abilitare il weaving occorre assegnare alla variabile $WEAVE_NUM l’indice della
tabella che si vuole utilizzare. Dopo questo comando, tutti i movimenti cartesiani
verranno eseguiti con weaving secondo i parametri della tabella attiva
$WEAVE_TBL[$WEAVE_NUM].

pr-0-0-gpr_09.fm
08/1112 129
Movimento con Weaving (prestazione opzionale)

E’ possibile effettuare il weaving durante una serie di movimenti continui (in fly) o in un
movimento lungo un percorso (PATH). Tuttavia, il weaving verrà attuato solamente
durante movimenti cartesiani o lungo segmenti cartesiani di un percorso. Nel caso in cui
una serie di movimenti in fly o un percorso comprendano movimenti giunti, il weaving si
interrompe durante movimenti giunti e riprende al successivo movimento cartesiano o
segmento di un percorso.
Si definisce primo movimento con weaving il movimento dopo un’interruzione del
pendolamento. Una interruzione può aver luogo se il weaving viene esplicitamente
disabilitato dall’utente, oppure se il movimento è di tipo giunti, oppure se due movimenti
con weaving non sono raccordati con una movimento continuo (fly). Quanto appena
detto per i singoli movimenti vale anche nel caso di segmenti di percorso (PATH).

10.3 Parametri del weaving


La variabile predefinita $WEAVE_TBL è utilizzata per definire tutte le caratteristiche del
pendolamento. $WEAVE_TBL è un array di RECORD che permette all’utente di definire
fino a 10 diverse tabelle di weaving. I campi di $WEAVE_TBL sono definiti nel seguente
modo:
– $WEAVE_MODALITY rappresenta la modalità di generazione della forma d’onda
di weaving. E’ un INTEGER con valori da 0 a 4:
• $WEAVE_MODALITY=0 - la forma d’onda viene generata dalla velocità
trasversale;
• $WEAVE_MODALITY=1 - la forma d’onda viene generata dalla lunghezza
d’onda. In questo caso, al variare degli override relativi alla velocità di
avanzamento, la forma d’onda non cambia;
• $WEAVE_MODALITY=2 - la forma d’onda viene generata con 4 diverse
velocità trasversali, al fine di produrre profili asimmetrici.
• $WEAVE_MODALITY=3 weaving con forma d'onda circolare generato dalla
velocità trasversale.
• $WEAVE_MODALITY=4 weaving con forma d'onda circolare generato dalla
lunghezza d'onda.
– un campo INTEGER definisce la lunghezza d’onda nella forma di weaving:
• $WV_LENGTH_WAVE (da 0 a 10.000 mm);
– due campi REAL definiscono le ampiezze sinistra e destra, in caso di weaving
trapezoidale:
• $WEAVE_TBL[n].WV_LEFT_AMP definisce l’ampiezza sinistra (0 - 20),
• $WEAVE_TBL[n].WV_RIGHT_AMP definisce l’ampiezza destra (0 - 20);
– due campi REAL definiscono la forma d'onda circolare:
• $WEAVE_TBL[n]. WV_RADIUS rappresenta l’ampiezza (in mm) del weaving
nella direzione della traiettoria in caso di weaving circolare (è il semiasse più
corto dell’ellisse che rappresenta la forma di weaving).
• $WEAVE_TBL[n]. WV_AMPLITUDE rappresenta l’ampiezza (in mm) del
weaving nella direzione perpendicolare alla traiettoria in caso di weaving
circolare (è il semiasse più lungo dell’ellisse che rappresenta la forma di
weaving).
– quattro campi INTEGER definiscono i tempi di pausa, solo nel caso di forma
d’onda trapezoidale:
• $WEAVE_TBL[n].WV_LEFT_DWL definisce il tempo di attesa (in ms) a
sinistra; nel caso di $WEAVE_MODALITY=1 definisce lo spazio percorso (in
mm) a sinistra lungo la traiettoria. Limiti: da 0 a 10.000;

pr-0-0-gpr_09.fm
130 08/1112
Movimento con Weaving (prestazione opzionale)

• $WEAVE_TBL[n].WV_CNTR_DWL definisce il tempo di attesa (in ms) al


centro; nel caso di $WEAVE_MODALITY=1 definisce lo spazio percorso (in
mm) al centro lungo la traiettoria. Limiti: da 0 a 10.000;
• $WEAVE_TBL[n].WV_RIGHT_DWL definisce il tempo di attesa (in ms) a
destra; nel caso di $WEAVE_MODALITY=1 definisce lo spazio percorso (in
mm) a destra lungo la traiettoria. Limiti: da 0 a 10.000;
• $WEAVE_TBL[n].WV_END_DWL definisce il tempo di attesa (in ms) al
termine del movimento; nel caso di $WEAVE_MODALITY=1 definisce lo
spazio percorso (in mm) al termine del movimento, lungo la traiettoria. Limiti:
da 0 a 10.000;
– un campo BOOLEAN controlla lo smussamento degli angoli della forma d’onda
(consultare la spiegazione più avanti), solo nel caso di forma d’onda trapezoidale:
• $WEAVE_TBL[n].WV_SMOOTH;
– un campo REAL controlla la velocità trasversale:
• $WEAVE_TBL[n].WV_TRV_SPD (consigliata a 0.035 m/s);
– quattro campi REAL per le 4 velocità trasversali che servono in modalità 2:
• $WEAVE_TBL[n].WV_TRV_SPD_PHASE[m]; (con 1<=m<=4)
– un campo REAL per l’angolo tra il piano di weaving e la direzione di weaving
(consultare la spiegazione più avanti):
• $WEAVE_TBL[n].WV_PLANE (da -180 a +180 gradi);
– un campo INTEGER per la modalità di evoluzione del piano di weaving:
• $WEAVE_TBL[n].WV_PLANE_MODALITY rappresenta la modalità in cui è
calcolato il piano di weaving. Se questa variabile è impostata a 0 (default), il
piano di weaving è mantenuto costante rispetto alla sequenza di traiettorie
collegate in fly. Se questa variabile è impostata a 1, il piano di weaving è
calcolato sulla traiettoria ed è solidale con il tool e perpendicolare ad esso;
– un campo REAL per la direzione di pendolamento:
• $WEAVE_TBL[n].WV_DIRECTION_ANGLE rappresenta l’angolo (da -180 a
+180 gradi) permesso per la direzione di weaving nel caso di Weaving in
assenza di movimento programmato o nel caso di piano di weaving solidale
con il tool. La direzione di default (angolo 0) corrisponde alla direzione X del
TOOL;
– un campo INTEGER per il fattore di amplificazione dell’ampiezza (espresso in
percentuale):
• $WEAVE_TBL[n].WV_AMP_PER (da 0% a 1000%);
– un campo BOOLEAN indica che si utilizzano le caratterizzazioni di accelerazione
e decelerazione
• $WEAVE_TBL[n].WV_SPD_PROFILE; utilizzando questa funzione le
velocità trasversali vengono raggiunte con una rampa, al fine di rispettare i
limiti di accelerazione/decelerazione dell’asse coinvolto nel pendolamento,
per weave giunti; o i limiti di accelerazione/decelerazione cartesiani per
weave cartesiano. Inoltre viene eseguito un test sulla velocità massima
raggiungibile.
L’indice n varia da 1 a 10 e l’utente può cambiare in qualsiasi momento un
campo dei 10 elementi della tabella.
Il weaving parametrico è definito da tre informazioni:
– Forma d’onda
– Piano di weaving (angolo del piano di weaving)
– Amplificazione del weaving (usata per variare l’ampiezza del weaving)

pr-0-0-gpr_09.fm
08/1112 131
Movimento con Weaving (prestazione opzionale)

10.3.1 Forma d’onda


La forma d’onda può essere trapezoidale o circolare. L’unità di misura di alcuni campi
di $WEAVE_TBL dipendono dal tipo di weaving selezionato. In caso di weaving
cartesiano, $WV_LEFT_AMP e $WV_RIGHT_AMP, $WV_RADIUS e
$WV_AMPLITUDE sono espressi in millimetri; in caso di weaving giunti, questi
parametri sono espressi in gradi o millimetri, a seconda che l’asse selezionato sia
rotazionale (gradi) o traslante (millimetri). $WV_TVR_SPD è espresso in metri/secondo
in caso di weaving cartesiano, in radianti/secondo in caso di asse rotazionale con
weaving giunti, e in metri/secondo in caso di assi traslanti con weaving giunti.
Se $WEAVE_MODALITY = 0 o 3, l’onda è descritta dalla velocità trasversale,
dall’ampiezza, dai tempi di pausa (dwell times), e dalla velocità lungo la traiettoria. La
frequenza è determinata dai primi tre dei suddetti parametri. La velocità del movimento
lungo la traiettoria ($LIN_SPD) non influenza la frequenza, ma piuttosto la lunghezza
d’onda. La Fig. 10.1 mostra la forma di base e definisce i vari tempi di pausa. Mostra
anche come vengono calcolati la velocità e la pendenza in caso di onda trapezoidale.
Se $WEAVE_MODALITY = 1 o 4, la lunghezza d’onda (e quindi la frequenza) viene
mantenuta al variare della velocità; gli override non influenzano la forma d’onda.
Se $WEAVE_MODALITY = 2, la forma d’onda è generata con 4 velocità trasversali
differenti. I profili prodotti sono asimmetrici.

Fig. 10.1 - Parametri del weave - A

Nota: il calcolo della Velocità trasversale viene fatto con la formula seguente
Left amplitude
Transverse speed = ----------------------------
ts

a. Direzione di pendolamento b. Tempo

1 - ts[1] 2 - Tempo di pausa sx 3 - ts[2] 4 - Tempo di pausa centale 5 - ts[3]


6 - Tempo di pausa dx 7 - ts[4] 8 - Tempo di pausa finale 9 - Ampiezza sx 10 - Ampiezza dx

pr-0-0-gpr_09.fm
132 08/1112
Movimento con Weaving (prestazione opzionale)

Significato dei termini ts[n] (tempi di salita o di discesa della rampa), in


funzione della modalità di pendolamento:
Modalità 0 - i tempi ts sono tutti uguali e generati al fine di raggiungere
una velocità trasversale $weave_tbl[n].wv_trv_spd;
Modalità 1 - i tempi ts sono tutti uguali e vengono generati al fine di creare
il periodo di pendolamento secondo la lunghezza d'onda programmata;
Modalità 2 - I tempi ts[n] vengono generati al fine di raggiungere le
rispettive velocità trasversali $weave_tbl[n].wv_trv_spd_phase[n].

Fig. 10.2 - Parametri del weave - B

1 - Direzione di pendolamento 2 - Traiettoria


3 - Velocità trasversale 4 - Velocità della torcia = Velocità Lineare
5 - Velocità della torcia = Velocità risultante 6 - Velocità Lineare

Cambiamenti ai campi relativi all’ampiezza, ai tempi di pausa, allo smussamento ed alla


velocità hanno effetto immediato (anche durante un movimento di weaving). Il fattore
legato alla direzione ed all’amplificazione hanno effetto solo sul primo movimento di
weaving.
Quando i tempi di attesa a destra ed a sinistra sono impostati al valore 0, la forma di
weave risultante è triangolare o seghettata. I picchi della forma seghettata possono
essere arrotondati impostando al valore TRUE il campo legato all’arrotondamento, in
modo da generare una forma simile a quella sinusoidale. La Fig. 10.3 mostra i vari profili
che si possono ottenere impostando i campi di $WEAVE_TBL.

Fig. 10.3 - Onde di weave

1. Dente di sega non smussato 2. Dente di sega smussato 3. Trapezoidale (pausa sinistra e destra)

pr-0-0-gpr_09.fm
08/1112 133
Movimento con Weaving (prestazione opzionale)

4. Variazione smussamento durante il movimento, con tempo di pausa centrale


5. Ampiezze sinistra e destra diverse 6. Circolare

La frequenza dell’onda di weave, a seconda della modalità utilizzata, viene calcolata in


uno dei seguenti modi:
– modalità 0

– modalità 2

dove:
dwell sum = left dwell + right dwell + 2 * center dwell (ms)
la frequenza massima dipende dalla meccanica dell’arm, ma viene garantita una buona
aderenza alla traiettoria teorica per frequenze inferiori a 5 Hz (weaving cartesiano) o 8
Hz (weaving giunti) su arm progettati per saldatura ad arco.

Fig. 10.4 - Parametri del weave - C

I parametri del weave - B (vd.Fig. 10.2) valgono per tutte le forma d'onda.
La frequenza nel caso di forma d'onda circolare descritta dalla velocità trasversale è:

10.3.2 Piano di weaving


In generale, il piano di weaving si applica solo al weaving cartesiano e si imposta nel
modo illustrato qui di seguito. All’inizio del primo movimento di weaving, il vettore di

pr-0-0-gpr_09.fm
134 08/1112
Movimento con Weaving (prestazione opzionale)

approccio del tool e la tangente alla traiettoria di movimento formano un piano, chiamato
piano della torcia. Viene quindi definito un piano, chiamato piano zero, che è
perpendicolare al piano della torcia e contiene la traiettoria. (Se il movimento è lineare,
allora la tangente alla traiettoria è la linea stessa. Se il movimento è un cerchio, allora
la tangente alla traiettoria è la tangente al cerchio nel suo punto iniziale). Nel caso in cui
il vettore di approccio della torcia si trovi nella stessa direzione della traiettoria
programmata, si verifica un errore
(“37111 tool e traiettoria weave allineati”).
Il piano di weaving è ottenuto dalla rotazione, dal piano zero lungo la traiettoria tangente,
di un angolo specificato in $WEAVE_TBL[n].WV_PLANE. L’angolo è positivo in senso
antiorario guardando nella direzione della traiettoria. La Fig. 10.5 illustra questa
procedura.

Fig. 10.5 - Piano di weaving

1. Piano della torcia


2. Traiettoria
3. Angolo del piano di weaving
4. Vettore di approccio (lungo Z Tool)
5. Piano di weaving
6. Piano Zero
7. Angolo del piano di weaving
8. Piano Zero
9. Piano di weaving
10. Vettore di approccio (lungo Z Tool)

E’ possibile eseguire il weaving tra due traiettorie raccordate in fly; in questo caso la
direzione di weaving sulla seconda è ricalcolata mantenendo l’angolo di inclinazione
rispetto al piano delle due traiettorie. Il weaving passerà da una direzione all’altra senza
interrompersi. Questa prestazione consente di programmare percorsi complessi in un
modo molto semplice; si dovrà assegnare l’angolo soltanto all’inizio del primo
movimento con weaving ed l’Unità di Controllo provvederà a calcolare automaticamente
la direzione dei movimenti successivi. Si noti che, sulla seconda traiettoria, l’angolo tra
il piano della torcia e la direzione di weaving non sarà più pari all’angolo indicato in
$WEAVE_TBL[n].WV_PLANE; l’Unità di Controllo fa riferimento a questo angolo

pr-0-0-gpr_09.fm
08/1112 135
Movimento con Weaving (prestazione opzionale)

soltanto sul primo movimento con weaving.


Il weaving di traiettorie raccordate in fly può essere migliorato in alcuni casi utilizzando
la modalità di fly FLY_CART. La direzione di weaving evolve continuamente durante il
fly, senza interrompersi nel passaggio da un segmento di movimento ad un altro.
(par. 5.10.2.2 FLY_CART (Controller Aided Resolved Trajectory) a pag. 74)

Fig. 10.6 - Weaving durante il movimento continuo (fly)

1. Punto iniziale
2. Angolo del paino di weaving = 0°

Nel caso di movimento circolare, il piano di weaving è continuamente calcolato lungo il


percorso in modo da mantenere la direzione di weaving sempre perpendicolare ad
esso. Se il piano di weaving non è parallelo al piano della circonferenza, il piano di
weaving si troverà sul tronco di un cono, come mostrato in Fig. 10.7.

Fig. 10.7 - Weaving su traiettoria circolare

1.Direzione di weaving iniziale 2.Punto iniziale 3.Direzione di weaving finale 4. Punto finale
5.Centro della circonferenza

In particolari applicazioni, può esserci l'esigenza di pendolare lungo una traiettoria


circolare elicoidale in cui il piano di weaving rimanga solidale con la torcia anziché, come
nel caso standard sopra descritto, con la traiettoria. In questo caso il valore della
variabile $WV_TBL[n].WV_PLANE_MODALITY deve essere impostato a 1 anziché a

pr-0-0-gpr_09.fm
136 08/1112
Movimento con Weaving (prestazione opzionale)

0 (default).
In questo caso la direzione di pendolamento è, per default, quella corrispondente alla
direzione X della torcia. Qualora sia necessario pendolare in una direzione diversa, è
possibile utilizzare la variabile $WV_TBL[n].WV_DIRECTION_ANGLE che rappresenta
un angolo di rotazione intorno al vettore Z della torcia stessa.

10.3.3 Amplificazione del weaving


L’ampiezza del weaving permette di effettuare il pendolamento su giunti a V in cui lo
spazio tra le parti varia linearmente dall’inizio alla fine a causa di disallineamenti.
Il fattore di amplificazione dell’ampiezza, memorizzato nel campo
$WEAVE_TBL[n].WV_AMP_PER, è utilizzato per aumentare o ridurre linearmente
l’ampiezza del weaving lungo il movimento. L’inizio del movimento viene considerato al
100%. Il valore di $WEAVE_TBL determina la percentuale alla fine del movimento.
Se viene eseguita una serie di movimenti in fly o lungo un percorso (PATH), l’ampiezza
corrispondente al 100% viene calcolata al primo movimento con weaving.
Successivamente, all’inizio di ogni movimento, la percentuale viene impostata al valore
che aveva nel movimento precedente e $WEAVE_TBL[n].WV_AMP_PER viene letto
per calcolare la percentuale alla fine del movimento. Quindi si può usare una serie di
movimenti per saldare senza interruzioni lungo un giunto di lunghezza variabile (Da
notare che la variabile $WEAVE_TBL[n].WV_AMP_PER viene letta ad ogni movimento,
ma la definizione del 100% viene solo calcolata al primo movimento con weaving).
La Fig. 10.8 mostra la prestazione di amplificazione del weaving.

Fig. 10.8 - Amplificazione del weaving

1. Ampiezza finale 2. Punto finale 3. Punto iniziale 4. Ampiezza iniziale

pr-0-0-gpr_09.fm
08/1112 137
Movimento con Weaving (prestazione opzionale)

1. Pezzo saldato 2. Primo movim. in fly 3. Secondo movim. in fly 4. Saldatura 5. Nodo del movim. in fly

10.4 Arresto del movimento con weaving


Quando il movimento si arresta sull’ultimo punto di un percorso oppure dopo la
pressione del tasto HOLD da parte dell’operatore, la torcia può trovarsi fuori dalla
traiettoria a causa del weaving. In questo caso C5G riporta la torcia in traiettoria prima
di fermarsi.
Nel caso di arresto per emergenza o per power failure, l’arm si ferma immediatamente
anche se si trova in una posizione distante dalla traiettoria originale. Al ripristino della
potenza e successivamente alla pressione del tasto START, il riorno in traiettoria viene
effettuato prima di riprendere il weaving.
La seguente Fig. 10.9 mostra questi casi.

Fig. 10.9 - Arresto del weaving

pr-0-0-gpr_09.fm
138 08/1112
Movimento con Weaving (prestazione opzionale)

1. Sistema in stato Hold 2. Punto di arresto 3. Traiettoria originale


4. Emergenza o Power failure 5. Ripristino della traiettoria 6.Traiettoria originale

10.5 Programmazione del weaving


Il weaving viene programmato definendo, in un primo momento, tutte le tabelle di
weaving che si vogliono utilizzare e attivando, poi, il pendolamento usando la variabile
predefinita $WEAVE_NUM.
$WEAVE_NUM può essere usato anche sotto clausola WITH; in questo caso ha effetto
soltanto sulla movimento corrente. Se $WEAVE_TYPE viene cambiato durante il fly, si
verifica l’errore
“(37158) Fly $WEAVE_TYPE incompatibili”.
Anche $WV_AMP_PER può essere usata con la clausola WITH. Non è necessario
specificare il nome della struttura di appartenenza e l’indice ($WEAVE_TBL[n]) per la
variabile $WV_AMP_PER; viene infatti considerato l’attuale valore di $WEAVE_NUM.
Non è possibile cambiare l’indice della tabella di weaving attiva durante un singolo
movimento o un segmento di un percorso, in quanto ogni tratta può essere riferita ad
una sola tabella.
Tuttavia la forma d’onda può essere cambiata durante un movimento modificando i
valori dei parametri della tabella attiva. Questo è possibile utilizzando l’istruzione
CONDITION o cambiando direttamente i campi $WEAVE_TBL[$WEAVE_NUM].
Segue una tabella riassuntiva delle variabili predefinite per il Weaving (vd. Tab. 10.1).

Tab. 10.1 - Variabili predefinite per Weaving


Nome Tipo Limiti Default WITH
$WEAVE_NUM INTEGER [ 0, 10 ] UNINIT YES
$WEAVE_MODALITY INTEGER [ 0, 4 ] 0 YES
$WV_LENGTH_WAVE INTEGER [ 0, 10000 ] 0 NO
$WEAVE_TYPE INTEGER [ 0, 10 ] UNINIT YES
$WEAVE_TBL ARRAY NO
[$NUM_WEAVES]
OF RECORD
$WEAVE_TBL[idx].WV_PLANE REAL [-180, +180] 0.0 NO
deg
$WEAVE_TBL[idx].WV_AMP_PER INTEGER [ 0, 1000 ] % 100 % YES
$WEAVE_TBL[idx].WV_RIGHT_AMP REAL [0, 20] mm o 0,0 NO
deg
$WEAVE_TBL[idx].WV_LEFT_AMP REAL [0, 20] mm o 0.0 NO
deg
$WEAVE_TBL[idx].WV_CNTR_DWL (*) INTEGER [0, 10000] mm 0 NO
o ms
$WEAVE_TBL[idx].WV_RIGHT_DWL (*) INTEGER [0, 10000] mm 0 NO
o ms
$WEAVE_TBL[idx].WV_LEFT_DWL (*) INTEGER [0, 10000] mm 0 NO
o ms
$WEAVE_TBL[idx].WV_END_DWL INTEGER [0, 10000] mm 0 NO
o ms
$WEAVE_TBL[idx].WV_SMOOTH BOOLEAN FALSE NO
$WEAVE_TBL[idx]WV_TRV_SPD REAL 0.0 NO

pr-0-0-gpr_09.fm
08/1112 139
Movimento con Weaving (prestazione opzionale)

Tab. 10.1 - Variabili predefinite per Weaving (Continua)


Nome Tipo Limiti Default WITH
$WEAVE_TBL[idx].WV_TRV_SPD_PHASE REAL 0.0 NO
$WEAVE_TBL[idx].WV_SPD_PROFILE BOOLEAN FALSE NO
$WEAVE_TBL[idx].WV_AMPLITUDE REAL 0.0 NO
$WEAVE_TBL[idx].WV_RADIUS REAL 0.0 NO
$WEAVE_TBL[idx].WV_PLANE_MODALITY INTEGER [0, 1] 0 NO
$WEAVE_TBL[idx].WV_DIRECTION_ANGLE REAL [-180, +180] 0.0 NO
deg
$NUM_WEAVES INTEGER [ 0, 16 ] 10 NO
(*) Se $WEAVE_MODALITY=0, rappresentano dei mm
Se $WEAVE_MODALITY=1, rappresentano dei ms

10.6 Weaving in assenza di movimento


programmato
Questa tipologia di weaving permette di eseguire la saldatura con Arm senza un
movimento programmato: lo scopo è quello di poter far pendolare l’Arm in questione
mentre il pezzo che deve essere saldato viene movimentato da un altro Arm.
Questa tipologia di weaving è molto simile a quella descritta nei paragrafi precedenti; le
differenze verranno descritte nel seguito.

10.6.1 Modalità
Le modalità di weaving in assenza di movimento programmato sono richiamate
mediante la variabile $CRNT_DATA[num_arm].WEAVE_TYPE_NOMOT che ha le
stesse funzioni descritte nel par. 10.1 Modalità di weaving a pag. 129: l’unica differenza
è che questa modalità viene effettuata senza movimento correlato al pendolamento.

10.6.2 Attivazione
Anche per questa tipologia l’attivazione avviene mediante la definizione della tabella di
weaving da eseguire; occorre però avere l’accortezza di utilizzare la variabile

$CRNT_DATA[2].WEAVE_NUM_NOMOT

che identifica il fatto che il weaving sarà eseguito senza movimento programmato.
Le tabelle lette sono le stesse usate per il weaving con movimento programmato. In
questo modo, se nello stesso programma PLD2 si desidera eseguire weaving con e
senza movimento programmato, si possono utilizzare le stesse informazioni.

10.6.3 Parametri
I parametri utilizzati appartengono allo stesso insieme introdotto nel par. 10.3 Parametri
del weaving a pag. 130.
Esistono però alcune caratteristiche che non hanno senso per questa tipologia: ad
esempio, non si può scegliere la modalità 1 o 4 che comporta una forma d'onda in
funzione della lunghezza d'onda stessa, dato che l'arm non esegue alcun movimento
programmato.
La direzione di di pendolamento è, per default, quella corrispondente alla direzione X

pr-0-0-gpr_09.fm
140 08/1112
Movimento con Weaving (prestazione opzionale)

della torcia. Qualora sia necessario pendolare in una direzione diversa, è possibile
utilizzare la variabile $WV_TBL[n].WV_DIRECTION_ANGLE che rappresenta un
angolo di rotazione della torcia stessa intorno al vettore Z.

10.6.4 Esempio di uso del weaving in assenza di movimento


programmato
Per capire il funzionamento e l'uso di questa tipologia di weaving, viene proposto un
esempio: supponiamo che sia necessario che l'Arm 2 esegua weaving senza
movimento programmato, grazie alla presenza di un Arm 1 che movimenta il pezzo da
saldare, e che il tempo necessario per eseguire la saldatura corrisponda a 3 secondi.
Si noti che per eseguire la saldatura occorre conoscere il tempo necessario.

a. Definiamo una tabella (ad esempio la tabella 1)

$WEAVE_TBL[1].WV_LEFT_AMP := 5
$WEAVE_TBL[1].WV_RIGHT_AMP := 5
$WEAVE_TBL[1].WV_LEFT_DWL := 0
$WEAVE_TBL[1].WV_CNTR_DWL := 0
$WEAVE_TBL[1].WV_RIGHT_DWL := 0
$WEAVE_TBL[1].WV_SMOOTH := TRUE
$WEAVE_TBL[1].WV_TRV_SPD := 0.035
$WEAVE_TBL[1].WV_PLANE := 0
$WEAVE_TBL[1].WV_AMP_PER := 100

b. Impostiamo le seguenti caratteristiche:


• l'arm non deve pendolare,
• l’arm deve usare la modalità 0 in funzione della velocità trasversale,
• il pendolamento viene eseguito in cartesiano (WEAVE_TYPE_NOMOT := 0):

$CRNT_DATA[2].WEAVE_NUM_NOMOT := 0
$CRNT_DATA[2].WEAVE_MODALITY_NOMOT := 0
$CRNT_DATA[2].WEAVE_TYPE_NOMOT := 0

c. Definiamo le velocità

$SPD_OPT := SPD_LIN
$LIN_SPD := 0.050000001

d. Con un movimento, ci portiamo nella posizione in cui l'Arm in questione (Arm 2)


debba saldare

MOVE LINEAR TO p1

e. Ordiniamo di pendolare intorno al punto p1 per il tempo previsto (3 secondi).

$CRNT_DATA[2].WEAVE_NUM_NOMOT := 1
DELAY 3000
$CRNT_DATA[2].WEAVE_NUM_NOMOT := 0

In questo modo, l'istruzione $CRNT_DATA[2].WEAVE_NUM_NOMOT := 0


disabilita il pendolamento dopo 3 secondi e così l'Arm può proseguire il suo
normale lavoro.

pr-0-0-gpr_09.fm
08/1112 141
Movimento con Weaving (prestazione opzionale)

ATTENZIONE - in caso di HOLD il pendolamento viene arrestato e disattivato: per


riprendere a pendolare occorre riabilitare la prestazione.

10.7 Weaving su sistemi multiarm


Per permettere la programmazione di forme d’onda diverse, su arm che condividono lo
stesso programma in un sistema multi-arm, $WEAVE_NUM, $WEAVE_MODALITY e
$WEAVE_TYPE sono ora campi della variabile $PROG_ARM_DATA[narm].
Ciò significa che queste variabili sono locali per programma (così come in precedenza),
ed anche per arm.
Ove non vi sia ambiguità, la radice $PROG_ARM_DATA[narm] può essere omessa.
La modifica non causa alcuna incompatibilità su i sistemi con singolo arm.
Sui sistemi multiarm si potrà impostare, ad esempio:
– $WEAVE_NUM := 1 -- setta in maniera modale il numero di tabella di weaving per
l’arm di default del programma;
– $PROG_ARM_DATA[2].WEAVE_NUM := 2 -- setta in maniera modale il numero
di tabella di weaving per l’arm 2;
– MOVE TO p1 WITH $WEAVE_NUM=3 SYNCMOVE ARM[2] TO p2 WITH
$WEAVE_NUM = 4 -- setta in maniera nodale diverse tabelle di weaving sui 2 arm.

ATTENZIONE - C’è una sola incompatibilità con le versioni precedenti: se è stato


scritto
– $WEAVE_NUM := 1
– MOVE TO p1 -- è l’arm di default, quindi il weaving si attiva
– $WEAVE_NUM := 2
– MOVE ARM[2] TO p2 -- nella versione attuale l’ARM 2 non esegue il weaving
perchè $WEAVE_NUM è stata settata per il $PROG_ARM cioè l’ARM 1.

pr-0-0-gpr_09.fm
142 08/1112
Path Governor (prestazione opzionale)

11. PATH GOVERNOR (PRESTAZIONE


OPZIONALE)

Path Governor
Il codice dell’opzione è CR17926211.

Questa funzionalità deve essere utilizzata quando si desidera prioritariamente


ottenere il MASSIMO DELL’ACCURATEZZA.
Nel caso in cui, invece, si desideri prioritariamente ottenere il MASSIMO DELLA
VELOCITÀ del robot, occorre utilizzare la funzionalità di SmartMove (prestazione
opzionale)

11.1 Introduzione
Il Path Governor è una opzione software che permette di ottenere dei movimenti
cartesiani, circolari e/o lineari, estremamente accurati, riducendo l’errore commesso
in traiettoria.
Esso è applicabile a qualsiasi tipo di macchina, in quanto si basa sul comportamento
REALE del robot stesso. Può essere eseguito per tutte le MOVE o, a scelta, solo per
alcune di esse.

Importante: la maggiore accuratezza di traiettoria viene ottenuta accettando


prestazioni inferiori in termini di velocità, in quanto l'abilitazione del Path
Governor comporta un aumento del tempo ciclo, se
$PGOV_MAX_SPD_REDUCTION è diversa da zero.
Pertanto, è compito dell’utente, a seconda dell'applicazione che vuol eseguire,
trovare un compromesso tra la riduzione di velocità cartesiana e l'aumento del
tempo ciclo.

– Abilitazione del Path Governor


– Disabilitazione del Path Governor

11.2 Abilitazione del Path Governor


L’utente può abilitare l’utilizzo dell’algoritmo di Path Governor, con una semplice
assegnazione PDL2:
$SPD_OPT:=SPD_PGOV

Il Path Governor non è abilitabile nello stato Programmazione.

Abilitato il Path Governor, è necessario che l’utente imposti le seguenti variabili


predefinite:

hs-0-0-mot_05.fm
08/1112 143
Path Governor (prestazione opzionale)

– $LIN_SPD - è il valore massimo di velocità con cui si vuole eseguire la traiettoria


– 3 variabili predefinite che indicano la precisione:
• $PGOV_ACCURACY - rappresenta il massimo errore cartesiano (espresso
in mm) ammesso nell'esecuzione della traiettoria cartesiana desiderata (con
una tolleranza di circa ±0,5mm)
• $PGOV_ORNT_PER - indica in che percentuale dovrà essere tenuto in
considerazione l'errore di assetto nella esecuzione della traiettoria. Tale
valore può essere impostato inizialmente a 0% e, successivamente, se
l'errore di assetto è ancora elevato, aumentarlo
• $PGOV_MAX_SPD_REDUCTION - questa variabile rappresenta la
percentuale di riduzione della velocità cartesiana che si accetta per ottenere
la precisione desiderata in traiettoria (limiti: 0..95).
Tali variabili predefinite possono essere impostate una volta per tutte all'inizio del
programma di movimento, o anche al di fuori, oppure possono avere differenti valori per
ogni MOVE cartesiana.
La variabile predefinita $PGOV_MAX_SPD_REDUCTION è quella che può avere una
enorme influenza nel raggiungimento o meno della precisione richiesta. Infatti,
impostandola ad un valore nullo non si otterrà alcun miglioramento nell'esecuzione della
traiettoria rispetto allo stesso movimento con Path Governor disabilitato.
Inoltre, se la riduzione di velocità ammessa non risulta adeguata alla precisione
richiesta nella $PGOV_ACCURACY, si vedrà un valore di velocità cartesiana che si
attesta ad un valore pari a:

e, di conseguenza, l'errore commesso in traiettoria potrebbe essere superiore a quanto


richiesto.
Si fa notare come, con il Path Governor abilitato, il profilo di velocità del target non
risulterà essere trapezoidale, salvo il caso di saturazione, ma presenterà un andamento
della velocità molto simile a quanto riportato in Fig. 11.1, dove si confronta il risultato
ottenuto durante una MOVE cartesiana con il Path Governor Abilitato e Disabilitato.

hs-0-0-mot_05.fm
144 08/1112
Path Governor (prestazione opzionale)

Fig. 11.1 - Profilo di Velocità Cartesiana con Path Governor


abilitato/disabilitato

Come si nota dalla Fig. 11.1, con il Path Governor non necessariamente si raggiunge il
valore massimo di velocità impostat, ma si ha una modulazione della velocità durante il
movimento in funzione del'errore cartesiano che si sta commettendo.

11.3 Disabilitazione del Path Governor


Per disabilitare il Path Governor, l’utente può agire in due modi:
– assegnare alla variabile predefinita $SPD_OPT un valore diverso da SPD_PGOV,
oppure
– assegnare valore nullo (0) alla variabile predefinita
$PGOV_MAX_SPD_REDUCTION.

hs-0-0-mot_05.fm
08/1112 145
SmartMove (prestazione opzionale)

12. SMARTMOVE
(PRESTAZIONE OPZIONALE)

SmartMove
Il codice dell’opzione è CR17926210.

Questa funzionalità deve essere utilizzata quando si desidera prioritariamente


ottenere il TEMPO CICLO MINIMO del robot.
Nel caso in cui, invece, si desideri prioritariamente ottenere il MASSIMO
DELL’ACCURATEZZA, occorre utilizzare la funzionalità di Path Governor
(prestazione opzionale)

– Descrizione
– Jerk Limitation
– Movimenti Cartesiani

12.1 Descrizione
È un algoritmo abilitabile come opzione software e consente di ottimizzare il tempo di
esecuzione di movimenti giunti e/o cartesiano. L’attivazione dell’opzione
SmartMove, comporta l’automatica esecuzione di tutti i movimenti giunti con tale
algoritmo. Al contrario, per l’esecuzione dei movimenti cartesiani con SmartMove,
vedere il par. 12.3 Movimenti Cartesiani a pag. 147.
Attraverso il modello dinamico del robot su tutti e 6 gli assi, che consente di determinare
inerzie, attriti, coppie centrifughe e di coriolis in funzione della postura del robot e del
carico trasportato, viene pianificato il moto del robot nello spazio giunti sfruttando al
massimo le caratteristiche di coppia e velocità messe a disposizione dagli attuatori che
movimentano i giunti, per avere almeno un asse alla massima coppia.
Al fine di ottimizzare i risultati dell'algoritmo ed evitare delle eccessive richieste di coppia
agli assi in movimento, è fondamentale dichiarare correttamente i dati del carico,
possibilmente utilizzando la procedura di Autodeterminazione del carico (prestazione
opzionale).
La tolleranza tra la corrente predetta dal modello dinamico e la corrente reale di ogni
singolo asse è configurabile attraverso le variabili di sistema
$ARM_DATA[num_arm].SM4_SAT_SCALE[num_axis].

Si sconsiglia la riduzione di tali tolleranze, poichè direttamente legate allo stress


trasmesso dai riduttori.

In Fig. 12.1 è mostrata una comparazione tra due profili di velocità senza e con
algoritmo SmartMove.

hs-0-0-mot_06.fm
146 08/1112
SmartMove (prestazione opzionale)

Fig. 12.1 - SmartMove - Comparazione

Spd - Velocità (Speed)


Tr - Riduzione del tempo (Time Reduction)

12.2 Jerk Limitation


È un algoritmo che consente di limitare le sovra-sollecitazioni dinamiche evitando di
eseguire movimenti, soprattutto movimenti brevi, con variazioni di accelerazione tali da
limitare le oscillazioni ai giunti.
La limitazione del Jerk e' integrata all'interno dello SmartMove e gestisce in modo
automatico il valore di Jerk da utilizzare per ciascun movimento.
Tuttavia, se, per la particolare applicazione da eseguire, i movimenti dovessero risultare
troppo sollecitanti o, al contrario, si prediligesse una riduzione del tempo ciclo a scapito
delle sollecitazioni, sarebbe possibile chiedere a COMAU la modifica della limitazione
del Jerk in accordo con le proprie esigenze.

12.3 Movimenti Cartesiani


A differenza dei movimenti giunti (MOVE JOINT), per l’esecuzione di movimenti
cartesiani (LINEAR o CIRCULAR) è necessario impostare il seguente valore di
$SPD_OPT:

$SPD_OPT := SPD_SM4C

SmartMove provvederà a determinare in automatico i valori massimi di accelerazione e


velocità al TCP a seconda del carico dichiarato, della zona operativa in cui si opera e
della configurazione assi.

hs-0-0-mot_06.fm
08/1112 147
Algoritmo di Modulazione del Flusso (flow modulate)

13. ALGORITMO DI
MODULAZIONE DEL FLUSSO
(FLOW MODULATE)
Questa prestazione, utilizzata in applicazioni quali la spalmatura (Cosmetic Sealing) e
l’incollaggio (Glueing), consente di modulare il flusso di materiale da erogare durante la
lavorazione sul pezzo in funzione della velocità del TCP (Tool Center Point).
Il dispositivo di erogazione, in funzione della tensione impostata, eroga un certo
materiale.
La macchina erogatrice del materiale definisce il valore massimo di tensione che può
gestire.
La tensione da erogare viene di volta in volta passata dal C5G tramite una variabile
predefinita $FMO o $AOUT. Il valore massimo consentito è 65535.
Se, ad esempio, il valore massimo di tensione erogabile è di 10 Volt e la $FMO o $AOUT
è impostata a 65535 (massimo valore per le $FMO o $AOUT), questo significa che la
macchina applicherà la massima tensione (10 Volt ) per erogare il materiale.
E’ necessario procedere all’impostazione di una serie di parametri che consentono di
definire il funzionamento della modulazione.
Tali parametri sono mantenuti nella variabile predefinita $FLOW_TBL (array di 2
elementi), i cui valori sono impostati dai parametri di movimento, con i seguenti campi:
– $FW_ARM (integer): arm al quale questo algoritmo viene applicato.
– $FW_AXIS (integer): asse al quale questo algoritmo viene applicato; da
specificare solo nel caso in cui $FW_VAR sia impostato a 2.
– $FW_CNVRSN (real): fattore di conversione da applicare per i calcolo del flusso
da erogare.
– Questo valore di conversione può essere modificato durante il funzionamento
dell’algoritmo stesso.
– $FW_VAR (integer): INTEGER. Tipo di variabile su cui operare. Se impostata a 1
l’algoritmo di modulazione del flusso viene applicato a $ARM_VEL /cosmetic
sealing); se impostata a 2 l’algoritmo di modulazione del flusso viene applicato a
$RAD_VEL (glueing).
– $FW_SPD_LIM (array di 2 real): indica i limiti di velocità minima e massima oltre
i quali l’algoritmo di modulazione del flusso applicherà il limite più vicino.
– $FW_FLOW_LIM (array di 2 integer): indica i limiti sul flusso minimo e massimo
oltre i quali l’algoritmo di modulazione oltre i quali l’algoritmo applicherà il limite più
vicino.
– $FW_ENBL (boolean): indicatore sullo stato dell’algoritmo, abilitato o disabilitato.
– $FW_START (boolean): indica l’intervallo di tempo (in millisecondi) tra
l’acquisizione del campione di velocità (immediatamente successivo alla chiamata
alla FLOW_MOD_ON) e la scrittura dei dati sulla porta analogica indicata nella
chiamata alla FLOW_MOD_ON.
La formula che determina il calcolo del fattore di conversione si basa sulla velocità

pr-0-0-gpr_12.fm
148 08/1012
Algoritmo di Modulazione del Flusso (flow modulate)

massima a cui si intende far andare il robot e sulla tensione massima applicabile
espressa in bit. Tali valori vengono definiti in fase di configurazione iniziale impostando
i campi della $FLOW_TBL.

Esempio:

La tensione, espressa in bit, è determinata dalla formula:

Il valore della tensione viene letto dalla macchina che eroga il materiale su una porta
intera, generalmente una $FMO o $AOUT, definita in fase di abilitazione dell’algoritmo;
per abilitare l’algoritmo si utilizza la built-in routine FLOW_MOD_ON, la cui chiamata è:
FLOW_MOD_ON (<porta_analogica>, <indice_tabella_flusso>)
dove:
– <porta> deve essere di tipo INTEGER. Ad esempio: $FMO o $AOUT.
– <indice_tabella_flusso> deve essere di tipo INTEGER. E’ l’indice della
$FLOW_TBL.Valori possibili: 1 o 2.
Esiste, ovviamente, anche una built-in per la disabilitazione, la cui chiamata è:
FLOW_MOD_OFF (<indice_tabella_flusso>)
– <indice_tabella_flusso> INTEGER. E’ l’indice della $FLOW_TBL. Valori possibili:
1 o 2.
Il programma che chiama la FLOW_MOD_ON su un certo indice deve essere lo stesso
che chiama la FLOW_MOD_OFF su quell’indice.
Alla disattivazione del programma la tabella viene rilasciata automaticamente
(FLOW_MOD_OFF implicito).

pr-0-0-gpr_12.fm
08/1012 149
Algoritmo di Modulazione del Flusso (flow modulate)

Fig. 13.1 - Tensione da erogare

1. Flusso da erogare
2. Fattore di conversione
y Tensione (V) che la macchina erogatrice deve erogare (scritta nella porta analogica passata
alla FLOW_MOD_ON)
x Velocità del TCP ($ARM_VEL o $RAD_VEL)

pr-0-0-gpr_12.fm
150 08/1012
Presupposti per la programmazione dei robot SMART

14. PRESUPPOSTI PER LA


PROGRAMMAZIONE DEI ROBOT
SMART

14.1 Introduzione
Questo capitolo fornisce ulteriori informazioni sull’uso dei robot COMAU. Essi sono
classificabili come con polso sferico o con polso non sferico.
I robot COMAU ai quali si riferisce la seguente trattazione, sono elencati nella seguente
Tab. 14.1 - Modelli robot trattati:

Tab. 14.1 - Modelli robot trattati


Robot Polso sferico Polso non sferico
SMART NJ1 X
SMART NJ2 X
SMART NJ3 X
SMART NJ4 X
SMART NS X
SMART NM X X

Vengono fornite informazioni riguardanti i seguenti argomenti:


– Glossario
– Algoritmo di Compensazione con Modello Dinamico
– Algoritmo di Compensazione Cinematica (prestazione opzionale)
– Movimento attraverso le singolarità dell’asse 5
– Robot senza compensazione (effetti della cinematica inversa)
– Regole di programmazione per i robot con polso non sferico (SMART NJ4)
Viene inoltre fornito l’elenco dei messaggi di errore ed il loro significato. Sono anche
forniti i legami tra i messaggi di errore dell’Unità di Controllo C5G ed i messaggi RRS
(Robot Realistic Simulation) che vengono emessi da Robcad durante la simulazione di
un programma. Ciò può rivelarsi utile poichè le specifiche di RRS non contengono
sufficienti spiegazioni per descrivere tutte le situazioni possibili.

pr-0-0-gpr_05.fm
03/0111 151
Presupposti per la programmazione dei robot SMART

14.2 Glossario
TCP - Tool Center Point. E’ il punto all’estremità del tool ed è geometricamente descritto
dalla variabile di sistema $TOOL o dalla tabella dei Tool in ambiente DATA. Può essere
locale o remoto. Per i robot SMART NJ4 la posizione che il TCP ha rispetto agli assi,
causa alcune limitazioni all’area operativa.
WCP - Wrist Center Point. Per i robot a polso sferico il WCP si trova all’intersezione dei
giunti 5 e 6; per SMART NJ4 (polso non sferico) non esiste un vero e proprio WCP,
comunque con tale termine si intende l’intersezione dei giunti 4 e 5.

1. Offset del polso

RRS - Robot Realistic Simulation. E’ un protocollo che definisce alcune regole da


seguire per l’implementazione di moduli software che permettano ad un simulatore CAD
per robotica (ad es. Robcad) di muovere il robot utilizzando lo stesso algoritmo usato
dall’Unità di Controllo. Tali moduli software sono chiamati moduli RCS. Vengono forniti
da COMAU ed integrati nei simulatori.
Posizione nominale- Questo termine si riferisce a macchine con Algoritmo di
compensazione cinematica. La posizione nominale è il punto verso il quale il robot deve
muovere il suo TCP. Generalmente deriva da una simulazione CAD dove il modello del
robot è teorico, senza deformazioni meccaniche dovute a carico, errori di calibrazione,
ecc.
Rappresentazione interna della posizione del robot - Questo termine si riferisce a
macchine con Algoritmo di compensazione cinematica. La rappresentazione interna
della posizione del robot è il punto determinato dalla lettura dei trasduttori di posizione.
E’ anche la posizione verso la quale il robot viene mosso, per compensare le differenze
tra la macchina reale ed il suo modello teorico.
Punto Cartesiano o POSITION - E’ una variabile che descrive il target di posizione
(posizione finale) per un’istruzione MOVE, in un riferimento Cartesiano. Per il software
dell’Unità di Controllo, ogni POSITION ha tre componenti di posizione nello spazio (X,
Y, Z), tre angoli di orientamento ed una stringa di configurazione.
Posizione giunti o JOINTPOS - E’ una variabile che descrive il target di posizione per
un’istruzione MOVE, riportando il valore di ogni asse del robot per quella posizione.

pr-0-0-gpr_05.fm
152 03/0111
Presupposti per la programmazione dei robot SMART

14.3 Algoritmo di Compensazione con Modello


Dinamico
Questo algoritmo consente di migliorare la precisione delle meccaniche, nel movimento
e nel posizionamento con la conseguente riduzione del tempo ciclo.
L’algoritmo funziona continuamente sia durante il movimento del robot sia durante le
fermate, indipendentemente dal tipo di traiettoria o dalla durata della sosta: l’unica
condizione è che l’arm sia in DRIVE ON.
La modellizzazione delle caratteristiche dinamiche del robot richiede un’accurata
definizione dell’attrezzo che viene montato alla flangia.
La descrizione dell’attrezzo può essere effettuata mediante tre variabili di sistema che
si aggiungono a $TOOL. Esse sono $TOOL_MASS, che esprime la massa dell’attrezzo,
$TOOL_CNTR, che rappresenta il centro di massa dell’attrezzo e $TOOL_INERTIA.
Si noti che l’accuratezza nell’assegnazione delle caratteristiche dell’attrezzo condiziona
fortemente le prestazioni della macchina.
Inoltre, se il robot viene utilizzato per trasportare componenti, è importante che la
dichiarazione delle caratteristiche dinamiche comprenda il contributo di massa del
pezzo oltre che dell’attrezzo di presa; questo vale anche per la definizione delle
coordinate del centro di massa.

14.4 Algoritmo di Compensazione Cinematica


(prestazione opzionale)
Questo algoritmo migliora la precisione di posizionamento del robot all’interno dell’area
di lavoro.
Il software compensa gli errori cinematici, dovuti all’imprecisione delle lunghezze delle
leve del robot o al non corretto accoppiamento degli assi (ortogonalità degli assi), e gli
errori di flessione causati dal peso dei corpi meccanici.
Per renderlo operativo, è necessario procedere all’identificazione del modello
cinematico reale di ogni singolo robot in modo da disporre del file di compensazione
della macchina.

14.5 Movimento attraverso le singolarità


dell’asse 5
Nel presente paragrafo sono descritti i seguenti argomenti:
– Uso della modalità WRIST_JNT
– Movimento manuale (tasti di jog)

14.5.1 Uso della modalità WRIST_JNT


In qualsiasi struttura meccanica di robot ci sono posizioni particolari nelle quali le
prestazioni della macchina sono ridotte: tali posizioni sono chiamate singolarità.
Normalmente, quando il robot si avvicina ad una singolarità, durante il movimento
lineare o circolare, accade che la velocità sia ridotta o la traiettoria sia modificata rispetto
a quella prevista. Ciò è vero per qualsiasi robot, indipendentemente dal costruttore.
I robot antropomorfi, come quelli contenuti in Tab. 14.1 - Modelli robot trattati hanno tre

pr-0-0-gpr_05.fm
03/0111 153
Presupposti per la programmazione dei robot SMART

singolarità. La più evidente si verifica quando l’asse 5 è a zero gradi. Quando ciò
accade, l’asse 4 è allineato con l’asse 6. Ciò produce diversi comportamenti, a seconda
della forma del polso. Ulteriori informazioni sono descritte nel par. 14.6.1.4 Singolarità
dell’asse 5 a pag. 159 per robot a polso non sferico e nel par. 14.6.2.1 Singolarità
dell’asse 5 a pag. 165 per robot a polso sferico.
Tuttavia, il software dell’Unità di Controllo COMAU C5G permette di ottenere alte
prestazioni anche muovendo il robot attraverso la singolarità dell’asse 5 (singolarità del
polso).
E’ possibile abilitare questo tipo di evoluzione settando la variabile di sistema
$ORNT_TYPE al valore WRIST_JNT ($ORNT_TYPE:=WRIST_JNT).
Contemporaneamente, per garantire che i giunti del polso percorrano la strada minima
durante il movimento, è necessario impostare la variabile $JNT_MTURN al valore
FALSE.
Si consiglia di abilitare questa modalità solo con istruzioni di movimento che debbano
passare attraverso la singolarità, poichè la modalità di evoluzione di default,
RS_WORLD, generalmente permette di ottenere il miglior comportamento, dal punto
di vista dell’applicazione. La modalità RS_WORLD permette di mantenere costante
l’orientamento, se necessario, o di modificarlo mantenendo il tool su un piano.
L’evoluzione dell’orientamento in modalità RS_WORLD è mostrata nella figura
sottostante. Durante un singolo movimento lineare, il tool è sempre adagiato su un
piano.

1. Vista laterale 2. Vista frontale

Tuttavia, dato che l’evoluzione di default RS_WORLD non permette di muovere il robot
attraverso la zona di singolarità, la modalità WRIST_JNT permette di ottenere il miglior
comportamento in questo caso. L’effetto è che la velocità si mantiene alta e
l’orientamento del tool si allontana leggermente dal piano.
L’evoluzione può anche essere molto grande, se il punto di partenza e il punto di arrivo
sono molto lontani dalla zona di singolarità. E’ possibile che ciò accada, poichè
l’evoluzione WRIST_JNT implementa un algoritmo che mantiene il TCP esattamente
sulla traiettoria Cartesiana, mentre gli assi polso, dal punto iniziale al punto finale,
evolvono in modo giunti .
L’effetto della modalità WRIST_JNT è generalmente buono dal punto di vista
dell’applicazione. In alcuni casi particolari sarebbe necessario seguire alcune ulteriori
regole di programmazione spiegate nel par. 14.7 Regole di programmazione per i robot
con polso non sferico (SMART NJ4) a pag. 165.
L’unica limitazione della modalità WRIST_JNT è che non è permesso il FLY (MOVEFLY

pr-0-0-gpr_05.fm
154 03/0111
Presupposti per la programmazione dei robot SMART

TO ...) tra due movimenti con modalità di evoluzione diversa. Quindi, se una MOVE ha
l’evoluzione di default RS_WORLD e la successiva è in WRIST_JNT, è necessario o
rimuovere il FLY o settare a WRIST_JNT anche la modalità di evoluzione della prima
MOVE.

1. Traiettorie lineari nell’intorno della singolarità.


Le linee curve sono le traiettorie della flangia, mentre il TCP muove lungo la traiettoria prevista
2. Posizione esatta della singolarità

3. Comportamento della modalità WRIST_JOINT. Avvicinandosi sempre più alla singolarità,


la velocità si mantiene alta mentre l’orientamento cambia leggermente

14.5.1.1 Uso della modalità WRIST_JNT per muovere attraverso le


singolarità
Come già spiegato, l’uso della modalità di evoluzione WRIST_JNT è il metodo giusto
per risolvere problemi di singolarità. Questo metodo è utile soprattutto per muovere
attraverso le zone di singolarità, poichè permette all’asse 5 di raggiungere la posizione
di zero mentre il TCP segue la traiettoria Cartesiana prevista.
Segue un esempio relativo al modello SMART NJ4. In modalità WRIST_JNT è possibile
eseguire traiettorie verticali intorno al punto di singolarità. Naturalmente tutti i punti
devono essere al di fuori della zona di singolarità (vd. par. 14.6.1.4 Singolarità dell’asse
5 a pag. 159) ma la traiettoria può attraversarla.
Se il programma è scritto correttamente, l’asse 5 viene mosso da un valore negativo ad
un valore positivo (o viceversa) con l’offset del polso sempre mantenuto sullo stesso
lato. Come già spiegato precedentemente, l’orientamento cambia leggermente durante
il movimento. Questo è fatto automaticamente dal sistema, senza alcun bisogno di
modificare i punti.

pr-0-0-gpr_05.fm
03/0111 155
Presupposti per la programmazione dei robot SMART

1. Livello del punto di singolarità

La figura che segue mostra un esempio del massimo errore angolare applicato
all’orientamento quando si entra nelle varie zone circolari intorno al punto di singolarità.
Questi dati sono stati calcolati con un tool ed esattamente allineato con l’asse 6. Sono
state eseguite molte traiettorie verticali attorno alla posizione di calibrazione del modello
SMART NJ4, programmando opportunamente i punti e muovendo in modalità
WRIST_JNT attraverso la zona di singolarità.

1. Posizione esatta della singolarità

14.5.2 Movimento manuale (tasti di jog)


Anche durante il movimento manuale (mediante l’uso dei tasti di jog) è possibile evitare
il problema dovuto alla singolarità dell’asse 5, usando la modalità di evoluzione
WRIST_JNT.

pr-0-0-gpr_05.fm
156 03/0111
Presupposti per la programmazione dei robot SMART

Le modalità standard per il movimento manuale sono 4:


– TOOL
– UFRAME
– BASE
– JOINT
Le prime tre sono per i movimenti Cartesiani, rispetto al riferimento tool, al riferimento
user e al riferimento world; l’ultima permette di muovere i singoli giunti del robot. Queste
modalità sono normalmente le migliori dal punto di vista delle applicazioni, ma non
permettono di muovere il robot in Cartesiano quando l’asse 5 è nella zona di singolarità.
Per fare ciò è necessario abilitare la modalità di evoluzione WRIST_JNT anche per il
movimento manuale.
E’ possibile settare l’evoluzione WRIST_JNT per il movimento manuale in Cartesiano,
dalla Pagina di Motion, sottopagina Basic, campo COORD del Terminale di
Programmazione. Nella barra di stato del Terminale di Programmazione compariranno
le seguenti parole: Wr-Base, Wr-Tool, Wr-Ufrm, Joint.
La modalità di evoluzione WRIST_JNT permette di muover il TCP lungo una linea retta
senza muovere gli assi polso, usando i primi tre tasti di jog +1X/-1X, +2Y/-2Y, +3Z/-3Z.
D’altronde è possibile muovere un singolo asse polso usando i tasti di jog +4/-4, +5/-5,
+6/-6, mantenendo fermo il TCP. Queste modalità sono utili per muovere il robot
attraverso le singolarità poichè permettono movimenti manuali in Cartesiano anche se
l’asse 5 è esattamente al valore 0.

14.6 Robot senza compensazione (effetti della


cinematica inversa)
Nel presente paragrafo sono descritti i seguenti argomenti:
– Conversione inversa per i robot SMART NJ4 (polso non sferico)
– Conversione inversa per i modelli SMART NJ (solo polso sferico)

14.6.1 Conversione inversa per i robot SMART NJ4 (polso non


sferico)
I robot SMART NJ4 hanno un particolare polso non sferico con un offset tra l’asse 4 e
l’asse 6. Per calcolare il valore degli assi per muovere il robot verso una specifica
posizione Cartesiana (conversione cinematica inversa), ci si serve di un algoritmo
iterativo che usa il WCP e il TCP del robot rispetto alla base.
Nei paragrafi successivi sono descritti i corrispondenti effetti:
– Approssimazione nell’orientamento
– Movimento verso una POSITION appresa
– Movimento in fly tra MOVE LINEAR/CIRCULAR e MOVE JOINT
– Singolarità dell’asse 5
– Posizione Cartesiana fuori limite
– TCP nella zona posteriore del robot
– TCP dietro l’asse 2
– WCP in prossimità dell’asse 1

pr-0-0-gpr_05.fm
03/0111 157
Presupposti per la programmazione dei robot SMART

14.6.1.1 Approssimazione nell’orientamento


La posizione Cartesiana raggiunta dal TCP è sempre corretta in X, Y e Z. Ciò significa
che le coordinate X, Y e Z della posizione finale corrispondono a quella appresa (salvo
qualche effetto dovuto alla compensazione). Al contrario, l’orientamento può essere
approssimato. Questo vuol dire che il robot raggiunge la posizione finale con gli angoli
di Eulero leggermente diversi da quelli originali. Questa differenza è solitamente minore
di 0.8 gradi, (potrebbe essere maggiore in prossimità del confine dell’area di lavoro).
Questa approssimazione interessa tutti gli assi e può causare l’emissione di alcuni
messaggi di errore inattesi, poichè può accadere che alcuni assi arrivino più vicini al
limite rispetto ai giunti appresi. Per questa ragione, nei prossimi paragrafi vengono
consigliati range di valori più ampi. Essi sono chiamati range di sicurezza.
L’approssimazione non interessa le posizioni memorizzate come JOINTPOS.

14.6.1.2 Movimento verso una POSITION appresa


L’approssimazione nell’orientamento può causare i seguenti effetti. Quando si esegue
una MOVE verso una posizione Cartesiana, la flangia (non il TCP) può muoversi di
alcuni millimetri nell’intorno della sua posizione. La differenza è normalmente minore di
10 mm, con un tool lungo 1500 mm.
Vedere figura seguente.

1a - 1b: diversa posizione della flangia, a causa dell’approssimazione dell’orientamento


2a - 2b. approssimazione nell’orientamento

14.6.1.3 Movimento in fly tra MOVE LINEAR/CIRCULAR e MOVE JOINT


L’approssimazione nell’orientamento causa piccole differenze tra il valore in giunti,
previsto per la fine del movimento, ed il valore reale.
Per questa ragione si consiglia di non usare il fly tra una MOVE lineare/circolare e una

pr-0-0-gpr_05.fm
158 03/0111
Presupposti per la programmazione dei robot SMART

MOVE in giunti, o viceversa.

14.6.1.4 Singolarità dell’asse 5


A causa del polso non sferico, la zona di singolarità per il robot SMART NJ4 è maggiore
della posizione di 0 gradi dell’asse 5. La conversione può fornire una soluzione solo se
l’asse 5, intorno al valore di 0, è fuori di un range di ±6° e multiplo di 180°. Se, durante
la conversione, l’asse 5 entra in tale zona, viene visualizzato un messaggio di errore.
A causa dell’approssimazione nell’orientamento, il messaggio di errore può comparire
anche su una POSITION appresa con l’asse 5 leggermente fuori dalla soglia di ±6°.
Poichè normalmente l’approssimazione è minore di 0.8°, un range di sicurezza è ±7°.

[ -6; +6 ]
Ranges proibiti [ -174; -186 ]
[ +174; +186 ]
[ -7; +7 ]
Ranges di sicurezza [ -173; -187 ]
[ +173; +187 ]

Fig. 14.1 - Zona proibita per robot SMART NJ4

La zona proibita è ±6° intorno a 0° e 180°

Tab. 14.2 - Zona di singolarità polso


Azioni Permesse Proibite Note
REC JOINTPOS dentro la zona di singolarità E’ possibile memorizzare una
X
Posizione Giunti (JOINTPOS).
REC POSITION/XTNDPOS dentro la zona di NON è possibile memorizzare una
singolarità X Posizione Cartesiana (POSITION or
XTNDPOS).
MOVE JOINT attraverso la zona di singolarità X
MOVE LINEAR/CIRCULAR attraverso la zona E’ possibile muovere in Cartesiano
di singolarità, in modalità standard X solo con la modalità WRIST_JNT
(RS_WORLD) (vd. par. 14.5 Movimento attraverso
MOVE LINEAR/CIRCULAR attraverso la zona le singolarità dell’asse 5 a pag. 153).
di singolarità in modalità WRIST_JNT In modalità standard (RS_WORLD)
X non sono permessi movimenti con
MOVE LINEAR/CIRCULAR.

pr-0-0-gpr_05.fm
03/0111 159
Presupposti per la programmazione dei robot SMART

Tab. 14.2 - Zona di singolarità polso (Continua)


Azioni Permesse Proibite Note
Jog JOINT dentro la zona di singolarità X E’ possibile muovere manualmente il
robot in Cartesiano solo se sono
Jog BASE, UFRM, TOOL dentro la zona di
X abilitate le modalità WRIST_JNT
singolarità
(WR-BASE, WR-UFRM, WR-TOOL
Jog WR-BASE, WR-UFRM, WR-TOOL dentro (vd. par. 14.5.2 Movimento manuale
la zona di singolarità (tasti di jog) a pag. 156). Il
X movimento manuale nella zona di
singolarità è vietato con le modalità
standard (BASE, UFRAME, TOOL).
MOVE JOINT TO JOINTPOS dentro la zona di
X
singolarità
MOVE LINEAR TO JOINTPOS dentro la zona
X
di singolarità Se la destinazione è dentro la zona
MOVE JOINT TO POSITION/XTNDPOS dentro di singolarità, non è possibile
X
la zona di singolarità muovere nè con evoluzione standard
MOVE LINEAR TO POSITION/XTNDPOS nè con evoluzione WRIST_JNT.
X
dentro la zona di singolarità

Messaggi di errore
– 36996 (0x9084) "Asse polso a posizione indefinita" prima che parta la MOVE.
– 62479 (0xf40f) "Soluzione del polso indefinita" durante il movimento in una zona proibita.
– 40014 (0x9c4e) "Asse polso in posizione indefinita" durante l’apprendimento/modifica di un
punto.
– RCS MODULE - Stato restituito: -59 "La posizione specificata è in singolarità".

14.6.1.5 Posizione Cartesiana fuori limite


A causa del particolare polso del modello SMART NJ4, il confine esterno dell’area di
lavoro Cartesiana è leggermente ridotto rispetto alle macchine con polso sferico.
Questa riduzione dipende dalla direzione dell’offset del polso: se l’offset del polso è
verso il basso non ci sono limitazioni;

Queste zone possono essere raggiunte in movimento giunti; la limitazione si


riferisce al solo movimento Cartesiano.

Tab. 14.3 - Zone al limite dell’area operativa


Azioni Permesse Proibite Note
REC JOINTPOS dentro la zona proibita E’ possibile memorizzare una Posizione
X
Giunti (JOINTPOS).
REC POSITION/XTNDPOS dentro la NON è possibile memorizzare una
zona proibita X Posizione Cartesiana (POSITION or
XTNDPOS).
MOVE JOINT attraverso la zona proibita X E’ permesso muovere attraverso questa
MOVE LINEAR/CIRCULAR attraverso la zona, con qualsiasi tipo di movimento: è
zona proibita X sufficiente che il punto di arrivo sia al di
fuori della zona proibita.

pr-0-0-gpr_05.fm
160 03/0111
Presupposti per la programmazione dei robot SMART

Tab. 14.3 - Zone al limite dell’area operativa (Continua)


Azioni Permesse Proibite Note
Jog JNT dentro la zona proibita X
JOG BAS, USR, TOL dentro la zona E’ possibile muovere manualmente il
X
proibita robot (jog) in qualsiasi modalità di
JOG BWR, UWR, TWR dentro la zona evoluzione.
X
proibita
MOVE JOINT TO JOINTPOS dentro la
X
zona proibita
MOVE LINEAR TO JOINTPOS dentro la
X Se il punto di arrivo è dentro la zona
zona proibita
proibita, è possibile raggiungerlo solo se
MOVE JOINT TO POSITION/XTNDPOS è una JOINTPOS.
X
dentro la zona proibita
MOVE LINEAR TO POSITION/XTNDPOS
X
dentro la zona proibita

Messaggi di errore
– 36994 (0x9082) "Pos fuori dominio" prima che parta la MOVE.
– 62477 (0xf40d) "Posizione Cartesiana fuori limite" durante il movimento in una
zona proibita.
– 40012 (0x9c4c) "Pos fuori dominio" durante l’apprendimento/modifica di un punto.
– RCS MODULE - Stato restituito: -52 "Posizione Cartesiana fuori area di
lavoro".

14.6.1.6 TCP nella zona posteriore del robot


Ci sono alcune limitazioni nell’area di lavoro che non sono immediatamente visibili
all’utente. Esse dipendono dalla posizione del TCP rispetto agli assi del robot. Per
questo motivo sono legate alla reale dimensione del tool (locale o remoto).
C’è una zona proibita quando si tenta di muovere il TCP nella zona posteriore del robot,
rispetto all’asse 1. Nelle figure sottostanti tale zona è indicata in azzurro.
Nell’intorno di questa zona l’approssimazione nell’orientamento aumenta fino a qualche
grado.

pr-0-0-gpr_05.fm
03/0111 161
Presupposti per la programmazione dei robot SMART

La stessa situazione può anche accadere con tool remoto.

1. TCP remoto all’interno della zona proibita

Azioni Permesse Proibite Notes


REC JOINTPOS dentro la zona proibita E’ possibile memorizzare una
X
Posizione Giunti (JOINTPOS).
REC POSITION/XTNDPOS dentro la zona NON è possibile memorizzare
proibita X una Posizione Cartesiana
(POSITION or XTNDPOS).
MOVE JOINT attraverso la zona proibita X
MOVE LINEAR/CIRCULAR attraverso la zona E’ possibile muovere in
proibita con modalità di evoluzione standard X Cartesiano solo con la modalità
(RS_WORLD) WRIST_JNT (vd. par. 14.5
MOVE LINEAR/CIRCULAR attraverso la zona Movimento attraverso le
proibita con modalità di evoluzione singolarità dell’asse 5 a
WRIST_JNT pag. 153). In modalità standard
X (RS_WORLD) non sono
permessi movimenti con MOVE
LINEAR/CIRCULAR.

pr-0-0-gpr_05.fm
162 03/0111
Presupposti per la programmazione dei robot SMART

Azioni Permesse Proibite Notes


JOG JNT dentro la zona proibita X E’ possibile muovere
manualmente il robot in
JOG BAS, USR, TOL dentro la zona proibita X
Cartesiano solo se sono abilitate
JOG BWR, UWR, TWR dentro la zona le modalità WRIST_JNT (BWR,
proibita UWR, TWR (vd. par. 14.5.2
Movimento manuale (tasti di jog)
X a pag. 156). Il movimento
manuale nella zona di singolarità
è vietato con le modalità
standard (BAS, USR, TOL).
MOVE JOINT TO JOINTPOS dentro la zona
X
proibita
MOVE LINEAR TO JOINTPOS dentro la zona Se il punto di arrivo è dentro la
X
proibita zona proibita, è possibile
MOVE JOINT TO POSITION/XTNDPOS dentro raggiungerlo solo se è una
X JOINTPOS.
la zona proibita
MOVE LINEAR TO POSITION/XTNDPOS
X
dentro la zona proibita

Messaggi di errore
– 36995 (0x9083) "Asse 1 a posizione indefinita" prima che parta la MOVE.
– 62478 (0xf40e) "Asse 1 su posizione indefinita" durante un movimento nella zona proibita.
– 40013 (0x9c4d) "Asse 1 in posizione indefinita" durante l’apprendimento/modifica di un punto.
– RCS MODULE - Stato restituito: -52 "Posizione Cartesiana fuori area di lavoro".

14.6.1.7 TCP dietro l’asse 2


C’è una zona proibita quando si tenta di portare il TCP al di dietro di un piano contenente
l’asse 2. Avvicinandosi a questa zona, l’approssimazione nell’orientamento può
aumentare fino a qualche grado.
Questa situazione può accadere anche con tool remoto ($TOOL_RMT:=TRUE o MOVE
‘with $PAR’ con rtf(i,j)).

1. TCP all’interno della zona proibita 2. TCP remoto all’interno della zona proibita

pr-0-0-gpr_05.fm
03/0111 163
Presupposti per la programmazione dei robot SMART

Azioni Permesse Proibite Note


REC JOINTPOS dentro la zona proibita E’ possibile memorizzare una
X
Posizione Giunti (JOINTPOS).
REC POSITION/XTNDPOS dentro la zona NON è possibile memorizzare una
proibita X Posizione Cartesiana (POSITION
or XTNDPOS).
MOVE JOINT attraverso la zona proibita X
MOVE LINEAR/CIRCULARattraverso la zona E’ possibile muovere in
proibitacon modalità di evoluzione standard X Cartesiano solo con la modalità
(RS_WORLD) WRIST_JNT (vd. par. 14.5
MOVE LINEAR/CIRCULARattraverso la zona Movimento attraverso le
proibita con modalità di evoluzione singolarità dell’asse 5 a pag. 153).
WRIST_JNT In modalità standard
X (RS_WORLD) non sono permessi
movimenti con MOVE
LINEAR/CIRCULAR.
JOG JNT dentro la zona proibita X E’ possibile muovere
manualmente il robot in
JOG BAS, USR, TOL dentro la zona proibita X
Cartesiano solo se sono abilitate
JOG BWR, UWR, TWR dentro la zona le modalità WRIST_JNT (BWR,
proibita UWR, TWR (vd. par. 14.5.2
Movimento manuale (tasti di jog) a
X pag. 156). Il movimento manuale
nella zona di singolarità è vietato
con le modalità standard (BAS,
USR, TOL).
MOVE JOINT TO JOINTPOS dentro la zona
X
proibita
MOVE LINEAR TO JOINTPOS dentro la zona Se il punto di arrivo è dentro la
X
proibita zona proibita, è possibile
MOVE JOINT TO POSITION/XTNDPOSdentro raggiungerlo solo se è una
X JOINTPOS.
la zona proibita
MOVE LINEAR TO POSITION/XTNDPOS
X
dentro la zona proibita

Messaggi di errore
– 36994 (0x9082) "Pos fuori dominio" prima che parta la MOVE.
– 62477 (0xf40d) "Posizione Cartesiana fuori limite" durante un movimento nella
zona proibita.
– 40012 (0x9c4c) "Pos fuori dal dominio" durante l’apprendimento/modifica di un
punto.
– RCS MODULE - Stato restituito: -52 "Posizione Cartesiana fuori area di
lavoro".

14.6.1.8 WCP in prossimità dell’asse 1


C’è una zona proibita quando si tenta di portare il WCP all’interno di un cilindro intorno
all’asse 1. Il raggio di questo cilindro è di approssimativamente 200 mm.

pr-0-0-gpr_05.fm
164 03/0111
Presupposti per la programmazione dei robot SMART

Messaggi di errore
– 36995 (0x9083) "Asse 1 a posizione indefinita" prima che parta la MOVE.
– 62478 (0xf40e) "Asse 1 su posizione indefinita" durante un movimento nella zona
proibita.
– 40013 (0x9c4d) "Asse 1 in posizione indefinita" durante l’apprendimento/modifica
di un punto.
– RCS MODULE - Stato restituito: -52 "Posizione Cartesiana fuori area di
lavoro".

14.6.2 Conversione inversa per i modelli SMART NJ (solo polso


sferico)
I robot SMART NJ hanno polso sferico e ciò semplifica l’algoritmo di conversione
rispetto a quello per i robot SMART NJ4. La maggior parte delle limitazioni spiegate nel
precedente paragrafo par. 14.6.1 Conversione inversa per i robot SMART NJ4 (polso
non sferico) a pag. 157 non esistono per i robot con polso sferico. Ci sono solo alcune
limitazioni relative alla singolarità dell’asse 5 e quando il TCP è nei pressi dell’asse 1,
per le macchine shelf con polso sferico.
Seguono informazioni dettagliate sull’argomento Singolarità dell’asse 5.

14.6.2.1 Singolarità dell’asse 5


Non c’è una zona proibita quando l’asse 5 è prossimo a 0°, ma è comunque consigliabile
non eseguire movimenti attraverso la singolarità poichè in prossimità di questa zona agli
assi 4 e 6 è richiesto di accelerare e muovere molto velocemente. Durante un
movimento in Cartesiano nell’intorno di questa zona, la velocità del TCP viene ridotta.
L’uso della modalità WRIST_JNT (vd. par. 14.5 Movimento attraverso le singolarità
dell’asse 5 a pag. 153) è un buon metodo per muovere il robot attraverso la zona di
singolarità, quando le accelerazioni sono troppo alte o quando il comportamento del
robot non è adatto alla specifica applicazione.

14.7 Regole di programmazione per i robot con


polso non sferico (SMART NJ4)
Nel presente paragrafo sono descritte alcune regole di programmazione per aiutare
l’utente robot e il programmatore CAD ad usare correttamente i robot COMAU
(soprattutto i modelli SMART NJ4).
Seguono alcuni consigli riguardanti:
– Come stare fuori da una zona di singolarità
– Uso della modalità WRIST_JNT per muovere attraverso le singolarità

I robot SMART NJ4 sono stati progettati per integrare il cablaggio e per facilitare
la programmazione off-line. Per questo motivo la configurazione del polso è tale
per cui ci sono spazio e distanze necessari al passaggio di cavi pre-intrecciati e
guaine attraverso il polso stesso. Seguendo questo concetto, il robot è
assolutamente privo di cablaggio esterno sull’avambraccio, evitando così
comportamenti non prevedibili dei cavi, durante i movimenti nei pressi della
singolarità del polso, come invece accade con i robot convenzionali.

pr-0-0-gpr_05.fm
03/0111 165
Presupposti per la programmazione dei robot SMART

Lo svantaggio è che i robot SMART NJ4 hanno una zona di singolarità più ampia intorno
all’asse 5, rispetto ai robot con polso sferico (vd. par. 14.6.1.4 Singolarità dell’asse 5 a
pag. 159). I paragrafi successivi spiegano come sia possibile ottenere dei processi
applicativi stando fuori dalla zona di singolarità o muovendo attraverso essa in modalità
WRIST_JNT.

14.7.1 Come stare fuori da una zona di singolarità


L’ampiezza della zona di singolarità per i robot con polso non sferico (SMART NJ4) è
±6 gradi. Come è già stato spiegato nel par. 14.5 Movimento attraverso le singolarità
dell’asse 5 a pag. 153, è possibile muovere attraverso tale zona anche seguendo un
percorso Cartesiano, ma nella maggioranza dei casi è possibile stare fuori dalla
singolarità. Esistono tre metodi per ottenere quanto appena esposto:
– Modifica dell’orientamento nei punti lungo il percorso;
– Progettazione accurata del layout di cella;
– Modifica del tool inserendo un piccolo angolo tra flangia robot e flangia tool.
Questi stessi metodi sono utili anche per risolvere problemi relativi ai punti che si
trovano molto vicini al confine dell’area di lavoro.

14.7.1.1 Modifica dell’orientamento nei punti lungo il percorso


Nella maggior parte delle applicazioni, il tool ha una forma che permette di ruotare
attorno alla direzione di approccio senza ridurre la qualità del processo. Più
genericamente, questo è possibile con i tools che sono simmetrici rispetto a una
direzione. La torcia per la saldatura ad arco e la pinza per la saldatura a punti ne sono
esempi tipici.

1. Vettore di approccio del tool

In questi casi è sempre possibile modificare i punti (tipicamente POSITIONs) solo


aggiungendo una piccola rotazione attorno al vettore di approcchio. Con il robot reale
questo può essere fatto semplicemente muovendo manualmente in modalità TOL
(movimento manuale rispetto al riferimento tool) e premendo il tasto di jog +6/-6
(rotazione attorno all’asse z che è tipicamente il vettore di approccio); se la posizione
arriva da un sistema CAD o è direttamente scritta nel programma, occorre
semplicemente modificare il terzo angolo di Eulero e3 (POS(x, y, z, e1, e2, e3, ’’)). Sul
robot reale, una piccola rotazione da 5° a 10° permette al polso di allontanarsi dalla zona
di singolarità.

pr-0-0-gpr_05.fm
166 03/0111
Presupposti per la programmazione dei robot SMART

La rotazione ha maggior effetto se il vettore di approccio del tool non è parallelo


all’asse 6 del robot. Se è parallelo, è ancora possibile fare qualcosa solo nel caso
in cui il TCP non sia allineato lungo l’asse 6.

Le seguenti figure mostrano tre possibili casi con una pinza di saldatura a punti.

Fig. 14.2 - Situazione MIGLIORE (90° tra l’asse 6 e il vettore di


approccio della pinza di saldatura)

Fig. 14.3 - Situazione PEGGIORE (vettore di approccio allineato


con l’asse 6)

Fig. 14.4 - Situazione MEDIA (vettore di approccio parallelo


all’asse 6 ma non allineato con esso)

1. Distanza tra l’asse 6 e il vettore di approccio del tool

pr-0-0-gpr_05.fm
03/0111 167
Presupposti per la programmazione dei robot SMART

Si noti che la rotazione attorno al vettore di approccio non è l’unico modo per rimanere
fuori dalla zona di singolarità. Qualsiasi rotazione produce degli effetti e non modifica
MAI la posizione del TCP in x, y e z. Quando l’applicativo non forza l’orientamento del
tool, un piccolo cambiamento potrebbe migliorare considerevolmente la posizione del
polso e le prestazioni del robot.

14.7.1.2 Progettazione accurata del layout di cella


Esistono casi in cui il primo metodo (par. 14.7.1.1 Modifica dell’orientamento nei punti
lungo il percorso a pag. 166) non è applicabile. Questo accade, a volte, con le
applicazioni di palletizzazione nelle quali l’orientamento è prefissato. In questi casi è
necessario progettare opportunamente il layout di cella per evitare di entrare nella zona
di singolarità.
Anche la forma del tool è molto importante per risolvere situazioni a rischio e migliorare
le prestazioni del robot (vd. par. 14.7.1.3 Modifica del tool inserendo un piccolo angolo
tra flangia robot e flangia tool a pag. 170).
Il programmatore deve evitare situazioni in cui i pallets siano esattamente di fronte al
robot e il gripper sia orientato nella direzione dell’asse 6 (vd. le seguenti figure).
Questa situazione deriva dalla combinazione delle seguenti tre condizioni sfavorevoli:
– il gripper è allineato con l’asse 6 (vd. figura seguente);

– il pallet è situato allo stesso livello della posizione di calibrazione del robot;
– il pallet è situato esattamente di fronte al robot, non lateralmente (vd. figura
seguente).

pr-0-0-gpr_05.fm
168 03/0111
Presupposti per la programmazione dei robot SMART

Per eliminare qualsiasi problema di singolarità, il programmatore deve rimuovere


almeno una delle condizioni sopra elencate. Per esempio, mettendo il pallet più in basso
o montando il robot più in alto sarà possibile raggiungere qualsiasi posizione sul rack,
senza alcun problema (vd. figura seguente).

Analogamente, si possono risolvere i problemi di singolarità spostando lateralmente il


rack. In questo caso non è necessario cambiare l’altezza.

pr-0-0-gpr_05.fm
03/0111 169
Presupposti per la programmazione dei robot SMART

In ogni caso, la miglior soluzione può essere trovata utilizzando una simulazione off-line.
Sarà così possibile valutare quale sia lo spostamento minimo del rack, laterale, o verso
l’alto, o verso il basso.
E’ importante ricordare che i robot SMART NJ4 offrono grandi vantaggi durante la
simulazione, grazie all’assenza del cablaggio esterno sull’avambraccio. Questo
permette di risolvere qualsiasi problema di raggiungibilità in fase di progettazione della
cella. E’ proprio in quella fase che è possibile scegliere la migliore disposizione degli
elementi che compongono la cella, la miglior forma del gripper e le traiettorie del robot.

14.7.1.3 Modifica del tool inserendo un piccolo angolo tra flangia robot e
flangia tool
La progettazione del gripper è molto importante per migliorare le prestazioni del robot.
Questo è vero per qualsiasi modello di robot. Inoltre, per i robot SMART NJ4 la forma
del gripper può risolvere ogni problema di singolarità.
E’ sufficiente avere un piccolo angolo tra la flangia robot ed il gripper, per migliorare
molto la raggiungibilità delle posizioni singolari.

pr-0-0-gpr_05.fm
170 03/0111
Presupposti per la programmazione dei robot SMART

Come mostrato nelle figure qui sopra, tale soluzione permette al robot di seguire una
traiettoria lineare esattamente di fronte a lui, dall’alto verso il basso. Permette anche di
raggiungere tutta l’area di lavoro disponibile mantenendo sempre la posizione frontale
e il medesimo orientamento.
Lo stesso vale per le pinze di saldatura spot. Se il layout della cella è già definito,
l’aggiunta di un piccolo angolo può considerevolmente migliorare il comportamento del
robot. Questo metodo può anche risolvere la situazione peggiore nella quale il vettore
di approccio della pinza è esattamente allineato con l’asse 6 (vd. par. 14.7.1.1 Modifica
dell’orientamento nei punti lungo il percorso a pag. 166).
Naturalmente, l’uso della simulazione off-line semplifica la scelta dell’angolo e permette

pr-0-0-gpr_05.fm
03/0111 171
Presupposti per la programmazione dei robot SMART

l’ottimizzazione di tutti i dettagli relativi all’applicazione.

pr-0-0-gpr_05.fm
172 03/0111
Presupposti per la programmazione dei robot SMART

14.7.2 Conclusioni
Sono stati dati molti metodi e consigli per migliorare le prestazioni dei robot SMART NJ4
all’interno della zona di singolarità. E’ stato dimostrato che nella maggior parte dei casi
è possibile stare fuori da tale zona ed ottenere dal robot le prestazioni migliori.
Quando è assolutamente necessario muovere attraverso le singolarità, l’uso della
modalità di evoluzione WRIST_JNT permette al robot di muovere a velocità molto alta
con un errore angolare che è accettabile per la maggior parte dei processi.
In ogni caso, si possono efficacemente utilizare i tools di simulazione per ottenere dal
sistema le prestazioni migliori.

pr-0-0-gpr_05.fm
03/0111 173
Collision Detection (prestazione opzionale)

15. COLLISION DETECTION (PRESTAZIONE


OPZIONALE)

Collision Detection
Il codice dell’opzione è CR17926201.

15.1 Introduzione
L’algoritmo di Collision Detection (prestazione opzionale) fornisce al sistema la capacità
di arrestare il movimento dell’arm del robot, nel momento in cui entrino in azione forze
di disturbo sui giunti.
Questa prestazione può essere abilitata e disabilitata dall’utente, tramite una variabile
di sistema, sia da Programma che da Comando di Sistema.

La funzione di Collision Detection NON è stata studiata per proteggere le persone,


bensì il robot e, di conseguenza, le attrezzature!

Il presente capitolo fornisce informazioni su:


– Concetti di base
– Attivazione/disattivazione della funzione di Collision Detection della funzione
– Tipo di sensibilità alla Collision Detection
– Affidabilità della funzione
– Note sulla procedura di utilizzo del collision detection
– Programmi d’esempio

15.2 Concetti di base


La prestazione di Collision Detection consente, se attivata, di rilevare situazioni
– di collisione del robot con l’ambiente circostante,
– di elettrodi incollati in una operazione di saldatura,
– etc.
Quando viene rilevata una condizione di collisione (messaggio di errore 62513 SAX:
rilevata collisione), il sistema può entrare in una fase particolare durante la quale il
robot diventa cedevole e viene effettuata la frenata di emergenza.

Cedevolezza
La cedevolezza degli assi è stata introdotta per poter assorbire parte dell’energia
dell’urto (o della eccessiva trazione nel caso di elettrodi incollati) e minimizzare i possibili
danni; tale cedevolezza è attivabile dall’utente. Si consiglia di valutare bene l’uso della
stessa nella propria applicazione.

pr-0-0-gpr_06.fm
174 08/1112
Collision Detection (prestazione opzionale)

Severità errore di collision


E’ possibile modificare la severità dell’errore di collisione portandola da 10 (che causa
un DRIVE OFF) a 8 (che genera un HOLD). Per far ciò, impostare la nuova variabile
predefinita $COLL_EFFECT (campo di $ARM_DATA) al valore:
– 0 per generare, a fronte della collisione, un DRIVE OFF;
– 1 per porre la macchina nello stato di HOLD;
– 2 per generare l’evento di sistema 197 che indica “rilevata collisione”

Il robot NON SI FERMA, ma prosegue il movimento programmato: è


responsabilità dell’utente gestire opportunamente l’evento scatenato,
cancellando il movimento corrente, che proseguirebbe verso l’ostacolo, e
programmando la nuova traiettoria.
Nel par. 15.7.4 Gestione dell’evento di ‘rilevata collisione’ a pag. 187, viene
mostrato un programma di esempio.

Volendo attivare, a fronte dell’allarme di severità 8, la modalità di cedevolezza, è


conveniente aumentare il timeout di SoftServo dopo collisione ($TUNE[25]) portandolo
da 600 (default) a 1000 o 1200.
Questa modalità di gestione del Collision Detection è utile per applicazioni di “Ricerca
pallet” nell’area operativa del robot: l’arm muove lungo una direzione cartesiana e
quando incontra il pallet si arresta rimanendo asservito sulla posizione, anzichè
generare errore ed andare in DRIVE OFF

15.3 Attivazione/disattivazione della funzione di


Collision Detection
Per abilitare la prestazione di Collision Detection, il flag
$CRNT_DATA[num_arm].COLL_ENBL deve essere settato dall’utente al valore TRUE,
da Programma o da Comando di Sistema:

$CRNT_DATA[num_arm].COLL_ENBL := TRUE

Di default, esso non viene resettato dal sistema ad ogni DRIVE OFF, ma rimane attivo
fino a che l’utente non decida consapevolmente di disabilitare la prestazione stessa,
impostando il valore del suddetto flag a FALSE.
Sarà possibile passare alla gestione di disabilitazione automatica, impostando a 1 il bit
10 della variabile di sistema $ARM_DATA[num_arm].A_ALONG_1D[12], mediante la
built-in BIT_SET.

BIT_SET($ARM_DATA[num_arm].A_ALONG_1D[12], 10)
La modifica del bit è possibile sia a run-time sia a livello di file di configurazione, ed
possibile salvarla nel file .C5G.

NOTA BENE
La prestazione di Collision Detection, una volta abilitata, rimane attiva finchè
l’utente non la disabilita.

pr-0-0-gpr_06.fm
08/1112 175
Collision Detection (prestazione opzionale)

Cedevolezza
A seguito di un allarme di collisione, si può rendere cedevole l’arresto del robot.
L’intervento della cedevolezza dopo collisione è regolato dall’impostazione a 1 del bit 11
della variabile di sistema $ARM_DATA[num_arm].A_ALONG_1D[12], e sarà compito
dell’utente abilitarne l’intervento inserendo opportunamente nei suoi programmi
l’istruzione:

BIT_SET($ARM_DATA[num_arm].A_ALONG_1D[12], 11).
Il flag potrà essere resettato introducendo nei programmi l’istruzione:

BIT_CLEAR($ARM_DATA[num_arm].A_ALONG_1D[12], 11).
Per evitare che questo bit venga inavvertitamente salvato nel .C5G e abiliti la
prestazione di cedevolezza, legata al Collision Detection, inaspettatamente dopo una
ripartenza, il bit stesso verrà automaticamente resettato dal sistema nella fase di
start-up.

15.4 Tipo di sensibilità alla Collision Detection


Le variabili predefinite coinvolte nella gestione della sensibilità della prestazione di
Collision Detection, sono le seguenti:
– $COLL_TYPE
– $ARM_SENSITIVITY (soglie di sensibilità degli assi)

15.4.1 $COLL_TYPE
Per definire il tipo di sensibilità alla Collision Detection, è disponibile la variabile di
sistema $COLL_TYPE che può assumere i seguenti valori:
– COLL_LOW
– COLL_MEDIUM
– COLL_HIGH
– COLL_MANUAL
inizializzate da COMAU, e
– COLL_USER1
– COLL_USER2
– ...
– ...
– COLL_USER10
utilizzabili dall’utente come personalizzazione dei dati COMAU.
E’ possibile che, durante l’esecuzione di un programma, in occasione di certi movimenti,
la collisione debba essere rilevata con sensibilità minori o maggiori.
La sensibilità alla collisione può essere variata su una intera sequenza di MOVE o su
una singola MOVE.
Assegnazione modale (intera sequenza di MOVE):

$CRNT_DATA[num_arm].COLL_ENBL := TRUE
$COLL_TYPE := COLL_MEDIUM

pr-0-0-gpr_06.fm
176 08/1112
Collision Detection (prestazione opzionale)

MOVE TO PNT0001J
MOVE TO PNT0002J
In questo caso la sensibilità rimane impostata per ambedue le MOVE.
Assegnazione nodale con clausola WITH (per una sola MOVE):

$CRNT_DATA[num_arm].COLL_ENBL := TRUE
$COLL_TYPE := COLL_LOW
MOVE TO PNT0001J
MOVE TO PNT0002J WITH $COLL_TYPE := COLL_HIGH
In questo caso la prima MOVE viene eseguita con sensibilità BASSA e la seconda con
sensibilità ALTA.
Ad ogni valore di $COLL_TYPE corrisponde un set di valori per la sensibilità degli assi,
$ARM_SENSITIVITY. I valori base (HIGH, MEDIUM, LOW, MANUAL) sono impostati
da COMAU. I valori COLL_USER1 e COLL_USER2 possono essere utilizzati
dall’utente a sua cura e responsabilità.

Nel caso in cui la funzionalità del Collision Detection sia abilitata nello stato
PROGR (jog, ProgramEdit, etc.), indipendentemente dal valore corrente di
$COLL_TYPE, verranno utilizzate le soglie corrispondenti a COLL_MANUAL
( $ARM_SENSITIVITY [COLL_MANUAL,num_asse] ).
Per le versioni di software precedenti alla 2.02, la responsabilità di riattivare la
prestazione è lasciata all’utente, mediante l’uso dell’istruzione
$CRNT_DATA[num_arm].COLL_ENBL := TRUE , come già detto precedentemente.

15.4.2 $ARM_SENSITIVITY (soglie di sensibilità degli assi)


Questo array bidimensionale, campo di $ARM_DATA, rappresenta la soglia di
sensibilità su ogni asse robot, usata dall’algoritmo di Collision Detection. La sensibilità
massima è 100, la minima è 0.
La prima dimensione è quella dei possibili valori di $COLL_TYPE. La seconda
dimensione è il numero di asse. Es.: $ARM_SENSITIVITY[COLL_LOW, 1].
Il calcolo delle soglie di sensibilità del Collision Detection è possibile per mezzo di una
built-in che potrà essere lanciata mentre il robot esegue il ciclo di lavoro.
Le caratteristiche di tale built-in sono le seguenti:

ARM_COLL_THRS(Arm, Coll_type, Tempo, Margine)


– Arm è l’arm sul quale si deve fare l’acquisizione.
– Coll_type è il tipo di sensibilità per il quale si vuole fare l’acquisizione: la built-in
andrà direttamente a caricare le variabili $ARM_SENSITIVITY per il Coll_type
specificato. Per favorire l’ottimizzazione delle soglie di sensibilità, i tipi di collisione
aumentano da 6 a 14, con l’introduzione dei tipi da COLL_USER3 a
COLL_USER10.
– Tempo è il tempo in secondi di durata dell’acquisizione e deve corrispondere ad
almeno la durata del percorso per il quale le soglie devono essere valide (un ciclo
di lavoro o un singolo movimento). Può valere da 1 a 300 secondi.

pr-0-0-gpr_06.fm
08/1112 177
Collision Detection (prestazione opzionale)

I valori 1 e 0 relativi al parametro Tempo, hanno il seguente significato:


– 1 - determina la partenza dell’acquisizione dei dati per la determinazione
delle soglie di sensibilità
– 0 - determina la fine dell’acquisizione dei dati e dell’assegnazione delle
soglie di sensibilità.
Esempio di utilizzo:
ARM_COLL_THRS(1,COLL_USER7,1)
MOVE ...
....
MOVE ...
ARM_COLL_THRS(1,COLL_USER7,0)

– Margine è un flag (TRUE/FALSE) che definisce se le soglie debbano essere


calcolate con un margine di variabilità (TRUE, valore di default) o esattamente sul
percorso assegnato (FALSE).
– Il valore del margine di variabilità è contenuto nella variabile predefinita
$A_ALONG_2D[10,ax] che verrà inizializzata, nel file di configurazione, al valore
{7,7,6,6,6,0,0,0,0} che significa 7% del fondo scala dell’azionamento sui primi 3
assi, e 6% sugli assi polso (valore determinato sperimentalmente). L’utente
privilegiato potrà variare questo margine.
Ad esempio,
ARM_COLL_THRS(1, COLL_USER2, 60, FALSE)
acquisisce i dati a partire dall’istante in cui la built-in viene eseguita e per i 60 secondi
successivi: al termine, segnalato con il messaggio

62520 - 02 SA DETERMINAZIONE DELLE SOGLIE DI COLLISIONE CONCLUSA


carica i valori ottenuti, senza margine di variabilità, nelle variabili predefinite
$ARM_SENSITIVITY[COLL_USER2, ax].
La built-in può essere utilizata in un programma PDL2, legata ad opportune
CONDITION, per adeguare le soglie di sensibilità in caso di variazione delle condizioni
di esecuzione del movimento.

Si noti però che il ricalcolo necessita di un tempo pari a quello di acquisizione,


prima che le nuove soglie possano essere attuate. Durante questo tempo le soglie
attive (cioè quelle correnti) potrebbero causare false collisioni o scarsa
sensibiltà.
Opportuni accorgimenti, quali utilizzare delle soglie di sicurezza standard nelle
fasi di transizione (dall’inizio di esecuzione della built-in alla ricezione del
messaggio) dovrebbero permettere il superamento della fase di acquisizione.

15.5 Affidabilità
Perchè l’algoritmo di Collision Detection operi in modo sicuro ed affidabile, è
INDISPENSABILE che il carico sia stato correttamente identificato dall’utente.
La prestazione di Collision Detection è strettamente dipendente da una corretta
dichiarazione del carico utilizzato: la rilevazione della collisione può essere falsata (ad
es. falsa collisione durante la normale esecuzione di un Programma) da un carico mal
stimato; inoltre, nella fase di soft-servo e contemporanea decelerata ed arresto, il robot
può avere comportamenti anomali a causa di un carico sottostimato o sovrastimato.

pr-0-0-gpr_06.fm
178 08/1112
Collision Detection (prestazione opzionale)

Per questi motivi, prima di attivare la funzione di Collision Detection, l’utente deve
verificare che sia stato definito con precisione il carico utilizzato.

15.6 Note sulla procedura di utilizzo del collision


detection
– Introduzione,
– Procedura di utilizzo del collision detection.

15.6.1 Introduzione
Il seguente insieme di note viene fornito per aiutare l’utente nella impostazione della
funzionalità del Collision Detection.
Condizione necessaria per il funzionamento della suddetta prestazione è l’esistenza per
l’asse/Robot in questione del suo modello dinamico delle coppie di giunti (delle
correnti). Solamente se il robot è dotato di tale modello dinamico è possibile attivare (se
presente/acquistata l’opzione) la prestazione. Il modello dinamico essenzialmente in
funzione della posizione del robot, del suo carico, dell’inerzia è in grado di calcolare con
anticipo le coppie (correnti) che saranno utilizzate per muover il robot in un determinato
movimento. Ad oggi tutti i robot (assi ausiliari esclusi) sono dotati di modello dinamico.
Al fine di ottenere una ottima previsione delle correnti nel modello dinamico è
INDISPENSABILE aver configurato correttamente le variabili che caratterizzano il
carico:
– $TOOL_MASS
– $TOOL_CNTR
– $TOOL_INERTIA
sarà cura dell’operatore: inserire o i dati nominali oppure utilizzare (se
presente/acquistata l’opzione) l’Autodeterminazione del carico (prestazione opzionale),
variare durante il programma in funzione della applicazione i valori di cui sopra in modo
che il controllo abbia sempre dichiarati i valori correnti del carico.
La prestazione del Collision Detection in breve funziona utilizzando le correnti
determinate in anticipo dal modello dinamico e le correnti reali assorbite nel movimento
dai vari motori (assi). La prestazione segnala all’utente l’intervenuta collisione su uno o
più assi se si presenta una ragionevole differenza tra le due correnti di cui sopra.

IMPORTANTE! Si ricorda che il Collision Detection nasce per limitare i danni, in


caso di urto, alla meccanica del robot e, di conseguenza, all’attrezzatura. Di
conseguenza, essendo una prestazione che interviene prontamente a limitare
l’effetto dell’urto, ci si può aspettare che limiti i danni anche all’attrezzatura della
cella in cui opera il robot. Si ribadisce il concetto che il Collision detection NON
nasce per limitare i danni all’operatore in caso di cattivo/errato utilizzo del robot.

In condizioni normali ($COLL_EFFECT=0), a fronte di un errore di collisone viene


mandato il robot in DRIVE OFF e viene riportato l’errore:
62513 – 10 SAX RILEVATA COLLISIONE
per resettare l’allarme occorre utilizzare il comando di latch degli allarmi:

pr-0-0-gpr_06.fm
08/1112 179
Collision Detection (prestazione opzionale)

– comando ULLA, oppure


– Pagina Alarm, sottopagina Latched, comando Ack, nel caso in cui si utilizzi il
Terminale di Programmazione (vd. manuale Uso dell’Unità di Controllo C5G,
capitolo USO DEL TERMINALE DI PROGRAMMAZIONE, per ulteriori dettagli).

15.6.2 Procedura di utilizzo del collision detection


Entriamo ora nel merito dell’impostazione delle variabili del Collision Detection. Si
consiglia di seguire attentamente i passi qui elencati:

a. Cosa è necessario fare prima di abilitare la prestazione di Collision


Detection?

a.1 E’ necessario disporre del programma di lavoro definitivo.

a.2 Identificazione delle soglie relative al ciclo di lavoro.


Data la sensibilità dell’algoritmo, vi è differenza tra identificare le soglie a ROBOT
FREDDO (cioè a robot fermo, in DRIVE OFF, da ore, se possibile da una notte) e
a ROBOT CALDO (si può considerare CALDO un robot che abbia effettuato
almeno 15-20 cicli di lavoro).
Per essere sicuri di non avere false collisioni, occorre identificare le soglie con la
macchina A FREDDO.

Si rammenta che identificare le soglie con il robot FREDDO limita, in un certo


senso, la sensibilità dell’algoritmo. Le regole di utilizzo esposte qui di seguito
possono chiarire meglio questi aspetti e consigliare l’utente su come rendere
anche molto sensibile la prestazione.

Se si vuole avere una sensibilità maggiore a ROBOT CALDO, si dovranno


identificare 2 set di soglie:
• una a ROBOT FREDDO e
• una a ROBOT CALDO.
Sarà cura dell’utente realizzare un programma PDL2 non-holdable che,
contemporaneamente al ciclo di lavoro, gestisca la scalatura delle soglie da
FREDDO a CALDO e da CALDO a FREDDO, sulla base di eventi (quali ad
esempio arresto della macchina per manutenzione o per sospensione dell’attività
lavorativa, e ripartenza) e timer ad essi associati.

Si noti che la definizione delle soglie NON avviene all’interno di tale programma,
bensì nel programma di lavoro!

b. Scomposizione del programma


Per rendere efficiente ed efficace l’uso di tale prestazione il programma utente va
scomposto in parti, ad esempio:
– A: movimenti di svincolo
– B: movimenti di posizionamento breve
– C: movimenti tecnologici (presa, posa, saldatura, etc.)
L’utente deve determinare, per ciascun tipo di movimento la soglia corretta, che è
funzione sia della posizione del robot, sia del carico ad esso applicato.
Una volta diviso dal punto di vista logico i movimenti del nostro programma in
riferimento alle tipologie di cui sopra, si passa al punto successivo.

pr-0-0-gpr_06.fm
180 08/1112
Collision Detection (prestazione opzionale)

c. Attivazione della prestazione


Per l’attivazione è sufficiente inserire la seguente assegnazione in testa al
programma:

$CRNT_DATA[num_arm].COLL_ENABLE:=TRUE

Per la disattivazione:

$CRNT_DATA[numero_arm].COLL_ENABLE:=FALSE

Per quanto concerne l’uso del DRIVE OFF con le versioni di software di sistema
precedenti la 2.02, si fa riferimento a quanto detto precedentemente (vd. NOTA
BENE).

d. Definizione della sensitività in modo Nodale/Modale


Il sistema contiene delle soglie preconfigurate, per un carico generico simile alla
portata del robot:
– COLL_LOW
– COLL_MEDIUM
– COLL_HIGH
In programmazione il sistema utilizza automaticamente una quarta soglia:
– COLL_MANUAL
Inoltre esistono due soglie configurabili dall’utente:
– COLL_USER1
– COLL_USER2
– ...
– COLL_USER10

Il tipo di sensitività può essere definito nel programma con due strategie:
• in modo modale
...
$COLL_TYPE := COLL_xxxx
MOVE ...
...
ossia per tutte le MOVE verrà usata la soglia di sensitività scelta
(COLL_xxxx)
• oppure in modo nodale con clausola WITH
MOVE ... WITH $COLL_TYPE:= COLL_xxxx (A)(vd.punto b.)
...
MOVE ... WITH $COLL_TYPE:= COLL_yyyy (B)(vd.punto b.)
ossia, per tutte le MOVE di tipo (A) (vd. punto b.) verrà usata la soglia di
sensitività scelta (COLL_xxxx), per l’altra (COLL_yyyy).

e. False collisioni
Se le soglie (COLL_LOW, COLL_MEDIUM, COLL_HIGH, COLL_MANUAL,
COLL_USER) sono state scelte dall’utente senza una opportuna analisi del tipo di
urto da cui si vuole tutelare, ed in modo indiscriminato sono state scelte soglie
errate per il tipo di movimento contenuto nel programma, si verificheranno delle
False Collisioni, ossia, durante il movimento del robot, il sistema segnalerà
un’avvenuta collisione quando questa non è realmente capitata. Il motivo è che è
stata utilizzata una soglia troppo sensibile per il suddetto movimento (ad esempio
una sensibilità troppo alta in un Movimento con forti accelerazioni/decelerazioni).

f. Cosa rappresenta la soglia percentuale di sensitività?

pr-0-0-gpr_06.fm
08/1112 181
Collision Detection (prestazione opzionale)

Dato un asse esiste un valore limite della corrente ad esso erogabile; la


percentuale di sensitività indica un valore di questa corrente; ad esempio se
IMAX=60 A, dire che la sensitività dell’asse è 90% significa:

(100% - 90%) * 60 A = 6 A

g. Strategia di impiego
L’utente deve capire quale sia la propria esigenza ed agire in modo ad essa
corrispondente:
– ESIGENZA N.1: uso immediato della prestazione di Collision Detection
La strategia modale è quella che permette all’utente di attivare il Collision
Detection e di utilizzare, ad esempio, un’unica soglia per tutte le tipologie di
movimento (es.: si prova prima con COLL_MEDIUM, poi, se si sono
presentate false collisioni, con COLL_LOW). Va da sé che tale strategia ha il
difetto che la sensibilità del Collision non è stata messa a punto dall’utente per
avere alte prestazioni. Ha il vantaggio della rapidità del settaggio.
Una volta fatto girare il programma utente con ROBOT FREDDO (fermo da
ore), se non vengono rilevate false collisioni, la soglia scelta è sufficiente per
garantire l’attivazione del Collision Detection e non crea falsi errori di
collisione.
Altrimenti occorrerà utilizzare una COLL_USERx con valori di soglie che,
come partenza, hanno i medesimi della COLL_LOW meno 3 punti percentuali
per ogni asse.
– ESIGENZA N.2: uso personalizzato
La strategia nodale è per utenti evoluti che vogliono raggiungere degli alti
gradi di protezione in caso di urti, elettrodi incollati, movimenti di presa/posa
etc.
Qui l’utente, oltre ad aver suddiviso in modo logico i movimenti del
programma, come consigliato al punto b., dovrà effettuare delle prove in più
per identificare, rispetto al singolo movimento quale soglia gli garantisce la più
alta protezione.
Vengono qui di seguito fornite alcune regole operative per singolo
movimento.
• Prendere in considerazione un singolo movimento e ne identifico la tipologia:
• Movimento con forti accelerazioni/decelerazioni (molti centimetri di
spazio) --> movimento di tipo (A) (vd. passo b.)
• Movimento alla massima velocità

• Movimento breve (pochi centimetri di spazio) --> movimento di tipo (B)
(vd. passo b.)
• Movimento a velocità ridotta
• Per i movimenti del tipo (A), partire con una soglia di tipo COLL_MEDIUM \
per i movimenti di tipo (B, partire da COLL_HIGH
• Effettuare alcuni cicli di movimento con robot a freddo al 100% (velocità max
di esecuzione del programma). Se non si presentano mai false collisioni, la
soglia è quella giusta.
• Se invece si presentano false collisioni, scegliere una soglia di tipo
COLL_LOW (nel caso di movimento di tipo (B) scegliere COLL_MEDIUM)
• Se continuano a presentarsi false collisioni, inizializzare la COLL_USER1 con
i valori di COLL_LOW:

$ARM_SENSITIVITY[COLL_USER1,ax]:= $ARM_SENSITIVITY[COLL_LOW,ax]

pr-0-0-gpr_06.fm
182 08/1112
Collision Detection (prestazione opzionale)

• Diminuire i valori delle percentuali degli assi su cui si è presentata la falsa


collisione ($ARM_SENSITIVITY[COLL_USER1,ax]) di 3 punti percentuali e
riprovare fino a che non si verificano più false collisioni.
• Nella definizione delle soglie cercare di mantenere uniformità del valore tra
assi portanti 1-2-3 e assi di polso 4-5-6
• Se si individuano movimenti simili a quello analizzato, utilizzare le soglie
individuate.
• In alternativa si può utilizzare la built-in ARM_COLL_THRS(Arm, Coll_type,
Tempo, Margine) per identificare runtime le soglie di collisione.

h. Accortezze di programmazione
Se si intende utilizzare la strategia Nodale, dunque si vuole ottenere il massimo
dalla prestazione di collision, occorre tenere in conto le seguenti osservazioni:
– evitare di posizionarsi su un punto tecnologico (es. di Spot Welding) tramite
un movimento di tipo (A), ossia con forti accelerazioni/decelerazioni.
Introdurre un piccolo movimento di ‘approccio’.
– evitare di lasciare il collison detection attivo quando si effettua l’operazione
tecnologica (ad esempio, si chiude la pinza). Ciò per evitare che movimenti
non controllati di attrezzature possano generare coppie agli assi che possono
essere interpretate come collisione.

15.7 Programmi d’esempio


Vengono forniti i seguenti programmi di esempio:
– Abilitazione della prestazione di collision detection su singola MOVE
– Riabilitazione del collision detection da programma
– Calcolo automatico delle soglie di sensibilità
– Gestione dell’evento di ‘rilevata collisione’
– Utilizzo della libreria open source CDetect

pr-0-0-gpr_06.fm
08/1112 183
Collision Detection (prestazione opzionale)

15.7.1 Abilitazione della prestazione di collision detection su


singola MOVE

PROGRAM collision
VAR pnt0001j, pnt0002j, pnt0003j, pnt0004j : JOINTPOS FOR ARM[1]
BEGIN
CONDITION[1] :
WHEN AT START DO
$COLL_TYPE := COLL_HIGH
$CRNT_DATA[1].COLL_ENBL := TRUE
ENDCONDITION

CONDITION[2] :
WHEN AT END DO
$CRNT_DATA[1].COLL_ENBL := FALSE
ENDCONDITION

MOVE TO $CAL_SYS
CYCLE

MOVE TO pnt0001j
MOVE TO pnt0002j

-- attivo il collision solo dove mi serve

MOVE LINEAR TO pnt0003j WITH CONDITION[1], CONDITION[2]


MOVE TO pnt0004j
END collision

pr-0-0-gpr_06.fm
184 08/1112
Collision Detection (prestazione opzionale)

15.7.2 Riabilitazione del collision detection da programma


Può essere utilizzato nella condizione in cui il Collision Detection si disabiliti al DRV
OFF.

PROGRAM collision2
VAR pnt0001j, pnt0002j, pnt0003j, pnt0004j : JOINTPOS FOR ARM[1]
BEGIN

CONDITION[1] NODISABLE :
WHEN EVENT 99 DO

-- riabilito il collision detection al DRIVE ON (utile fino alla v 2.01)

$CRNT_DATA[1].COLL_ENBL := TRUE
ENDCONDITION

ENABLE CONDITION[1]

MOVE TO $CAL_SYS

-- attivo il collision in modo modale, con bassa sensibilità

$COLL_TYPE := COLL_LOW
$COLL_EFFECT:=2
$CRNT_DATA[1].COLL_ENBL := TRUE
CYCLE

MOVE TO pnt0001j
MOVE TO pnt0002j

-- alzo la sensibilità sul movimento che voglio tenere sotto controllo

MOVE LINEAR TO pnt0003j WITH $COLL_TYPE = COLL_HIGH


MOVE TO pnt0004j
END collision2

pr-0-0-gpr_06.fm
08/1112 185
Collision Detection (prestazione opzionale)

15.7.3 Calcolo automatico delle soglie di sensibilità

-- Ricalcola le soglie di sensibilità alla collisione ogni delta_t minuti e


-- ad ogni variazione del GEN_OVR.
--
PROGRAM soglie NOHOLD
VAR dummy : BOOLEAN
coll : INTEGER
delta_t : INTEGER

ROUTINE ru_thrs
BEGIN
-- Calcola le soglie di collisione per l'ARM 1, tipo di sensibilità 'coll'
-- ed acquisisce dati per 120 secondi.
ARM_COLL_THRS(1, coll, 120)
END ru_thrs

BEGIN
-- Variabile per mantenere attivo il programma
dummy := FALSE
-- Tipo di sensibilità per il quale si richiede il ricalcolo delle soglie
coll := COLL_USER3
--
-- Definisce un delta tempo per il ricalcolo delle soglie.
--
delta_t := 60000 * 10 -- ogni 10 minuti

CONDITION[1] NODISABLE :
--
-- Ricalcola le soglie se varia il GEN_OVR
--
WHEN EVENT 85 DO
$TIMER[1] := 0
ru_thrs
ENDCONDITION

CONDITION[2]:
--
-- Ricalcola le soglie allo scadere del delta tempo.
--
WHEN $TIMER[1] > delta_t DO
$TIMER[1] := 0
ENABLE CONDITION[2]
ru_thrs
ENDCONDITION

ENABLE CONDITION[1]
ENABLE CONDITION[2]

-- Calcola le soglie iniziali


ru_thrs

-- Mantiene attivo il programma


WAIT FOR dummy
END soglie

pr-0-0-gpr_06.fm
186 08/1112
Collision Detection (prestazione opzionale)

15.7.4 Gestione dell’evento di ‘rilevata collisione’


Viene qui riportato, a puro titolo di esempio, un segmento di programma che gestisce
l’evento 197 di ‘rilevata collisione’.

PROGRAM colltouch
VAR pnt0006p, pnt0007p, pnt0008p: POSITION
pnt0001p, pnt0002p, pnt0003p, pnt0004p, pnt0005p: POSITION
BEGIN

CONDITION[1]:
WHEN EVENT 94 DO
UNLOCK -- ripristina per
RESUME -- successiva ripartenza
.
.
.
ENDCONDITION

CONDITION[2]NODISABLE:
WHEN EVENT 197 DO
LOCK -- blocca la macchina
CANCEL CURRENT -- cancella il movimento corrente
.
.
.
ENDCONDITION
.
.
.
ENABLE CONDITION[1]
ENABLE CONDITION[2]

$COLL_TYPE:=COLL_USER1
$COLL_EFFECT:=2
$CRNT_DATA[1].COLL_ENBL:=TRUE

CYCLE
MOVE TO ...
.
.
.

END colltouch

pr-0-0-gpr_06.fm
08/1112 187
Collision Detection (prestazione opzionale)

15.7.5 Utilizzo della libreria open source CDetect


Nella directory UD:\SYS\UTIL viene rilasciata una libreria open source di nome
CDetect, contenente due routine esportate, importanti per l’utilizzo della funzionalità di
Collision Detection.
Alla partenza del sistema, il programma SYS_STARTUP esegue i passi qui sotto
descritti:

a. se CDetect.cod NON esiste in UD:\SYS\UTIL, il file .zip viene decompresso e


viene creato il file CDetect.cod.

b. Se CDetect.cod esiste, verifica se esso è stato generato da Comau:

b.1 Se è stato generato da Comau, il file viene sostituito con la versione più recente.

b.2 Se invece NON è stato generato da Comau (caso in cui un utente ha


modificato/personalizzato la sua versione di CDetect) il file NON viene aggiornato,
ma viene mantenuto il file originale dell’utente.
Le due routine esportate vengono associate alle istruzioni di movimento, come inizio e
fine, per acquisire al meglio le soglie di Collision da utilizzare in quel tratto:
– CD_START (ai_coll) - indica l’inizio dell’acquisizione delle soglie di Collision.
E’ possibile specificare un parametro (ai_coll) che è il numero della tabella
contenente le soglie di Collision, associata a quel tratto.
– CD_END - indica la fine dell’acquisizione delle soglie di Collision. Essa chiude
l’acquisizione e il tratto di movimento, e congela i valori ad esso relativi.

Il movimento, nel programma, può essere spezzato in più tratti, per un massimo di 100
tratti. Grazie a queste routine è possibile acquisire in modo automatico le soglie di
Collision per ogni tratto.
Identificare tratti omogenei di movimento (tra una CD_START e una CD_END) rende le
soglie calcolate molto più fini per il loro utilizzo.
La funzionalità di Collision viene attivata partendo da soglie a freddo e ad ogni ciclo
vengono determinate le soglie in funzione dell’effettivo movimento.
E’ inoltre disponibile una terza routine:
– CD_READ - visualizza (su LUN_TP e LUN_CRT)
• lo stato corrente della Collision (abilitata o disabilitata),
• la collision type corrente ($COLL_TYPE)
• le soglie di sensibilità dei singoli assi.
Segue un esempio di applicazione delle routine appena descritte.

pr-0-0-gpr_06.fm
188 08/1112
Collision Detection (prestazione opzionale)

PROGRAM mov

VAR pnt0001j, pnt0002j, pnt0003j, pnt0004j : JOINTPOS FOR ARM[1]

-- EXPORTED ROUTINES
ROUTINE CD_Start(ai_Coll : INTEGER) EXPORTED FROM CDetect
ROUTINE CD_End EXPORTED FROM CDetect
ROUTINE CD_Read EXPORTED FROM CDetect

BEGIN

MOVE TO $CAL_SYS
CYCLE
CD_START(1)
MOVE TO pnt0001j
MOVE TO pnt0002j
CD_END

CD_START(2)
MOVE LINEAR TO pnt0003j
MOVE TO pnt0004j
CD_END
END mov

pr-0-0-gpr_06.fm
08/1112 189
Uso dei Posizionatori gestiti da C5G

16. USO DEI POSIZIONATORI


GESTITI DA C5G

16.1 Introduzione
Il presente capitolo è dedicato all'installatore ed al manutentore della cella robotizzata,
con lo scopo di fornire loro le procedure di uso e le informazioni necessarie per
effettuare la configurazione software del Controllore per la gestione corretta del
posizionatore dotato di assi esterni robot.
In particolare si sottolinea la necessità di effettuare la personalizzazione della
configurazione del posizionatore quando questo non sia un prodotto standard.

In ogni caso, anche con un posizionatore standard, dovrà sempre essere definito
il raggio di ingombro del pezzo.

I posizionatori vengono suddivisi in famiglie e a ciascuna viene dedicato un paragrafo.


Le procedure e convenzioni che verranno riportate nei paragrafi successivi assumono
una importanza rilevante per garantire omogeneità alle installazioni e soprattutto la
corretta funzionalità del sistema quando si usa, ad esempio, il movimento cooperativo,
cioè l'asservimento di un robot alla posizione del pezzo da lavorare montato sul
posizionatore.

E’ responsabilità di chi ha progettato il posizionatore di verificare e garantire che


l’oggetto si comporti in modo conforme alle varie normative. In particolare
occorre verificare che a seguito di:
– normale utilizzo (Automatico/Programmazione),
– emergenza,
– frenata di sicurezza,
– HOLD,
– DRIVE OFF,
– urto su eventuali tamponi meccanici
l’oggetto si comporti in modo coerente con le normative di sicurezza vigenti.

16.2 Sommario
I seguenti argomenti:
– USO del Terminale di Programmazione (utilizzo del software di
configurazione degli assi esterni) e
– USO del programma TO-SET (calcolo della posizione della base del
posizionatore),
vengono trattati, rispettivamente:
– nel Manuale di Uso dell’Unità di Controllo C5G, nel paragrafo Setup Page, e
– in questo Manuale, Cap. Programma TO_SET - gestione del Tool

hs-0-0-mot_04.fm
190 00/0110
Uso dei Posizionatori gestiti da C5G

I posizionatori descritti nel seguito sono così raggruppati:


– Posizionatori ad 1 asse rotante tipo MP, PTDO, PTDV, TR3000/6000
– PTORB - Posizionatori a 2 assi perpendicolari
– Posizionatori a 2 assi non perpendicolari tipo PTORB-alfa
– Assi integrati di posizionamento robot
Per ognuno dei suddetti argomenti vengono fornite le seguenti indicazioni:
– modalità di definizione dei sistemi di riferimento base e flangia,
– modalità di esecuzione della calibrazione e
– parametri caratteristici per la descrizione cinematica del posizionatore.

16.3 Convenzioni Generali


In particolare vengono riportate le convenzioni di rotazione assi e posizionamento
meccanico dei punti P1, P2 e P3 (per il calcolo del movimento cooperativo) che devono
essere adottate per i modelli di posizionatori a due assi gestiti.
Queste convenzioni acquistano importanza nel momento in cui si richiede di effettuare
il movimento cooperativo e cioè di asservire un robot alla posizione del pezzo montato
sul posizionatore: se non vengono seguite non risulta possibile misurare correttamente
la posizione della base del posizionatore mediante il programma TO_SET (vedi
Cap. Programma TO_SET - gestione del Tool).

Per quanto riguarda le convenzioni particolari e specifiche di ciascun


posizionatore si rimanda al paragrafo dedicato al modello particolare o famiglia.

– Versi di rotazione degli assi


– Convenzione per il posizionamento meccanico dei punti P1, P2 e P3

16.3.1 Versi di rotazione degli assi

I versi di rotazione degli assi dei posizionatori non possono essere scelti
liberamente: essi devono seguire in modo stringente la convenzione per cui gli
assi hanno verso positivo in senso antiorario (rispetto all’asse di rotazione).

In altre parole devono seguire la regola della mano destra riferendosi alla direzione
indicata nella Fig. 16.1 in corrispondenza degli assi: orientando il pollice della mano
destra nella direzione indicata dalla freccia della linea tratteggiata (che rappresenta
ciascun asse), le dita si devono chiudere nella direzione positiva dell'asse rotante. Per
la rappresentazione è stato scelto il posizionatore orbitale perché particolarmente
rappresentativo.

16.3.2 Convenzione per il posizionamento meccanico dei punti


P1, P2 e P3
I riferimenti per i punti P1, P2, P3 descritti nel Cap. Programma TO_SET - gestione del
Tool per il calcolo della base dei posizionatori ($BASE se il posizionatore è un arm
indipendente o $AUX_BASE se è un gruppo di assi ausiliari) devono essere
meccanicamente posizionati secondo la convenzione seguente (vd. Fig. 16.1):

hs-0-0-mot_04.fm
00/0110 191
Uso dei Posizionatori gestiti da C5G

– P1 e P3 devono essere scelti lungo l'asse Yflangia con verso positivo da P1 a P3


(P1 nella parte negativa di Yflangia e P3 nella parte positiva);
– l'origine del riferimento flangia Oflangia deve coincidere con il punto medio del
segmento P1-P3;
– P2 deve essere scelto in modo che il segmento tra Oflangia e P2 sia perpendicolare
a P1-P3.

Fig. 16.1 - Posizionamento meccanico di P1, P2 e P3

1. asse 1
2. asse 2
Xb, Yb, Zb, Ob= Xbase, Ybase , Zbase, Obase
Xf, Yf, Zf, Of = Xflangia, Yflangia, Zflangia, Oflangia

16.4 Calcolo del valore di override di


programmazione
Per soddisfare le normative di sicurezza vigenti, riguardanti i robot e i posizionatori, è
fornito, sul Terminale di Programmazione (pagina di SETUP, sottopagina AUX_AXES),
un tool di configurazione. Esso provvede al calcolo del valore della velocità in manuale.
La formula utilizzata è la seguente:

dove:
250 = velocità massima consentita secondo normativa [mm/s]
955 = fattore di conversione numerico
Rt = rapporto di trasmissione del motore [Mt/axt]
Vm = velocità massima del motore [Rpm]
r = raggio di ingombro del pezzo [mm]

hs-0-0-mot_04.fm
192 00/0110
Uso dei Posizionatori gestiti da C5G

VELOCITA’ MASSIMA IN PROGRAMMAZIONE


E’ molto importante che il calcolo venga effettuato con estrema accuratezza, in
modo da rispettare le Norme vigenti in materia di sicurezza. Nel caso vengano
lavorati pezzi con dimensioni molto diverse, per il calcolo occorre considerare il
caso peggiore (massimo ingombro del pezzo).
Il valore di override va inserito tramite il tool di configurazione.

16.5 Posizionatori ad 1 asse rotante tipo MP,


PTDO, PTDV, TR3000/6000
16.5.1 Definizione dei sistemi di riferimento
Il sistema di riferimento della flangia del posizionatore a tornio (platò) è definito secondo
le seguenti convenzioni (vd. Fig. 16.2):
– l'origine del sistema di riferimento della flangia (Oflangia) giace sulla superficie della
flangia in coincidenza del centro di rotazione dell'asse del posizionatore;
– l'asse Zflangia deve essere perpendicolare alla superficie della flangia con verso
uscente.

Fig. 16.2 - Definizione dei sistemi di riferimento

1 - asse 1
Xf, Yf = Xflangia, Yflangia

Si noti la convenzione che riguarda i punti P1, P2, P3 descritti nel Cap. Programma
TO_SET - gestione del Tool per il calcolo della $BASE (o $AUX_BASE) dei
posizionatori.
Si noti inoltre come l'asse ha senso di rotazione positivo in senso antiorario per
rispettare la convenzione della regola della mano destra (vd.Versi di rotazione degli
assi).

Qualora, agendo sul Terminale di Programmazione, l'asse controllato si


muovesse in modo opposto alla suddetta regola, occorre cambiare di segno il
rapporto di trasmissione utilizzando il Terminale di Programmazione.

16.5.2 Calibrazione
Il posizionatore a tornio non necessita di regole particolari per la posizione di
calibrazione.

hs-0-0-mot_04.fm
00/0110 193
Uso dei Posizionatori gestiti da C5G

16.5.3 Descrizione cinematica

Per configurare questi posizionatori, riferirsi al Manuale USO dell’Unità di


Controllo C5G, Setup Page, paragrafo AUX_AXES.

Per questi tipi di posizionatori non occorre inserire alcun valore riferito alle lunghezze
assi.
Occorre invece calcolare la velocità da attribuire all'asse del posizionatore in
programmazione, in funzione della dimensione del pezzo che viene montato sul platò,
in modo che la velocità tangenziale massima non superi il valore di 250 mm/s (vedi
normativa vigente). A tale scopo occorre innanzitutto misurare il raggio r massimo del
pezzo da lavorare, come indicato in Fig. 16.3.

Fig. 16.3 - Misurazione raggio max del pezzo

1. Pezzo da lavorare
2. Platò del tornio

Successivamente, il software di configurazione, disponibile su Terminale di


Programmazione, calcola il valore della velocità in manuale.
Segue una tabella riassuntiva dei dati meccanici da inserire, assumendo che il
posizionatore sia l'asse 7.

Nel caso di torni molto lunghi è infatti possibile che il robot venga montato su di
un asse integrato slitta SCP o colonna CRP; in questo caso l'asse integrato sarà
l'asse 7, mentre il tornio diventerà l'asse 8

OPZIONE ASSE VALORE


Lunghezza asse [mm] 7 /
Tipo asse 7 ROTANTE
Offset asse [mm] 7 /
Override velocità prog 7 X

hs-0-0-mot_04.fm
194 00/0110
Uso dei Posizionatori gestiti da C5G

16.6 PTORB - Posizionatori a 2 assi


perpendicolari
– Posizionatore a due assi basculante-rotante
– Posizionatore a due assi ad L

16.6.1 Posizionatore a due assi basculante-rotante


16.6.1.1 Definizione dei sistemi di riferimento
Il sistema di riferimento di base del posizionatore risulta definito secondo le seguenti
convenzioni (vd. Fig. 16.4):
– l'origine del sistema di riferimento della base (Obase) del posizionatore giace sulla
superficie di appoggio (tipicamente il pavimento);
– l'asse Zbase perpendicolare alla superficie di appoggio ed orientato verso l'alto;
– l'asse Xbase giace sulla superficie di appoggio con direzione parallela al primo asse
di rotazione del posizionatore;
– l'asse Ybase risulta quindi sulla superficie di appoggio in direzione perpendicolare
al primo asse di rotazione del posizionatore.
Il sistema di riferimento della flangia del posizionatore è definito secondo le seguenti
convenzioni (vd. Fig. 16.4):
– l'origine del sistema di riferimento della flangia (Oflangia) giace sulla superficie della
flangia in coincidenza del centro di rotazione del secondo asse del posizionatore;
– l'asse Zflangia deve essere perpendicolare alla superficie della flangia con verso
uscente.

16.6.1.2 Calibrazione
Le convenzioni per la calibrazione sono le seguenti:
– il primo asse deve calibrare in modo tale che l'asse Zflangia sia allineato a Zbase;
– il secondo asse deve calibrare con tutti gli assi del riferimento flangia paralleli ai
corrispettivi del riferimento base; in particolare Yflangia deve essere parallelo a
Ybase ed avere lo stesso verso.

Entrambe le condizioni sono importanti: una eventuale approssimazione nel


rispetto di una di queste compromette la precisione della macchina durante il
movimento cooperativo (il robot non mantiene la posizione sul pezzo!).

Inoltre si tenga presente la convenzione che riguarda i punti P1, P2, P3 descritti nel
Cap. Programma TO_SET - gestione del Tool per il calcolo della $BASE (o
$AUX_BASE) dei posizionatori (vd. Fig. 16.4).

hs-0-0-mot_04.fm
00/0110 195
Uso dei Posizionatori gestiti da C5G

Fig. 16.4 - Definizione dei sistemi di riferimento

1. asse 1
2. asse 2
Xf, Yf = Xflangia, Yflangia
Xb, Yb = Xbase, Ybase

16.6.1.3 Descrizione cinematica

Per configurare questi posizionatori, riferirsi al Manuale USO dell’Unità di


Controllo C5G, Setup Page, paragrafo AUX_AXES.

I parametri necessari per la corretta descrizione cinematica del posizionatore


(lunghezze assi) sono riportati in Fig. 16.5. Esso riporta un generico posizionatore con
indicate le dimensioni che lo caratterizzano e le variabili PDL2 che contengono i
parametri. Si noti che il modello prevede che gli assi 1 e 2 debbano intersecarsi (non ci
devono essere offset).
Occorre inoltre calcolare la velocità da attribuire ai due assi del posizionatore in
programmazione, in funzione della dimensione del pezzo che viene montato sul platò,
in modo che la velocità tangenziale massima non superi il valore imposto di 250 mm/s.
A tale scopo occorre innanzitutto misurare i raggi r1 e r2 massimi del pezzo da lavorare,
come indicato in Fig. 16.5.

Fig. 16.5 - Parametri per la descrizione cinematica del


posizionatore

1 - asse 1 2 - asse 2 3 - pezzo da lavorare

$AX_LEN[ax_logico 1] = L1 $AX_OFST[ax_logico2] = L 2
Ad esempio per un posizionatore formato dagli assi ausiliari 7 e 8: ax_logico 1 = 7 e ax_logico 2 = 8

hs-0-0-mot_04.fm
196 00/0110
Uso dei Posizionatori gestiti da C5G

Nel caso che il pezzo abbia un ingombro inferiore al diametro del platò, r2 deve
risultare pari al raggio del platò stesso. Questo al fine di considerare sempre il
caso peggiore di massimo ingombro del pezzo o della struttura meccanica del
posizionatore in movimento.

Successivamente, il software di configurazione, disponibile su Terminale di


Programmazione, calcola il valore della velocità in manuale.
Seguono due tabelle riassuntive dei dati meccanici utili, assumendo che il posizionatore
sia movimentato, rispettivamente, con gli assi ausiliari 7 e 8.

OPZIONE ASSE VALORE


Lunghezza asse [mm] 7 L1
Tipo asse 7 ROTANTE
Offset asse [mm] 7 /
Override velocità prog 7 X1

OPZIONE ASSE VALORE


Lunghezza asse [mm] 8 /
Tipo asse 8 ROTANTE
Offset asse [mm] 8 L2
Override velocità prog 8 X2

16.6.2 Posizionatore a due assi ad L


16.6.2.1 Definizione dei sistemi di riferimento
Come si avrà modo di notare il sistema di riferimento di base del posizionatore risulta in
una posizione insolita rispetto agli altri posizionatori e cioè la sua origine non giace sulla
superficie di appoggio ma spostata in corrispondenza dell'asse 2 (visto dall'alto). Questo
accade perché il software utilizza lo stesso modello matematico del posizionatore
basculante-rotante che non prevedeva questo tipo di offset.
Il sistema di riferimento di base del posizionatore risulta definito secondo le seguenti
convenzioni (vd. Fig. 16.6):
– l'origine del sistema di riferimento della base (Obase) del posizionatore giace sul
livello della superficie di appoggio (tipicamente il pavimento) sul prolungamento
dell'asse di rotazione 2;
– l'asse Zbase perpendicolare alla superficie di appoggio ed orientato verso l'alto;
– l'asse Xbase giace sulla superficie di appoggio con direzione parallela al primo asse
di rotazione del posizionatore;
– l'asse Ybase risulta quindi sulla superficie di appoggio in direzione perpendicolare
al primo asse di rotazione del posizionatore.
Il sistema di riferimento della flangia del posizionatore è definito secondo le seguenti
convenzioni (vd. Fig. 16.6):
– l'origine del sistema di riferimento della flangia (Oflangia) giace sulla superficie della
flangia in coincidenza del centro di rotazione del secondo asse del posizionatore;

hs-0-0-mot_04.fm
00/0110 197
Uso dei Posizionatori gestiti da C5G

– l'asse Zflangia deve essere perpendicolare alla superficie della flangia con verso
uscente.

16.6.2.1.1 Calibrazione
Le convenzioni per la calibrazione sono le seguenti:
– il primo asse deve calibrare in modo tale che l'asse Zflangia sia allineato a Zbase;
– il secondo asse deve calibrare con tutti gli assi del riferimento flangia paralleli ai
corrispettivi del riferimento base; in particolare Yflangia deve essere parallelo a
Ybase ed avere lo stesso verso.

Entrambe le condizioni sono importanti: una eventuale approssimazione nel


rispetto di una di queste compromette la precisione della macchina durante il
movimento cooperativo (il robot non mantiene la posizione sul pezzo).

Inoltre si tenga presente la convenzione che riguarda i punti P1, P2, P3 descritti nel
Cap. Programma TO_SET - gestione del Tool per il calcolo della $BASE (o
$AUX_BASE) dei posizionatori (vd. Fig. 16.6).

Fig. 16.6 - Definizione dei sistemi di riferimento

1. asse 1
2. asse 2
Xb, Yb, Zb, Ob= Xbase, Ybase, Zbase, Obase Xf, Yf, Zf, Of = Xflangia, Yflangia, Zflangia, Oflangia

16.6.2.2 Descrizione cinematica

Per configurare questi posizionatori, riferirsi al Manuale USO dell’Unità di


Controllo C5G, Setup Page, paragrafo AUX_AXES.

I parametri necessari per la corretta descrizione cinematica del posizionatore


(lunghezze assi) sono riportati in Fig. 16.7. Essa riporta un generico posizionatore con

hs-0-0-mot_04.fm
198 00/0110
Uso dei Posizionatori gestiti da C5G

indicate le dimensioni che lo caratterizzano e le variabili PDL2 che contengono i


parametri. Come si vede non è prevista una lunghezza del braccio che porta l'asse 2 ma
solo due altezze; questo è reso possibile dal fatto che il sistema di riferimento di base
del posizionatore è centrato sull'asse di rotazione 2 (vd. Fig. 16.7). Si noti anche che il
valore corrispondente a L2 deve essere negativo per indicare che la flangia (asse 2) è
ribassata rispetto all'asse 1.
Occorre inoltre calcolare la velocità da attribuire ai due assi del posizionatore in
programmazione, in funzione della dimensione del pezzo che viene montato sul platò,
in modo che la velocità tangenziale massima non superi il valore imposto di 250 mm/s.
A tale scopo occorre innanzitutto misurare i raggi r1 e r2 massimi del pezzo da lavorare,
come indicato in Fig. 16.7.

Fig. 16.7 - Parametri per la descrizione cinematica del


posizionatore

1 - asse 1 2 - asse 2 3 - pezzo da lavorare

$AX_LEN[ax_logico1] = L1 $AX_OFST[ax_logico2] = -L2


Ad esempio per un posizionatore formato dagli assi ausiliari 7 e 8: ax_logico1 = 7 e ax_logico2 = 8

Nel caso che il pezzo abbia un ingombro inferiore al diametro del platò, r2 deve
risultare pari al raggio del platò stesso; così pure per r1 deve essere utilizzato un
valore minimo pari a r1m per tenere conto della struttura meccanica dell'asse 7.
Questo al fine di considerare sempre il caso peggiore di massimo ingombro del
pezzo o della struttura meccanica del posizionatore in movimento.

Successivamente, il software di configurazione, disponibile su Terminale di


Programmazione, calcola il valore della velocità in manuale.
Seguono due tabelle riassuntive dei dati meccanici utili, assumendo che il posizionatore
sia movimentato, rispettivamente, con gli assi ausiliari 7 e 8.

OPZIONE ASSE VALORE


Lunghezza asse [mm] 7 L1
Tipo asse 7 ROTANTE
Offset asse [mm] 7 /
Override velocità prog 7 X1

OPZIONE ASSE VALORE


Lunghezza asse [mm] 8 /

hs-0-0-mot_04.fm
00/0110 199
Uso dei Posizionatori gestiti da C5G

Tipo asse 8 ROTANTE


Offset asse [mm] 8 -L2
Override velocità prog 8 X2

16.7 Posizionatori a 2 assi non perpendicolari tipo


PTORB-alfa
16.7.1 Definizione dei sistemi di riferimento
Il sistema di riferimento di base del posizionatore risulta definito secondo le seguenti
convenzioni (vd. Fig. 16.8):
– L'origine del sistema di riferimento della base (Obase) del posizionatore giace sulla
superficie di appoggio (tipicamente il pavimento);
– l'asse Zbase perpendicolare alla superficie di appoggio ed orientato verso l'alto;
– l'asse Xbase giace sulla superficie di appoggio ed è perpendicolare ai due assi del
posizionatore;
– l'asse Ybase risulta di conseguenza con direzione indicata in .
Il sistema di riferimento della flangia del posizionatore è definito secondo le seguenti
convenzioni (vd. Fig. 16.8):
– l'origine del sistema di riferimento della flangia (Oflangia) giace sulla superficie della
flangia in coincidenza del centro di rotazione del secondo asse del posizionatore;
– l'asse Zflangia deve essere perpendicolare alla superficie della flangia con verso
uscente.

Fig. 16.8 - Definizione dei sistemi di riferimento

1. asse 1
2. asse 2
Xb, Yb, Zb, Ob= Xbase, Ybase , Zbase, Obase
Xf, Yf, Zf, Of = Xflangia, Yflangia, Zflangia, Oflangia

hs-0-0-mot_04.fm
200 00/0110
Uso dei Posizionatori gestiti da C5G

16.7.2 Calibrazione
Le convenzioni per la calibrazione sono le seguenti:
– il primo asse deve calibrare in modo tale che l'asse Zflangia sia parallelo a Zbase;
– il secondo asse deve calibrare con tutti gli assi del riferimento flangia paralleli ai
corrispettivi del riferimento base; in particolare Yflangia deve essere parallelo a
Ybase ed avere lo stesso verso.

Entrambe le condizioni sono importanti: una eventuale approssimazione nel


rispetto di una di queste compromette la precisione della macchina durante il
movimento cooperativo (il robot non mantiene la posizione sul pezzo).

Inoltre si tenga presente la convenzione che riguarda i punti P1, P2, P3 descritti nel
Cap. Programma TO_SET - gestione del Tool per il calcolo della $BASE (o
$AUX_BASE) dei posizionatori (vd. Fig. 16.8).

16.7.3 Descrizione cinematica

Per configurare questi posizionatori, riferirsi al Manuale USO dell’Unità di


Controllo C5G, Setup Page, paragrafo AUX_AXES.

I parametri necessari per la corretta descrizione cinematica del posizionatore


(lunghezze assi ed angoli) sono riportati in Fig. 16.9. Essa riporta un generico
posizionatore con indicate le dimensioni che lo caratterizzano e le variabili PDL2 che
contengono i parametri.
Occorre inoltre calcolare la velocità da attribuire ai due assi del posizionatore in
programmazione, in funzione della dimensione del pezzo che viene montato sul platò,
in modo che la velocità tangenziale massima non superi il valore imposto di 250
mm/sec. A tale scopo occorre innanzitutto misurare i raggi r1 e r2 massimi del pezzo da
lavorare, come indicato nella seguente Fig. 16.9.

Fig. 16.9 - Parametri per la descrizione cinematica del


posizionatore

1 - pezzo da lavorare L1=$AX_LEN[ax_logico1] L2=$AX_OFST[ax_logico2]


L3=$AX_LEN[ax_logico2] alfa(con alfa diverso da 90°)=$AX_OFST[ax_logico1]
Ad esempio per un posizionatore formato dagli assi ausiliari 7 e 8: ax_logico 1 = 7 e ax_logico2 = 8

hs-0-0-mot_04.fm
00/0110 201
Uso dei Posizionatori gestiti da C5G

Nel caso che il pezzo abbia un ingombro inferiore al diametro del platò, r2 deve
risultare pari al raggio del platò stesso r2m; così pure per r1 deve essere utilizzato
un valore minimo pari a r1m per tenere conto della struttura meccanica dell'asse 7.
Questo al fine di considerare sempre il caso peggiore di massimo ingombro del
pezzo o della struttura meccanica del posizionatore in movimento.

Successivamente, il software di configurazione, disponibile su Terminale di


Programmazione, calcola il valore della velocità in manuale.
Seguono due tabelle riassuntive dei dati meccanici utili, assumendo che il posizionatore
sia movimentato, rispettivamente, con gli assi ausiliari 7 e 8.

OPZIONE ASSE VALORE


Lunghezza asse [mm] 7 L1
Tipo asse 7 ROTANTE
Offset asse [mm] 7 *
Override velocità prog 7 X1

Si noti che deve essere inserito il valore assoluto dell’angolo alfa anche se l’unità
di misura dell’offset asse risulta data in millimetri.

OPZIONE ASSE VALORE


Lunghezza asse [mm] 8 L3
Tipo asse 8 ROTANTE
Offset asse [mm] 8 L2
Override velocità prog 8 X2

16.8 Assi integrati di posizionamento robot


– Slitta integrata
– Colonna rotante integrata
– Portale 3 assi lineari
– Portale 2 assi lineari
– Colonna traslo-rotante integrata

16.8.1 Slitta integrata


Riguarda la configurazione di robot appoggiato ad una slitta lineare movimentata da un
asse ausiliario.
Per movimento integrato si intende che il calcolo della posizione del TCP tiene conto
della posizione della slitta (solo asse X). In altre parole la slitta è integrata nella
cinematica diretta del sistema di assi.
Questo ha due effetti pratici:

hs-0-0-mot_04.fm
202 00/0110
Uso dei Posizionatori gestiti da C5G

– le posizioni cartesiane (POSITION) sono definite nello spazio della cella


indipendentemente dalla posizione dell'asse della slitta lineare e quindi muovendo
anche solo la slitta viene modificata la posizione cartesiana;
– muovendo manualmente (jog) la slitta in un riferimento cartesiano (ad esempio jog
BASE), la posizione del TCP rimane invariata grazie allo spostamento degli assi
del robot che compensano lo spostamento.

Sul Terminale di Programmazione l'asse lineare può essere mosso, nelle modalità
cartesiane, utilizzando i tasti 7+ e 7- e non è possibile abilitare o disabilitare
l'integrazione della slitta in tempo reale (è necessaria una ripartenza del
Controllore).

16.8.1.1 Definizione dei sistemi di riferimento


Il sistema di riferimento di base della slitta integrata risulta definito secondo le seguenti
convenzioni (vd. Fig. 16.10):
– L'origine del sistema di riferimento della base (Obase) della slitta giace sulla
superficie di appoggio (tipicamente il pavimento);
– l'asse Zbase perpendicolare alla superficie di appoggio ed orientato verso l'alto;
– l'asse Xbase giace sulla superficie di appoggio ed è orientato nel senso della corsa
positiva;
– l'asse Ybase risulta di conseguenza con direzione indicata in Fig. 16.10.
Non viene gestito il riferimento dell'asse Z della variabile $BASE alla slitta e quindi
questo rimane legato alla posizione della base del robot.
Sulla slitta è ricavata la flangia di attacco della base del robot che può essere
posizionato soltanto in piedi con la base sempre perpendicolare all'asse di movimento
della slitta.
Sono viceversa ammesse 4 posizioni di orientamento (a passi di 90°) della base del
robot rispetto alla base della slitta (vd. Fig. 16.12).

Fig. 16.10 - Definizione dei sistemi di riferimento

1 - riferimento della base della slitta 2 - base del robot

Xbs , Ybs, Zbs = Xbase_slitta, Ybase_slitta, Zbase_slitta Xbr, Ybr, Zbr = Xbase_robot, Ybase_robot, Zbase_robot

hs-0-0-mot_04.fm
00/0110 203
Uso dei Posizionatori gestiti da C5G

16.8.1.2 Calibrazione
La posizione di calibrazione della slitta normalmente è fissata in prossimità del limite
negativo della corsa e contrassegnata con la tacca di azzeramento.
Essendo un asse integrato non è trattato come un posizionatore del pezzo da lavorare
e quindi non occorre effettuare il rilievo dei punti P1, P2 e P3 descritti nel
Cap. Programma TO_SET - gestione del Tool.

16.8.1.3 Descrizione cinematica

Per configurare la slitta integrata, riferirsi al Manuale USO dell’Unità di Controllo


C5G, Setup Page, paragrafo AUX_AXES.

I parametri necessari per la corretta descrizione cinematica della slitta integrata sono
riportati in Fig. 16.11.
Successivamente, il software di configurazione, disponibile su Terminale di
Programmazione, calcola il valore della velocità in manuale.
Segue una tabella riassuntiva dei dati meccanici utlili, tenendo presente che è tassativo
che la slitta integrata sia movimentata con l'asse ausiliario 7.

OPZIONE ASSE VALORE


Lunghezza asse [mm] 7 L
Tipo asse 7 TRASLANTE
Offset asse [mm] 7 H
Override velocità prog 7 X

Fig. 16.11 - Parametri per la descrizione cinematica della slitta


integrata

L = corsa utile slitta Xbs, Ybs , Zbs = Xbase_slitta, Ybase_slitta, Zbase_slitta

Oltre ai dati geometrici L e H sopra indicati, per la completa descrizione cinematica della
slitta integrata deve essere definito anche l’angolo di montaggio:
– rotazione di 180° ==> Xbase_robot in direzione opposta a Xbase_slitta;

hs-0-0-mot_04.fm
204 00/0110
Uso dei Posizionatori gestiti da C5G

– rotazione di 0° ==> Xbase_robot nella direzione della Xbase_slitta;


– rotazione di 270° ==> Xbase_robot in direzione opposta a Ybase_slitta ;
– rotazione di 90° ==> Xbase_robot nella direzione della Ybase_slitta;

Fig. 16.12 - Angolo di montaggio

Xbs , Ybs = Xbase_slitta, Ybase_slitta Xbr, Ybr = Xbase_robot, Ybase_robot

16.8.2 Colonna rotante integrata


Riguarda la configurazione di robot appoggiato o appeso ad una leva su colonna rotante
movimentata da un asse ausiliario.
Per movimento integrato si intende che il calcolo della posizione del TCP tiene conto
della posizione della colonna. In altre parole la colonna è integrata nella cinematica
diretta del sistema di assi.
Questo ha due effetti pratici:
– le posizioni cartesiane (POSITION) sono definite nello spazio della cella
indipendentemente dalla posizione dell'asse della colonna rotante e quindi
muovendo anche solo la colonna viene modificata la posizione cartesiana;
– muovendo manualmente (jog) la colonna in un riferimento cartesiano (ad esempio
jog BASE), la posizione del TCP rimane invariata grazie allo spostamento degli
assi del robot che compensano lo spostamento della leva.

Sul Terminale di Programmazione l'asse rotante può essere mosso, nelle


modalità cartesiane, utilizzando i tasti 7+ e 7- e non è possibile abilitare o
disabilitare l'integrazione della colonna in tempo reale.

16.8.2.1 Definizione dei sistemi di riferimento


Il sistema di riferimento di base della colonna integrata (definito mediante la variabile
$BASE) risulta definito secondo le seguenti convenzioni (vd. Fig. 16.13):
– L'origine del sistema di riferimento della base (Obase) della colonna giace sulla
superficie di appoggio (tipicamente il pavimento);
– l'asse Zbase perpendicolare alla superficie di appoggio ed orientato verso l'alto;
– l'asse Xbase giace sulla superficie di appoggio ed è orientato nel senso della trave
a sbalzo di sostegno del robot in posizione di calibrazione (vd. Fig. 16.13);
– l'asse Ybase risulta di conseguenza con direzione indicata in Fig. 16.13.
Sulla trave a sbalzo (leva) è ricavata la flangia di attacco della base del robot che può
essere posizionato soltanto in due posizioni: o appeso alla leva (vd. Fig. 16.13) o

hs-0-0-mot_04.fm
00/0110 205
Uso dei Posizionatori gestiti da C5G

appoggiato sulla leva (robot in piedi). Pertanto la base del robot dovrà essere sempre
perpendicolare all'asse di rotazione della colonna.
Sono viceversa ammesse 4 posizioni di orientamento (a passi di 90°) della base del
robot rispetto alla base della colonna e anche il verso positivo della rotazione è
liberamente selezionabile.

Fig. 16.13 - Definizione dei sistemi di riferimento

1 - rotazione della colonna 2 - riferimento della base della colonna 3 - base del robot

Xb, Yb, Zb = Xbase, Ybase, Zbase

16.8.2.2 Calibrazione
La posizione di calibrazione della colonna è determinata a metà della corsa utile e
contrassegnata con la tacca di azzeramento.
Essendo un asse integrato non è trattato come un posizionatore del pezzo da lavorare
e quindi non occorre effettuare il rilievo dei punti P1, P2 e P3 descritti nel
Cap. Programma TO_SET - gestione del Tool.

16.8.2.3 Descrizione cinematica


I parametri necessari per la corretta descrizione cinematica della colonna integrata sono
riportati in Fig. 16.14.
Occorre inoltre calcolare la velocità di rotazione da attribuire alla colonna in
programmazione, in modo che la velocità tangenziale massima non superi il valore di
250 mm/s (vedi normativa vigente). A tale scopo occorre innanzitutto misurare il raggio
r di massima estensione del robot completo di utensile montato sulla flangia, come
indicato in Fig. 16.14.
Successivamente, il software di configurazione, disponibile da Terminale di
Programmazione, calcola il valore della velocità in manuale.

Fig. 16.14 - Parametri per la descrizione cinematica della colonna


integrata - 1

1 - rotazione destrorsa della colonna R = raggio della colonna H = altezza della colonna
Xb, Yb, Zb = Xbase, Ybase, Zbase L’asse è destrorso: in caso contrario modificare il segno del rapporto di
trasmissione.

hs-0-0-mot_04.fm
206 00/0110
Uso dei Posizionatori gestiti da C5G

Segue una tabella riassuntiva dei dati meccanici utili, tenendo presente che è tassativo
che la colonna integrata sia movimentata con l'asse ausiliario 7.

OPZIONE ASSE VALORE


(7) Lunghezza asse [mm] 7 R
(13) Tipo asse 7 ROTANTE
(15) Offset asse [mm] 7 H
(18) Override velocità prog 7 X

Oltre ai dati geometrici R e H sopra indicati, per la completa descrizione cinematica della
colonna integrata devono essere definiti anche i seguenti dati booleani:
– un bit UpDown che indica se il robot sia appoggiato verso l'alto (TRUE) o se sia
capovolto (FALSE) (come in Fig. 16.14);
– due valori booleani che indicano come sia orientata la base del robot rispetto alla
base della colonna (questa convenzione è stata mantenuta identica a quanto
previsto per la slitta integrata per ragioni di compatibilità); in particolare la
convenzione è la seguente (vd. Fig. 16.15):
• rotazione di 180° - Xbase_robot in direzione opposta a Xbase_colonna ;
• rotazione di 0° - Xbase_robot nella direzione della Xbase_colonna ;
• rotazione di 270° - Xbase_robot in direzione opposta a Ybase_colonna ;
• rotazione di 90° - Xbase_robot nella direzione della Ybase_colonna ;

Fig. 16.15 - Parametri per la descrizione cinematica della colonna


integrata - 2

Xbc , Ybc = Xbase_colonna, Ybase_colonna Xbr, Ybr = Xbase_robot, Ybase_robot

16.8.3 Portale 3 assi lineari


Riguarda la configurazione di robot appoggiato su un portale, composto da tre assi
lineari ausiliari integrati.
Per movimento integrato si intende che il calcolo della posizione del TCP tiene conto
della posizione del portale (e quindi dei tre assi, X, Y e Z), oltre che quella della
configurazione del robot; in questa ottica, il portale è integrato nella cinematica diretta
del sistema di assi.
Gli effetti di questa configurazione sono i seguenti:
– le posizioni cartesiane (POSITION) sono definite nello spazio della cella,
indipendentemente dalla posizione degli assi del portale, ne consegue che
muovendo anche solo gli assi del portale viene modificata la posizione cartesiana;

hs-0-0-mot_04.fm
00/0110 207
Uso dei Posizionatori gestiti da C5G

– muovendo manualmente (JOG) gli assi che compongono il portale, in un


riferimento cartesiano (ad esempio JOG in riferimento BASE), la posizione del
TCP rimarrà invariata grazie allo spostamento degli assi del robot che
compensano lo spostamento del portale.

Sul Terminale di Programmazione, gli assi lineari possono essere mossi, nelle
modalità cartesiane, utilizzando i tasti AUX A - AUX B (selezionando a due a due
gli assi che si desidera movimentare).
E' inoltre possibile movimentare il portale utilizzando i tasti del JPAD, dove ogni
coppia di tasti permette di movimentare un singolo asse del portale.
Per ulteriori informazioni riguardanti i tasti AUX A - AUX B e il JPAD, riferirsi al
manuale Uso dell’Unità di Controllo C5G - par. 6.2.1.2 Tasti neri - Cap.6 Uso del
Terminale di Programmazione

16.8.3.1 Definizione dei sistemi di riferimento


Il sistema di riferimento di base del Portale a 3 assi lineari integrato risulta definito
secondo le convenzioni (vd. Fig. 16.16):
– l'origine del sistema di riferimento della base (Obase) del portale giace sulla
superficie di appoggio;
– l'asse Zbase perpendicolare alla superficie di appoggio, da essa uscente ed
orientato nel senso della corsa positiva dell'asse Z;
– l'asse Xbase giace sulla superficie di appoggio ed è orientato nel senso della corsa
positiva dell'asse X;
– l'asse Ybase risulta di conseguenza.
Sul portale è ricavata la flangia di attacco della base del robot.
E' possibile configurare l'angolo di montaggio della base del robot.
E' inoltre possibile configurare il tipo di asse (X, Y e Z) per ognuno dei tre assi presenti
nel portale (tenendo comunque presente che il primo dei tre deve essere l'asse 7 e che
i successivi assi sono consecutivi).

Fig. 16.16 - Definizione dei sistemi di riferimento

hs-0-0-mot_04.fm
208 00/0110
Uso dei Posizionatori gestiti da C5G

16.8.3.2 Calibrazione
La posizione di calibrazione del portale, normalmente è fissata in prossimità del limite
negativo della corsa di ogni singolo asse ausiliario, contrassegnato con la tacca di
azzeramento su ogni asse ausiliario.

16.8.3.3 Decrizione cinematica


I parametri necessari per la corretta descrizione cinematica del portale a 3 assi lineari
sono riportati in Fig. 16.7.
Successivamente, il software di configurazione, disponibile da Terminale di
Programmazione, calcola la velocità in manuale.

Per configurare il Portale a 3 assi lineari, riferirsi al Manuale USO dell'Unità di


Controllo C5G, Setup Page, par. AUX_AXES.

Fig. 16.17 - Parametri per la descrizione cinematica del Portale a 3


assi lineari

Segue una tabella riassuntiva dei dati meccanici utili, tenendo presente che è tassativo
che il primo asse del portale sia il 7 e che i successivi siano consecutivi all'asse 7.

OPZIONE ASSE VALORE


Lunghezza asse [mm] 7 L1
Tipo asse [Tras/Rot] 7 Traslante
Offset asse [mm] 7 H
Tipo asse [Coord] 7 [X,Y,Z]

hs-0-0-mot_04.fm
00/0110 209
Uso dei Posizionatori gestiti da C5G

OPZIONE ASSE VALORE


Lunghezza asse [mm] 8 L2
Tipo asse [Tras/Rot] 8 Traslante
Tipo asse [Coord] 8 [X,Y,Z]
Lunghezza asse [mm] 9 L3
Tipo asse [Tras/Rot] 9 Traslante
Tipo asse [Coord] 9 [X,Y,Z]
Oltre ai dati geometrici sopra indicati, per la completa descrizione cinematica del portale
a 3 assi lineari deve anche essere specificato l'angolo di montaggio della base del robot
sulla flangia del portale.

16.8.4 Portale 2 assi lineari


Riguarda la configurazione di robot appoggiato su un portale, composto da due assi
lineari ausiliari integrati.
Per movimento integrato si intende che il calcolo della posizione del TCP tiene conto
della posizione del portale (e quindi dei due assi, XY, XZ e YZ), oltre che quella della
configurazione del robot; in questa ottica, il portale è integrato nella cinematica diretta
del sistema di assi.
Gli effetti di questa configurazione sono i seguenti:
– le posizioni cartesiane (POSITION) sono definite nello spazio della cella
indipendentemente dalla posizione degli assi del portale, ne consegue che
muovendo anche solo gli assi del portale viene modificata la posizione cartesiana;
– muovendo manualmente (JOG) gli assi che compongono il portale in un
riferimento cartesiano (ad esempio JOG in riferimento BASE), la posizione del
TCP rimarrà invariata grazie allo spostamento degli assi del robot che
compensano lo spostamento del portale.

Sul Terminale di Programmazione, gli assi lineari possono essere mossi, nelle
modalità cartesiane, utilizzando i tasti AUX A - AUX B (selezionando a due a due
gli assi che si desidera movimentare).
Per ulteriori informazioni riguardanti i tasti AUX A - AUX B, riferirsi al manuale Uso
dell’Unità di Controllo C5G - par. Tasti neri - Cap. Uso del Terminale di
Programmazione.

16.8.4.1 Definizione dei sistemi di riferimento


Il sistema di riferimento di base del portale a 2 assi lineari integrato risulta definito
secondo le convenzioni (vd. Fig. 16.18):
– l'origine del sistema di riferimento della base (Obase) del portale giace sulla
superficie di appoggio;
– l'asse Zbase perpendicolare alla superficie di appoggio, da essa uscente ed
orientato nel senso della corsa positiva dell'asse Z;
– l'asse Ybase giace sulla superficie di appoggio ed è orientato nel senso della corsa
positiva dell'asse Y;
– l'asse Xbase risulta di conseguenza.
Sul portale è ricavata la flangia di attacco della base del robot.

hs-0-0-mot_04.fm
210 00/0110
Uso dei Posizionatori gestiti da C5G

E' possibile configurare l'angolo di montaggio della base del robot.


E' inoltre possibile configurare il tipo di asse (X, Y e Z) per ognuno dei due assi presenti
nel portale (tenendo comunque presente che il primo dei due deve essere l'asse 7 e che
il successivo asse è consecutivo).

Fig. 16.18 - Definizione dei sistemi di riferimento

16.8.4.2 Calibrazione
La posizione di calibrazione del portale normalmente è fissata in prossimità del limite
negativo della corsa di ogni singolo asse ausiliario, contrassegnato con la tacca di
azzeramento su ogni asse ausiliario.

16.8.4.3 Decrizione cinematica

Per configurare il Portale a 2 assi lineari, riferirsi al Manuale USO dell'Unità di


Controllo C5G, Setup Page, par. AUX_AXES.

I parametri necessari per la corretta descrizione cinematica del portale a 2 assi lineari
sono riportati in Fig. 16.19.
Successivamente, il software di configurazione, disponibile da Terminale di
Programmazione, calcola la velocità in manuale.
Segue una tabella riassuntiva dei dati meccanici utili, tenendo presente che è tassativo
che il primo asse del portale sia il 7 e che il successivo sia consecutivo all'asse 7.

OPZIONE ASSE VALORE


Lunghezza asse [mm] 7 L1
Tipo asse [Tras/Rot] 7 Traslante
Offset asse [mm] 7 H
Tipo asse [Coord] 7 [X,Y,Z]
Lunghezza asse [mm] 8 L2
Tipo asse [Tras/Rot] 8 Traslante
Tipo asse [Coord] 8 [X,Y,Z]

hs-0-0-mot_04.fm
00/0110 211
Uso dei Posizionatori gestiti da C5G

Fig. 16.19 - Parametri per la descrizione cinematica del Portale a 2


assi lineari

Oltre ai dati geometrici sopra indicati, per la completa descrizione cinematica del portale
a 2 assi lineari deve anche essere specificato l'angolo di montaggio della base del robot
sulla flangia del portale.

16.8.5 Colonna traslo-rotante integrata


Riguarda la configurazione di robot appoggiato o appeso ad una leva su colonna rotante
movimentata da un asse ausiliario appoggiata a sua volta su una slitta lineare
movimentata da un secondo asse ausiliario.
Per movimento integrato si intende che il calcolo della posizione del TCP tiene conto
della posizione della colonna e della slitta sulla quale è appoggiata, oltre che quella della
configurazione del robot; in questa ottica, la colonna traslo-rotante è integrata nella
cinematica diretta del sistema di assi.
Gli effetti di questa configurazione sono i seguenti:
– le posizioni cartesiane (POSITION) sono definite nello spazio della cella
indipendentemente dalla posizione dell'asse della colonna e da quello della slitta,
ne consegue che muovendo anche solo gli assi della colonna traslo-rotante viene
modificata la posizione cartesiana;
– muovendo manualmente (JOG) gli assi che compongono la colonna in un
riferimento cartesiano (ad esempio JOG in riferimento BASE), la posizione del
TCP rimarrà invariata grazie allo spostamento degli assi del robot che