Lezione 8 di 18

RI Lezione 08

🤖 Robotica Industriale · IV Anno · Lezione 08

Teaching dei punti P[ ] 📍

Registrazione posizioni · Modifica coordinate · Nomenclatura · Gestione sicura dei punti

⏱️ Durata stimata: 60–75 min 📊 Livello: Intermedio (IV anno) 🔧 Strumenti: Simulatore web · Editor TP · Pannello IK 📋 Prerequisiti: Lezioni 06–07

🎯 Obiettivi della lezione

  • Comprendere cosa contiene un registro P[ ] e come viene salvato dal controller
  • Usare le tre modalità di registrazione di un punto: jog+teach, IK diretta, modifica manuale
  • Applicare convenzioni di nomenclatura professionali per i punti di un programma
  • Modificare in sicurezza le coordinate di un punto già registrato
  • Gestire i punti non insegnati (uninitialized) e prevenire gli errori di esecuzione correlati

📖 1. Teoria

1.1 — Cosa contiene un registro P[ ]

Un registro di posizione P[ ] non è solo una coordinata XYZ — è un blocco di dati completo che descrive completamente lo stato del TCP e del robot in quel momento. Riprendiamo la struttura vista in Lezione 03, ora che sappiamo cosa significa ogni campo:

P[3] = {
  GP1:
    UF : 0,                  // User Frame di riferimento (0 = World)
    UT : 1,                  // Tool Frame attivo al momento del teach
    X = 250.000 mm,        // posizione TCP
    Y = 0.000 mm,
    Z = 200.000 mm,
    W = 180.000 deg,       // orientamento TCP (Yaw/Pitch/Roll)
    P = 0.000 deg,
    R = 0.000 deg,
    Config : N U T, 0, 0, 0 // configurazione robot (Lez. 05)
}

Il campo UF (User Frame) e UT (Tool Frame) sono fondamentali: indicano in quale sistema di riferimento sono espresse le coordinate. Se cambi il Tool Frame attivo dopo aver insegnato i punti, le coordinate X/Y/Z/W/P/R non cambiano nel file, ma il robot si muoverà in una posizione diversa da quella insegnata — una delle cause più comuni di incidenti in reparto.

⚠️ Regola d’oro: insegna sempre tutti i punti di un programma con lo stesso User Frame e lo stesso Tool Frame attivi. Non cambiare UF o UT a metà programma senza ri-insegnare tutti i punti.

1.2 — Tre modalità di registrazione di un punto

MODO 1
Jog + Teach (teach manuale)
Muovi il robot fisicamente (o nel simulatore) con il jog fino alla posizione desiderata, poi premi il tasto SHIFT + F5 (TOUCHUP) sull’iPendant — o il pulsante TEACH nel simulatore. Il controller salva la posizione corrente degli assi e la converte nelle coordinate cartesiane P[ ].
✅ Preciso — la posizione è quella reale del robot
✅ Rispecchia collisioni e limiti reali
✅ Metodo standard in produzione
⚠️ Richiede tempo per posizionare fisicamente il robot
⚠️ Dipende dalla bravura dell’operatore nel jog
MODO 2
IK diretta (inserimento coordinate)
Inserisci direttamente i valori X, Y, Z, W, P, R nel pannello di posizione senza muovere fisicamente il robot. Il controller calcola la cinematica inversa e registra il punto. Nel simulatore corrisponde al pannello IK → MUOVI IK → TEACH.
✅ Veloce — inserimento numerico diretto
✅ Preciso al decimo di mm
✅ Ideale per geometrie note (es. da disegno tecnico)
⚠️ Non verifica interferenze fisiche
⚠️ Richiede conoscenza delle coordinate esatte
MODO 3
Modifica manuale post-teach
Insegna un punto con il Modo 1, poi apri l’editor di posizione e modifica un singolo valore numerico (es. abbassa Z di 5 mm). Usato per affinare un punto senza ri-insegnarlo completamente o per creare punti derivati (es. punto di approccio = punto di lavoro + 150 mm in Z).
✅ Ideale per aggiustamenti fini
✅ Crea rapidamente punti “derivati”
✅ Non richiede di muovere il robot
⚠️ Facile sbagliare asse o unità
⚠️ Verificare sempre il risultato con un test lento

