Ri Ud3 Ud4
Ri Ud3 Ud4
Objetivos:
- Programa robots, utilizado técnicas de programación y procesamiento de datos.
- Verifica el funcionamiento de robots, ajustando os dispositivos de control y aplicando as normas
de seguridad.
- Repara averías en ámbitos industriales robotizados, diagnostica disfunciones y elabora informes
de incidencias.
Contenido:
- Programación de robots.
- Verificación del funcionamiento de robots.
- Reparación de averías en contornos industriales robotizados.
Programar las acciones de un manipulador es complicado en el sentido de que en todo momento existe
una interacción con el entorno, tratándose de un proceso continuo de prueba y error. Esta es la principal
causa que lleva a que las mayoría de los sistemas de programación de robots sean de tipo interpretado,
pudiéndose realizar un seguimiento paso a paso de lo programado en cada momento. Se evita así el
tedioso ciclo de editar-compilar-ejecutar muy costoso en tiempo. También es importante que exista una
buena monitorización continua del desarrollo del programa.
El modelo del entorno es la representación que tiene el robot de los objetos con los que interacciona.
Normalmente este modelo se limita a características geométricas: posición y orientación de los objetos, y
en ocasiones a su forma, dimensiones, peso, etc.
Programación On-Line.- Los puntos de programación del robot, se van introduciendo con la ayuda del
panel de control. El programador debe de estar cerca del área de movimiento del robot y el robot
almacena toda la información generada en la programación.
Programación Off-Line.- Los programas se generan lejos del entorno del robot, generalmente desde un
ordenador con un tipo específico de software.
Programación Programar un robot consiste en indicar paso por paso las diferentes acciones (moverse a un
punto, abrir o cerrar la pinza, etc.) que éste deberá realizar durante su funcionamiento, la flexibilidad en la
aplicación del robot y, por lo tanto, su utilidad van a depender en gran parte de las características de su
sistema de programación.
Guiado Pasivo
Directo
Guiado Pasivo
Programación por Guiado Pasivo
Guiado Indirecto
Programación de
Guiado Básico
robots Guiado activo
Guiado Extendido
Nivel Robot
Programación
Nivel Objeto
textual
Nivel Tarea
La programación por guiado o aprendizaje consiste en hacer realizar al robot, o a una maqueta del mismo,
la tarea, registrando las configuraciones adoptadas para su posterior repetición en forma automática.
Para guiar al robot por los puntos deseados se utilizan distintas soluciones:
Guiado Pasivo.- Si los actuadores del robot están desconectados y el programador aporta en forma directa
la energía para mover el robot, se habla de un guiado pasivo. Existe el guiado pasivo directo y el guiado
pasivo por indirecto
.
Guiado Pasivo Directo.- En este caso, el programador puede tomar el extremo del robot y llevarlo hasta
os puntos deseados a través de las trayectorias más adecuadas. La unidad de control del robot registra de
manera automática la señal de los sensores de posición de las articulaciones en todos los puntos
recorridos.
http://www.youtube.com/watch?v=ghV1xkUR8JU https://www.youtube.com/watch?v=lXSho9loGYU
Guiado Básico.- El robot es guiado por los puntos por los cuales se desea que pase durante la fase de
ejecución automática del programa. Durante ésta, la unidad de control interpola dichos puntos según
determinadas trayectorias. Muchas veces no es posible incluir ningún tipo de estructuras de control dentro
del programa, por lo que los puntos son recorridos siempre secuencialmente, en el mismo orden que se
programaron.
Guiado Extendido.- Permite especificar, junto a los puntos por los que deberá pasar el robot, datos
relativos a la velocidad, tipo de trayectoria, precisión con la que se quiere alcanzar los puntos, control del
flujo del programa, atención a entradas/salidas binarias, etc. En este caso, el método guiado de utilizado
es el de la botonera. El guiado por extendido aumenta la potencia del sistema de programación.
Los métodos por guiado son muy útiles y presentan ventajas, como que son fáciles de aprender y
requieren de un espacio de memoria relativamente pequeño para almacenar la información. Sin embargo,
también presenta inconvenientes como la necesidad de utilizar al propio robot y su entorno para realizar
la programación, lo que obliga a sacar al robot de la línea de producción e interrumpir ésta.
Este método de programación permite indicar la tarea al robot a través de un lenguaje de programación
específico. Un programa se entiende como una serie de órdenes que son editadas y posteriormente
ejecutadas, por lo tanto, existe un texto para el programa. La programación textual se puede clasificar en
tres niveles:
UD3 Programación de robots industriales On-Line. 201
- Nivel robot, si las órdenes se refieren a los movimientos a realizar por el robot.
- Nivel objeto, si las órdenes se refieren al estado en que deben ir quedando los objetos.
- Nivel tarea, si las órdenes se refieren al objetivo a conseguir.
Nivel Robot.- Se debe especificar cada uno de los movimientos que ha de realizar el robot, como
velocidad, direcciones de aproximación y salida, apertura y cierre de la pinza, etc. También es necesario
descomponer la tarea global en varias subtareas.
Nivel Objeto.- Disminuye la complejidad del programa. La programación se realiza de manera más
cómoda, ya que las instrucciones se dan en función de los objetos a manejar. Una planificación de la tarea
se encargará de consultar una base de datos y generar las instrucciones a nivel de robot.
Nivel Tarea.- El programa se reduce a una única sentencia, ya que, se especifica qué es lo que debe hacer
el robot en lugar de cómo debe hacerlo.
Actualmente, la programación de robots se queda en el primero de ellos, existiendo una gran cantidad de
lenguajes de programación textual, entre los que destacan los siguientes:
La creación de la estructura del programa es una parte importante en la resolución de una tarea
determinada. Podemos utilizar un diagrama de flujo estándar, mediante el cual se divide la tarea en
fragmentos / operaciones representadas por símbolos distintos conectados a través de flechas. Así,
proponemos trazar el algoritmo completo, lo cual ayuda significativamente en la toma el código del
programa en sí.
Tareas a ejecutar.
El servicio manual es el servicio para realizar los trabajos de ajuste. Se consideran trabajos de ajuste todos
los trabajos que deban llevarse a cabo en el robot industrial para poder ser operado en servicio
automático. Son trabajos de ajuste:
- Modo tecleado.
- Programación por aprendizaje.
- Programación.
- Verificación del programa.
- Si no se necesitan los accionamientos, éstos deben ser desconectados para que el manipulador o los ejes
adicionales (opcional) no puedan desplazarse por equivocación. Los programas nuevos o modificados
siempre se deben probar primero en el modo de servicio Manual Velocidad reducida (T1).
- Las herramientas, el manipulador o los ejes adicionales (opcional) no deben tocar nunca el vallado de
seguridad o sobresalir del mismo.
- Las piezas, herramientas u otros objetos no deben quedar apretados por el desplazamiento del robot
industrial, ni tampoco llevar a cortocircuitos o caerse.
- Todos los trabajos de ajuste deben realizarse en la medida de lo posible fuera del vallado de seguridad
que delimita el área asegurada.
UD3 Programación de robots industriales On-Line. 206
Si los trabajos de ajuste deben llevarse a cabo dentro del vallado de seguridad que delimita el área
asegurada, se deben tener en cuenta los puntos siguientes.
En el modo de servicio Manual Velocidad reducida (T1):
- Si se puede evitar, no debe hallarse ninguna otra persona dentro de la zona delimitada por los
dispositivos de seguridad. Si es imprescindible que varias personas permanezcan dentro de la zona
delimitada por los dispositivos de seguridad, se debe tener en cuenta lo siguiente:
- Todas las personas deben tener a disposición un pulsador de hombre muerto.
- Todas las personas deben tener un contacto visual sin obstáculos sobre el robot industrial.
- Debe poder haber contacto visual entre todas las personas implicadas.
- El operario debe situarse en una posición desde la cual pueda tener visión sobre la zona de peligro para
así poder evitar posibles peligros.
- Los programas nuevos o modificados siempre se deben probar primero en el modo de servicio Manual
Velocidad reducida (T1).
- Tras efectuar alguna modificación en el robot industrial, los programas existentes siempre deben ser
probados primero en el modo de servicio Manual Velocidad reducida (T1). Esto es válido para todos los
componentes del robot industrial y también incluye las modificaciones de software y los ajustes de
configuración
- Este modo de servicio sólo puede utilizarse cuando se requiere la aplicación de un test con servicio
Manual velocidad alta o reducida.
- Este modo de servicio no permite la programación ni la programación por aprendizaje.
- El operario debe asegurarse antes de iniciar el test que los interruptores de hombre muerto están en
condiciones de funcionamiento.
- El operario debe colocarse en fuera de la zona de peligro.
- No debe hallarse ninguna otra persona dentro de la zona delimitada por los dispositivos de seguridad. El
operario debe encargarse de ello.
Cuando el manipulador o un eje adicional (opcional) se detiene sin motivo aparente, sólo se puede
acceder a la zona de peligro después de haber accionado una PARADA DE EMERGENCIA.
Mantenimiento y reparaciones.
El mantenimiento y las reparaciones tienen por misión asegurar que se mantenga el estado funcional o se
restablezca en caso de avería. La reparación comprende la detección de fallos y su subsanación.
UD3 Programación de robots industriales On-Line. 207
Interfaz de usuario KUKA smartHMI.
La barra de estado muestra el estado de determinados ajustes centrales del robot industrial. En la mayoría
de las visualizaciones se abre una ventana al tocarlas, en la que se pueden modificar los ajustes.
Conectar/desconectar accionamientos.
La posición HOME es una posición válida para todos los programas. Por regla general, se la utiliza como
primera y última posición en el programa, por su definición unívoca y no crítica.
La HOME position está declarada por defecto en la unidad de control del robot con los siguientes valores.
Se pueden programar por aprendizaje otras posiciones HOME. Una Home Position debe cumplir las
siguientes condiciones:
- Posición de salida favorable para la ejecución del programa.
- Posición de parada favorable. Por ejemplo, en la posición de parada el robot no debe ser un obstáculo.
Para poder indicar en el espacio la posición u orientación de un punto, se utilizan diferentes sistemas de
coordenadas. Se puede establecer una diferenciación básica entre sistemas de coordenadas específicos de
los ejes y sistemas de coordenadas cartesianos:
En el sistema de coordenadas específico de los ejes se indican los corrimientos (para los ejes de
traslación) o los giros (para los ejes de rotación) de cada eje del robot. En un robot de brazo articulado de
6 ejes, deben indicarse los 6 ángulos de articulación del robot, para especificar unívocamente la posición
y la orientación.
Puesto que el ser humano, como programador, piensa en coordenadas cartesianas, no suele ser práctico
programar en el sistema de coordenadas específicas de los ejes. La unidad de control ofrece por ello
varios sistemas cartesianos para la programación cuyas coordenadas se transforman automáticamente en
el sistema específico del eje antes de que se ejecute el movimiento.
Para poder alcanzar cualquier punto en el espacio con la orientación que se desee, además de los tres
valores translatorios se necesitan tres datos de rotación:
- WORLD
- ROBROOT
- BASE
- TOOL
WORLD.
ROBROOT.
BASE.
Existen dos elementos de operación con los cuales puede moverse un robot.
- Teclas de desplazamiento.
- Space Mouse.
Los robots KUKA con 6 grados de libertad tienen 3 posiciones singulares distintas.
Una posición singular se caracteriza por no permitir una transformación de retroceso (conversión de las
coordenadas cartesianas en valores específicos de los ejes) unívoca aunque se hayan preestablecido los
datos Status y Turn. En este caso o cuando las más pequeñas modificaciones cartesianas provocan
grandes cambios en el ángulo de los ejes, se habla de posiciones singulares.
En este caso, el punto de raíz de la muñeca, cuya posición radica en el punto de intersección de los ejes
A4, A5 y A6, se encuentra en el eje 1.
En la singularidad por encima de la cabeza, el punto de la raíz de la muñeca (= centro del eje A5) se halla
vertical al eje A1 del robot. La posición del eje A1 no se puede establecer unívocamente mediante la
transformación de retroceso y puede por tanto aceptar cualquier valor. Si el punto de destino de un paso
de movimiento PTP se halla en esta singularidad por encima de la cabeza, la unidad de control del robot
puede reaccionar como sigue gracias a la variable del sistema $SINGUL_POS[1]:
Posiciones extendidas.
En la singularidad de las posiciones extendidas, el punto de la raíz de la muñeca (= centro del eje A5) se
halla en prolongación de los ejes A1 y A3 del robot.
UD3 Programación de robots industriales On-Line. 218
El robot se encuentra en el límite de su área de trabajo. La transformación de retroceso proporciona un
ángulo de eje unívoco, pero las pequeñas velocidades cartesianas dan lugar a grandes velocidades axiales
en los ejes A2 y A3. Si el punto de destino de un paso de movimiento PTP se halla en esta singularidad de
las posiciones extendidas, la unidad de control del robot puede reaccionar como sigue gracias a la variable
del sistema $SINGUL_POS[2]:
Ejes de la muñeca.
En una singularidad de los ejes de la muñeca los ejes A4 y A6 se hallan paralelos uno con el otro y el eje
A5 dentro del área de ±0,01812°.
La posición de ambos ejes no se puede determinar inequívocamente por medio de una transformación de
retroceso. Pero existen muchas posiciones axiales para los ejes A4 y A6 en las que las sumas de los
ángulos de eje son idénticas. Si el punto de destino de un paso de movimiento PTP se halla en esta
singularidad de los ejes de la muñeca, la unidad de control del robot puede reaccionar como sigue gracias
a la variable del sistema $SINGUL_POS[3]:
En el sistema de coordenadas específico de los ejes, se puede desplazar individualmente cada uno de los
ejes del robot en la dirección axial positiva o negativa. Para ello se utilizan las teclas de desplazamiento o
el Space Mouse, que permite desplazar simultáneamente 3 o 6 ejes.
Se muestra la posición actual de los ejes A1 a A6. Cuando existen ejes adicionales, se muestran también
las posiciones de los mismos. La posición real también puede indicarse en pantalla mientras el robot se
encuentra en movimiento.
Eje P1 P2 P3 P4 P5 P6 P7 P8
A1
A2
A3
A4
A5
A6
Pestaña teclas.
Descripción Posición real cartesiana: Se indica en pantalla la posición actual (X, Y, Z) y la orientación
(A, B, C) del TCP. Además, se visualizan los sistemas de coordenadas actuales TOOL y BASE, y
también Status y Turn.
En una posición, los datos “S” (Status - Estador) y “T” (Turn- giro) permiten seleccionar de entre varias
posiciones de robot posibles para un mismo punto en el espacio (debido a las singularidades de la
cinemática) una posición muy precisa y unívocamente definida. “S” y “T”se especifican en binario.
Status-Estado.
Con el estado S se manejan las ambigüedades en la posición del eje. Por lo tanto, S depende de la
respectiva cinemática del robot.
Ampliando una indicación de posición cartesiana con el valor Turn (giro) se pueden además alcanzar
ángulos de eje superiores a +180º o inferiores a -180º sin una estrategia de desplazamiento especial (por
ejemplo, puntos intermedios). En los ejes rotatorios, los bits individuales determinan el signo que precede
al valor del eje del siguiente modo:
Una indicación T ’B 10011’, significa por tanto que los ángulos de los ejes 1, 2 y 5 son negativos, y que
los ángulos de los ejes 3, 4 y 6 son por el contrario positivos (pueden omitirse todos los bits de 0 con un
valor más alto).
Gráficamente, cabe imaginarse el área de base / por encima de la cabeza de forma cartesiana. Para ello, se
definen los conceptos siguientes:
Sistema de coordenadas A1: Si el eje 1 está en 0º, entonces es idéntico al sistema de coordenadas
$ROBROOT. En los valores distintos de 0º, se mueve junto con el eje 1.
Así pues, el área de base/por encima de la cabeza, puede definirse del modo siguiente:
- Si el valor x del punto de la raíz de la muñeca, expresado en el sistema de coordenadas A1, es positivo,
el robot se encuentra en el área de base.
- Si el valor x del punto de la raíz de la muñeca, expresado en el sistema de coordenadas A1, es negativo,
el robot se encuentra en el área por encima la cabeza.
Eje P1 P2 P3 P4 P5 P6 P7 P8
X
Y
Z
A
B
C
S
T
El robot desplaza el TCP al punto de destino a lo largo de la trayectoria más rápida. La trayectoria más
rápida no es, en regla general, la trayectoria más corta y por ello no es una recta. Dado que los ejes del
robot se mueven de forma rotacional, trayectorias curvas pueden ser ejecutadas de forma más rápida que
las rectas. No puede predecirse la trayectoria exacta.
Velocidad PTP.
El eje principal es le nombre dado al eje que más se tiene que mover para alcanzar el punto final, la
velocidad especificad en el punto no es la real.
El perfil más alto del movimiento es utilizado por defecto, es decir los esfuerzos de torsión permitidos se
utilizan en cada punto de una trayectoria. La velocidad se adapta siempre para evitar que los esfuerzos de
torsión sean excedidos.
El TCP abandona la trayectoria sobre la cual se posicionaría exactamente en el punto de destino y recorre
una trayectoria más rápida. En la programación del movimiento se define la distancia mínima al punto de
destino en que el TCP puede abandonar su trayectoria original.
Las instrucciones también pueden programarse sin formularios inline. Para ello se utiliza el lenguaje de
programación KRL (KUKA Robot Language).
Procedimiento 1. Mover el TCP a la posición que se programará por aprendizaje como punto de
destino.
2. Colocar el cursor en la línea detrás de la cual se insertará la instrucción de
movimiento.
3. Seleccionar la secuencia de menú Instrucciones > Movimiento > PTP.
4. Ajustar los parámetros en el formulario inline.
5. Guardar pulsando Instrucción OK.
.
UD3 Programación de robots industriales On-Line. 230
Ejercicio_3. Programación de movimientos PTP.
Formulario inline WAIT.- Con WAIT puede programarse un tiempo de espera. El movimiento del robot
se detiene durante el tiempo programado. WAIT genera una parada del proceso.
Formulario inline WAITFOR.- La instrucción activa una función de espera dependiente de una señal. En
caso necesario, pueden combinarse de forma lógica varias señales (máximo 12). Si se agrega una
concatenación lógica, en el formulario inline aparecen campos para las señales adicionales y para más
combinaciones.
El robot conduce el TCP a la velocidad definida hasta el punto de destino a lo largo de una recta.
Control de orientación.- El TCP puede tener en el punto inicial una orientación distinta que en el punto de
destino. La orientación en el arranque puede pasar de distintas maneras a la orientación en el destino. Al
programar un movimiento CP debe seleccionarse un tipo.
Procedimiento. 1. Mover el TCP a la posición que se programará por aprendizaje como punto de
destino.
2. Colocar el cursor en la línea detrás de la cual se insertará la instrucción de
movimiento.
3. Seleccionar la secuencia de menú Instrucciones > Movimiento > LIN.
4. Ajustar los parámetros en el formulario inline.
5. Guardar pulsando Instrucción OK.
El robot conduce el TCP con una velocidad definida al punto de destino a lo largo de la trayectoria
circular. La trayectoria circular queda definida por el punto de arranque, un punto intermedio y el punto
de destino.
Control de orientación.- Los movimientos CIRC tienen disponibles los mismos controles de orientación
que los movimientos LIN.
Para movimientos CIRC la unidad de control del robot tiene en cuenta la orientación programada del
punto de destino. La orientación programada del punto auxiliar se ignora.
Procedimiento. 1. Desplazar el TCP a la posición que se programará por aprendizaje como punto
auxiliar.
2. Colocar el cursor en la línea detrás de la cual se insertará la instrucción de
movimiento.
3. Seleccionar la secuencia de menú Instrucciones > Movimiento > CIRC.
4. Ajustar los parámetros en el formulario inline.
5. Pulsar TouchUp PI.
6. Mover el TCP a la posición que se programará por aprendizaje como punto de
destino.
7. Guardar pulsando Instrucción OK.
Spline es un tipo de movimiento cartesiano especialmente apropiado para trayectorias curvas complejas.
En principio, dichas trayectorias también se pueden crear con movimientos LIN y CIRC aproximados
pero el spline presenta una serie de ventajas.
Con un bloque spline se pueden agrupar varios segmentos SPL, SLIN y/o SCIRC en un mismo
movimiento total. Un bloque spline que no contiene ningún segmento no es una instrucción de
movimiento.
Un bloque Spline no debe contener otras instrucciones, p. ej. asignaciones de variables o instrucciones
lógicas. Un bloque Spline no genera una parada del proceso.
En la medición de la herramienta, el usuario asigna a una herramienta montada en la brida de acople del
robot un sistema de coordenadas cartesianas (sistema de coordenadas TOOL).
El sistema de coordenadas TOOL tiene su origen en un punto definido por el usuario. Este se denomina
TCP (Tool Center Point). Por regla general, el TCP se coloca en el punto de trabajo de la herramienta.
Con el TCP de la herramienta que se desea medir debe desplazarse el robot a un punto de referencia desde
4 direcciones diferentes. El punto de referencia puede ser cualquiera. La unidad de control del robot
calcula el TCP a partir de las distintas posiciones de la brida.
Seleccionar en el menú principal Puesta en servicio > Medir > Herramienta > XYZ de 4 puntos.
En el método XYZ Referencia se efectúa la medición de una nueva herramienta con referencia a una
herramienta ya conocida. La unidad de control del robot compara las posiciones de la brida y calcula el
TCP de la nueva herramienta.
Seleccionar en el menú principal la secuencia Puesta en servicio > Medir > Herramienta > Referencia
XYZ.
A la unidad de control del robot se le comunican los ejes del sistema de coordenadas TOOL desplazando
el robot a un punto del eje X y un punto en el plano XY.
Este método se utiliza cuando las direcciones de los ejes deben establecerse con la mayor exactitud
posible.
Seleccionar en el menú principal la secuencia Puesta en servicio > Medir > Herramienta > ABC 2 puntos.
Abrir pinza
OUT [1] = FALSE OUT [4] = TRUE
Cerrar pinza
OUT [4] = FALSE OUT [1] = TRUE
Entradas/Salidas
Entradas/salidas digitales.- La unidad de control del robot puede administrar, como máximo, 4.096
entradas digitales y 4.096 salidas digitales. La configuración es específica del cliente.
Entradas/salidas analógicas.- La unidad de control del robot puede administrar 32 entradas analógicas y
32 salidas analógicas. La configuración es específica del cliente.
Rango de valores permitido para entradas/salidas analógicas: -1,0 hasta +1,0. Esto corresponde a un rango
de tensión de -10 V hasta +10 V. Cuando se sobrepasa el valor, la entrada/salida asume el valor máximo y
aparece un mensaje hasta que el valor se encuentra nuevamente en el rango permitido.
Formulario inline ANOUT estática.- Esta instrucción activa una salida analógica estática. Se pueden
utilizar, como máximo, 8 salidas analógicas al mismo tiempo (estáticas y dinámicas juntas). ANOUT
genera una parada del procesamiento en avance.
Un factor fija la tensión a un nivel determinado. El valor real de la tensión depende del módulo analógico
utilizado. Por ej. un módulo de 10 V entrega, con un factor de 0,5, un valor de tensión de 5 V.
Esta instrucción conecta o desconecta una salida analógica dinámica. Como máximo, se permite conectar
al mismo tiempo 4 salidas dinámicas analógicas. ANOUT genera una parada del proceso.
La tensión queda determinada por medio de un factor. El valor real de la tensión depende de los
siguientes valores:
- Velocidad o generador de funciones.
Por ejemplo, una velocidad de 1 m/s afectado con un factor de 0,5, da como resultado una tensión de 5 V.
- Offset
Por ejemplo, un offset de +0,15 sobre una tensión de 0,5 V da una tensión de 6,5 V.
En la medición de la Base el operario asigna una superficie de trabajo o una herramienta a un sistema de
coordenadas cartesianas (sistema de coordenadas base). El sistema de coordenadas BASE tiene su origen
en un punto definido por el usuario.
El robot debe desplazarse al origen y a otros 2 puntos de la base. Estos 3 puntos definen la nueva base.
En el menú principal, seleccionar Puesta en servicio > Medir > Base > 3 puntos.
Descripción El método indirecto es utilizado cuando no es posible llegar con el robot al origen de la base,
por ej. porque se encuentra en el interior de una pieza o fuera del campo de trabajo del robot.
Debe efectuarse el desplazamiento a 4 puntos de la base, cuyas coordenadas deben conocerse. La unidad
de control del robot calcula la base utilizando estos puntos.
Seleccionar en el menú principal Puesta en servicio > Medir > Base > Indirecto.
La unidad de control del robot guarda el TCP externo como sistema de coordenadas BASE y la pieza
como sistema de coordenadas TOOL. En total pueden guardarse 32 sistemas de coordenadas BASE y 16
sistemas de coordenadas TOOL.
Primero el usuario indica, a la unidad de control del robot, el TCP de la herramienta fija. Para ello el robot
debe desplazarse al TCP con una herramienta ya medida.
A continuación debe comunicarse a la unidad de control del robot la orientación del sistema de
coordenadas de la herramienta fija. Adicionalmente, el usuario alinea el sistema de coordenadas de la
herramienta medida de forma paralela al nuevo sistema de coordenadas. Existen 2 variantes:
- 5D: El usuario informa a la unidad de control del robot de la dirección de avance de la herramienta. Por
defecto, la dirección de avance es el eje X. La orientación de los demás ejes la determina el sistema y el
usuario no la puede cambiar.
El sistema siempre establece igual la orientación de los demás ejes. Si en un futuro se debe volver a medir
la herramienta, p. ej., tras una colisión, bastará con establecer de nuevo la dirección de avance. No se
debe tener en cuenta el giro en la dirección de avance.
- 6D: El usuario informa a la unidad de control del robot de la orientación de los 3 ejes.
En el menú principal, seleccionar Puesta en servicio > Medir > Herramienta fija > Herramienta.
A la unidad de control del robot se le comunican el origen y 2 puntos más de la pieza. Estos 3 puntos
definen la pieza de forma unívoca.
Seleccionar en el menú principal Puesta en servicio > Medir > Herramienta fija > Pieza de trabajo >
Medición directa.
Descripción La unidad de control del robot calcula la pieza en base a 4 puntos cuyas coordenadas se
conocen. No es necesario desplazarse al origen de la pieza.
Seleccionar en el menú principal Puesta en servicio > Medir > Herramienta fija > Pieza de trabajo >
Medición indirecta.
Contenido:
- Programación de robots Off-Line.
- Simulación y ejecución del programa.
- Verificación del funcionamiento del programa.
Mientras que para el usuario son invisibles todos los archivos de sistema, el experto puede verlos y
también editarlos en la ventana de programas. Además, junto a los nombres de archivo y comentarios, en
el nivel del experto pueden mostrarse también las extensiones, atributos y tamaños de los archivos.
Aquí, el fichero con la extensión “SRC” es el archivo con el código de programa propiamente dicho. Aquí
existen las variantes DEF y DEFFCT (con valor de retorno). Por el contrario, el fichero con la extensión
“DAT” contiene los datos específicos para el programa. Esta partición está basada en el concepto de
archivo de KRL: El programa contiene, además de las instrucciones de movimiento, distintas acciones
que deben ser ejecutadas por el robot industrial. Éstas pueden ser determinadas secuencias de
movimientos, por ejemplo abrir o cerrar una herramienta con garras, amén de otras ejecuciones más
complejas, tales como el mando de una pinza de soldadura tomando en consideración las condiciones
límite.
Para efectuar el test de programas es útil, y a veces necesario, poder ejecutar tareas parciales. El concepto
de archivo realizado en KRL, cumple con las necesidades especiales de la programación del robot.
Estructura de archivos.
Un archivo es la unidad que programa el programador. Con ello, un archivo corresponde a una unidad de
programa en el disco duro o en la memoria (RAM). Cada programa en KRL puede constar de uno o
varios archivos. Los programas simples comprenden exactamente un archivo. Las tareas más complejas
se solucionan mejor con un programa compuesto de varios archivos.
El nombre del objeto sin extensión es asimismo el nombre del archivo y por ello se indica en la
declaración con “DEF”. El nombre debe constar de un máximo de 24 caracteres y no debe ser ninguna
palabra clave . Cada archivo comienza con la declaración “DEF” y finaliza con “END”.
DEF NAME(X1:IN)
Declaraciones
Instrucciones
END
Declaración.- Las declaraciones se evalúan antes de la ejecución del programa, es decir, durante la
compilación. En la sección de declaraciones no debe haber ninguna instrucción. La primera instrucción
constituye asimismo el comienzo de la sección de instrucciones.
Lista de datos.- Un programa del robot puede constar de un solo fichero de programa o de un fichero de
programa con la correspondiente lista de datos. La lista de datos y el fichero se señalizan como
Fichero: PROG1.SRC
Lista de datos: PROG1.DAT
Crear programas.
Al contrario que en los editores normales, el editor KCP permite visualizar aquellas partes específicas del
contenido de un programa que el usuario desea ver. Así, por ejemplo, el usuario ve solamente los
contenidos esenciales de un programa, mientras que el experto puede ver el programa completo.
FOLD.
La superficie de operación KUKA utiliza una técnica especial para visualizar con claridad un programa.
Las instrucciones marcadas como comentarios KRL permiten suprimir la visualización de las partes
subsiguientes del programa. De esta manera, el programa queda dividido en apartados adecuados que se
denominan “FOLDS” por tener las características de una carpeta.
Normalmente, las “FOLDS” se encuentran “cerradas”, y sólo pueden ser “abiertas” en el nivel del
experto. Estos elementos contienen información que el usuario no puede ver en la superficie de operación
de KUKA (KUKA--BOF). En el nivel del experto, se puede hacer que un bloque KRL sea invisible para
el usuario. Para ello, se deben delimitar las correspondientes declaraciones o instrucciones pormedio de
las denominaciones “;FOLD” y “;ENDFOLD”.
”FOLD” es simplemente una instrucción para el editor. El compilador interpreta las instrucciones FOLD
gracias a que éstas llevan delante el signo de punto y coma como si fuera un comentario normal.
UD4 Programación de robots industriales Off-Line. 266
Variables y declaraciones.
Variables y nombres.
Junto al uso de constantes, es decir, la indicación directa del valor en forma de números, caracteres, etc.,
en KRL también pueden utilizarse dentro del programa variables y otras formas de datos.
En la programación de robots industriales, las variables son necesarias, por ejemplo, para el
procesamiento del sensor. Con ellas, el valor leído por el sensor se puede memorizar y evaluar en
diferentes lugares del programa. Además, se pueden efectuar operaciones aritméticas para calcular, por
ejemplo, una nueva posición.
En el programa, una variable se representa por medio de un nombre que se puede elegir libremente dentro
de unos determinados límites.
Nombres en KRL.
Puesto que todas las variables del sistema comienzan con ’$’, no se debe utilizar este signo como primer
carácter en los nombres definidos por el propio usuario.
SENSOR_1
BOQUILLA13
P1_HASTA_P12
Una variable se debe considerar como un área dememoria fija, a cuyo contenido puede accederse a través
del nombre de variable. Por ello, la variable se crea para el tiempo que dura el procesamiento del
programa mediante una posición de memoria (lugar) y un contenido de memoria (valor).
Asignación de valor.- Los valores se asignan a las variables mediante el signo de igualdad (=).
CANTIDAD = 5
Significa por tanto que en el área dememoria se registra, con la dirección CANTIDAD, el valor 5. Al
programador no le interesa la apariencia exacta de la dirección, por lo que el compilador la asigna de
manera independiente. Lo único que importa es que en el programa se pueda acceder en todo momento al
contenido de memoria por medio de su nombre.
Duración.
La duración de una variable es el tiempo durante el cual dicha variable tiene asignada una posición de
memoria. Este tiempo depende de si la variable está declarada en un archivo SRC o en una lista de datos:
DECL:
se declaran, por ejemplo, dos variables CANTIDAD y NUMERO del tipo de datos “número entero”
(integer).
Inicialización.
Una vez declarada una variable, su valor se define inicialmente como no válido, ya que de lo contrario
este valor dependería de la ocupación aleatoria de lamemoria. Para poder trabajar con la variable, es
necesario asignarle previamente un determinado valor. Esta primera asignación de un valor a una variable
se denomina inicialización.
La asignación de un valor a una variable es una instrucción y, por ello, no puede efectuarse en la sección
de declaraciones. No obstante, en la sección de instrucciones la inicialización se puede realizar en
cualquier momento. Sin embargo, todas las variables declaradas deben ser convenientemente inicializadas
en una sección de inicialización directamente después de la sección de declaración.
Solamente en las listas de datos está permitido inicializar variables directamente en la línea de
declaración.
Tipos de datos simples son ciertos tipos de datos básicos que existen en lamayoría de lenguajes de
programación. Al contrario que los tipos de datos estructurados, los tipos de datos simples contienen un
único valor.
Campos.
Se conocen como campos aquellos agrupamientos de objetos de un mismo tipo de datos que forman un
objeto de datos. A los componentes individuales de un campo se puede acceder a través de índices.
Mediante la declaración.
Campo unidimensional.
Índice de campo.
Puede poner, por ejemplo, 7 números enteros diferentes en el campo OTTO[]. A cada componente
individual del campo se puede acceder indicando el correspondiente índice (el primer índice es siempre el
1):
De manera gráfica, cabe imaginarse el campo con el nombre OTTO[] como una estantería con 7
compartimentos. De acuerdo con las asignaciones anteriores, la ocupación de los compartimentos
ofrecería el siguiente aspecto:
Si es preciso inicializar todos los elementos de un campo con el mismo número, por ejemplo el 0, no es
necesario programar explícitamente cada asignación, sino que se puede “automatizar” la preasignación
por medio de un bucle y de una variable de conteo:
FOR I = 1 TO 7
OTTO[I] = 0
ENDFOR
Bidimensional.
Además de los campos unidimensionales tratados hasta ahora (es decir, los campos con un solo índice),
en KRL pueden utilizarse también campos bidimensionales o tridimensionales.
Se declara un campo bidimensional 5×4 con 5×4=20 elementos del tipo REAL. Gráficamente, este campo
puede representarse como una matriz con 5 columnas y 4 filas. Con la secuencia de programa
NUM = 0
FOR COLUMNA = 1 TO 5
FOR FILA = 1 TO 4
NUM = NUM + 1
MATRIX[COLUMNA,FILA] = NUM
ENDFOR
ENDFOR
los elementos de la matriz reciben un valor que corresponde con el orden de su asignación. Así pues, la
ocupación de matriz obtenida es la siguiente:
Tridimensional.
Los campos tridimensionales son como variasmatrices bidimensionales dispuestas una tras otra. La
tercera dimensión indica, por así decirlo, el plano en el que se encuentra la matriz (véase Fig. 11). Un
campo tridimensional se declara de forma análoga a los campos unidimensionales o bidimensionales, por
ejemplo:
Cadenas de caracteres.
Tal como se describe anteriormente, el tipo de datos CHAR sólo permite guardar caracteres
individuales. Para utilizar cadenas de caracteres completas, por ejemplo palabras, basta
con definir un campo unidimensional del tipo CHAR:
Como viene siendo habitual, se puede acceder a cada uno de los elementos del campo NAME[], por
ejemplo:
NAME[3] = “G”
NAME[] = “ABCDEFG”
Ocupa los siete primeros elementos del campo NAME[] con las letras A, B, C, D, E,
F y G:
STRUC.
Si es necesario agrupar diferentes tipos de datos, el campo no es apropiado, por lo que debe recurrirse a la
forma general de composición. Con la instrucción de declaración STRUC pueden agruparse diferentes
tipos de datos definidos previamente (o tipos de datos predefinidos) en un nuevo tipo de datos compuesto.
En especial, las composiciones y los campos pueden ser parte de otras composiciones.
Un ejemplo típico del uso de composiciones es el tipo de datos estándar POS. Este tipo consta de 6
valores REAL y 2 valores INT, y fue definido en el archivo $OPERATE.SRC de la siguiente manera:
Punto separador.
Si ahora se utiliza por ejemplo una variable POSICIÓN del tipo de datos de estructura POS, se pueden
ocupar los elementos individualmentemediante el punto separador, por ejemplo:
POSICION.X = 34.4
POSICION.Y = -23.2
POSICION.Z = 100.0
POSICION.A = 90
POSICION.B = 29.5
POSICION.C = 3.5
POSICION.S = 2
POSICION.T = 6
Así pues, las variables POS también admiten, por ejemplo, las siguientes asignaciones:
El movimiento punto a punto (PTP) es la manera más rápida de mover la punta de la herramienta (Tool
Center Point: TCP) desde la posición actual hasta una posición de destino programada. La unidad de
control calcula para ello las diferencias de ángulo necesarias para cada eje.
$VEL_AXIS[número de eje] se programan las velocidades máximas específicas del eje, INT en %,
$ACC_AXIS[número de eje] las aceleraciones máximas específicas del eje, INT en %.
END
En primer lugar, en este programa se especifican las velocidades y aceleraciones de los ejes. Antes de que
pueda ejecutarse un movimiento punto a punto, deben haberse efectuado estas asignaciones.
Coordenadas absolutas.- Si al indicar las coordenadas de los ejes se omiten componentes individuales, el
robot solamente desplaza los ejes indicados. Los otros ejes no cambian de posición. Por lo tanto, con
Sólo se coloca el eje 3 en 45_. Es preciso tener en cuenta que las indicaciones de ángulos en la instrucción
PTP son valores absolutos. El robot no gira el eje otros 45_, sino que se desplaza hasta la posición
absoluta 45_ del eje.
UD4 Programación de robots industriales Off-Line. 273
Coordenadas relativas.- Para el desplazamiento relativo se utiliza la instrucción PTP_REL. Así pues, para
girar por ejemplo los ejes 1 y 4 35_ cada uno, tan sólo es necesario programar:
DEF EJE_PTP2 ( )
INI
END
DEF EJE_PTP3 ( )
; Declaraciones
INT X,I
POS AVANCE
;
;Inicializar
INI
X=0
AVANCE.X = 50.0
AVANCE.Y = 0.0
AVANCE.Z = 500.0
FOR I = 1 TO 6
$ACC_AXIS[I] = 50; Aceleración de los ejes
$VEL_AXIS[I] = 25; Velocidad de los ejes
ENDFOR
$BASE = BASE_DATA[1]; Base
$TOOL = TOOL_DATA[2] ; Herramienta ventosa
;
;Programa
PTP HOME Vel= 100 % DEFAULT
END
UD4 Programación de robots industriales Off-Line. 274
Movimientos lineales LIN.
Para un movimiento lineal, la KR C... calcula una recta desde la posición actual (en el programa, éste es
el último punto programado) hasta la posición que se indicó en la instrucción de movimiento.
La programación de un movimiento lineal se efectúa utilizando las palabras claves LIN o LIN_REL junto
con la indicación del punto de destino, es decir, igual que en la programación PTP. Para los movimientos
lineales, la posición de destino se indica de forma cartesiana. Por lo tanto, solamente se admiten los tipos
de datos FRAME o POS.
DEF EJE_LIN ( )
INI
END
Para definir unívocamente una circunferencia o arco de circunferencia en el espacio, se necesitan 3 puntos
que sean diferentes entre sí y no se encuentren sobre una recta.
Al igual que en PTP o en LIN, el punto inicial de un movimiento circular se vuelve a indicar mediante la
posición actual.
Por ello, para programar un movimiento circular con las instrucciones CIRC o CIRC_REL, además del
punto de destino debe definirse un punto intermedio. Para calcular la trayectoria de movimiento con la
unidad de control, del punto auxiliar solamente se evalúan los componentes translatorios (X, Y, Z). La
orientación de la punta de la herramienta cambia continuamente, dependiendo del control de orientación,
desde el punto inicial hasta el punto final, o bien se mantiene constante.
Además de la posición intermedia y de la posición de destino, puede programarse un ángulo circular con
la opción CA (ángulo circular). La geometría del arco de circunferencia se sigue especificando mediante
el punto inicial, el punto auxiliar y el punto de destino. Sin embargo, la posición de destino a alcanzar
realmente en el arco de circunferencia se especifica mediante el ángulo de circunferencia programado.
Eso resulta particularmente útil a la hora de reprogramar la posición de destino (sin modificar la
geometría del círculo).
PTP {POS: X 980,Y -238,Z 718,A 133,B 66,C 146,S 6,T 50}
CIRC {X 925,Y -285,Z 718},{X 867,Y -192,Z 718,A 155,B 75,C 160}
CIRC {X 982,Y -221,Z 718,A 50,B 60,C 0},{X 1061,Y -118,Z 718,
A -162,B 60,C 177}, CA 300.0
$CIRC_TYPE=#PATH
CIRC {X 867,Y -192,Z 718},{X 982,Y -221,Z 718,A 0}, CA -150
LIN {A 100} ;
CIRC {X 963.08,Y -85.39,Z 718},{X 892.05,Y 67.25,Z 718.01,
A 97.34,B 57.07,C 151.11}
; movimiento circular relativo
CIRC_REL {X -50,Y 50},{X 0,Y 100}
END
Signo !
Para ello, en KRL solamente es necesario programar un signo ! como posicionador para las coordenadas
que posteriormente se desean programar por aprendizaje:
PTP !
LIN ! C_DIS
CIRC ! ,CA 135.0
Al programar por aprendizaje las coordenadas cartesianas, siempre se toma como sistema de referencia el
sistema de coordenadas base ($BASE) que en ese momento es válido en el sistema. Por ello, debe
asegurarse de que durante la programación por aprendizaje esté siempre declarado el sistema de
coordenadas base necesario para el movimiento posterior.
La trayectoria de giro y rotación y aceleraciones deben inicializarse antes de ejecutar un movimiento CP.
DEF EJE_CP ( )
INI
END
$ORI_TYPE = #VAR
$CIRC_TYPE = #PATH
$ORI_TYPE = #CONSTANT
$CIRC_TYPE = #BASE
$ORI_TYPE = #VAR
$CIRC_TYPE = #BASE
$ORI_TYPE=#CONST
LIN {X 700,Y -300,Z 1000,A 23,B 230,C -90}
LIN_REL {X 300}
$ORI_TYPE=#CONST
$CIRC_TYPE=#PATH
CIRC {X 982,Y -221,Z 718,A 50,B 60,C 0},{X 1061,Y -118,Z 718, A -162,B 60,C 177}, CA 300.0
CIRC_REL {X -50,Y 50},{X 0,Y 100}
Para aumentar la velocidad puede utilizarse el posicionamiento aproximado en aquellos casos en donde
no es necesario posicionar exactamente sobre el punto. El robot acorta el recorrido.
El tamaño del rango de posicionamiento se establece mediante la variable $APO.CPTP (en %).
La distancia máxima de aproximación esta limitada en los datos máquina a 90º para todos los ejes.
El posicionamiento aproximado de un punto se visualiza en la instrucción PTP indicando la palabra clave
C_PTP
$APO.CPTP = 50
LIN {X 700,Y -300,Z 1000,A 23,B 230,C -90} C_PTP
En este caso, el posicionamiento aproximado se inicia cuando el primer eje tiene que recorrer un ángulo
residual de 45º (50% de 90º) hacia el punto de posicionamiento aproximado. Así pues, el posicionamiento
concluye exactamente cuando el primer eje ha recorrido un ángulo de 45º desde el punto de
posicionamiento aproximado.
DEF EJE_APROX_PTP ( )
INI
DEF EJE_APROX_LIN ( )
INI
La tarea de posicionamiento aproximado entre los pasos CIRC y otros pasos CP (LIN o CIRC) es casi
idéntica al posicionamiento aproximado entre dos pasos LIN. Tanto el movimiento de orientación como
el translatorio deben pasar sin saltos de velocidad de uno a otro contorno de paso individual.
DEF EJE_APROX_LIN ( )
INI
PTP HOME Vel= 100 % DEFAULT
PTP {POS: X 980,Y -238,Z 718,A 133,B 66,C 146,S 6,T 50}
; control de orientación variable referido al espacio
; posicionamiento aproximado según el criterio de distancia
$APO.CDIS=20
CIRC {X 925,Y -285,Z 718},{X 867,Y -192,Z 718,A 155,B 75,C 160} C_DIS
; control de orientación constante referido al espacio
; punto de destino especificado mediante la indicación del ángulo
; no es posible el posicionamiento aproximado debido a la parada del procesamiento en avance mediante
$OUT
$ORI_TYPE=#CONST
CIRC {X 982,Y -221,Z 718,A 50,B 60,C 0},{X 1061,Y -118,Z 718,A -162,B 60,C 177}, CA 150 C_ORI
$OUT[3]=TRUE
; control de orientación variable referido a la trayectoria
; posicionamiento aproximado según el criterio de orientación
$ORI_TYPE=#VAR
$CIRC_TYPE=#PATH
CIRC {X 963.08,Y -85.39,Z 718},{X 892.05,Y 67.25,Z 718.01,A 97.34,B 57.07,C 151.11} C_ORI
; movimientos circulares relativos
; posicionamiento aproximado según el criterio de velocidad
$APO.CVEL=50
CIRC_REL {X -50,Y 50},{X 0,Y 100} C_VEL
; posicionamiento aproximado según el criterio de distancia
$APO.CDIS=40
CIRC_REL {X -50,Y 50},{X 0,Y 100} C_DIS
CIRC_REL {X -50,Y 50},{X 0,Y 100}
PTP HOME Vel= 100 % DEFAULT
END
Ramificaciones de programa.
GOTO MARCA
El puntero del programa salta a la posición MARCA. Pero la posición deberá estar definida
imprescindiblemente con:
MARCA:
La instrucción GOTO conduce rápidamente a programas no estructurados sin una buena visión global,
dado que además cualquier instrucción GOTO puede ser sustituida por cualquier otra instrucción de
bucle, deberá, en lo posible, evitarse la utilización de GOTO.
Se permiten la cantidad de instrucciones que se desee. Estas pueden constar a su vez de otras
instrucciones IF. Esto significa que se pueden encajar los bloques IF. Sin embargo, cada instrucción IF
debe cerrarse con una instrucción ENDIF propia.
Distribuidor SWITCH.
Si existen más de 2 alternativas, se puede programar bien con una estructura IF encajada o bien – más
confortable – utilizar en la programación el distribuidor SWITCH.
La instrucción SWITCH es una instrucción de selección para diferentes ramificaciones del programa. Un
criterio de selección es ocupado antes de la instrucción SWITCH con un valor determinado. Si el valor
concuerda con una identificación de bloque, se procesa la ramificación de programa correspondiente,
saltando el programa, sin tener enconsideración la identificación de bloque subsiguiente, hasta la
instrucción ENDSWITCH. Si no concuerda una identificación de bloque con el criterio de selección, se
procesará, en caso de que exista, un bloque DEFAULT (por defecto). En caso contrario se continuaría con
la instrucción siguiente a partir de la instrucción ENDSWITCH.
A una ramificación de programa es permisible asignar varios identificadores de bloque. Sin embargo, a la
inversa, no es recomendable utilizar un identificador de bloque repetidas veces ya que sólo es considerada
la primera ramificación con la identificación correspondiente.
Los tipos de datos permitidos del criterio de selección son INT, CHAR y ENUM. El tipo de dato del
criterio de selección deberá concordar con la identificación de bloque.
La instrucción de DEFAULT (por defecto) puede faltar, pero sólo puede aparecer una sola vez dentro de
una instrucción SWITCH.
Con una instrucción SWITCH puede llamar p. ej. diferentes subprogramas en dependencia de un número
de programa. El número de programa podría enviarse p. ej. del PLC a las entradas digitales del KR C1.
Así está disponible como criterio de selección en forma de un valor Integer.
INT VERSION
SWITCH VERSION
CASE 1
ACCION_A()
CASE 2
ACCION_B()
CASE 3
ACCION_C()
CASE 4
ACCION_D()
DEFAULT
ERROR()
ENDSWITCH
UD4 Programación de robots industriales Off-Line. 286
Bucles.
La estructura base siguiente para el control del procesamiento del programa son los bucles que contienen
una o varias instrucciones de procesamiento repetitivas hasta que se haya cumplido una determinada
condición. Los bucles se diferencian según la forma de la condición y posición donde se produce la
interrogación respecto a su continuación.
El salto desde fuera hacia dentro de un cuerpo de bucle no está permitido siendo rechazado por la unidad
de control (mensaje de fallo).
Bucles sinfín.
LOOP
Instrucciones
ENDLOOP
La ejecución repetida del bloque de instrucción sólo se puede finalizar mediante la instrucción EXIT.
Con la instrucción EXIT puede terminar cualquier bucle prematuramente. Llamando a EXIT dentro de un
bloque de instrucción del bucle, se terminan los ciclos de bucles, continuando el programa detrás de la
instrucción del final del bucle.
Para los bucles sinfín, el EXIT es, sin embargo, la única posibilidad de finalizar la ejecución del bucle.
Respecto a ello véase el ejemplo siguiente:
LOOP
LIN P_1
LIN P_2
IF $IN[30]==TRUE THEN
EXIT
ENDIF
ENDLOOP
Los bucles de conteo son ejecutados hasta que la variable de conteo sobrepase o quede por debajo de un
determinado valor, bien mediante conteo ascendente o descendente. En la KRL se tiene a disposición una
instrucción FOR.
De esta forma se permite, con una buena visión global, programar una determinada cantidad de
secuencias.
Como valor de Arranque y valor Final del contador deberá indicar, respectivamente, una expresión del
tipo Integer (entero). Las expresiones son analizadas al principio del bucle. La variable INT Contador
(por consiguiente deberá estar declarada previamente) es impuesta con el valor de arranque, aumentando
o disminuyendo según el ancho de paso tras cada secuencia del bucle.
El ancho de paso no debe ser ni una variable ni tampoco cero. Si se omite la indicación del ancho de paso,
dispondrá por defecto el valor estándar 1. También se admiten valores negativos para el ancho de paso.
Para cada instrucción FOR debe haber una instrucción ENDFOR. El programa continuará procesándose,
después de la última secuencia de bucle, en la primera instrucción detrás de ENDFOR.
El valor del contador puede utilizarse tanto dentro como fuera del bucle. Dentro del bucle, este sirve p.ej.
de índice actual para la edición de los campos. Después de salir del bucle, el contador adopta el último
valor tomado (es decir Final+Ancho de paso).
DEF FOR_PROG()
…
INT I, J
INT FELD[10, 6]
…
FOR I=1 TO 9 STEP 2
FOR J=6 TO 1 STEP -1
FELD[I,J] = I + J
ENDFOR
ENDFOR
…
END
El bucle WHILE interroga al principio de la repetición sobre una condición de ejecución. Se trata de un
bucle rechazante, ya que no se ejecuta ni una sola vez si la condición de ejecución no es cumplida ya
desde el principio. La sintaxis del bucle WHILE es:
La condición de ejecución es una expresión lógica que puede tratarse tanto de una variable boolena, una
llamada de función booleana o una combinación lógica con un resultado booleano.
El bloque de instrucciones se ejecuta cuando la condición lógica ha tomado el valor de TRUE, es decir,
que la condición de ejecución se ha cumplido. Cuando la condición lógica tiene el valor FALSE, el
programa continua procesándose detrás de la instrucción ENDWHILE. Por consiguiente, deberá finalizar
cada instrucción WHILE con una instrucción ENDWHILE.
Bucle REPEAT.
Lo contrario a un bucle WHILE es un bucle REPEAT. Con REPEAT se interroga al final del bucle acerca
de la condición de interrupción. Por ello un bucle REPEAT realizará, en todo caso, el ciclo completo,
incluso cuando se cumpla ya de entrada la condición de interrupción desde el principio del bucle.
REPEAT
Instrucciones
UNTIL Condición de interrupción
La condición de interrupción es análoga a la del bucle WHILE, una expresión lógica, una variable
booleana, una llamada de función booleana o una combinación lógica con un resultado booleano:
W=1
REPEAT
W=W+1
UNTIL $IN[1]==TRUE
UD4 Programación de robots industriales Off-Line. 289
Instrucciones de espera. WAIT.
Con la instrucción WAIT puede forzar la detención del programa hasta que se produzca una situación
determinada. Se hace una diferenciación entre esperar que se produzca un evento y el establecimiento de
temporizaciones de espera.
Espera a un evento.
Con la instrucción, WAIT FOR Condición, puede detener el procesamiento del programa hasta que se
produzca el evento especificado con Condición:
La condición WAIT FOR puede aplicarse a las variables $IN[], $OUT[], $CYCFLAG[], $TIMER[],
$TIMER_FLAG[], $FLAG[] e I[].
Valores variables
En lugar de un número se transfiere una variable. Para ello es necesario una declaración de las variables
en la lista de datos (*.dat). Una convención en el archivo fuente (*.src) fija el valor de la variable.
Tiempos de espera.
La instrucción WAIT SEC sirve para programar los tiempos de espera en segundos: WAIT SEC Tiempo
Tiempo es una expresión aritmética REAL, con la que puede indicar la cantidad de segundos que desea
que dure la interrupción del procesamiento del programa. Si el valor es negativo, no se produce la espera.
La KR C... conoce 1026 entradas y 1024 salidas y se configuran a través de bus de campo. Las entradas
ueden ser leídas, las salidas pueden ser leídas y activadas. Estas son excitadas a través de las variables de
sistema $IN[Nr] o $OUT[Nr]. Las salidas no utilizadas pueden usarse como marcas.
Si se excitan entradas y salidas individualmente, se puede hablar de entradas y salidas binarias. Las
salidas binarias pueden tomar 2 estados: Low o High (nivel de tensión bajo o alto). Por ello, se tratan
estas variables como del tipo BOOL. Por consiguiente, las salidas pueden ser activadas con la variables
del sistema
SIGNAL.
En la KR C se pueden además asignar nombres a cada una de las entradas/salidas. Para ello sirve la
declaración de la señal. Esta deberá estar ubicada, como todas las declaraciones, en la parte de
declaración del programa. Es decir que también se puede programar:
DEF BINSIG ( )
;--------- Sección de declaración ---------
SIGNAL CANCELAR $IN[16]
SIGNAL IZQUIERDA $OUT[14]
SIGNAL DERECHA $OUT[15]
;------------- Sección principal------------
IZQUIERDA=FALSE
DERECHA=FALSE
WHILE CANCELAR==FALSE ;Cancelar con entrada 16 activa
IF $IN[1] THEN
IZQUIERDA=TRUE
DERECHA=FALSE
ELSE
IZQUIERDA=FALSE
DERECHA=TRUE
ENDIF
ENDWHILE
END
$TIMER_STOP[1]…$TIMER_STOP[16]:
$TIMER_STOP[4] = FALSE
$TIMER_STOP[4] = TRUE ; Arranca, por ejemplo, el temporizador 4,
Vuelve a detener el temporizador 4. Mediante una asignación normal de valores, se puede reiniciar en
todo momento la variable de temporizador afectada, por ejemplo:
$TIMER[4] = 0
Si el valor de una variable de temporizador cambia demenos amás, el correspondiente flag se coloca en
TRUE (condición Timer--Out), por ejemplo:
$TIMER_FLAG[4] = TRUE
Al arrancar la unidad de control, todas las variables de temporizador se ocupan automáticamente con 0,
los flags
$TIMER_STOP[1] = TRUE
LOOP
IF(TIMER[1] >= 1000) THEN
PTP {AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}
ENDLOOP
Flag.
Los 1024 flags $FLAG[1]…$FLAG[1024] se utilizan como marcas globales. Estas variables booleanas se
predefinen con FALSE. Usted puede ver en cualquier momento sobre la superficie de operación el valor
actual de los flags mediante el punto de menú “Visualización”.
Para lamanipulación de diferentes objetos de datos, existe una gran cantidad de operadores y funciones
que permiten crear fórmulas. El poder de un lenguaje de programación de robots depende tanto de los
objetos de datos admitidos como de las posibilidades demanipularlos.
Operadores.
Operadores son los operadores matemáticos habituales, en contraposición a funciones tales como
SIN(30), que proporciona el seno del ángulo de 30º. Así pues, en la operación 5+7, el 5 y el 7 son los
operandos y el signo + es el operador.
En cada operación, el compilador comprueba la admisibilidad de los operandos. Así, por ejemplo, 7 - 3
es, como resta de dos números enteros, una operación admisible. Por el contrario, 5 + “A” es, como
adición de un valor entero a un carácter, una operación no permitida.
En algunas operaciones como 5 + 7.1 (es decir, la suma de números enteros y valores reales) se efectúa
una adaptación del tipo y el valor entero 5 es convertido en el valor real 5.0.
Operadores aritméticos.
Los operadores aritméticos corresponden a los tipos de datos INTEGER (ENTERO) y REAL. En KRL se
admiten los 4 tipos de cálculo básico.
El resultado de una operación aritmética solamente es INT cuando los dos operandos son del tipo
INTEGER (entero). Si el resultado de una división de enteros no es un número entero, se desecha la parte
decimal. Cuando, como mínimo, uno de los dos operandos es REAL, entonces también el resultado es de
tipo REAL
DEF ARITH()
;--------- Sección de declaración ---------
INT A,B,C
REAL K,L,M
;---------- Inicialización ---------
;antes de la inicialización, todas las variables son no-válidas.
A = 2 ;A=2
B = 9.8 ;B=10
C = 7/4 ;C=1
UD4 Programación de robots industriales Off-Line. 295
K = 3.5 ;K=3.5
L = 0.1 E01 ;L=1.0
M = 3 ;M=3.0
;------------- Sección principal------------
A = A * C ;A=2
B = B - ’HB’ ;B=-1
C = C + K ;C=5
K = K * 10 ;K=35.0
L = 10 / 4 ;L=2
L = 10 / 4.0 ;L=2.5
L = 10 / 4. ;L=2.5
L = 10./ 4 ;L=2.5
C = 10./ 4. ;C=3
M = (10/3) * M ;M=9.0
END
Operador geométrico.
El operador geométrico se simboliza en KRL con el símbolo de dos puntos “:”. Este operador ejecuta,
entre los tipos de datos FRAME y POS un combinación lógica de frames.
Una combinación lógica de frames se evalúa de izquierda a derecha. El resultado siempre tiene el mismo
tipo de datos que el operando que, en el lado derecho, más alejado se encuentre.
En una habitación hay una mesa. El sistema de coordenadas del ESPACIO está definido como sistema de
coordenadas fijo en el rincón delantero izquierdo de la habitación.
La mesa se encuentra paralela a las paredes de la habitación. La esquina delantera izquierda de la mesa se
encuentra exactamente a 600 mm de la pared delantera y a 450mm de la pared izquierda de la habitación.
La mesa tiene 800 mm de altura.
Sobre lamesa hay una pieza de forma cuadrangular. El sistema de coordenadas PIEZA se debe colocar en
una esquina de la pieza. Para luego poder manipular convenientemente la pieza, el eje Z del sistema de
UD4 Programación de robots industriales Off-Line. 296
coordenadas PIEZA mira hacia abajo. Con respecto al eje Z del sistema de coordenadas MESA, la pieza
está girada 40_. La posición del sistema de coordenadas PIEZA respecto al sistema de coordenadas
MESA es X=80 mm, Y = 110 mm y Z = 55 mm.
Ahora, la tarea es describir el sistema de coordenadas PIEZA con respecto al sistema de coordenadas
HABITACIÓN. Para ello, se deben declarar en primer lugar las siguientes variables de frame:
Ahora, el sistema de coordenadas PIEZA con respecto al sistema de coordenadas ESPACIO se obtiene
mediante el operador geométrico, para
BASE = MESA:PIEZA
Con los operadores de comparación que figuran en Tab. 6 se pueden formar expresiones lógicas. Por
tanto, el resultado de una comparación es siempre del tipo de datos BOOL, ya que una comparación sólo
puede ser verdadera (TRUE) o falsa (FALSE).
…
BOOL A,B
…
B = 10 < 3 ;B=FALSE
A = 10/3 == 3 ;A=TRUE
B = ((B == A) <> (10.00001 >= 10)) == TRUE ;B=TRUE
A = “F” < “Z” ;A=TRUE
…
Operadores lógicos.
Operadores de bits.
Con los operadores de bits se pueden combinar lógicamente números enteros, combinando lógicamente
entre sí los bits individuales cada número. Los operadores de bits combinan bits individuales del mismo
modo que los operadores lógicos combinan dos valores booleanos, si se considera el valor de bit 1 como
TRUE y el valor 0 como FALSE.
Si se utilizan expresiones más complejas con varios operadores, deben tenerse en cuenta las diferentes
prioridades de cada uno de ellos, ya que las expresiones individuales se ejecutan siguiendo el orden de sus
prioridades.
Para calcular ciertos problemas matemáticos, en KRL se encuentran predefinidas algunas funciones
estándar. Éstas pueden utilizarse directamente sin otra declaración.
B = -3.4
A = 5 * ABS(B) ;A=17.0
;
A = SQRT(16.0801) ;A=4.01
;
A = SIN(30) ;A=0.5
B = 2*COS(45) ;B=1.41421356
C = TAN(45) ;C=1.0
;
A = COS(60) ;A=0.5
B = ACOS(A) ;B=60
;
A = SIN(60) ;A=0.8660254
B = 90-ACOS(A) ;B=60
Declaración de la señal.
Con la declaración de la señal no sólo se puede asignar a determinadas entradas/salidas un nombre, sino
que además, se pueden agrupar varias entradas/salidas binarias a una sola señal digital. Con la declaración
Se puede declarar ahora, p. ej., las salidas 10 hasta 20 a través de una variable interna declarada como
Entera SALI y activada como palabra de 11 bit. La salida digital declarada de este modo, se puede definir
para cada asignación entera posible a la variable SALI, p. ej.:
SALI = 35
SALI = ’B100011’
SALI = ’H23’
DEF BINSIG ( )
;--------- Sección de declaración ---------
SIGNAL CANCELAR $IN[16]
SIGNAL POSICION $OUT[13] TO $OUT[15]
;------------- Sección principal------------
POSICION=’B010’
WHILE CANCELAR==FALSE ;Cancelar con entrada 16 activa
IF $IN[1] THEN
POSICION=’B010’
ELSE
POSICION=’B100’
ENDIF
ENDWHILE
END
En el momento que el robot haya alcanzado el punto de destino de un paso demovimiento, pueden
activarse hasta 8 salidas referidas a la ejecución principal y sin detención de laejecución en avance. Para
ello sirve la siguiente instrucción:
Con la instrucción PULSE pueden activarse o desactivarse cada una de las salidas durante un tiempo
determinado.
PULSE($OUT[4],TRUE,0.7)
Pone por ejemplo, a nivel alto, la salida 4 durante 0,7 segundos. Este impulso puede procesarse
paralelamente con el programa del robot (durante este proceso no se detiene el intérprete).
Las temporizaciones de impulsos realizables van de 0.012 a 231 segundos. La retícula es de 0.1
Para reducir durante la programación la tarea de escribir aquellos apartados de programa que se repiten
con frecuencia, así como la longitud del programa, se han introducido subprogramas y funciones como
construcción de lenguaje.
Un efecto de los subprogramas y de las funciones que no conviene infravalorar es la posibilidad de volver
a utilizar en otros programas los algoritmos que ya han sido registrados, y especialmente el uso de
subprogramas para estructurar el programa. Este tipo de estructuración puede generar un estructura
jerárquica, demodo que se pueda activar cada uno de los subprogramas por un programa de nivel
superior, se puedan procesar completamente tareas parciales y se puedan enviar los resultados.
Declaraciones.
Un subprograma o una función son partes de programas separadas, con encabezamiento de programa,
sección de declaraciones y de instrucciones, que pueden llamarse desde cualquier parte del programa
según convenga. Una vez procesado el subprograma o la función, se produce un salto hacia atrás hasta la
instrucción subsiguiente después de activarse el subprograma.
Desde un subprograma o bien una función, pueden llamarse otros subprogramas y/o funciones. La
profundidad de encajado permitida en este caso es de 20. Si se excede estenúmero, aparecerá un mensaje
de fallo indicando “REBASE APILAMIENTO DE PROGRAMA”. La llamada recursiva de subprograma
o de funciones está permitida. Dicho con otras palabras: un subprograma o una función puede volver a
llamarse a sí mismo.
Subprogramas DEF
Todos los subprogramas se declaran exactamente igual que los programas principales, con
la convención DEF más el nombre, y se cierran con END, p. ej.:
DEF SUBPROG()
…
END
Al contrario que los subprogramas, las funciones emiten un valor de retorno. Una función comienza con
la palabra clave “DEFFCT”. El tipo de datos del valor de retorno se indica inmediatamente después de la
palabra clave “DEFFCT”. El propio valor de retorno es transferidomediante “RETURN”.Mediante la
palabra clave “ENDFCT” se finaliza la función.
) - /
/
! "# $
% ! "# $
&'
&(
&(
/ &
)& * + # ,
-& + # ,
./ & 0
)& 12 # ,
-& 2 # ,
/& 0
KUKA.Sim Pro es un programa que permite elaborar diseños en 3D de instalaciones equipadas con
robots de KUKA. Con él se puede simular y examinar sin esfuerzo cualquier diseño y concepto. Idóneo
para integradores de sistemas.
La biblioteca incluye una amplia gama de componentes eficientes; éstos no son sólo geométricos, sino
que además tienen en parte una estructura paramétrica y cuentan con un comportamiento que puede
aplicarse directamente en la simulación (p. ej. cintas transportadoras, barreras luminosas, etc.). Cargue
por ejemplo una valla de protección y adapte la altura y anchura de ésta a sus necesidades. Este principio
modular evita que los componentes tengan que ser dibujados de nuevo y supone por lo tanto un ahorro
considerable de tiempo.
Los componentes disponen de puntos "magnéticos" mediante los que pueden unirse fácilmente a otros
componentes. Los componentes pueden combinarse también con señales digitales de entrada y salida de
KUKA.OfficeLite para poder, por ejemplo, controlar la garra o evaluar las señales del sensor del
componente. Las líneas transportadoras del tipo "push-pull" (empuje-tracción) y las líneas transportadoras
con velocidad constante también pueden ser simuladas en KUKA Sim Pro. KUKA.Sim Pro dispone,
además, de un lenguaje abierto para crear archivos de órdenes, Python 2.6, con el que puede ampliarse el
comportamiento de los componentes de forma flexible.
También es posible crear y guardar bibliotecas de componentes propias para sus productos; de este modo
podrá integrar dichos componentes en otros conceptos de instalación en cualquier momento y
presentárselos a sus clientes.
Los formatos CAD estándar que pueden importarse son: STL (Binario/ASCII), 3DS, VRML1, Robface y
Google Sketchup.
Se dispone de una amplia gama de funciones API y COM con las que podrá programar y utilizar sus
propios Plug-Ins para KUKA.Sim Pro.
Se utilizan las funciones de KUKA.Sim Pro y KUKA.OfficeLite para crear su programa de robot KRL.
En combinación con KUKA.OfficeLite podrá crear análisis de tiempos de ciclo en tiempo real y con alta
precisión con el fin de verificar el concepto de su instalación.
UD4 Programación de robots industriales Off-Line. 317
Arranque del programa y menús.
La primera pantalla que aparece es en la que vamos a desarrollar todo el trabajo y simula un entorno en
3D es el interfaz usuario:
En la parte superior izquierda podemos aprecia una barra en la que se encuentran lo siguientes menús
desplegables:
Funciones de navegación:
- Orbit: esta función permite girar en una órbita de tres dimensiones el entorno de trabajo
alrededor del centro de interés.
- Pan: esta función permite mover el entorno de trabajo en cualquier dirección de forma paralela a
la pantalla.
- Zoom: esta función permite ampliar la zona de trabajo para una mejor visualización.
- Fill: esta función permite encuadrar dentro de la zona de trabajo todos los elementos que existen
dentro de ella de una forma rápida sin necesidad del zoom.
Select: La selección de los componentes del menú desplegable aparece cuando se selecciona la
herramienta de selección. Permite al usuario seleccionar un componente de una lista. También se muestra
una lista de los componentes invisibles disponibles en el mundo 3D. Esto permite al usuario seleccionar y
cambiar los parámetros de los componentes invisibles que no están disponibles para la recogida de la
World 3D.
Translate: El plano de referencia se puede seleccionar (World, Parent, Object y User). La barra de
herramientas dinámica permite transladar el objeto seleccionado con los valores numéricos. Estos valores
se pueden restablecer a cero pulsando el botón específico de coordenadas.
Rotate: La barra de herramientas dinámica rota el objeto seleccionado con los valores de entrada. Estos
valores se pueden restablecer a cero pulsando el botón específico de coordenadas. También hay un botón
para ajustar a una orientación de un marco o de la superficie. Hay una opción para configurar un origen
temporal y traducir o rotar el objeto alrededor de ese punto.
PnP: La barra de herramientas dinámica ofrece opciones plug y play de conexión para los componentes.
Este panel es el área de salida principal para mensajes. Es posible Depurar mensajes proveen información
adicional acerca de las operaciones que están siendo ejecutadas.
Campo de información.
Cambia el dibujo de las huellas. Si trazas son globalmente fuera, que son invisibles,
independientemente del estado de la señal en un robot individuo
Posibilidad de detectar si los componentes están fuera del alcance del robot para los
componentes actualmente seleccionados. Cuando la distancia es excedida el axis se
mostrará en rojo. Esta función habitualmente es usada para cotejar los límites de la juntura
de un robot con los datos de programación introducidos.
KUKA.OfficeLite permite crear y optimizar offline programas para robots de KUKA en cualquier PC.
KUKA.OfficeLite es casi idéntico al software de sistema KUKA KR C4. Gracias al uso de la interfaz
original KUKA SmartHMI y de la sintaxis KRL, el manejo y la programación offline coinciden
exactamente con los del robot. KUKA.OfficeLite se suministra como imagen de disco virtual preinstalada
y puede utilizarse con el software Vmware. Los programas KRL pueden transferirse sin modificación
alguna al sistema de control del robot KUKA.
Características.
Este sistema de programación posee las mismas características que el software de sistema KUKA:
Disponibilidad de todo el repertorio de funciones de las respectivas ediciones del software de sistema,
pero sin posibilidad de conectar hardware periférico (p. ej. bus de campo basado en Ethernet).
Comprobación de sintaxis KRL mediante el compilador y el interpretador disponibles; creación de
programas KRL de usuario ejecutables.
Control completo de la ejecución de un programa de aplicación de robot en tiempo real. Ello permite
optimizar la duración de los ciclos.
Optimización de programas: el software de tecnología KUKA se puede utilizar e instalar en todo
momento.
De este modo, en un PC estándar se puede disponer del software de sistema completo de KUKA.
Es posible simular señales de salida digitales para comprobar en el programa KRL la reacción a dichas
señales.
No es posible emplear KUKA.OfficeLite para controlar un robot real.
Campo de aplicación.
Caja General > Objects > Beberage > Trasports > Dolly Tray
El robot 2 coge el objeto de la segunda mesa y lo introduce en la caja depositada en la primera mesa.
Insertar conveyor 1.
Insertar conveyor 2 de 700 x 700 x 700.
Unir los dos conveyor con PNP.
Insertar block y modificar el tamaño a 400 x 400 x 400.
Guardar el block modificado como:
File > save componet as > Block
Insertat pallet.
Editar el conveyor 1 y 2.
En el conveyor 1 insertar el Block guardado.
Param > Creator > Part > Ruta para insertar el Block.
BucketConveyor.
http://www.youtube.com/watch?v=Y3STLp3qQgo
http://www.youtube.com/watch?v=PY5Lv0yiymE
http://www.youtube.com/watch?v=U-CjKKG9_DI
https://www.youtube.com/watch?v=OaO6BrNQWXI
https://www.youtube.com/watch?v=PeQeY7nCwHo
https://www.youtube.com/watch?v=fOhFpYgsiAE&list=UUqXSuUJS45RXxCO4MMv2XCA
https://www.youtube.com/watch?v=fUFrHDTAWBg
https://www.youtube.com/watch?v=Cgdssu5cJ1o
http://www.youtube.com/watch?v=hyOvwn-P55Q
http://www.youtube.com/watch?v=CwzxwRJvCRc&feature=c4-
overview&list=UUDZlfEcsMr7ZcWz0xmfoL2Q
http://www.youtube.com/watch?v=YTf99yODUmE
https://www.youtube.com/watch?v=e_hx4CGLTpo
https://www.youtube.com/watch?v=lSFMjcBLgM8
Descripción general La ventaja de RAPID es que, excepto por el hecho de que presenta una funcionalidad
que aparece en otros lenguajes de programación de alto nivel, ha sido diseñado
especialmente para controlar robots. Y lo que es más importante, existen instrucciones
para hacer que el robot se mueva.
MoveL es una instrucción que mueve el robot linealmente (en una línea recta) desde su
posición actual hasta la posición especificada.
v1000 especifica que la velocidad del robot debe ser de 1.000 mm/s.
fine especifica que el robot debe moverse exactamente hasta la posición especificada y
no tomar atajos en las esquinas en su desplazamiento hasta la siguiente posición.
ToPoint. El punto de destino, definido por una constante del tipo de dato robtarget. Al
programar con el FlexPendant, puede asignar un valor robtarget apuntando a una
posición con el robot. Al programar fuera de línea, puede resultar complicado calcular
las coordenadas de una posición.
Robtarget la posición x=600, y=-100, z=800 puede declararse y asignarse de la forma
siguiente:
CONST robtarget p10 := [ [600, -100, 800], [1, 0, 0, 0], [0, 0, 0, 0], [ 9E9, 9E9, 9E9,
9E9, 9E9, 9E9] ];
Speed. La velocidad del movimiento, definida por una constante del tipo de dato
speeddata. Existe un buen número de valores predefinidos, como por ejemplo:
speeddata predefinido Valor
v5 5 mm/s
v100 100 mm/s
v1000 1.000 mm/s
vmax Velocidad máxima del robot
Zone Especifica una zona de esquina definida por una constante del tipo de dato
zonedata. Existe muchos valores predefinidos, como por ejemplo:
zonedata predefinido Valor
Tool. Especifica la herramienta utilizada por el robot, definida por una variable
persistente del tipo de dato tooldata. Si hay una pistola de soldadura, una pistola de
adhesivo o un rotulador fijado al robot, queremos programar el ToPoint de la punta de
esta herramienta. Esto se realiza automáticamente si se declara, asigna y utiliza un
valor de tooldata en la instrucción MoveL.
tool0 es una herramienta predefinida que representa al robot sin ninguna herramienta
montada en él y no debe ser declarada ni asignada. Cualquier otra herramienta debe ser
declarada y asignada antes de usarla.
Trazar un cuadrado Un robot sostiene un rotulador sobre un papel colocado sobre una mesa. Queremos que
el robot baje la punta del rotulador para colocarla en el papel y que a continuación
trace un cuadrado.
PERS tooldata tPen := [ TRUE, [[200, 0, 30], [1, 0, 0 ,0]], [0.8, [62, 0, 17], [1, 0, 0, 0],
0, 0, 0]];
CONST robtarget p10 := [ [600, -100, 800], [0.707170, 0, 0.707170, 0], [0, 0, 0, 0], [
9E9, 9E9, 9E9, 9E9, 9E9, 9E9] ];
CONST robtarget p20 := [ [600, 100, 800], [0.707170, 0, 0.707170, 0], [0, 0, 0, 0], [
9E9, 9E9, 9E9, 9E9, 9E9, 9E9] ];
CONST robtarget p30 := [ [800, 100, 800], [0.707170, 0, 0.707170, 0], [0, 0, 0, 0], [
UD4 Programación de robots industriales Off-Line. 351
9E9, 9E9, 9E9, 9E9, 9E9, 9E9] ];
CONST robtarget p40 := [ [800, -100, 800], [0.707170, 0, 0.707170, 0], [0, 0, 0, 0], [
9E9, 9E9, 9E9, 9E9, 9E9, 9E9] ];
PROC main()
MoveL p10, v200, fine, tPen;
MoveL p20, v200, fine, tPen;
MoveL p30, v200, fine, tPen;
MoveL p40, v200, fine, tPen;
MoveL p10, v200, fine, tPen;
ENDPROC
Trazar con zonas de Se traza la misma figura que en el ejemplo anterior, pero con una zona de esquina de
esquina
20 mm en p20 y una zona de esquina de 50 mm en p40.
Distintas instrucciones RAPID cuenta con distintas instrucciones de movimiento. Las más comunes son
de movimiento MoveL, MoveJ y MoveC.
MoveJ MoveJ se utiliza para mover el robot rápidamente de un punto a otro cuando no es
imprescindible que el movimiento siga una línea recta.
Utilice MoveJ para mover el robot hasta un punto en el aire situado a poca distancia de
donde va a trabajar el robot. La instrucción MoveL no funciona si, por ejemplo, la base
del robot está entre la posición actual y la posición programada o si la reorientación
de la herramienta es demasiado grande. MoveJ puede usarse siempre en estos casos.
La sintaxis de MoveJ es similar a la de MoveL.
Ejemplo
Ejemplo.
Acerca de las señales Las señales se utilizan para la comunicación con los equipos externos con los
que coopera el robot. Las señales de entrada son activadas por los equipos
externos y pueden usarse en el programa de RAPID para iniciar la realización
de alguna operación con el robot. Las señales de salida son activadas por el
programa de RAPID y actúan para comunicar a los equipos externos que
deben hacer algo.
Configuración de señales Las señales son configuradas en los parámetros de sistema del sistema de
robot. Es posible definir nombres personalizados para las señales. No deben
declararse en el programa de RAPID.
Entrada digital Las señales digitales de entrada pueden tener los valores 0 ó 1. El programa
de RAPID puede leer su valor pero no cambiarlo.
Ejemplo
Si la señal digital de entrada di1 tiene el valor 1, el robot se mueve.
IF di1 = 1 THEN
MoveL p10, v1000, fine, tPen;
ENDIF
Salida digital Las señales digitales de salida pueden tener los valores 0 ó 1. El programa de
RAPID puede establecer el valor de una señal digital de salida y con ello
influir en el comportamiento de los equipos externos. El valor de una señal
digital de salida se establece con la instrucción SetDO.
Ejemplo
El robot cuenta con una herramienta pinza que puede cerrarse con la señal
digital de salida do_grip. El robot se mueve hasta la posición en la que se
encuentra el rotulador y cierra la pinza. A continuación, el robot se mueve
hasta donde debe trazar, ahora usando la herramienta tPen.
https://www.youtube.com/watch?v=A_FJ353uip4
https://www.youtube.com/watch?v=9BAmHCXqloo
https://www.youtube.com/watch?v=8wt_geDlUwQ
https://www.youtube.com/watch?v=A3NtdRHoDVY
https://www.youtube.com/watch?v=A_FJ353uip4
https://www.youtube.com/watch?v=9BAmHCXqloo
https://www.youtube.com/watch?v=7GnXSEwTvtk
https://www.youtube.com/watch?v=tN0DvWH1o1k
Insertar IIB 4600
Insertat Euro Pallet Importar biblioteca > Equipamiento.
Crear Pieza_1 400 x 400 x 400 Material Stonewall
Posición X=1220 Y=2750 Z=0 Invisible
Insertar SC_BelConveyoy Configura cinta transportadora. Descargado de WEB ABB
Posición X=1220 Y=2750 Z=0
Orientación X=0 Y = 0 Z= -90
Lógica de la estación.
Acerca de las instrucciones RAPID cuenta con varias instrucciones para escribir información para el
de lectura y escritura operador del robot, así como para recibir información del operador. Ya hemos
visto TPWrite en los ejemplos anteriores. Las únicas instrucciones que
estudiaremos aquí son TPWrite, TPReadFK y TPReadNum.
TPReadFK Al escribir un programa de RAPID que requiere que el operador elija una
opción, TPReadFK es una instrucción útil. Permite la visualización de hasta
cinco teclas de función y el operador puede elegir cuál de ellas tocar. Los
botones corresponden a los valores 1 a 5.
https://www.youtube.com/watch?v=wGp26SqWH0o
https://www.youtube.com/watch?v=wGp26SqWH0o
https://www.youtube.com/watch?v=6cXwZPPFTbY
https://www.youtube.com/watch?v=G3-j4-TpUOU
Importar Fresadora.
Crear Herramienta T_Fresadora.
Guardar herramienta T_Fresadora como biblioteca.
Insertar IRB 4600-45/2.05.
Conectar T_FRESADORA al robot.
Importar Pole.
Importar Mesa_pieza_b. Pos X=1100 Y=0 Z = 1000 Ori X= 0 Y=0 Z=90
Importar Pieza B. Pos X=1100 Y=0 Z = 1050 Ori X= 0 Y=0 Z=90
Crear Objeto de trabajo W_MESA.
https://www.youtube.com/watch?v=G3-j4-TpUOU
https://www.youtube.com/watch?v=ZpqbLbEoj_M
Variables
Tipos de datos RAPID cuenta con muchos tipos de datos diferentes. De momento, nos
centraremos en los cuatro tipos de datos generales:
Tipo
de Descripción
dato
Datos numéricos, que pueden ser enteros y con decimales. Por
num
ejemplo 10 ó 3,14159.
Un dato numérico con una resolución mayor que la de num . Puede ser
un número entero (capaz de manejar valores grandes) y un número con
dnum
decimales (con más posiciones decimales). Por ejemplo
4503599627370496 ó 3,141592653589793.
Una cadena de texto. Por ejemplo "Esto es una cadena". Máximo 80
string
caracteres.
Una variable booleana (lógica). Sólo puede tener los valores TRUE o
bool
FALSE.
Todos los demás tipos de datos se basan en estos cuatro. Comprendiendo estos
tipos, la forma de realizar operaciones con ellos y cómo pueden ser
combinados para formar tipos de datos complejos, podrá comprender
fácilmente todos los tipos de datos.
Características de las variables Las variables con tienen valores de datos. Al detener el programa y volverlo a
poner en marcha, la variable conserva su valor, pero si se mueve el puntero de
programa a Main el valor del dato de la variable se pierde.
Declaración de una variable La declaración de una variable es la forma de definir un nombre de variable y
determina el tipo de dato que debe tener. Las variables se declaran con la
palabra clave VAR, siguiendo la sintaxis:
VAR datatypeidentifier;
Ejemplo
VAR num length;
VAR dnum pi;
VAR string name;
VAR bool finished;
length := 10;
pi := 3.141592653589793;
name := "John"
UD4 Programación de robots industriales Off-Line. 376
finished := TRUE;
reg1 := 2;
reg1 := reg1 + 1;
Variables persistentes
Qué es una variable persistente Las variables persistentes son básicamente iguales a una variable normal, pero
con una diferencia importante. La variable persistente recuerda el último valor
que se le haya asignado, incluso si el programa es detenido y puesto en marcha
de nuevo desde el principio.
Declaración de una variable Las variables persistentes se declaran con la palabra clave PERS. En el
persistente
momento de la declaración es necesario indicar un valor inicial.
Operadores numéricos Estos operadores operan con el tipo de datos num y devuelven el tipo de datos num.
Es decir, en los ejemplos siguientes, las variables reg1, reg2 y reg3 son del tipo de
dato num.
Los operadores lógicos se usan con frecuencia junto con la instrucción IF. Para ver
ejemplos de código.
Operador de cadena
Operador Descripción Ejemplo
VAR string firstname := "John";
VAR string lastname := "Smith";
Concatenación de VAR string fullname;
+ fullname := firstname + " " + lastname;
cadenas
La variable fullname contendrá la cadena "John
Smith".
Acerca del flujo del programa Los ejemplos de programa que hemos visto hasta ahora se ejecutan
secuencialmente, de arriba abajo. En los programas más complejos, es posible
que deseemos controlar qué código se ejecuta, en qué orden y cuántas veces.
En primer lugar echaremos un vistazo a cómo crear las condiciones necesarias
para determinar si una secuencia de programa debe ejecutarse o no.
ELSE Una sentencia IF también puede contener código de programa para su ejecución
si la condición no se cumple.
Si la condición lógica de la sentencia IF se cumple, el código de programa
situado entre las palabras clave THEN y ELSE se ejecuta. Si la condición no se
cumple, el código situado entre las palabras clave ELSE y ENDIF se ejecuta.
Ejemplo
En este ejemplo, la cadena string1 se escribe en el FlexPendant si no es una
cadena vacía. Si string1 es una cadena vacía, se escribe el texto "The string is
empty".
Ejemplo Usar la sentencia IF para determinar qué texto debe escribir en el FlexPendant. Escribir en el
FlexPendant qué pieza se produce a mayor velocidad.
Ejemplo Si la producción de una pieza requiere más de 60 segundos, escribir un mensaje en el FlexPendant.
Si la variable booleana full_speed contiene FALSE, el mensaje indicará al operador que debe
incrementar la velocidad del robot. Si full_speed contiene TRUE, el mensaje pedirá al operador que
examine el motivo de la lentitud de la producción.
TEST reg1
CASE 1,2,3 :
routine1;
CASE 4 :
routine2;
DEFAULT :
TPWrite "Illegal choice";
Stop;
ENDTEST
TEST Test data {CASE Test value {, Test value} : ...} [ DEFAULT: ...]
Argumentos ENDTEST
Test data
Tipo de dato: All
El dato o la expresión con el que se comparará el valor de prueba.
Test value
Tipo de dato: Del mismo tipo que test data
El valor que debe tener el dato de prueba para que se ejecuten las instrucciones
asociadas.
Repetición de una secuencia de código Otra forma de controlar el flujo del programa es repetir una secuencia
de código del programa un número determinado de veces.
Cómo funciona el bucle FOR El código siguiente repetirá 5 veces la escritura de "Hola":
FOR i FROM 1 TO 5 DO
TPWrite "Hello";
ENDFOR
El valor del contador no tiene por qué declararse, pero actúa como una
variable numérica dentro del bucle FOR. La primera vez que se ejecuta
el código, el contador tiene el valor especificado por valorinicial. A
continuación, el valor del contador se incrementa en 1 cada vez que se
ejecuta el código. La última vez que se ejecuta el código es cuando el
valor de contador iguala a valor final. A continuación, la ejecución
continúa con el código de programa que aparezca a continuación de
ENDFOR.
Utilización del valor del contador El valor del contador puede usarse en el bucle FOR.
Por ejemplo, el cálculo de la suma de todos los números de 1 a 50
(1+2+3+...+49+50) puede programarse de la forma siguiente:
Repetición con una condición La repetición de una secuencia de código puede combinarse con la
ejecución condicional de la secuencia de código. Con el bucle WHILE, el
programa seguirá ejecutando la secuencia de código siempre y cuando se
cumpla la condición.
WHILE condition DO
program code to be repeated
ENDWHILE
No cree bucles eternos o pesados Si la condición nunca deja de cumplirse, el bucle continuará
sin una instrucción wait
constantemente y consumirá enormes cantidades de potencia del ordenador.
La escritura de un bucle eterno está permitida, pero en ese caso debe
contener alguna instrucción de espera que permita al ordenador realizar
otras tareas entretanto.
Los bucles pesados (con gran cantidad de cálculos y escrituras en el
FlexPendant, sin instrucciones de movimiento) pueden requerir alguna
instrucción de espera incluso si existe un número limitado de bucles.
WHILE TRUE DO
! Some code
...
! Wait instruction that waits for 1 second
WaitTime 1;
ENDWHILE
https://www.youtube.com/watch?v=Z5P92_sA85M
https://www.youtube.com/watch?v=S3K41sZTtKg
! Declaración de variables
VAR num J;
VAR num LARGO;
VAR num ANCHO;
VAR num ALTO;
VAR num CNT_CINTA;
! Iniciar variables
LARGO := 80;
ANCHO := 40;
ALTO := 40;
CNT_CINTA := 0;
POS_CINTA.trans.x := (9 * ANCHO) - (ANCHO /2);
POS_CINTA.trans.y := (2 * LARGO) - (LARGO /2);
POS_CINTA.trans.z := ALTO + 50;
POS_PALET.trans.x := 0;
POS_PALET.trans.y := 0;
POS_PALET.trans.z := 400;
UD4 Programación de robots industriales Off-Line. 389
Ejemplo de empaquetar instrucciones de movimiento.
POS_CINTA.trans.y := LARGO / 2;
MoveL POS_CINTA,v200,fine,Tool_Ventosa\WObj:=CINTA;
https://www.youtube.com/watch?v=9LTVd3lD48w
! Declaración de variables
VAR num J;
VAR num X;
VAR num Y;
VAR num Z;
VAR num LARGO;
VAR num ANCHO;
VAR num ALTO;
VAR num CNT_CINTA;
! Iniciar variables
LARGO := 80;
ANCHO := 40;
ALTO := 40;
CNT_CINTA := 0;
POS_CINTA.trans.x := (9 * ANCHO) - (ANCHO /2);
POS_CINTA.trans.y := (2 * LARGO) - (LARGO /2);
POS_CINTA.trans.z := ALTO + 50;
POS_PALET.trans.x := (3 * ANCHO) - (ANCHO / 2);
POS_PALET.trans.y := (2 * LARGO) - (LARGO / 2);
POS_PALET.trans.z := ALTO + 50;
UD4 Programación de robots industriales Off-Line. 392
UD4 Programación de robots industriales Off-Line. 393
PROG_3-Paletizador con capas alternas.
https://www.youtube.com/watch?v=0dcPOEDRvMU
https://www.youtube.com/watch?v=8tCtWekuzqs
https://www.youtube.com/watch?v=HxsSruMdUMM