Manual de TPE para robots FANUC

por Ángel Gaspar González Rodríguez


INDICE

1        Introducción. 1

2        Variables utilizadas en TPE.. 1

2.1        Tipos de variables. 1

2.2        Direccionamiento directo e indirecto. 3

3        Instrucciones POINT. 3

4        INST Resto de instrucciones. 5

4.1        Registers: Instrucciones con registros y registros de posición. 6

4.2        Instrucciones  de entradas-salidas. 7

4.3        JMP / LBL Instrucciones de salto. 7

4.4        Llamada de programa. 8

4.5        IF / SELECT Instrucciones de salto condicional 8

4.6        Instrucciones de espera. 9

4.7        Offset/Frames. 9

4.8        Instrucciones Multitarea. 10

4.9        Program Control 11

4.10          Instrucciones de condición. 11

5        TOUCHUP. 12

6        EDCMD.. 12

6.1        Insert 12

6.2        Delete. 12

6.3        Copy. 12

6.4        Comment 13

6.5        Find. 13

6.6        Replace. 13

6.7        Undo. 13

7        Referencias. 13

 

PROGRAMACIÓN en TPE

1       Introducción

El lenguaje de programación basico de robots Fanuc se llama TPE. Se parece al lenguaje ensamblador, en el sentido de que el control de la ejecución del programa se lleva a cabo mediante instrucciones de salto JMP, al contrario de los llamados lenguajes estructurados que emplean estructuras de tipo for o while.

Existen dos tipos de instrucciones: los de movimiento y el resto de instrucciones. A los primeros se accede mediante el menú POINT, en tanto que al segundo se accede mediante el menú general INST.

Este documento recoge las principales instrucciones del lenguaje TPE, y sus posibles variantes. También incorpora funciones de edición propias del controlador R-J3iB. En resumen, corresponde a las teclas EDIT y DATA de la consola de programación, que son los menús principales durante la edición de un programa en TPE.

2       Variables utilizadas en TPE

Las variables que pueden emplearse en un programa TPE vienen agrupadas en arrays de diferentes tipos, existiendo un límite en el número de variables de un tipo que podemos utilizar. Cada variable concreta ocupará una posición dentro del array del tipo al que pertenece (R[3], P[6], PR[32], DO[2]…). Para facilitar al programador la identificación de cada variable, cada una de ellas puede ser comentada con un nemónico. El nemónico se indica con dos puntos seguidos del índice de la variable, como en R[4:num_piezas], PR[3:Pos_Alimentacion].

2.1   Tipos de variables

A continuación se muestran los más utilizados.

2.1.1     P[n]: posición.

No pueden ser asignados ni modificados. Cada posición corresponde a una postura o pose, dada por las tres articulaciones o coordenadas que definen la posición, junto con los otros grados de libertad que definen la orientación. En general consta de 6 coordenadas articulares o cartesianas. Debido a las tres fuentes de indeterminación existentes en los robots articulares, en caso de visualizar la posición mediante sus coordenadas cartesianas, será necesario indicar la configuración que traslada las coordenadas cartesianas en articulares.

2.1.2     PR[n]: registros de posición.

Pueden ser asignados y modificados. También pueden utilizarse como registros de Offset. Su estructura es igual a la de las posiciones.

Por defecto, se dispone de 100 registros de posición.

2.1.3     R[n]: registros escalares.

También se denominan simplemente registros. Almacenan las variables auxiliares y constantes necesarias para la ejecución de los programas.

Por defecto, se dispone de un máximo de 256 registros escalares.

2.1.4     Semaphore[n]

Son variables booleanas de sincronización. Permiten la sincronización entre programas diferentes dentro de un mismo controlador.

2.1.5     RI[n]: señales digitales de entrada propias del robot

Son señales de entrada provenientes de la herramienta del robot.

2.1.6     RO[n]: señales digitales de salida propias del robot

Son señales de actuación de la herramienta del robot.

2.1.7     DO[n]: señales digitales de salida externas.

Son señales de salida a 24V dc utilizadas para comandar dispositivos externos, como cintas transportadoras.

2.1.8     DI[n]: señales digitales de entrada externas.

Son señales de entrada a 24V dc provenientes de sensores o botones de mando. Como todas las entradas, el programa no podrá activarlas ni desactivarlas, sino únicamente consultarlas.

 