1.3 — Convenzioni di nomenclatura professionale

Usare P[1], P[2], P[3]… va bene per esercizi, ma in un programma di produzione reale con 20–50 punti diventa impossibile da gestire. Le convenzioni professionali usano blocchi numerici per funzione e commenti descrittivi:

Range P[ ] Funzione Esempio
P[1] Home / posizione di riposo Sempre P[1], fisso e documentato
P[10]–P[19] Punti zona presa P[10]=approccio, P[11]=presa, P[12]=risalita
P[20]–P[29] Punti zona deposito P[20]=approccio, P[21]=deposito, P[22]=risalita
P[30]–P[39] Punti traiettoria processo P[30]–P[35] = sequenza saldatura/dispensing
P[90]–P[99] Punti di sicurezza / emergenza P[99] = posizione safe secondaria

Sul controller FANUC è possibile aggiungere un commento testuale a ogni P[ ] (max 16 caratteri). Nell’editor di posizione si vede così:

P[ 1:HOME ]
P[10:APPR_PICK ]  // approccio sopra zona presa
P[11:PICK ]  // punto di presa
P[20:APPR_PLACE ]  // approccio sopra zona deposito
P[21:PLACE ]  // punto di deposito

1.4 — Punti non insegnati (Uninitialized) e come gestirli

Un P[ ] a cui non è stata ancora registrata nessuna posizione si dice uninitialized. Se un programma tenta di eseguire un movimento verso un punto uninitialized, il controller blocca l’esecuzione con un errore:

MOTN-017 Position not taught (GROUP:1 POSREG:P[5])

Sul controller reale è possibile verificare lo stato di tutti i P[ ] dalla schermata DATA → Position Registers. I punti non insegnati mostrano ***** al posto delle coordinate.

Checklist pre-esecuzione programma
☐ Tutti i P[ ] usati nel programma sono stati insegnati (nessun *****)
☐ UF e UT sono gli stessi usati durante il teach
☐ Tutti i punti hanno la stessa configurazione (N U T preferibilmente)
☐ Il primo punto del programma è raggiungibile dalla posizione attuale del robot
☐ Test eseguito in STEP a bassa velocità prima del ciclo automatico

1.5 — Modifica sicura di un punto già in produzione

Modificare un punto in un programma già in produzione è un’operazione ad alto rischio — il robot potrebbe muoversi in una posizione inaspettata al ciclo successivo. La procedura corretta è:

  1. Ferma il programma in ciclo automatico — non modificare mai un punto con il robot in movimento.
  2. Porta il robot manualmente (jog, modalità T1) vicino al punto da modificare per verificare la situazione reale.
  3. Effettua la modifica: ri-teach con jog o modifica numerica nell’editor di posizione.
  4. Esegui in STEP l’intero ciclo (o almeno la sequenza che include il punto modificato) a velocità ridotta (override 10–20%).
  5. Solo se il STEP è corretto, ripristina il ciclo automatico a velocità di produzione.
  6. Documenta la modifica: data, chi ha modificato, motivo — nel commento del programma o in un registro esterno.

💻 2. Esempi guidati nel simulatore

Esempio A — Confronto tra le tre modalità di teach

Obiettivo: registrare lo stesso punto X=300, Y=0, Z=200, W=180, P=0, R=0 con tre metodi diversi e verificare che il risultato sia identico.
Modo 1 — Jog + Teach
  1. Usa jog WORLD per portare il TCP a X≈300, Y≈0, Z≈200 (usa il pannello posizione per monitorare).
  2. Con jog WORLD affina i valori fino a X=300.0, Y=0.0, Z=200.0 (±1 mm).
  3. Premi TEACH nell’editor TP → registra come P[10]. Annota i valori salvati.
