programación experto - kuka

202
ProgExperteBHR5.2 09.03.01 es 1 de 197 SOFTWARE KR C2 / KR C3 Programación por el experto KUKA System Software (KSS) Release 5.2 Edición: 12.09.2005 Versión: 01

Upload: alfonso-guerrero-rivera

Post on 26-Oct-2015

1.076 views

Category:

Documents


41 download

TRANSCRIPT

Page 1: Programación experto - Kuka

ProgExperteBHR5.2 09.03.01 es 1 de 197

SOFTWARE

KR C2 / KR C3

Programación por el experto

KUKA System Software (KSS)

Release 5.2

Edición: 12.09.2005 Versión: 01

Page 2: Programación experto - Kuka

2 de 197 ProgExperteBHR5.2 09.03.01 es

e Copyright 2005

KUKA Roboter GmbHZugspitzstrasse 140D--86165 Augsburg

La reproducción de esta documentación -- o parte de ella -- o su facilitación a terceros solamenta está permitida con expresa autorización deleditor.Además del volumen descrito en esta documentación, pueden existir funciones en condiciones de funcionamiento. El usuario no adquiere elderecho sobre estas funciones en la entrega de un aparato nuevo, ni en casos de servicio.Hemos controlado el contenido del presente escrito en cuanto a la concordancia con la descripción del hardware y el software. Aún así, nopueden excluirse totalmente todas las divergencias, demodo tal, que no aceptamos responsabilidades respecto a la concordancia total. Peroel contenido de estos escritos es controlado periodicamente, y en casos de divergencia, éstas son enmendadas y presentadas correctamenteen las ediciones siguientes.Reservados los derechos a modificaciones técnicas que no tengan influencia sobre la función.

Page 3: Programación experto - Kuka

3 de 197ProgExperteBHR5.2 09.03.01 es

Indice

1 Generalidades sobre los programas KRL 7. . . . . . . . . . . . . . . . . . . . . . . . . .

1.1 Estructura y creación de programas 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.1.1 Superficie del programa 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.1.2 Concepto de archivo 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.1.3 Estructura de archivos 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2 Crear programas y editarlos 10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.2.1 Crear un programa nuevo 10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.2.2 Editar, compilar y vincular un programa 11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.3 Modificación de programas 13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.3.1 Corrección de programa 13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.3.2 Editor 13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.3.2.1 Funciones de bloque 13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.3.2.2 Copiar (CTRL--C) 14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.3.2.3 Insertar (CTRL--V) 14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.3.2.4 Cortar (CTRL--X) 14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.3.2.5 Borrar 14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.3.2.6 Buscar 14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.3.2.7 Reemplazar 15. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.4 Esconder partes de un programa 17. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.4.1 FOLD 17. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.4.1.1 Programa de ejemplo 18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.5 Modo de ejecución del programa 20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.5.1 Selección del modo de ejecución del programa 20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.5.2 Cambio del modo de ejecución del programa 21. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.6 Tratamiento de errores 23. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.7 Comentarios 26. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Variables y declaraciones 27. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.1 Variables y nombres 27. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.2 Objetos de datos 29. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.2.1 Declaración e inicialización de objetos de datos 29. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.2.2 Tipos de datos simples 30. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.2.3 Campos 33. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.2.4 Cadenas de caracteres 36. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.2.5 Estructuras 36. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.2.6 Tipos de enumeración 39. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.3 Manipulación de datos 40. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.3.1 Operadores 40. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.3.1.1 Operadores aritméticos 40. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.3.1.2 Operador geométrico 42. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.3.1.3 Operadores de comparación 46. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.3.1.4 Operadores lógicos 47. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.3.1.5 Operadores de bits 48. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.3.1.6 Prioridades de los operadores 50. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Page 4: Programación experto - Kuka

Programación por el experto

4 de 197 ProgExperteBHR5.2 09.03.01 es

2.3.2 Funciones estándar 51. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.4 Variables del sistema y archivos del sistema 53. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.5 Manipulación de variables de cadena 57. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.5.1 Longitud de una variable de cadena en la declaración 57. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.5.2 Longitud de una variable de cadena después de la inicialización 57. . . . . . . . . . . . . . . . . . . . . .2.5.3 Borrar el contenido de una variable de cadena 58. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.5.4 Ampliar la variable de cadena 58. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.5.5 Búsqueda de variables de cadena 59. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.5.6 Comparación del contenido de variables de cadena 59. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.5.7 Copiar una variable de cadena 60. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Programación de movimiento 61. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.1 Utilización de diferentes sistemas de coordenadas 61. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.2 Movimientos punto a punto (PTP) 67. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.2.1 General (PTP sincrónico) 67. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.2.2 Perfil de marcha más elevado 68. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.2.3 Instrucciones de movimiento 68. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.2.3.1 Singularidades 78. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.3 Movimientos de trayectoria (movimientos CP = Continuous Path) 80. . . . . . . . . . . . . . . . . . . .3.3.1 Velocidad y aceleración 80. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.3.2 Control de la orientación 82. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.3.3 Movimientos lineales 87. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.3.4 Movimientos circulares 89. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.4 Procesamiento en avance 91. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.5 Movimientos con posicionamiento aproximado 93. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.5.1 Posicionamiento aproximado PTP--PTP 94. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.5.2 Posicionamiento aproximado LIN--LIN 96. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.5.3 Posicionamiento aproximado CIRC--CIRC y posicionamiento aproximado CIRC--LIN 98. . . .3.5.4 Posicionamiento aproximado PTP -- trayectoria 101. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.5.5 Cambio de herramienta durante el posicionamiento aproximado 104. . . . . . . . . . . . . . . . . . . . . .

3.6 Programación por aprendizaje de los puntos 105. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 Control de ejecución del programa 107. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.1 Ramificaciones de programa 107. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.1.1 Instrucciones de salto 107. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.1.2 Ramificación condicionada 107. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.1.3 Distribuidor 108. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.2 Bucles 109. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.2.1 Bucles de conteo 109. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.2.2 Bucle rechazante 110. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.2.3 Bucles no rechazantes 111. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.2.4 Bucles sinfín 112. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.2.5 Terminación anticipada de la ejecución de bucles 112. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.3 Instrucciones de espera 113. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.3.1 Espera a un evento 113. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.3.2 Tiempos de espera 115. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.4 Detener el programa 116. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.5 Confirmación de mensajes 116. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Page 5: Programación experto - Kuka

5 de 197ProgExperteBHR5.2 09.03.01 es

5 Instrucciones de entrada/salida 118. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.1 Generalidades 118. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.2 Entradas y salidas binarias 118. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.3 Entradas y salidas digitales 121. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.3.1 Declaración de la señal 121. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.3.2 Lectura de números de señal 123. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.3.3 Activar salidas en el punto de destino 125. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.4 Salidas de impulso 127. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.5 Entradas y salidas analógicas 129. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.5.1 Salidas Analógicas 129. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.5.2 Entradas analógicas 131. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.6 Entradas digitales predefinidas 134. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6 Subprogramas y funciones 136. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6.1 Declaraciones 136. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6.2 Llamada y transferencia de parámetros 139. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7 Tratamiento de interrupciones 144. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7.1 Declaración 144. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7.2 Activación de interrupciones 146. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7.3 Detención de movimientos en ejecución 150. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7.4 Cancelación de rutinas de interrupción 151. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7.5 Utilización de banderas (flags) cíclicas 154. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8 Trigger -- Acciones de conmutación referentes a la trayectoria 156. . . . . .

8.1 Acciones de conmutación en el punto de inicio o de destino de la trayectoria 156. . . . . . . . . . .

8.2 Acciones de conmutación en cualquier lugar sobre la trayectoria 159. . . . . . . . . . . . . . . . . . . . .

9 Listas de datos 164. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9.1 Listas de datos locales 164. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9.2 Listas de datos globales 165. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10 Editor externo 168. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10.1 Arranque del editor externo 169. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10.2 Operación 170. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10.3 Menú “Fichero” 172. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.3.1 Abrir 172. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.3.2 Guardar 172. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.3.3 Salida 172. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.3.4 Cerrar 173. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.3.5 Salir 173. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10.4 Menú “Editar” 174. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.4.1 Cortar (“CTRL”--“X”) 174. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Page 6: Programación experto - Kuka

Programación por el experto

6 de 197 ProgExperteBHR5.2 09.03.01 es

10.4.2 Copiar (“CTRL”--“C”) 174. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.4.3 Pegar como ... 174. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.4.4 Borrar 174. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.4.5 Seleccionar todo (“CTRL”+”A”) 174. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10.5 Menú “Utilidades” 175. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.5.1 Espejo 175. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.5.2 Entrada manual 176. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.5.3 Cambio de bloque 180. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.5.4 Limpiar lista de ficheros 180. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.5.5 Ajuste del TCP o de BASE 181. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10.6 Menú “HotEdit” 182. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.6.1 Base, TCP y World 182. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.6.2 TTS (Sistema de coordenadas de corrección) 184. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.6.2.1 Position--TTS 185. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.6.3 Limite 187. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.6.3.1 Limits -- Base/World 187. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.6.3.2 Limits -- TTS 187. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10.7 Menú “Ext Utilidades” 188. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.7.1 Fichero -- Espejo 188. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.7.2 Fichero -- Cambiar 190. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.7.2.1 Utilizar el fichero de referencia existente 191. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.7.2.2 Crear un nuevo fichero de referencia 192. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.7.3 Limite cambiado 193. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10.8 Menú “Opciones” 194. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.8.1 Ajuste de salida 194. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10.9 Menú “Ayuda” 195. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.9.1 Versión 195. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.9.2 Permanecer arriba 195. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Page 7: Programación experto - Kuka

1 Generalidades sobre los programas KRL

7 de 197ProgExperteBHR5.2 09.03.01 es

1 Generalidades sobre los programas KRL1.1 Estructura y creación de programas1.1.1 Superficie del programa

En el instante de haber cambiado al nivel del experto, se modifica la superficie de operacióndel modo representado a continuación:

Mientras que para el usuario son invisibles todos los archivos de sistema, el experto puedeverlos y también editarlos en la ventana de programas. Además, junto a los nombres de ar-chivo y comentarios, en el nivel del experto puedenmostrarse también las extensiones, atri-butos y tamaños de los archivos.Según los ajustes predeterminados, después de la instalación, los siguientes programas yarchivos se encuentran en diferentes directorios KRC.En el directorio “KRC:\R1\” se encuentra el siguiente archivo:

CELL.SRC Programa para el mando de robots a través de un PLC central.Aquí, se selecciona a partir de un número de programa, el pro-grama de la pieza correspondiente

En el directorio “KRC\R1\MADA\” se encuentran los siguientes archivos:

Fichero Significado

$MACHINE.DAT Lista de datos del sistema con variables del sistema para la adapta-ción de la unidad de control y del robot

$ROBCOR.DAT Lista de datos del sistema con datos para el modelo dinámico delrobot

KSD... Archivos servo específicos de la máquina

MACHINE.UPG Archivo del sistema para futuras actualizaciones

ROBCOR.UPG Archivo del sistema para futuras actualizaciones

Page 8: Programación experto - Kuka

Programación por el experto

8 de 197 ProgExperteBHR5.2 09.03.01 es

En el directorio “KRC:\R1\SYSTEM\” se encuentran los siguientes archivos:

Fichero Significado

$CONFIG.DAT Lista de datos del sistema con datos generales de configuración

BAS.SRC Paquete básico para el comando de movimientos

IR_STOPM.SRC Programa para el tratamiento de errores cuando se producenaverías

SPS.SUB Fichero submit para controles paralelos

En el directorio “KRC:\R1\TP\” se encuentra el siguiente archivo:

Fichero Significado

P00.DATP00.SRC

Paquete de programas para el acoplamiento a un PLC

Normalmente, los programas y archivos para paquetes de tecnología opcionales seguardan en el directorio “TP”.

1.1.2 Concepto de archivo

Un programa KRL puede estar compuesto de un fichero SRC y de un fichero DAT.

Aquí, el fichero con la extensión “SRC” es el archivo con el código de programa propiamentedicho. Aquí existen las variantes DEF y DEFFCT (con valor de retorno). Por el contrario, elfichero con la extensión “DAT” contiene los datos específicos para el programa. Esta parti-ción está basada en el concepto de archivo de KRL: El programa contiene, además de lasinstrucciones de movimiento, distintas acciones que deben ser ejecutadas por el robot in-dustrial. Éstas pueden ser determinadas secuencias de movimientos, por ejemplo abrir ocerrar una herramienta con garras, amén de otras ejecuciones más complejas, tales comoel 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 parcia-les. El concepto de archivo realizado en KRL, cumple con las necesidades especiales dela programación del robot.

1.1.3 Estructura de archivos

Un archivo es la unidad que programa el programador. Con ello, un archivo corresponde auna unidad de programa en el disco duro o en la memoria (RAM). Cada programa en KRLpuede constar de uno o varios archivos. Los programas simples comprenden exactamenteun archivo. Las tareas más complejas se solucionan mejor con un programa compuesto devarios archivos.

La información detalladaacerca de los subprogramas y funciones se encuentra en el apar-tado [Subprogramas y funciones].

La estructura interior de un archivo KRL consta de la sección de declaraciones, la secciónde instrucciones y hasta 255 subprogramas y funciones locales.

El nombre del objeto sin extensión es asimismo el nombre del archivo y por ello se indicaen la declaración con “DEF”. El nombre debe constar de un máximo de 24 caracteres y nodebe ser ninguna palabra clave (véase el capítulo [Variables y declaraciones]). Cada ar-chivo comienza con la declaración “DEF” y finaliza con “END”.

DEF NAME(X1:IN)Declaraciones

Instrucciones

END

DEF

Page 9: Programación experto - Kuka

1 Generalidades sobre los programas KRL (continuación)

9 de 197ProgExperteBHR5.2 09.03.01 es

Las declaraciones seevalúanantes de la ejecucióndel programa, es decir, durante la compi-lación. En la sección de declaraciones no debe haber ninguna instrucción. La primera ins-trucción constituye asimismo el comienzo de la sección de instrucciones.

Contrariamente a lo que ocurre en la sección de declaraciones, las instrucciones tienen uncarácter dinámico: se ejecutan durante la ejecución del programa.

Un programa del robot puede constar de un solo fichero de programa o de un fichero de pro-grama con la correspondiente lista de datos. La lista de datos y el fichero se señalizan comocorrespondientes mediante sus nombres comunes. Los nombres solamente se diferencianpor la extensión, por ejemplo:

Fichero: PROG1.SRCLista de datos: PROG1.DAT

En la lista de datos sólo se permiten asignaciones de valores con “=”. Cuando la listadedatos y el fichero poseenelmismonombre, puedenutilizarse las variables que esténdecla-radas en la lista de datos de igual modo que las variables declaradas en el fichero SRC.

La información detallada acerca de este tema se encuentra en el capítulo [Listas dedatos].

Declaración

Instrucción

Lista de datos

Page 10: Programación experto - Kuka

Programación por el experto

10 de 197 ProgExperteBHR5.2 09.03.01 es

1.2 Crear programas y editarlos

1.2.1 Crear un programa nuevo

Softkey Significado

Nuevo Dado que un programa para robot puede crearse también sin listade datos, el archivo y la lista de datos no se crean automáticamenteal mismo tiempo en el nivel de experto. Para crear un programa,pulse la tecla del softkey “Nuevo”. Aparece la siguiente ventana:

OK Se le solicita que seleccione un Template. Utilice para ello las teclasde flecha y confirme su selección con la tecla del softkey “OK” o conla tecla de entrada.

Los Templates disponibles no pueden ser creados en todos los directorios.

La informaciónmás detallada acerca de los Templates se encuentra en elManual deope-ración en la documentación [Instrucciones], capítulo [Navegador], apartado[Apéndice].

Los distintos Templates de forma individual:

Template Significado

Modul Se crea un fichero SRC y un fichero DAT, que contiene un pro-grama base o tronco de programa.

Expert Se crea un fichero SRC y un fichero DAT, que contienen solo elencabezamiento DEF… y END.

Cell En este caso sólo se crea un fichero SRC que contiene un pro-grama base o tronco de programa. Este programa sirve para elmando del robot a través de un PLC central.

Function En este caso se crea una función (fichero SRC) que contiene elencabezamiento DEF… y END.

Submit Se crea un fichero SUB con una base o tronco de programa. Elfichero Submit contiene instrucciones y puede ser utilizado porejemplo, para controles cíclicos (garras, etc.). El fichero Submittrabaja en forma paralela al servicio del robot y es ejecutado porel interpretador de la unidad de control.

Expert Submit Como en el caso del Template Submit, se crea un fichero SUB que,sin embargo, sólo contiene el encabezamiento DEF… y END.

El encabezamiento DEF… y END y los programas base o troncos de programas de cadauno de los Template se encuentran (por ejemplo, para el Template Cell) en “C:\KRC\RO-BOTER\TEMPLATE\CellVorgabe.src”.

Si ha seleccionado el correspondiente Template, se le solicitará que dé un nombre al ficheroque desea generar.

Nombre de fichero(máx. 24 caracteres)

Extensión del fichero(SRC, DAT o SUB)

Comentario

El nombre del fichero es lo único obligatorio y puede tener, como máx., una longitud de 24caracteres. La extensión del fichero se completa automáticamente. Si quiere agregar un co-mentario, con la tecla de flecha derecha desplace el cursor sobre el campo correspondientee introduzca el texto deseado.

Page 11: Programación experto - Kuka

1 Generalidades sobre los programas KRL (continuación)

11 de 197ProgExperteBHR5.2 09.03.01 es

Para confirmar la entrada, pulse la tecla del softkey “OK” o la tecla de retorno.

La lista de datos es imprescindible si en su archivo SRC también desea insertarinstrucciones guiadas por menú.

1.2.2 Editar, compilar y vincular un programa

Si ha creado un fichero o una lista de datos con “Nuevo”, puede procesarlos con el editor.Para ello se utiliza la tecla del softkey “Abrir”. Al cerrar el editor, se compila el código deprograma completo, es decir, el código KRL textual se traduce a un lenguaje de máquinacomprensible para la unidad de control.

Para que el programa sea claro y comprensible, es necesario, por ej., que cuando existenramificaciones éstas queden colocadas en distintos niveles. Esto se puede lograr en eleditor utilizando los espacios en blanco.

El compilador comprueba el código para verificar que la sintaxis y la semántica son correc-tas. Si existe algún error, se emite el correspondiente mensaje y se genera un archivo defallos con la extensión “.ERR”.

Sólo se pueden seleccionar y ejecutar programas exentos de errores.

Encontrará más información sobre el tratamiento de errores o fallos de edición en el apar-tado [Tratamiento de errores].

Cuando se carga un programa con la tecla del softkey “Seleccionar”, todos los ficheros ylistas de datos necesarios se vinculan para formar un programa. Al vincular estos datos, elsistema comprueba si todos los módulos existen, han sido analizados y están exentos deerrores. Además, cuando seefectúauna transferencia deparámetros, el vínculo compruebala compatibilidad de tipos entre los parámetros transmitidos. Al igual que ocurre durante lascompilaciones, si durante este proceso aparece algún error, se genera un fichero de errorcon la extensión “.ERR”.

A continuación se presenta un ejemplo sencillo de programa para la definición de velocida-des y aceleraciones de ejes:

Page 12: Programación experto - Kuka

Programación por el experto

12 de 197 ProgExperteBHR5.2 09.03.01 es

DEF PROG1()

;----- Sección de declaraciones -----INT J

;------ Sección de instrucciones -------$VEL_AXIS[1]=100 ;Especificación de las velocidades de eje$VEL_AXIS[2]=100$VEL_AXIS[3]=100$VEL_AXIS[4]=100$VEL_AXIS[5]=100$VEL_AXIS[6]=100

$ACC_AXIS[1]=100 ;Especificación de las aceleraciones de eje$ACC_AXIS[2]=100$ACC_AXIS[3]=100$ACC_AXIS[4]=100$ACC_AXIS[5]=100$ACC_AXIS[6]=100

PTP {A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

FOR J=1 TO 5PTP {A1 4}PTP {A2 -7,A3 5}PTP {A1 0,A2 -9,A3 9}

ENDFOR

PTP {A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}END

Page 13: Programación experto - Kuka

1 Generalidades sobre los programas KRL (continuación)

13 de 197ProgExperteBHR5.2 09.03.01 es

1.3 Modificación de programas

Básicamente, existen dos posibilidades de modificar un programa en la superficie deoperación del nivel del experto:

G Corrección de programa (PROKOR)

G Editor

1.3.1 Corrección de programa

Corrección de programa es el método normal. Si se selecciona un programa o se detieneun programa en curso, el sistema pasa automáticamente al modo PROKOR.

Aquí se pueden introducir o modificar instrucciones por medio del formulario inline o en códigoASCII (en el nivel del experto) que únicamente afectan a una línea de programa. Por lo tanto,quedan excluidas las estructuras de control (bucles, etc.) y las declaraciones de variables.

En el estado seleccionado, al salir de la línea de programa, las entradas erróneas sonborradas inmediatamente y aparece un mensaje de error en la ventana de mensajes.

1.3.2 Editor

Mediante la tecla del softkey “Abrir”, debe abrir un programa cuyo contenido deseemodificar con las funciones de bloque.

Por ello, para procesar o insertar determinadas instrucciones KRL o estructuras de progra-mas, debe utilizarse el editor. Dado que al cerrar el editor se compila el código completo,también pueden detectarse errores que se producen en relación con otras líneas (por ejem-plo, variables declaradas incorrectamente).

Los programas que contienen instrucciones de movimiento (p. ej. PTP, LIN, CIRC) y secargan en el editor para su posterior procesamiento, deben encontrarse en el directorio“KRC:\...”. De lo contrario, aparece el correspondiente mensaje de error (como sucede,por ejemplo, al copiar bloques).

1.3.2.1 Funciones de bloque

Las funciones de bloque solamente están disponibles en el editor a partir del nivel del “Ex-perto”. Mediante la tecla del softkey “Editar”, debe abrir el programa cuyo contenido deseamodificar con las funciones de bloque. Para saber cómo pasar antes al nivel del “Experto”,consulte el capítulo [Configurar el sistema], apartado “Grupo de usuario”.

Coloque primero el cursor intermitente del editor sobre el comienzo oel final de aquella partede programa que desea cambiar de lugar. Luego mantenga pulsada la tecla “Shift” en el te-cladomoviendomientras tanto el cursor hacia arriba ohacia abajo. Deestamanera,marcarála parte del programa que, en el paso siguiente, va a procesar con las funciones de bloque.La parte marcada aparecerá resaltada en otro color.

Pulse la tecla de menú “Editar” y seleccione la función deseada en el menú que se abrirá.

Si para las funciones debloque sehan deutilizar el bloque numérico y el teclado, la funciónNUM debe estar desactivada. Para ello, pulse en el teclado la tecla “NUM”. En ese mo-mento, se desactivará la indicación correspondiente en la línea de estado.

Page 14: Programación experto - Kuka

Programación por el experto

14 de 197 ProgExperteBHR5.2 09.03.01 es

1.3.2.2 Copiar (CTRL--C)

[Procesar > Copiar]

La sección marcada del programa es memorizada en el portapapeles para su posterior pro-cesamiento. Esta sección puede ser insertada a continuación en otro lugar.

Alternativamente, puedemantener pulsada la tecla CTRL del bloque numérico y pulsar enel teclado la tecla C. A continuación suelte ambas teclas.

1.3.2.3 Insertar (CTRL--V)

Coloque el cursor del editor sobre el punto donde desea insertar la parte de programa “co-piada” o “cortada”.

[Procesar > Insertar]

Seleccione ahora la opción “Insertar”. La parte de programa antes marcada se inserta de-bajo del cursor de edición.

Alternativamente, se puedemantener pulsada la tecla CTRL del bloque numérico y pulsarla tecla V del teclado. A continuación, suelte ambas teclas.

1.3.2.4 Cortar (CTRL--X)

Si selecciona en el menú la opción “Cortar”, la parte de programa marcada se guardará enel portapapeles y se borrará del listado del programa.

[Procesar > Cortar]

Alternativamente, se puedemantener pulsada la tecla CTRL del bloque numérico y pulsarla tecla X del teclado. A continuación, suelte ambas teclas.

1.3.2.5 Borrar

[Procesar > Borrar]

La regiónmarcada puede ser eliminada del programa. En este caso, no sememoriza ningúndato en el portapapeles. Esta parte eliminada del programa quedará con ello definitivamenteborrada.

Por este motivo, la ventana de mensajes formula una pregunta de seguridad que debe serrespondida mediante la barra de teclas de función programable.

Cancelar La acción “Borrar” queda cancelada.

Sí La región marcada se borra definitivamente.

No La función “Borrar” queda cancelada.

Si se selecciona en el menú la opción “Borrar”, la parte marcada del programa es borradadel listado sin que se memorice ningún dato en el portapapeles.

1.3.2.6 Buscar

Encontrará más información en el Manual de operación, dentro de la documentaciónProgramación por el usuario, capítulo [Creación y modificación de un programa],apartado [Trabajar con el editor de programa].

Page 15: Programación experto - Kuka

1 Generalidades sobre los programas KRL (continuación)

15 de 197ProgExperteBHR5.2 09.03.01 es

1.3.2.7 Reemplazar

La función “Buscar y reemplazar” sólo existe en el nivel del experto y, en ese nivel, sólo estádisponible en el editor. Esta aplicación busca en el programa, dentro de la zona visible (que-dan excluidas las líneas de folds o las folds abiertas), una secuencia de caracteres previa-mente indicada y permite sustituirla por otra secuencia de caracteres definida.

Para ello seleccione en el menú “Procesar” la opción “Reemplazar”.

[Procesar > Reemplazar]

Se abrirá la siguiente ventana:

Introduzca una secuencia de caracteres en la línea de búsqueda y luego, con la tecla de fle-cha, baje hasta la línea de reemplazo. Introduzca en ella la secuencia de caracteres quedebe reemplazar a la secuencia buscada.

Page 16: Programación experto - Kuka

Programación por el experto

16 de 197 ProgExperteBHR5.2 09.03.01 es

Softkey Significado

Buscar Si la secuencia de caracteres aparece varias veces en el docu-mento, pero sólo desea reemplazarla una vez en un lugar deter-minado, pulse varias veces la tecla del softkey “Buscar” hastaque encuentre el lugar que busca.

Reemplazar A continuación pulse “Reemplazar”. La secuencia de caracteresbuscada quedará reemplazada por la secuencia de caracterespreviamente indicada.

Reemplazar todo Si desea que la secuencia de caracteres buscada sea reempla-zada en todos los lugares donde aparece o en la región que pre-viamente marcó, después de introducirla en el formulario debúsqueda/reemplazo (tal como se describe más arriba) pulse latecla del softkey “Reemplazar todo”.Al hacerlo, en la ventana de mensajes aparecerá el mensaje “Seha encontrado la región especificada o marcada”. (Este mensajees una confirmación de que la búsqueda se efectuó en todo elprograma o en la región marcada).

Cancelar Al pulsar la tecla del softkey “Cancelar”, abandonará el modo dereemplazo y en la ventana de mensajes podrá ver la cantidad dereemplazos efectuados desde el momento en que se activó estafunción.

Page 17: Programación experto - Kuka

1 Generalidades sobre los programas KRL (continuación)

17 de 197ProgExperteBHR5.2 09.03.01 es

1.4 Esconder partes de un programa

Al contrario que en los editores normales, el editor KCP permite visualizar aquellas partesespecíficas del contenido de un programa que el usuario desea ver. Así, por ejemplo, elusuario ve solamente los contenidos esenciales de un programa, mientras que el expertopuede ver el programa completo.

1.4.1 FOLD

La superficie de operación KUKA utiliza una técnica especial para visualizar con claridad unprograma. Las instrucciones marcadas como comentarios KRL permiten suprimir la visuali-zación de las partes subsiguientes del programa. De esta manera, el programa queda divi-dido en apartados adecuados que se denominan “FOLDS” por tener las características deuna carpeta.

Normalmente, las “FOLDS” se encuentran “cerradas”, y sólo pueden ser “abiertas” en el ni-vel del experto. Estos elementos contienen información que el usuario no puede ver en lasuperficie de operación de KUKA (KUKA--BOF). En el nivel del experto, se puede hacer queun bloque KRL sea invisible para el usuario. Para ello, se deben delimitar las correspondien-tes declaraciones o instrucciones pormedio de las denominaciones “;FOLD” y “;ENDFOLD”.

En un programa, las folds se pueden visualizar u ocultar pulsando la tecla de menú “Proce-sar”, y luego seleccionando “FOLD” y el comando deseado.

Programa seleccionado

Programa en el editor

FOLDCopiarInsertarCortarBorrarBuscando...ReemplazarCerrar

Procesar FOLD actual abr/cerAbrir todas FOLDCerrar todas FOLD

FOLDCopiarInsertarCortarBorrarBuscando...ReemplazarCancelar programaResetear programaModificar

Procesar FOLD actual abr/cerAbrir todas FOLDCerrar todas FOLD

Page 18: Programación experto - Kuka

Programación por el experto

18 de 197 ProgExperteBHR5.2 09.03.01 es

Se puede elegir entre las siguientes opciones:

FOLD actual abr/cer

abre o cierra la FOLD en la línea en la que se encuentra el cur-sor de edición

Abrir todas FOLD abre todas las FOLD del programa

Cerrar todas FOLD cierra todas las FOLD del programa

Si se resetea un programa seleccionado en el cual hay Folds abiertas, éstas se cerraránautomáticamente.

De la secuencia...

;FOLD RESET OUT

FOR I=1 TO 16$OUT[I]=FALSE

ENDFOR

;ENDFOLD

....estando las Folds cerradas, en la superficie de operación solamente se visualizarán laspalabras “RESET OUT”. Con esta instrucción se puede, por ejemplo, hacer invisible parael usuario la sección de declaraciones e inicialización.

1.4.1.1 Programa de ejemplo

DEF FOLDS()

;FOLD DECLARE;--------- Sección de declaración ---------EXT BAS (BAS_COMMAND :IN,REAL :IN )DECL AXIS HOMEINT I;ENDFOLD

;FOLD INITIAL;---------- Inicialización ---------INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )INTERRUPT ON 3BAS (#INITMOV,0 ) ;Inicialización de velocidades,

;aceleraciones, $BASE, $TOOL, etc.FOR I=1 TO 16$OUT[I]=FALSE

ENDFORHOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 30,A6 0};ENDFOLD

;------------- Sección principal------------PTP HOME ;desplazamiento COILIN {X 540,Y 630,Z 1500,A 0,B 90,C 0}PTP HOME

END

Page 19: Programación experto - Kuka

1 Generalidades sobre los programas KRL (continuación)

19 de 197ProgExperteBHR5.2 09.03.01 es

En la superficie de operación, el programa de este ejemplo tiene el siguiente aspecto:

Sección principal

El mismo programa con folds abiertas:

Sección principal

Sección de declaraciones

Inicialización

Inicialización de velocidades;aceleraciones

Con la FOLD cerrada, sólo se puede ver la expresión que aparece después de la palabraclave “FOLD”. Por el contrario, con la FOLD abierta se visualizan todas las instruccionesy declaraciones.

”FOLD” es simplemente una instrucción para el editor. El compilador interpreta lasinstrucciones FOLD gracias a que éstas llevan delante el signo de punto y coma como sifuera un comentario normal.

Page 20: Programación experto - Kuka

Programación por el experto

20 de 197 ProgExperteBHR5.2 09.03.01 es

1.5 Modo de ejecución del programa

1.5.1 Selección del modo de ejecución del programaElmododeejecucióndel programaespecifica si el procesamiento delmismodebe realizarse

G sin que el programa se detenga

G por pasos de movimiento o

G por pasos individuales (línea).

En la siguiente tabla se describen todos los modos de ejecución de programas.

Modo deejecución

Descripción

#GOTodas las instrucciones se procesan sin interrupción dentro delprograma hasta llegar al final del mismo.

#MSTEP Motion Step (paso de movimiento)

El programa se ejecuta paso por paso, es decir, con una paradadespués de cada paso de movimiento.El programa se ejecuta sin avance.

#ISTEP Paso incremental (paso individual)

El programa se ejecuta por pasos programados, es decir, con unaparada después de cada instrucción (también de las líneas enblanco).El programa se ejecuta sin avance.

#PSTEP Program Step (paso de programa)

Los subprogramas se ejecutan por completo.El programa se ejecuta sin avance.

#CSTEP Continuous Step (paso de movimiento)

El programa se ejecuta paso por paso, es decir, con una paradadespués de cada paso de movimiento con parada exacta.El programa se ejecuta con avance, es decir, la ejecución seefectúa con posicionamiento aproximado.

Los modos de ejecución de programas #GO, #MSTEP y #ISTEP pueden seleccionarse enel KCP a través de una función de estado o por medio de la variable “$PRO_MODE”. Encambio, #PSTEP y #CSTEP pueden ser declarados solamente a través de la variable“$PRO_MODE”.

[Indicación > Variable > Únicos]

Encontrará información más detallada en el capítulo [Variables y declaraciones],apartado [Objetos de datos] bajo (Tipos de enumeración).

Page 21: Programación experto - Kuka

1 Generalidades sobre los programas KRL (continuación)

21 de 197ProgExperteBHR5.2 09.03.01 es

1.5.2 Cambio del modo de ejecución del programa

Normalmente no es necesario un desplazamiento COI al cambiar el modo de ejecución delprograma. Si el cambio de modo de ejecución del programa tiene lugar durante un paso demovimiento con avance, se ejecutará, por lo menos, el paso de movimiento actual. En elcaso de un paso demovimiento con posicionamiento aproximado, se ejecutan hasta el finalel paso de movimiento actual y el siguiente.

Conmutación ...STEP--GO

Al cambiar el modo de ejecución del programa de “#...STEP” a “#GO”, no se selecciona nin-gún paso y por tanto no se puede realizar ningún desplazamiento COI. Cuando se llega alsiguiente paso demovimiento, el sistema pasa al modo “#GO”. En este caso, no es necesa-rio volver a pulsar la tecla de arranque.

El interpretador no se reinicia, ya que primero ha alcanzado el siguiente paso demovimiento. No es necesario borrar la ejecución principal, ya que en elmodo deoperación“#...STEP” la memoria intermedia sólo contiene el paso de movimiento actual.

Conmutación GO--...STEP

Al cambiar el modo de ejecución del programa de “#GO” a “#...STEP”, el robot se desplazahasta la siguiente parada exacta o hasta que el avance ha sido ejecutado por completo. Enel caso de un paso de movimiento con posicionamiento aproximado, se ejecuta, por lo me-nos, el paso de movimiento siguiente. No se producen desplazamientos hasta otras zonasde aproximación, ningún punto que quede fuera del punto de destino se podrá alcanzar me-diante una selección de paso.

Pulsando la tecla de arranque, se efectúa una selección de paso en el paso de movimientoque sigue al paso de ejecución principal. A continuación, el sistema pasa al modo de ejecu-ción de programa “#...STEP”. Si en este momento no es posible seleccionar ningún paso,se visualizará el correspondiente mensaje de estado. En este caso, la ejecución principal,incluido el posicionamiento aproximado, continuarán hasta que sea posible una selecciónde paso.

El interpretador se reinicia cuando finaliza el paso de movimiento. Los pasos demovimiento que fueron planeados en el avance se borran de la memoria intermedia.

1 DEF Sub1() 1 DEF TEST()2 PTP P2 2 PTP HOME

=> 3 PTP P3 Ejecución principal 3 PTP P14 PTP P4 4 SUB1()5 PTP P5 5 PTP P66 END => 6 PTP P7 Avance

7 END

El puntero principal se encuentra en el subprograma “SUB1()”; el puntero adelantado estáen el programa principal, en “TEST()”. Si en ese momento se cambia el modo de ejecucióndel programa a “...STEP”, se visualizará unmensaje deestado. Sólo después deque el pun-tero principal llega al punto “P6” del programa principal se efectúa una selección de pasoen el siguiente paso de movimiento. A continuación, el mensaje de estado se borra y el sis-tema pasa al modo de ejecución de programa “#...STEP”.

Page 22: Programación experto - Kuka

Programación por el experto

22 de 197 ProgExperteBHR5.2 09.03.01 es

Caso especial de interrupción:

1 DEF Interrupt()2 INT I3 INTERRUPT DECLARE 5 WHEN $IN[10]==TRUE DO POSITION()4 PTP HOME5 PTP P1

=> 6 LIN P2 Ejecución principal7 INTERRUPT ON8 LIN P39 INTERRUPT OFF10 PTP P411 END1213 DEF POSITION()14 $OUT[12]=TRUE

=> 15 BRAKE Avance16 $OUT[52]=FALSE16 END

Al cambiar el modo de ejecución del programa, el puntero adelantado se encuentra dentrode un subprograma de interrupción. En este caso, el avance ejecuta el subprograma deinterrupción paso por paso en el modo de ejecución de programa “#...STEP” antes de quecontinúe la ejecución principal.

Caso especial de instrucción CIRC:

El paso de movimiento CIRC actual finaliza antes pasar al modo de ejecución de programa“#...STEP”.

Page 23: Programación experto - Kuka

1 Generalidades sobre los programas KRL (continuación)

23 de 197ProgExperteBHR5.2 09.03.01 es

1.6 Tratamiento de errores

Si se produce un error al compilar o al vincular, en la ventana de mensajes aparece unmensaje de error y en el navegador se marca el fichero donde está el error.

Un ejemplo sería el fichero“ERROR.SRC”, que fue creado (conerrores):

Una vez cerrado el editor, aparece en la ventana de mensajes una indicación acerca de lacantidad de errores.

Al mismo tiempo, durante este proceso, los ficheros afectados son marcados con una cruzroja.

Las teclas de softkey disponibles son las siguientes:

BorrarEditar DATAbrirEditar ERRNuevo

La tecla del softkey “Abrir” carga el fichero en el editor; al pulsar la tecla del softkey “EditarDAT” seabre conel editor el fichero deextensiónDat. Si deseaborrar los ficheros quecontie-nen errores, pulse “Borrar”. Con la opción “Nuevo” podrá crear un nuevo fichero.

Nombre del fichero

Descripción breve

Número de fallo

Número de línea y columnaerróneas

Línea errónea del textofuenteDescripción del fallo

*1

Editar ERR

Con ello, la barra de teclas de softkey cambia:

ActualizaEditor Cerrar

Page 24: Programación experto - Kuka

Programación por el experto

24 de 197 ProgExperteBHR5.2 09.03.01 es

INDICACIÓN *1

Los números de línea indicados corresponden a los números absolutos de líneaen el programa, del mismo modo que se visualizarían en un editor ASCII normal.Para que los números de línea de la indicación de fallos concuerden con losnúmeros de línea en el KCP, todas las folds deben estar abiertas y la visualiza-ción de detalles y la línea DEF deben estar activas. No obstante, esta forma devisualización es algo confusa, ya que ofrece toda la información aunque no seanecesaria. Encontrará más información sobre la visualización de detalles y lalínea DEF en el apartado [Esconder partes de un programa].

En la indicación de fallos se puede observar que han aparecido los siguientes fallos:

G 3 líneas en el fichero SRC contienen errores;

G los números de línea con errores son 24, 25 y 28;

G en la línea 24, los números de error

-- 2263: tipo de variable de bucle diferente a INT

G en la línea 25 el número de error

-- 2249: expresión diferente a INT

G en la línea 28 el mensaje de error

-- 2309: se espera el signo “(”

De los mensajes de error “2263” se puede deducir de inmediato que la variable I no fue de-clarada como entera. El mensaje de error 2249 también es resultado de la ausencia de esadeclaración, ya que en un bucle de conteo el contador siempre debe ser del tipo INT. Elmen-saje “2309” significa: el compilador interpreta la línea como una llamada de subprogramaen la que sin embargo faltan los paréntesis.

El significado de los números de error también sepuede visualizar en línea mediante la función demenú “Variable” > ”Únicos”. Para ello, indique enla ventana de estado, en el campo de entrada“Nombre” el signo “&” seguido del número deerror. En este caso, sería por ejemplo “&2263” yse pulsaría la tecla de entrada.

[Indicación > Variable > Únicos]

Si ahora carga en el editor el fichero SRC (en este caso, “ERROR.SRC”), puede efectuarlas correcciones correspondientes. Para facilitar esta labor, el cursor se coloca, parpa-deando, sobre la primera línea errónea. Compruebe que está desactivada la visibilidad limi-tada y que puede verse la línea DEF. Encontrará información más detallada en el apartado[Esconder partes de un programa].

En el siguiente ejemplo no es necesario abrir las folds. No obstante, si se desea hacerlo,utilice la instrucción de menú “Procesar > FOLD > Abrir todas FOLD”.

La línea “INT I” que faltaba en el programa creado originalmente debe ser insertada de-lante de la línea “INI”. Esto sólo es posible cuando puede verse la línea “DEF ERROR( )”.

Page 25: Programación experto - Kuka

1 Generalidades sobre los programas KRL (continuación)

25 de 197ProgExperteBHR5.2 09.03.01 es

Así pues, en el ejemplo de la página 23, agregue la línea

INT I

delante de la línea INI y tache uno de los signos de igualdad dobles.

I = I + 1

Insertar esta línea aquí

Eliminar un signo deigualdad

Después de haber cerrado el editor y memorizado el fichero corregido, en la lista de fallos(Error de listado) puedepulsar la tecla del softkey “Actualiza” y la lista de fallos desaparecerácuando se hayan corregido todos los fallos.

Page 26: Programación experto - Kuka

Programación por el experto

26 de 197 ProgExperteBHR5.2 09.03.01 es

1.7 Comentarios

Los comentarios son un componente importante de cualquier programa informático. Conellos puede clarificar la estructura de un programa y hacer que otros puedan comprenderla.Los comentarios no influyen en la velocidad de procesamiento del programa.

Los comentarios se pueden colocar en cualquier parte de un programa. Siempre comienzancon un punto y coma “;”, por ej.:

…PTP P1 ;Desplazamiento al punto de partida…;--- Reiniciar salidas ---FOR I = 1 TO 16

$OUT[I] = FALSEENDFOR…

Page 27: Programación experto - Kuka

2 Variables y declaraciones

27 de 197ProgExperteBHR5.2 09.03.01 es

2 Variables y declaraciones

2.1 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 otrasformas de datos.

En la programación de robots industriales, las variables son necesarias, por ejemplo, parael procesamiento del sensor. Con ellas, el valor leído por el sensor se puede memorizar yevaluar en diferentes lugares del programa. Además, se pueden efectuar operaciones arit-méticas para calcular, por ejemplo, una nueva posición.

En el programa, una variable se representa por medio de un nombre que se puede elegirlibremente dentro de unos determinados límites.

Nombres en KRLS pueden tener una longitud máxima de 24 caracteres

S pueden contener letras (A--Z), cifras (0--9) y los caracteres ’_’ y ’$’

S no deben comenzar con cifras

S no deben ser palabras clave

Puesto que todas las variables del sistema (véase el apartado 2.4) comienzan con ’$’,no se debe utilizar este signo como primer carácter en los nombres definidos por elpropio usuario.

Nombres válidos en KRL son, por ejemplo:

SENSOR_1

BOQUILLA13

P1_HASTA_P12

Una variable se debe considerar como un área dememoria fija, a cuyo contenido puede ac-cederse a través del nombre de variable. Por ello, la variable se crea para el tiempo quedurael procesamiento del programa mediante una posición de memoria (lugar) y un contenidode memoria (valor).

Asignación de valor:

Los valores se asignan a las variables mediante el signo de igualdad (=). La instrucción

CANTIDAD = 5

significa por tanto queen el área dememoria se registra, con la direcciónCANTIDAD, el valor5. Al programador no le interesa la apariencia exacta de la dirección, por lo que el compiladorla asigna de manera independiente. Lo único que importa es que en el programa se puedaacceder en todo momento al contenido de memoria por medio de su nombre.

Dado que cada objeto de datos (véase el apartado 2.2) necesita su propia cantidad de me-moria, el tipo dedatos deunavariable debe ser acordado (declarado) antes de su uso (véaseel apartado 2.2.1).

Page 28: Programación experto - Kuka

Programación por el experto

28 de 197 ProgExperteBHR5.2 09.03.01 es

Duración:

La duración de una variable es el tiempo durante el cual dicha variable tiene asignada unaposición de memoria. Este tiempo depende de si la variable está declarada en un archivoSRC o en una lista de datos:

G Variable declarada en un archivo SRC

La duración se limita al tiempo de funcionamiento del programa. Una vez finalizado elprocesamiento, el área de memoria vuelve a quedar libre. Por lo tanto, el valor de lavariable se pierde.

G Variable declarada en una lista de datos (véase el capítulo Listas de datos)

La duración no depende del tiempo de procesamiento del programa. La variable existemientras exista la lista dedatos. Dichas variables son, por lo tanto, permanentes (hastala próxima conexión / desconexión).

Page 29: Programación experto - Kuka

2 Variables y declaraciones (continuación)

29 de 197ProgExperteBHR5.2 09.03.01 es

2.2 Objetos de datosObjetos de datos son aquellas unidades de memoria de un determinado tipo de datos quepueden recibir un nombre. Las unidades dememoria pueden constar de muchas células dememoria diferentes (bytes, palabras, etc.). Si el programador acuerda un objeto de datosde este tipo con un nombre, se obtiene una variable. A partir de ese momento, la variableocupa una o varias células de memoria en las que el programa puede grabar y leer datos.Gracias a la posibilidad de denominar simbólicamente las células de memoria con nombreslibremente seleccionables, la programación resultamás fácil y clara, y el programa sepuedeleer con mayor facilidad.

El siguiente ejemplo sirve para clarificar el término “tipo de datos”: en una célula dememoriacon 8 bits se encuentra la combinación de bits

00110101

¿Cómo debe interpretarse esta combinación de bits? ¿Se trata de la representación binariadel número 53 o del carácter ASCII “5” (que se representa con el mismo patrón de bits)?

Tipo de datos:

Para poder dar una respuesta inequívoca a esta cuestión, falta todavía una información im-portante: eltipo de datos de unobjeto dedatos. Enel casoanterior, podría tratarse, por ejem-plo, del tipo “número entero” (INTEGER) o “carácter” (CHARACTER).

Además de por estas razones (de naturaleza computacional), el uso de tipos de datos sejustifica por lo cómodo que resulta para el usuario, ya que le permite trabajar exactamentecon aquellos tipos que son idóneos para su aplicación en particular.

2.2.1 Declaración e inicialización de objetos de datos

DECL:

La asignación de un nombre de variable a un tipo de datos y la reserva de la posición dememoria se efectúan en KRL por medio de la declaración DECL. Con

DECL INT CANTIDAD,NUMERO

se declaran, por ejemplo, dos variables CANTIDAD y NUMERO del tipo de datos “númeroentero” (integer).

De este modo, el compilador conoce estas dos variables y el tipo de datos correspondiente,y utilizando las variables puede comprobar si este tipo dedatos permite efectuar laoperacióndeseada.

Tal como muestra el ejemplo, la declaración comienza con la palabra clave DECL, seguidapor el tipo de datos y la lista de variables que deben contenerlo.

Para declarar variables y campos de un tipo de datos predefinido, se puede omitir lapalabra clave DECL. Junto a los tipos de datos simples INT, REAL, CHAR y BOOL(véase el apartado 2.2.2) se encuentran predefinidos, entre otros, los tipos de datos deestructura POS, E6POS, FRAME, AXIS y E6AXIS (véase el apartado 2.2.5).

En las variables (¡no los campos!) con datos del tipo POS, se puede omitir toda la de-claración. El tipo de datos POS se considera el tipo estándar para variables.

La palabra clave DECL es imprescindible para poder declarar los tipos de estructura olos de enumeración libremente definibles (véanse los apartados 2.2.5 y 2.2.6).

Inicialización:

Una vez declarada una variable, su valor se define inicialmente como no válido, ya que delo contrario este valor dependería de la ocupaciónaleatoria de lamemoria. Para poder traba-jar con la variable, es necesario asignarle previamente un determinado valor. Esta primeraasignación de un valor a una variable se denomina inicialización.

Para crear nuevos archivos con la tecla del softkey “Nuevo”, en la superficie de opera-ción KUKA también se genera automáticamente una secuencia INI. La declaración devariables siempre debe efectuarse antes de esta secuencia.

Page 30: Programación experto - Kuka

Programación por el experto

30 de 197 ProgExperteBHR5.2 09.03.01 es

La asignación de un valor a una variable es una instrucción y, por ello, no puede efectuarseen la sección de declaraciones. No obstante, en la sección de instrucciones la inicializaciónsepuede realizar en cualquiermomento. Sin embargo, todas las variables declaradas debenser convenientemente inicializadas en una sección de inicialización directamente despuésde la sección de declaración (véase Fig. 8).

Solamente en las listas de datos está permitido inicializar variables directamente en la líneade declaración.

DEF NAME()

;---- Sección de declaraciones----…

;---- Sección de inicialización ----…

;---- Sección de instrucciones ----…

END

Fig. 8 Estructura básica de un programa del robot

Encontrará más información en el capítulo [Listas de datos].

2.2.2 Tipos de datos simples

Tipos de datos simples son ciertos tipos de datos básicos que existen en la mayoría de len-guajes deprogramación. Al contrario que los tipos dedatos estructurados (véaseelapartado2.2.3--2.2.6), los tipos de datos simples contienen un único valor. Los tipos de datos conoci-dos en KRL aparecen en una lista junto con su rango de valores correspondiente en Tab. 1.

Tipo de datos Entero Real Booleano Carácter

Palabra clave INT REAL BOOL CHAR

Significado Número entero Número concoma flotante

Estado lógico 1 carácter

Rango devalores

-231…231-1 ±1.1E-38…±3.4E+38

TRUE, FALSE Carácter ASCII

Tab. 1 Tipo de datos simple

Page 31: Programación experto - Kuka

2 Variables y declaraciones (continuación)

31 de 197ProgExperteBHR5.2 09.03.01 es

INT:

El tipo dedatos Integer (número entero) constituye unaparte de la cantidad total denúmerosenteros. Solamente es posiblemanejar una parte porque ningúnordenador puede visualizartodos los números enteros, cuya cantidad es en teoría infinita. Los 32 bits previstos para lostipos enteros en el KR C... proporcionan por tanto 231 números enteros más el signo corres-pondiente. El número 0 es considerado parte de los números positivos.Con

NÚMERO = -23456

se asigna a la variable NÚMERO el valor -23456.

Si a una variable INTEGER se le asigna un valor REAL, el valor se redondea según las nor-mas generales (x.0 hasta x.49 redondeado hacia abajo, x.5 hasta x.99 redondeado haciaarriba). A través de la instrucción

NÚMERO = 45,78

la variable INTEGER NÚMERO recibe el valor 46.

Excepción: en la división de enteros, se corta la posición decimal, por ejemplo: 7/4 = 1

Sistema binario/hexadecimal:

Mientras que el ser humano calcula y piensa en el sistema decimal, un ordenador solamentereconoce unos y ceros que representan los estados “activo” e “inactivo”. Un estado (activoo inactivo) se representa por tanto mediante un bit. Por motivos de velocidad, en general elordenador accede a un paquete completo de estos ceros y unos. El tamaño típico de un pa-quete son 8 bits (=1 byte), 16 bits o 32 bits. Por ello, en las operaciones propias de la má-quina, a menudo resulta útil el uso del sistema binario (sistema de 2 dígitos: cifras 0 y 1) odel sistema hexadecimal (sistema de 16 dígitos: cifras 0--9 y A--F). Los valores enteros bina-rios o hexadecimales pueden indicarse en KRL mediante las comillas simples (’) y una B,para la representación binaria, o una H, para la hexadecimal.

D 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

H 0 1 2 3 4 5 6 7 8 9 A B C D E F 10

Tab. 2 Los primeros 17 números de los sistemas decimal y hexadecimal

El número 90 se puede por tanto asignar en KRL a tres diferentes tipos de variable entera:

NUMENT = 90 ;Sistema decimal

NUMENT = ’B1011010’ ;Sistema binario

NUMENT = ’H5A’ ;Sistema hexadecimal

Bin→Dec:

La conversión de los números binarios al sistema decimal se realiza del modo siguiente:

1 0 1 1 0 1 0= 1S26+0S25+1S24+1S23+0S22+1S21+0S20= 90

26 25 24 23 22 21 20= 1S26+0S25+1S24+1S23+0S22+1S21+0S20= 90

Hex→ Dec:

Para transferir los números desde el sistema hexadecimal al sistema decimal, proceda delmodo siguiente:

5 A=5S161+10S160=90

161 160=5S161+10S160=90

Page 32: Programación experto - Kuka

Programación por el experto

32 de 197 ProgExperteBHR5.2 09.03.01 es

REAL:

La coma flotante significa la división de un número enmantisa y exponente, y su representa-ción de forma normalizada. Así se representa, por ejemplo:

5.3 como 0.53000000 E+01-100 como -0.10000000 E+03

0.0513 como 0.51300000 E-01

Al calcular con valores reales, debido a la cantidad limitada de posiciones de coma flotantey a la inexactitud que eso conlleva, es preciso recordar que las leyes algebraicas habitualesdejan de ser válidas para todos los casos. Así, por ejemplo, en el álgebra vale:13× 3= 1

Si se deja realizar este cálculo a un ordenador, puede obtenerse un resultado de sólo0.99999999 E+00. Una comparación lógica de este número con el número 1 daría comoresultado el valor FALSE. Sin embargo, para las aplicaciones prácticas en el campo de losrobots, suele ser suficiente esta exactitud si se tiene en cuenta que la prueba lógica de igual-dad para magnitudes reales sólo se puede realizar adecuadamente dentro de un pequeñorango de tolerancia.

Algunas asignaciones admisibles en variables reales son, por ejemplo:

NUMREAL1 = -13.653

NUMREAL2 = 10

NUMREAL3 = 34.56 E-12

Si a una variable REAL se le asigna un valor ENTERO (INTEGER), se efectúa unaconversión automática de tipo según REAL. La variable NUMREAL2 tiene por tanto, segúnesta asignación, el valor 10.0.

BOOL:

Las variables booleanas sirven para describir estados lógicos (por ejemplo,entradas/salidas). Solamente pueden asumir los valores TRUE (verdadero) y FALSE(falso):

ESTADO1 = TRUE

ESTADO2 = FALSE

CHAR:

Las variables de carácter pueden representar exactamente 1 carácter del juego de caracte-res ASCII. Para poder asignar un carácter ASCII a una variable CHAR, el carácter asignadodebe estar entre comillas (”):

CARACTER1 = “G”

CARACTER2 = “?”

Respecto a la memorización de todas las series de caracteres, consulte el apartado 2.2.4.

Page 33: Programación experto - Kuka

2 Variables y declaraciones (continuación)

33 de 197ProgExperteBHR5.2 09.03.01 es

2.2.3 Campos

Se conocen como campos aquellos agrupamientos de objetos de un mismo tipo de datosque formanunobjeto dedatos. A los componentes individuales deun campose puedeacce-der a través de índices. Mediante la declaración

DECL INT OTTO[7]

Índice de campo:

puede poner, por ejemplo, 7 números enteros diferentes en el campo OTTO[]. A cada com-ponente individual del campo se puede acceder indicando el correspondiente índice (el pri-mer índice es siempre el 1):

OTTO[1] = 5 ; al 1˚ elemento se le asigna el número 5OTTO[2] = 10 ; al 2˚ elemento se le asigna el número 10OTTO[3] = 15 ; al 3˚ elemento se le asigna el número 15OTTO[4] = 20 ; al 4˚ elemento se le asigna el número 20OTTO[5] = 25 ; al 5˚ elemento se le asigna el número 25OTTO[6] = 30 ; al 6˚ elemento se le asigna el número 30OTTO[7] = 35 ; al 7˚ elemento se le asigna el número 35

De manera gráfica, cabe imaginarse el campo con el nombre OTTO[] como una estanteríacon 7 compartimentos. De acuerdo con las asignaciones anteriores, la ocupación de loscompartimentos ofrecería el siguiente aspecto:

5 10 15 20 25 30 35

[1] [2] [3] [4] [5] [6] [7]OTTO

Fig. 9 Representación de un campo unidimensional

Si es preciso inicializar todos los elementos de un campo con el mismo número, por ejemploel 0, no es necesario programar explícitamente cada asignación, sino que se puede “auto-matizar” la preasignación por medio de un bucle y de una variable de conteo:

FOR I = 1 TO 7OTTO[I] = 0

ENDFOR

Encontrará más información en el capítulo [Control de ejecución del programa],apartado [Bucles].

La variable de conteo es en este caso la variable entera I. Ésta debe haber sido declaradaantes de ser utilizada como número entero.

S El tipo de datos de un campo es opcional. De este modo, cada uno de los elemen-tos puede constar a su vez de una composición de tipos de datos (por ejemplo: uncampo compuesto de campos)

S Para el índice sólo se permite utilizar tipos de datos enterosS Además de las constantes y variables, para el índice también se permite utilizar ex-

presiones aritméticas (véase el apartado 2.3.1)S El índice siempre empieza a contar a partir de 1

Page 34: Programación experto - Kuka

Programación por el experto

34 de 197 ProgExperteBHR5.2 09.03.01 es

Bidimensional:

Además de los campos unidimensionales tratados hasta ahora (es decir, los campos conun solo índice), en KRL pueden utilizarse también campos bidimensionales otridimensionales. Con

DECL REAL MATRIX[5,4]

se declara un campo bidimensional 5×4 con 5×4=20 elementos del tipo REAL. Gráfica-mente, este campo puede representarse como una matriz con 5 columnas y 4 filas. Con lasecuencia de programa

I[3] = 0FOR COLUMNA = 1 TO 5

FOR FILA = 1 TO 4I[3] = I[3] + 1MATRIX[COLUMNA,FILA] = I[3]

ENDFORENDFOR

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:

Fila 3

3

Fila 2

Fila 1

Plano 1

Fila 4

1

2

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

Colum

na2

Colum

na3

Colum

na4

Colum

na5Colum

na1

Fig. 10 Representación de un campo bidimensional

Tridimensional:

Al fin y al cabo, cabe imaginarse los campos tridimensionales comovariasmatrices bidimen-sionales dispuestas una tras otra. La tercera dimensión indica, por así decirlo, el plano enel que se encuentra la matriz (véase Fig. 11). Un campo tridimensional se declara de formaanáloga a los campos unidimensionales o bidimensionales, por ejemplo:

DECL BOOL FELD_3D[3,5,4]

La secuencia de inicialización podría tener el siguiente aspecto:

FOR PLANO = 1 TO 3FOR COLUMNA = 1 TO 5

FOR FILA = 1 TO 4CAMPO_3D[PLANO,COLUMNA,FILA] = FALSE

ENDFORENDFOR

ENDFOR

Page 35: Programación experto - Kuka

2 Variables y declaraciones (continuación)

35 de 197ProgExperteBHR5.2 09.03.01 es

Fila 3

3

Fila 2

Fila 1

Plano 3

Plano 2

Plano 1

Fila 4

1

2

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

2225

2629

3033

34

35

36

37

38

39

40

41

4245

4649

5053

54

55

56

57

58

59

60

Colum

na2

Colum

na3

Colum

na4

Colum

na5Colum

na1

Fig. 11 Representación de un campo tridimensional

Page 36: Programación experto - Kuka

Programación por el experto

36 de 197 ProgExperteBHR5.2 09.03.01 es

2.2.4 Cadenas de caracteres

Tal como se describe anteriormente, el tipo de datos CHAR sólo permite guardar caracteresindividuales. Para utilizar cadenas de caracteres completas, por ejemplo palabras, bastacon definir un campo unidimensional del tipo CHAR:

DECL CHAR NAME[8]

Como viene siendo habitual, se puede acceder a cada uno de los elementos del campoNAME[], por ejemplo:

NAME[3] = “G”

G

También se pueden introducir cadenas de caracteres completas:

NAME[] = “ABCDEFG”

ocupa los siete primeros elementos del campo NAME[] con las letras A, B, C, D, E,F y G:

A B C D E F G

2.2.5 Estructuras

STRUC:

Si es necesario agrupar diferentes tipos de datos, el campono es apropiado, por lo quedeberecurrirse a la forma general de composición. Con la instrucción de declaración STRUC pue-den agruparse diferentes tipos de datos definidos previamente (o tipos de datos predefini-dos) en un nuevo tipo de datos compuesto. En especial, las composiciones y los campospueden ser parte de otras composiciones.

Un ejemplo típico del uso de composiciones es el tipo de datos estándar POS. Este tipoconsta de 6 valores REAL y 2 valores INT, y fue definido en el archivo $OPERATE.SRC dela siguiente manera:

STRUC POS REAL X, Y, Z, A, B, C, INT S, T

Punto separador:

Si ahora se utiliza por ejemplo una variable POSICIÓN del tipo de datos de estructura POS,se pueden ocupar los elementos individualmente mediante el punto separador, por ejemplo:

POSICION.X = 34.4POSICION.Y = -23.2POSICION.Z = 100.0POSICION.A = 90POSICION.B = 29.5POSICION.C = 3.5POSICION.S = 2POSICION.T = 6

o conjuntamente por medio de lo que se conoce como agregado

POSICION={X 34.4,Y -23.2,Z 100.0,A 90,B 29.5,C 3.5,S 2,T 6}

Encontrarámás informaciónenel capítulo [Variablesydeclaraciones], apartado [Decla-ración e inicialización de objetos de datos].

Page 37: Programación experto - Kuka

2 Variables y declaraciones (continuación)

37 de 197ProgExperteBHR5.2 09.03.01 es

Los agregados se rigen por las siguientes normas:

S Los valores de un agregado pueden ser constantes simples o incluso agregados.S En un agregado no es necesario indicar todos los componentes de la estructura.S Los componentes no necesitan indicarse en el orden en que fueron definidos.S Cada componente debe estar incluido en un agregado una sola vez.S En los campos de estructuras, un agregado describe el valor de un elemento de

campo individual.S Al comienzo de un agregado puede estar indicado el nombre del tipo de estructura

(separado por un signo de dos puntos).

Así pues, las variables POS también admiten, por ejemplo, las siguientes asignaciones:

POSICION={B 100.0,X 29.5,T 6}POSICION={A 54.6,B -125.64,C 245.6}POSICION={POS: X 230,Y 0.0,Z 342.5}

En las estructuras POS, E6POS, AXIS, E6AXIS y FRAME los componentes que faltanno sufren ningún cambio. En todos los demás agregados, los componentes inexi-stentes se definen como no válidos.

El siguiente ejemplo explica el procedimiento de creación de algunas variables de estruc-tura:

En un subprograma de soldadura al arco, es necesario transferir a una variable S_PARA lasiguiente información:

REAL V_HILO Velocidad del hiloINT CARACT Línea característica 0…100%BOOL ARCO con/sin arco (para simulación)

La variable S_PARA debe constar de 3 elementos correspondientes a diferentes tipos de da-tos. En primer lugar, se debe definir un nuevo tipo de datos que cumpla estos requisitos:

STRUC TIPOSOLD REAL V_HILO, INT CARACT, BOOL ARCO

De este modo, se ha creado un nuevo tipo de datos con la denominación TIPOSOLD (TI-POSOLD no es ninguna variable). TIPOSOLD consta de 3 componentes: V_HILO, CA-RACT y ARCO. A continuación, puede declararse una variable opcional del nuevo tipo dedatos, por ejemplo:

DECL TIPOSOLD S_PARA

De este modo, se ha creado una variable S_PARA del tipo de datos TIPOSOLD. Tal comosehadescrito, a los elementos individuales sepuedeacceder pormediodel puntoseparadoro del agregado:

S_PARA.V_HILO = 10.2S_PARA.CARACT = 66S_PARA.ARCO = TRUE

o

S_PARA = {V_HILO 10.2,CARACT 50, ARCO TRUE}

Para poder diferenciar mejor los tipos de datos autodefinidos de las variables, los nom-bres de los nuevos tipos de datos deben terminar con…TIPO.

En el archivo $OPERATE.SRC se encuentran predefinidas las estructuras siguientes:

STRUC AXIS REAL A1,A2,A3,A4,A5,A6

STRUC E6AXIS REAL A1,A2,A3,A4,A5,A6,E1,E2,E3,E4,E5,E6

STRUC FRAME REAL X,Y,Z,A,B,C

STRUC POS REAL X,Y,Z,A,B,C, INT S,T

STRUC E6POS REAL X,Y,Z,A,B,C,E1,E2,E3,E4,E5,E6, INT S,T

Page 38: Programación experto - Kuka

Programación por el experto

38 de 197 ProgExperteBHR5.2 09.03.01 es

Los componentes A1…A6 de la estructura AXIS son valores angulares (ejes rotatorios) ovalores de translación (ejes translatorios) para el desplazamiento específico de los ejes delrobot 1…6.

Con los componentes adicionales E1…E6 en la estructura E6AXIS se puede acceder a losejes adicionales.

En la estructura FRAME se pueden especificar 3 valores de posición en el espacio (X,Y y Z)así como 3 orientaciones en el espacio (A, B y C). De este modo, un punto en el espacioqueda definido unívocamente por su posición y por su orientación.

Dado que existen robots que pueden desplazarse hasta un mismo punto en el espacio convarias posiciones de eje, las variables enteras S y Tde la estructura POS sirven paradetermi-nar una posición unívoca del eje.

Encontrará más información en el capítulo [Programación de movimiento], apartado[Instrucciones de movimiento] Status (S) y Turn (T).

Con los componentes E1…E6 de la estructura E6POS, se puede acceder de nuevo a losejes adicionales.

Tipos de datos geométricos:

Los tipos AXIS, E6AXIS, POS, E6POS y FRAME también se conocen como tipos de datosgeométricos, ya que con ellos el programador puede describir con facilidad relaciones geo-métricas.

Encontrará más información en el capítulo [Programación de movimiento], apartado[Utilización de diferentes sistemas de coordenadas].

Page 39: Programación experto - Kuka

2 Variables y declaraciones (continuación)

39 de 197ProgExperteBHR5.2 09.03.01 es

2.2.6 Tipos de enumeración

Un tipo de datos de enumeración es un tipo de datos que se compone de una cantidad limi-tada de constantes. Las constantes son nombres libremente definibles y pueden ser especi-ficadas por el usuario. Una variable de este tipo (variable de enumeración) solamente puedeaceptar el valor de una de estas constantes.

Para explicar este concepto, se puede tomar la variable de sistema $MODE_OP. En ella sememoriza qué tipo de modo de servicio acaba de ser seleccionado. Se puede elegir entrelos modos de servicio T1, T2, AUT y EX.

Se podría declarar $MODE_OP como variable entera, asignar un número a cada modo deservicio ymemorizarlo en$MODE_OP. Este procedimiento resultaría, sin embargo, muy com-plicado.

Una soluciónmuchomás conveniente es la que ofrece el tipo de enumeración. En el archivo$OPERATE.SRC se ha generado para ello un tipo de datos de enumeración con el nombreMODE_OP:

ENUM MODE_OP T1, T2, AUT, EX, INVALID

La instrucción para declarar los tipos de enumeración se denomina por tanto ENUM. Las va-riables del tipo de enumeración MODE_OP solamente pueden aceptar los valores T1, T2,AUT, EX o INVALID. La declaración de las variables se efectúa una vez más con la palabraclave DECL:

DECL MODE_OP $MODE_OP

Lavariable deenumeración $MODE_OPpuede ser ocupadamediante asignación normal conuno de los cuatro valores del tipo de datos MODE_OP. Para diferenciarlas de las constantessimples, a las constantes deenumeraciónautodefinidas se les antepone, en las inicializacio-nes o en las consultas, el carácter “#”, por ejemplo:

$MODE_OP = #T1

Ahora con ENUM se pueden crear tantos tipos de datos de enumeración autodefinidos comose que quiera.

Page 40: Programación experto - Kuka

Programación por el experto

40 de 197 ProgExperteBHR5.2 09.03.01 es

2.3 Manipulación de datos

Para lamanipulacióndediferentes objetos dedatos, existe una gran cantidad deoperadoresy funciones que permiten crear fórmulas. El poder de un lenguaje deprogramación de robotsdepende tanto de los objetos de datos admitidos como de las posibilidades demanipularlos.

2.3.1 Operadores

Operadores son los operadores matemáticos habituales, en contraposición a funciones ta-les como SIN(30), que proporciona el seno del ángulo de 30_. Así pues, en la operación5+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í, porejemplo, 7 -- 3 es, como resta de dos números enteros, una operación admisible. Por el con-trario, 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 rea-les) se efectúa una adaptación del tipo y el valor entero 5 es convertido en el valor real 5.0.Esta problemática se tratará más a fondo al hablar de los diferentes operadores.

2.3.1.1 Operadores aritméticos

Los operadores aritméticos corresponden a los tipos de datos INTEGER (ENTERO) yREAL. En KRL se admiten los 4 tipos de cálculo básico (véase Tab. 3).

Operador Descripción

+ Suma o signo positivo

-- Resta o signo negativo

* Multiplicación

/ División

Tab. 3 Operadores aritméticos

El resultado de una operación aritmética solamente es INT cuando los dos operandos sondel tipo INTEGER (entero). Si el resultado de una división de enteros no es un número en-tero, se desecha la parte decimal. Cuando, como mínimo, uno de los dos operandos esREAL, entonces también el resultado es de tipo REAL (véase Tab. 4).

Operandos INT REAL

INT INT REAL

REAL REAL REAL

Tab. 4 Resultado de una operación aritmética

Page 41: Programación experto - Kuka

2 Variables y declaraciones (continuación)

41 de 197ProgExperteBHR5.2 09.03.01 es

A modo de explicación, puede utilizarse el siguiente ejemplo de programa:

DEF ARITH()

;--------- Sección de declaración ---------INT A,B,CREAL K,L,M

;---------- Inicialización ---------;antes de la inicialización, todas las variables son no-válidas.A = 2 ;A=2B = 9.8 ;B=10C = 7/4 ;C=1K = 3.5 ;K=3.5L = 0.1 E01 ;L=1.0M = 3 ;M=3.0

;------------- Sección principal------------A = A * C ;A=2B = B - ’HB’ ;B=-1C = C + K ;C=5K = K * 10 ;K=35.0L = 10 / 4 ;L=2L = 10 / 4.0 ;L=2.5L = 10 / 4. ;L=2.5L = 10./ 4 ;L=2.5C = 10./ 4. ;C=3M = (10/3) * M ;M=9.0

END

Page 42: Programación experto - Kuka

Programación por el experto

42 de 197 ProgExperteBHR5.2 09.03.01 es

2.3.1.2 Operador geométrico

El operador geométrico se simboliza en KRL con el símbolo dedos puntos “:”. Este operadorejecuta, entre los tipos de datos FRAME y POS un combinación lógica de frames.

La combinación lógica de dos frames es el procedimiento normal para transformar sistemasdecoordenadas. Por ello, la combinación lógica de unaestructura FRAME con unaestructuraPOS solamente actúa sobre el frame que está dentro de la estructuraPOS. Los componentesS y T no resultan afectados por la transformación y por ello tampoco necesitan estar ocupa-dos con un valor. Sin embargo, los valores X, Y, Z, A, B y C deben estar ocupados siemprecon un valor, tanto en los operandos POS como en los operandos FRAME.

Combinación lógica de frames:

Una combinación lógica de frames se evalúa de izquierda a derecha. El resultado siempretiene el mismo tipo de datos que el operando que, en el lado derecho, más alejado se en-cuentre (véase Tab. 5).

Operandoizquierdo

(SC referencia)

Operador Operandoderecho

(SC destino)

Resultado

POS : POS POS

POS : FRAME FRAME

FRAME : POS POS

FRAME : FRAME FRAME

Tab. 5 Combinaciones de tipos de datos en el operador geométrico

Cuando el operando izquierdo tiene el tipo de datos POS, se efectúa una adaptación detipo. La posición indicada por la estructura POS es convertida en un frame. Esto significaque el sistema averigua el frame de la herramienta correspondiente a esta posición.

La forma en que actúa el operador geométrico se puede explicar por medio de un sencilloejemplo (véase Fig. 12):

En una habitación hay una mesa. El sistema de coordenadas del ESPACIO está definidocomo 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 iz-quierda de la mesa se encuentra exactamente a 600 mm de la pared delantera y a 450mmde la pared izquierda de la habitación. La mesa tiene 800 mm de altura.

Sobre la mesa hay una pieza de forma cuadrangular. El sistema de coordenadas PIEZA sedebe colocar en una esquina de la pieza, tal como se muestra en Fig. 12. Para luego podermanipular convenientemente la pieza, el eje Z del sistema de coordenadas PIEZAmira ha-cia 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 MESAes X=80 mm, Y = 110 mm y Z = 55 mm.

Page 43: Programación experto - Kuka

2 Variables y declaraciones (continuación)

43 de 197ProgExperteBHR5.2 09.03.01 es

ZR

XR

YR

ZT

XB

YB

Base=Mesa:Pieza

Base

Mesa

Pieza

XT

ZB

YT

Fig. 12 Modo de actuación del operador geométrico

Ahora, la tarea es describir el sistema de coordenadas PIEZA con respecto al sistema decoordenadas HABITACIÓN. Para ello, se deben declarar en primer lugar las siguientes va-riables de frame:

FRAME MESA, PIEZA, BASE

El sistema de coordenadas HABITACIÓN ya está establecido por el sistema. Los sistemasde coordenadas MESA y PIEZA se inicializan ahora de acuerdo con las condiciones límite:

MESA = {X 450,Y 600,Z 800,A 0,B 0,C 0}PIEZA = {X 80,Y 110,Z 55,A -40,B 180,C 0}

Ahora, el sistema de coordenadas PIEZA con respecto al sistema de coordenadas ESPA-CIO se obtiene mediante el operador geométrico, para

BASE = MESA:PIEZA

En nuestro caso, BASE está ocupado del modo siguiente:

BASE = {X 530,Y 710,Z 855,A 140,B 0,C -180}

Otra posibilidad sería:

BASE = {X 530,Y 710,Z 855,A -40,B 180,C 0}

Page 44: Programación experto - Kuka

Programación por el experto

44 de 197 ProgExperteBHR5.2 09.03.01 es

Solamente en este caso especial los componentes de BASE son resultado dela suma de los componentes de MESA y PIEZA. Esto se debe a que el si-stema de coordenadas MESA no está girado con respecto al sistema de coor-denadas HABITACIÓN.Sin embargo, lo normal es que no se pueda realizar una suma simple de loscomponentes.Una combinación lógica de frames tampoco es conmutativa. Esto significa quesi se intercambian el frame de referencia y del frame de destino, lo normal esque cambie también el resultado.

Encontrará más información en el capítulo [Programación de movimiento], apartado[Utilización de diferentes sistemas de coordenadas].

He aquí otro ejemplo de aplicación del operador geométrico: en él se desplazan diferentessistemas de coordenadas y combinaciones lógicas de sistemas de coordenadas. Para acla-rar las modificaciones de orientación, en cada sistema de coordenadas la punta de la herra-mienta desplaza primero una pieza en dirección X, luego una pieza en dirección Y y por úl-timo una pieza en dirección Z.

Page 45: Programación experto - Kuka

2 Variables y declaraciones (continuación)

45 de 197ProgExperteBHR5.2 09.03.01 es

DEF GEOM_OP ( );

--------- Sección de declaraciones ---------EXT BAS (BAS_COMMAND :IN,REAL :IN )DECL AXIS HOME;Variable HOME del tipo AXISDECL FRAME MYBASE[2] ;Campo del tipo FRAME;

---------- Inicialización ---------BAS (#INITMOV,0 ) ;Inicialización de velocidades,

;aceleraciones, $BASE, $TOOL, etc.HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 30,A6 0}; Activar Sistemade coordenadas baseBASE = {X 1000,Y 1000,Z 0,A 0,B 0,C 0}REF_POS_X={X 100,Y 0,Z 0,A 0,B 0,C 0} ;Pos. referenciaREF_POS_Y={X 100,Y 100,Z 0,A 0,B 0,C 0}REF_POS_Z={X 100,Y 100,Z 100,A 0,B 0,C 0}; definir sistemas decoordenadas propios

MYBASE[1]={X 200,Y 100,Z 0,A 0,B 0,C 180}MYBASE[2]={X 0,Y 200,Z 250,A 0,B 90,C 0}

------------- Sección principal ------------PTP HOME ; desplazamiento COI; Movimiento con respecto al si-stema de coordenadas $BASEPTP $Base ;desplazarse directamente hasta el origen de$BASE-SCWAIT SEC 2 ;esperar 2 segundosPTP REF_POS_X ;recorrer 100 mm en la dirección xPTP REF_POS_Y ;recorrer 100 mm en la dirección yPTP REF_POS_Z; recorrer 100 mm en la dirección z; movimientocon respecto al $BASE-SC desplazado sobre MYBASE[1]PTP MYBASE[1]WAIT SEC 2PTP MYBASE[1]:REF_POS_XPTP MYBASE[1]:REF_POS_YPTP MYBASE[1]:REF_POS_Z; Movimiento con respecto al $BASE-SCdesplazado sobre MYBASE[2]PTP MYBASE[2]WAIT SEC 2PTP MYBASE[2]:REF_POS_XPTP MYBASE[2]:REF_POS_YPTP MYBASE[2]:REF_POS_Z; Movimiento con respecto al $BASE-SCdesplazado sobre MYBASE[1]:MYBASE[2] $BASE-SCPTP MYBASE[1]:MYBASE[2]WAIT SEC 2PTP MYBASE[1]:MYBASE[2]:REF_POS_XPTP MYBASE[1]:MYBASE[2]:REF_POS_YPTP MYBASE[1]:MYBASE[2]:REF_POS_Z; Movimiento con respecto al$BASE-SC desplazado sobre MYBASE[2]:MYBASE[1] $BASE-SCPTP MYBASE[2]:MYBASE[1]WAIT SEC 2PTP MYBASE[2]:MYBASE[1]:REF_POS_XPTP MYBASE[2]:MYBASE[1]:REF_POS_YPTP MYBASE[2]:MYBASE[1]:REF_POS_ZPTP HOMEEND

Page 46: Programación experto - Kuka

Programación por el experto

46 de 197 ProgExperteBHR5.2 09.03.01 es

2.3.1.3 Operadores de comparación

Con los operadores de comparación que figuran en Tab. 6 se pueden formar expresioneslógicas. Por tanto, el resultado de una comparación es siempre del tipo de datos BOOL, yaque una comparación sólo puede ser verdadera (TRUE) o falsa (FALSE).

Operador Descripción Tipos de datos admisibles

== igual INT, REAL, CHAR, ENUM, BOOL

<> desigual INT, REAL, CHAR, ENUM, BOOL

> mayor que INT, REAL, CHAR, ENUM

< menor que INT, REAL, CHAR, ENUM

>= mayor o igualque

INT, REAL, CHAR, ENUM

<= menor o igualque

INT, REAL, CHAR, ENUM

Tab. 6 Operadores de comparación

Las comparaciones pueden utilizarse en instrucciones de ejecución de programa y el resul-tado de una comparación puede ser asignado a una variable booleana.

Cuando se trata de valores reales, la prueba de la igualdad o desigualdad sólo tienesentido en ciertas circunstancias, ya que debido a errores de redondeo durante elcálculo de los valores a comparar, puede suceder que fórmulas algebraicamente idénti-cas proporcionen valores desiguales (véase 2.2.2).

S Se pueden combinar operandos de INT, REAL, y CHAR.S Un tipo ENUM sólo se debe comparar con el mismo tipo ENUM.S Un tipo BOOL sólo se debe comparar con el mismo tipo BOOL.

Por tanto, la comparación de valores numéricos (INT, REAL) con caracteres (CHAR) es po-sible gracias a que cada carácter ASCII tiene asignado un código ASCII. Este código es unnúmero que determina la secuencia de los caracteres en el juego de caracteres.

Las diferentes constantes de un tipo de enumeración son numeradas, durante su declara-ción, enel ordenenqueaparecen. Los operadores de comparación hacen referencia aestosnúmeros.

Además de las comparaciones simples, también están permitidas las comparacionesmúlti-ples. He aquí algunos ejemplos:

…BOOL A,B…B = 10 < 3 ;B=FALSEA = 10/3 == 3 ;A=TRUEB = ((B == A) <> (10.00001 >= 10)) == TRUE ;B=TRUEA = “F” < “Z” ;A=TRUE…

Page 47: Programación experto - Kuka

2 Variables y declaraciones (continuación)

47 de 197ProgExperteBHR5.2 09.03.01 es

2.3.1.4 Operadores lógicos

Permiten la combinación lógica de variables booleanas, constantes y expresiones lógicassimples formadas mediante los operadores de comparación. Así, por ejemplo, la expresión

(A > 5) AND (A < 12)

solamente tiene el valor TRUE si A está dentro de un rango de 5 a 12. Estas expresionesse utilizan con frecuencia en instrucciones para el control de ejecución (véase el apartadoLEERER MERKER). En Tab. 7 aparece una lista de los operadores lógicos.

Operador Nº de operandos Descripción

NOT 1 Inversión

AND 2 Y lógico

OR 2 O lógico

EXOR 2 O exclusivo

Tab. 7 Operadores lógicos

Los operandos de una combinación lógica deben ser del tipo BOOL; del mismo modo, el re-sultadoes siempredel tipoBOOL. EnTab. 8 aparecen los resultados posibles de las respecti-vas combinaciones lógicas en función del valor de los operandos.

Operación NOT A A AND B A OR B A EXOR B

A = TRUE B = TRUE FALSE TRUE TRUE FALSE

A = TRUE B = FALSE FALSE FALSE TRUE TRUE

A = FALSE B = TRUE TRUE FALSE TRUE TRUE

A = FALSE B = FALSE TRUE FALSE FALSE FALSE

Tab. 8 Tabla de veracidad para combinaciones lógicas

He aquí algunos ejemplos de combinaciones lógicas:

…BOOL A,B,C…A = TRUE ;A=TRUEB = NOT A ;B=FALSEC = (A AND B) OR NOT (B EXOR NOT A) ;C=TRUEA = NOT NOT C ;A=TRUE…

Page 48: Programación experto - Kuka

Programación por el experto

48 de 197 ProgExperteBHR5.2 09.03.01 es

2.3.1.5 Operadores de bits

Con los operadores de bits (véase Tab. 9) se pueden combinar lógicamente números ente-ros, combinando lógicamente entre sí los bits individuales cada número. Los operadores debits combinan bits individuales del mismo modo que los operadores lógicos combinan dosvalores booleanos, si se considera el valor de bit 1 como TRUE y el valor 0 como FALSE.

Así, una combinación lógica Y por bits de los números 5 y 12, proporciona por ejemplo elnúmero 4, una combinación lógica O por bits proporciona el número 13 y una combinaciónO exclusivo por bits, el número 9:

0 1 0 1 = 5

1 1 0 0 = 12

AND 0 1 0 0 = 4

OR 1 1 0 1 = 13

EXOR 1 0 0 1 = 9

La inversión por bits no significa simplemente invertir todos los bits. En lugar de ello, cuandose utiliza B_NOT al operando se le suma 1 y el signo se invierte por ejemplo:

B_NOT 10 = -11B_NOT -10 = 9

Los operadores de bits se utilizan, por ejemplo, para combinar entre sí señales de entrada/salida digitales (véase 5.3).

Operador Nº de operandos Descripción

B_NOT 1 Inversión por bits

B_AND 2 Combinación lógica Y por bits

B_OR 2 Combinación lógica O por bits

B_EXOR 2 Combinación lógica O exclusivo por bits

Tab. 9 Operadores de bits lógicos

Dado que a los caracteres ASCII también se puede acceder a través de los CÓDIGOSASCII de números enteros, el tipo de datos de los operandos puede ser, además deINT, también CHAR. El resultado es siempre del tipo INT.

Ejemplos de uso de operadores de bits:

…INT A…A = 10 B_AND 9 ;A=8A = 10 B_OR 9 ;A=11A = 10 B_EXOR 9 ;A=3A = B_NOT 197 ;A=-198A = B_NOT ’HC5’ ;A=-198A = B_NOT ’B11000101’ ;A=-198A = B_NOT “E” ;A=-70…

Supongamosqueustedhadefinidouna salida digital conunaanchurade8bits. Enese caso,puede acceder a esa salida por medio de la variable INTEGER DIG. Para activar los bits 0,2, 3 y 7 se puede simplemente programar

Page 49: Programación experto - Kuka

2 Variables y declaraciones (continuación)

49 de 197ProgExperteBHR5.2 09.03.01 es

Activar bits:

DIG = ’B10001101’ B_OR DIG

Los demás bits permanecen igual, independientemente del valor que tengan.

Si, por ejemplo, se desea desactivar los bits 1, 2 y 6, es necesario programar

Desactivación de bits:

DIG = ’B10111001’ B_AND DIG

Todos los demás bits permanecen igual.

Con la misma facilidad se puede comprobar, con los operadores de bits, si determinadosbits de la salida se encuentran activados. La expresión

Filtrado de bits:

(’B10000001’ B_AND DIG) == ’B10000001’

es TRUE cuando los bits 0 y 7 están activados; de lo contrario es FALSE.

Para comprobar únicamente si, como mínimo, está activado el bit 0 o el bit 7, tan sólo esnecesario que la combinación lógica Y por bits sea mayor que cero:

(’B10000001’ B_AND DIG) > 0

Page 50: Programación experto - Kuka

Programación por el experto

50 de 197 ProgExperteBHR5.2 09.03.01 es

2.3.1.6 Prioridades de los operadores

Si se utilizan expresiones más complejas con varios operadores, deben tenerse en cuentalas diferentes prioridades de cada uno de ellos (véase Tab. 10), ya que las expresiones indi-viduales se ejecutan siguiendo el orden de sus prioridades.

Prioridad Operador

1 NOT B_NOT

2 * /

3 + -

4 AND B_AND

5 EXOR B_EXOR

6 OR B_OR

7 == <> < > >= <=

Tab. 10 Prioridades de los operadores

En este caso, las normas básicas son:

G Las expresiones entre paréntesis se procesan en primer lugar.

G En las expresiones sin paréntesis, la evaluación sigue el orden de la prioridad.

G Las combinaciones lógicas con operadores de la misma prioridad se realizan de iz-quierda a derecha.

Ejemplos:

…INT A,B

BOOL E,F

…A = 4B = 7E = TRUEF = FALSE

…E = NOT E OR F AND NOT (-3 + A * 2 > B) ;E=FALSEA = 4 + 5 * 3 - B_NOT B / 2 ;A=23B = 7 B_EXOR 3 B_OR 4 B_EXOR 3 B_AND 5 ;B=5F = TRUE == (5 >= B) AND NOT F ;F=TRUE

Page 51: Programación experto - Kuka

2 Variables y declaraciones (continuación)

51 de 197ProgExperteBHR5.2 09.03.01 es

2.3.2 Funciones estándar

Para calcular ciertos problemas matemáticos, en KRL se encuentran predefinidas algunas fun-ciones estándar (véase Tab. 11). Éstas pueden utilizarse directamente sin otra declaración.

Descrip-ción

Función Tipo dedatos

Argumento

Rango de valoresArgumento

Tipo dedatos

Función

Rango devaloresResultado

Cantidad ABS(X) REAL --∞…+∞ REAL 0…+∞Raíz SQRT(X) REAL 0…+∞ REAL 0…+∞Seno SIN(X) REAL --∞…+∞ REAL -1…+1

Coseno COS(X) REAL --∞…+∞ REAL -1…+1

Tangente TAN(X) REAL --∞…+∞* REAL --∞…+∞Arco co-seno

ACOS(x) REAL -1…+1 REAL 0_…180_

Arco tang. ATAN2(Y,X) REAL --∞…+∞ REAL -90_…+90_

* ningún múltiplo impar de 90_, es decir, X¸ (2k-1)*90_, k∈8

Tab. 11 Funciones matemáticas estándar

La función ABS(X) calcula la cantidad del valor X, por ejemplo:

B = -3.4A = 5 * ABS(B) ;A=17.0

SQRT(X) calcula la raíz cuadrada del número X, por ejemplo:

A = SQRT(16.0801) ;A=4.01

Las funciones trigonométricas SIN(X), COS(X) y TAN(X) calculan el seno, el coseno o latangente del ángulo X, por ejemplo:

A = SIN(30) ;A=0.5B = 2*COS(45) ;B=1.41421356C = TAN(45) ;C=1.0

La tangente de ±90_ y de losmúltiplos impares de ±90_ (±270_, ±450_, ±630_…) es infinita.Por lo tanto, intentar calcular uno de estos valores da lugar a un mensaje de error.

ACOS(X) es la función inversa para COS(X):

A = COS(60) ;A=0.5B = ACOS(A) ;B=60

Para el arco seno, la función inversa para SIN(X) no es una función estándar predefinida.Sin embargo, se puede calcular muy fácilmente tomando como base la relación SIN(X) =COS(90_--X):

A = SIN(60) ;A=0.8660254B = 90-ACOS(A) ;B=60

La tangente de un ángulo está definida como cateto opuesto (Y) dividido por el cateto adya-cente (X) en un triángulo rectángulo. Si se conoce la longitud de ambos catetos, se puedecalcular el ángulo entre el cateto adyacente y la hipotenusa con el arco tangente.

Si tomamos ahora un círculo entero, el factor decisivo es el signo que tienen los componen-tes X y Y. Si solamente se tuvieran en cuenta los cocientes, con el arco tangente solamentese podrían calcular ángulos entre 0_ y 180_. Esto sucede también con cualquier calculadorade bolsillo normal: el arco tangente de los valores positivos proporciona un ángulo de entre0_ y 90_; el arco tangente de los valores negativos proporciona un ángulo entre 90_ y 180_.

Page 52: Programación experto - Kuka

Programación por el experto

52 de 197 ProgExperteBHR5.2 09.03.01 es

IndicandoexplícitamenteXeY, a través de su signoquedaunívocamente establecido el cua-drante en el que seencuentra el ángulo (véaseFig. 13). Por tanto, también se puedencalcu-lar ángulos en los cuadrantes III y IV. Por esta razón, para calcular el arco tangente en lafunción ATAN2(Y,X) también se necesitan estos dos datos, por ejemplo:

A = ATAN2(0.5,0.5) ;A=45B = ATAN2(0.5,-0.5) ;B=135C = ATAN2(-0.5,-0.5) ;C=225D = ATAN2(-0.5,0.5) ;D=315

α

0

Y=SIN(α)

X=COS(α)

II

III IV

I

Fig. 13 Utilización de X eY en la función ATAN2(Y,X)

Encontrará más información en el capítulo [Subprogramas y funciones].

Page 53: Programación experto - Kuka

2 Variables y declaraciones (continuación)

53 de 197ProgExperteBHR5.2 09.03.01 es

2.4 Variables del sistema y archivos del sistemaUn requisito importante para poder ejecutar aplicaciones robóticas complejas es una unidadde control que se pueda programar libre y cómodamente.

Para ello, debe poder programarse con facilidad la funcionalidad de la unidad de control delrobot en el lenguaje del robot. Sólo cuando los parámetros de control se pueden integrar enun programa de robot de manera completa y sencilla resulta posible aprovechar toda la fun-cionalidad de una unidad de control de robot. En la KRC..., esto se logra demaneraperfectamediante variables y archivos del sistema predefinidos.

Algunos ejemplos de variables predefinidas son: $POS_ACT (posición actual del robot),$BASE (sistema de coordenadas base) o $VEL.CP (velocidad de trayectoria).

Encontrará un listado de todas las variables predefinidas en la documentación separada[Variables del sistema].

Las variables del sistemaestán totalmente integradas enel concepto de variables de laKRL.Poseen un tipo de datos correspondiente y pueden ser leídas y escritas como cualquier otravariable del programa, siempre y cuando no existan limitaciones a causa del tipo de datos.Laposiciónactual del robot, por ejemplo, solamente sepuede leer, pero no sepuedeescribir.La unidad de control comprueba estas limitaciones.

Siempre que la seguridad lo permita, usted podrá incluso escribir en los datos del sistema.Eso ofrece múltiples posibilidades de diagnóstico, ya que la KCP y el sistema de programa-ción pueden cargar o modificar numerosos datos del sistema.

Algunas variables útiles del sistema con acceso de escritura son, por ejemplo, $TIMER[]y $FLAG[].

Las 16 variables de temporizador $TIMER[1]…$TIMER[16], sirven paramedir los proce-sos temporales y pueden por tanto utilizarse como “cronómetro”. La medición se inicia y separa con las variables del sistema$TIMER_STOP[1]…$TIMER_STOP[16]:

$TIMER_STOP[4] = FALSE

arranca, por ejemplo, el temporizador 4,

$TIMER_STOP[4] = TRUE

vuelve a detener el temporizador 4. Mediante una asignación normal de valores, se puedereiniciar en todo momento la variable de temporizador afectada, por ejemplo:

$TIMER[4] = 0

Si el valor de una variable de temporizador cambia de menos amás, el correspondiente flagse 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ática-mente con 0, los flags$TIMER_FLAG[1]…$TIMER_FLAG[16] se ocupan con FALSE y las variables$TIMER_STOP[1]…$TIMER_STOP[16] se ocupan con TRUE.

La unidad de las variables de temporizador es el milisegundo (ms). La actualización de$TIMER[1]…$TIMER[16] y de $TIMER_FLAG[1]…$TIMER_FLAG[16]tiene lugar cada 12 ms.

Los 1024 flags $FLAG[1]…$FLAG[1024] se utilizan como marcas globales. Estas varia-bles booleanas se predefinen con FALSE. Usted puede ver en cualquier momento sobre lasuperficie de operación el valor actual de los flags mediante el punto de menú “Visualiza-ción”.

Además, en el KR C... hay 32 flags cíclicos $CYCFLAG[1]…$CYCFLAG[32]. Después delarranque de la unidad de control, todos ellos están predefinidos con FALSE.

Page 54: Programación experto - Kuka

Programación por el experto

54 de 197 ProgExperteBHR5.2 09.03.01 es

Los flags sólo son cíclicamente activos en el nivel de robot. Los flags cíclicos son admisiblesen un archivo submit, pero no se produce ninguna evaluación cíclica.

Los flags cíclicos pueden definirse y activarse también en subprogramas, funciones y sub-programas de interrupción.

$CYCFLAG[1]…$CYCFLAG[32] tienen el tipo de datos BOOL. En la asignación a un flagcíclico se puede utilizar cualquier expresión booleana que se desee.

Son admisiblesG las variables de sistema booleanas yG las variables booleanas que han sido declaradas e inicializadas en una lista de datos.

No son admisiblesG las funciones que reenvían un valor booleano.La instrucción

$CYCFLAG[10] = $IN[2] AND $IN[13]

hace, por ejemplo, que la expresión booleana “$IN[2] AND $IN[13]” sea evaluadacíclicamente. Esto quiere decir que cualquier modificación de la entrada 2 o de la entrada13 producirá también un cambio en $CYCFLAG[10], sin importar el lugar enque seencuen-tre el puntero de ejecución del programa una vez ejecutada la expresión anterior.

Todas los flags cíclicos definidos mantienen su validez hasta que se anula la selección deunmódulo o se efectúa una selección de paso con la función reset. Si se alcanza el final delprograma, todas los flags cíclicos permanecerán activos.

Encontrará más información en el capítulo [Tratamiento de interrupciones], apartado[Utilización de banderas (flags) cíclicas].

En general, para las variables predefinidas se seleccionan nombres fáciles de memorizar.Todos comienzan con un símbolo $ y constan de una abreviatura inglesa fácil de recordar.Dado que son tratadas como variables habituales, no es necesario recordar instruccionesextraordinarias ni opciones fuera de lo normal.

Para evitar confusiones, no se debe declarar ninguna variable que comience con elsímbolo $.

Una parte de las variables predefinidas se refiere a la unidad de control completa KR C...(p. ej. $ALARM_STOP para definir la salida de la señal de parada de emergencia del SPS).Otras, por el contrario, solamente son importantes para el robot (por ejemplo $BASE parael sistema de coordenadas base).

En la superficie de operación de KUKA aparece la estación de discos del robot en la que sehanmemorizado los datos relevantes de control (enel directorio “STEU”) y los datos relevan-tes del robot (en el directorio “R1”).

Fig. 14 Diferentes niveles en la superficie de operación KUKA

Page 55: Programación experto - Kuka

2 Variables y declaraciones (continuación)

55 de 197ProgExperteBHR5.2 09.03.01 es

Para la programación de la KR C... se pueden crear archivos de programa y listas de datos.En los archivos de programa hay definiciones de datos e instrucciones ejecutables, las listasde datos solamente contienen definiciones de datos y, en algunos casos, inicializaciones.

Encontrará más información en el capítulo [Listas de datos].

Además de las listas de datos que usted crea durante la programación, en el KR C... existenlistas dedatos definidas por KUKAquese suministran conel software de control. Estas listasde datos se llaman listas de datos predefinidas y contienen principalmente las variables pre-definidas.Usted no podrá borrar ni crear estas listas de datos predefinidas. Se creandurante la instalacióndel software y siempre están disponibles. También los nombres de las listas de datos predefini-das comienzan, al igual que los nombres de los datos predefinidos, con el símbolo $.En la KR C... existen las siguientes listas de datos predefinidas:

G $MACHINE.DATes una lista de datos predefinida que solamente contiene variables de sistema predefi-nidas. Con los datos de lamáquina, seadapta la unidad de control a los robots conecta-dos (cinemática, parámetros de regulación, etc.). Existe una lista $MACHINE.DATtanto en el sistema de control como en el sistema de robot. Usted no podrá crear varia-bles nuevas ni borrar variables ni borrar variables existentes.

Ejemplos:$ALARM_STOP Señal de parada de emergencia (específica de la unidadde

control)$NUM_AX Número de ejes del robot (específico del robot)

G $CUSTOM.DATes una lista de datos que solamente existe enel sistemade control. Contiene datos conlos que puede configurar o parametrizar determinadas funciones de control. Para elprogramador solamente existe la posibilidad de modificar valores de las variables pre-definidas. Usted no podrá crear variables nuevas ni borrar variables ni borrar variablesexistentes.

Ejemplos:$PSER_1 Parámetro de protocolo de la interfaz serial 1$IBUS_ON Conexión de grupos alternativos de interbus

G $CONFIG.DATes una lista de datos que ha sido predefinida por KUKA pero no contiene variables desistemapredefinidas. Existe una$CONFIG.DAT tanto enel nivel de la unidaddecontrolcomo en el nivel de robot. En ella pueden definirse variables, estructuras, canales yseñales que mantienen su validez durante mucho tiempo y son de gran importanciapara muchos programas.La lista de datos del nivel de robot se subdivide en los bloques siguientes:-- BAS

-- AUTOEXT

-- GRIPPER

-- PERCEPT

-- SPOT

-- A10

-- A50

-- A20

-- TOUCHSENSE

-- USER

Page 56: Programación experto - Kuka

Programación por el experto

56 de 197 ProgExperteBHR5.2 09.03.01 es

Las declaraciones globales del usuario deben registrarse obligatoriamente en el blo-que USER. Solamente en él se aceptan las declaraciones en posteriores actualiza-ciones de software.

G $ROBCOR.DATEl archivo $ROBCOR.DAT contiene datos específicos de robot para el modelodinámico del robot. Estos datos son necesarios para la planificación de la trayectoria.Tampoco en este caso se puedencrear variables nuevas ni borrar variables existentes.

Tab. 12 proporciona un resumen de las listas de datos predefinidas.

Lista de datos Sistema Asignación de valor

Lista de datos Unidad decontrol

Robot para mediante

$MACHINE.DAT n n Puesta en servicio KUKA/usuario

$CUSTOM.DAT n Puesta en servicio Usuario/KUKA

$CONFIG.DAT n n Montaje o reequi-pamiento de célu-

las

Usuario/KUKA

$ROBCOR.DAT n Suministro KUKA

Tab. 12 Listas de datos predefinidas en la KR C...

Page 57: Programación experto - Kuka

2 Variables y declaraciones (continuación)

57 de 197ProgExperteBHR5.2 09.03.01 es

2.5 Manipulación de variables de cadenaPara procesar variables de cadena existen las siguientes funciones, que se pueden utilizaren los módulos *.SRC y *.SUB, así como en la visualización de variables.

2.5.1 Longitud de una variable de cadena en la declaración

Esta función averigua la longitud de una variable de cadena de acuerdo con su declaraciónen la sección de declaraciones de un programa.

StrDeclLen(StrVar[])

Como valor de retorno, se emite la longitud averiguada.

Argumento Tipo dedatos

Significado

StrDeclLen INT Longitud de las variables de cadena tal como fuede-clarada en la sección de declaración

StrVar[] CHAR Variable de cadena cuya longitud debe ser averi-guada

Ejemplos

S CHAR $ProName[24] -> StrDeclLen($ProName[]) = 24

S CHAR ab[12] = “xyz” -> StrDeclLen(ab[]) = 12

Puesto que la variable de cadena “StrVar[ ]” es un campo del tipo CHAR, para averiguarla longitud no se permiten caracteres sueltos ni constantes.

2.5.2 Longitud de una variable de cadena después de la inicialización

Esta función averigua la longitud de la secuencia de caracteres de una variable de cadena,tal como fue establecida en la sección de inicialización del programa.

StrLen(StrVar)

Como valor de retorno, se emite la longitud averiguada.

Argumento Tipo dedatos

Significado

StrLen INT Número de caracteres que en este momento sonasignados a la variable de cadena

StrVar CHAR Secuencia de caracteres o variable cuya longitud sedebe averiguar

Ejemplos

S StrLen(”abcd”) -> StrLen = 4

S CHAR a = “y” -> StrLen(a) = 1

S CHAR ab[12] = “xyz” -> StrLen(ab[]) = 3

Page 58: Programación experto - Kuka

Programación por el experto

58 de 197 ProgExperteBHR5.2 09.03.01 es

2.5.3 Borrar el contenido de una variable de cadena

El contenido de una variable de cadena se puede borrar con la instrucción “StrClear”.

StrClear(StrVar[])

Una vez que se ha logrado borrar el contenido de la variable, el valor de retorno es “TRUE”.

Argumento Tipo dedatos

Significado

StrClear BOOL Borra la secuencia de caracteres de la variable decadena respectiva

StrVar[] CHAR Variable cuya secuencia de caracteresdebe serbor-rada

Ejemplo

IF (NOT StrClear($Loop_Msg[]) THENHALT

ENDIF

Como variable de cadena “StrVar[ ]” solamente se permite un campo del tipo CHAR.

2.5.4 Ampliar la variable de cadena

El contenidodeunavariable de cadenasepuedeampliar añadiendootravariable decadena.

StrAdd(StrDest[], StrToAdd[])

Como valor de retorno se emite la suma de las longitudes de las secuencias de caracteresde “StrDest[ ]” y “StrToAdd[ ]”. Si la suma sobrepasa el máximo de 470 caracteres, comovalor de retorno simplemente se emite un “0”.

Argumento Tipo dedatos

Significado

StrAdd INT Amplía la variable de cadena previamente indicada

StrDest[] CHAR La variable de cadena que se desea ampliar

StrToAdd[] CHAR La secuencia de caracteres con la que se amplía

Ejemplo

$Loop_Msg[ ] = “Secuencia1 “StrAdd($Loop_Msg[], “Secuencia2” -> $Loop_Msg[ ] = “Secuencia1Secuencia2”

Puesto que la variable de cadena “StrDest[ ]” es un campo del tipo CHAR, no se permitencaracteres sueltos ni constantes.

Page 59: Programación experto - Kuka

2 Variables y declaraciones (continuación)

59 de 197ProgExperteBHR5.2 09.03.01 es

2.5.5 Búsqueda de variables de cadena

Se puede buscar la variable de cadena mediante una secuencia de caracteres teniendo encuenta la diferencia entre mayúsculas y minúsculas.

StrFind(StartAt, StrVar[], StrFind[], CaseSens)

Como valor de retorno se emite la posición del primer carácter encontrado.

Argumento Tipo de datos Significado

StrFind INT Busca la variable de cadena previamente in-dicada

StartAt INT Inicia la búsqueda a partir de esta posición

StrVar[] CHAR La variable de cadena que se desea buscar

StrFind[] CHAR Ésta es la secuencia de caracteres que el si-stema busca

CaseSens #CASE_SENS

#NOT_CASE_SENS

Diferencia entre mayúsculas y minúsculas

No diferencia entre mayúsculas y minúsculas

Ejemplos

StrFind(1, “ABCDE”, “BC”, #CASE_SENS) -> 2

StrFind(1, “ABCDE”, “bc”, #NOT_CASE_SENS) -> 2

StrFind(1, “ABCDE”, “AC”, #NOT_CASE_SENS) -> 0

StrFind(1, “ABCDE”, “A”, #NOT_CASE_SENS) -> 1

2.5.6 Comparación del contenido de variables de cadena

Se puede comparar el contenido de las secuencias de caracteres de dos variables de ca-dena. También en este caso es posible diferenciar entre mayúsculas y minúsculas.

StrComp(StrComp1[], StrComp2[], CaseSens)

Si ambas secuencias de caracteres coinciden, como valor de retorno se recibe “TRUE”. Sino es así, se recibirá “FALSE”.

Argumento Tipo de datos Significado

StrComp BOOL Compara dos variables de cadena entre sí

StrComp1[] CHAR La variable de cadena se compara con“StrComp2[ ]”

StrComp2[] CHAR La variable de cadena se compara con“StrComp1[ ]”

CaseSens #CASE_SENS

#NOT_CASE_SENS

Diferencia entre mayúsculas y minúsculas

No diferencia entre mayúsculas y minúsculas

Ejemplos

StrComp(”ABCDE”, “ABCDE”, #CASE_SENS) -> TRUE

StrComp(”ABCDE”, “abcde”, #NOT_CASE_SENS) -> TRUE

StrComp(”ABCDE”, “abcde”, #CASE_SENS) -> FALSE

StrComp(”ABCDE”, “acbde”, #NOT_CASE_SENS) -> FALSE

Page 60: Programación experto - Kuka

Programación por el experto

60 de 197 ProgExperteBHR5.2 09.03.01 es

2.5.7 Copiar una variable de cadena

El contenido de una variable de cadena se puede copiar y pegar en otra variable de cadena.

StrCopy(StrDest[], StrSource[])

Si la acción de copiado se realiza correctamente, el valor de retorno será “TRUE”; si no, será“FALSE”.

Argumento Tipo dedatos

Significado

StrAdd BOOL Copia una secuencia de caracteres y la pega en unavariable de cadena previamente indicada

StrDest[] CHAR La secuencia de caracteres es asignada a esta va-riable de cadena

StrSource[] CHAR Esta es la variable de cadena cuyo contenido se co-pia

Ejemplo

$Loop_Msg[ ] = “”StrCopy($Loop_Msg[], “Example” -> $Loop_Msg[ ] = “Example”

Puesto que la variable de cadena “StrDest[ ]” es un campo del tipo CHAR, no se permitencaracteres sueltos ni constantes.

Page 61: Programación experto - Kuka

3 Programación de movimiento

61 de 197ProgExperteBHR5.2 09.03.01 es

3 Programación de movimientoUna de las tareas más importantes de una unidad de control de robot es el movimiento delrobot. El programador controla los movimientos del robot industrial mediante instruccionesde movimiento especiales. Éstas constituyen también la característica principal quediferencia los lenguajes de robot de los lenguajes de programación comunes paraordenador, como el C o el Pascal.

Según el tipo de control, estas instrucciones de movimiento pueden subdividirse eninstrucciones para movimientos simples de un punto a otro punto e instrucciones paramovimientos de trayectoria. Mientras que, en los movimientos de trayectoria, el efector final(por ejemplo, la garra o la herramienta) describe en el espacio una trayectoria geométricaexactamente definida (una recta o un arco de circunferencia), en los movimientos de puntoa punto, la trayectoria de movimiento depende de la cinemática del robot y por ello no sepuede prever con exactitud. Ambos tipos de movimiento tienen en común el hecho de quela programación se realiza desde la posición actual hasta una nueva posición. Por tanto, enuna instrucción de movimiento solamente es necesario, por lo general, indicar la posiciónde destino (excepción: movimientos circulares, véase 3.3.4).

Las coordenadas de las posiciones pueden especificarse textualmente introduciendovalores numéricos, o bienmediante el desplazamiento con el robot y lamemorización de losvalores actuales (aprendizaje). En ambos casos, las indicaciones pueden ser referidas adistintos sistemas de coordenadas.

Otras propiedades de movimiento, tales como las velocidades y aceleraciones, así comoel control de orientación, pueden ser ajustadas mediante variables del sistema. Elposicionamiento aproximado de los puntos intermedios se inicia por medio de parámetrosopcionales en la instrucción demovimiento. Para el posicionamiento aproximado debeestaractivado un procesamiento en avance.

3.1 Utilización de diferentes sistemas de coordenadasPara poder indicar en el espacio la posición u orientación de un punto, se utilizan diferentessistemas de coordenadas. Se puede establecer una diferenciación básica entre sistemasde 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 (paralos ejes de traslación) o los giros (para los ejes de rotación) de cada eje del robot. En un robotde brazo articulado de 6 ejes, deben indicarse los 6 ángulos de articulación del robot, paraespecificar unívocamente la posición y la orientación (véase Fig. 15).

Fig. 15 Sistema de coordenadas específico de los ejes de un robot de brazoarticulado de 6 ejes

Page 62: Programación experto - Kuka

Programación por el experto

62 de 197 ProgExperteBHR5.2 09.03.01 es

La descripción de una posición específica de un eje se efectúa en la KR C1mediante el tipode estructura predefinida AXIS, cuyos componentes tienen el significado de ángulos o delongitudes dependiendo del tipo de eje.

Encontrará más información en el capítulo [Variables y declaraciones] apartado[Estructuras].

Las posiciones específicas de los ejes sólo se pueden alcanzar utilizando pasos demovimiento PTP. Si un movimiento de trayectoria se programa con una posición de robotespecífica de un eje, se producirá un fallo.

Transformación de las coordenadas

Puesto que el ser humano, como programador, piensa en coordenadas cartesianas, nosuele ser práctico programar en el sistema de coordenadas específicas de los ejes. Launidad de control ofrece por ello varios sistemas cartesianos para la programación cuyascoordenadas se transforman automáticamente en el sistema específico del eje antes dequese ejecute el movimiento (véase Fig. 16).

x

A1, A2, A3, A4, A5, A6

X, Y, Z, A, B, C (, S, T)

Transformación de retroceso

Transformación de avance

Fig. 16 Transformación de las coordenadas

Sistema de coordenadas cartesiano

En un sistema de coordenadas cartesiano, cada uno de los 3 ejes de coordenadas (X, Y y Z)es perpendicular a los otros dos y todos juntos forman, en este orden, un sistema rectangular.

Enel sistemadecoordenadas cartesiano, la posicióndeunpunto enel espacio quedaunívo-camente establecida mediante la indicación de las coordenadas X, Y y Z. Estas coordena-das se obtienen de las distancias translatorias de cada valor de coordenadas con respectoal origen de coordenadas.

Page 63: Programación experto - Kuka

3 Programación de movimiento (continuación)

63 de 197ProgExperteBHR5.2 09.03.01 es

P

Y

X

P(X1=5, Y1=2, Z1=4)

Z1

Z

Y1

X1

Fig. 17 Descripción translatoria de la posición de un punto

Para poder alcanzar cualquier punto en el espacio con la orientación que se desee, ademásde los tres valores translatorios se necesitan tres datos de rotación:

Los ángulos denominados en el KR C1 como A, B y C giran sobre los ejes de coordenadasZ, Y y X. El orden de las rotaciones debe mantenerse:

1. Giro sobre el eje Z formando el ángulo A

2. Giro sobre el nuevo eje Y formando el ángulo B

3. Giro sobre el nuevo eje X formando el ángulo C

Este orden de giro corresponde a los ángulos roll--pitch--yaw (rodar--cabecear--oscilar) quese manejan en aeronáutica. El ángulo C corresponde a “rodar”, el ángulo B a “cabecear” yel ángulo A a “oscilar” (véase Fig. 18).

Z ’

X

Y

X

Y

ZZ’ Y’

X’

X’’

Y

Z

A B C

’’

’’

’’

’’’

’’’

AB

C

Fig. 18 Descripción de la orientación de un punto mediante rotaciones

Con las translaciones X, Y y Z, y con las rotaciones A, B y C se pueden describirunívocamente la posición y la orientación de un punto en el espacio. En la KR C1, esto selogra mediante la estructura predefinida FRAME.

Page 64: Programación experto - Kuka

Programación por el experto

64 de 197 ProgExperteBHR5.2 09.03.01 es

Para los movimientos de trayectoria, la indicación de las coordenadas FRAME es siempreunívoca y suficiente. Sin embargo, en el desplazamiento punto a punto, con determinadascinemáticas de robots (por ejemplo, un brazo articulado de 6 ejes) se puede alcanzar unmismo punto (posición y orientación) en el espacio con varias posiciones de eje. Con losotros dos datos “S” y “T”, puede eliminarse esta ambigüedad. En la KR C1 está prevista laestructura POS para un frame ampliado mediante “S” y “T”.

Encontrará más información en el capítulo [Variables y declaraciones] apartado[Estructuras] e [Instrucciones de movimiento].

En la KR C1 se encuentran predefinidos los siguientes sistemas de coordenadas cartesianos:

Sistema de coordenadas Variable delsistema

Estado

Sistema de coordenadas universales $WORLD protegido contraescritura

Sistema de coordenadas del robot $ROBROOT protegido contraescritura (modifi-cable enR1\MADA\$MA-SCHINE.DAT)

Sistema de coordenadas de la herramienta $TOOL describible

Sistema de coordenadas base (de la pieza) $BASE describible

Tab. 1 Sistemas de coordenadas predefinidos

z

x

y

z

x

y

z

x

y

z

x

y

SC universalSC del robot

SC de laherramienta

SCbásico

Fig. 19 Sistemas de coordenadas cartesianos para robots

Sistema de coordenadas universalesEl sistema de coordenadas universales es un sistema de coordenadas fijo en un lugar (= nose desplaza con elmovimiento del robot) que sirve como sistema de coordenadas de origenpara un sistema de robot (robot, útil de recepción de una pieza o herramienta). Así pues,representa el sistema de referencia tanto para el sistema de robot como también para losdispositivos periféricos de la célula.

Sistema de coordenadas del robotEste sistema de coordenadas se encuentra en el pie del robot y sirve como sistema de coor-denadas de referencia para la estructuramecánica del robot. También tiene como referenciael sistema de coordenadas universales y, en el estado de suministro, es idéntico a éste. Con$ROBROOT puede definirse un corrimiento del robot hacia $WORLD.

Page 65: Programación experto - Kuka

3 Programación de movimiento (continuación)

65 de 197ProgExperteBHR5.2 09.03.01 es

Sistema de coordenadas de la herramientaEl sistema de coordenadas de la herramienta tiene su origen en la punta de la herramienta.La orientación se puede seleccionar de modo que su eje X sea idéntico a la dirección deavance de la herramienta y apunte hacia fuera de la misma. Con el movimiento de la puntade la herramienta, se mueve también el sistema de coordenadas de la herramienta.

X

Z

Y

En el estado de suministro, el sistemade coordenadas de la herramienta seencuentra en la brida del robot (el ejeZ es idéntico al eje 6). Se refiere, através de la transformación, alsistema de coordenadas del robot.

Si se efectúa un cambio de herramienta, después de la nuevamedición sepuede seguir utili-zando el programa original, ya que el ordenador conoce las coordenadas de la punta de laherramienta.

Sistema de coordenadas baseEl sistema de coordenadas base se utiliza como sistema de referencia para la descripciónde la posición de la pieza. La programación del robot se efectúa en el sistema de coordena-das base. Como sistema de coordenadas de referencia, utiliza el sistema de coordenadasuniversal. En el estado de suministro es $BASE=$WORLD.Modificando $BASE se pueden, por ejemplo, procesar varias piezas iguales en diferenteslugares con el mismo programa.

Interpolación referida a la basePara la interpolación de la trayectoria de movimiento, la unidad de control del robot calcula,en una situación normal (es decir, con la herramienta en la brida del robot) la posición actual($POS_ACT) con referencia al sistema de coordenadas $BASE (véase Fig. 20).

$BASE

$TOOL

$POS_ACT

x

y

z

z

x

y

$WORLD

$ROBROOT

z

y

x

x

y

z

Fig. 20 Cadena cinemática para la interpolación referida a la base

Page 66: Programación experto - Kuka

Programación por el experto

66 de 197 ProgExperteBHR5.2 09.03.01 es

Sin embargo, en la práctica industrial, cada vez es más habitual fijar la herramienta en elespacio (por ejemplo, unaantorchade soldadura) y guiar la pieza a lo largode la herramientafija mediante una garra adecuada.

La variable $TOOL siempre tiene como referencia la herramienta o la pieza que seencuentra en el robot. Por el contrario, la variable $BASE siempre tiene como referenciauna herramienta o una pieza externa.

Interpolación referida a la garra

Puesto que ahora la pieza y la herramienta han intercambiado sus posiciones pero el movi-miento debe seguir teniendo como referencia la pieza, la interpolación de la trayectoria delmovimiento debe efectuarse mediante el sistema de coordenadas $TOOL. Esta asignacióndel tipo de interpolación se efectúa de forma implícita cuando se utiliza un TCP normal oexterno. Con la variable del sistema $IPO_MODE usted puede definir este tipo de interpola-ción. La línea de programa

$IPO_MODE = #TCP

permite una interpolación referida a la garra en el sistema de coordenadas $TOOL. Ahora,la posición actual $POS_ACT se calcula por tanto con referencia a $TOOL (véase Fig. 21).Con

$IPO_MODE = #BASE

usted establecede nuevo, como tipode interpolación, la interpolación referida a la baseparael caso normal. Éste es también el ajuste estándar al arrancar la unidad de control.

z

x$BASE

$TOOL

$POS_ACT

y

x

y

z

y

x

z z

x

y

$WORLD

$ROBROOT

Fig. 21 Cadena cinemática para la interpolación referida a la garra

Encontrará un ejemplo de corrimiento del sistema de coordenadas en el capítulo[Variables y declaraciones], apartado [Operador geométrico].

Page 67: Programación experto - Kuka

3 Programación de movimiento (continuación)

67 de 197ProgExperteBHR5.2 09.03.01 es

3.2 Movimientos punto a punto (PTP)

3.2.1 General (PTP sincrónico)

PTP

El movimiento punto a punto (PTP) es la manera más rápida de mover la punta de laherramienta (Tool Center Point: TCP) desde la posición actual hasta unaposición dedestinoprogramada. Launidadde control calcula para ello las diferencias deángulo necesarias paracada eje.

Mediante la variable del sistema

G $VEL_AXIS[número de eje] se programan las velocidades máximas específicasdel eje,

y con

G $ACC_AXIS[número de eje] las aceleraciones máximas específicas del eje.

Todos los datos se indican en porcentajes, tomando como referencia un valor máximo defi-nido en los datos de lamáquina. Si estas dos variables del sistema nohan sidoprogramadaspara todos los ejes, al ejecutarse el programa se emite el mensaje de fallo correspondiente.

Los movimientos los distintos ejes se sincronizan (PTP sincrónico) de forma que todos losejes comiencen y terminen elmovimiento al mismo tiempo. Esto significa que sólo el eje conel recorrido más largo, el llamado eje directriz, se desplaza con el valor límite de aceleracióny velocidad programado. Todos los demás ejes semueven solamente con las aceleracionesy velocidades necesarias para alcanzar el punto final del movimiento en el mismo instante,independientemente de los valores programados en $VEL_AXIS[Nr] y $ACC_AXIS[Nr].Si está activada la adaptación de aceleración o la característica de velocidad superior($ADAP_ACC=#STEP1, $OPT_MOVE=#STEP1) los ejes se desplazan sincrónicamente ensus fases, es decir, todos los ejes se encuentran al mismo tiempo en la fase de aceleración,de movimiento constante y de retardo.

Puesto que, en general, en losmovimientos PTP con coordenadas de destino cartesianasno se conoce cuál es el eje directriz, en esos casos suele resultar conveniente equipararlos valores de aceleración y de velocidad para todos los ejes.

Los movimientos con sincronización en el tiempo disminuyen la carga mecánica del robot,ya que reducen los momentos de los motores y reductores de todos aquellos ejes contrayectos de desplazamiento más cortos.Los movimientos con sincronización de fases generan (además) una trayectoria demovimiento que siempre discurre igual en el espacio, independientemente de la velocidady aceleración programadas.

Encontrará más información en el capítulo [Programación de movimiento], apartado[Movimientos con posicionamiento aproximado].

Page 68: Programación experto - Kuka

Programación por el experto

68 de 197 ProgExperteBHR5.2 09.03.01 es

3.2.2 Perfil de marcha más elevado

Como opción predeterminada, para los movimientos PTP se utiliza el perfil de marcha máselevado. Con este modelo, en los pasos PTP individuales y en los pasos PTP conposicionamiento aproximado, el desplazamiento resulta óptimo en cuanto al tiempodesde el punto inicial hasta el punto de destino. Esto significa que, con los reductores ymotores disponibles, el desplazamiento no puede ser más rápido. Los momentos admitidosse aprovechan óptimamente en cada punto de la trayectoria, especialmente en la fase develocidad constante. La velocidad siempre se adapta de modo que no se sobrepasen losmomentos.

Unamodificación de los valores de velocidad o de aceleración produce solamente (tambiénen los pasos de posicionamiento aproximado) un cambio del perfil de velocidad en la trayec-toria. La curva geométrica en el espacio no sufre ningún cambio.

Las asignaciones de velocidad y los valores límites de aceleración (indicados en porcenta-jes) se pueden definir individualmente para cada eje. No obstante, este valor límite no reper-cute directamente sobre la aceleración, sino sobre el momento de aceleración del eje. Esdecir, un valor de aceleración del eje de 50% no reduce necesariamente la aceleración a lamitad.

3.2.3 Instrucciones de movimiento

El siguiente ejemplo de programa, PTP_AXIS.SRC, representa en principio el programaKRL ejecutable más pequeño:

DEF PTP_AXIS() ;el nombre del programa es PTP_AXIS

$VEL_AXIS[1]=100 ;especificación de las velocidades de eje$VEL_AXIS[2]=100$VEL_AXIS[3]=100$VEL_AXIS[4]=100$VEL_AXIS[5]=100$VEL_AXIS[6]=100

$ACC_AXIS[1]=100 ;especificación de las aceleraciones de eje$ACC_AXIS[2]=100$ACC_AXIS[3]=100$ACC_AXIS[4]=100$ACC_AXIS[5]=100$ACC_AXIS[6]=100

PTP {AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

END

En primer lugar, en este programa se especifican las velocidades y aceleraciones de losejes. Antes de que pueda ejecutarse un movimiento punto a punto, deben haberse efec-tuado estas asignaciones.

A continuación, el robot coloca cada eje en las posiciones angulares especificadas en la es-tructura AXIS. Por ejemplo eje 1 en 0_, eje 2 en --90_, eje 3 en 90_, eje 4 en 0_, eje 5 en 0_y eje 6 en 0_.

Page 69: Programación experto - Kuka

3 Programación de movimiento (continuación)

69 de 197ProgExperteBHR5.2 09.03.01 es

Fig. 22 Posición mecánica cero

Page 70: Programación experto - Kuka

Programación por el experto

70 de 197 ProgExperteBHR5.2 09.03.01 es

Si al indicar las coordenadas de los ejes se omiten componentes individuales, el robot sola-mente desplaza los ejes indicados. Los otros ejes no cambian de posición. Por lo tanto, con

PTP {A3 45}

sólo se coloca el eje 3 en 45_. Es preciso tener en cuenta que las indicaciones de ángulosen la instrucción PTP son valores absolutos. El robot no gira el eje otros 45_, sino que sedesplaza hasta la posición absoluta 45_ del eje.

Para el desplazamiento relativo se utiliza la instrucción PTP_REL. Así pues, para girar porejemplo los ejes 1 y 4 35_ cada uno, tan sólo es necesario programar:

PTP_REL {A1 35,A4 35}

PTP {A3 45}

PTP_REL {A3 45}

A3 = 0_

A3 = 90_

Fig. 23 Diferencia entre las coordenadas absolutas y relativas específicas delos ejes

Para el desplazamiento relativo debe, no obstante, tenerse en cuenta quenoes fácil reanudar unmovimiento detenidodurante la ejecuciónde unpro-grama. Después de un nuevo arranque y de una nueva selección de pasoo un nuevo cambio del modo de ejecución del programa, la unidad de con-trol no puede tener en cuenta el recorrido ya realizado y recorre de nuevotoda la distancia relativa programada, lo que en definitiva lleva a un puntofinal incorrecto.

Page 71: Programación experto - Kuka

3 Programación de movimiento (continuación)

71 de 197ProgExperteBHR5.2 09.03.01 es

Sin embargo, el desplazamiento en las coordenadas específicas del eje no suele ser prác-tico, ya que las personas piensan y actúan en el espacio cartesiano. Para ello se utiliza laindicación de las coordenadas cartesianas mediante una estructura POS como la que apa-rece en el siguiente ejemplo:

DEF PTP_POS()

$BASE = $WORLD ;Definición del sistema de coordenadas base$TOOL = $NULLFRAME ;Definición del sistema de coordenadas de laherramienta

$VEL_AXIS[1]=100 ;Especificación de las velocidades de eje$VEL_AXIS[2]=100$VEL_AXIS[3]=100$VEL_AXIS[4]=100$VEL_AXIS[5]=100$VEL_AXIS[6]=100

$ACC_AXIS[1]=100 ;Especificación de las aceleraciones de eje$ACC_AXIS[2]=100$ACC_AXIS[3]=100$ACC_AXIS[4]=100$ACC_AXIS[5]=100$ACC_AXIS[6]=100

PTP {POS:X 1025,Y 0,Z 1480,A 0,B 90,C 0,S ’B 010’,T ’B 000010’}

END

Ahora debe recordarse que, para indicar el punto final en las coordenadas cartesianas,además de los datos de velocidad y aceleración es obligatorio definir el sistema decoordenadas base y el sistema de coordenadas de la herramienta.

Sistemas de coordenadas

En nuestro caso, el sistema de coordenadas base ($BASE) fue igualado con el sistema decoordenadas universal ($WORLD) que de forma estándar se encuentra en el pie del robot($ROBROOT). El sistema de coordenadas de la herramienta ($TOOL) fue ocupado con elframe cero ($NULLFRAME = {FRAME: X 0, Y 0, Z 0,A 0,B 0,C 0}), lo quesignifica que todos los datos hacen referencia al punto central de la brida. Así pues, el puntocentral de la herramienta (Tool Center Point: TCP) se encuentra, por así decirlo, en el puntocentral de la brida. Si hay una herramienta montada sobre la brida, los valores se deben co-rregir como corresponda. Para ello deberá consultarse la documentación sobremedición deherramientas.

Con la instrucción PTP mostrada arriba, el robot se desplaza ahora de tal modo que, en elpunto final del movimiento, el TCP se desplaza 1025 mm en dirección X, 0 mm en direc-ción Y, y 1480 mm en dirección Z desde el pie del robot. Los datos “A”, “B” y “C” definen laorientación del TCP. El estado “S” y el giro “T” definen la posición de los ejes.

Si prueba el ejemplo en un robot KR 6, obtendrá el mismo resultado que en el ejemplo ante-rior. El robot se desplaza a la posición mecánica cero. Las dos instrucciones son idénticaspara este tipo de robot.

También al indicar el punto final en las coordenadas cartesianas se pueden volver a omitircomponentes individuales de los datos de geometría. La instrucción

PTP {Z 1300, B 180}

produce por lo tanto un movimiento del TCP en la dirección del eje Z hasta la posición abso-luta 1300 mm y un “cabeceo” del TCP de 180_.

Page 72: Programación experto - Kuka

Programación por el experto

72 de 197 ProgExperteBHR5.2 09.03.01 es

Para el desplazamiento relativo del robot, se utiliza nuevamente la instrucción PTP_REL.Con

PTP_REL {Z 180, B -90}

se puede por tanto devolver el robot a su posición original. Una vezmás, es preciso recordarqueno sedebenvolver a seleccionar losmovimientos relativos después de una interrupción.

200

150

50

100

PTP {X 50, Y 50} PTP_REL {X 50, Y 50}

ZBASE

YBASE

XBASE20015010050

Fig. 24 Diferencia entre las coordenadas cartesianas absolutas y relativas

Con las coordenadas cartesianas sepuedeejecutar, directamente en la instrucción demo-vimiento, una combinación lógica de frames mediante el operador geométrico. De estemodo puede iniciarse, por ejemplo, un desplazamiento hacia el sistema de coordenadasbase sin modificar la variable $BASE.

El corrimiento de la base mediante el operador de dos puntos tiene además unaventaja decisiva frente a la opción de ocupar de nuevo $BASE:

El corrimiento se efectúa en el paso demovimiento, mientras que una ocupaciónde $BASE debe realizarse en un momento anterior al paso de movimiento. Deeste modo, siempre está seleccionada la base correcta para el movimiento: tam-bién en el caso de una parada del programa y la posterior selección de paso.Una nueva ocupación múltiple de $BASE, como en la secuencia siguiente,

…$BASE = $WORLD…PTP POS_1$BASE = {X 100,Y -200,Z 1000,A 0, B 180,C 45)PTP POS_2

…conduciría, por el contrario, una vez cancelado el paso de movimiento POS_2 y seleccio-nado de nuevo el paso POS_1, a un punto de destino incorrecto, ya que ahora también seutilizaría la nueva base para el paso de movimiento POS_1. Lo mismo ocurre tambiéncuando se produce una parada del primer paso de movimiento si se encuentra activado unprocesamiento en avance correspondiente.

Encontrará más información en el capítulo [Programación de movimiento], apartado[Procesamiento en avance].

Por este motivo se debe, siempre que sea posible, ocupar $BASE y $TOOL una sola vez,por ejemplo en la sección de inicialización del programa. Pueden llevarse a cabo otroscorrimientos con el operador geométrico.

Page 73: Programación experto - Kuka

3 Programación de movimiento (continuación)

73 de 197ProgExperteBHR5.2 09.03.01 es

En caso de un TouchUp con el paquete básico que constituye el suministro estándar,$BASE y $TOOL se guardan automáticamente para cada punto en la lista de datos.

Enel ejemplo siguiente, en la segunda instrucción PTP se efectúaun corrimiento de las coor-denadas del punto de destino de 300mm en la dirección X y --100 mm en la dirección Y, asícomo un giro de 90_ sobre el eje Z.

DEF FR_VERS ( )

;--------- Sección de declaración ---------EXT BAS (BAS_COMMAND :IN,REAL :IN )DECL AXIS HOME ;Variable HOME del tipo AXISDECL FRAME BASE1 ;Variable BASE1 del tipo FRAME

;---------- Inicialización ---------BAS (#INITMOV,0 ) ;Inicialización de velocidades,

;aceleraciones, $BASE, $TOOL, etc.HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}BASE1={FRAME: X 300,Y -100,Z 0,A 90,B 0,C 0}

;------------- Sección principal------------PTP HOME ; desplazamiento COI; Movimiento respecto al sistema de coordenadas $BASEPTP {POS: X 540,Y 630,Z 1500,A 0,B 90,C 0,S 2,T 35}; Movimiento respecto al SC $BASE corrido en BASIS1PTP BASE1:{POS: X 540,Y 630,Z 1500,A 0,B 90,C 0,S 2,T 35}PTP HOMEEND

En este ejemplo, además, las declaraciones necesarias de las velocidades, ace-leraciones, así como de los sistemas de coordenadas $BASE y $TOOL ya no sellevana cabo “manualmente”. En lugar deello, se utiliza el paquete baseestándar“BAS.SRC”. Para ello, primero hay que hacer que el programa lo reconozca conla instrucción EXT.

Con la instrucción de inicialización

BAS (#INITMOV, 0)

todas las variables de sistema importantes se ocupan finalmente con valores estándar.

Encontrará más información en el capítulo [Subprogramas y funciones]apartado [Declaraciones].

Page 74: Programación experto - Kuka

Programación por el experto

74 de 197 ProgExperteBHR5.2 09.03.01 es

COI

Antes poder procesar unprogramaes necesario generar la coincidencia depaso (COI), es decir,la coincidencia de la posición actual del robot con la posición programada. Puesto que el movi-miento de coincidencia de paso no representa ningún movimiento programado y verificado,debe realizarse con la tecla de arranque (función de hombre muerto) pulsada y con velocidadautomática reducida. Una vez alcanzada la trayectoria programada, el movimiento se detieney el programa puede continuar cuando se vuelve a pulsar la tecla de arranque.

En el modo de servicio “Automático externo” no se efectúa ningún des-plazamiento de coincidencia COI.

Por ello, como primera instrucción de movimiento, se recomienda un recorrido hasta laposición “Home” en el que el robot se desplaza hasta una posición inicial no crítica yunívocamente definida donde también se genera la coincidencia de paso. También alfinal del programa debe devolverse el robot a esta posición.

S y T

En una indicación POS, los datos “S” y “T” permiten seleccionar de entre varias posicionesde robot posibles para unmismo punto en el espacio (debido a las singularidades de la cine-mática) una posición muy precisa y unívocamente definida.

Por ello, en la primera instrucción demovimiento, si se utilizan coordenadas cartesianas esmuy importante programar también “Status” y “Turn” para definir una posición inicial uní-voca. Comopara losmovimientos de trayectoria (véase3.3) no se tienenen cuenta los datos“S” y “T”, la primera instrucción de movimiento de un programa (desplazamiento a Home)debe ser en todos los casos una instrucción completaPTP con la indicación “Status” (estado)y “Turn” (giro) (o una instrucción PTP completa con coordenadas de eje).

En las instrucciones PTP subsiguientes pueden omitirse los datos “S” y “T” siempre que nosea necesaria una posición determinada del eje (por ejemplo, porque hay obstáculos). Elrobot mantiene el valor de S antiguo y selecciona el nuevo valor T, que da como resultadoel recorrido axial más corto permitido. Este recorrido también es siempre el mismo en lasdistintas ejecuciones de la programación debido a la programación única de “S” y “T” en elprimer paso PTP.

Tanto Status (estado) como Turn (giro) requieren datos enteros (integer) que debenindicarse en forma binaria para que cumplan su función.

TURN

Ampliando una indicación de posición cartesiana con el valor Turn (giro) se pueden ademásalcanzar ángulos de eje superiores a +180_ o inferiores a --180_ sin una estrategia dedesplazamiento especial (por ejemplo, puntos intermedios). En los ejes rotatorios, los bitsindividuales determinan el signo que precede al valor del eje del siguiente modo:

Bit x = 0: Ángulo del eje x ≥ 0_Bit x = 1: Ángulo del eje x < 0_

Valor Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

0 A6 ≥ 0_ A5 ≥ 0_ A4 ≥ 0_ A3 ≥ 0_ A2 ≥ 0_ A1 ≥ 0_

1 A6 < 0_ A5 < 0_ A4 < 0_ A3 < 0_ A2 < 0_ A1 < 0_

Tab. 2 Significado de los bits de Turn (giro)

Una indicación T ’B 10011’, significa por tanto que los ángulos de los ejes 1, 2 y 5 sonnegativos, y que los ángulos de los ejes 3, 4 y 6 son por el contrario positivos (puedenomitirse todos los bits de 0 con un valor más alto).

Page 75: Programación experto - Kuka

3 Programación de movimiento (continuación)

75 de 197ProgExperteBHR5.2 09.03.01 es

Estado

Con el estado S se manejan las ambigüedades en la posición del eje (véase Fig. 25). Porlo tanto, S depende de la respectiva cinemática del robot.

Eje 2Eje 3

Eje 5

Eje 4 Eje 6

Eje 5

Ambigüedades

Fig. 25 Ejemplos de cinemáticas de robot ambiguas

Encontrará información más detallada sobre ambigüedades en la cinemática del robot enel apartado [Singularidades].

El significado de cada uno de los bits es el siguiente:

Bit 0: Posición del punto de la raíz de lamuñeca (área debase/área por encimade la cabeza)

Bit 1: Configuración del brazoBit 2: Configuración de la muñeca

Para los robots de brazo articulado de 6 ejes, los bits se definen según la tabla siguiente:

Valor Bit 2 Bit 1 Bit 0

0 0_ ≤ A5 < 180_

A5 < --180_

A3 < φ

(φ depende del tipo de robot)

Área de base

1 --180_ ≤ A5 < 0_

A5 ≥ 180_

A3 ≥ φ

(φ depende del tipo de robot)

Área por encima de lacabeza

Tab. 3 Bits de Status (estado) para los robots de brazo articulado de 6 ejes

Gráficamente, cabe imaginarse el área de base / por encima de la cabeza de forma carte-siana. Para ello, se definen los conceptos siguientes:

Punto de la raíz de la muñeca: Punto de intersección de los ejes de la muñeca

Sistema de coordenadas A1: Si el eje 1 está en 0_, entonces es idéntico al sistema decoordenadas $ROBROOT. En los valores distintos de 0_, semueve junto con el eje 1.

Así pues, el área de base/por encima de la cabeza, puede definirse del modo siguiente:

G Si el valor x del punto de la raíz de lamuñeca, expresadoen el sistema decoordenadasA1, es positivo, el robot se encuentra en el área de base.

G Si el valor x del punto de la raíz de lamuñeca, expresadoen el sistema decoordenadasA1, es negativo, el robot se encuentra en el área por encima la cabeza.

Page 76: Programación experto - Kuka

Programación por el experto

76 de 197 ProgExperteBHR5.2 09.03.01 es

El bit 1 indica la posición del brazo. La activación del bit depende del tipo de robot. En losrobots cuyos ejes 3 y 4 se interseccionan, se aplica lo siguiente: el bit 1 tiene el valor 0,cuando el eje 3 es < 0_; de lo contrario, el bit 1 = 1. En los robots con un offset entre el eje 3y el eje 4 (por ejemplo, los KR 30, véase Fig. 26), la posición angular en la cambia el valordel bit 1 depende de la magnitud de este offset.

Offset

Fig. 26 Offset entre los ejes 3 y 4 en un KR 30

LaFig. 27muestra la repercusiónde los bits deStatus (estado) en la configuración del robot.El mismo punto en el espacio ha sido alcanzado con cuatro posiciones de robot diferentes.En la primera posición, el robot se encuentra en la posición de salida; el eje 5 tiene un valorde aprox. 45_ y el eje 3 de aprox. 80_.

En la segunda configuración del robot apenas puede apreciarse alguna diferencia. Única-mente se ha girado 180_ el eje 4 y los otros ejes se han corregido en consonancia con estegiro. Mientras que la configuración del brazo ha permanecido igual, la configuración de lamuñeca ha cambiado: ahora el eje 5 tiene aprox. –45_. El bit de estado 2 es por lo tanto 1.

Ahora, al pasar de la posición 2 a la 3 cambia la configuración del brazo. El eje 3 gira hastauna posición angular de aprox. --50_; el bit de estado 1 asume el valor 0.

Por último, en la cuarta posición, el robot se encuentra en la posición por encima la ca-beza. Para lograrlo, lo decisivo ha sido girar el eje 1 180_. El bit de estado 0 se pone a 1.

Page 77: Programación experto - Kuka

3 Programación de movimiento (continuación)

77 de 197ProgExperteBHR5.2 09.03.01 es

Fig. 27 Efectos de los bits de estado (Status) sobre la posición del robot

Page 78: Programación experto - Kuka

Programación por el experto

78 de 197 ProgExperteBHR5.2 09.03.01 es

3.2.3.1 Singularidades

La cinemática estándar de KUKA diferencia 3 posiciones singulares distintas. Éstas son: lasingularidad por encima de la cabeza, la posición extendida y la singularidad de los ejes dela muñeca. Una singularidad se caracteriza, entre otras cosas, por no permitir una transfor-mación de retroceso (conversión de las coordenadas cartesianas en valores específicos delos ejes) unívoca aunque se hayan preestablecido los datos Status y Turn. Las pequeñasalteraciones cartesianas cercanas a una singularidad producen grandes cambios en el án-gulo de los ejes.

Singularidad por encima de la cabeza (posición α1)

En este caso, el punto de raíz de lamuñeca, cuyaposición radica en el punto de intersecciónde los ejes A4, A5 y A6, se encuentra en el eje 1.

Punto de la raíz de la muñeca

La posición del eje 1 no se puede establecer unívocamente mediante la transformación deretroceso y puede por tanto asumir cualquier valor.

Si el punto de destino de un paso de movimiento PTP está en la singularidad por encimade la cabeza, la unidad de control ofrece las siguientes posibilidades:

G El eje 1 se desplaza durante el movimiento PTP a “0” grados (ajuste estándar);

G El ángulo axial del eje 1 permanece igual tanto para el punto inicial como para el dedestino.

Para ello existe la variable del sistema “$SINGUL_POS[1]”, que sepuedemodificareditandolos datos de máquina.

Encontrará más información sobre “$SINGUL_POS[1]” en la documentación indepen-diente [Variables del sistema].

Page 79: Programación experto - Kuka

3 Programación de movimiento (continuación)

79 de 197ProgExperteBHR5.2 09.03.01 es

Posición extendida (posición α2)

La prolongación del trayecto A2--A3 corta el punto de la raíz de la muñeca.

Punto de la raízde la muñeca

Aquí, el robot se encuentra enel límite de suárea de trabajo. La transformación de retrocesoproporciona un ángulo de eje unívoco, pero las pequeñas velocidades cartesianas dan lugara grandes velocidades axiales en los ejes 2 y 3.

Singularidad de los ejes de muñeca (posición α5)

En este caso, los ejes 4 y 6 se encuentran paralelos. La posición de estos dos ejes no sepuede determinar unívocamente mediante una transformación de retroceso, ya que hay unnúmero indeterminadodeposiciones para los ejesA4 yA6 en las que las sumasde los ángu-los de eje son idénticas.

Page 80: Programación experto - Kuka

Programación por el experto

80 de 197 ProgExperteBHR5.2 09.03.01 es

¦0,01812_

Punto de la raízde la muñeca

Si el punto de destino de un paso de movimiento PTP está dentro de esta singularidad(--0,01812_± A5± +0,01812_), la unidad de control ofrece las siguientes posibilidades deayuda:

G El eje 4 se desplaza durante el movimiento PTP a “0” grados (ajuste estándar);

G El ángulo axial del eje 4 permanece igual tanto para el punto inicial como para el dedestino.

Para ello existe la variable del sistema “$SINGUL_POS[3]”, que sepuedemodificareditandolos datos de máquina.

Encontrará más información sobre “$SINGUL_POS[3]” en la documentación indepen-diente [Variables del sistema].

En casos excepcionales puede que no sea posible alcanzar exactamente un punto fuerade la zona de singularidad con los mismos ángulos de eje que aprendió originalmente.

3.3 Movimientos de trayectoria (movimientos CP = Continuous Path)

3.3.1 Velocidad y aceleración

Al contrario queen losmovimientosPTP, en losmovimientos de trayectoria no sólo seprede-fine la posición de partida y la de destino. Además, es necesario que la punta de la herra-mienta del robot se mueva en una trayectoria lineal o circular entre estos puntos.

Por ello, las velocidades y aceleraciones que es preciso indicar ya no tienen como referencialos ejes individuales, sino el movimiento del TCP. De este modo, la punta de la herramientasemueveaunavelocidaddefinida conexactitud.Tab. 4 ofrece una vista general de las varia-bles del sistema que deben programarse, así como de sus unidades.

Page 81: Programación experto - Kuka

3 Programación de movimiento (continuación)

81 de 197ProgExperteBHR5.2 09.03.01 es

Nombre de variable Tipo dedatos

Unidad Función

$VEL.CP REAL m/s Velocidad de trayectoria

$VEL.ORI1 *1 REAL _/s Velocidad de basculamientoVelocidades $VEL.ORI2 *1 REAL _/s Velocidad de giro

$VEL_AXIS[4]--[6] *2 INT % Velocidades axiales de losejes de la muñeca

$ACC.CP REAL m/s2 Aceleración de trayectoria

Aceleraciones

$ACC.ORI1 *1 REAL _/s2 Aceleración de bascula-miento

Aceleraciones$ACC.ORI2 *1 REAL _/s2 Aceleración de giro

$ACC_AXIS[4]--[6] *2 INT % Aceleraciones axiales delos ejes de la muñeca

*1 Datos necesarios para $ORI_TYPE = #CONSTANT o #VAR*2 Datos necesarios para $ORI_TYPE = #JOINT

Tab. 4 Variables del sistema para velocidades y aceleraciones

Comomínimo, uno de los componentes del movimiento (translación, basculamiento y giroo eje[4]...[6]) se desplaza en cada instante de la ejecución del movimiento con aceleracióno velocidad programada. Los componentes no dominantes se adaptan con sincronizaciónde las fases.

También las velocidades y aceleraciones para los movimientos de trayectoria son ocupados,como ajuste predeterminado, con los valores máximos definidos en los datos de máquina oen $CONFIG.DAT cuando se activa la secuencia de inicialización del paquete base.

Además, en los movimientos CP se controlan las velocidades y aceleraciones de los ejesy, si se sobrepasan los valores límites de control definidos en las variables del sistema$ACC_ACT_MA y $VEL_ACT_MA, se dispara una reacción de parada y se emite un mensajede fallo. Los límites deaceleraciónde los ejes (acceleration) y velocidad de los ejes (velocity)dependen del tipo de robot y del modo de servicio utilizado.

El robot se detiene hasta que se sobrepasa uno de los valores permitidos de velocidad o deaceleración. Este puede ser el caso, por ejemplo, cuando unmovimiento del robot se producecerca de la singularidad de la muñeca (posición extendida de los ejes de la muñeca).

La singularidad de lamuñeca se alcanzacuando los ejes A4 y A6 se encuentranparalelos.

Punto de la raízde la muñeca

Fig. 28 Singularidad de la muñeca

Page 82: Programación experto - Kuka

Programación por el experto

82 de 197 ProgExperteBHR5.2 09.03.01 es

A través de la variable del sistema $CP_VEL_TYPE se pueden reducir los avances de losejes, y con ello la aceleración y la velocidad, para evitar que se alcancen los valores límitesde control (reacción de parada). Como ajuste predeterminado, la variable se encuentra ocu-pada con #CONSTANT, es decir, la reducción no está activa durante el servicio con el pro-grama. Si se desea utilizar esta función en elmodo deservicio T1, se debeactivar la variable#VAR_T1 (en T1 se utilizan valores más pequeños de velocidad y aceleración de los ejes).Para todos losmodos de servicio, se debe activar la variable #VAR_ALL. En elmodo de ser-vicio manual la reducción siempre se encuentra activa.Con la variable del sistema $CPVELREDMELD, en ambosmodos de servicio de test se recibeun mensaje si se reduce la velocidad de trayectoria. Para ello, se debe asignar a la variablede mensaje el valor “1”.

3.3.2 Control de la orientaciónSi es necesario modificar la orientación de la herramienta en el espacio durante un movi-miento de trayectoria, el tipo de control de la orientación se puede ajustar mediante la varia-ble del sistema $ORI_TYPE: El valor de esta variable mantiene su validez hasta que se leasigna un nuevo valor o se reinicia el programa.

$ORI_TYPE = #CONSTANTDurante el movimiento de trayectoria, la orientación se mantiene constante. Para el puntofinal se ignora la orientación programada y se utiliza la del punto inicial.

Fig. 29 Sin cambios en la orientación$ORI_TYPE = #VAR (estándar)Durante el movimiento de trayectoria, la orientación de la herramienta es modificada ininte-rrumpidamente desde la posición inicial hasta la posición final. Esto se logra girando y ha-ciendo bascular la dirección de avance de la herramienta. Así pues, esta opción se reco-mienda cuando la dirección de avance de la herramienta tiene especial importancia.

Si cerca de una singularidad no se puedemantener la velocidad programada, para el pasode movimiento respectivo debe utilizarse como $ORI_TYPE la opción “#JOINT”.

El valor “#VAR” también sedefine durante la inicializaciónpormedio deBAS(#INITMOV,0).

Fig. 30 Modificación de la orientación durante un movimiento lineal

Page 83: Programación experto - Kuka

3 Programación de movimiento (continuación)

83 de 197ProgExperteBHR5.2 09.03.01 es

$ORI_TYPE = #JOINT

Durante el movimiento de trayectoria, la orientación de la herramienta es modificada ininte-rrumpidamente desde la posición inicial hasta la posición final. Ello se logramediante el des-plazamiento lineal del eje axial de la muñeca. Esta opción permite evitar los problemas quese derivan de la singularidad de la muñeca, ya que no implica ningún control de orientaciónmediante giro o basculación sobre la dirección de avance de la herramienta.

En el momento de planear la trayectoria, es preciso conocer los frames Base y Tool (herr-amienta) correspondientes al punto inicial y al punto dedestino, yaqueambos sonnecesa-rios para calcular la posición de los ejes de la muñeca.

Si durante la ejecución cambian los frames Base o Tool, no se debe utilizarORI_TYPE = #JOINT.

A diferencia de lo que ocurre con los tipos de orientación “#Constant” y “’#Var”, lo deci-sivo no es el punto de raíz de la muñeca (punto de intersección de los ejes de la muñeca),sino el TCP (punto de referencia de la herramienta).

En casos excepcionales, puede suceder que algunas posiciones de destino no se puedanalcanzar con el tipo de orientación “#JOINT”. Este caso se da cuando, al calcular el puntode destino, se produce un cambio de estado. Un cambio de estado se produce cuando elTCP cambia el área cuyos límites se simbolizanmediante el trayecto prolongado de los ejesA2--A3 (véase Fig. 31 y Fig. 32). Por este motivo, el robot se detiene al comienzo de laejecución principal y el sistema emite el correspondiente mensaje de fallo en la ventana demensajes. Seleccione en este caso otro tipos de orientación (p. ej. “#VAR”).

En las figuras Fig. 31 y Fig. 32 se alcanza un punto en el espacio con las mismascoordenadas cartesianas pero distinto estado. Aquí los ángulos del eje de la muñeca sonabsolutamente idénticos en ambas figuras, pero la orientación del TCP es diferente.

Estado “A” de laposición del robot

Fig. 31 TCP debajo de las rectas A2--A3

Page 84: Programación experto - Kuka

Programación por el experto

84 de 197 ProgExperteBHR5.2 09.03.01 es

Estado “B” de laposición del robot

Fig. 32 TCP encima de las rectas A2--A3

Si, dentro de un programa KRL existente, se han efectuado en el nivel de expertoasignaciones explícitas (p. ej. “$ORI_TYPE=#CONSTANT”) éstas deben ser adaptadasmanualmente. La razón para ello es que, en cada fold de movimiento se efectúaautomáticamente la asignación respectiva, que sobrescribe la definición anterior.

Durante los movimientos circulares se puede escoger, además de la orientación constante(#CONST) y variable (#VAR), entre una orientación referida al espacio y una orientación refe-rida a la trayectoria. Para ello se utiliza la variable “$CIRC_TYPE”.

La variable “$CIRC_TYPE” carece de significado cuando se efectúa un desplazamientolineal del ángulo del eje de la muñeca con “$ORI_TYPE = #JOINT”.

$CIRC_TYPE = #BASE

Control de orientación referido al espacio durante el movimiento circular. Este valor tambiénse define durante la inicialización por medio de BAS(#INITMOV,0).

Constante + referido al espacio

En el control de la orientación referido al espacio, la orientación se realiza en relación al sis-tema base actual ($BASE).

El control de orientación constante referido al espacio es especialmente adecuado paraapli-caciones endonde lomás importante es elmovimiento de trayectoria, es decir, guiar la puntade la herramienta sobre la trayectoria circular. Resulta idóneo sobre todo en aplicacionescon una pequeña modificación de la orientación entre el punto inicial y el de destino, o enaplicaciones con una orientación exactamente constante en el espacio (véase Fig. 33) du-rante un movimiento circular (por ejemplo, aplicación de adhesivo con una boquilla de rota-ción simétrica).

Page 85: Programación experto - Kuka

3 Programación de movimiento (continuación)

85 de 197ProgExperteBHR5.2 09.03.01 es

Fig. 33 Control de orientación constante referido al espacio en losmovimientos circulares

Variable + referido al espacio

Mediante la superposición de los movimientos de basculamiento y de giro, se ejecuta denuevo un cambio en la orientación referida al espacio ($ORI_TYPE=#VAR) entre la posiciónde partida y la de destino (véase Fig. 34).

Fig. 34 Control de orientación variable referido al espacio en losmovimientos circulares

Page 86: Programación experto - Kuka

Programación por el experto

86 de 197 ProgExperteBHR5.2 09.03.01 es

$CIRC_TYPE = #PATH

Control de orientación referido a la trayectoria durante el movimiento circular.

Constante + referido a la trayectoria

En el control de orientación referido a la trayectoria, el eje longitudinal de la herramienta semantiene relativo con respecto al plano del círculo y a la tangente del círculo. Esta relaciónpuede explicarse gráficamente utilizando el denominado trípode que acompaña a la trayec-toria (véase Fig. 35).

Fig. 35 Control de orientación constante referido a la trayectoria en losmovimientos circulares

El trípode que acompaña a la trayectoria se compone del vector tangente a lacircunferencia t, del vector de la normal n y del vector de la binormal b. La Fig. 35 siguesobre el segmento de la circunferencia la orientación de la herramienta mediante el trípodeque acompaña a la trayectoria. Con relación al trípode que acompaña a la trayectoria, nose produce ningún cambio de orientación en las posiciones de la herramienta. Éste es, entreotros, un requisito importante para la soldadura al arco.

En el ejemplo mostrado, la orientación de la herramienta en relación al trípode que acom-paña a la trayectoria no sufre ningún cambio durante el movimiento desde el punto inicialhacia el punto de destino ($ORI_TYPE=#CONST).

Variable + referido a la trayectoria

Si se desea una modificación de la orientación referida a la trayectoria entre la posición departida y la de destino ($ORI_TYPE=#VAR), ésta se ejecutará en relación al trípode queacompaña a la trayectoria, mediante el giro y basculamiento superpuestos (véase Fig. 36).El control de la orientación en el trípode que acompaña la trayectoria es exactamente igualpara los movimientos circulares y los lineales.

Page 87: Programación experto - Kuka

3 Programación de movimiento (continuación)

87 de 197ProgExperteBHR5.2 09.03.01 es

Fig. 36 Control de orientación variable referido a la trayectoria en losmovimientos circulares

En la Tab. 5 aparecen de nuevo en una lista los preajustes de las variables del sistema parael control de orientación durante los movimientos de trayectoria:

en el sistema medianteBAS(#INITMOV,0)

$ORI_TYPE #VAR

$CIRC_TYPE #PATH #BASE

Tab. 5 Preajustes de $ORI_TYPE y $CIRC_TYPE

3.3.3 Movimientos lineales

LIN

Para un movimiento lineal, la KR C... calcula una recta desde la posición actual (en el pro-grama, éste es el último punto programado) hasta la posición que se indicó en la instrucciónde movimiento.

La programación de un movimiento lineal se efectúa utilizando las palabras claves LIN oLIN_REL junto con la indicación del punto de destino, es decir, igual que en la programaciónPTP. 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.

En los movimientos lineales, el estado del punto final es igual al del punto inicial. Poreste motivo, en un punto de destino correspondiente al tipo de datos POS se ignora laindicación del estado (status) y del giro (Turn). Por ello, antes de la primera instrucciónLIN, tiene que estar programado un movimiento PTP con la indicación completa de laposición (indicación de las coordenadas incluido el estado); por ejemplo, desplaza-miento HOME.

En el siguiente programa de ejemplo, la ocupación de las variables de velocidad y acelera-ción necesaria para los movimientos de trayectoria, así como la definición del sistema decoordenadas Tool y Base, se realizan de nuevo por medio de la rutina de inicializaciónBAS.SRC.

Page 88: Programación experto - Kuka

Programación por el experto

88 de 197 ProgExperteBHR5.2 09.03.01 es

DEF LIN_BEW ()

;--------- Sección de declaración ---------EXT BAS (BAS_COMMAND: IN, REAL: IN)DECL AXIS HOME ;Variable HOME del tipo AXIS

;---------- Inicialización ---------BAS (#INITMOV, 0) ;inicialización de las velocidades,

;aceleraciones, $BASE, $TOOL, etc.HOME = {AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

;------------- Sección principal------------PTP HOME ; desplazamiento COIPTP {A5 30}

; Movimiento lineal hacia la posición indicada, la orientación; cambia continuamente a la orientación destinoLIN {X 1030,Y 350,Z 1300,A 160,B 45,C 130}

; Movimiento lineal en el plano Y-Z, S y T se ignoranLIN {POS: Y 0,Z 800,A 0,S 2,T 35}

; Movimiento lineal hacia la posición indicada, la orientación; no cambia$ORI_TYPE=#CONSTLIN {FRAME: X 700,Y -300,Z 1000,A 23,B 230,C -90}

; la orientación sigue sin cambiarLIN {FRAME: Z 1200,A 90,B 0,C 0}

; Movimiento relativo a lo largo del eje XLIN_REL {FRAME: X 300}

PTP HOMEEND

Page 89: Programación experto - Kuka

3 Programación de movimiento (continuación)

89 de 197ProgExperteBHR5.2 09.03.01 es

3.3.4 Movimientos circulares

CIRC

Para definir unívocamente una circunferencia o arco de circunferencia en el espacio, se ne-cesitan 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 indicarmediante la posición actual.

Por ello, para programar un movimiento circular con las instrucciones CIRC oCIRC_REL,además del punto de destino debe definirse un punto intermedio. Para calcular la trayec-toria de movimiento con la unidad de control, del punto auxiliar solamente se evalúan loscomponentes translatorios (X, Y, Z). La orientación de la punta de la herramienta cambiacontinuamente, dependiendo del control de orientación, desde el punto inicial hasta elpunto 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 circunferenciase sigue especificandomediante el punto inicial, el punto auxiliar y el punto de destino. Sinembargo, la posición de destino a alcanzar realmente en el arco de circunferencia seespecifica mediante el ángulo de circunferencia programado. Eso resulta particularmenteútil a la hora de reprogramar la posición de destino (sinmodificar la geometría del círculo).

El arco de circunferencia a recorrer puede prolongarse o acortarse de acuerdo con el ángulode circunferencia. La orientación de destino programada se alcanza en el punto de destinoreal. Mediante el signo del ángulo circular puede especificarse el sentido de giro, es decir,la dirección en que debe recorrerse el arco de circunferencia (véase Fig. 37):

CA > 0_ en el sentido programado(Punto inicial→ punto auxiliar→ punto de destino)

CA < 0_ en sentido contrario al programado(Punto inicial→ punto de destino→ punto auxiliar)

El valor del ángulo circular noestá limitado. Unaposibilidadespecial es la deprogramarcircun-ferencias completas (> 360_).

Punto inicial

Punto auxiliar

Punto de destinoprogramado

×

×

Punto de destino real

CA = 235°

CA > 0°

Punto inicial

Punto auxiliar

Punto dedestinoprogramado

×

×

Punto de destino real

CA = --235°

CA < 0°

Fig. 37 Repercusiones de la opción CA en la instrucción CIRC o CIRC_REL

Page 90: Programación experto - Kuka

Programación por el experto

90 de 197 ProgExperteBHR5.2 09.03.01 es

Las indicaciones relativas correspondientes a la posición intermedia y a la posición dedestino (CIRC_REL) tienen como referencia, respectivamente, la posición inicial. Lasindicaciones de posición específicas del eje son, al igual que en los movimientos LIN,inadmisibles. Del mismo modo, $BASE y $TOOL deben estar completamente asignadosantes de la ejecución de un movimiento circular.

DEF CIRC_BEW ( )

;--------- Sección de declaración ---------EXT BAS (BAS_COMMAND :IN,REAL :IN )DECL AXIS HOME

;---------- Inicialización ---------BAS (#INITMOV,0 ) ;Inicialización de velocidades,

;aceleraciones, $BASE, $TOOL, etc.HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

;------------- Sección principal------------PTP HOME; desplazamiento COIPTP {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 (preaju-ste)CIRC {X 925,Y -285,Z 718},{X 867,Y -192,Z 718,A 155,B 75,C 160}

; control de orientación constante referido al espacio; punto de destino especificado mediante la indicación delángulo$ORI_TYPE=#CONSTCIRC {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

; control de orientación constante referido a la trayectoria; punto de destino mediante la indicación del ángulo (haciaatrás)$CIRC_TYPE=#PATHCIRC {X 867,Y -192,Z 718},{X 982,Y -221,Z 718,A 0}, CA -150

$ORI_TYPE=#VARLIN {A 100} ; Reorientación del TCP

; control de orientación variable referido a la trayectoriaCIRC {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 relativoCIRC_REL {X -50,Y 50},{X 0,Y 100}

PTP HOMEEND

Page 91: Programación experto - Kuka

3 Programación de movimiento (continuación)

91 de 197ProgExperteBHR5.2 09.03.01 es

3.4 Procesamiento en avance

Un aspecto crucial del rendimiento en un robot industrial es la rapidez con la que puede reali-zar sus trabajos. Junto a la dinámicadel robot, es de importancia decisiva también la eficaciadel procesamiento del programa de usuario, que junto a los movimientos, consta tambiénde instrucciones aritméticas y de control de los periféricos.

Un procesamiento más rápido del programa puede conseguirse

G mediante la reducción de la duración del movimiento y

G mediante la reducción del tiempo de parada entre los movimientos.

En el caso de las condiciones límite preestablecidas, tales como las velocidades y acelera-ciones máximas del eje, lo primero se logra mediante el posicionamiento aproximado de losmovimientos en un tiempo óptimo.

Encontrará más información en el capítulo [Programación de movimiento], apartado[Movimientos con posicionamiento aproximado].

El tiempo de parada entre los movimientos puede reducirse ejecutando las laboriosas ins-trucciones aritméticas y lógicas entre los pasos de movimiento mientras el robot se mueve,es decir, realizando una ejecución preliminar (denominada “ejecución en avance”).

$ADVANCE

A través de la variable del sistema $ADVANCE se puede establecer el número máximo depasos de movimiento que la ejecución en avance puede anteponer a la ejecución principal(es decir, al paso de movimiento procesado actualmente). El puntero principal visible en lasuperficie de operación durante el procesamiento del programa, muestra siempre el pasode movimiento en ejecución.

Por el contrario, el puntero de ejecución en avance no es visible, y puede señalar tanto ins-trucciones completamente ejecutadas por la unidad de control como pasos de movimientoque solamente son preparados por la unidad de control y realizados posteriormente durantela ejecución principal. (Véase Fig. 38).

El puntero de ejecución en avance seencuentra en esta posición; $ADVANCE = 1

Puntero deejecuciónprincipal

Fig. 38 Puntero de ejecución principal y puntero de ejecución en avance

En la sección de programa anterior, el procesamiento en avance está definido en 1 y el pun-tero de ejecución principal se encuentra en la línea 16 (es decir, se ejecuta el movimientoLIN). Un procesamiento en avance de 1 significa que las instrucciones de las líneas 16 a 22se han llevado a cabo en paralelo con la ejecución del movimiento y los datos demovimientopara los movimientos PTP en la línea 24 se están preparando en ese momento.

Page 92: Programación experto - Kuka

Programación por el experto

92 de 197 ProgExperteBHR5.2 09.03.01 es

Para permitir un posicionamiento aproximado, debe estar ajustado, comomínimo, un pro-cesamiento en avance de 1 (el valor estándar de la variable $ADVANCE es “3”. El máximoposible de pasos de avance son 5).En un subprograma de interrupción no es posible el procesamiento en avance. La unidadde control confecciona siempre los programas de interrupción por líneas, por lo que no esposible un posicionamiento aproximado en ellos.

Preajustes de $ADVANCE:

en el sistema medianteBAS (#INITMOV, 0)

$ADVANCE 0 3

Parada automática del procesamiento en avance

Las instrucciones y los datos que pueden influir en los dispositivos periféricos (por ej. las in-strucciones deentrada/salida) o que se refierenal estadoactual del robot generanunaParadadel procesamiento en avance (véase Tab. 6). Esto es necesario para asegurar la secuenciacorrecta en ejecución y tiempo, de las instrucciones y los movimientos del robot.

Instrucciones ANOUT ON ANOUT OFF

ANIN ON ANIN OFF

DIGIN ON DIGIN OFF

PULSE

HALT WAIT

CREAD CWRITE COPEN CCLOSE

SREAD SWRITE

Combinaciones CP-PTP sin posicionamiento aproximado

Instruccionesen combina-ió

END (en caso de que en el módulo se haya definido una interrup-ción no global)

ción con unainterrupción

INTERRUPT DECL (en caso de que la interrupción ya haya sidodeclarada)

RESUME sin BRAKE

Variables del si-stema más utili

$ANOUT[Nr] $ANIN[Nr]stema más utili-zadas $DIGIN1 $DIGIN2 … $DIGIN6zadas

$OUT[Nr] $IN[Nr]

$AXIS_ACT $AXIS_BACK $AXIS_FOR $AXIS_RET

$POS_ACT $POS_BACK $POS_FOR $POS_RET

$AXIS_INC $AXIS_INT $POS_ACT_MES $POS_INT

$TORQUE_AXIS $ASYNC_AXIS

$TECH[X].MODE, $TECH[X].CLASS en ciertas operaciones

$LOAD, $LOAD_A1, $LOAD_A2, $LOAD_A3 (si se trata de unrobot de exactitud absoluta con cambio de carga)

otras variablesdel sistema

$ALARM_STOP$EM_STOP$ACT_TOOL$OV_PRO$ASYNC_EX_AX_DECOUPLE

$AXIS_ACTMOD$EXTSTARTTYP$PAL_MODE$WORKSPACE

$INHOME_POS$REVO_NUM$ACT_BASE$IBUS_OFF

$ON_PATH$SAFETY_SW$ACT_EX_AX$IBUS_ON

Page 93: Programación experto - Kuka

3 Programación de movimiento (continuación)

93 de 197ProgExperteBHR5.2 09.03.01 es

Variablesimportadas

todas, con elacceso

Otros Si entre pasos de posicionamiento aproximado se efectúa un cam-bio de filtro, se genera una parada del procesamiento en avance.

Tab. 6 Instrucciones y variables que activan una parada automática delprocesamiento en avance

CONTINUEEn los casos de aplicación en los que es preciso impedir esta parada del procesamiento enavance, inmediatamente antes de la instrucción correspondiente debe programarse la ins-trucción CONTINUE. La unidad de control continúa entonces con el avance. Sin embargo,el efecto se limita a la siguiente línea de programa (¡incluyendo líneas en blanco!).

Si, por el contrario, usted desea detener el procesamiento en avance en un lugar determi-nado sin tener que modificar para ello la variable de sistema $ADVANCE, puede servirsede un pequeño truco: simplemente programe en este lugar un tiempo de espera de 0 se-gundos. La instrucción WAIT activa una parada automática del procesamiento en avancesin producir ningún otro efecto:WAIT SEC 0

Encontrará más información en el capítulo [Control de ejecución de programa], apar-tado [Tiempos de espera].

3.5 Movimientos con posicionamiento aproximadoPara aumentar la velocidad puede utilizarse el posicionamiento aproximado en aquelloscasos en donde no es necesario posicionar exactamente sobre el punto. El robot acorta elrecorrido, tal como muestra la Fig. 39.Contorno de posicionamiento aproximadoEl contorno de posicionamiento aproximado es generado automáticamente por la unidad decontrol. El programador solamente influye en el comienzo y el final del posicionamientoaproximado. Para el cálculo del paso de posicionamiento aproximado, el control necesitalos datos del punto inicial, del punto de posicionamiento aproximado y del punto final.

Para permitir un posicionamiento aproximado, el procesamiento en avance ($ADVANCE)debe estar, como mínimo, en 1. Si el procesamiento en avance es demasiado pequeño,aparece el mensaje “No es posible un posicionamiento aproximado” y los puntos sonalcanzados con exactitud.Si programa una instrucción después de una instrucción de posicionamiento aproximadoque activa una parada automática del procesamiento en avance, no es posible efectuar unposicionamiento aproximado.

Encontrará más información sobre la instrucción TRIGGER (disparo) en el capítulo[Trigger -- Acciones de conmutación referentes a la trayectoria].

Punto intermedio

Punto inicial

Punto de destino

Posicionamientoaproximado

Fig. 39 Posicionamiento aproximado de los puntos intermedios

Page 94: Programación experto - Kuka

Programación por el experto

94 de 197 ProgExperteBHR5.2 09.03.01 es

3.5.1 Posicionamiento aproximado PTP--PTP

Para el posicionamiento aproximado PTP, la unidad de control calcula las distancias a reco-rrer axialmente en la zona de aproximación y planifica para cada eje los perfiles de velocidadpara cada eje, que aseguran las transiciones tangenciales de los pasos individuales paraasegurar al contorno de posicionamiento aproximado.

Comienzo de la aproximación

El posicionamiento aproximado se inicia cuando el último eje (= eje directriz) sobrepasa unángulo determinado con respecto al punto de posicionamiento aproximado. En los datos dela máquina se ha predefinido un ángulo para cada eje:

$APO_DIS_PTP[1] = 90

$APO_DIS_PTP[6] = 90

En el programa puede indicarse, mediante $APO.CPTP, el comienzo del posicionamientoaproximado en forma de porcentaje de estos valores máximos. Por ejemplo:

$APO.CPTP = 50

En este caso, el posicionamiento aproximado se inicia cuando el primer eje tiene que reco-rrer 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.

⇒ Cuanto mayor es $APO.CPTP, más se redondea la trayectoria.

Básicamente, el posicionamiento aproximado no puede producirse por detrás del centro delpaso. En este caso, el sistema se limita automáticamente al centro del paso.

C_PTP

El posicionamiento aproximado de un punto se visualiza en la instrucción PTP indicando lapalabra clave C_PTP:

PTP PUNTO4 C_PTP

También el paso de posicionamiento aproximado PTP se ejecuta en el tiempo óptimo, esdecir, mientras se efectúa el posicionamiento aproximado, se desplaza siempre como mí-nimo, un eje con el valor límite programado para la aceleración o velocidad. Simultánea-mente, se asegurapara cadaeje queno se superan losmomentos admitidos para los engra-najes reductores y motores. El perfil de marcha más elevado ajustado de forma estándar,garantiza un control de los movimientos invariante en velocidad y en aceleración.

Encontrará más información en el capítulo [Programación de movimiento], apartado[Perfil de marcha más elevado].

En el ejemplo siguiente puede verse el efecto de la instrucción de posicionamiento aproxi-mado y de la variable $APO.CPTP. La trayectoria recorrida está representada en la Fig. 40en los planos x--y. En ella puede observarse, en particular, que en los movimientos PTP elTCP no se desplaza sobre una recta entre los puntos de destino.

Page 95: Programación experto - Kuka

3 Programación de movimiento (continuación)

95 de 197ProgExperteBHR5.2 09.03.01 es

DEF UEBERPTP ( )

;--------- Sección de declaración ---------EXT BAS (BAS_COMMAND :IN,REAL :IN )DECL AXIS HOME

;---------- Inicialización ---------BAS (#INITMOV,0 ) ;Inicialización de velocidades,

;aceleraciones, $BASE, $TOOL, etc.HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

;------------- Sección principal------------PTP HOME ; desplazamiento COI

PTP {POS:X 1159.08,Y -232.06,Z 716.38,A 171.85,B 67.32,C162.65,S 2,T 10}

;Posicionamiento aproximado del puntoPTP {POS:X 1246.93,Y -98.86,Z 715,A 125.1,B 56.75,C 111.66,S 2,T10} C_PTP

PTP {POS:X 1109.41,Y -0.51,Z 715,A 95.44,B 73.45,C 70.95,S 2,T10}

;Posicionamiento aproximado de dos puntos$APO.CPTP=20PTP {POS:X 1296.61,Y 133.41,Z 715,A 150.32,B 55.07,C 130.23,S2,T 11} C_PTPPTP {POS:X 988.45,Y 238.53,Z 715,A 114.65,B 50.46,C 84.62,S 2,T11} C_PTP

PTP {POS:X 1209.5,Y 381.09,Z 715,A -141.91,B 82.41,C -159.41,S2,T 11}

PTP HOMEEND

x=1159,08y=--232,06

x=1246,93y=--98,86

x=1109,41y=--0,51

x=1296,61y=133,41

x=988,45y=238,53

x=1209,5y=381,09

y

x

Fig. 40 Ejemplo para el posicionamiento aproximado PTP--PTP

Page 96: Programación experto - Kuka

Programación por el experto

96 de 197 ProgExperteBHR5.2 09.03.01 es

Por lo general, la trayectoria de un movimiento PTP no es una recta ni está en un planoen el espacio, por lo que, estrictamente, no se puede representar como en la Fig. 40. Apesar del hecho de que el valor z es igual en todos los puntos del ejemplo, no todos lospuntos de la trayectoria demovimiento están enel plano z=715mm.Por lo tanto, la trayec-toria reflejada es únicamente una proyección de la trayectoria real en el plano x--y.

3.5.2 Posicionamiento aproximado LIN--LIN

Para el movimiento continuo a lo largo de trayectorias complejas, existe el requisito de efectuarel posicionamiento aproximado también entre pasos individuales lineales. Los diferentes movi-mientos de orientación en los pasos LIN, deben pasar gradualmente unos dentro de otros.

Como contorno de posicionamiento aproximado, la unidadde control calcula una trayecto-ria parabólica, dado que esta forma de contorno se aproxima muy bien al recorrido de latrayectoria de los pasos individuales conelmejor aprovechamiento de las reservas deace-leración en la zona de aproximación.

Para especificar el comienzodel posicionamiento aproximado existen tres variables predefi-nidas:

Variable Tipo dedatos

Unidad Significado Palabra claveen la instruc-ción

$APO.CDIS REAL mm Criterio de distancia de transla-ción

C_DIS

$APO.CORI REAL _ Criterio de orientación C_ORI

$APO.CVEL INT % Criterio de velocidad C_VEL

Tab. 7 Variables del sistema para la especificación del comienzo delposicionamiento aproximado

Criterio de distancia

A la variable $APO.CDIS se le puede asignar una distancia translatoria. Si el posiciona-miento aproximado se activa por medio de esta variable, la unidad de control abandona elcontorno individual cuando la distancia hasta el punto de destino es inferior al valor mínimode $APO.CDIS.

Criterio de orientación

A la variable $APO.CORI se le puede asignar una distancia de orientación. En este caso,el contorno individual se abandona cuando el ángulo de orientación dominante (bascula-miento o giro del eje longitudinal de la herramienta) queda por debajo de la distancia hastael punto de posicionamiento aproximado programado especificada en $APO.CORI.

Criterio de velocidad

A la variable $APO.CVEL se le puede asignar un valor porcentual. Este valor indica cuál esel porcentaje de la velocidad programada ($VEL) que debe dar inicio a la operación de posi-cionamiento aproximado en la fase de frenado del paso individual. Para ello, se evalúa cadacomponente de translación, basculamiento y giro que se alcanza mediante el movimientodel valor de velocidad programado, o el que más se le aproxime.

⇒ Cuanto mayores son los valores en $APO.CDIS, $APO.CORI o $APO.CVEL, antescomienza el posicionamiento aproximado.En determinadas condiciones, dentro del sistema puede acortarse el posicionamientoaproximado (centro del paso, criterio de simetría), pero nunca agrandarse.

C_DIS, C_ORI, C_VEL

El posicionamiento aproximado se activa agregando la palabra clave C_DIS, C_ORI oC_VEL a la instrucción LIN o LIN_REL.

Page 97: Programación experto - Kuka

3 Programación de movimiento (continuación)

97 de 197ProgExperteBHR5.2 09.03.01 es

Para hacer más clara esta idea, se ofrece el siguiente ejemplo, vinculado a la Fig. 41:

DEF UEBERLIN ( )

;--------- Sección de declaración ---------EXT BAS (BAS_COMMAND :IN,REAL :IN )DECL AXIS HOME

;---------- Inicialización ---------BAS (#INITMOV,0 ) ;Inicialización de velocidades,

;aceleraciones, $BASE, $TOOL, etc.HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

;------------- Sección principal------------PTP HOME ; desplazamiento COI

PTP {POS: X 1159,08,Y -232,06,Z 716,38,A 171,85,B 67,32,C162,65,S 2,T 10}

;posicionamiento aproximado del punto según el criterio de di-stancia$APO.CDIS=20LIN {X 1246.93,Y -98.86,Z 715,A 125.1,B 56.75,C 111.66} C_DISLIN {X 1109,41,Y -0,51,Z 715,A 95,44,B 73,45,C 70,95}

;posicionamiento aproximado de dos puntosLIN {X 1296.61,Y 133.41,Z 714.99,A 150.32,B 55.07,C 130.23}C_ORILIN {X 988.45,Y 238.53,Z 714.99,A 114.65,B 50.46,C 84.62} C_VEL

LIN {X 1209,5,Y 381,09,Z 715,A -141,91,B 82,41,C -159,41}

PTP HOMEEND

x=1159,08y=--232,06

x=1246,93y=--98,86

x=1109,41y=--0,51

x=1296,61y=133,41

x=988,45y=238,53

x=1209,5y=381,09

y

x

Fig. 41 Ejemplo para el posicionamiento aproximado LIN--LIN

Page 98: Programación experto - Kuka

Programación por el experto

98 de 197 ProgExperteBHR5.2 09.03.01 es

La posición en la cual el contorno de posicionamiento aproximado desemboca en el pasode movimiento LIN subsiguiente es calculada automáticamente por la unidad de control.En el caso de que $ACC y $VEL sean idénticos para ambos pasos individuales y laslongitudes de los pasos sean suficientes grandes, la parábola de aproximación essimétrica a la bisectriz entre los dos pasos individuales. En pasos individuales cortos selimita el comienzo de la zona de aproximación a la mitad de la longitud del paso. Lavelocidad se reduce para ello de forma tal, que pueda mantenerse siempre unposicionamiento exacto en el punto siguiente.

Las transiciones entre los pasos individuales y el contorno de posicionamiento aproximadosonpermanentes y son tangenciales. Esto garantiza una transición “suave” y unaprotecciónde la mecánica, ya que los componentes de velocidad son siempre constantes.

El contorno generado por la unidad de control en la zona de aproximación depende de lasmodificaciones del override, que se admiten para cada instante del movimiento.

3.5.3 Posicionamiento aproximado CIRC--CIRC y posicionamiento aproximado CIRC--LIN

La tarea de posicionamiento aproximado entre los pasos CIRC y otros pasos CP (LIN oCIRC) es casi idéntica al posicionamiento aproximado entre dos pasos LIN. Tanto el movi-miento de orientación como el translatorio deben pasar sin saltos de velocidad de uno a otrocontornodepaso individual. El comienzodel posicionamiento aproximadose vuelve adefinirmediante las variables $APO.CDIS, $APO.CORI o $APO.CVEL, cuyaevaluación seejecutade forma idéntica a los pasos LIN. El ajuste del criterio de posicionamiento aproximado des-eado se efectúa asimismo mediante las palabras clave C_DIS, C_ORI o C_VEL.

Encontrará más información en el capítulo [Programación de movimiento], apartado[Posicionamiento aproximado LIN--LIN].

A continuación, el posicionamiento aproximado CIRC--CIRC se explica de nuevo a travésde un ejemplo y de la trayectoria de movimiento representada por la figura:

Page 99: Programación experto - Kuka

3 Programación de movimiento (continuación)

99 de 197ProgExperteBHR5.2 09.03.01 es

DEF UEBERCIR ( );--------- Sección de declaraciones ---------EXT BAS (BAS_COMMAND :IN,REAL :IN )DECL AXIS HOME;---------- Inicialización ---------BAS (#INITMOV,0 ) ;Inicialización de velocidades,

;aceleraciones, $BASE, $TOOL, etc.HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0};------------- Sec-ción principal ------------PTP HOME ; desplazamiento COIPTP {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=20CIRC {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 paradadel procesamiento en avance mediante $OUT$ORI_TYPE=#CONSTCIRC {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=#PATHCIRC {X 963.08,Y -85.39,Z 718},{X 892.05,Y 67.25,Z 718.01,A97.34,B 57.07,C 151.11} C_ORI

; movimientos circulares relativos

; posicionamiento aproximado según el criterio de velocidad$APO.CVEL=50CIRC_REL {X -50,Y 50},{X 0,Y 100} C_VEL

; posicionamiento aproximado según el criterio de distancia$APO.CDIS=40CIRC_REL {X -50,Y 50},{X 0,Y 100} C_DIS

CIRC_REL {X -50,Y 50},{X 0,Y 100}

PTP HOMEEND

Page 100: Programación experto - Kuka

Programación por el experto

100 de 197 ProgExperteBHR5.2 09.03.01 es

150_

x=980y=--238

x=867y=--192

y=100y=100y=100

y

x

Fig. 42 Ejemplo para el posicionamiento aproximado CIRC--CIRC

Por lo general, el requisito de las transiciones tangenciales impide calcular durante elposicionamiento aproximado con pasos CIRC los contornos de posicionamientoaproximado simétricos. La trayectoria de posicionamiento aproximado consta por lo tantode dos segmentos parabólicos que se funden tangencialmente uno con otro ydesembocan simultáneamente, y de forma tangencial, en los pasos individuales.

Comienzo del posicionamiento aproximado

Final del posicionamientoaproximado

AproximaciónLIN--CIRC

Fig. 43 Contorno de posicionamiento aproximado en los pasos LIN--CIRC

Como norma general, durante el posicionamiento aproximado CIRC la interpolación tienecomo referencia el espacio. La orientaciónde partida es siempre la orientaciónque sealcanzóen el punto de posicionamiento aproximado. Si se ejecutan dos pasos de posicionamientoaproximadoconorientación referida a la trayectoria, a pesar de ello, la reorientaciónen la zonade aproximación se comporta con referencia al espacio.

Page 101: Programación experto - Kuka

3 Programación de movimiento (continuación)

101 de 197ProgExperteBHR5.2 09.03.01 es

3.5.4 Posicionamiento aproximado PTP -- trayectoria

Existe la posibilidad, de efectuar posicionamientos aproximados entre pasos demovimientoPTP específicos del eje y de trayectoria cartesiana. Elmovimiento PTPofrece las siguientesposibilidades:

G Básicamente esmás rápido queen elmismo caso cartesiano, especialmente en la pro-ximidad de posiciones singulares.

G Al contrario que la interpolación cartesiana, permite un cambio de configuración, porejemplo, una transición desde el área de base al área por encima de la cabeza o unbasculamiento con la posición extendida de la muñeca.

La trayectoria exacta de un movimiento PTP no puede ser determinada con antelación,dado que el robot efectúa para él, el recorrido más rápido. Aquí la trayectoria está sujetaa la ligera influencia de diversos factores (por ej. la velocidad de desplazamiento).

Sin embargo, las ventajas de la interpolación específica del eje sólo pueden aprovecharse total-mente cuando se tiene la posibilidad de una transición continua entre pasos específicos del ejey cartesianos, ya que durante una parada exacta, se pierde en gran parte el tiempo ganado.

La programación de la aproximación PTP -- trayectoria, se efectúa de forma totalmente aná-loga al procedimiento presentado hasta ahora. La zona de aproximación se especifica delmodo siguiente:

Posicionamiento aproximado PTP trayectoria

El comienzo del posicionamiento aproximado se determina con el criterio PTP $APO.CPTPmediante el procedimiento habitual. Para el siguiente paso de movimiento de trayectoria,puede indicarse explícitamente un criterio de posicionamiento aproximado (C_DIS,C_ORI, C_VEL) que especifica la entrada en el paso CP.

Esto se produce mediante la secuencia de instrucción:

PTP PUNTO1 C_PTP C_DISLIN PUNTO2

Si en el paso PTP falta una indicación para el criterio de posicionamiento aproximado des-eado en el paso CP, se utilizará C_DIS como valor predeterminado para establecer la en-trada en el paso CP.

El contorno de un posicionamiento aproximado PTP -- trayectoria o trayectoria – PTP esun movimiento PTP. Por lo tanto, no se puede determinar con exactitud la trayectoria deposicionamiento aproximado.

P1 P2

P3Programa:...LIN P1LIN P2 C_DISPTP P3

...Aquí aparece el problema que elmovimientode posicionamiento aproximado no puedepredecirse. Es posible que pueda existir unacolisión con la mesa.

Mesa

CP--PTP

Si se necesita una trayectoria exacta, por ej. un movimiento CP paralelo a la mesa, esnecesario observar precauciones al abandonar esta trayectoria con la combinaciónCP--PTP durante el posicionamiento aproximado. Lo mismo vale para un movimientoPTP--CP para acceder a esa trayectoria.

Page 102: Programación experto - Kuka

Programación por el experto

102 de 197 ProgExperteBHR5.2 09.03.01 es

P3

P2

P1

P2_INTERM

Para resolver el problema planteado másarriba y evitar una parada exacta, debeagregarse otro movimiento CP(P2_INTERM).

Programa:...LIN P1LIN P2 C_DISLIN P2_INTERM C_DISPTP P3...

CP--CP--PTP

Mesa

Posicionamiento aproximado trayectoria PTP

Para el paso CP se utiliza el criterio de posicionamiento aproximado programado, para elpaso PTP se recurre a $APO.CPTP.

Por lo tanto, una secuencia de instrucción podría tener el aspecto siguiente:

CIRC AUX PUNTO1 C_VELPTP PUNTO2

Sin embargo, el posicionamiento aproximado CP--PTP solamente puede garantizarsecuando ninguno de los ejes del robot en el paso de trayectoria giramás de 180_ y el estadoS no cambia, ya que estas modificaciones de posición no son previsibles durante laplanificación del contorno de posicionamiento aproximado. Si se produce un cambio deconfiguración de este tipo en el pasode trayectoria antes de la aproximación (modificaciónde S o T), el paso de trayectoria se recorre hasta el final como un paso individual para elpunto final programado, y se emite el mensaje de fallo confirmable “Progr. aproximaciónCP/PTP no ejecutable”. El usuario debe descomponer entonces el paso CP en variospasos individuales, de forma que el paso individual previo al posicionamiento aproximadoCP--PTP sea lo suficientemente corto como para poder excluir un cambio de S o de T entodos los ejes del robot.

Encontrará más información en el capítulo [Programación de movimiento], apartado[Instrucciones de movimiento].

En el ejemplo siguiente se ha programado un posicionamiento aproximadoPTP--LIN, unpo-sicionamiento aproximado LIN--CIRC y un posicionamiento aproximado CIRC--PTP.

Page 103: Programación experto - Kuka

3 Programación de movimiento (continuación)

103 de 197ProgExperteBHR5.2 09.03.01 es

DEF UEBERB_P ( )

;--------- Sección de declaración ---------EXT BAS (BAS_COMMAND :IN,REAL :IN )DECL AXIS HOME

;---------- Inicialización ---------BAS (#INITMOV,0 ) ;Inicialización de velocidades,

;aceleraciones, $BASE, $TOOL, etc.HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

;------------- Sección principal------------PTP HOME ; desplazamiento COIPTP {POS: X 1281,55,Y -250,02,Z 716,A 79,11,B 68,13,C 79,73,S6,T 50}

PTP {POS: X 1209.74,Y -153.44,Z 716,A 79.11,B 68.13,C 79.73,S6,T 50} C_PTP C_ORILIN {X 1037,81,Y -117,83,Z 716,A 79,11,B 68,13,C 79,73}

$APO.CDIS=25LIN {X 1183.15,Y -52.64,Z 716,A 79.11,B 68.13,C 79.73} C_DISCIRC {POS: X 1134,Y 53.63,Z 716},{X 1019.21,Y 124.02,Z 716,A79.11,B 68.12,C 79.73}

CIRC {POS: X 1087.47,Y 218.67,Z 716},{X 1108.78,Y 267.16,Z 716,A79.11,B 68.12,C 79.73} C_ORIPTP {POS: X 1019,31,Y 306,71,Z 716,A 80,8,B 68,C 81,74,S 6,T59}

PTP HOMEEND

y

x

x=1281,55y=--250,02

x=1209,74y=--153,44

x=1037,81y=--117,83

x=1183,15y=--52,64

x=1019,21y=124,02

x=1108,78

y=267,16

x=1019,31y=306,71

x=1087,47y=218,67

y=53,63x=1134

PTP

CIRC(C_ORI)

CIRC

LIN(C_DIS)

LIN

PTP(_PTP C_ORI)

HP

HP

Fig. 44 Aproximación PTP--trayectoria y aproximación trayectoria--trayectoria

Page 104: Programación experto - Kuka

Programación por el experto

104 de 197 ProgExperteBHR5.2 09.03.01 es

3.5.5 Cambio de herramienta durante el posicionamiento aproximado

Esta funcionalidad se encuentra disponible para todas las combinaciones de pasos indivi-duales de PTP, LIN y CIRC.Sepuedecambiar unaherramienta de formavirtual incluso durante el posicionamiento apro-ximado. Es decir, una herramienta es aprendida dos veces de forma diferente: p. ej. en unapistola de aplicación la distancia con respecto a la pieza es en “TOOL1” 5 cm y en “TOOL2”10 cm.

EjemploEn este ejemplo, al principio del movimiento de posicionamiento aproximado de P1 aP2, la herramienta TOOL_DATA1[1] debe ser sustituida por TOOL_DATA[2].

$TOOL=TOOL_DATA[1]PTP P0_TOOL1; el punto es programado con la herramienta TOOL_DATA[1]LIN P1_TOOL1 C_DIS; el punto es programado con la herramienta TOOL_DATA[1]$TOOL=TOOL_DATA[2]LIN P2_TOOL2; el punto es programado con la herramienta TOOL_DATA[2]

P0_TOOL1 P1_TOOL1

P0_TOOL2

P2_TOOL2

P1_TOOL2

Brida

Comienzoaproximación 1

Fin aproximación 2

Comienzo aproximación 2

TOOL1

TOOL2

TOOL1

TOOL2

En este ejemplo, el cambio de herramienta se produce durante el posicionamientoaproximado: al entrar en el paso intermedio, la posición cartesiana salta de Comienzoaproximación1 a Comienzo aproximación2; tanto los ángulos de los ejes como la posicióncartesiana y la velocidad de la brida son guiadas constantemente durante todo elmovimiento. El salto en la posición cartesiana del TCP se descompone durante elmovimiento desde Fin aproximación2 hacia P2_TOOL2, de modo que la trayectoria nodiscurre sobre la unión lineal espacial de P1_TOOL1 a P2_TOOL2, sino sobre una parte dela trayectoria programada con parada exacta para TOOL2.

Page 105: Programación experto - Kuka

3 Programación de movimiento (continuación)

105 de 197ProgExperteBHR5.2 09.03.01 es

3.6 Programación por aprendizaje de los puntosLa integración del procedimiento de aprendizaje es una característica de calidadfundamental de un lenguaje de programación de robot.

Signo !

Para ello, en KRL solamente es necesario programar un signo ! como posicionador para lascoordenadas que posteriormente se desean programar por aprendizaje:

PTP !

LIN ! C_DIS

CIRC ! ,CA 135.0

Luego, en la unidad de control, se pueden introducir en el programa las coordenadascorrespondientes mediante la tecla del softkey “Touch Up” después de pulsar la tecla delsoftkey “Modificar”. Las coordenadas actuales se escriben directamente en la estructuraseleccionada del archivo SRC, por ejemplo:

PTP {POS:X 145.25,Y 42.46,Z 200.5,A -35.56,B 0.0,C 176.87,S 2,T 2}

LIN {X -23.55,Y 0.0,Z 713.56,A 0.0,B 34.55,C -90.0} C_DIS

CIRC {X -56.5,Y -34.5,Z 45.56,A 35.3,B 0.0,C 90.0},{X 3.5,Y 20.30,Z 45.56,A 0.0,B 0.0,C 0.0}, CA 135.0

Al programar por aprendizaje las coordenadas cartesianas, siempre se tomacomo sistema de referencia el sistema de coordenadas base ($BASE) que en esemomento es válido en el sistema. Por ello, debe asegurarse de que durante laprogramación por aprendizaje esté siempre declarado el sistema de coordena-das base necesario para el movimiento posterior.

LaKRC1permite otra variantemás deprogramaciónpor aprendizaje: programeustedunainstrucción de movimiento con una variable que NO declare en la sección dedeclaraciones, por ejemplo:

PTP PUNTO_ARR

Después de pulsar las teclas de softkey programable “Modificar” y “Var”, se le pedirá queseleccione la estructura deseada. Cuando lo haya hecho, en la lista de datos correspon-diente sedeclarará automáticamente una variable PUNTO_ARR y esta variable será ocupadacon las coordenadas reales actuales referentes al $BASE actual, por ejemplo:

DECL FRAME PUNTO_ARR={X 15.2,Y 2.46,Z 20.5,A -35.5,B 9.0,C 16.87}

Si no se ha declarado la lista de datos, aparece el correspondiente mensaje de fallo.

Encontrará más información sobre el tema “Listas de datos” en el capítulo [Listas de datos].

Si ha creado una instrucción demovimiento a través de los formularios inline puedeutilizartambién, posteriormente, los puntos programados por aprendizaje a través del formulario,en una instrucción de movimiento KRL:

Los puntos se almacenan en la lista de datos correspondiente con los nombres indicadosen el formulario y una X delante (por ello, para los nombres de puntos en los formulariosinline se admiten como máximo 11 caracteres en lugar de 12).

Puede acceder al punto P7 en el formulario inline

es decir, posteriormente como XP7 en una instrucción KRL:

LIN XP7

También aquí debe tenerse en cuenta que en ambos casos tiene que utilizarse el mismosistema de coordenadas base para que se produzca el desplazamiento hasta el mismopunto.

Page 106: Programación experto - Kuka

Programación por el experto

106 de 197 ProgExperteBHR5.2 09.03.01 es

Page 107: Programación experto - Kuka

4 Control de ejecución del programa

107 de 197ProgExperteBHR5.2 09.03.01 es

4 Control de ejecución del programa

4.1 Ramificaciones de programa

4.1.1 Instrucciones de salto

La formamás simple de la ramificaciónde programa la constituye la denominada instrucciónde salto incondicional. Esta puede, sin reflejar ninguna condicióndeterminada, serejecutadaen todo caso. A través de la instrucción

GOTO MARCA

el puntero del programa salta a la posición MARCA. Pero la posición deberá estar definidaimprescindiblemente con

MARCA:

en alguna parte del programa. La instrucción de salto propiamente dicha no permitededucciones acerca de la estructura de programa generada. Por consiguiente, se deberáelegir un nombre de marca de salto de modo que la acción de salto ligada a ella, sea máscomprensible. Por ej. es una diferencia notable si se escribe

GOTO MARCA_1

o

GOTO STOP_PEGAM

La instrucciónGOTO conduce rápidamente aprogramas noestructurados sin una buenavisiónglobal, dado que además cualquier instrucción GOTO puede ser sustituida por cualquier otrainstrucción de bucle, deberá, en lo posible, evitarse la utilización de GOTO.

Un ejemplo de “GOTO” se encuentra en este capítulo en el apartado [Bucles] bajo“Bucles no rechazantes”.

4.1.2 Ramificación condicionada

La instrucción IF permite la formulación de instrucciones condicionadas ofreciendo dosalternativas para la selección. En la forma más común la instrucción es la siguiente

IF Condición de ejecución THENInstrucciones

ELSEInstrucciones

ENDIF

La condición de ejecución es una expresión booleana. Si la condición de ejecución ha sidocumplidas, se ejecutará el bloque THEN. En el otro caso, puede ejecutarse el bloque ELSEo se prescide del mismo. Prescindir significa el abandono inmediato de la ramificación.

Se permiten la cantidad de instrucciones que se desee. Estas pueden constar a su vez deotras 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.

IF

Page 108: Programación experto - Kuka

Programación por el experto

108 de 197 ProgExperteBHR5.2 09.03.01 es

…INT A,B…IF $IN[10]==FALSE THEN

PTP HOMEELSE

IF A>B THEN$OUT[1]=TRUELIN PUNKT1

ENDIFA=A+1PTP HOME

ENDIF…

En la secuencia de programa que se presenta allado, se realiza un desplazamiento a la posiciónHOME, si la entrada 10 está puesta en FALSE. Siestá activada la entrada10 y si la variableAesma-yor que la variable B, se activa la salida 1 y se pro-duce un desplazamiento al punto 1.

Independientemente de A y de B, en caso de quese activa la entrada 10, se aumenta la variable Aen 1 y se produce el desplazamiento a la posiciónHOME.

4.1.3 DistribuidorSi existen más de 2 alternativas, se puede programar bien con una estructura IF encajadao 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 delprograma. Un criterio de selección es ocupado antes de la instrucción SWITCH con un valordeterminado. Si el valor concuerda con una identificación de bloque, se procesa laramificacióndeprogramacorrespondiente, saltandoel programa, sin tener enconsideraciónla identificación de bloque subsiguiente, hasta la instrucción ENDSWITCH. Si no concuerdauna identificacióndebloque conel criterio de selección, se procesará, en casode queexista,un bloque DEFAULT (por defecto). En caso contrario se continuaría con la instrucciónsiguiente a partir de la instrucción ENDSWITCH.A una ramificación de programa es permisible asignar varios identificadores de bloque. Sinembargo, a la inversa, no es recomendable utilizar un identificador de bloque repetidasveces ya que sólo es considerada la primera ramificación con la identificacióncorrespondiente.Los tipos de datos permitidos del criterio de selección son INT, CHAR y ENUM. El tipo de datodel 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 solavez dentro de una instrucción SWITCH.Con una instrucción SWITCH puede llamar p. ej. diferentes subprogramas en dependenciade un número de programa. El número de programa podría enviarse p. ej. del PLC a lasentradas digitales del KR C1. Así está disponible como criterio de selección en forma de unvalor Integer.DEF MAIN()…SIGNAL PROG_NR $IN[1] TO $IN[4]

;en la variable INT PROG_NR se transmite por el PLC;seguidamente el número de programa deseado

…SWITCH PROG_NR

CASE 1 ;en caso de PROG_NR=1PARTE_1()

CASE 2 ;en caso de PROG_NR=2PARTE_2()PARTE_2A()

CASE 3,4,5 ;en caso de PROG_NR=3, 4 o 5$OUT[3]=TRUEPARTE_345()

DEFAULT ;en caso de PROG_NR<>1,2,3,4 o 5ERROR_UP()

ENDSWITCH…END

SWITCH

Identificaciónde bloque

Page 109: Programación experto - Kuka

4 Control de ejecución del programa (continuación)

109 de 197ProgExperteBHR5.2 09.03.01 es

En forma similar está estructurado el programa CELL (CELL.SRC) estándar en la unidadde control.

4.2 BuclesLa estructura base siguiente para el control del procesamiento del programa son los buclesque contienen una o varias instrucciones de procesamiento repetitivas hasta que se hayacumplido una determinada condición. Los bucles se diferencian según la forma de la condi-ció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 siendorechazado por la unidad de control (mensaje de fallo).

4.2.1 Bucles de conteo

Los bucles de conteo son ejecutados hasta que la variable de conteo sobrepase o quedepor debajo de un determinado valor, bien mediante conteo ascendente o descendente. Enla KRL se tiene a disposición una instrucción FOR. Con

FOR Contador = Arranque TO Final STEP Ancho de pasoInstruccionesENDFOR

Deesta formasepermite, conunabuenavisiónglobal, programar una determinada cantidadde secuencias.

Como valor de Arranque y valor Final del contador deberá indicar, respectivamente, unaexpresión del tipo Integer (entero). Las expresiones son analizadas al principio del bucle.La variable INT Contador (por consiguiente deberá estar declarada previamente) esimpuesta con el valor de arranque, aumentando o disminuyendo según el ancho de pasotras cada secuencia del bucle.

El ancho de paso no debe ser ni una variable ni tampoco cero. Si se omite la indicacióndel ancho de paso, dispondrá por defecto el valor estándar 1. También se admiten valoresnegativos 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 deENDFOR.

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,JINT FELD[10,6]…FOR I=1 TO 6

$VEL_AXIS[I] = 100 ;Todas las velocidades de ejes al 100%ENDFOR…FOR I=1 TO 9 STEP 2

FOR J=6 TO 1 STEP -1FELD[I,J] = I*2 + J*JFELD[I+1,J] = I*2 + I*J

ENDFORENDFOR

;I adopta ahora el valor 11, J el valor 0…END

En el ejemplo que se muestra a continuación, se colocan lasvelocidades de ejes $VEL_AXIS[1]…$VEL_AXIS[6] a100%. Seguidamente se inicializan los componentes de uncampobidimensional con los valores calculados. El resultadose representa en Tab. 8.

Page 110: Programación experto - Kuka

Programación por el experto

110 de 197 ProgExperteBHR5.2 09.03.01 es

Index I =

1 2 3 4 5 6 7 8 9 10

6 38 8 42 24 46 40 50 56 54 72

5 27 7 31 21 35 35 39 49 43 63

J =4 18 6 22 18 26 30 30 42 34 54

J =3 11 5 15 15 19 25 23 35 27 45

2 6 4 10 12 14 20 18 28 22 36

1 3 3 7 9 11 15 15 21 19 27

Tab. 8 Resultado de cálculo para el ejemplo 5.2

4.2.2 Bucle rechazante

El bucle WHILE interroga al principio de la repetición sobre una condición de ejecución. Setrata deunbucle rechazante, yaquenoseejecuta ni una sola vez si lacondicióndeejecuciónno es cumplida ya desde el principio. La sintaxis del bucle WHILE es:

WHILE Condición de ejecuciónInstrucciones

ENDWHILE

La condición de ejecución es una expresión lógica que puede tratarse tanto de unavariable boolena, una llamada de función booleana o una combinación lógica con un resul-tado booleano.

El bloquede instrucciones seejecuta cuando la condición lógica ha tomado el valor deTRUE,es decir, que la condición de ejecución se ha cumplido. Cuando la condición lógica tiene elvalor FALSE, el programa continua procesándose detrás de la instrucción ENDWHILE. Porconsiguiente, deberá finalizar cada instrucción WHILE con una instrucción ENDWHILE.

DEF WHILE_PR()…INT X,W…WHILE $IN[4] == TRUE ;Ejecución mientras que entrada 4 activada

PTP PALETA$OUT[2] = TRUEPTP POS_2$OUT[2] = FALSEPTP HOME

ENDWHILE…X = 1W = 1WHILE W < 5; ;Ejecución mientras que W sea menor que 5

X = X * WW = W + 1

ENDWHILE;W ahora es 5

… ;X ahora es 1S2S3S4 = 24W = 100WHILE W < 100 ;Ejecución mientras que W sea menor que100

$OUT[15] = TRUE W = W + 1ENDWHILE… ;El bucle no se ejecuta nunca, W queda 100END

WHILE

Page 111: Programación experto - Kuka

4 Control de ejecución del programa (continuación)

111 de 197ProgExperteBHR5.2 09.03.01 es

4.2.3 Bucles no rechazantes

Lo contrario a un bucle WHILE es un bucle REPEAT. Con REPEAT se interroga al final delbucle acerca de la condición de interrupción. Por ello un bucle REPEAT realizará, en todocaso, el ciclo completo, incluso cuando se cumpla ya de entrada la condición de interrupcióndesde el principio del bucle.

REPEATInstrucciones

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 unresultado booleano:

DEF REPEAT_P()…INT W…REPEAT

PTP PALETA$OUT[2]=TRUEPTP POS_2$OUT[2]=FALSEPTP HOME

UNTIL $IN[4] == TRUE ;Ejecución hasta que se active la entrada 4…X = 1W = 1REPEAT

X = X * WW = W + 1

UNTIL W == 4 ;Ejecución hasta que W sea igual a 4;W ahora es 4

… ;X ahora es 1S2S3S4 = 24W = 100REPEAT

$OUT[15] = TRUEW = W + 1

UNTIL W > 100 ;Ejecución hasta que W sea mayor de 100... ;mín. 1 ejecución de bucle, es decir

;W ahora es 101, la salida 15 se activaEND

Con WHILE y REPEAT tiene en sus manos una herramienta muy potente para la programaciónestructurada, con esta podrá sustituir en la mayoría de los casos, las instrucciones GOTO. Lasecuencia de instrucción sepuede realizar por ejemplo de una formamáselegante conREPEAT:

…X = 0G = 0MARCA:X = X + GG = G + 1

IF G > 100 THENGOTO LISTO

ENDIFGOTO MARCA:LISTO:…

…X = 0G = 0REPEAT

X = X + GG = G + 1

UNTIL G > 100…

REPEATGOTO

REPEAT

Page 112: Programación experto - Kuka

Programación por el experto

112 de 197 ProgExperteBHR5.2 09.03.01 es

4.2.4 Bucles sinfín

Con la instrucción LOOP se pueden programar bucles sinfín:

LOOPInstrucciones

ENDLOOP

La ejecución repetida del bloque de instrucción sólo se puede finalizar mediante la instruc-ción EXIT.

Informaciones adicionales respecto a la instrucción Exit se encuentran en elpróximo apartado.

4.2.5 Terminación anticipada de la ejecución de bucles

Con la instrucción EXIT puede terminar cualquier bucle prematuramente. Llamando a EXITdentro de un bloque de instrucción del bucle, se terminan los ciclos de bucles, continuandoel programa detrás de la instrucción del final del bucle.

Seleccionando adecuadamente las condiciones de cancelación o de ejecución, no es nece-sario en la mayoría de las veces, utilizar la instrucción EXIT en bucles WHILE o REPEAT.Para los bucles sinfín, el EXIT es, sin embargo, la única posibilidad de finalizar la ejecucióndel bucle. Respecto a ello véase el ejemplo siguiente:

DEF EXIT_PRO()PTP HOMELOOP ;Inicio del bucle sinfín

PTP POS_1LIN POS_2IF $IN[1] == TRUE THEN

EXIT ;Cancelar, cuando entrada 1 activadaENDIFCIRC HELP_1,POS_3PTP POS_4

ENDLOOP ;Final del bucle sinfínPTP HOMEEND

LOOP

EXIT

Page 113: Programación experto - Kuka

4 Control de ejecución del programa (continuación)

113 de 197ProgExperteBHR5.2 09.03.01 es

4.3 Instrucciones de espera

Con la instrucción WAIT puede forzar la detención del programa hasta que se produzca unasituación determinada. Se haceuna diferenciaciónentre esperar que seproduzca uneventoy el establecimiento de temporizaciones de espera.

4.3.1 Espera a un evento

Con la instrucción

WAIT FOR Condición

puededetener el procesamiento del programahasta que se produzcael evento especificadocon Condición:

G Si la expresión lógica deCondicióndurante la llamadadeWAIT yaesTRUE,elproce-samiento del programa no será interrumpido (sin embargo se fuerza una parada delprocesamiento en avance).

G Si la condición es FALSE, el procesamiento del programa se interrumpirá hasta que laexpresión tome de nuevo el valor TRUE.

La condición WAIT FOR puede aplicarse a las variables $IN[], $OUT[], $CYCFLAG[],$TIMER[], $TIMER_FLAG[], $FLAG[] e I[].

El compilador no reconoce si la expresión no es capaz de tomar el valor TRUE debido auna formulación errónea. En este caso, se detiene indefinidamente el procesamiento delprograma debido a que el intérprete del programa espera a una condición irrealizable.

Valores numéricos

A cada variable se le asigna un número.

WAIT FOR ... Salida en la ventana demensajes

Significado

$IN[5] Espera a entrada 5 Espera hasta que la entrada 5tenga valor TRUE

$OUT[5]==FALSE Espera a no entrada 5 Espera hasta que la entrada 5tenga valor FALSE

$TIMER-FLAG[5] Espera a temporizador_Flag 5 Espera hasta que el temporiza-dor_Flag 5 tenga valor TRUE

$FLAG[5]==FALSE Espera a no flag 5 Espera hasta que el flag 5 tengavalor FALSE

$CYCFLAG[5] Espera a marca 5 Espera hasta que la marca 5tenga el valorTRUE

I[5]==9 Espera a contador 5 = = 9 Espera hasta que el contador 5tenga el valor “9”

WAIT

Page 114: Programación experto - Kuka

Programación por el experto

114 de 197 ProgExperteBHR5.2 09.03.01 es

Valores variablesEn lugar de un número se transfiere una variable. Para ello es necesario una declaración delas variables en la lista de datos (*.dat). Una convención en el archivo fuente (*.src) fija elvalor de la variable.

DEFDAT PROG1...DECL INT INT_VAR...

DEF PROG1()...INT_VAR=7...

Lista de datos: Archivo fuente:

En el ejemplo, a la variable INT_VAR se le asigna el valor “7”.

WAIT FOR ... Salida en la ventana demensajes

Significado

$IN[INT_VAR] Espera a entrada 7 Espera hasta que la entrada 7tenga valor TRUE

$OUT[INT_VAR]=FALSE

Espera a no entrada 7 Espera hasta que la entrada 7tenga valor FALSE

$TIMER[INT_VAR]>=300

Espera a temporizador 7 >=300

Espera hasta que el temporiza-dor 7 tenga el valor mínimo de300ms

$TIMER_FLAG[INT_VAR]

Espera a flag de temporiza-dor 7

Espera hasta que el flag deltemporizador 7 tenga el valorTRUE

$FLAG[INT_VAR]==FALSE

Espera a no flag 7 Espera hasta que el flag 7 tengael valor FALSE

$CYC-FLAG[INT_VAR]

Espera a marca 7 Espera hasta que la marca 7tenga el valor TRUE

I[INT_VAR]==9 Espera a contador 7 = = 9 Espera hasta que el contador 7tenga el valor “9”

También es posible un cálculo de expresiones. En el ejemplo, se le asignó a la variable X elvalor “1”, a Y el valor “2” y a Z el valor “3”.

WAIT FOR ... Salida en la ventana demensajes

Significado

$IN[x+y+z] Espera a entrada 6 Espera hasta que la entrada 6tenga valor TRUE

$CYCLAG[Z-X]==FALSE

Espera a no marca 2 Espera hasta que la marca 2tenga el valor FALSE

Devolución del valor de una función

Page 115: Programación experto - Kuka

4 Control de ejecución del programa (continuación)

115 de 197ProgExperteBHR5.2 09.03.01 es

Ejemplo: espera a “GHOST_AUS”

DEF Globals()...END

;FOLD GHOST_AUS (INT_PARAM:IN)GLOBAL DEFFCT BOOL GHOST_AUS (INT_PARAM:IN)

INT INT_PARAMIF $OUT[INT_PARAM] = = TRUE THEN

RETURN TRUEELSE

RETURN FALSEENDIF

ENDFCT;ENDFOLD

Textos largos

Si a una variable se le ha asignadoun texto largo, no se visualiza en pantalla la indicacióndelíndice numérico.

Condición de esperaWAIT FOR ...

Texto largo asignado Salida en la ventana demensajes

$IN[5] MiEntrada5 Espera a MiEntrada5

$OUT[3] MiSalida3 Espera a MiSalida3

$TIMER[8]>150 MiTemporizador8 Espera a MiTemporizador8 >150

$FLAG[16]==FALSE MiFlag16 Espera a no MiFlag16

$CYCFLAG[4] MiCycflag4 Espera a MiCycflag4

I[7]==9 MiContador7 Espera a MiContador7 == 9

Convención de señales

Enunaconvención de señales, que consta de varias entradas o salidas, se indica solamenteel nombre de la señal. En el ejemplo se han definido las señales “EIN_NAME $IN[7] TO$IN[17]” y “AUS_NAME $OUT[7] TO $OUT[17]”.

Condición de esperaWAIT FOR ...

Salida en la ventana demensajes

Significado

EIN_NAME Espera a NAME_EIN Espera a que todas las entradasde la convenciónde señales seanTRUE

AUS_NAME==FALSE Espera a no NAME_AUS Espera a que todas las salidas dela convención de señales seanFALSE

4.3.2 Tiempos de espera

La instrucción WAIT SEC sirve para programar los tiempos de espera en segundos:

WAIT SEC Tiempo

Tiempoes unaexpresiónaritméticaREAL, con la quepuede indicar la cantidadde segundosque desea que dure la interrupción del procesamiento del programa. Si el valor es negativo,no se produce la espera.

Ejemplos:

WAIT SEC 17.542WAIT SEC TIEMPO*4+1

Page 116: Programación experto - Kuka

Programación por el experto

116 de 197 ProgExperteBHR5.2 09.03.01 es

4.4 Detener el programa

Si desea interrumpir la ejecución del programa y detener el procesamiento, deberá progra-mar la instrucción

HALT

Pero la última instrucción de movimiento procesada es ejecutada completamente. Elprocesamiento continua presionando la tecla de arranque. A continuación se ejecutará lainstrucción subsiguiente después de HALT.

Casoespecial: enuna rutinade interrupción, se detendráel procesamientodelprogramamediante una instrucción HALT después de haber ejecutado el pro-cesamiento en avance (véase capítulo 7, “Tratamiento de interrupciones”).Excepción: en la programación de una instrucción BRAKE se para inmediatamente.

4.5 Confirmación de mensajes

Con la instrucción

CONFIRM V_Numero

puede confirmar por programa los mensajes confirmables. Después de realizar la confirma-ción con éxito, el mensaje especificado con un número de gestión V_Numero ya no estarádisponible.

Después de suprimir una señal de Stop se emite p. ej. siempre un mensaje confirmable.Antes de continuar el procesamiento del programa, el mensaje debe ser confirmado. Elsiguiente subprograma reconoce y confirmaautomáticamente estemensaje, en elmomentoque esté seleccionado el modo de servicio correcto (no servicio manual) y el estado quedeterminó la parada haya sido realmente solucionado (dado que un programa de robot noesta listo para funcionar si aún está presente un mensaje confirmable, deberá procesarseel subprograma en un fichero Submit):

DEF AUTO_QUIT()INT MDECL STOPMESS MLD ;Tipo de estructura predefinida para men-sajes de StopIF $STOPMESS AND $EXT THEN ;Verificar mensaje de Stop ycomprobar modo de servicio

M=MBX_REC($STOPMB_ID,MLD) ;lectura del estado actual enMLD

IF M==0 THEN ;Comprobación, si se puede producir laconfirmación

IF ((MLD.GRO==2) AND (MLD.STATE==1)) THENCONFIRM MLD.CONFNO ;Confirmación de este mensaje

ENDIFENDIF

ENDIFEND

HALT

CONFIRM

Page 117: Programación experto - Kuka

4 Control de ejecución del programa (continuación)

117 de 197ProgExperteBHR5.2 09.03.01 es

Page 118: Programación experto - Kuka

Programación por el experto

118 de 197 ProgExperteBHR5.2 09.03.01 es

5 Instrucciones de entrada/salida

5.1 GeneralidadesLaKRC... conoce 1026entradas y 1024 salidas. En el armario de la unidadde control están-dar deKUKA, el usuario dispone, enel conector X11 (móduloMFC), de lasentradas ysalidassiguientes:

Entradas 1 … 16Salidas 1 … 16(carga admisible máx. de 100 mA; 100% simultaneidad)Salidas 17 … 20(carga admisible máx. de 2 A; 100% simultaneidad)

Opcionalmente, pueden configurarse entradas/salidas adicionales como p. ej. a través debuses de campo.

Las entradas pueden ser leídas, las salidas pueden ser leídas y activadas. Estas son excita-das a través de las variables de sistema $IN[Nr] o $OUT[Nr]. Las salidas no utilizadaspueden usarse como marcas.

Las entradas/salidas del módulo MFC pueden conmutarse a otras zonas por medio delarchivo “IOSYS.INI”.

La unidad de control tipo “KR C2” se entrega, de forma estándar, sin E/S’s.

Pormotivos de seguridad, todas las instrucciones de entrada y de salida, así comolos accesos a las variables de sistema para entrada/salida, producen una paradadel procesamiento en avance.Los accesos a variables del sistema para entradas/salidas nogeneran unaparada del pro-cesamiento en avance con una predefinición de la instrucción CONTINUE.

Encontrará más información en el capítulo [Programación de movimiento], apartado[Procesamiento en avance].

5.2 Entradas y salidas binariasSi seexcitan entradas y salidas individualmente, sepuede hablar de entradas y salidas bina-rias. 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

$OUT[Nr] = TRUE y reseteadas con$OUT[Nr] = FALSE .

El estado de una entrada $IN[Nr] puede leerse dentro de una variable booleana o bien utili-zarse como expresión booleana en las instrucciones de programa, interrupción o disparo.

Encontrará más información en el capítulo [Control de ejecución del programa],capítulo [Tratamiento de interrupciones] capítulo [Trigger -- Acciones de conmuta-ción referentes a la trayectoria].

Las secuencias de instrucción

BOOL CONMUTADOR⋮CONMUTADOR = $IN[6]IF CONMUTADOR == FALSETHEN⋮ENDIF

IF $IN[6] == FALSE THEN⋮ENDIF

y

tienen, por consiguiente, el mismo significado.

Page 119: Programación experto - Kuka

5 Instrucciones de entrada/salida (continuación)

119 de 197ProgExperteBHR5.2 09.03.01 es

SIGNAL

En la KR C se pueden además asignar nombres a cada una de las entradas/salidas. Paraello sirve la declaración de la señal. Esta deberá estar ubicada, como todas las declaracio-nes, en la parte de declaración del programa. Es decir que también se puede programar:

SIGNAL CONMUTADOR $IN[6]⋮IF CONMUTADOR == FALSE THEN⋮ENDIF

La variable conmutador es declarada internamente como BOOL.

A las entradas y salidas del sistema puede accederse también con $IN y $OUT. Sinembargo, las salidas del sistema están protegidas contra escritura.La entrada 1025 siempre es TRUE, la entrada 1026 siemprees FALSE. Estas entradas sonutilizadas p. ej, en los datos de máquinas como variables “Dummy”. Se permite lamultiutilización.

DEF BINSIG ( );--------- Sección de declaración ---------EXT BAS (BAS_COMMAND :IN,REAL :IN )DECL AXIS HOMESIGNAL CANCELAR $IN[16]SIGNAL IZQUIERDA $OUT[13]SIGNAL CENTRO $OUT[14]SIGNAL DERECHA $OUT[15];---------- Inicialización ---------BAS (#INITMOV,0 ) ;Inicialización de velocidades,

;aceleraciones, $BASE, $TOOL, etc.HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

;------------- Sección principal------------PTP HOME ; desplazamiento COIIZQUIERDA=FALSECENTRO=TRUE ;en posición centralDERECHA=FALSEWHILE CANCELAR==FALSE ;Cancelar con entrada 16 activa

IF $IN[1] AND NOT IZQUIERDA THEN ;Entrada 1 activaPTP {A1 45}

IZQUIERDA=TRUE ;en posición izquierdaCENTRO=FALSEDERECHA=FALSE

ELSEIF $IN[2] AND NOT CENTRO THEN ;Entrada 2 activa

PTP {A1 0}IZQUIERDA=FALSE

CENTRO=TRUE ;en posición centralDERECHA=FALSE

ELSEIF $IN[3] AND NOT DERECHA THEN ;Entrada 3 activa

PTP {A1 -45}IZQUIERDA=FALSE

CENTRO=FALSEDERECHA=TRUE ;en posición derecha

ENDIFENDIF

ENDIFENDWHILEPTP HOMEEND

Page 120: Programación experto - Kuka

Programación por el experto

120 de 197 ProgExperteBHR5.2 09.03.01 es

Mediante la activación de las entradas 1,2 o 3 el robot puede desplazarse a tres posicionesdiferentes. Si el robot ha alcanzado la posición deseada, se muestra este hecho mediantela activación de las salidas correspondientes 13, 14 o bien 15.Yaqueestas salidasmuestran siempre la posiciónactual del robot sepuede evitar,mediantela consulta

IF $IN[1] AND NOT $OUT[13] THEN⋮ENDIF

de que el robot intente desplazarse de nuevo a la posición que ya tiene en cada ciclo deprocesamiento del bucle While. El robot se desplaza sólo cuando la entrada está activada(instrucción para el desplazamiento hasta la posición deseada) y la salida correspondienteno está activada (el robot aún no está en esa posición).

Con la activación de la entrada 16 se concluye el bucle While y por consiguiente, elprograma.

$IN [Nr] AND NOT $OUT[Nr]$OUT[Nr]

$IN [Nr] AND NOT $OUT[Nr]TRUE FALSE

$IN[Nr]TRUE FALSE TRUE

$IN[Nr]FALSE FALSE FALSE

Tab. 9 Tabla de veracidad para una combinación lógica “AND NOT”

Page 121: Programación experto - Kuka

5 Instrucciones de entrada/salida (continuación)

121 de 197ProgExperteBHR5.2 09.03.01 es

5.3 Entradas y salidas digitales

5.3.1 Declaración de la señal

Con la declaración de la señal no sólo se puede asignar a determinadas entradas/salidasun nombre, sinoque además, se puedenagrupar varias entradas/salidas binarias a una solaseñal digital. Con la declaración

SIGNAL SALI $OUT[10] TO $OUT[20]

se puede declarar ahora, p. ej., las salidas 10 hasta 20 a través de una variable internadeclarada como Entera SALI y activada como palabra de 11 bit.

La salida digital declarada de este modo, se puede definir para cada asignación enteraposible a la variable SALI, p. ej.:

SALI = 35SALI = ’B100011’SALI = ’H23’

G Las entradas/salidas deberán indicarse en la declaración de la señal, en ordenascendente, sin interrupciones.

G Como máximo, se pueden agrupar 32 entradas o salidas a una señal digital.

G Una señal puede aparecer en diferentes declaraciones de señales.

Si se agrupan las salidas 13 a15 del ejemplomostradoen unavariable denominadaPOSICION,resulta el siguiente programa modificado:

Page 122: Programación experto - Kuka

Programación por el experto

122 de 197 ProgExperteBHR5.2 09.03.01 es

DEF BINSIG_D ( )

;--------- Sección de declaración ---------EXT BAS (BAS_COMMAND :IN,REAL :IN )DECL AXIS HOMESIGNAL CANCELAR $IN[16]SIGNAL POSICION $OUT[13] TO $OUT[15]

;---------- Inicialización ---------BAS (#INITMOV,0 ) ;Inicialización de velocidades,

;aceleraciones, $BASE, $TOOL, etc.HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

;------------- Sección principal------------PTP HOME ;desplazamiento COIPOSICION=’B010’ ;en posición centralWHILE CANCELAR==FALSE ;Cancelar con entrada 16 activa

IF $IN[1] AND (POSICION<>’B001’) THEN ;Entrada 1 activaPTP {A1 45}POSICION=’B001’ ;en posición izquierda

ELSEIF $IN[2] AND (POSICION<>’B010’) THEN ;Entrada 2 activa

PTP {A1 0}POSICION=’B010’ ;en posición central

ELSEIF $IN[3] AND (POSICION<>’B100’) THEN;Entrada 3 activa

PTP {A1 -45}POSICION=’B100’ ;en posición derecha

ENDIFENDIF

ENDIFENDWHILEPTP HOMEEND

Encontrará más información en este mismo capítulo, dentro del apartado [Entradasdigitales predefinidas].

Page 123: Programación experto - Kuka

5 Instrucciones de entrada/salida (continuación)

123 de 197ProgExperteBHR5.2 09.03.01 es

5.3.2 Lectura de números de señal

Las entradas/salidas asignadas a una declaración de señal pueden ser probadas medianteel resumen de variables o la KRL (programas *.SRC o *.SUB).

Resumen de variables

Para ello solamente es necesario introducir “GET_SIG_INF” seguidodel nombrede la varia-ble o de la señal.

Nombre de variable/nombre de señal

Componentes estructurales

KRL

Primero se realiza la declaración de una variable del tipo de datos “SIGINF” en la secciónde declaraciones del programa.

DECL SIGINF Variable

A continuación, con esta variable se puede leer la declaración de señal.

Variable = GET_SIG_INF(nombre de señal)

Argumento Tipo dedatos

Significado

Variable SIGINF Una denominación cualquiera que puede constarde hasta 24 caracteres ASCII

Nombre de laseñal

CHAR Denominación de la declaración de señal, compue-sta de hasta 24 caracteres ASCII

Tab. 10 Argumentos en la instrucción GET_SIG_INF

Page 124: Programación experto - Kuka

Programación por el experto

124 de 197 ProgExperteBHR5.2 09.03.01 es

Componentes estructurales

El tipo de datos “SIGINF” contiene los siguientes componentes estructurales:

SIGINF Valor Significado

.TYP #IN La señal está declarada para las entradas

#OUT La señal está declarada para las salidas

#INV La señal no está declarada

#IN0 Reservada para usos futuros

#OUT0 Señal de las salidas del sistema ajustada como“FALSE”

.DTYP #SYSI Señal del sistema correspondiente al tipo de datos“Integer” (número entero)

#SYSB Señal del sistema correspondiente al tipo de datos“Booleano” (estado lógico)

#USRI Señal global definida por el usuario correspon-diente al tipo de datos “Integer”

#USRB Señal global definida por el usuario correspon-diente al tipo de datos “Booleano”

.IDX 0 Número de señal no válido o ajustado como“FALSE”

1 ... 4096 Número de señal válido

.LEN 0 Longitud de señal no es válida o está ajustadacomo “FALSE”

1 Longitud de señal para el tipo de datos “Booleano”

1 ... 32 Longitud de señal para el tipo de datos “Integer”

Tab. 11 Componentes estructurales del tipo de datos “SIGINF”

DEF SIGTEST ( )DECL SIGINF S_INFCHAR S_NAME[24]S_NAME[] = “$EXT_START”...S_INF = GET_SIG_INF(”$MOVE_ENABLE”)

IF (S_INF.IDX == 1025) OR (S_INF.IDX == 0) THENERROR()

ENDIF...S_INF = GET_SIG_INF(S_NAME[])

IF (S_INF.TYP == #INV) OR (S_INF.IDX == 0) THENERROR()

ENDIF...END

La consulta de los componentes estructurales “IDX” es suficiente en la mayoría de loscasos, ya que una señal no válida o ajustada como “FALSE” se detecta inmediatamente.

Por el contrario, la información detallada la proporciona el componente estructural “.LEN”.

Page 125: Programación experto - Kuka

5 Instrucciones de entrada/salida (continuación)

125 de 197ProgExperteBHR5.2 09.03.01 es

5.3.3 Activar salidas en el punto de destino

En el momento que el robot haya alcanzado el punto de destino de un paso demovimiento,puedenactivarsehasta 8 salidas referidas a la ejecuciónprincipal y sin detenciónde laejecu-ción en avance. Para ello sirve la siguiente instrucción:

$OUT_C[salida] = expresión booleana

Argumento Tipo dedatos

Significado

Salida INT Expresiónaritmética quedefine el númerode la salida quese debe activar. Existen las salidas 1 ... 1024

Expresiónbooleana

BOOL Expresión lógica que indica si la salida correspondienteserá ajustada como “TRUE” o “FALSE”

Normalmente se pueden utilizar las salidas 1 ... 1024. Si la variable “$SET_IO_SIZE” hasido ajustada correspondientemente, estarán disponibles las salidas 2048 o 4096.

Si el puntero de ejecución en avance alcanza la instrucción, se interpretará primeramentela expresión booleana. Laexpresión afectada se transformaráen una constante. Al alcanzarel puntero de la ejecución principal, se activan entonces las salidas interpretadas.

Una asignación podría, por ejemplo, tener la siguiente forma:$OUT_C[TOOL[ex]+WELD[y]] = ((NOT(x==100)) AND (SAFE==TRUE))Después de efectuada la interpretación (puntero de ejecución en avance) la instruc-ción puede tener internamente, p. ej., la siguiente forma:$OUT_C[5] = TRUE

Con ello, al alcanzarse el punto de destino (puntero de ejecución principal) la salida 5 re-cibe el valor “TRUE”.

Al alcanzar el puntero de ejecución principal del programa, la salida es puesta al valor defi-nido por la expresión booleana, válida en el instante de la interpretación, aún cuando estevalor pudo haber sido modificado desde entonces.

Una instrucción “$OUT_C[x]”, al contrario que una “$OUT[x]”, no influye sobre el procesa-miento en avance.

$OUT_C[x] sólo puede ser escrita; para leer una salida debe utilizarse “$OUT[x]”.

Una selección de pasos borra todas las asignaciones “$OUT_C[x]” que hasta ese mo-mento han sido interpretadas pero noactivadas. Esto es válido para una selección depasoy para un reset del programa.

PTP P1$OUT_C[10] = TRUE$OUT_C[11]=FALSE$OUT_C[12] = TRUELIN P2

Si en el punto “P1” se produce una parada exacta, en ese momento se activan lassalidas 10 ... 12 de acuerdo con su definición.

Si, por el contrario, el punto “P1” es alcanzado mediante posicionamiento aproximado,las salidas 10 ... 12 sólo se activarán cuando se haya alcanzado el centro de la zonade aproximación. Si no es posible efectuar un posicionamiento aproximado, las salidasse activan en el punto “P1”.

En las instrucciones PTP, LIN y CIRC absolutasy relativas, la salida se activa inmediatamentedespués de la correspondiente instrucción demovimiento.

En los modos de ejecución de programa “Single--Step” (MSTEP) e “I--Step” (ISTEP)primero se efectúa en el punto P1 una parada del procesamiento en avance; en estemomento las salidas no se activan. Las salidas definidas solamente se activan al soltary pulsar de nuevo la tecla de arranque.

Page 126: Programación experto - Kuka

Programación por el experto

126 de 197 ProgExperteBHR5.2 09.03.01 es

Un desplazamiento COI causa también una detención del procesamiento en avance. Reciéndespués de un rearranque del programa, se activan las salidas de acuerdo con su definición.

Comparación con disparo (Trigger)

Tanto con “$OUT_C[x]” como con “Trigger” (disparo) pueden activarse salidas tomandocomo referencia la ejecución principal y sin que haya parada del procesamiento en avance.

$OUT_C[x]:

PTP P1 C_PTP$OUT_C[5]=TRUEPTP P2

Trigger:

TRIGGER WHEN DISTANCE=1 DELAY=0 DO $OUT[5]=TRUEPTP P1 C_PTPPTP P2

En ambos casos, la salida 5 se activa en cuanto se alcanzael centro de la zona deaproxima-ción de “P1”.

Puntero de ejecución principal

Si los punteros de procesamiento en avance y de ejecución principal son idénticos (es decir,el robot no ejecuta actualmente ningún paso demovimiento), la asignación se efectúa inme-diatamente al alcanzarse la instrucción “$OUT_C[]”.

PTP P1WAIT FOR $IN[22]==TRUE$OUT_C[12]=FALSEPTP P2

En el ejemplo, en la línea “WAIT...” se crea una parada del procesamiento en avancemien-tras la entrada 22 se encuentra en “FALSE”. En cuanto en la entrada 22 aparece el estado“TRUE” la salida 12 se activa.

Señal

Una salida también puede ser activada mediante una convención de señal de 1 bit.

SIGNAL Test $OUT_C[7]

PTP P1Test = TRUEPTP P2

Enel ejemplo, la salida 7pasaa “TRUE” en cuanto el puntero deejecuciónprincipal haalcan-zado el paso de movimiento “P1”.

En las siguientes condiciones no está permitido “$OUT_C[x]”:

G Dentro de programas de interrupción o declaraciones de interrupción

G En un programa Submit

G En combinación con “$CYCFLAG[x]”

G Dentro de una instrucción de Trigger (disparo)

G En relación con la corrección de variables

Page 127: Programación experto - Kuka

5 Instrucciones de entrada/salida (continuación)

127 de 197ProgExperteBHR5.2 09.03.01 es

5.4 Salidas de impulso

PULSE

Con la instrucción PULSE pueden activarse o desactivarse cada una de las salidas duranteun tiempo determinado. La instrucción

PULSE($OUT[4],TRUE,0.7)

pone por ejemplo, a nivel alto, la salida 4 durante 0,7 segundos. Este impulso puede procesarseparalelamente con el programa del robot (durante este proceso no se detiene el intérprete).

En vez de la indicación directa de la salida con $OUT[Nr] puede haber una variable de señal.

Encontrará más información en este capítulo, dentro del apartado [Entradas y salidasbinarias].

Las temporizaciones de impulsos realizables van de 0.012 a 231 segundos. La retícula es

de 0.1 segundos. La unidad de control redondea todos los valores a una décima.

G Se pueden programar como máx. 16 salidas de impulsos simultáneamente.

G Se pueden programar tanto impulsos High (alto) como impulsos Low (bajo).

G Con las funciones “Resetear programa” o “Cancelar programa” se interrumpe elimpulso.

G Un impulso activado puede ser influenciado mediante interrupciones.

G Las salidas de impulsos puedenser programadas también desdeel nivel de la unidadde control.

G La instrucción PULSE origina una parada del procesamiento en avance. Sólo en lainstrucción TRIGGERse ejecuta siguiendo el movimiento.

Un impulso NO es interrumpido con

G PARADA DE EMERGENCIA, parada de operación o parada de error,

G llegar al fin del programa (instrucción END),

G soltar la tecla de arranque si el impulso fue programado antes de la primerainstrucción de movimiento y el robot no ha alcanzado aún COI.

En el programa siguiente encontrará algunos ejemplos de utilización de la instrucciónPULSE:

Page 128: Programación experto - Kuka

Programación por el experto

128 de 197 ProgExperteBHR5.2 09.03.01 es

DEF PULSIG ( )

;--------- Sección de declaración ---------EXT BAS (BAS_COMMAND :IN,REAL :IN )DECL AXIS HOMEINT ISIGNAL OTTO $OUT[13]

;---------- Inicialización ---------BAS (#INITMOV,0 ) ;Inicialización de velocidades,

;aceleraciones, $BASE, $TOOL, etc.HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

FOR I=1 TO 16$OUT[I]=FALSE ;puesta de todas las salidas a nivel LOWENDFOR

;------------- Sección principal------------PULSE ($OUT[1],TRUE,2.1) ;El impulso llega directo durante 2.1sPTP HOME ; desplazamiento COI

OTTO=TRUE ;poner la salida 13 en TRUEPTP {A3 45,A5 30}PULSE (OTTO,FALSE,1.7) ;Impulso LOW durante 1.7s en salida 13

;El impulso llega después delmovimiento

WAIT SEC 2FOR I=1 TO 4PULSE ($OUT[I],TRUE,1) ;salidas 1-4 en orden consecutivoWAIT SEC 1 ;durante 1s a HighENDFOR;colocación de un impulso con referencia a la trayectoriaTRIGGER WHEN DISTANCE=0 DELAY=50 DO PULSE ($OUT[8],TRUE,1.8)LIN {X 1391,Y -319,Z 1138,A -33,B -28,C -157}PTP HOMECONTINUE ;Evitar parada de procesamiento enavance para la salida 15PULSE ($OUT[15],TRUE,3) ;El impulso llega directo (en

procesamiento en avance);en salida 16

PULSE ($OUT[16],TRUE,3) ;El impulso llega después deldesplazamiento HOME

END ;y queda aún después de END

Observe detenidamente estos ejemplos, a partir de que momento están presentes losimpulsos programados en las salidas: generalmente la instrucción PULSE produce siempreuna parada del procesamiento en avance. Por tanto, el impulso está presente después definalizar el movimiento.

Existen dos formas de evitar la parada del procesamiento en avance:

G Programación de una instrucción CONTINUE justo antes de antes de la instrucciónPULSE.

G Utilización de la instrucción PULSEdentro de una instrucción TRIGGER (acción deconmutación referida a la trayectoria).

Encontrará más información en el capítulo [Programación de movimiento], apartado[Procesamiento en avance] (CONTINUE) y capítulo [Trigger -- Acciones deconmutación referentes a la trayectoria] (TRIGGER).

Page 129: Programación experto - Kuka

5 Instrucciones de entrada/salida (continuación)

129 de 197ProgExperteBHR5.2 09.03.01 es

5.5 Entradas y salidas analógicas

Además de las entradas y salidas binarias, la KR C... reconoce también entradas y salidasanalógicas. A través de los sistemas de bus opcionales, laKRCpone adisposición 32entra-das analógicas y 32 salidas analógicas. Las salidas pueden ser leídas y escritas mediantelas variables de sistema $ANOUT[1]… $ANOUT[32], las entradas sólo pueden ser leídascon las variables $ANIN[1]… $ANIN[32].

ANIN y ANOUT

Las entradas y las salidas pueden ser activadas tanto estáticamente como dinámicamente,es decir mediante una consulta permanente en el ciclo de interpolación (actualmente es de12 ms). Mientras que la lectura y escritura estática se produce igual que con las señalesbinarias mediante una simple asignación de valor, el procesamiento dinámico utilizainstrucciones especiales de ANIN y ANOUT.

5.5.1 Salidas Analógicas

Los valores de emisión para las 32 salidas analógicas de la KR C se encuentran comprendi-dos entre --1.0… +1.0 y están normalizados a una tensión de salida de ±10.0 V. Si el valorde salida supera la tolerancia de ±1.0, el valor es recortado.

Para activar un canal analógico, se la asigna simplemente un valor a la variable $ANOUTcorrespondiente:

$ANOUT[2] = 0.5 ;el canal analógico 2 se pone a +5 V

o

REAL V_PEGAM

V_PEGAM = -0.9

$ANOUT[15] = V_PEGAM ;el canal analógico 15 se pone a -9 V

Estas asignaciones son estáticas, ya que el valor del canal excitado cambiará cuando sele haya asignado a la variable de sistema $ANOUT[Nr]correspondiente un nuevo valorexplícito.

A veces se desea que una salida analógica determinada vaya adquiriendo nuevos valoresenun tiempodeciclo prefijadodurante el procesamiento del programa.Esta salidaanalógicase realiza con la instrucción ANOUT. Con la instrucción

ANOUT ON HILO = 0.8 * V_HILO

Así p. ej. mediante una simple asignación de valor a la variable V_HILO, puede variar lasalida analógica especificada con la variable de señal HILO. La tensión en la salidacorrespondiente sigue así a la variable V_HILO.Previamente se debe por supuesto declarar la variable HILO, con la declaración SIGNAL,p. ej.:

SIGNAL HILO $ANOUT[2]

Con

ANOUT OFF HILO

finaliza de nuevo la emisión analógica cíclica.

La expresión actualizada cíclica que se ha de indicar para el cálculo del valor de emisiónanalógica, no debe sobrepasar un nivel de complejidad determinado. Por talmotivo, la sinta-xis admisible está limitada y orientada a la tecnología. La sintaxis completa es

Page 130: Programación experto - Kuka

Programación por el experto

130 de 197 ProgExperteBHR5.2 09.03.01 es

ANOUT ON

ANOUT ON Nombre de señal = Factor * Elemento de regulación ⟨±Offset⟩ ⟨DELAY=t⟩ ⟨MINIMUM=U1⟩ ⟨MAXIMUM=U2⟩

para el inicio de la emisión analógica cíclica, o bien,

ANOUT OFF

ANOUT OFF Nombre de señal

para la finalización. El significado de cada uno de los argumentos se puede ver en Tab. 12.

Argumento Tipo dedatos

Significado

Nombre dela señal

REAL Variable de señal que especifica la salida analógica (debeestar declarada con SIGNAL). No se permite la indicacióndirecta de $ANOUT[Nr].

Factor REAL Cualquier factor pudiéndose tratar de variable, nombre deseñal o constante.

Elemento deregulación

REAL A través del elemento de regulación se influye la salidaanalógica. Puede tratarse de una variable o nombre deseñal.

Offset REAL Opcionalmente puede programarse un offset como ele-mento de regulación. El offset debe ser una constante.

T REAL Con la palabra clave DELAY y una indicación de tiempopo-sitiva o negativa, se puede optar entre retardar (+) o ade-lantar (--) una señal de salida calculada cíclicamente.

U1 REAL La palabra clave MINIMUM define la tensión mínima queapareceen la salida. Los valores permitidos seencuentranentre --1.0 ... 1.0 (que corresponde a --10V ... +10V). El va-lor mínimo debe ser menor que el valor máximo, siempreque se utilicen ambos valores.

Como valor también se permite una variable, unacomponente de estructura o un elemento de grupo.

U2 REAL La palabra clave MAXIMUM define la tensión máxima queapareceen la salida. Los valores permitidos seencuentranentre --1.0 ... 1.0 (que corresponde a --10V ... +10V). El va-lor máximo debe ser mayor que el valor mínimo, siempreque se utilicen ambos valores.

Como valor también se permite una variable, unacomponente de estructura o un elemento de grupo.

Tab. 12 Argumentos en la instrucción ANOUT

Los parámetros opcionales “Minimum” y “Maximum” no están disponibles en losformularios inline, ya que solamente se utilizan para la tecnología “Aplicación depegamentos”.

Page 131: Programación experto - Kuka

5 Instrucciones de entrada/salida (continuación)

131 de 197ProgExperteBHR5.2 09.03.01 es

En este ejemplo se han definido tanto un valor mínimo (Minimum) como un valor máximo(Maximum). Las definiciones correspondientes se escriben “MINIMUM=0.3” y“MAXIMUM=0.95”.

Velocidad de trayectoria [mm/s]

Tensiónanalógica[mV]

10 000

8 000

6 000

4 000

2 000

0 200100 300 400 500

Uhilo [mV]

Uestándar [mV]

Maximum

Minimum

Fig. 45 Tensión analógica en dependencia de la velocidad de trayectoria

5.5.2 Entradas analógicas

Las 32 entradas analógicas de la KR C pueden leerse en una variable REAL a través de lasvariables $ANIN[1] a $ANIN[32] mediante una simple asignación de valor:

REAL PARTE⋮PARTE = $ANIN[3]

o

SIGNAL SENSOR3 $ANIN[3]REAL PARTE⋮PARTE = SENSOR3

Los valores en $ANIN[Nr] se mueven entre +1.0 y --1.0 que representan una tensión deentrada de +10 V hasta --10 V.

ANIN

Para la lectura cíclica de entradas analógicas se usa la instrucción ANIN. Con ella se puedetomar lectura hasta 3 entradas analógicas simultáneamente. La lectura se realiza en el ciclode interpolación.

Con la secuencia de instrucciones

SIGNAL SENSOR3 $ANIN[3]REAL PARTE⋮ANIN ON PARTE = 1 * SENSOR3

puede leer la entrada analógica 3 cíclicamente y con la instrucción

ANIN OFF SENSOR3

concluir la lectura.

Se debe tener en cuenta que, no pueden estar simultáneamente activadas más de 3instrucciones ANIN ON. Para ambas instrucciones se permite acceder a la misma interfazanalógica o asignar la misma variable.

Page 132: Programación experto - Kuka

Programación por el experto

132 de 197 ProgExperteBHR5.2 09.03.01 es

La sintaxis completa para la lectura cíclica de una entrada analógica es la siguiente:

ANIN ON

ANIN ON Valor = Factor * Nombre de señal ⟨± Offset⟩

La finalización del seguimiento cíclico la efectúa con

ANIN OFF

ANIN OFF Nombre de señal

El significado de los argumentos puede tomarlos de Tab. 13.

Argumento Tipo dedatos

Significado

Valor REAL El valor puede ser una variable o un nombre de señal(de salida). En Valor se registra el resultado de la lec-tura cíclica.

Nombre dela señal

REAL Variable de señal que especifica la entrada analógica(deberá estar declarada con SIGNAL). No se permite laindicación directa de $ANIN[Nr].

Factor REAL Cualquier factor pudiéndose tratar de variable, nombrede señal o constante.

Offset REAL Opcionalmente puede programarse un offset. El offsetpuede ser una constante, una variable o un nombre deseñal.

Tab. 13 Argumentos en la instrucción ANIN

En el ejemplo mostrado a continuación se ilustran las instrucciones para las entradas ysalidas analógicas. Con la ayuda de la variable del sistema $TECHIN[1] y un sensor deseguimiento de trayectoria conectado a la entrada analógica, se puede realizar p. ej. unacorrección de trayectoria durante el movimiento. La variable $VEL_ACT, que contienepermanentemente la velocidad de trayectoria, puede ir valorada con los factorescorrespondientes utilizándola para la salida analógica proporcional a la velocidad, p. ej. paracontrolar la cantidad de pegamento en una aplicación de adhesivo.

Page 133: Programación experto - Kuka

5 Instrucciones de entrada/salida (continuación)

133 de 197ProgExperteBHR5.2 09.03.01 es

DEF ANSIG ( )

;--------- Sección de declaración ---------EXT BAS (BAS_COMMAND :IN,REAL :IN )DECL AXIS HOMEINT ISIGNAL ADHESIVO $ANOUT[1] ;Abertura de boquilla para adhesivoSIGNAL CORRECCIÓN $ANIN[5] ;Sensor de seguimiento de trayectoria

;---------- Inicialización ---------BAS (#INITMOV,0 ) ;Inicialización de velocidades,

;aceleraciones, $BASE, $TOOL, etc.HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

FOR I=1 TO 16$ANOUT[I]=0 ;Poner todas las salidas a 0 VENDFOR

;------------- Sección principal------------PTP HOME ; desplazamiento COI

$ANOUT[3] = 0.7 ;Salida analógica 3 a 7V

IF $ANIN[1] >= 0 THEN ;Proceso de pegado sólo si la entrada;analógica 1 tiene tensión positiva

PTP POS1;Corrección de trayectoria de acuerdo con la señal del sensor;con la ayuda de las variables del sistema $TECHINANIN ON $TECHIN[1] = 1 * CORRECCIÓN + 0.1;salida analógica proporcional a la velocidad; variables de

sistema $VEL_ACT contiene la velocidad actualANOUT ON ADHESIVO = 0.5 * $VEL_ACT + 0.2 DELAY = -0.12LIN POS2CIRC POSINTERMED,POS3ANOUT OFF ADHESIVOANIN OFF CORRECCIÓN

PTP POS4ENDIFPTP HOMEEND

Page 134: Programación experto - Kuka

Programación por el experto

134 de 197 ProgExperteBHR5.2 09.03.01 es

5.6 Entradas digitales predefinidas

La unidad de control ofrece 6 entradas digitales que pueden ser leídas a través de las varia-bles de señal $DIGIN1…$DIGIN6. Las entradas forman parte de las entradas de usuarionormales. Pueden tener una longitud de 32 bit con su salida Strobe correspondiente.

La configuración de las entradas digitales se realiza en los datos de máquina: “/mada/steu/$maschine.dat”. Con una declaración de la señal se establece primeramente elrango y el tamaño de la entrada digital:

SIGNAL $DIGIN3 $IN[1000] TO $IN[1011]

Mediante las demás variables de sistema $DIGIN1CODE…$DIGIN6CODE,$STROBE1…$STROBE6 y $STROBE1LEV…$STROBE6LEV se prefijan las interpretacionesdel signo, las salidas Strobe correspondientes y la clase de la salida Strobe:

DECL DIGINCODE $DIGIN3CODE = #UNSIGNED ;sin signo

SIGNAL $STROBE3 $OUT[1000] ;Prefijar la salida Strobe

BOOL $STROBE3LEV = TRUE ;Strobe es un impulso high

Una salida Strobe es una salida de la KR C... con un impulso determinado que produce lacongelación de la señal para la lectura de un aparato externo (p. ej. codificador).

Mientras queentradas digitales diferentes puedenacceder a lamismaentrada, lasseñalesStrobe, NO pueden escribir la misma salida.

El rangode valores de$DIGIN1…$DIGIN6dependede la longituddel grupode bit definida,así como de la interpretación del signo ((#SIGNED o #UNSIGNED) a partir de:

12 bits con signo (#SIGNED) rango de valores: --2048…2047

12 bits sin signo (#UNSIGNED) rango de valores: 0…4095

Las entradas digitales se pueden leer estáticamente mediante una asignación ordinaria devalores o cíclicamente con una instrucción DIGIN:

INT NÚMERO⋮NÚMERO = $DIGIN2

INT NÚMERO⋮DIGIN ON NÚMERO = FACTOR * $DIGIN2 +OFFSET⋮DIGIN OFF $DIGIN2

DIGINAsignación devalor

Se permiten hasta 6 instrucciones DIGIN ON al mismo tiempo. En la instrucción DIGIN ON,también se puede acceder a la señal de entrada analógica (p. ej. como FACTOR). La sintaxises exactamente análoga a la instrucción ANIN ON:

DIGIN ON

DIGIN ON Valor = Factor * nombre de señal ⟨± Offset⟩

DIGIN OFF

DIGIN OFF Nombre de señal

Page 135: Programación experto - Kuka

5 Instrucciones de entrada/salida (continuación)

135 de 197ProgExperteBHR5.2 09.03.01 es

El significado de los argumentos puede tomarlos de Tab. 14.

Argumento Tipo dedatos

Significado

Valor REAL El valor puede ser una variable o un nombre de señal(de salida). En Valor se registra el resultado de la lec-tura cíclica.

Nombre dela señal

REAL Variable de señal que especifica la entrada digital. Sólose permiten $DIGIN1…$DIGIN6

Factor REAL Cualquier factor pudiéndose tratar de variable, nombrede señal o constante.

Offset REAL Opcionalmente puede programarse un offset. El offsetpuede ser una constante, una variable o un nombre deseñal.

Tab. 14 Argumentos en la instrucción DIGIN

Page 136: Programación experto - Kuka

Programación por el experto

136 de 197 ProgExperteBHR5.2 09.03.01 es

6 Subprogramas y funciones

Para reducir durante la programación la tarea de escribir aquellos apartados de programaque se repiten con frecuencia, así como la longitud del programa, sehan introducido subpro-gramas y funciones como construcción de lenguaje.

Un efecto de los subprogramas y de las funciones que no conviene infravalorar es la posibili-dad de volver a utilizar en otros programas los algoritmos que ya han sido registrados, y es-pecialmente el uso de subprogramas para estructurar el programa. Este tipo de estructura-ción puede generar un estructura jerárquica, de modo que se pueda activar cada uno de lossubprogramas por un programa de nivel superior, se puedan procesar completamente ta-reas parciales y se puedan enviar los resultados.

6.1 Declaraciones

Un subprograma o una función son partes de programas separadas, con encabezamientodeprograma, seccióndedeclaraciones y de instrucciones, que pueden llamarse desde cual-quier 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 elsubprograma.

Desde un subprograma o bien una función, pueden llamarse otros subprogramas y/o funcio-nes. Laprofundidaddeencajadopermitida en este caso es de 20. Si seexcede este número,aparecerá un mensaje de fallo indicando “REBASE APILAMIENTO DE PROGRAMA”. Lallamada 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.

DEF

Todos los subprogramas se declaran exactamente igual que los programas principales, conla convención DEF más el nombre, y se cierran con END, p. ej.:

DEF SUBPROG()…END

DEF PROG() ;Programa principal…SUBPROG() ;Llamada subprograma…SUBPROG() ;Llamada subprograma…END ;Fin programa principal

DEF SUBPROG() ;Subprograma…END ;Fin subprograma

PROG.SRC

Fig. 46 Llamada subprograma y salto atrás

Page 137: Programación experto - Kuka

6 Subprogramas y funciones (continuación)

137 de 197ProgExperteBHR5.2 09.03.01 es

DEFFCT

Al contrario que los subprogramas, las funciones emiten un valor de retorno. Una funcióncomienza con la palabra clave “DEFFCT”. El tipo de datos del valor de retorno se indicainmediatamente después de la palabra clave “DEFFCT”. El propio valor de retorno estransferidomediante “RETURN”. Mediante la palabra clave “ENDFCT” se finaliza la función.

DEFFCT INT Función()

DECL INT Sample

Sample = 11

RETURN Sample

ENDFCT

Si falta la instrucción “RETURN” aparecerá un error de tiempo de ejecución.

En general, se diferencia entre subprogramas/funciones locales y globales.

Local

En el caso de los subprogramas o funciones locales, el programa principal y los subprogramas/las funciones se encuentran en elmismo archivo SRC. El archivo ostenta el mismo nombre queel programa principal. El programa principal estará en el texto fuente siempre en primer lugar,mientras que los subprogramas y funciones pueden estar ordenados en cualquier orden y canti-dad después del programa principal. Las funciones /los subprogramas locales pueden llamarsesólo dentro de los archivos SRC en los cuales fueron programados.

Global

Si se desea que otros programas puedan llamar a los subprogramas/las funciones, estosprogramas deben ser del tipo global, es decir, deberán estar memorizados en un ficheroSRC propio. Como alternativa, se puede anteponer a un subprograma local la palabra clave“GLOBAL”.Todos los programas se convierten en subprogramas cuando son llamados desde otro pro-grama (programa principal, subprograma o función).

G En los subprogramas o las funciones locales, se conocen todas las variablesdeclaradas en la lista de datos del programa principal. Las variables que han sidodeclaradas en el programa principal (archivo SRC) son las llamadas “VariablesRuntime”. Estas variables sólo deben ser utilizadas en el programa principal. Si seintenta utilizar estas variables en un subprograma, aparecerá el correspondientemensaje de fallo.En los subprogramas o funciones globales, las variables declaradas dentro delprograma principal no son conocidas.

G En el programa principal, las variables declaradas en subprogramas o funcionesglobales no son conocidas.

G Un programa principal no puede acceder a subprogramas o funciones locales deotroprograma principal.

G El nombre de los subprogramas/las funciones locales pueden tener como máximo24 caracteres. En el caso de los subprogramas/las funciones globales, el nombrepuede tener como máximo 24 caracteres (debido a la extensión de archivo).

Para que el subprograma global sea conocido por el programa principal, tan sólo es necesa-rio llamarlo dentro del programa principal (por ej: PROG_2()).Ejemplo:

PROG_3()VAR = Funktion()

En Fig. 47 se muestra la diferencia entre subprogramas/funciones locales y globales:PROG.SRC, PROG_1.SRC y PROG_3.SRC son programas principales independientes,

Page 138: Programación experto - Kuka

Programación por el experto

138 de 197 ProgExperteBHR5.2 09.03.01 es

PROG_2FUN.SRC es una función. Cuando un programa (por ej. PROG_1.SRC) es llamadodesde PROG.SRC, se convierte automáticamente en un subprograma global. LOCAL() esun subprograma local, LOCALFUN() una función local de PROG.SRC.

DEF PROG()EXT PROG_1()EXT PROG_3()…A=A*LOCALFUN()LOCAL()…PROG_3()PROG_1()…END

DEF LOCAL()EXTFCT PROG_2FUN()PROG_2FUN()G=PROG_2FUN()H=5+LOCALFUN()END

PROG.SRC

DEFFCT INT LOCALFUN()INT INTVARRETURN INTVARENDFCT

DEF PROG_1()…END

DEFFCT INT PROG_2FUN()INT AEXT PROG_1()PROG_1()PROG_1()…ENDFCT

DEF PROG_3()…END

PROG_1.SRC

PROG_2FUN.SRC

PROG_3.SRC

Fig. 47 Diferencia entre subprogramas locales y globales

La palabra clave “EXT” es necesaria cuando enel editor se introduce la respectiva llamadade subprograma/función.

Page 139: Programación experto - Kuka

6 Subprogramas y funciones (continuación)

139 de 197ProgExperteBHR5.2 09.03.01 es

6.2 Llamada y transferencia de parámetros

La llamada de un subprograma se realiza simplemente indicando el nombre del subpro-grama y paréntesis normales. Así pues, su aspecto es el de una instrucción, p. ej.:

SUBPROG1()

Una llamada de función es una forma especial de asignación de valor. Por consiguiente, unafunción no puede estar sola. Antes bien, el valor de la función debe ser asignado siempredentro de la expresión de una variable del mismo tipo de datos, p. ej.:

INTVAR = 5 * INTFUNCIÓN() + 1REALVAR = REALFUNCIÓN()

Lista de parámetros

En los subprogramas y las funciones locales, se conocen todas las variables declaradas enla lista dedatos del programaprincipal. Por el contrario, en los subprogramas globales, estasvariables sondesconocidas. Noobstante, a través deuna lista deparámetros puede transfe-rirse también valores a subprogramas y funciones globales.

A menudo conviene también en los subprogramas y funciones locales la transferencia conlistas de parámetros, ya que de ese modo se puede establecer una separación clara entreel programa principal y el subprograma/la función: las variables declaradas en el programaprincipal (archivo SRC) sólo se utilizan en éste; todas las transferencias en subprogramasy funciones (locales y globales) se efectúan por medio de listas de parámetros. Medianteesta forma de programación estructurada se reducen notablemente los errores de progra-mación.

Para transferir parámetros existen dos mecanismos diferentes:

G Call by value (IN)

En este tipo de transferencia, se transfiere un valor del programa principal a unavariable del subprograma o de la función. El valor transferido puede ser una constante,una variable, una llamada de función o una expresión. Si se trata de diferentes tiposde datos, siempre que sea posible se realizará una adaptación de tipos.

G Call by reference (OUT)

A través de “Call by reference” se transfiere sólo la dirección de una variable del pro-grama principal al subprograma o a la función. El subprograma/función llamado puedeentonces sobreescribir la zona de memoria mediante un nombre de variable propio ydeesemodomodificar el valor de la variable enel programaprincipal. Por consiguiente,los tipos de datos utilizados deberán ser idénticos; en este caso no se puede efectuaruna adaptación de tipos.

En Fig. 48 se muestra la diferencia entre ambos métodos. Mientras que la variable X con“Call by value” permanece invariable en el programa principal debido a la zona de memoriaseparada, con “Call by reference” es sustituida por la variable NÚMERO en la función.

Page 140: Programación experto - Kuka

Programación por el experto

140 de 197 ProgExperteBHR5.2 09.03.01 es

DEF PROG()INT X,Y,E…X=5*3Y=QUADRAT(X) ;Y=225E=Y/X…END

GLOBAL DEFFCT INTQUADRAT(NÚMERO:IN)INT NÚMERONÚMERO=NÚMERO*NÚMERORETURN(NÚMERO)ENDFCT

GLOBAL DEFFCT INTQUADRAT(NÚMERO:OUT)INT NÚMERONÚMERO=NÚMERO*NÚMERORETURN(NÚMERO)ENDFCT

X

NÚMERO15225

15

15

⇒ X=15Y= 225E=15

15

15

225

225

Call by value

Call by reference

225

⇒ X=225Y= 225E=1

X,NÚMERO

Fig. 48 Diferencia entre “Call by value” y “Call by reference”

”Call by value” es indicado en el encabezamiento del subprograma o de la funciónmediantela palabra clave IN colocada detrás de cada variable en la lista de parámetros. “Call by refe-rence” se obtiene indicando OUT. OUT también es el ajuste por defecto. Ejemplo:

DEF CALCULA(X:OUT,Y:IN,Z:IN,B)

Si el subprograma global o la función global que se desea llamar no están declarados comoGLOBAL, será necesario indicar, en el caso de la declaración externa en el programa princi-pal, qué tipo de datos tiene cada una de las variables y qué mecanismo de transferencia sedebe utilizar. OUT vuelve a ser el ajuste por defecto. Ejemplo:

EXTFCT REAL FUNKT1(REAL:IN,BOOL:OUT,REAL,CHAR:IN)

Mediante el siguiente ejemplo se explica el modo de utilizar IN y OUT. Se parte del supuestode que el subprograma y la función son globales.

Page 141: Programación experto - Kuka

6 Subprogramas y funciones (continuación)

141 de 197ProgExperteBHR5.2 09.03.01 es

DEF PROG()CALCULA (INT:OUT,INT:IN,INT:IN)FUNC1(REAL:IN,REAL:OUT,REAL:OUT,REAL:IN,REAL:OUT)INT A,B,CREAL D,E,F,G,H,X

A = 1B = 2C = 3D = 1E = 2F = 3G = 4H = 5

CALCULA (A,B,C);A ahora es 11;B permanece como 2;C permanece como 3

X = FUNC1(H,D,E,F,G);D ahora es 3;E ahora es 8;F permanece como 3;G ahora es 24;H permanece como 5;X ahora es 15

END

DEF CALCULA(X1:OUT,X2:IN,X3:IN) ;subprograma globalINT X1,X2,X3X1=X1+10X2=X2+10X3=X3+10END

DEFFCT REAL FUNC1(X1:IN,X2:OUT,X3:OUT,X4:IN,X5:OUT);función globalREAL X1,X2,X3,X4,X5X1 = X1*2X2 = X2*3X3 = X3*4X4 = X4*5X5 = X5*6RETURN(X4)ENDFCT

Para transferir un campo, éste también debe ser declarado de nuevo en el subprograma oen la función, aunque sin índice. Véase a este respecto el siguiente ejemplo, en el cual seduplican los valores de un campo X[] (la función es global):

Page 142: Programación experto - Kuka

Programación por el experto

142 de 197 ProgExperteBHR5.2 09.03.01 es

DEF ARRAY ( )EXT BAS (BAS_COMMAND :IN,REAL :IN)INT X[5] ;Declaración de campoINT I

BAS (#INITMOV,0)

FOR I=1 TO 5X[I]=I ;Array X[] inicializar

ENDFOR ;X[1]=1,X[2]=2,X[3]=3,X[4]=4,x[5]=5

DOBLE (X[]) ;Llamada del subprograma con parámetro de campo;X[1]=2,X[2]=4,X[3]=6,X[4]=8,X[5]=10

END

DEF DOBLE (A[]:OUT)INT A[] ;Nueva declaración del campoINT IFOR I=1 TO 5

A[I]=2*A[I] ;Duplicar los valores de campoENDFOREND

En la transferencia de camposmultidimensionales tampoco se indican índices; sin embargo,la dimensión del campo se debe especificar mediante comas. Ejemplos:

A[,] para campos bidimensionales

A[,,] para campos tridimensional

Page 143: Programación experto - Kuka

6 Subprogramas y funciones (continuación)

143 de 197ProgExperteBHR5.2 09.03.01 es

Page 144: Programación experto - Kuka

Programación por el experto

144 de 197 ProgExperteBHR5.2 09.03.01 es

7 Tratamiento de interrupciones

Al utilizar robots en instalaciones de producción complejas, existe la necesidad que el robotreaccione de inmediato y en forma directa a determinados eventos externos o internos,pudiéndolos ejecutar acciones paralelas al proceso del robot. Esto significa que se debeinterrumpir un programa en curso del robot e iniciar un programa o función de interrupción.Una vez procesado el programa de interrupción, deberá continuar el programa de robotinterrumpido si no se ha especificado algo distinto.

La interrupción o bien arranque directo de un programa lo posibilitan las instrucciones deinterrupción. Con ellas, el usuario tiene la posibilidad de reaccionar mediante programa, aun evento determinado que se ha producido, no sincronizado en el tiempo, con la secuenciadel programa.

Las interrupciones pueden ser activadas por

G aparatos tales como sensores, unidades periféricas, etc.,

G mensajes de fallo,

G el usuario, o

G los circuitos de seguridad.

Por ejemplo después de accionar un pulsador de parada de emergencia, se llama una rutinade interrupción que resetea determinadas señales de salida (programa preparadoIR_STOPM.SRC).

7.1 DeclaraciónAntes de poder activar una interrupción, deberán definirse previamente las posibles causasde la misma y las reacciones respectivas del sistema.

INTERRUPT

Esto se realiza con las declaraciones de interrupción, teniendo en cuenta que a cadainterrupción se le ha de asignar una prioridad, un evento y la rutina de interrupción que hade activar. La sintaxis completa es:

INTERRUPT DECL Prioridad WHEN Evento DO Subprograma

Para el significado que tienen los argumentos véase Tab. 15.

Argumento Tipo dedatos

Significado

Prioridad INT Expresión aritmética que indica la prioridad de lainterrupción. Están disponibles los niveles de prioridaddel1…39 y 81…128. Los valores 40...80 están reservadospara una asignación automática de prioridades por partedel sistema.

La interrupción del nivel 1 tiene la máxima prioridad.

Evento BOOL Expresión lógica que define el evento de interrupción.Se permite:

S una constante booleana

S una variable booleana

S un nombre de señal

S una comparación

Subprograma Nombre del programa de interrupción que se ha de ejecu-tar cuando se produzca un evento.

Tab. 15 Argumentos en la declaración de interrupciones

Page 145: Programación experto - Kuka

7 Tratamiento de interrupciones (continuación)

145 de 197ProgExperteBHR5.2 09.03.01 es

La instrucción

INTERRUPT DECL 4 WHEN $IN[3]==TRUE DO UP1()

declara p. ej. una interrupción de prioridad 4, que llama el subprograma UP1() en el mo-mento que la entrada 3 pasa a nivel high.

¡La declaración de interrupción es una instrucción, por consiguiente, no debe estar co-locada en la sección de declaraciones!

Una interrupción (Interrupt) recién es reconocida a partir del nivel del programa en la cualfue declarada. En los niveles más altos de programa, a pesar de estar activada, la interrup-ción no es reconocida. Es decir, una interrupción declarada en un subprograma, no es cono-cida en el programa principal.

GLOBAL

Pero si una interrupción es declarada como GLOBAL, entonces puede estar declarada encualquier subprograma, y no pierde su validez al abandonar este nivel.

GLOBAL INTERRUPT DECL 4 WHEN $IN[3]==TRUE DO UP1()

G Una declaración puede ser sobreescrita en todo momento por una nueva.

G Una interrupción GLOBAL se diferencia de una interrupción normal, en que alabandonar el subprograma en el cual ha sido declarada, sigue teniendo validez.

G Simultáneamente pueden estar declaradas, como máximo, 32 interrupciones.

G En la condición de interrupción no se puede acceder a variables o componentes deestructura.

G A la subrutina de interrupción no deben ser entregados como parámetros, variablesde duración temporal, excepto que se trate de GLOBAL o variables declaradas en lalista de datos.

DEF MAIN()⋮INTERRUPT DECL 1…INTERRUPT DECL 3…⋮UP()⋮END

DEF UP()⋮GLOBAL INTERRUPT DECL 23…INTERRUPT DECL 2…⋮END

Validez Interrupt 1,3,23

Validez Interrupt 2

Programa principal

Subprograma

Fig. 49 Rango de validez de una interrupción dependiente del lugar y del tipo dedeclaración

Page 146: Programación experto - Kuka

Programación por el experto

146 de 197 ProgExperteBHR5.2 09.03.01 es

7.2 Activación de interrupciones

Activar interrupciones

Después de la declaración, en primer momento, la interrupción está desactivada. Con lainstrucción

INTERRUPT ON 4

se activa la interrupción con la prioridad 4, con

INTERRUPT ON

se activan todas las interrupciones. Sólo activadas, se puede esperar que se produzcan lasreacciones ante la presencia de una interrupción definida. Recién ahora se controla cíclica-mente la presencia del evento de interrupción.

Disparo por flancos

La supervisión del evento se produce mediante disparo por flancos, es decir, que una inter-rupción sólo será disparada cuando la condición lógica cambie su estado de FALSE a TRUE,pero no si en el momento de activarla, ya estaba la condición en TRUE.

Debido a tiempos de cálculo no se permiten más de 16 interrupciones activadassimultáneamente. Esto se ha de tener en cuenta sobre todo en la activación global detodas las interrupciones.

Desactivar interrupciones

Del mismo modo que funciona la activación de cada una o de todas las interrupciones,funciona también su desactivación:

INTERRUPT OFF 4

o

INTERRUPT OFF

Bloquear / liberar

Con las claves de ENABLE y DISABLE pueden liberarse o bloquearse interrupciones activa-das de forma global.

La instrucción de bloqueo posibilita proteger determinadas partes del programa contra unainterrupción. Una interrupción bloqueada es detectada y almacenada pero no ejecutada.Unavez que seproduzca la liberación, seprocesarán las interrupciones enel orden depriori-dad respectivo.

DISABLE 4

o

DISABLE

A un evento memorizado ya no se reaccionará si la interrupción ha sido desactivada antesde que se produzca el disparo. Si una interrupción bloqueada se produce repetidas veces,sólo se ejecutará una vez después de su liberación.

Las condiciones previas para el disparo de las interrupciones son:

S la interrupción deberá estar declarada (INTERRUPT DECL…)

S la interrupción deberá estar activada (INTERRUPT ON)

S la interrupción no deberá estar bloqueada

S se deberá haber producido el evento correspondiente (disparo por flancos)

Page 147: Programación experto - Kuka

7 Tratamiento de interrupciones (continuación)

147 de 197ProgExperteBHR5.2 09.03.01 es

Prioridad

Cuando se produzcan simultáneamente interrupciones, será procesada primeramente laque tenga la prioridad más alta y a continuación las de prioridades más bajas. El nivel deprioridad 1 es el de máxima prioridad y el nivel 128 la mínima.

Cuando se detecta un evento, se memoriza la posición real actual del robot y se llama larutina de interrupción. La interrupción originada así como todas las prioridades de nivelesmás bajos, se bloquearán durante el tiempo que dure el procesamiento. Al regresar del pro-grama de interrupción, se cancelará el bloqueo implícito indicado inclusopara la interrupciónactual.

Es decir que en el momento que se produzca nuevamente (incluso durante el programa deinterrupción), puede procesarse otra vez la interrupción. Sin embargo, si se desea evitaresto, deberá bloquearse o desactivarse la interrupción explícitamente antes de su saltoatrás.

Un interrupt puede ser interrumpido después del primer comando en el programa deinterrupciones mediante un interrupt de nivel superior. En el primer comando, elprogramador tiene la opción de evitar esto bloquendo/desactivando uno o todos losinterrupts. Si una interrupción se desactiva automáticamente dentro del subprograma deinterrupción, éste se procesará hasta el final.

Después de finalizar una interrupción de prioridad más alta, se continuará el programa deinterrupción interrumpido en el mismo lugar en el cual fue interrumpido.

G A un programa de interrupción pueden transferirse parámetros IN.

G Si desea que un programa de interrupción local regrese un parámetro, deberá estardeclarada la variable en la lista de datos del programa principal. En los programasde interrupción global deberá operarse con la lista de datos $CONFIG.DAT.

G Las modificaciones de $TOOL y $BASE en el programa de interrupción, sólo sonefectivas en el mismo (servicio de comando).

G Enel programade interrupciones no existe una ejecuciónen avance, ya que funcionaen el nivel de comandos, es decir que es procesadopaso por paso (⇒no sepermitenlas asignaciones $ADVANCE). Con ello, no se puede realizar un posicionamientoaproximado.

Casos especiales:

S Las interrupciones sobre las variables del sistema $ALARM_STOP y $STOPMESS son

procesadas incluso en caso de anomalía, es decir que a pesar de una parada del robot,

continuan procesándose las instrucciones de interrupciones (no los movimientos).

S Durante una parada de operación, se puede reconocer cada interrupción declarada y

activada. Después deunnuevoarranque, seprocesarán las interrupciones dependiendo

de sus prioridades (en caso de que estén liberadas) y a continuación, seguirá la ejecu-

ción normal del programa.

Con la llamada de un programa de interrupción, no se interrumpe el movimiento del roboten marcha. Mientras se procesa el programa de interrupción, se ejecutan todos losmovimientos preparados dentro del programa interrumpido. Si el programa de interrupción,durante este tiempo, ha terminado de procesarse, continúa la ejecución del programa, sinparada del movimiento, es decir, sin prolongar el tiempo del procesamiento. Si por elcontrario, no ha concluido la acción de interrupción, el robot se detendrá hasta que, despuésdel salto atrás, se procese y continúe el movimiento subsiguiente.

Si enel propio programade interrupciones existen instrucciones demovimiento, elprogramade interrupción parará en la primera instrucción de movimiento hasta que termine deprocesarse la ejecución en avance del programa principal.

Page 148: Programación experto - Kuka

Programación por el experto

148 de 197 ProgExperteBHR5.2 09.03.01 es

El ejemplo indicado a continuaciónmuestra como utilizar las instrucciones de interrupcionesy de variables especiales del sistema. En este se controlan en forma permanente dossensores (en las entradas 1 y 2) durante el movimiento lineal. En el momento que el sensor1 detecta una pieza (pasa a nivel alto), se produce la llamada de un subprograma deinterrupción en la cual se almacena la posición de la pieza, mostrándose como indicación,la salida correspondiente. El movimiento del robot no es interrumpido durante este proceso.A continuación se realiza de nuevo un desplazamiento hacia las piezas detectadas.

DEF INTERRUP ( )

;--------- Sección de declaraciones ---------EXT BAS (BAS_COMMAND :IN,REAL :IN )DECL AXIS HOMEPOS TEIL[2]INT I

;---------- Inicialización ---------BAS (#INITMOV,0 ) ;Inicialización de velocidades,

;aceleraciones, $BASE, $TOOL, etc.HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 30,A6 0}FOR I=1 TO 16

$OUT[I]=FALSE ;resetear todas las salidasENDFORINTERRUPT DECL 10 WHEN $IN[1]==TRUE DO SAVEPOS (1 )INTERRUPT DECL 11 WHEN $IN[2]==TRUE DO SAVEPOS (2 )

;------------- Sección principal ------------PTP HOME ;Desplazamiento COI

PTP {X 1320,Y 100,Z 1000,A -13,B 78,C -102}

INTERRUPT ON ;activar todas las interrupcionesLIN {X 1320,Y 662,Z 1000,A -13,B 78,C -102} ;Tramo de

localizaciónINTERRUPT OFF 10 ;Desactivar la interrupción 10INTERRUPT OFF 11 ;Desactivar la interrupción 11

PTP HOME

FOR I=1 TO 2IF $OUT[I] THEN

LIN PARTE[I] ; Desplazarse hacia la pieza detectada$OUT[I]=FALSEPTP HOME

ENDIFENDFOR

END

;----------- Programa de interrupción ----------DEF SAVEPOS (NR :IN ) ;Pieza detectadaINT NR$OUT[NR]=TRUE ;Colocar marcadorPARTE[NR]=$POS_INT ;Memorizar posiciónEND

Page 149: Programación experto - Kuka

7 Tratamiento de interrupciones (continuación)

149 de 197ProgExperteBHR5.2 09.03.01 es

Junto al paquete base (BAS.SRC) se encuentra en la unidad de control, en formaestándar, un archivo IR_STOPM(). Este subprograma ejecuta, en caso de fallo,determinadas instrucciones fundamentales. Entre otras, además de acciones específicastecnológicas, forma parte el reposicionamiento del robot sobre su trayectoria dedesplazamiento. Mientras que el robot, después de accionar el pulsador de PARADA deEMERGENCIA, continúa en su trayectoria, se produce en el disparo de los dispositivosde protección referidos directamente al operador (p. ej. puerta de protección), una paradade lado hardware fuera de la trayectoria.Por consiguiente, Ud. debería implementar siempre en la parte de inicialización de susprogramas, la secuencia siguiente (en forma estándar se encuentra siempre en la fold deBAS INI):

INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )INTERRUPT ON 3

En el archivo IR_STOPM() se produce la reposición mediante la instrucción PTP$POS_RET estableciendo de nuevo la coincidencia de paso.

Otras variables útiles del sistema para los trabajos con interrupciones, aparecen en Tab. 16.Las posiciones hacen referencia siempre al sistema de coordenadas actual en la ejecuciónprincipal.

Específica deejes

Cartesiana Significado

$AXIS_INT $POS_INT Posición en la que se produce la interrupción

$AXIS_ACT $POS_ACT Posición actual REAL

$AXIS_RET $POS_RET Posición en la cual se abandono la trayectoria

$AXIS_BACK $POS_BACK Posición del punto inicial de la trayectoria

$AXIS_FOR $POS_FOR Posición del punto final de la trayectoria

Tab. 16 Variables de sistema útiles en el tratamiento de interrupciones

Las posiciones…_BACK y…_FOR dependen en el movimiento de aproximación donde seencuentre la ejecución principal. Véase al respecto Fig. 50 hasta Fig. 51.

P1

P2

P3

$POS_BACK$AXIS_BACK

$POS_ACT$AXIS_ACT

$POS_RET$AXIS_RET$POS_INT

$AXIS_INT

$POS_FOR$AXIS_FOR

Fig. 50 Variablesdelsistema-- interrupciónconpuntosdeparadaexactos

Page 150: Programación experto - Kuka

Programación por el experto

150 de 197 ProgExperteBHR5.2 09.03.01 es

P1

P2

P3

$POS_BACK$AXIS_BACK

$POS_RET$AXIS_RET

$POS_ACT$AXIS_ACT

$POS_INT$AXIS_INT

$POS_FOR$AXIS_FOR

Fig. 51 Variablesdelsistema -- interrupciónenunazonadeaproximación

7.3 Detención de movimientos en ejecución

BRAKE

Si se desea que se detengan movimientos en ejecución del robot cuando se produzca unainterrupción, entonces se sirve uno de la instrucción BRAKE en el programa de interrupción.Si se programa

BRAKE

sin parámetros, esto produce un frenado del movimiento con los valores de aceleración deejes y de trayectoria programados. El comportamiento es el mismo que el que se producecuando se acciona la tecla STOP. En esta actuación, no se abandona la trayectoria demovi-miento programada.

Con la instrucción

BRAKE F

(brake fast) alcanzará carreras de frenado más cortas. El robot es frenado aquí con unretardo con la mayor exactitud de trayectoria posible.

La instrucción BRAKE sólo puede estar en un programa de interrupción. En otrosprogramas producirá una parada con fallo.

La instrucción BRAKE no tiene por que efectuarse directamente después de su llamada, sinoque puede producirse en cualquier parte del programa de interrupciones. Su efectividaddepende de que si en el momento de su tratamiento, aún se está ejecutando unmovimientodel programa interrumpido. Si el robot está detenido, la instrucción no tiene consecuencias.Unamovimiento en ejecución del programa interrumpido, se parará con elmodo de frenadoprogramado. Sin embargo, la instrucción BRAKE no sustituye la instrucción HALT, si se hade parar la secuencia del programa. La ejecución del programa de interrupción continuarádespués de la parada correcta del robot, con la instrucción siguiente.

¡Después del salto atrás al programa interrumpido, se continuará en elprograma con el movimiento interrumpido por BRAKE o BRAKE F!

Page 151: Programación experto - Kuka

7 Tratamiento de interrupciones (continuación)

151 de 197ProgExperteBHR5.2 09.03.01 es

7.4 Cancelación de rutinas de interrupción

En el ejemplo 8.1 se detectan durante el movimiento del robot, como máximo, 2 objetosmediante 2 detectores de aproximación, registrándose también sus posiciones para elarranque posterior.

El trayecto de búsqueda es ejecutado en su totalidad, incluso cuando estén ya detectadosambos objetos. Para ahorrar tiempo, es deseable interrumpir el movimiento de inmediatocuando se hayan detectado la máxima cantidad de piezas.

RESUME

La cancelación de un movimiento del robot es posible efectuarla en la KR C... con lainstrucción

RESUME

La instrucción RESUME cancela todos los programas de interrupción en procesamiento ytodos los subprogramas en marcha hasta el nivel en la cual se encuentra declarada lainterrupción actual.

Igual a lo que sucede con la instrucción BRAKE, sólo sepermite la instrucción RESUMEden-

tro de un programa de interrupción.

En el momento de la instrucción RESUME, el puntero de avance no debe estar en el mismo

nivel en el cual se declaró la interrupción, sino como mínimo, en un nivel inferior.

Al tener que interrumpirse el trayecto de búsqueda con RESUME, deberá programarse elmovimiento de búsqueda en un subprograma. Esto se realiza en el ejemplo que semuestraa continuación en MOVEP(), el subprograma de interrupción se llama IR_PROG().

Lo importante en los subprogramas que se han de interrumpir con RESUME, es que seinterrumpa el procesamiento en avance antes de la última línea. Sólo así estará garantizadode que el puntero de avance de ejecución no esté con RESUME en el mismo nivel donde fuedeclarada la interrupción. En MOVEP() se realizó esto con la asignación $ADVANCE=0.

En el propio programa de interrupción -- en el momento que se detecten 4 piezas por elsensor en la entrada 1 -- se parará el movimiento de búsqueda mediante BRAKE y acontinuación se cancelará con la instrucción RESUME (ya que junto al IR_PROG() tambiénfinaliza MOVEP()). Sin la instrucción BRAKE se trataría primero el movimiento de búsquedaen el procesamiento en avance.

Después de RESUME, continúa el programa principal con la instrucción siguiente a continua-ción de la llamada del subprograma, es decir $ADVANCE=3 (resetear procesamiento enavance).

Page 152: Programación experto - Kuka

Programación por el experto

152 de 197 ProgExperteBHR5.2 09.03.01 es

DEF SEARCH ( );--------- Sección de declaraciones ---------EXT BAS (BAS_COMMAND :IN,REAL :IN )DECL AXIS HOME;---------- Inicialización ---------INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )INTERRUPT ON 3 ;tratamiento de errores estándarBAS (#INITMOV,0 ) ;Inicialización de velocidades,

;aceleraciones, $BASE, $TOOL, etc.HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 30,A6 0}INTERRUPT DECL 11 WHEN $IN[1] DO IR_PROG ( )I[1]=0 ;colocar el contador predefinido a 0;------------- Sección principal ------------PTP HOME ;desplazamiento COIINTERRUPT ON 11MOVEP ( ) ;recorrido del trayecto de busqueda$ADVANCE=3 ;resetear avanceINTERRUPT OFF 11GRIP ( )PTP HOMEEND;-------- Subprograma ------------DEF MOVEP ( ) ;Subprograma para el recorrido del trayecto de

busquedaPTP {X 1232,Y -263,Z 1000,A 0,B 67,C -90}LIN {X 1232,Y 608,Z 1000,A 0,B 67,C -90}$ADVANCE=0 ;Parar el avanceEND ;;------ Programa de interrupción ---------DEF IR_PROG ( ) ;Guardar posición de piezas;INTERRUPT OFF 11I[1]=I[1]+1POSICIÓN[I]=$POS_INT ;Guardado de la posiciónIF I[1]==4 THEN ;4 piezas son detectadas

BRAKE ;Detención del movimientoRESUME ;Cancelación de IR_PROG & MOVE

ENDIF;INTERRUPT ON 11END;-------- Subprograma ------------l

DEF GRIP ( ) ;Coger las piezas detectadasINT POS_NR ;Variable de conteoFOR POS_NR=I[1] TO 1 STEP -1POSICIÓN[POS_NR].Z=POSICIÓN[POS_NR].Z+200LIN POSICIÓN[POS_NR] ;Pasar 200mm sobre la piezaLIN_REL {Z -200} ;Aproximarse perpendicularmente a la pieza; Coger piezaLIN POSICIÓN[POS_NR] ;Subir nuevamente hacia arribaLIN {X 634,Y 1085,Z 1147,A 49,B 67,C -90}; Depositar piezaENDFOREND

Page 153: Programación experto - Kuka

7 Tratamiento de interrupciones (continuación)

153 de 197ProgExperteBHR5.2 09.03.01 es

Si existe el riesgo de que una interrupción dispare, por error, dos veces debido a lasensibilidadde un sensor (“rebotes de teclas”), puede evitarlo desactivando la interrupciónen la primera línea del programa de interrupción. Sin embargo seha de tener presente queaquí tampoco se detectará, en ningún momento, una interrupción real durante elprocesamiento de interrupción. Antes de realizar el salto hacia atrás, si tiene que continuarestando activa la interrupción, se ha de conectar de nuevo la misma.

Si se ha interrumpido un movimiento como en el ejemplo anterior con RESUME, elmovimiento siguiente nodebeser unmovimientoCIRC, ya que el punto de inicio es distintocada vez (⇒ círculos diferentes).

En la acción de búsqueda programada en el ejemplo 7.2, las entradas son interrogadas enel ciclo de interpolación (actualmente 12 ms). Aquí se produce una inexactitud máxima de12 ms multiplicada la velocidad de trayectoria.

“Medición rápida”

Si se desea evitar inexactitudes, no se deberá conectar el detector de aproximación a lasentradas de usuario, sino a través de entradas especiales (4 unidades) en el conector deperiféricos X11. Estas entradas pueden ser activadas a través de las variables del sistema$MEAS_PULSE[1]…MEAS_PULSE[4] (tiempo de respuesta 125 µs).

Al conectar la interrupción, el impulso de medición no debe estar presente, caso contrariose emite el correspondiente mensaje de fallo.

Page 154: Programación experto - Kuka

Programación por el experto

154 de 197 ProgExperteBHR5.2 09.03.01 es

7.5 Utilización de banderas (flags) cíclicas

En la instrucción para declaraciones de interrupciones no se permiten combinacioneslógicas.

Para definir eventos complejos deberá trabajarse con banderas (flags) cíclicas ya que sóloestas permiten una actualización continua.

Con la secuencia

⋮$CYCFLAG[3] = $IN[1] AND ([$IN[2] OR $IN[3])INTERRUPT DECL 10 WHEN $CYCFLAG[3] DO IR_PROG()INTERRUPT ON 10⋮

pueden supervisarse 3 entradas simultáneamente y combinarlas entre sí en forma lógica.

Informaciones adicionales se encuentran en el capítulo [Variables y declaraciones],apartado [Variables y archivos del sistema].

Page 155: Programación experto - Kuka

7 Tratamiento de interrupciones (continuación)

155 de 197ProgExperteBHR5.2 09.03.01 es

Page 156: Programación experto - Kuka

Programación por el experto

156 de 197 ProgExperteBHR5.2 09.03.01 es

8 Trigger -- Acciones de conmutación referentes a la trayectoriaAl contrario de las funcionalidades de interrupción independientes del movimiento, algunoscasos de aplicación requieren determinados acciones de conmutación que se disparandependientes de la trayectoria del movimiento. Estos casos de aplicación son p. ej:

G cerrar o abrir una pinza de soldadura durante la soldadura por puntos

G conectar/desconectar la corriente de soldadura en la soldadura al arco sobre una tra-yectoria

G conectar/desconectar el caudal durante el proceso de pegado y aplicación de sellantes

En la KR C..., estas acciones de conmutación referentes a la trayectoria se pueden realizarmediante instrucciones de disparo (TRIGGER). Paralelamente al próximomovimiento de robot,se puede procesar con TRIGGER, en dependencia de la trayectoria, un subprograma o efectuaruna asignación de valor a una variable o una instrucción PULSE o activarse una salida.

8.1 Acciones de conmutación en el punto de inicio o de destino de latrayectoria

TRIGGER

Si se desea una acción de conmutación referente a un punto de inicio o de destino de unatrayectoria de movimiento, deberá programar delante de la instrucción de movimiento encuestión (PTP, LIN o CIRC) una instrucción de TRIGGER con la sintaxis siguiente:

TRIGGER WHEN DISTANCE=Punto de conmutación DELAY=TiempoDO Instrucción <PRIO=Prioridad>

En la siguiente tabla se describen los argumentos en forma más detallada.

Argumento Tipo dedatos

Significado

Punto deconmutación

INT En los pasos individuales la DISTANCE=0 define elpunto de inicio y DISTANCE=1 el punto final del siguientemovimiento. En los pasos de aproximación la DISTAN-CE=1marca las indicaciones del centro de la curvatura deaproximación siguiente.Si el paso precedente es un paso con posicionamientoaproximado, DISTANCE=0marca el punto final de la cur-vatura de aproximación precedente.

Tiempo INT Con la indicación de DELAY se puede retardar el punto deconmutación en un determinado tiempo. El punto de con-mutación sólo podrá desplazarse de modo que quedecomprendido dentro del paso de referencia.

La unidad se expresa en milisegundos.

Instrucción La instrucción puede ser

S una llamada de un subprograma

S una asignación de valor a una variable

S una instrucción OUTPUT (también Pulse).

Prioridad INT Cada instrucción TRIGGER con llamada de subprogramadeberá ir asignada a una prioridad. Son permisibles valoresentre 1…39 y 81…128. En este caso se trata de lasmismasprioridades que en las interrupciones (véase capítulo 7).

Los valores 40…80 están reservados por el sistema parauna asignación automática de prioridades. Programepara ello PRIO=--1.

Tab. 17 Argumentos en la instrucción TRIGGER

Page 157: Programación experto - Kuka

8 Trigger -- Acciones de conmutación referentes a la trayectoria (continuación)

157 de 197ProgExperteBHR5.2 09.03.01 es

Con la secuencia de instrucciones⋮LIN PUNTO2⋮TRIGGER WHEN DISTANCE = 0 DELAY=20 DO $OUT[4]=TRUETRIGGER WHEN DISTANCE = 1 DELAY=-25 DO UP1() PRIO=-1LIN PUNTO3⋮LIN PUNTO4⋮se activa durante el movimiento lineal hacia el PUNTO3 la salida 4 después de 20milisegun-dos tras el inicio del movimiento y se produce la llamada del subprograma UP1(), 25 milise-gundos antes de alcanzar el punto final. La asignación de prioridad se produce automática-mente por el sistema. Para entender mejor los diferentes efectos de la indicación deDISTANCE en pasos individuales y de aproximación, véase las figuras siguientes.

+

--

0

1

DISTANCE Rango de DELAYconmutación

0 0 -- 1 +1 1 -- 0 --

PUNTO2

PUNTO3

Fig. 52 Rangos de conmutación y posibles valores de retardo cuando el punto deinicio y de destino son puntos de parada exactos

+

--

0 DISTANCE Rango de DELAYconmutación

0 0 -- 1a +

1 1a -- 1b ±

+

1b

1a

1

PUNTO2

PUNTO4PUNTO3

Fig. 53 Rangos de conmutación y posibles valores de retardo cuando el puntode inicio es un punto de parada exacta y el punto final uno de aproximación

Page 158: Programación experto - Kuka

Programación por el experto

158 de 197 ProgExperteBHR5.2 09.03.01 es

+

--

0

+

11b

1a

PUNTO2

PUNTO3 PUNTO4

DISTANCE Rango de DELAYconmutación

0 0 -- 1a +1 1a -- 1b ±

Fig. 54 Rangos de conmutación y posibles valores de retardo cuando los puntos deinicio y de destino son puntos de aproximación

+--

0

1

PUNTO2

PUNTO3

DISTANCE Rango de DELAYconmutación

0 0 -- 1 +1 1 -- 0 --

Fig. 55 Rangos de conmutación y posibles valores de retardo cuando el punto deinicio es un punto de aproximación y el punto final un punto de paradaexacta

Page 159: Programación experto - Kuka

8 Trigger -- Acciones de conmutación referentes a la trayectoria (continuación)

159 de 197ProgExperteBHR5.2 09.03.01 es

8.2 Acciones de conmutación en cualquier lugar sobre la trayectoria

Con la instrucción TRIGGER referente a la trayectoria, se puede disparar las acciones deconmutación en cualquier lugar de la trayectoria con la indicación de la distancia. Adicional-mente, el disparo, a su vez, puede desplazarse temporalmente, como en el caso de lasacciones de conmutación para el inicio o el punto final.

La acción de conmutación referente a la trayectoria sólo es permisible para losmovimientosde trayectoria (LIN o CIRC). La instrucción TRIGGER hace referencia para ello al paso demovimiento programado a continuación, y su sintaxis es la siguiente:

TRIGGER WHEN PATH = Trayecto DELAY = Tiempo DO Instrucción⟨PRIO=Prioridad⟩

En la siguiente tabla se describen los argumentos en forma más detallada.

Argumento Tipo dedatos

Significado

Trayecto INT Con Trayecto indica la distancia deseada anterior alpunto final donde se produce el disparo.Si este punto final es un punto con posicionamientoaproximado,Trayecto indica la distancia deseadaentrela acción de conmutación y la posición de la zona de apro-ximación más próxima al punto final.El punto de conmutación puede adelantarse mediante unTrayecto negativo hasta el punto de inicio. Si el punto deinicio es un punto de posicionamiento aproximado, sepuede desplazar el punto de conmutación hasta el princi-pio de la zona de aproximación.Con una indicación positiva de Trayecto, se puedeefectuar un desplazamiento hacia el punto de paradaexacta después del punto de disparo.La unidad se expresa en milímetros.

Tiempo INT Con la indicación de DELAY es posible de retardar (+) o deacortar (--) enun tiempodeterminado el punto de conmuta-ción en forma relativa respecto a la indicación de PATH.Pero el punto de conmutación solamente puede ser des-plazado en la zona de conmutación arriba mencionada(tanto, que puede alcanzar el próximo punto de parada ex-acta). En movimientos de posicionamiento aproximado, elpunto de conmutación se puede adelantar como máximo,hasta el comienzo de aproximación del punto de inicio.La unidad se expresa en milisegundos.

Instrucción La instrucción puede serS una llamada de un subprogramaS una asignación de valor a una variableS una instrucción OUTPUT (también Pulse).

Prioridad INT Cada instrucción TRIGGER con llamada de subprogramadeberá ir asignada a una prioridad. Son permisiblesvalores entre 1…39 y 81…128. En este caso se trata delas mismas prioridades que en las interrupciones (véasecapítulo 7).Los valores 40…80 están reservados por el sistema parauna asignación automática de prioridades. Programe paraello PRIO=--1.

Tab. 18 Argumentos en la instrucción TRIGGER

Page 160: Programación experto - Kuka

Programación por el experto

160 de 197 ProgExperteBHR5.2 09.03.01 es

Secuencia de instrucción:

⋮LIN PUNTO2 C_DISTRIGGER WHEN PATH = Y DELAY= X DO $OUT[2]=TRUELIN PUNTO3 C_DISLIN PUNTO4 C_DISLIN PUNTO5⋮Al poderse desplazar el punto de conmutación a partir del punto de movimiento del cual fueprogramado mas allá de todos los puntos de posicionamiento aproximado siguientes hastael próximo punto de parada exacta, es posible un desplazamiento del punto de conmutacióndesde la zona de aproximación PUNTO2 hasta PUNTO5. Si en esta secuencia de instruccio-nes el PUNTO2 no es de posicionamiento aproximado, entonces el punto de conmutaciónsolo podrá ser desplazado hasta el punto de parada exacta PUNTO2.

+

-- +DELAY X

PUNTO4PUNTO3

PUNTO2

-- PUNTO5

PATH=0 PATH Y>0

DELAY=0

--

+

DELAY X

PATH Y<0

PUNTO4PUNTO3

PUNTO2

PUNTO5

PATH= -20

Punto deparada exacta

DELAY= -10

Ejemplo de cifras:

X= --10, Y= --20

Fig. 56 Zona de conmutación cuando el punto de inicio es un punto de posicionamientoaproximado

Page 161: Programación experto - Kuka

8 Trigger -- Acciones de conmutación referentes a la trayectoria (continuación)

161 de 197ProgExperteBHR5.2 09.03.01 es

Casos especiales:

G Desplazamiento COI

Si se realiza una selección de paso en un movimiento de trayectoria, se produce undesplazamiento de coincidencia de paso COI. Al poder ser el punto inicial deldesplazamiento COI uno cualquiera, no puede ser un punto inicial recomendable para unaindicación de distancia. Si delante de este tipo demovimiento se encuentranprogramadasinstruccionesTrigger con indicación dePATH, y se produceuna selecciónde paso sobreestas instrucciones, se ejecutarán todas en el punto final.

G No se puede realizar un posicionamiento aproximado

Si no se puede realizar una aproximación, se produce en este punto un movimiento conparada exacta. Pero éste básicamente es tratado bajo el aspecto como si se fuese unmovimiento de aproximación. Las acciones de conmutación que deban producirse sobrela trayectoria, permanecen almacenadas y se activarán en los puntos correspondientes.Sin embargo, por regla general, ya no serán muy exactas ya que resulta una trayectoriadistinta y por consiguiente una longitud de trayectoria también distinta. Las acciones deconmutación colocadas en la primera parte de la zona de aproximación, debido a un valornegativo del PATH, se pueden disparar, como muy pronto, en el punto de aproximación:

⋮LIN P1 C_DISTRIGGER WHEN PATH=-120 DELAY=0 DO UP1() PRIO=-1TRIGGER WHEN PATH=-70 DELAY=0 DO $OUT[2]=TRUELIN P2 C_DIS⋮En el ejemplo anterior ahora la distancia entre el punto de inicio y de destino debe ser100 mm. Si se puede realizar un posicionamiento aproximado en P1, se ejecutará lallamada del subprograma UP1() 20 mm antes de alcanzar el punto de trayectoria máscercano al punto de aproximación P1. La activación de la salida 2 se efectúa unos 30mmdespués de este punto de la trayectoria. Si no se pudo realizar el movimiento deposicionamiento aproximado en P1, la trayectoria pasa a través del punto P1, en el cualtambién es posicionado. Inmediatamente al salir de P1 se ejecuta la llamada delsubprograma UP1(), se activa la salida 2 a una distancia de 30 mm de P1.

G Cancelación de un movimiento

Si un movimiento es interrumpido, p. ej. mediante una selección de paso o por un reset,y no lleva a término, las acciones de conmutación que todavía no han sido ejecutadas, yano serán ejecutadas y se borrarán (como nel caso de la indicación DISTANCE).

G Instrucción TRIGGER -- referente a un trayecto para un movimiento PTP

Si una instrucciónPATH-TRIGGER con indicaciónde trayecto es programadaparaqueseaun movimiento PTP, el interpretador la rechazará durante la ejecución.

G Posicionamiento aproximado PTP -- trayectoria

Si una instrucción PATH-TRIGGER es programada para un movimiento cuyo punto deinicio es un punto de posicionamiento aproximado PTP -- trayectoria, entonces, dado quela zona de aproximación completo es movimiento PTP, las acciones de conmutación serealizarán, como muy pronto, al final de la zona de aproximación.En una zona de aproximación trayectoria -- PTP, todas las instrucciones TRIGGER aúnactivas sin conmutar, se disparan en el punto de inicio de la zona de aproximación. Ya quea partir de este punto se produce un recorrido PTP, sin opción a asignarle una trayectoria.

Page 162: Programación experto - Kuka

Programación por el experto

162 de 197 ProgExperteBHR5.2 09.03.01 es

Enel ejemplo presentadoa continuación sehanprogramado tanto acciones de conmutacióncon indicacióndeDISTANCE como indicacióndePATH. Cada unode los puntos de conmuta-ción y la trayectoria de movimiento están representados en Fig. 57.

DEF TRIG ( );--------- Sección de declaración ---------EXT BAS (BAS_COMMAND :IN,REAL :IN)DECL AXIS HOMEINT ISIGNAL ADHESIVO $OUT[3];---------- Inicialización ---------INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )INTERRUPT ON 3BAS (#INITMOV,0 ) ;Inicialización de velocidades,

;aceleraciones, $BASE, $TOOL, etc.$APO.CDIS=35 ;prefijar la distancia de aproximaciónHOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 30,A6 0}POS0={POS: X 1564,Y -114,Z 713,A 128,B 85,C 22,S 6,T 50}POS1={X 1383,Y -14,Z 713,A 128,B 85,C 22}POS2={X 1383,Y 200,Z 713,A 128,B 85,C 22}POS3={X 1527,Y 200,Z 713,A 128,B 85,C 22}POS4={X 1527,Y 352,Z 713,A 128,B 85,C 22}FOR I=1 TO 16

$OUT[I]=FALSEENDFOR;------------- Sección principal------------PTP HOME ;desplazamiento COIPTP POS0TRIGGER WHEN DISTANCE=0 DELAY=40 DO $OUT[1]=TRUETRIGGER WHEN PATH=-30 DELAY=0 DO UP1(2) PRIO=-1LIN POS1TRIGGER WHEN DISTANCE=1 DELAY=-50 DO PEGAMENTO=TRUETRIGGER WHEN PATH=180 DELAY 55 DO PULSE($OUT[4],TRUE,0.9)TRIGGER WHEN PATH=0 DELAY=40 DO $OUT[6]=TRUELIN POS2 C_DISTRIGGER WHEN DISTANCE=0 DELAY=40 DO PULSE ($OUT[5],TRUE,1.4 )TRIGGER WHEN PATH=-20 DELAY=-15 DO $OUT[8]LIN POS3 C_DISTRIGGER WHEN DISTANCE=1 DELAY=-15 DO UP1 (7 ) PRIO= -1LIN POS4PTP HOMEENDDEF UP1 (NR :IN )

INT NRIF $IN[1]==TRUE THEN$OUT[NR]=TRUEENDIFEND

Page 163: Programación experto - Kuka

8 Trigger -- Acciones de conmutación referentes a la trayectoria (continuación)

163 de 197ProgExperteBHR5.2 09.03.01 es

1808

POS 2POS 1

POS 4POS 3

POS 0

2’B

2’

2’E

3’B

3’E3’

$OUT[1]

$OUT[2]

$OUT[3]

$OUT[6]

$OUT[5]

$OUT[8]

$OUT[4] $OUT[7]

20

30

Fig. 57 Puntos de conmutación y trayectoria de movimiento pertenecientes alejemplo anterior

Page 164: Programación experto - Kuka

Programación por el experto

164 de 197 ProgExperteBHR5.2 09.03.01 es

9 Listas de datos

9.1 Listas de datos localesLas listas de datos sirven para poner a disposición declaraciones específicas de programao de nivel superior. De estas forman parte también las informaciones de punto tales comop. ej. coordenadas:

G Para cada archivo SRC se puede crear una lista de datos. Este llevará el mismonombre que el archivo SRC y termina con la extensión “.DAT”.

G La lista de archivo es local a pesar de tratarse de un archivo propio.

G En una lista de datos sólo pueden encontrarse declaraciones e inicializaciones.

G Se puede declarar en una línea e inicializarse.

G No se acepta ninguna variable del sistema.

DEFDAT

La declaración de listas de datos se realiza de forma análoga a la declaración de archivosSRC. Esta declaración es canalizada mediante la clave DEFDAT y el nombre del programay concluye con la clave ENDDAT.

La inicialización de variables se realiza mediante la asignación de valor en las variablesrespectivas, directamente en la línea de declaración.

Después de ejecutar elprograma OTTO = 25

DEF PROG_1 ( )…HALT…OTTO = 25…HALTEND

DEFDAT PROG_1INT OTTO = 0ENDDAT

OTTO al principio es “0”

PROG_1.SRC PROG_1.DAT

DEFDAT PROG_1INT OTTO = 25ENDDAT

Fig. 58 Inicializacion y asignación de valor de las variables declaradas en listas de datos

A través de la declaración e inicialización en la lista de datos, se prescinde de ello en elprograma principal. Si se la asigna a la variable OTTO en el programa principal un nuevovalor, este también será registrado en la lista de datos, permaneciendo en este de formamemorizada permanente (véase Fig. 58).

Después de efectuar un ON/OFF de la unidad de control se trabajará con el “nuevo” valor.Esto es imprescindible para una corrección online u otras correcciones de programa.

Si un programa principal ha de iniciarse siempre con el mismo valor, deberá declararse lavariable correspondiente en el programa principal con el valor deseado.

En las listas de datos deben encontrarse las siguientes declaraciones:

G Declaraciones externas para subprogramas y funciones que pueden ser utilizadas enel archivo SRC.

G Declaraciones de importación para variables importadas.

G Declaraciones e inicializaciones de variables utilizadas en un archivo SRC.

G Declaraciones de nombres de canal y de señal, que pueden ser utilizadas en el archivoSRC.

G Declaraciones de tipos de datos y de conteo (Struc, Enum) que pueden ser utilizadosen la lista de datos o en el archivo SRC.

Page 165: Programación experto - Kuka

9 Listas de datos (continuación)

165 de 197ProgExperteBHR5.2 09.03.01 es

9.2 Listas de datos globales

Las variables definidas en una lista de datos pueden ser facilitadas para que pueda accederun programa principal “externo”.

Para ello deberá figurar y definirse en el encabezamiento de la lista de datos la clave opcionalPUBLIC, como “accesible al público”. Ahora existen dos posibilidades de declarar la variable:

G Una variable se define, por ej. con INT OTTO = 0 en la lista de datos, y en el pro-grama principal externo debe importarse esta variable con la instrucción Import, paratener acceso a la misma.

A una variable importada puede asignarse en el programa principal un nombre dife-rente que el original que tenia en la lista de datos de donde se realizo la importación.

Es decir que si desea utilizar en un programa PROG_2() la variable OTTO procedentede la lista de datos anterior PROG_1, deberá programar junto a la palabra clave de PU-BLICen la lista dedatos, las especificaciones de importación siguientes dentro del pro-grama PROG_2():

IMPORT INT OTTO_2 IS /R1/PROG_1 .. OTTO

La variable OTTO de la lista de datos PROG_1.DAT en el directorio /R1 ahora es cono-cida bajo el nombre de OTTO_2 incluso en el programa PROG_2() (véase Fig. 59).

DEF PROG_1 ( )…HALT…OTTO = 25…END

DEFDAT PROG_1 PUBLICINT OTTO = 0ENDDAT

DEF PROG_2 ( )IMPORT INT OTTO_2 IS /R1/PROG_1 .. OTTO……END

PROG_1.SRC PROG_1.DAT

PROG_2.SRC

Fig. 59 Importacióndevariablesdelistasdedatos“externas”conImport

G La variable es declarada como “Variable global” por ej. DECL GLOBAL INT OTTO =0 y es accesible a todo otro programa principal externo sin instrucción de importación.

Cuando se ha declarado una variable global, no es posible cambiar el nombre de lavariable en otro programa principal.

Page 166: Programación experto - Kuka

Programación por el experto

166 de 197 ProgExperteBHR5.2 09.03.01 es

DEF PROG_1 ( )…HALT…OTTO = 25…END

DEFDAT PROG_1 PUBLICDECL GLOBAL INT OTTO = 0ENDDAT

DEF PROG_2 ( )……END

PROG_1.SRC PROG_1.DAT

PROG_2.SRC

Fig. 60 Importacióndevariablesde listasdedatos“externas”sinImport

La declaración de una variable global solo está permitida en listas de datos. Si se utilizaen ficheros SRC o SUB, se genera un mensaje de fallos.

En la lista global del sistema $CONFIG.DAT ya predefinida, pueden definirse variables,estructuras, canales y señales, válidas por tiempo prolongado y de importancia superiorpara muchos programas. Las variables en el fichero $CONFIG.DAT no necesitan ser decla-radas con IMPORT, dado que son conocidas automáticamente por todos los programas deaplicación.

Informaciones adicionales accerca de $CONFIG.DAT se encuentran en el capítulo[Variables y declaraciones], apartado [Variables y archivos del sistema].

Page 167: Programación experto - Kuka

9 Listas de datos (continuación)

167 de 197ProgExperteBHR5.2 09.03.01 es

Page 168: Programación experto - Kuka

Programación por el experto

168 de 197 ProgExperteBHR5.2 09.03.01 es

10 Editor externoEste programa adicional amplia el software del robot añadiendo funciones no disponiblesen la superficie de operación.

Limpiar el programa

Los puntos de trayectoria y los parámetros demovimiento no referenciados sonborra-dos de la lista de datos.

Colocación y desplazamiento de límites de carrera

Manipulación de bloques.

-- Marcar y copiar, borrar o recortar un bloque.

-- Invertir la trayectoria del robot en la zona marcada, es decir, que el primer punto pro-gramado del sector marcado de la trayectoria, será el último al cual se desplazará elrobot, y el último punto programado pasará a ser el primero.

-- Efectuar con la trayectoria del robot una imagen especular en el plano X--Z del sectormarcado, en el sistema de coordenadas universales.

-- Modificar los parámetros de movimiento (velocidad, aceleración, etc.) en la zonamarcada.

-- Correr todos los puntos dentro de la zona de trayectoria marcada en el sistema decoordenadas de la pieza (BASE), la herramienta (TOOL) o universales (WORLD) Elcorrimiento o giro puede efectuarse por la entrada manual de un valor offset en elsistema de coordenadas correspondiente, o por programación por aprendizaje depuntos de referencia.

-- Desplazamiento, específico del eje, de todos los puntos de la zona marcada.

Adaptar puntos de trayectoria

-- a otra herramienta o

-- a otro sistema de coordenadas de la pieza

Adaptar puntos de trayectoria

-- mientras un programa se está ejecutando en la unidad de control, pueden efectuarsedesplazamientos de coordenadas de un punto en el sistema de coordenadas Tool,Base y universales.

Page 169: Programación experto - Kuka

10 Editor externo (continuación)

169 de 197ProgExperteBHR5.2 09.03.01 es

10.1 Arranque del editor externo

El editor externo está disponible a partir del grupo de usuarios “Expertos”.

Acceda al editor externo a través del menú “Inicialización” y la opción “Servicio”.Inicial. > Servicio > Editor externo]Estando seleccionado el programa, no está disponible el menú “Inicialización” (puesta enservicio). En este caso, utilice la instrucción de menú “Procesar > Modificar” que se ofrecea partir del grupo de usuarios “Expertos”.

[Procesar > Modificar > Punto]A continuación se abre el editor externo, pudiéndose efectuar las correcciones necesarias.

Inmediatamente después del arranque del editor aparece el diálogo “Seleccionar archivos”.Con las teclas del cursor “↓” y “↑” seleccione el fichero a editar. El usuario dispone de todoslos archivos SRC del directorio R1 menos el archivo “R1\MADA\”, “R1\SYSTEM\” y “R1\TP\”.Además, pueden definirse archivos estándar (“C:\KRC\UTIL\HOTEDIT.INI”), que tampoco se in-dicarán en pantalla.

Si el “Editor externo” es arrancado como programa fuera de línea (offline), el softwareKRCarranca automáticamente.

Si usted ha marcado de esta manera el fichero deseado, éste se cargará en el editor unavez pulsada la tecla del softkey correspondiente o la tecla de entrada. El tiempo de duraciónde carga depende del tamaño del fichero.

Si aparece el mensaje “*.DAT--File not found” (archivo *.DAT no encontrado), eso significaque ha intentado cargar en el editor un programa para el que no existe lista de datos.

Si el fichero ha sido cargado con éxito, el programa es presentado en forma parecida a lapresentación por el editor de la superficie de operación.

En la línea de estado del editor se muestra si el acceso tuvo lugar a través del menú depuesta en servicio o mediante la instrucción “Procesar > Modificar”.

Page 170: Programación experto - Kuka

Programación por el experto

170 de 197 ProgExperteBHR5.2 09.03.01 es

10.2 Operación

Los elementos de la superficie de operación normal se encuentran también en la del editorexterno. Así, se tiene aquí también a disposición, funciones de estado, funciones conmenús, softkeys, una ventana de programas, así como también una ventana de mensajesy una línea de estados.

Los menús también se pueden abrir pulsando primero la tecla “ALT” y luego la letra queaparece subrayadaenelmenú. De lamismamanera se puedeseleccionar una instruccióndel menú.

Teclas de estado

Con las teclas de estado “Arriba” o “Abajo”, puede mover la marca de línea (el foco) líneapor línea hacia el comienzo o hacia el final de la lista. Las teclas del cursor “"” o “#”, así comolas teclas “PGUP” y “PGDN”, cumplen la misma función.

Foco

Foco

Con las teclas “PGUp” o “PgDn” puede pasar páginas hacia adelante o hacia atrás. Paraello se debe desactivar la función “NUM” o utilizar un teclado externo.

El contenido de la ventana de mensajes se borra

Si usted pulsa la tecla de estado “KRL”, visualizará el programa tal como aparece enel modo del experto con los ajustes “Abrir todas FOLD” y “Visualizar detalles (ASCII)”.

En el rango “FOLD” se visualiza la instrucción marcada con el foco (“fichero SRC”). En el rango“Datos” se visualizan los datos correspondientes a la instrucción marcada (“fichero DAT”).

Page 171: Programación experto - Kuka

10 Editor externo (continuación)

171 de 197ProgExperteBHR5.2 09.03.01 es

6 Opciones

Pulsando la tecla de estado “Lupa” se regresa a la representación del programa com-pleto.

Barra de teclas de softkey

A esta tecla del softkey le corresponde la instrucción demenú “Cerrar”, quecierra el programa actual pero permite al editor seguir funcionando.

Ventana de mensajes

En la ventana de mensajes se emiten mensajes relevantes para el editor externo.

Nro. Tipo de mensaje y número de mensaje

Tiempo El momento en el que se creó el mensaje

Mensaje El tipo de mensaje

Resultado La información sobre cómo se ha desarrollado una acción

Línea de estados

En la línea de estados se visualizan informaciones adicionales.

NUM Está activada la entrada de números en el bloque numérico

CAPS La tecla de bloqueo de mayúsculas está desconectada

ExtEdit El módulo “Externer Editor” (Editor externo) está activo y se ac-cedió a él a través del menú “Inicialización > Servicio”

Palette El nombre del programa actualmente abierto

7:52 PM La hora actual del sistema

Page 172: Programación experto - Kuka

Programación por el experto

172 de 197 ProgExperteBHR5.2 09.03.01 es

10.3 Menú “Fichero”En este menú se encuentran las funciones para la manipulación de ficheros.

Fichero AbrirGuardarImprimirCerrarSalir

Programa actualTodos los usuarios

10.3.1 Abrir

Al activarse la opción “Abrir” aparece la ventana “Seleccionar archivos” tal como se ha des-crito en el apartado 10.2.

10.3.2 Guardar

Si el contenido del archivo cargado en el editor fue modificado con las funciones ofrecidas,entonces, antes dememorizar la nueva versión de este archivo, o bien, si se cierra el editor,el sistema requiere una respuesta de seguridad si realmente se aceptan estas modificacio-nes.

Si quiere Ud. aceptar ahora las modificaciones efectuadas, basta con pulsar la tecla de en-trada, confirmando de esta manera la preselección.

Los contenidos de la versióndel fichero hasta esemomento existente y editado, sepierdenindefectiblemente, por lo menos en parte.

Para cancelar la acción, primero se debe pulsar una de las teclas del cursor para desplazar elfoco hasta el botón “No”. A continuación puede confirmarse la selección pulsando la tecla deentrada. La versión hasta ahora válida del fichero editado queda en este caso sin modificar.

10.3.3 Salida

Esta instrucción permite la salida de programas en el soporte ajustado en bajo “Opciones> Output setting” (declaraciones sobre la edición).

Fichero AbrirGuardarSalidaCerrarSalir

Programa actualTodos los programas de usuario

Se dispone aquí de las siguientes funciones:

Programa actual

El fichero indicado en el editor externo es editado en la forma representada en laventana del editor.

KRC:\Palette.SRC

*************************************

INI1:PTP HOME Vel=100 % DEFAULT

2:PTP P1 CONT Vel=100 % PDAT1 Tool[1] Base[0]3:LIN P2 CONT Vel=1.5 m/s CPDAT1 Tool[1] Base[0]4:CIRC P3 P4 Vel=2 m/s % CPDAT2 Tool[1] Base[0]

5:PTP HOME Vel=100 % DEFAULTEND

Page 173: Programación experto - Kuka

10 Editor externo (continuación)

173 de 197ProgExperteBHR5.2 09.03.01 es

Todos los programas de usuario

Se editan todos los programas de aplicación.

Si no se ha declarado previamente una ruta de salida mediante “Asegurar ruta”, en eldirectorio “C:\USERPROG” se guardan de manera estándar medios “Impresora” y“Archivo”.

Si se hadeclarado “Editor” comomedio de salida, la opción “Imprimir” no estará disponible.

La salida a través de la opción “todos los usuarios” (“mnualles”) puede tardar algún tiempodependiendo del archivo al que se desea dar salida.

10.3.4 Cerrar

Si el fichero que se encuentra en el editor ha sidomodificado desde el momento de la carga,puede Ud. primero asegurar las modificaciones (como descrito en el apartado 10.3.2).

Después de haber cerrado el archivo que se encuentra en el editor, a través del menú“Fichero” y de la opción “Abrir” (véase también el apartado 10.3.1), puede cargarse otroarchivo en el editor.

10.3.5 Salir

Si el fichero que se encuentra en el editor ha sidomodificado desde el momento de la carga,puede Ud. primero asegurar las modificaciones (como descrito en el apartado 10.3.2).

La ventana del editor se cierra y emerge nuevamente la superficie de operación del softwaredel robot.

Page 174: Programación experto - Kuka

Programación por el experto

174 de 197 ProgExperteBHR5.2 09.03.01 es

10.4 Menú “Editar”Este menú contiene una serie de funciones de bloque.

Editar CortarCopiarPegar comoBorrarSeleccionar todo

Trayectoria originalTrayectoria inversa

Si deseamarcar una zona, mantenga pulsada la tecla “SHIFT” (mayúsculas) y pulse la teclade estado “Arriba” o “Abajo” (o bien la correspondiente tecla del cursor).

Zona marcada(marca de bloque)

La marcación de un bloque puede desactivarse por medio de la tecla “ESC”.

10.4.1 Cortar (“CTRL”--“X”)

Borra el sector de trayectoria marcado del programa, y lo coloca en el portapapeles prepa-rado para insertar en otro lugar.

10.4.2 Copiar (“CTRL”--“C”)

Copia el sector de trayectoria marcado del programa, y lo coloca en el portapapeles prepa-rado para insertar en otro lugar.

10.4.3 Pegar como ...

trayectoria original (“CTRL”+“V”)

Pega el contenido del portapapeles en la misma secuencia como efectuado el recorte o elcopiado.

trayectoria inversa

Pega nuevamente el contenido del portapapeles en la secuencia inversa.

El último punto de la trayectoria del sector de trayectoria marcado y recortado o copiado,es colocado al comienzo del bloque insertado; el primer punto de la trayectoria al final. Sipor ejemplo, se ha programado por aprendizaje el recorrido hacia un dispositivo o útil, estatrayectoria puede insertarse fácilmente como recorrido de retorno. De este modo no esnecesario efectuar la programación del camino de retorno.

10.4.4 Borrar

El sector de trayectoria marcado es borrado sin memorizarlo en el portapapeles.

El borrado de un sector de trayectoria marcado, no puede ser repuesto. Si usted haborrado por descuido una parte del programa, cierre el fichero sin memorizar lasmodificaciones y luego vuelva a abrirlo.

10.4.5 Seleccionar todo (“CTRL”+”A”)

Queda marcado el programa completo que se encuentra cargado en el editor.

Page 175: Programación experto - Kuka

10 Editor externo (continuación)

175 de 197ProgExperteBHR5.2 09.03.01 es

10.5 Menú “Utilidades”

En este menú se encuentran opciones para la manipulación geométrica del programa.

Utilidades EspejoEntrada manualCambio de bloqueLimpiar lista de ficherosAjuste del TCPAjuste de estructura

BaseTCPWorldEjes

Con las teclas del cursor “↑” o “↓” podrámover lamarcade inserciónde un campo deentradaa otro.

10.5.1 Espejo

ROBROOT

Con función puede generar, en elplano X--Z del sistema decoordenadas $ROBROOT, unasimetría especular de los puntosde trayectoria programados. Paraello, debe estar marcado comomínimo un paso de movimiento.

+Z

--Y

+X

P1

P1’

P2

P2’

P3

P3’

Después de haber seleccionado laopción, se presenta en pantalla unaventana de diálogo, en la cual Ud.debe indicar el nombre del fichero,en donde se ha de memorizar el pro-grama cargado con los puntos de tra-yectoria simetrizados.

Pulsando la tecla de entrada se inicia el procedimiento y el programa se guarda con el nom-bre indicado. Este programa puede ser cargado posteriormente en el editor.

Si quiere cancelar la acción, pulse la tecla “ESC”.

Page 176: Programación experto - Kuka

Programación por el experto

176 de 197 ProgExperteBHR5.2 09.03.01 es

10.5.2 Entrada manual

Con ayuda de esta función puede Ud. efectuar el corrimiento de la posición de los puntosde trayectoria programados en:

-- el sistema de coordenadas de la pieza (BASE)

-- el sistema de coordenadas de la herramienta (TCP)

-- el sistema de coordenadas universales (WORLD) o

-- coordenadas específicas del eje (EJES).

Después de seleccionar unade las posibles opciones, apareceen pantalla una ventanaparala declaración de los valores deseados. Dependiendo del sistema de coordenadas declareaquí el corrimiento y el giro, o los ángulos de los ejes.

BASE

Bajo corrimiento cartesianobasedeunpunto seentiende un corrimiento relativo de unpuntocualquiera en el espacio en el sistema de coordenadas originales (WORLD), que seencuentra en el pie del robot. Por medio del ejemplo aquí representado, quiere aclararse elcorrimiento cartesiano base de un punto:

Y+

Z+

X+

Pnuevo

Pantiguo--Xr--Yr

XantiguoYantiguo

A+

Valores de entrada = valoresrelativos--Y [mm]; --X [mm]; A+[°]

En este ejemplo se produciría

un corrimiento relativo negativo en

X,Y y un giro positivo relativo sobre Z.

El vector de corrimiento se introduce numéricamente en el correspondiente campo de en-trada. Se puede pasar de un campo de entrada a otro con las teclas del cursor “↓” y “↑”. Elcorrimiento se inicia con “Instruc. OK” y se puede cancelar en cualquier momento con “Inter-rupción” o “Esc”.

Introduzca en los campos de entrada los valores del corrimiento (X, Y, Z) en [mm] y del giro(A, B, C) en [Grados].

Page 177: Programación experto - Kuka

10 Editor externo (continuación)

177 de 197ProgExperteBHR5.2 09.03.01 es

TCP

Un corrimiento cartesiano TCP de un punto significa, que un punto cualquiera en el espacioes desplazado de forma relativa respecto al sistema de coordenadas TOOL. Por medio delejemplo aquí representado quiere aclararse el corrimiento cartesiano TCP de un punto:

Z+

Y+

X+Pantiguo

Pnuevo

Yantiguo

--Yr--Zr

Zantiguo

C°r

Valores de entrada = valores relativos--Y [mm]; --Z [mm]; C+[°]En este ejemplo se produciría

un corrimiento relativo negativo en

Y, Z y un giro relativo positivo sobre X [°].

¡Un corrimiento relativo en X no es tenido en cuenta!

El vector de corrimiento se introduce numéricamente en el correspondiente campo de entrada.Sepuedepasar deun campodeentradaaotro conel cursor arriba/abajo. El corrimiento se iniciacon “Instruc. OK” y se puede cancelar en cualquier momento con “Interrupción” o “Esc”.

Introduzca en los campos de entrada los valores del corrimiento (X, Y, Z) en [mm] y del giro(A, B, C) en [Grados].

Page 178: Programación experto - Kuka

Programación por el experto

178 de 197 ProgExperteBHR5.2 09.03.01 es

WORLD

Bajo corrimiento WORLD de un punto, se entiende que el sistema de coordenadas de ori-gen, que de forma estándar se encuentra en el pie del robot, es desplazado relativamente.El ejemplo que ofrecemos pretende aclarar el corrimiento WORLD de un punto:

Y+

Z+

X+

Porg

Pnuevo +Xr

+Yr A--

Valores de entrada = valoresrelativos+Y [mm]; +X [mm]; A--[°]

En este ejemplo se produciría

un corrimiento relativo positivo en

X, Y y ungiro positivo negativo sobreZ.

X+nuevo

Y+nuevo

Z+nuevo

Introduzca en los campos de entrada los valores del corrimiento (X, Y, Z) en [mm] y del giro(A, B, C) en [Grados].

Page 179: Programación experto - Kuka

10 Editor externo (continuación)

179 de 197ProgExperteBHR5.2 09.03.01 es

Ejes

Bajo corrimiento especifico del eje de un punto se entiende, que un punto cualquiera en elespacio es alcanzado pormedio deunmovimiento relativo de los ejes. Por medio de la figuraaquí representada, quiere efectuarse un corrimiento relativo del eje 5.

Pnuevo

Pantiguo

Valores de entrada = valores relativos +A5 [°]En este ejemplo se produciría

un giro relativo positivo de A5 [°].

¡Un giro relativo de los demás ejes no es tenido en cuenta!

α A5 nuevoα A5 antiguo

La declaración del giro del eje debe efectuarse en grados o en incrementos delcorrespondiente eje. Se puede pasar de un campo de entrada a otro las teclas del cursorarriba/abajo. El corrimiento se inicia con “Instruc. OK” y se puede cancelar en cualquiermomento con “Interrupción” o “Esc”.

Introduzca los valores de los ángulos de los ejes (A1 ... A6) en [Grados].

Las indicaciones también pueden efectuarse incrementalmente (E1--E6)[Inc].

Incrementos = Impulsos de giro de los accionamientos de los ejes

Page 180: Programación experto - Kuka

Programación por el experto

180 de 197 ProgExperteBHR5.2 09.03.01 es

10.5.3 Cambio de bloque

Conayudadeesta funciónpuedeUd.modificar datos demovimiento en las partesmarcadasen el programa. Los bloques se marcan pulsando la tecla de estado “Último”, o “Siguiente”y manteniendo pulsada la tecla “SHIFT”.

Después de la llamada de la función, aparece la ventana que se muestra más abajo:

6 Opciones

OKOK

004003002001

Con las teclas del cursor “→” o “←” podrá mover la marca de inserción de un campo deentrada a otro.

Los campos de listas se abren con la combinación de teclas “ALT” + “↓”, O “ALT” + “↑”.

Softkey Significado

Modificar Una vez introducidas las modificaciones deseadas, pulse la tecladel softkey “Cambio”.

Cancelar La función puede ser abandonada en cualquier momento pul-sando la tecla del softkey “Cancelar”.

10.5.4 Limpiar lista de ficheros

Una vez activada esta función, los puntos de trayectoria y parámetros de movimiento noreferenciados se borran de la lista de datos (*.DAT) perteneciente al programa.

Page 181: Programación experto - Kuka

10 Editor externo (continuación)

181 de 197ProgExperteBHR5.2 09.03.01 es

10.5.5 Ajuste del TCP o de BASE

Con esta función puede adaptar el programa cargado en el editor a otro sistema decoordenadas de la herramienta (TOOL) o de la pieza (BASE).

Una vez activada la función, se visualiza la ventana que aparece en la figura de más abajo.A modo de ejemplo, en ella se ha seleccionado el ajuste del TCP.

6 Opciones

OKOK

004003002001

Se visualizan todos los programas con aquellos puntos a los cuales hace referencia laadaptación de Tool o de Base.

Para poder mover la marca de inserción de campo en campo, deben estar activadas lasfunciones de mando del cursor en el campo numérico. Para ello pulse brevemente la tecla“NUM”. A continuaciónpodrádesplazar lamarcade insercióndeun campoaotro con la tecla“SHIFT” (mayúsculas).

Los campos de listas se abren con la combinación de teclas “ALT” + “↓”, O “ALT” + “↑”.

En el campo de listas, dentro de “Nuevos datos de TCP”, seleccione la herramienta a la quedesea adaptar el programa cargado. En los campos de entrada “X=”, “Y=”, “Z=”, “A=”, “B=”y “C=” también pueden indicarse manualmente los nuevos datos de herramienta.

Una vez introducidas las modificaciones deseadas, pulse la tecla del softkey “Cambio”.Podrá salir de esta función en cualquier momento pulsando la tecla del softkey “Cancelar”.

Page 182: Programación experto - Kuka

Programación por el experto

182 de 197 ProgExperteBHR5.2 09.03.01 es

10.6 Menú “HotEdit”

El menú “HotEdit” permite correr en línea (on line) las coordenadas del punto en el sistemade coordenadas Tool, Base y universales durante la ejecución de un programa. El punto demenú “Limits” permite limitar este corrimiento.

HotEdit BaseTCPWorldTTSLimits

Limits -- Base/WorldLimits -- TTS

La corrección del punto en línea (online) solo será tenida en cuenta si el puntero de procesa-miento en avance o el puntero de ejecución principal no han alcanzado en ese momento elpaso de instrucciones.

Los valores máximos para el desplazamiento quedan definidos en el menú “Limits”.

La instrucción de menú “HotEdit > TCP” sólo estará disponible si se ha iniciado el editora través del menú de puesta en servicio.

10.6.1 Base, TCP y World

Marque el paso o los pasos demovimiento que desea correr. Después de seleccionar la op-ción Base, TCP oWorld en el borde inferior del display aparece una ventana de diálogo enla que se puede introducir el corrimiento (X, Y, Z) y el giro (A, B, C) con respecto al sistemade coordenadas correspondiente.

Si se hanmarcado varios pasos demovimiento, éstos se corrigenen el sistema decoorde-nadas WORLD o BASE.

La ventana de diálogo de la fi-gura sirve como ejemplo paralas demás ventanas de diálogo.

Con las teclas del cursor “↑” o “↓” podrámover lamarcade inserciónde un campo deentradaa otro.

Si ha introducido todos los datos necesarios para el corrimiento, pulse la tecla del softkey“Ok”.

Si desea finalizar la acción sin efectuar ningún corrimiento en el programa, pulse la tecla delsoftkey “Cancelar”.

A continuación, la ventana de diálogo se desactivará y aparecerán dos nuevas teclas desoftkey.

Page 183: Programación experto - Kuka

10 Editor externo (continuación)

183 de 197ProgExperteBHR5.2 09.03.01 es

Con la tecla del softkey “Cancelar” puede interrumpir en cualquiermomentola introducción de datos sin memorizar las modificaciones efectuadas.

Ahora puede Ud. asignar los valores declarados, pulsando la tecla del soft-key correspondiente. Hasta este instante, la modificación de datos todavíano fue memorizada, y por ello todavía puede anularse la acción.

Si Ud. ha decidido de otra manera, puede anular la asignación. Para ello sedispone del softkey que se ve al lado. Este botón recién está disponible,después dehaber efectuado la asignaciónde valores. Esta función es espe-cialmente útil cuando se está ejecutando un programa y se puede constatarinmediatamente el efecto del corrimiento.

Si el corrimiento responde a sus necesidades, puede guardar los cambiosde las coordenadas del punto en el fichero “DAT”.

Si alguno de los valores declarados se encuentra fuera de las tolerancias, aparece en laventana de corrimiento del programa una observación o un mensaje de fallo, que el valordeclarado rebasa los límites de tolerancia.

Page 184: Programación experto - Kuka

Programación por el experto

184 de 197 ProgExperteBHR5.2 09.03.01 es

10.6.2 TTS (Sistema de coordenadas de corrección)

Esta función sirve para optimizar puntos en el espacio con el trípode de tecnología queacompaña a la trayectoria (TTS) y puede ser utilizada en instrucciones tecnológicas (por ej.soldadura al arco o aplicación de pegamentos). La corrección TTS está disponible a partirdel grupo de usuarios “Expertos” y se puede utilizar en todos los modos de servicio.

Mediante TTS pueden corregirse las coordenadas cartesianas de un punto con tecnologíasKUKA o tecnologías del cliente. La corrección se efectúa en la dirección de avance de laherramienta.

Normalmente, la dirección de avance es el eje X de la herramienta medida. Dependiendode la configuración, también puede utilizarse el eje Z como dirección de avance.

En cada correccióndepunto sebusca en la lista de datos local (*.DAT) los puntos correspon-dientes con sus coordenadas cartesianas. Si uno de los puntos necesarios no es encon-trado, se emite el correspondiente mensaje de fallos.

La búsqueda del punto el cual indica la dirección de la trayectoria, se efectúa siempre desdeel lugar donde se encuentra el punto a corregir, hacia adelante. La excepción la forma elpunto final de un contorno de soldadura o de aplicación de un cordón de pegamento, dadoque aquí se busca en los números de pasos próximos más bajos.

Deben tenerse en cuenta las siguientes excepciones:

G Se ignora un cambio del sistemadecoordenadas baseentre dos pasos demovimiento;

G Pasos CIRC con una indicación de ángulo del círculo (CA) no se corregirán;

G En la corrección de un punto auxiliar se utiliza la orientación de la herramienta en co-rrespondencia con la del punto de arranque;

G Las coordenadas de un punto es una lista de datos de variables simple o una componentede ella (no se permiten variables importadas, tampoco variables de datos de máquina).

Page 185: Programación experto - Kuka

10 Editor externo (continuación)

185 de 197ProgExperteBHR5.2 09.03.01 es

10.6.2.1 Position--TTS

Marque en el editor externo la instrucción de movimiento deseada y active el comando“HotEdit > TTS”.

La opción “TTS” sólo está disponible, cuando se ha seleccionado un paso demovimientoen una aplicación de soldadura o de pegamento.

Si se han marcado varias instrucciones de movimiento, la corrección hace referenciasiempre a la primera instrucción marcada.

Utilice las teclas del cursor “↑” o “↓”, para colocar el foco en el lugar deseado. Con las teclasdel bloque numérico dé entrada a los nuevos valores.

Eje X

El eje X en el sistema de coordenadas TTS responde a un vector unitario a lo largo de latangente a la trayectoria.

+X

+X

+Z

+Z

+Y

+Y

P1

P2

En una instrucción LIN, el ejeX se desplaza a lo largo de latrayectoria de movimiento

+X+X

+Z

+Z

+Y

+Y

P1

P2

En una instrucción CIRC eleje X se mueve a lo largo dela tangente de la trayectoria

El eje X del sistema de coordenadas de la herramienta no debe encontrarse de formaparalela a la tangente de la trayectoria, caso contrario el sistema de coordenadas decorrección no puede ser creado. En este caso se emite el correspondiente mensaje defallo.

Page 186: Programación experto - Kuka

Programación por el experto

186 de 197 ProgExperteBHR5.2 09.03.01 es

Eje Y

A partir del vector unitario a lo largo de la tangente de la trayectoria (+X) y del eje X delsistemadecoordenadas de la herramienta (+XTool) se generaunplano. El ejeY seencuentraperpendicular a este plano.

+Z+Y

P1

El eje Y se encuentra perpendicular alplano generadomediante “+X” y “+XTool”

+XTool

+X

P2

Eje Z

Del vector unitario a lo largo de la tangente de la trayectoria (+X) y el eje Y (+Y) se generaun plano. El eje Z se encuentra perpendicularmente a este plano.

+Z+Y

P1

El eje Z se encuentra perpendicular al planogenerado mediante “+X” e “+Y”

P2

+X

Corrección del punto PTP, LIN

Con el softkey “Cancelar” puede Ud. finalizar la entrada en cualquier mo-mento.

Después de declarar las modificaciones en los campos de entrada, pulseesta tecla del softkey.

Ahora puede Ud. asignar los valores declarados, pulsando la tecla del soft-key correspondiente. Hasta este instante, la modificación de datos todavíano fue memorizada, y por ello todavía puede anularse la acción.

Si Ud. ha decidido de otra manera, puede anular la asignación. Para ello sedispone del softkey que se ve al lado. Este botón recién está disponible,después de haber efectuado la asignación de valores.

Guarde los cambios.

Page 187: Programación experto - Kuka

10 Editor externo (continuación)

187 de 197ProgExperteBHR5.2 09.03.01 es

Corrección del punto CIRC

Con esta tecla del softkey puede finalizar la entrada en cualquier momentosin guardar los cambios efectuados.

Después de haber introducido los cambios, asigne al punto intermedio (PI)las correcciones correspondientes.

Con este softkey seleccionaUd. el punto final (PF), después de haber dadoentrada a las modificaciones en los campos de entrada.

Ahora puede asignar los valores introducidos pulsando la correspondientetecla del softkey. Hasta este instante, la modificación de datos todavía nofue memorizada, y por ello todavía puede anularse la acción.

Si cambia de opinión, puede anular la asignación. Para ello seutiliza la tecladel softkey que aparece a un lado. Este botón sólo está disponible una vezasignados los valores.

Si el desplazamiento responde a sus necesidades, asegure lascoordenadas del punto.

10.6.3 Limite

Sólo se permite una corrección en línea (online) hasta los valores máximos, que puedenajustarsemediante las funciones “Limits--Base/World” (Límites Base/World) o “Limits--TTS”(Límites TTS).

Las tolerancias máximas permitidas se definen por medio del fichero “C:\KRC\UTIL\HOTE-DIT.INI”. Si se indica un valor mayor, se emite automáticamente un mensaje de fallo.

Para la corrección TTS, valores límites mayores de 5 mm carecen de sentido.

Utilice las teclas del cursor “↑” o “↓”, para colocar el foco en el lugar deseado. Con las teclasdel bloque numérico, defina las nuevas tolerancias.

Los valores introducidos no son aceptados.

Memoriza las tolerancias introducidas.

10.6.3.1 Limits -- Base/World

En la selección del punto del menú aparece la ventana en la cual se indican los valores dedesplazamiento máximos y que pueden ser modificados correspondientemente.

Con esta tecla del softkey, puede finalizar la entrada en cualquiermomento.

Pulse esta tecla del softkey para guardar los valores y cerrar la ventana.

10.6.3.2 Limits -- TTS

Esta función permite definir los valores límite de las correcciones TTS. Estos valores límiteson controlados automáticamente cuando tiene lugar la corrección del punto.

Page 188: Programación experto - Kuka

Programación por el experto

188 de 197 ProgExperteBHR5.2 09.03.01 es

10.7 Menú “Ext Utilidades”

Aquí se ofrecen las funciones para la simetría a espejo, corrimiento y ajuste de los límitesde carrera software.

Ext. Utilidades Fichero -- EspejoFichero -- CambiarLimite cambiado

2 puntos6--Puntos

Estemenú sólo está disponible mientras no se haya cargado ningún programa en el editorexterno.

10.7.1 Fichero -- Espejo

Al contrario que la función “Espejo”, que permite simetrizar puntos de trayectoria marcadosen pasos demovimiento seleccionados, la función “Fichero--Espejo” permite simetrizar pro-gramas de movimientos completos.

Después iniciar esta función, indique en primer lugar el fichero fuente que desea simetrizar.

Con las teclas del cursor “"” o “#”, seleccione el fichero que desea simetrizar.

Con la tecla del softkey “Cancelar”, podrá abandonar esta función en cual-quier momento.

Después de marcar el fichero deseado, pulse la tecla del softkey “Flecha aderecha”.

Page 189: Programación experto - Kuka

10 Editor externo (continuación)

189 de 197ProgExperteBHR5.2 09.03.01 es

Para el fichero simetrizado, indique un nombre compuesto de un máximo de 8 caracteres.

Con esta tecla del softkey regresará a la última página, donde puede selec-cionar otro fichero fuente.

Una vez introducido el nombre deseado para el fichero, pulse esta tecla delsoftkey.

Page 190: Programación experto - Kuka

Programación por el experto

190 de 197 ProgExperteBHR5.2 09.03.01 es

Ahora podrá agregar un comentario, que aparecerá visualizado en el navegador.

Con esta tecla del softkey regresará a la última página, donde puedeintroducir un nombre para el fichero que desea crear (fichero simetrizado).

Después de introducir el comentario deseado, pulse esta tecla del softkey.A continuación se creará el programa correspondiente.

10.7.2 Fichero -- Cambiar

Esta función permite, mediante un vector, mover la posición de los puntos de trayectoriamarcados (2 puntos), o bienmover su posición y girar al mismo tiempo el sistema decoorde-nadas de referencia (6 puntos).

Cambio, 2 puntos

La función de desplazamiento de 2 puntos requiere la programación por aprendizaje de unfichero de referencia (nombre cualquiera; .src, .dat). En este fichero de referencia sememo-rizan dos puntos. Estos puntos definen el vector de desplazamiento (X, Y, C), medida en lacual se han de desplazar los puntos marcados.

Cambio, 6 puntos

La funcionalidad del sistema de desplazamiento de 6 puntos, trabaja con el mismo principio.En el fichero de referencia correspondiente debe programarse por aprendizaje un total deseis puntos. Los primeros tres puntos definen la base fuente, los últimos tres, la base dedestino. Para fuente y destino deben programarse puntos idénticos. Con estos valores secalculan las bases. El corrimiento y el giro entre bases fuente y de destino está determinadopor el valor en que los puntos marcados deben ser desplazados.

El vector debe estar programado en un fichero ya antes del llamado de la función.

Además deben habersemarcado los distintos pasos demovimiento que se han demover.

Después de seleccionar la opción Corrimiento (Cambio) 2 puntos o bien, Corrimiento(Cambio) 6 puntos, el programa necesita la información respecto al fichero de referencia.

Con la tecla del softkey “Cancelar”, podrá abandonar esta función encualquier momento.

Page 191: Programación experto - Kuka

10 Editor externo (continuación)

191 de 197ProgExperteBHR5.2 09.03.01 es

10.7.2.1 Utilizar el fichero de referencia existente

Esta tecla del softkey permite indicar el fichero de referencia y el fichero quedebe ser desplazado.

Seleccione en primer lugar el fichero de referencia con las teclas del cursory a continuación pulse la tecla del softkey “Flecha a derecha”.

Con esta tecla del softkey, regresará a la página anterior.

Page 192: Programación experto - Kuka

Programación por el experto

192 de 197 ProgExperteBHR5.2 09.03.01 es

Utilice de nuevo las teclas del cursor para marcar el fichero que desea des-plazar. A continuación, pulse de nuevo la tecla del softkey “Flecha a dere-cha”.

Con esta tecla del softkey, regresará a la página anterior.

A continuación se carga en el editor el fichero a desplazar. Marque en él las instruccionesde movimiento que desea desplazar.

Pulse de nuevo la tecla del softkey “Flecha a derecha”. A continuación lospuntos seleccionados son desplazados en el fichero. El avance del procesoes visualizado en la ventana de mensajes.

Con esta tecla del softkey, regresará a la página anterior.

En la ventana de mensajes se muestra el resultado de la acción.

10.7.2.2 Crear un nuevo fichero de referencia

Con este softkey se crea un nuevo ficherode referencia. A continuación seselecciona este nuevo programa dereferencia, para que el operario programepor aprendizaje, los puntos necesarios.

Después de la programación por aprendizaje, anule la selección del programa e inicie denuevo el editor externo. Continúe tal como se describe en el apartado 10.7.2.1.

Page 193: Programación experto - Kuka

10 Editor externo (continuación)

193 de 197ProgExperteBHR5.2 09.03.01 es

10.7.3 Limite cambiado

Con ayuda de esta función, es posible adaptar los límites de carrera software de los distintosejes a los programas de movimiento.

Para ello, debe iniciar la función “Limite cambiado” y, con la tecla de selecciónde ventana, regre-sar a la superficie de operación de la unidad de control del robot. Una vez en ella, inicie los pro-gramas de movimiento cuyos valores de ejes son controlados en segundo plano. Después deejecutar todos los programas que necesite, active de nuevo la función. Los valores averiguadosde esta manera pueden establecerse como interruptores de fin de carrera de software.

Las posiciones de los ejes son controladas en segundo plano mientras la función “Límitecambiado” se encuentra activa.

Los valoresmáximos ymínimos queaparecen en cada caso, así como las posiciones actua-les de los ejes A1 ... A6 se visualizan en los campos correspondientes.

Por medio de una casilla de verificación puedenmarcarse los ejes a los cualesse desea asignar los límites de carrera. Para seleccionar los ejes deseados,utilice las teclas del cursor. La tecla espaciadora oficia de llave de conmutación,para activar o desactivar el eje correspondiente. Poner una tilde significa quepara ese eje se puede establecer el , debe activarse el interruptor de softwarede fin de carrera.

Con “Reset” se pueden restablecer los valores originales de los límites de ca-rrera de software.

Pulsando la tecla del softkey “Set”, se definen de nuevo los interruptores desoftware de fin de carrera de los ejes seleccionados. Esta acción se puedecan-celar en cualquier momento (también más tarde) pulsando la tecla del softkey“Reset”.

A los valores medidos en cada eje se agrega un margen de seguridad de 5°.

Page 194: Programación experto - Kuka

Programación por el experto

194 de 197 ProgExperteBHR5.2 09.03.01 es

10.8 Menú “Opciones”

El menú “Opciones” sirve paraestablecer determinados ajustesbásicos en el editor externo.

Opciones

Ajuste de salida

ImpresoraEditorFicheroAsignar ruta

10.8.1 Ajuste de salida

Estemenú permite determinar el medio de salida deseado, que se puedeutilizar en “Salida>Programa actual o Imprimir > Usuarios”.

Mientras no se defina ningúnmedio de salida, los datos se emitirán en un archivo de textosiguiendo la ruta ajustada en “Set Path” (asignar ruta). Si no se ha definido ninguna rutade salida, se utilizará la ruta estándar “C:\USERPROG”.

Impresora

Si se ha configurado una impresora en el sistema operativo, ésta será la que se utilice paraemitir los datos. Si no ha sido configurada ninguna impresora, se edita, en cambio, el men-saje correspondiente en la ventana de mensajes.

Editor

El programa seleccionado se carga en el editor “WordPad” del sistema operativo, donde po-drá ser editado.

Fichero

Si se emite el programa actual mediante la función “Print” (imprimir), este programa seguarda como fichero de texto en la ruta establecida con “Set Path” (asignar ruta).

Si se emiten todos los programas del usuariomediante la función “Print” (imprimir), en la car-peta definida mediante “Set Path” (asignar ruta) se crea el subdirectorio “USERPROG” y enél se guardan los programas como ficheros de texto.

Con un editor de textos se puede tener acceso a cada uno de los programas guardados ytambién modificarlos, en caso necesario.

Asignar ruta

Esta opción sólo es necesaria cuando se quieran guardar programas como fichero en eldisco duro. En la ventana de diálogo puede indicarse el directorio de destino así como tam-bién el nombre del fichero a imprimir. Cuando se emiten todos los programas del usuario através de “File” (archivo) se crea el subdirectorio “USERPROG” y en él se guardan los fiche-ros de texto.

Page 195: Programación experto - Kuka

10 Editor externo (continuación)

195 de 197ProgExperteBHR5.2 09.03.01 es

10.9 Menú “Ayuda”

AyudaVersiónPermanecer arriba

En este menú puede consultar la versión y seleccionaruna opción de visualización.

10.9.1 Versión

En la ventana de mensajes aparece el número de versión del editor externo.

003002001

17:16:3117:16:2717:16:27

VersionFichero abrirExtEdit start

5.0.26OKOK

Nro. Tiempo Mensaje Resultado

Número de versión

10.9.2 Permanecer arriba

Después dehaber seleccionadoesta opción yanoaparecemásen primer plano la superficiede operación del software del robot hasta finalizar el editor.

Page 196: Programación experto - Kuka

Programación por el experto

196 de 197 ProgExperteBHR5.2 09.03.01 es

NOTAS:

Page 197: Programación experto - Kuka

10 Editor externo (continuación)

197 de 197ProgExperteBHR5.2 09.03.01 es

1

Page 198: Programación experto - Kuka

Index

Index -- i

Símbolos

.ERR, 11

# -- símbolo, 39

#BASE, 66 , 84

#CONSTANT, 82

#CSTEP, 20

#GO, 20

#INITMOV, 82 , 84

#ISTEP, 20

#JOINT, 83

#MSTEP, 20

#PATH, 86

#PSTEP, 20

#TCP, 66

#VAR, 82

$ACC.CP, 81

$ACC.ORI1, 81

$ACC.ORI2, 81

$ACC_AXIS, 67 , 81

$ADVANCE, 91

$ALARM_STOP, 54 , 55

$APO.CDIS, 96 , 98

$APO.CORI, 96 , 98

$APO.CPTP, 94

$APO.CVEL, 96 , 98

$APO_DIS_PTP, 94

$BASE, 64 , 71

$CIRC_TYPE, 84 , 87

$CONFIG.DAT, 8 , 55

$CUSTOM.DAT, 55

$CYCFLAG, 53

$FLAG, 53

$IBUS_ON, 55

$IPO_MODE, 66

$MACHINE.DAT, 7 , 55

$NULLFRAME, 71

$NUM_AX, 55

$ORI_TYPE, 82 , 87

$OUT_C, 125

$POS_ACT, 65 , 66

$PRO_MODE, 20

$PSER, 55

$ROBCOR.DAT, 7 , 56

$ROBROOT, 64 , 71

$SET_IO_SIZE, 125

$SINGUL_POS[3], 78 , 80

$TIMER, 53

$TIMER_FLAG, 53

$TIMER_STOP, 53

$TOOL, 64 , 71

$VEL.CP, 81

$VEL.ORI1, 81

$VEL.ORI2, 81

$VEL_AXIS, 67 , 81

$WORLD, 64 , 71

A

Abrir todas FOLD, 18

ABS(X), 51

Acción de conmutación, 159

Aceleración, 80

Aceleración de eje, 68

ACOS(x), 51

Activar bits, 49

Activar interrupciones, 146

Agregado, 36

Ajuste de BASE, 181

Ajuste del TCP, 181

Ambigüedades, 75

Ángulo circular, 89

ANIN, 131

ANIN OFF, 132

ANIN ON, 132

ANIN y ANOUT, 129

ANOUT OFF, 130

ANOUT ON, 130

Aproximación LIN--CIRC, 100

Archivos del sistema, 53

Arco coseno, 51

Arco seno, 51

Arco tangente, 51

Área de la base, 75

Área por encima de la cabeza, 75

Asignación de valor, 27

ATAN2(Y,X), 51

AXIS, 38 , 62

B

B_AND, 48 , 50

B_EXOR, 48 , 50

Page 199: Programación experto - Kuka

Index

Index -- ii

B_NOT, 48 , 50B_OR, 48 , 50

BAS.SRC, 8 , 73BASE, 66

Bidimensional, 34Bin Dec, 31

Bloquear / liberar, 146BOOL, 30 , 32

Borrar, 14BRAKE, 150

Bucle rechazante, 110Bucles, 109

Bucles de conteo, 109

Bucles no rechazantes, 111Bucles sinfín, 112

C

C_DIS, 96 , 98

C_ORI, 96 , 98

C_PTP, 94C_VEL, 96 , 98

CA, 89Cadena cinemática, 65 , 66

Cadenas de caracteres, 36Cambio de bloque, 180

Cambio de útiles, 104Campo bidimensional, 34

Campo tridimensional, 35Campo unidimensional, 33

Campos, 33Cantidad, 51

CELL.SRC, 7Cerrar todas FOLD, 18

CHAR, 30 , 32Cinemáticas de robot ambiguas, 75

CIRC, 89

CIRC !, 105CIRC_REL, 89

COI, 74Coincidencia de paso, 74

Combinación lógica, 47Combinación lógica de frames, 42

Combinación lógica O, 48Combinación lógica O exclusivo, 48

Combinación lógica Y, 48Comentarios, 26

Compilador, 11Compilar, 11Concepto de archivo, 8CONFIRM, 116Constante + referido a la trayectoria, 86Constante + referido al espacio, 84Continous Path, 80CONTINUE, 93Contorno de posicionamiento aproximado, 93Control de ejecución del programa, 107Control de la orientación, 82Copiar, 14Corrección de programa, 13Cortar, 14COS(X), 51Crear programas y editarlos, 10Crear un programa nuevo, 10Criterio de distancia, 96Criterio de orientación, 96Criterio de velocidad, 96CSTEP, 20CTRL--C, 14CTRL--V, 14CTRL--X, 14

D

DECL, 29Declaración, 9DEF, 8 , 136DEFDAT, 164DEFFCT, 137Desactivación de bits, 49Desactivar interrupciones, 146Desplazamiento a Home, 74DIGIN OFF, 134DIGIN ON, 134Disparo por flancos, 146DISTANCE, 157Duración, 28

E

E6AXIS, 38Editar, 11Editor, 13Editor Externo, 168Ejecución en avance, 91

Page 200: Programación experto - Kuka

Index

Index -- iii

Ejecución principal, 91

ELSE, 107

END, 8

ENDFOLD, 17

ENDFOR, 109

ENDLOOP, 112

ENDWHILE, 110

Entrada manual, 176

Entradas / salidas digitales, 121

Entradas analógicas, 131

Entradas digitales, 134

Entradas y salidas binarias, 118

ENUM, 39

Esconder partes de un programa, 17

Espejo, 175

Estado, 71 , 74 , 75

Estructura de archivos, 8

Estructura y creación de programas, 7

Estructuras, 36

EXIT, 112

EXT, 73

F

Filtrado de bits, 49

Flags, 53 , 154

Flags cíclicos, 53

FOLD, 17

FOLD actual abr/cer, 18

FRAME, 38

Funciones, 8 , 136

Funciones de bloque, 13

G

GET_SIG_INF, 123

Giro, 71 , 74

GLOBAL, 165

Global, 137

GO, 20

GOTO, 107

H

HALT, 116

Herramienta fija, 66

Hex Dec, 31

I

Identificación de bloque, 108IF, 107Índice, 33Índice de campo, 33INI, 73Insertar, 14Instrucción, 9

Instrucciones de entrada/salida, 118Instrucciones de espera, 113Instrucciones de movimiento, 61Instrucciones de salto, 107INT, 30 , 31Interpolación referida a la base, 65Interpolación referida a la garra, 66INTERRUPT, 144Inversión, 48IR_STOPM.SRC, 8ISTEP, 20

K

KSD, 7

L

Lenguaje de máquina, 11Limits -- Base/World, 187Limits -- TTS, 187Limpiar lista de ficheros, 180LIN, 87LIN !, 105LIN_REL, 87Lista de datos, 9Lista de ficheros, 9Lista de parámetros, 139

Listas de datos, 164Listas de datos globales, 165Listas de datos locales, 164Local, 137LOOP, 112

M

Manipulación de datos, 40MARCA, 107Medición rápida, 153Modificación de programas, 13

Page 201: Programación experto - Kuka

Index

Index -- iv

Modo de ejecución del programa, 20

Movimientos circulares, 89

Movimientos con posicionamiento aproximado,93

Movimientos CP, 80

Movimientos de trayectoria, 80

Movimientos lineales, 87

Movimientos punto a punto, 67

MSTEP, 20

O

Objetos de datos, 29

Operador, 40

Operador geométrico, 42

Operadores aritméticos, 40

Operadores de bits, 48

Operadores de comparación, 46

Operadores lógicos, 47

Operando, 40

OTTO, 164

P

P00.DAT, 8

P00.SRC, 8

Parada automática del procesamiento enavance, 92

Parada del procesamiento en avance, 92 ,118

Perfil de marcha más elevado, 68

POS, 38

Posición a1, 78

Posición a2, 79

Posición a5, 79

Posición extendida, 79

Posición mecánica cero, 69

Posicionamiento aproximado, 93

Posicionamiento aproximado CIRC--CIRC, 98

Posicionamiento aproximado CIRC--LIN, 98

Posicionamiento aproximado LIN--LIN, 96

Posicionamiento aproximado PTP -- trayectoria,101

Posicionamiento aproximado PTP--PTP, 94

Posicionamiento aproximado trayectoria -- PTP,102

Prioridad, 50 , 147

Prioridades de los operadores, 50

Procesamiento en avance, 91Programación de movimiento, 61Programación por aprendizaje de los puntos,105PROKOR, 13PSTEP, 20

PTP, 67 , 70PTP !, 105

PTP sincrónico, 67PTP_REL, 70PUBLIC, 165

PULSE, 127Punto de la raíz de la muñeca, 75 , 78Punto separador, 36

R

Raíz, 51

Ramificación condicionada, 107Ramificaciones de programa, 107REAL, 30 , 32

Reemplazar, 15REPEAT, 111RESUME, 151

S

S y T, 74

Salidas Analógicas, 129Salidas de impulso, 127Sección de declaraciones, 8

Sección de instrucciones, 8Seno, Coseno, Tangente, 51SIGNAL, 119

Signo !, 105Símbolo $, 54SIN(X), 51

Singularidad de los ejes de muñeca, 79Singularidad por encima de la cabeza, 78Singularidades, 78

Singularidades de la cinemática, 74Sistema binario, 31Sistema de coordenadas base, 65

Sistema de coordenadas cartesiano, 62Sistema de coordenadas de corrección, 184

Sistema de coordenadas de la herramienta, 65

Sistema de coordenadas del robot, 64

Page 202: Programación experto - Kuka

Index

Index -- v

Sistema de coordenadas específico de los ejes,61Sistema de coordenadas universales, 64Sistema decimal, 31Sistema hexadecimal, 31Sistemas de coordenadas, 61 , 71SPS.SUB, 8SQRT(X), 51STRUC, 36Subprogramas, 8 , 136SWITCH, 108

TTAN(X), 51TCP, 66Temporizador, 53Tipo de datos, 29Tipos de datos geométricos, 38Tipos de datos simples, 30Tipos de enumeración, 39Tool Center Point, 67Transferencia de parámetros, 139Transformación de avance, 62Transformación de las coordenadas, 62Transformación de retroceso, 62Translaciones, 63Tratamiento de errores, 23Tratamiento de interrupciones, 144Tridimensional, 34Trigger, 156Trípode de tecnología que acompaña a latrayectoria, 184TTS, 184Turn, 74

UUNTIL, 111

VVariable + referido a la trayectoria, 86Variable + referido al espacio, 85Variable global, 165Variables del sistema, 53Variables y declaraciones, 27Variables y nombres, 27

Velocidad, 80Velocidad de eje, 68Vincular, 11Vínculo, 11

W

WAIT, 113WHILE, 110