Se utilizarán principalmente registros escalares (o simplemente registros) así como registros de posición. Se dispone de un máximo (configurable) de 256 registros y de 100 registros de posición. Al asignar una variable a un registro o una posición a un registro de posición, se convierte en global, por lo que puede ser utilizada por todos los programas.

2.2   Direccionamiento directo e indirecto

Es posible tanto el direccionamiento directo como el indirecto:

·         Directo R[1] = 2 à el valor es guardado directamente en R[1]

·         Indirecto R[R[1]] = 5 à el registro afectado depende del valor contenido en R[1]; siguiendo con el ejemplo anterior (R[1] = 2),  la instrucción R[R[1]] = 5 sería equivalente a escribir  R[2]=5.

3       Instrucciones POINT

En la Ilustración 1 se muestra un ejemplo de una instrucción de movimiento.

Ilustración 1. Ejemplo de instrucción POINT de movimiento

En general, una instrucción de movimiento tiene el siguiente formato

TM     TP    [n: Nemon]   vel   TT    Opc

y consta de los siguientes campos, mostrados de izquierda a derecha

·         TM  tipo de movimiento

o   J: joint

o   L: lineal

o   C: circular pasando por punto intermedio

·         TP tipo de posición

o   P: posición (incluyendo orientaciones)

o   PR: registro de posición, puede ser posición u offset

·         n número de la posición 1-32767

·         vel:  %,  inch/min, deg/sec, mm/sec, cm/min, sec

·         TT tipo de terminación

o   FINE: se detiene al finalizar el movimiento

o   CNT: pasa a cierta distancia de un punto intermedio

·         Opc  opción adicional, mostradas en la  Tabla 1, pero que principalmente son:

o   Offset, PR[m]

o   ToolOffset, Offset PR[m]

Tabla 1. Opciones con las que caracterizar un movimiento

Movimiento asociado a la muñeca

 

Wrist Joint

En un movimiento lineal o del arco, el eje de la muñeca se mueve con un movimiento de la articulación, y varían las coordenadas joint.

Aceleración/ deceleración

ACC ( 0–150)

Establece el régimen de aceleración/deceleración al moverse.

Salto condicional con interrupción de programa

 

Skip/LBL[ ]

Provoca un salto a la etiqueta especificada cuando no se satisface la condición especificada en una instrucción de condición de salto. Cuando se satisface la condición, cancela el movimiento y ejecuta la siguiente línea.

 

Offset de posición

Offset /Frames

Offset, PR [i:comment]

Hace moverse al robot a la posición indicada añadiéndole el valor especificado por la instrucción de condición de offset

Mueve el robot a la posición indicada añadiéndole un registro específicado según el WCS

Offset del TCP

Tool_offset

Tool_offset, PR[(GPk:)I]

Mueve al robot a la posición indicada añadiéndole el valor especificado por la instrucción de offset del herramienta.

Mueve el robot a la posición indicada añadiéndole un registro específicado según el TCS.

Incremental

INC

Hace moverse al robot a la posición donde se añade el valor de la variable de posición a la posición actual.

Fluctuación

SOFT FLOAT [i]

Activa la función de fluctuación.

EV independiente

EV(value)%

i= 1 à 100 (%)

Mueve el eje prolongado, independientemente del movimiento del robot.

EV simultáneo

EV(value)%

i= 1 à 100 (%)

Mueve el eje prolongado, sincronizado con el robot.

Trayectoria

PTH

Crea un plan de movimiento, utilizando el régimen alcanzable en operación continua.

Giro continuo

CTV i

i = - 100 à 100 (%)

Arranca la ejecución de giro continuo.

Antes de la ejecución

TIME BEFORE t CALL

<prog>

TIME AFTER t CALL

<prog>

Antes o después del tiempo de finalización especificado, llamar a un subprograma y ejecutarlo.

t=Ejecución del tiempo de arranque.

<prog>=Nombre del subprograma.

 

4       INST Resto de instrucciones

Están distribuidas según el árbol que se muestra en la Ilustración 2.

Ilustración 2. Despliegue de las instrucciones TPE que no son de movimiento

En este bloque se encuentran los siguientes tipos de instrucciones:

·         Registers

·         I/O

·         If/Select

·         Wait

·         JMP/LBL

·         Call

·         Miscellaneous

·         Skip

·         Payload

·         Offset/Frames

·         Multiple control

·         Program control

4.1   Registers: Instrucciones con registros y registros de posición

4.1.1     Registros escalares