Modo 2 — IK diretta
  1. Nel pannello IK inserisci esattamente X=300, Y=0, Z=200, W=180, P=0, R=0.
  2. Premi MUOVI IK: il robot va esattamente in quella posizione.
  3. Premi TEACH → registra come P[11]. Confronta con P[10]: X, Y, Z, W, P, R dovrebbero essere identici (o quasi); la stringa di configurazione dovrebbe essere uguale.
Modo 3 — Modifica post-teach
  1. Registra il robot in qualunque posizione come P[12] con TEACH.
  2. Apri l’editor di posizione di P[12] e modifica manualmente i valori: X=300, Y=0, Z=200, W=180, P=0, R=0.
  3. Salva. Ora P[12] ha le stesse coordinate di P[10] e P[11] ma non è stato insegnato con il jog.
  4. Esegui J P[12] 30% FINE: il robot dovrebbe andare nella stessa posizione di P[10] e P[11].

Esempio B — Costruire punti di approccio per derivazione

Il pattern più efficiente per creare i punti alti di approccio è insegnare il punto di lavoro preciso, poi derivare il punto di approccio modificando solo Z.

  1. Con IK insegna il punto di presa preciso: X=260, Y=0, Z=35 → registra come P[11].
  2. Apri l’editor di posizione di P[11]. Copia tutti i valori a mente: X=260, Y=0, Z=35, W=180, P=0, R=0, Config=NUT.
  3. Registra il robot in qualunque posizione come P[10] (placeholder).
  4. Apri l’editor di P[10] e inserisci: X=260, Y=0, Z=185 (35 + 150), W=180, P=0, R=0. Stessa configurazione di P[11].
  5. Verifica eseguendo: J P[10] 50% FINE poi L P[11] 150mm/sec FINE. Il TCP deve scendere verticalmente di esattamente 150 mm.
  6. Ripeti per il punto di deposito: P[21] = punto deposito, P[20] = P[21] con Z+150.

Esempio C — Programma completo con nomenclatura professionale

Definizione punti (da insegnare prima di eseguire il programma):
P[ ]CommentoCoordinateMetodo
P[1]HOMEJ1=0,J2=–10,J3=20,J4=0,J5=–90,J6=0Jog+Teach
P[10]APPR_PICKX=260, Y=0, Z=185Derivato da P[11]
P[11]PICKX=260, Y=0, Z=35IK diretta
P[20]APPR_PLACEX=260, Y=160, Z=185Derivato da P[21]
P[21]PLACEX=260, Y=160, Z=35IK diretta
! === PICK AND PLACE — nomenclatura professionale ===
! Autore: Prof. Bertolino Data: –/–/—-

! — HOME —
1: J P[1:HOME ] 100% FINE

! — ZONA PRESA —
2: J P[10:APPR_PICK] 80% CNT100
3: L P[11:PICK ] 150mm/sec FINE
! [presa pezzo]
4: L P[10:APPR_PICK] 150mm/sec FINE

! — ZONA DEPOSITO —
5: J P[20:APPR_PLAC] 80% CNT100
6: L P[21:PLACE ] 150mm/sec FINE
! [deposito pezzo]
7: L P[20:APPR_PLAC] 150mm/sec FINE

! — RITORNO HOME —
8: J P[1:HOME ] 100% FINE

🏋️ 3. Esercizi

🟢 Esercizio 1 — Decodifica un P[ ] (Facile)

Dato il seguente registro di posizione, rispondi alle domande:

P[15] = { GP1: UF:2, UT:3,
  X=180.500mm, Y=–45.200mm, Z=120.000mm,
  W=180.000deg, P=0.000deg, R=90.000deg,
  Config: N U T, 0, 0, 0 }

