Logo Studenta

174576709 Programacion experto Kuka

¡Este material tiene más páginas!

Vista previa del material en texto

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
2 de 197 ProgExperteBHR5.2 09.03.01 es
e Copyright 2005
KUKA Roboter GmbH
Zugspitzstrasse 140
D--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 del
editor.
Además del volumen descrito en esta documentación, pueden existir funciones en condiciones de funcionamiento. El usuario no adquiere el
derecho 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í, no
pueden excluirse totalmente todas las divergencias, demodo tal, que no aceptamos responsabilidades respecto a la concordancia total. Pero
el contenido de estos escritos es controlado periodicamente, y en casos de divergencia, éstas son enmendadas y presentadas correctamente
en las ediciones siguientes.
Reservados los derechos a modificaciones técnicas que no tengan influencia sobre la función.
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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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 decadena 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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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 interrupciones144. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 Generalidades sobre los programas KRL
7 de 197ProgExperteBHR5.2 09.03.01 es
1 Generalidades sobre los programas KRL
1.1 Estructura y creación de programas
1.1.1 Superficie del programa
En el instante de haber cambiado al nivel del experto, se modifica la superficie de operación
del modo representado a continuación:
Mientras que para el usuario son invisibles todos los archivos de sistema, el experto puede
verlos y también editarlos en la ventana de programas. Además,junto a los nombres de 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 y
archivos 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 del
robot
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
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 producen
averías
SPS.SUB Fichero submit para controles paralelos
En el directorio “KRC:\R1\TP\” se encuentra el siguiente archivo:
Fichero Significado
P00.DAT
P00.SRC
Paquete de programas para el acoplamiento a un PLC
Normalmente, los programas y archivos para paquetes de tecnología opcionales se
guardan 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 propiamente
dicho. Aquí existen las variantes DEF y DEFFCT (con valor de retorno). Por el contrario, el
fichero con la extensión “DAT” contiene los datos específicos para el programa. Esta parti-
ción está basada en el concepto de archivo de KRL: El programa contiene, además de las
instrucciones de movimiento, distintas acciones que deben ser ejecutadas por el robot in-
dustrial. Éstas pueden ser determinadas secuencias de movimientos, por ejemplo abrir o
cerrar una herramienta con garras, amén de otras ejecuciones más complejas, tales como
el mando de una pinza de soldadura tomando en consideración las condiciones límite.
Para efectuar el test de programas es útil, y a veces necesario, poder ejecutar tareas parcia-
les. El concepto de archivo realizado en KRL, cumple con las necesidades especiales de
la programación del robot.
1.1.3 Estructura de archivos
Un archivo es la unidad que programa el programador. Con ello, un archivo corresponde a
una unidad de programa en el disco duro o en la memoria (RAM). Cada programa en KRL
puede constar de uno o varios archivos. Los programas simples comprenden exactamente
un archivo. Las tareas más complejas se solucionan mejor con un programa compuesto de
varios archivos.
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ón
de 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 indica
en la declaración con “DEF”. El nombre debe constar de un máximo de 24 caracteres y no
debe ser ninguna palabra clave (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
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 un
cará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 como
correspondientes mediante sus nombres comunes. Los nombres solamente se diferencian
por la extensión, por ejemplo:
Fichero: PROG1.SRC
Lista de datos: PROG1.DAT
En la lista de datos sólo se permiten asignaciones de valores con “=”. Cuando la lista
dedatos 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 de
datos].
Declaración
Instrucción
Lista de datos
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 lista
de datos, el archivo y la lista de datos no se crean automáticamente
al 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 teclas
de flecha y confirme su selección con la tecla del softkey “OK” o con
la 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 el
encabezamiento 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 el
mando del robot a través de un PLC central.
Function En este caso se crea una función (fichero SRC) que contiene el
encabezamiento DEF… y END.
Submit Se crea un fichero SUB con una base o tronco de programa. El
fichero Submit contiene instrucciones y puede ser utilizado por
ejemplo, para controles cíclicos (garras, etc.). El fichero Submit
trabaja en forma paralela al servicio del robot y es ejecutado por
el 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 cada
uno 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 fichero
que 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 24
caracteres. 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 correspondiente
e introduzca el texto deseado.
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 de
programa completo, es decir, el código KRL textual se traduce a un lenguaje de máquina
comprensible para la unidad de control.
Para que el programa sea claro y comprensible, es necesario, por ej., que cuando existen
ramificaciones éstas queden colocadas en distintos niveles. Esto se puede lograr en el
editor 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 de
fallos 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 y
listas de datos necesarios se vinculan para formar un programa. Al vincular estos datos, el
sistema comprueba si todos los módulos existen, han sido analizados y están exentos de
errores. Además, cuando seefectúauna transferencia deparámetros, el vínculo comprueba
la compatibilidad de tipos entre los parámetros transmitidos. Al igual que ocurre durante las
compilaciones, si durante este proceso aparece algún error, se genera un fichero de error
con 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:
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 5
PTP {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
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 de
operació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 detiene
un 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ódigo
ASCII (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 son
borradas 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 desee
modificar 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 se
cargan 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 desea
modificar 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 parte
de 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ón
NUM 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.
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 en
el 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 pulsar
la 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á en
el portapapeles y se borrará del listado del programa.
[Procesar > Cortar]
Alternativamente, se puedemantener pulsada la tecla CTRL del bloque numérico y pulsar
la 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ún
dato en el portapapeles. Esta parte eliminada del programa quedará con ello definitivamente
borrada.
Por este motivo, la ventana de mensajes formula una pregunta de seguridad que debe ser
respondida 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 borrada
del 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ón
Programación por el usuario, capítulo [Creación y modificación de un programa],
apartado [Trabajar con el editor de programa].
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 siguienteventana:
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 que
debe reemplazar a la secuencia buscada.
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” hasta
que encuentre el lugar que busca.
Reemplazar A continuación pulse “Reemplazar”. La secuencia de caracteres
buscada quedará reemplazada por la secuencia de caracteres
previamente 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 de
búsqueda/reemplazo (tal como se describe más arriba) pulse la
tecla del softkey “Reemplazar todo”.
Al hacerlo, en la ventana de mensajes aparecerá el mensaje “Se
ha encontrado la región especificada o marcada”. (Este mensaje
es una confirmación de que la búsqueda se efectuó en todo el
programa o en la región marcada).
Cancelar Al pulsar la tecla del softkey “Cancelar”, abandonará el modo de
reemplazo y en la ventana de mensajes podrá ver la cantidad de
reemplazos efectuados desde el momento en que se activó esta
función.
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 partes
específicas del contenido de un programa que el usuario desea ver. Así, por ejemplo, el
usuario ve solamente los contenidos esenciales de un programa, mientras que el experto
puede ver el programa completo.
1.4.1 FOLD
La superficie de operación KUKA utiliza una técnica especial para visualizar con claridad un
programa. Las instrucciones marcadas como comentarios KRL permiten suprimir la 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 de
una 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 la
superficie de operación de KUKA (KUKA--BOF). En el nivel del experto, se puede hacer que
un bloque KRL sea invisible para el usuario. Para ello, se deben delimitar las 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
FOLD
Copiar
Insertar
Cortar
Borrar
Buscando...
Reemplazar
Cerrar
Procesar FOLD actual abr/cer
Abrir todas FOLD
Cerrar todas FOLD
FOLD
Copiar
Insertar
Cortar
Borrar
Buscando...
Reemplazar
Cancelar programa
Resetear programa
Modificar
Procesar FOLD actual abr/cer
Abrir todas FOLD
Cerrar todas FOLD
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án
automá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 las
palabras “RESET OUT”. Con esta instrucción se puede, por ejemplo, hacer invisible para
el 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 HOME
INT I
;ENDFOLD
;FOLD INITIAL
;---------- Inicialización ---------
INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
INTERRUPT ON 3
BAS (#INITMOV,0 ) ;Inicialización de velocidades,
;aceleraciones, $BASE, $TOOL, etc.
FOR I=1 TO 16
$OUT[I]=FALSE
ENDFOR
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 30,A6 0}
;ENDFOLD
;------------- Sección principal------------
PTP HOME ;desplazamiento COI
LIN {X 540,Y 630,Z 1500,A 0,B 90,C 0}
PTP HOME
END
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 palabra
clave “FOLD”. Por el contrario, con la FOLD abierta se visualizan todas las instrucciones
y declaraciones.
”FOLD” es simplemente una instrucción para el editor. El compilador interpreta las
instrucciones FOLD gracias a que éstas llevan delante el signo de punto y coma como si
fuera un comentario normal.
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 programa
Elmododeejecució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 de
ejecución
Descripción
#GO
Todas las instrucciones se procesan sin interrupción dentro del
programa hasta llegar al final del mismo.
#MSTEP Motion Step (paso de movimiento)
El programa se ejecuta paso por paso, es decir, con una parada
despué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 una
parada después de cada instrucción (también de las líneas en
blanco).
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 parada
después de cada paso de movimiento con parada exacta.
El programa se ejecuta con avance, es decir, la ejecución se
efectúa con posicionamiento aproximado.
Los modos de ejecución de programas #GO, #MSTEP y #ISTEP pueden seleccionarse en
el KCP a través de una función de estado o por medio de la variable “$PRO_MODE”. En
cambio, #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).
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 del
programa. Si el cambio de modo de ejecución del programa tiene lugar durante un paso de
movimiento con avance, se ejecutará, por lo menos, el paso de movimiento actual. En el
caso de un paso demovimiento con posicionamiento aproximado, se ejecutan hasta el final
el 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 desplazamientoCOI. Cuando se llega al
siguiente 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 de
movimiento. 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 desplaza
hasta la siguiente parada exacta o hasta que el avance ha sido ejecutado por completo. En
el 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 zonas
de 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 movimiento
que 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ón
de paso.
El interpretador se reinicia cuando finaliza el paso de movimiento. Los pasos de
movimiento 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 P1
4 PTP P4 4 SUB1()
5 PTP P5 5 PTP P6
6 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ón
del 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 paso
en 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”.
Programación por el experto
22 de 197 ProgExperteBHR5.2 09.03.01 es
Caso especial de interrupción:
1 DEF Interrupt()
2 INT I
3 INTERRUPT DECLARE 5 WHEN $IN[10]==TRUE DO POSITION()
4 PTP HOME
5 PTP P1
=> 6 LIN P2 Ejecución principal
7 INTERRUPT ON
8 LIN P3
9 INTERRUPT OFF
10 PTP P4
11 END
12
13 DEF POSITION()
14 $OUT[12]=TRUE
=> 15 BRAKE Avance
16 $OUT[52]=FALSE
16 END
Al cambiar el modo de ejecución del programa, el puntero adelantado se encuentra dentro
de un subprograma de interrupción. En este caso, el avance ejecuta el subprograma de
interrupción paso por paso en el modo de ejecución de programa “#...STEP” antes de que
continú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”.
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 un
mensaje 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 (con
errores):
Una vez cerrado el editor, aparece en la ventana de mensajes una indicación acerca de la
cantidad de errores.
Al mismo tiempo, durante este proceso, los ficheros afectados son marcados con una cruz
roja.
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 “Editar
DAT” 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 columna
erróneas
Línea errónea del texto
fuente
Descripción del fallo
*1
Editar ERR
Con ello, la barra de teclas de softkey cambia:
ActualizaEditor Cerrar
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ínea
en 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 los
nú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 de
visualización es algo confusa, ya que ofrece toda la información aunque no sea
necesaria. Encontrará más información sobre la visualización de detalles y la
lí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 esa
declaració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 subprograma
en la que sin embargo faltan los paréntesis.
El significado de los números de error también se
puede visualizar en línea mediante la función de
menú “Variable” > ”Únicos”. Para ello, indique en
la ventana de estado, en el campo de entrada
“Nombre” el signo “&” seguido del número de
error. En este caso, sería por ejemplo “&2263” y
se 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 efectuar
las 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
( )”.
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 de
igualdad
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.
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. Con
ellos 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 comienzan
con un punto y coma “;”, por ej.:
…
PTP P1 ;Desplazamiento al punto departida
…
;--- Reiniciar salidas ---
FOR I = 1 TO 16
$OUT[I] = FALSE
ENDFOR
…
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 otras
formas de datos.
En la programación de robots industriales, las variables son necesarias, por ejemplo, para
el procesamiento del sensor. Con ellas, el valor leído por el sensor se puede memorizar y
evaluar en diferentes lugares del programa. Además, se pueden efectuar operaciones 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 elegir
libremente dentro de unos determinados límites.
Nombres en KRL
S 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 el
propio 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 quedura
el procesamiento del programa mediante una posición de memoria (lugar) y un contenido
de memoria (valor).
Asignación de valor:
Los valores se asignan a las variables mediante el signo de igualdad (=). La instrucción
CANTIDAD = 5
significa por tanto queen el área dememoria se registra, con la direcciónCANTIDAD, el valor
5. Al programador no le interesa la apariencia exacta de la dirección, por lo que el compilador
la asigna de manera independiente. Lo único que importa es que en el programa se pueda
acceder en todo momento al contenido de memoria por medio de su nombre.
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éase
el apartado 2.2.1).
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 una
posición de memoria. Este tiempo depende de si la variable está declarada en un archivo
SRC 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 el
procesamiento, el área de memoria vuelve a quedar libre. Por lo tanto, el valor de la
variable 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 existe
mientras exista la lista dedatos. Dichas variables son, por lo tanto, permanentes (hasta
la próxima conexión / desconexión).
2 Variables y declaraciones (continuación)
29 de 197ProgExperteBHR5.2 09.03.01 es
2.2 Objetos de datos
Objetos de datos son aquellas unidades de memoria de un determinado tipo de datos que
pueden recibir un nombre. Las unidades dememoria pueden constar de muchas células de
memoria diferentes (bytes, palabras, etc.). Si el programador acuerda un objeto de datos
de este tipo con un nombre, se obtiene una variable. A partir de ese momento, la variable
ocupa 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 nombres
libremente seleccionables, la programación resultamás fácil y clara, y el programa sepuede
leer con mayor facilidad.
El siguiente ejemplo sirve para clarificar el término “tipo de datos”: en una célula dememoria
con 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 binaria
del 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 se
justifica por lo cómodo que resulta para el usuario, ya que le permite trabajar exactamente
con 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 de
memoria 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úmero
entero” (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ón
deseada.
Tal como muestra el ejemplo, la declaración comienza con la palabra clave DECL, seguida
por 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 la
palabra 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 de
estructura 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 o
los 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 de
lo 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 primera
asignació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 de
variables siempre debe efectuarse antes de esta secuencia.
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 efectuarse
en la sección de declaraciones. No obstante, en la sección de instrucciones la inicialización
sepuede realizar en cualquiermomento. Sin embargo, todas las variables declaradas deben
ser convenientemente inicializadas en una sección de inicialización directamente después
de la sección de declaración (véase Fig. 8).
Solamente en las listas de datos está permitido inicializar variables directamente en la línea
de 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éaseelapartado
2.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 juntocon 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 con
coma flotante
Estado lógico 1 carácter
Rango de
valores
-231…231-1 ±1.1E-38…
±3.4E+38
TRUE, FALSE Carácter ASCII
Tab. 1 Tipo de datos simple
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úmeros
enteros. Solamente es posiblemanejar una parte porque ningúnordenador puede visualizar
todos los números enteros, cuya cantidad es en teoría infinita. Los 32 bits previstos para los
tipos 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 hacia
arriba). 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 solamente
reconoce unos y ceros que representan los estados “activo” e “inactivo”. Un estado (activo
o inactivo) se representa por tanto mediante un bit. Por motivos de velocidad, en general el
ordenador 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) o
del 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 del
modo siguiente:
5 A
=5S161+10S160=90
161 160
=5S161+10S160=90
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 flotante
y a la inexactitud que eso conlleva, es preciso recordar que las leyes algebraicas habituales
dejan de ser válidas para todos los casos. Así, por ejemplo, en el álgebra vale:
1
3
× 3 = 1
Si se deja realizar este cálculo a un ordenador, puede obtenerse un resultado de sólo
0.99999999 E+00. Una comparación lógica de este número con el número 1 daría como
resultado el valor FALSE. Sin embargo, para las aplicaciones prácticas en el campo de los
robots, 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ño
rango 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 una
conversión automática de tipo según REAL. La variable NUMREAL2 tiene por tanto, según
esta 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 asignado
debe estar entre comillas (”):
CARACTER1 = “G”
CARACTER2 = “?”
Respecto a la memorización de todas las series de caracteres, consulte el apartado 2.2.4.
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 datos
que 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 5
OTTO[2] = 10 ; al 2˚ elemento se le asigna el número 10
OTTO[3] = 15 ; al 3˚ elemento se le asigna el número 15
OTTO[4] = 20 ; al 4˚ elemento se le asigna el número 20
OTTO[5] = 25 ; al 5˚ elemento se le asigna el número 25
OTTO[6] = 30 ; al 6˚ elemento se le asigna el número 30
OTTO[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ía
con 7 compartimentos. De acuerdo con las asignaciones anteriores, la ocupación de los
compartimentos 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 ejemplo
el 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 7
OTTO[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 declarada
antes 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: un
campo compuesto de campos)
S Para el índice sólo se permite utilizar tipos de datos enteros
S 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
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 con
un solo índice), en KRL pueden utilizarse también campos bidimensionales o
tridimensionales. 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 la
secuencia de programa
I[3] = 0
FOR COLUMNA = 1 TO 5
FOR FILA = 1 TO 4
I[3] = I[3] + 1
MATRIX[COLUMNA,FILA] = I[3]
ENDFOR
ENDFOR
los elementos de la matriz reciben un valor que corresponde con el orden de su asignación.
Así pues, la ocupación de matriz obtenida es la siguiente:
Fila 3
3
Fila 2
Fila 1Plano 1
Fila 4
1
2
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
C
ol
um
na
2
C
ol
um
na
3
C
ol
um
na
4
C
ol
um
na
5C
ol
um
na
1
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 en
el que se encuentra la matriz (véase Fig. 11). Un campo tridimensional se declara de forma
análoga a los campos unidimensionales o bidimensionales, por ejemplo:
DECL BOOL FELD_3D[3,5,4]
La secuencia de inicialización podría tener el siguiente aspecto:
FOR PLANO = 1 TO 3
FOR COLUMNA = 1 TO 5
FOR FILA = 1 TO 4
CAMPO_3D[PLANO,COLUMNA,FILA] = FALSE
ENDFOR
ENDFOR
ENDFOR
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
22
25
26
29
30
33
34
35
36
37
38
39
40
41
42
45
46
49
50
53
54
55
56
57
58
59
60
C
ol
um
na
2
C
ol
um
na
3
C
ol
um
na
4
C
ol
um
na
5C
ol
um
na
1
Fig. 11 Representación de un campo tridimensional
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 caracteres
individuales. Para utilizar cadenas de caracteres completas, por ejemplo palabras, basta
con 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 campo
NAME[], 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 quedebe
recurrirse 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 campos
pueden ser parte de otras composiciones.
Un ejemplo típico del uso de composiciones es el tipo de datos estándar POS. Este tipo
consta de 6 valores REAL y 2 valores INT, y fue definido en el archivo $OPERATE.SRC de
la siguiente manera:
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.4
POSICION.Y = -23.2
POSICION.Z = 100.0
POSICION.A = 90
POSICION.B = 29.5
POSICION.C = 3.5
POSICION.S = 2
POSICION.T = 6
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].
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 faltan
no 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 la
siguiente información:
REAL V_HILO Velocidad del hilo
INT 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 de
datos, por ejemplo:
DECL TIPOSOLD S_PARA
De este modo, se ha creado una variable S_PARA del tipo de datos TIPOSOLD. Tal como
sehadescrito, a los elementos individuales sepuedeacceder pormediodel puntoseparador
o del agregado:
S_PARA.V_HILO = 10.2
S_PARA.CARACT = 66
S_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
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) o
valores de translación (ejes translatorios) para el desplazamiento específico de los ejes del
robot 1…6.
Con los componentes adicionales E1…E6 en la estructura E6AXIS se puede acceder a los
ejes 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 espacio
queda 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 con
varias 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 los
ejes adicionales.
Tipos de datos geométricos:
Los tipos AXIS, E6AXIS, POS, E6POS y FRAME también se conocen como tipos de datos
geomé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].
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 puede
aceptar el valor