En un registro es posible almacenar el resultado de una operación aritmética, asignar un valor constante (dimensión, número de piezas…), un valor de contador, una medida analógica, o cualquier otro dato entero o real.

R[n] = [valor] [operador] [valor]

a) El [operador] puede ser:

- una suma (+)

- una resta (-)

- una multiplicación (*)

- una división (/)

- una división entera (DIV)

- el resto de una división (MOD)

b) El [valor] puede ser:

- una constante

- un valor de entrada-salida analógico AI[n]/AO[n]

- un valor de entrada-salida digital DI[n]/DO[n]

- un valor de entrada-salida grupo GI[n]/GO[n]

- un valor de entrada-salida de robot RI[n]/RO[n]

- un valor de un registro R[n]

- un valor de una coordenada de un registro de posición PR[ i , j ].

Como se observa del último caso, cada coordenada de un registro de posición es susceptible de ser accedido de forma independiente, tanto para su lectura (caso anterior) como para asignación. El segundo valor (que en este caso aparece como j) corresponde a la coordenada, utilizándose los índices, 1, 2, 3, 4, 5 y 6 para las coordenadas X, Y, Z, W, P y R respectivamente.

Las operaciones que se pueden realizar con una coordenada de un registro de posición se indican a continuación

PR[i,j] =[valor] [operador] [valor]

donde tanto el [operador] como el [valor] pueden de los mismos tipos que los indicados para las operaciones con registros escalares.

4.1.2     Registros de posición

También es posible la asignación de registros de posición PR[n]. Es posible el direccionamiento directo e indirecto, tal como se indicó en el apartado 2.2.

·         Direccionamiento directo:

PR[1] = P[1]  con lo que la postura P[1] es guardada directamente en PR[1]

·         y direccionamiento indirecto:

PR[R[1]] = P[3] con lo que, si p.ej. R[1] vale n, entonces se almacena la postura P[3] en PR[n].

También es posible la asignación tras operaciones de suma y resta, en la forma

PR[n] = [punto] [operador] [punto]

donde el operador puede ser + o – y [punto] puede ser:

·         Una posición P[n]

·         Un registro de posición PR[n]

·         La posición actual del robot en grados de cada articulación JPOS

·         La posición actual del robot en cartesianas LPOS

4.2   Instrucciones  de entradas-salidas

Permiten la activación o desactivación de las salidas digitales DO y RO, así como la asignación de entradas digitales DI o RI en un registro.

También permite la asignación o consulta de valores analógicos AI/AO y de grupo GI/GO.

4.3   JMP / LBL Instrucciones de salto

Una etiqueta (label) marca un destino de salto.

LBL[n: [nemónico]]

Será utilizado por las instrucciones de salto condicional o incondicional JMP

JMP LBL[n]

Un salto incondicional a etiqueta JMP LBL permite efectuar un salto a una etiqueta situada en el mismo programa. Tras la instrucción de salto, la ejecución del programa continúa por la línea inferior a donde se encuentra la etiqueta a la que se ha saltado.

También existen instrucciones de salto condicional, aunque pertenecen a otro subgrupo de funciones.

4.4   Llamada de programa

La instrucción CALL Program permite lanzar un nuevo programa que desarrolle una serie de instrucciones. Una vez completado dicho programa, el control (cursor) vuelve al programa original a partir de la línea en que se encuentra la llamada.

Además de la llamada genérica, también es posible pasar parámetros al programa. En el programa destino, dichos parámetros son recogidos por el array AR[n]. Por ejemplo, si R[4] y R[7] son el número de columnas y de filas de una matriz de piezas, y la función debe almacenar el número de piezas en un registro R[10], se tendría

 

Programa principal

Programa Paletiza

CALL PALETIZA(R[4], R[7])

R[10]=AR[1]*AR[2]

 

4.5   IF / SELECT Instrucciones de salto condicional

4.5.1     Instrucción IF

Una instrucción de salto condicional permite efectuar un salto a una etiqueta situada en el mismo programa si y sólo si una condición es satisfecha. También permite la combinación de condiciones.

IF R[1:NUM_PIEZAS]>3 AND DI[3:S_INDUCT]=ON,JMP LBL[3]

Además de provocar un salto JMP LBL[n], o también puede hacer una llamada condicional de tipo CALL programa. En este caso, no se permite la llamada con parámetros.

4.5.2     Instrucción SELECT