a) In quale User Frame sono espresse le coordinate?
b) Quale Tool Frame era attivo al momento del teach?
c) Cosa indica R=90°? Come è orientato il tool rispetto alla configurazione standard W=180, P=0, R=0?
d) Se cambiassi UT da 3 a 1 prima di eseguire il programma, cosa succederebbe?
e) La configurazione N U T: il gomito è alto o basso?

🔵 Esercizio 2 — Costruzione punti per derivazione (Medio)

Senza usare il jog, costruisci per derivazione i 6 punti di un ciclo pick & place con queste zone:

Zona presa: X=220, Y=–60, Z=25 (punto di contatto pezzo)
Zona deposito: X=220, Y=60, Z=25 (punto di contatto deposito)
Altezza di approccio: 160 mm sopra il punto di contatto
Orientamento TCP: W=180, P=0, R=0 per entrambe le zone

Calcola tutte le coordinate dei 6 punti (P[1] home, P[10] appr_pick, P[11] pick, P[20] appr_place, P[21] place, più home a tua scelta). Inseriscili nel simulatore con il Modo 3 (modifica manuale). Poi scrivi il programma TP completo con nomenclatura professionale ed eseguilo verificando le traiettorie verticali.

🟠 Esercizio 3 — Diagnostica punti non insegnati (Medio)

Scrivi nell’editor TP il seguente programma senza insegnare i punti P[5] e P[7]:

1: J P[1] 100% FINE
2: J P[5] 50% FINE
3: L P[6] 200mm/sec FINE
4: J P[7] 50% FINE
5: J P[1] 100% FINE

Insegna P[1] e P[6], lascia P[5] e P[7] non insegnati. Prova ad eseguire il programma con RUN.

a) Il simulatore esegue o si blocca? A quale riga?
b) Qual è il messaggio di errore?
c) Correggi il problema insegnando P[5] e P[7] (a tua scelta, ma in configurazione N U T), poi riesegui.
d) Perché il controller blocca l’esecuzione invece di saltare il punto non insegnato?

🟣 Esercizio 4 — Schema di nomenclatura per cella a 3 stazioni (Difficile)

Una cella robotizzata ha tre stazioni: presa nastro (A), controllo visivo (B), deposito pallet (C). Il robot deve prelevare da A, portare in B per ispezione, poi depositare in C se OK o in uno scarto (D) se non OK.

Progetta lo schema completo di nomenclatura P[ ] per questa cella:
— Assegna i range numerici a ogni stazione (es. P[10]–P[19] per A, ecc.)
— Definisci i punti necessari per ogni stazione (approccio, lavoro, risalita)
— Scrivi una tabella con P[ ], commento (max 16 char), coordinate indicative, metodo di teach consigliato
— Scrivi il programma TP scheletro (con commenti e istruzioni di movimento ma senza I/O — quello viene in Lezione 10) che percorre l’intero ciclo A→B→C (o A→B→D)

Non occorre implementarlo nel simulatore: è un esercizio di progettazione su carta.


❓ 4. Quiz di verifica

1. Un operatore insegna tutti i punti con UT=2 (tool: pinza), poi per errore cambia UT=1 (tool: default) prima di eseguire il programma. Cosa succede?

Mostra risposta

Il controller usa le coordinate X/Y/Z/W/P/R salvate nel P[ ] ma le interpreta nel Tool Frame 1 invece del Tool Frame 2 con cui erano state registrate. Poiché il TCP del Tool 1 ha un offset diverso dalla pinza (Tool 2), il robot si muoverà in una posizione sbagliata — spostata di quanto differisce il TCP tra i due tool. In casi estremi il robot colpisce il pezzo, l’attrezzatura o va fuori dal volume di lavoro. Il campo UT salvato nel P[ ] è informativo — il controller usa il UT attivo al momento dell’esecuzione, non quello salvato.


