RI Lezione 08
🤖 Robotica Industriale · IV Anno · Lezione 08
Teaching dei punti P[ ] 📍
Registrazione posizioni · Modifica coordinate · Nomenclatura · Gestione sicura dei punti
🎯 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:
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
✅ Rispecchia collisioni e limiti reali
✅ Metodo standard in produzione
⚠️ Dipende dalla bravura dell’operatore nel jog
✅ Preciso al decimo di mm
✅ Ideale per geometrie note (es. da disegno tecnico)
⚠️ Richiede conoscenza delle coordinate esatte
✅ Crea rapidamente punti “derivati”
✅ Non richiede di muovere il robot
⚠️ 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[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:
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.
*****)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 è:
- Ferma il programma in ciclo automatico — non modificare mai un punto con il robot in movimento.
- Porta il robot manualmente (jog, modalità T1) vicino al punto da modificare per verificare la situazione reale.
- Effettua la modifica: ri-teach con jog o modifica numerica nell’editor di posizione.
- Esegui in STEP l’intero ciclo (o almeno la sequenza che include il punto modificato) a velocità ridotta (override 10–20%).
- Solo se il STEP è corretto, ripristina il ciclo automatico a velocità di produzione.
- 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
- Usa jog WORLD per portare il TCP a X≈300, Y≈0, Z≈200 (usa il pannello posizione per monitorare).
- Con jog WORLD affina i valori fino a X=300.0, Y=0.0, Z=200.0 (±1 mm).
- Premi TEACH nell’editor TP → registra come P[10]. Annota i valori salvati.
- Nel pannello IK inserisci esattamente X=300, Y=0, Z=200, W=180, P=0, R=0.
- Premi MUOVI IK: il robot va esattamente in quella posizione.
- 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.
- Registra il robot in qualunque posizione come P[12] con TEACH.
- 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.
- Salva. Ora P[12] ha le stesse coordinate di P[10] e P[11] ma non è stato insegnato con il jog.
- 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.
- Con IK insegna il punto di presa preciso: X=260, Y=0, Z=35 → registra come P[11].
- 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.
- Registra il robot in qualunque posizione come P[10] (placeholder).
- 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].
- Verifica eseguendo:
J P[10] 50% FINEpoiL P[11] 150mm/sec FINE. Il TCP deve scendere verticalmente di esattamente 150 mm. - Ripeti per il punto di deposito: P[21] = punto deposito, P[20] = P[21] con Z+150.
Esempio C — Programma completo con nomenclatura professionale
| P[ ] | Commento | Coordinate | Metodo |
|---|---|---|---|
| P[1] | HOME | J1=0,J2=–10,J3=20,J4=0,J5=–90,J6=0 | Jog+Teach |
| P[10] | APPR_PICK | X=260, Y=0, Z=185 | Derivato da P[11] |
| P[11] | PICK | X=260, Y=0, Z=35 | IK diretta |
| P[20] | APPR_PLACE | X=260, Y=160, Z=185 | Derivato da P[21] |
| P[21] | PLACE | X=260, Y=160, Z=35 | IK diretta |
! 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:
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]:
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
- 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