Efectúa uno o varios saltos en función del valor de un registro.

SELECT R[ n] = [valor   ], [salto]

                 [valor 2], [salto]

                 [valor n], [salto]

                 ELSE, [salto]

Los [valores] pueden ser:

·         una constante

·         un valor de un registro R[n]

Los [saltos] pueden ser:

·         un JMP LBL[n]

·         un CALL programa

4.6   Instrucciones de espera

Las instrucciones de espera retardan la ejecución de un programa mediante un tiempo especificado o bien hasta que una condición sea verdadera.

4.6.1     Temporización

Retarda la ejecución de un programa durante un tiempo especificado. La duración se expresa en segundos, con un mínimo de 0,01  segundos.

WAIT [tiempo].

El [tiempo] puede ser: una constante o un registro R[n]

4.6.2     Espera de una condición verdadera

Retarda la ejecución de un programa hasta que la condición sea verdadera.

WAIT [condición] [tiempo]

Como [tiempo], admite:

·         FOREVER   espera mientras la condición no se cumpla

·         TIMEOUT LBL[n] espera el tiempo especificado en la variable time out ($WAITTMOUT); después salta a LBL[n] si la condición no se ha cumplido.

4.7   Offset/Frames

Se utilizará este menú para realizar alguna de las siguientes tareas:

·         Para seleccionar el sistema de referencia usuario. UFRAME_NUM =  [valor]

Si [valor] = 0, entonces el programa utiliza las coordenadas del sistema (WORLD).

·         Para seleccionar el sistema de referencia herramienta. UTOOL_NUM = [valor]

·         Para almacenar el sistema de referencia usuario deseado. PR[n] = UFRAME[n]

·         Para restituir el sistema de referencia de usuario. UFRAME[n] = PR[n]

·         Para almacenar el sistema de referencia herramienta deseado. PR[n] = UTOOL[n]

·         Para restituir el sistema de referencia de herramienta. UTOOL[n] = PR[n]

 

Téngase en cuenta que un sistema de referencia queda determinado por la posición del origen junto con el giro de sus ejes; es decir tres coordenadas de posición más tres de orientación. En consecuencia, un registro de posición puede almacenar, además de una postura o un offset, también un nuevo sistema de referencia.

1: UTOOL_NUM=1 ;

2: UFRAME_NUM=1 ;

3: UFRAME[1]=PR[10:WORLD]

 

1: LBL[1] ;

2: UTOOL_NUM=2 ;

3: UFRAME_NUM=5 ;

4: ;

5: PR[10,1]=742 ;

6: PR[10,2]=50.1 ;

7: PR[10,3]=176.2 ;

8: PR[10,4]=0 ;

9: PR[10,5]=0 ;

10: PR[10,6]=31.5 ;

13: PR[10,1]=PR[10,1]+R[1:X] ;

14: PR[10,2]=PR[10,2]+R[2:Y] ;

15: PR[10,3]=PR[10,3]+R[3:Z] ;

16: UFRAME[5]=PR[10] ;

17: ;

18:J P[1] 100% FINE ;

20:J P[2] 100% FINE ;

21:L P[3] 500mm/sec FINE ;

22:L P[4] 2000mm/sec FINE ;

23:L P[5] 2000mm/sec FINE ;

25:J P[1] 100% FINE ;

26: JMP LBL[1] ;

 

 
 

 

 

 

 

4.8   Instrucciones Multitarea

Los sistemas R-J2, R-J3 y R-J3i permiten ejecutar 4 programas al mismo tiempo.

RUN  Program

Lanza la ejecución de un programa Program y al  mismo tiempo sigue la ejecución del programa  inicial.

SEMAPHORE[n] = [valor]              

Activa o desactiva el semáforo n. Los semáforos se utilizan para la sincronización de  tareas. Típicamente, esta instrucción estará correspondida con una instrucción WAIT SEMAPHORE[n] en otro programa que se ejecute simultáneamente. El [valor] puede ser ON u  OFF.

WAIT  SEMAPHORE[n]  [tiempo]

Para la ejecución del programa, hasta que otro programa en paralelo activa el semáforo n a ON.

El [tiempo] puede ser:

·         FOREVER ® espera a que el semáforo pase a  ON.

·         TIMEOUT LBL[n] ® espera el tiempo especificado en  la variable timeout ($WAITTMOUT), después salta a la etiqueta n si el semáforo no se ha puesto a ON.

 