2. Qual è il vantaggio di costruire i punti di approccio per derivazione invece di insegnarli con il jog?

Mostra risposta

La derivazione garantisce che il punto di approccio abbia esattamente la stessa X e Y del punto di lavoro — solo Z è diverso. Con il jog manuale è quasi impossibile allineare perfettamente X e Y tra approccio e punto di lavoro. Se X o Y differiscono anche di pochi mm, la discesa in L non sarà perfettamente verticale e il TCP potrebbe colpire lateralmente il pezzo o l’attrezzatura. Derivando da P[11] a P[10] (solo +150 su Z) si garantisce la perpendicolarità assoluta della traiettoria di avvicinamento.


3. Perché il controller blocca il programma su un punto uninitialized invece di saltarlo o usare l’ultima posizione nota?

Mostra risposta

Per sicurezza. Se il controller saltasse il punto, il robot eseguirebbe il ciclo incompleto — in un ciclo pick & place, saltare il punto di deposito significa che il robot non deposita il pezzo e torna a home con il pezzo in mano, creando un ciclo corrotto. Se usasse l’ultima posizione nota (di un ciclo precedente), potrebbe portare il robot in una posizione non più valida se nel frattempo qualcosa è cambiato nella cella. Bloccare l’esecuzione è l’unica risposta sicura: obbliga l’operatore a risolvere il problema consapevolmente prima di riavviare.


4. Quali informazioni deve contenere la documentazione di una modifica a un punto P[ ] già in produzione?

Mostra risposta

Almeno: (1) data e ora della modifica, (2) nome di chi ha effettuato la modifica, (3) quale P[ ] è stato modificato e in quale programma, (4) valori precedenti e nuovi valori, (5) motivo della modifica (es. “posizionamento convogliatore spostato di 3 mm in Y”), (6) esito del test post-modifica. Questa documentazione è fondamentale per tracciabilità, per ripristino in caso di problemi successivi e per la manutenzione da parte di altri tecnici che non erano presenti.


5. Perché si consiglia di assegnare P[1] sempre e solo alla posizione di home, indipendentemente dal programma?

Mostra risposta

Convenzione di leggibilità e sicurezza industriale. Chiunque legga un programma FANUC in quella fabbrica sa immediatamente che P[1] è home — non deve leggere i commenti o analizzare le coordinate. In caso di emergenza o di ripristino manuale, il tecnico sa che “porta il robot a P[1]” significa “porta il robot in home”. Questa convenzione vale anche tra programmi diversi sulla stessa macchina: se tutti i programmi usano P[1] come home con le stesse coordinate, il cambio di programma non richiede di verificare la posizione di partenza.


📚 Riepilogo della lezione

Cosa hai imparato oggi:
  • Un P[ ] contiene: X, Y, Z, W, P, R + UF, UT e configurazione — UF/UT devono restare coerenti tra teach ed esecuzione
  • 3 modalità di teach: jog+teach (standard produzione), IK diretta (geometrie note), modifica post-teach (aggiustamenti e derivazioni)
  • I punti di approccio si costruiscono per derivazione dal punto di lavoro: stessa X,Y — Z+offset. Garantisce discesa verticale precisa
  • Nomenclatura professionale: P[1]=home, blocchi numerici per zona, commento 16 char su ogni P[ ]
  • Punti uninitialized bloccano il programma — verificare sempre prima dell’esecuzione
  • Modifica in produzione: ferma → modifica → STEP a velocità ridotta → solo poi ciclo automatico

Prossima lezione →

Lezione 09 — Primo programma Pick & Place
Integrazione di tutto il IV anno base: J+L, punti corretti, ciclo completo.
Il primo programma autonomo funzionante dall’inizio alla fine.

© Prof. D. Bertolino · Robotica Industriale FANUC ER-4iA · Lezione 08 di 18