4.9   Program Control

ABORT

Pone fin a un programa y anula todos los movimientos en curso o en pausa.

PAUSE  

Suspende la ejecución de un programa; todo movimiento comenzado continúa hasta el final, todos los temporizadores continúan siendo incrementados y todas las instrucciones en curso de ejecución son acabadas salvo las  instrucciones CALL que serán ejecutadas cuando el programa sea reanudado.

RESUME

RESUME_PROG = Program   relanza el programa Program que estaba en PAUSE.

4.10 Instrucciones de condición

SKIP

SKIP CONDITION SDI [ 1 ] = ON

Especifica la condición de ejecución de salto para la instrucción adicional de movimiento. Suele utilizarse para proporcionar una alarma en caso de que se produzca alguna contingencia. Puede entenderse de la siguiente forma:

·         "Si se detecta la señal antes de completar el movimiento, detiene dicho movimiento y continúa por la siguiente línea de programa".

·         "Si consigue llegar a la posición indicada sin detectar la señal, entonces salta a la etiqueta".

 

1: !...VOY A POR CARTON ;

2: UFRAME[1]=PR[10:WORLD] ;

3: ;

4: !PUNTO ENCIMA DEL PALET ;

5:J P[1] 100% CNT100 ;

6: ;

7: !SEGURIDAD ANTES DE BAJAR ;

8: CALL PREPINZA ;

9:

10: !BAJA HASTA UN PALET COMPLETO ;

11:L P[2] 1800mm/sec CNT100 ;

12: ;

13: !BAJA HASTA DETECCION FOTOCELULA ;

14: SKIP CONDITION RI[6:FOTOCELULA]=OFF ;

15:L P[2] 1200mm/sec FINE Skip,LBL[1] ;

16: ;

17: !BAJA HASTA DETECCION VACIO ;

18: SKIP CONDITION RI[7:SIN CARTON]=OFF ;

19:L P[2] 30mm/sec FINE Skip,LBL[2] ;

20: DO[21:VACIO]=ON ;

21: WAIT .70(sec) ;

22: ;

23: !SUBE EL CARTON VERTICAL ;

24: PR[11,3:CARTON]=1000 ;

25: L P[1] 1000mm/sec CNT100 ;

26: ;

27: END ;

28: LBL[1] ;

29: UALM[1] ;

30: END ;

31: LBL[2] ;

32: UALM[2] ;

33: End;

OFFSET CONDITION PR [  ] , UFRAME[I]

Especifica la condición de offset utilizado por la instrucción de movimiento.

TOOL OFFSET CONDITION PR [2] , UTOOL[l]

Especifica la condición de offset de TOOL utilizado por la instrucción de movimiento.

5       TOUCHUP

Este apartado y el siguiente no corresponden exactamente a instrucciones TPE, sino que son comandos propios del controlador R-J3iB, y que aparecen en el menú de edición de la consola de programación.

La instrucción TOUCHUP permite modificar la posición o el registro de posición de la instrucción de movimiento en la que se encuentra el cursor.

6       EDCMD

Este menú de Edición de Comandos engloba una serie de funciones de edición que facilitan la introducción de código.

6.1   Insert

Inserta  el número de líneas que se especifique

6.2   Delete

Suprime el número de líneas especificadas

6.3   Copy

Es un comando muy útil para evitar la tediosa introducción de datos mediante la consola. Tras seleccionar Copy, se ha de situar el cursor en la primera línea a copiar, pulsar Copy de nuevo, llevar el cursor hasta la última línea del bloque a copiar y volver a pulsar Copy. Posteriormente se mueve el cursor hasta la posición a partir de la cual se quiere copiar el bloque y se pulsa Paste.

6.4   Comment

Hace que en el programa aparezcan y desaparezcan los comentarios relacionados con R[ ] y con I/O. También se gestiona a través de la variable: $MNDSP_CMNT = 1.

6.5   Find

Busca una instrucción en el programa.

6.6   Replace

Permite reemplazar una instrucción o modificar las instrucciones de movimiento. Puede ser útil para reemplazar todas las instrucciones J P[n] por instrucciones J PR[n].

6.7   Undo

Anula la última acción.

7       Referencias

Este manual ha sido elaborado teniendo como fuente principal el documento “Robótica Programación FANUC” de FANUC Robotics Ibérica S.L., actualizado y revisado por D. Salvador García Chinchilla para la empresa SEAT.