Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programacion Experto Kuka
Programacion Experto Kuka
KR C2 / KR C3
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, de modo 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.
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
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
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 pueden mostrarse 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
Fichero Significado
P00.DAT Paquete de programas para el acoplamiento a un PLC
P00.SRC
DEF 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
Declaración Las declaraciones se evalúan antes de la ejecución del 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.
Instrucción 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.
Lista de datos 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
de datos y el fichero poseen el mismo nombre, pueden utilizarse las variables que estén decla-
radas en la lista de datos de igual modo que las variables declaradas en el fichero SRC.
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.
Para confirmar la entrada, pulse la tecla del softkey “OK” o la tecla de retorno.
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”.
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 se efectúa una transferencia de pará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:
DEF PROG1()
FOR J=1 TO 5
PTP {A1 4}
PTP {A2 -7,A3 5}
PTP {A1 0,A2 -9,A3 9}
ENDFOR
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).
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 o el final de aquella parte
de programa que desea cambiar de lugar. Luego mantenga pulsada la tecla “Shift” en el te-
clado moviendo mientras tanto el cursor hacia arriba o hacia abajo. De esta manera, 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 de bloque se han de utilizar 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.
Alternativamente, puede mantener pulsada la tecla CTRL del bloque numérico y pulsar en
el teclado la tecla C. A continuación suelte ambas teclas.
Alternativamente, se puede mantener pulsada la tecla CTRL del bloque numérico y pulsar
la tecla V del teclado. A continuación, suelte ambas teclas.
Alternativamente, se puede mantener 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ón marcada puede ser eliminada del programa. En este caso, no se memoriza 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.
1.3.2.6 Buscar
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 que
debe reemplazar a la secuencia buscada.
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.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 por medio 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.
FOLD actual abr/ abre o cierra la FOLD en la línea en la que se encuentra el cur-
cer sor de edición
Abrir todas FOLD abre todas las FOLD del programa
Cerrar todas FOLD cierra todas las FOLD del programa
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.
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
END
Sección principal
El mismo programa con folds abiertas:
Sección de declaraciones
Inicialización
Inicialización de velocidades;
aceleraciones
Sección principal
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.
Modo de Descripción
ejecución
#GO
Todas las instrucciones se procesan sin interrupción dentro del
programa hasta llegar al final del mismo.
Conmutación ...STEP--GO
Conmutación GO--...STEP
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:
La tecla del softkey “Abrir” carga el fichero en el editor; al pulsar la tecla del softkey “Editar
DAT” se abre con el editor el fichero de extensión Dat. Si desea borrar los ficheros que contie-
nen errores, pulse “Borrar”. Con la opción “Nuevo” podrá crear un nuevo fichero.
Editar ERR
Descripción breve
Número de fallo
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. El men-
saje “2309” significa: el compilador interpreta la línea como una llamada de subprograma
en la que sin embargo faltan los paréntesis.
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
( )”.
Eliminar un signo de
igualdad
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 de partida
…
;--- Reiniciar salidas ---
FOR I = 1 TO 16
$OUT[I] = FALSE
ENDFOR
…
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.
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 de datos. Dichas variables son, por lo tanto, permanentes (hasta
la próxima conexión / desconexió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.
La asignación de un valor a una variable es una instrucción y, por ello, no puede efectuarse
en la sección de declaraciones. No obstante, en la sección de instrucciones la inicialización
se puede realizar en cualquier momento. Sin embargo, todas las variables declaradas deben
ser convenientemente inicializadas en una sección de inicialización directamente después
de la sección de declaración (véase Fig. 8).
Solamente en las listas de datos está permitido inicializar variables directamente en la línea
de declaración.
DEF NAME()
END
INT:
El tipo de datos Integer (número entero) constituye una parte de la cantidad total de números
enteros. Solamente es posible manejar una parte porque ningún ordenador 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.
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
1 0 1 1 0 1 0
= 1S26+0S25+1S24+1S23+0S22+1S21+0S20= 90
26 25 24 23 22 21 20
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
REAL:
La coma flotante significa la división de un número en mantisa 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 = 1
3
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
2.2.3 Campos
Se conocen como campos aquellos agrupamientos de objetos de un mismo tipo de datos
que forman un objeto de datos. A los componentes individuales de un campo se puede acce-
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
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
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:
Plano 1
Fila 1
Fila 2
1
Fila 3 5
2 9
6 13
Fila 4 10 17
3
7 14
4 11 18
8 15
12 19
Columna 1
16
Columna 2
20
Columna 3
Columna 4
Columna 5
Tridimensional:
Al fin y al cabo, cabe imaginarse los campos tridimensionales como varias matrices 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
Plano 3
Plano 2
41
Plano 1 45
42 49
21 46 53
Fila 1 25 50 57
22 29 54
Fila 2 26 33 58
1
5 30 37 55
Fila 3 34 59
2 9
6 13 38 56
Fila 4 10 17 35 60
3
7 14 39
4 11 18 36
8 15 40
Columna 1 12 19
Columna 2 16
20
Columna 3
Columna 4
Columna 5
A B C D E F G
2.2.5 Estructuras
STRUC:
Si es necesario agrupar diferentes tipos de datos, el campo no es apropiado, por lo que debe
recurrirse a la forma general de composición. Con la instrucción de declaración STRUC 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}
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.
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 T de la estructura POS sirven para determi-
nar una posición unívoca del eje.
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.
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ón
5+7, el 5 y el 7 son los operandos y el signo + es el operador.
En cada operación, el compilador comprueba la admisibilidad de los operandos. Así, por
ejemplo, 7 -- 3 es, como resta de dos números enteros, una operación admisible. Por el 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.
Operador Descripción
+ Suma o signo positivo
-- Resta o signo negativo
* Multiplicación
/ División
DEF ARITH()
END
Cuando el operando izquierdo tiene el tipo de datos POS, se efectúa una adaptación de
tipo. La posición indicada por la estructura POS es convertida en un frame. Esto significa
que 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 sencillo
ejemplo (véase Fig. 12):
En una habitación hay una mesa. El sistema de coordenadas del ESPACIO está definido
como sistema de coordenadas fijo en el rincón delantero izquierdo de la habitación.
La mesa se encuentra paralela a las paredes de la habitación. La esquina delantera iz-
quierda de la mesa se encuentra exactamente a 600 mm de la pared delantera y a 450 mm
de 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 se
debe colocar en una esquina de la pieza, tal como se muestra en Fig. 12. Para luego poder
manipular convenientemente la pieza, el eje Z del sistema de coordenadas PIEZA mira 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 MESA
es X=80 mm, Y = 110 mm y Z = 55 mm.
Base=Mesa:Pieza
ZR
XB
YR YB
ZB
Base
Pieza
ZT YT
XT
Mesa
XR
DEF GEOM_OP ( );
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 un
nú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, en el orden en que aparecen. Los operadores de comparación hacen referencia a estos
números.
Además de las comparaciones simples, también están permitidas las comparaciones múlti-
ples. He aquí algunos ejemplos:
…
BOOL A,B
…
B = 10 < 3 ;B=FALSE
A = 10/3 == 3 ;A=TRUE
B = ((B == A) <> (10.00001 >= 10)) == TRUE ;B=TRUE
A = “F” < “Z” ;A=TRUE
…
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, cuando
se utiliza B_NOT al operando se le suma 1 y el signo se invierte por ejemplo:
B_NOT 10 = -11
B_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).
Dado que a los caracteres ASCII también se puede acceder a través de los CÓDIGOS
ASCII de números enteros, el tipo de datos de los operandos puede ser, además de
INT, también CHAR. El resultado es siempre del tipo INT.
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 determinados
bits 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 es
necesario que la combinación lógica Y por bits sea mayor que cero:
(’B10000001’ B_AND DIG) > 0
Prioridad Operador
1 NOT B_NOT
2 * /
3 + -
4 AND B_AND
5 EXOR B_EXOR
6 OR B_OR
7 == <> < > >= <=
Ejemplos:
…
INT A,B
BOOL E,F
…
A = 4
B = 7
E = TRUE
F = FALSE
…
E = NOT E OR F AND NOT (-3 + A * 2 > B) ;E=FALSE
A = 4 + 5 * 3 - B_NOT B / 2 ;A=23
B = 7 B_EXOR 3 B_OR 4 B_EXOR 3 B_AND 5 ;B=5
F = TRUE == (5 >= B) AND NOT F ;F=TRUE
…
II I
X=COS(α)
Y=SIN(α)
α
0
III IV
Las variables del sistema están totalmente integradas en el concepto de variables de la KRL.
Poseen un tipo de datos correspondiente y pueden ser leídas y escritas como cualquier otra
variable del programa, siempre y cuando no existan limitaciones a causa del tipo de datos.
La posición actual del robot, por ejemplo, solamente se puede leer, pero no se puede escribir.
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 para medir los proce-
sos temporales y pueden por tanto utilizarse como “cronómetro”. La medición se inicia y se
para 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 puede
reiniciar en todo momento la variable de temporizador afectada, por ejemplo:
$TIMER[4] = 0
Si el valor de una variable de temporizador cambia de menos a más, el correspondiente flag
se coloca en TRUE (condición Timer--Out), por ejemplo:
$TIMER_FLAG[4] = TRUE
Al arrancar la unidad de control, todas las variables de temporizador se ocupan automá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 la
superficie 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 del
arranque de la unidad de control, todos ellos están predefinidos con FALSE.
Los flags sólo son cíclicamente activos en el nivel de robot. Los flags cíclicos son admisibles
en 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 flag
cíclico se puede utilizar cualquier expresión booleana que se desee.
Son admisibles
G las variables de sistema booleanas y
G las variables booleanas que han sido declaradas e inicializadas en una lista de datos.
No son admisibles
G 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 evaluada
cíclicamente. Esto quiere decir que cualquier modificación de la entrada 2 o de la entrada
13 producirá también un cambio en $CYCFLAG[10], sin importar el lugar en que se encuen-
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 de
un módulo o se efectúa una selección de paso con la función reset. Si se alcanza el final del
programa, todas los flags cíclicos permanecerán activos.
Además de las listas de datos que usted crea durante la programación, en el KR C... existen
listas de datos definidas por KUKA que se suministran con el software de control. Estas listas
de 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 crean durante la instalación
del 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.DAT
es una lista de datos predefinida que solamente contiene variables de sistema predefi-
nidas. Con los datos de la máquina, se adapta la unidad de control a los robots conecta-
dos (cinemática, parámetros de regulación, etc.). Existe una lista $MACHINE.DAT
tanto 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 unidad de
control)
$NUM_AX Número de ejes del robot (específico del robot)
G $CUSTOM.DAT
es una lista de datos que solamente existe en el sistema de control. Contiene datos con
los que puede configurar o parametrizar determinadas funciones de control. Para el
programador solamente existe la posibilidad de modificar valores de las variables pre-
definidas. Usted no podrá crear variables nuevas ni borrar variables ni borrar variables
existentes.
Ejemplos:
$PSER_1 Parámetro de protocolo de la interfaz serial 1
$IBUS_ON Conexión de grupos alternativos de interbus
G $CONFIG.DAT
es una lista de datos que ha sido predefinida por KUKA pero no contiene variables de
sistema predefinidas. Existe una $CONFIG.DAT tanto en el nivel de la unidad de control
como en el nivel de robot. En ella pueden definirse variables, estructuras, canales y
señales que mantienen su validez durante mucho tiempo y son de gran importancia
para 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
Ejemplos
Puesto que la variable de cadena “StrVar[ ]” es un campo del tipo CHAR, para averiguar
la longitud no se permiten caracteres sueltos ni constantes.
Ejemplos
Ejemplo
Como variable de cadena “StrVar[ ]” solamente se permite un campo del tipo CHAR.
Ejemplo
$Loop_Msg[ ] = “Secuencia1 “
StrAdd($Loop_Msg[], “Secuencia2” -> $Loop_Msg[ ] = “Secuencia1
Secuencia2”
Puesto que la variable de cadena “StrDest[ ]” es un campo del tipo CHAR, no se permiten
caracteres sueltos ni constantes.
Ejemplos
Ejemplos
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 permiten
caracteres sueltos ni constantes.
3 Programación de movimiento
Una de las tareas más importantes de una unidad de control de robot es el movimiento del
robot. El programador controla los movimientos del robot industrial mediante instrucciones
de movimiento especiales. Éstas constituyen también la característica principal que
diferencia los lenguajes de robot de los lenguajes de programación comunes para
ordenador, como el C o el Pascal.
Según el tipo de control, estas instrucciones de movimiento pueden subdividirse en
instrucciones para movimientos simples de un punto a otro punto e instrucciones para
movimientos 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étrica
exactamente definida (una recta o un arco de circunferencia), en los movimientos de punto
a punto, la trayectoria de movimiento depende de la cinemática del robot y por ello no se
puede prever con exactitud. Ambos tipos de movimiento tienen en común el hecho de que
la programación se realiza desde la posición actual hasta una nueva posición. Por tanto, en
una instrucción de movimiento solamente es necesario, por lo general, indicar la posición
de destino (excepción: movimientos circulares, véase 3.3.4).
Las coordenadas de las posiciones pueden especificarse textualmente introduciendo
valores numéricos, o bien mediante el desplazamiento con el robot y la memorización de los
valores actuales (aprendizaje). En ambos casos, las indicaciones pueden ser referidas a
distintos sistemas de coordenadas.
Otras propiedades de movimiento, tales como las velocidades y aceleraciones, así como
el control de orientación, pueden ser ajustadas mediante variables del sistema. El
posicionamiento aproximado de los puntos intermedios se inicia por medio de parámetros
opcionales en la instrucción de movimiento. Para el posicionamiento aproximado debe estar
activado un procesamiento en avance.
Las posiciones específicas de los ejes sólo se pueden alcanzar utilizando pasos de
movimiento PTP. Si un movimiento de trayectoria se programa con una posición de robot
específica de un eje, se producirá un fallo.
Transformación de las coordenadas
Puesto que el ser humano, como programador, piensa en coordenadas cartesianas, no
suele ser práctico programar en el sistema de coordenadas específicas de los ejes. La
unidad de control ofrece por ello varios sistemas cartesianos para la programación cuyas
coordenadas se transforman automáticamente en el sistema específico del eje antes de que
se ejecute el movimiento (véase Fig. 16).
Transformación de avance
X, Y, Z, A, B, C (, S, T)
Transformación de retroceso
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.
En el sistema de coordenadas cartesiano, la posición de un punto en el espacio queda uní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 respecto
al origen de coordenadas.
Z
P
Z1
Y1
X1 X
Para poder alcanzar cualquier punto en el espacio con la orientación que se desee, además
de los tres valores translatorios se necesitan tres datos de rotación:
Los ángulos denominados en el KR C1 como A, B y C giran sobre los ejes de coordenadas
Z, 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) que
se manejan en aeronáutica. El ángulo C corresponde a “rodar”, el ángulo B a “cabecear” y
el ángulo A a “oscilar” (véase Fig. 18).
A B C
Z’ Y’
Z B
A Y ’’
Z ’’
Y X’ Y ’’’
Z ’’’
X
C
X ’’ X ’’’
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 describir
unívocamente la posición y la orientación de un punto en el espacio. En la KR C1, esto se
logra mediante la estructura predefinida FRAME.
y
z
SC de la
z x herramienta
z y
SC básico x
y
SC universal
z
SC del robot
y x
X
Z
z
$TOOL
y
z
x
$POS_ACT
y
$BASE x
x
$ROBROOT
z y
$WORLD x
Fig. 20 Cadena cinemática para la interpolación referida a la base
Sin embargo, en la práctica industrial, cada vez es más habitual fijar la herramienta en el
espacio (por ejemplo, una antorcha de soldadura) y guiar la pieza a lo largo de la herramienta
fija mediante una garra adecuada.
$TOOL y
x
z z
$POS_ACT
z y
x
$BASE
x
$ROBROOT
z y
$WORLD x
Puesto que, en general, en los movimientos PTP con coordenadas de destino cartesianas
no se conoce cuál es el eje directriz, en esos casos suele resultar conveniente equiparar
los 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 con
trayectos de desplazamiento más cortos.
Los movimientos con sincronización de fases generan (además) una trayectoria de
movimiento que siempre discurre igual en el espacio, independientemente de la velocidad
y aceleración programadas.
END
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 ángulos
en la instrucción PTP son valores absolutos. El robot no gira el eje otros 45_, sino que se
desplaza hasta la posición absoluta 45_ del eje.
Para el desplazamiento relativo se utiliza la instrucción PTP_REL. Así pues, para girar por
ejemplo los ejes 1 y 4 35_ cada uno, tan sólo es necesario programar:
PTP_REL {A1 35,A4 35}
A3 = 0_
PTP {A3 45}
A3 = 90_
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 la
indicación de las coordenadas cartesianas mediante una estructura POS como la que apa-
rece en el siguiente ejemplo:
DEF PTP_POS()
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 de
coordenadas 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 de
coordenadas 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 el
frame cero ($NULLFRAME = {FRAME: X 0, Y 0, Z 0,A 0,B 0,C 0}), lo que
significa que todos los datos hacen referencia al punto central de la brida. Así pues, el punto
central de la herramienta (Tool Center Point: TCP) se encuentra, por así decirlo, en el punto
central 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 sobre medición de
herramientas.
Con la instrucción PTP mostrada arriba, el robot se desplaza ahora de tal modo que, en el
punto 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 la
orientació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énticas
para este tipo de robot.
También al indicar el punto final en las coordenadas cartesianas se pueden volver a omitir
componentes 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_.
YBASE
200
150
100
50
XBASE
50 100 150 200
Fig. 24 Diferencia entre las coordenadas cartesianas absolutas y relativas
Con las coordenadas cartesianas se puede ejecutar, directamente en la instrucción de mo-
vimiento, una combinación lógica de frames mediante el operador geométrico. De este
modo puede iniciarse, por ejemplo, un desplazamiento hacia el sistema de coordenadas
base sin modificar la variable $BASE.
El corrimiento de la base mediante el operador de dos puntos tiene además una
ventaja decisiva frente a la opción de ocupar de nuevo $BASE:
El corrimiento se efectúa en el paso de movimiento, mientras que una ocupación
de $BASE debe realizarse en un momento anterior al paso de movimiento. De
este 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 se
utilizaría la nueva base para el paso de movimiento POS_1. Lo mismo ocurre también
cuando se produce una parada del primer paso de movimiento si se encuentra activado un
procesamiento en avance correspondiente.
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 otros
corrimientos con el operador geométrico.
DEF FR_VERS ( )
COI
Antes poder procesar un programa es necesario generar la coincidencia de paso (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 velocidad
automática reducida. Una vez alcanzada la trayectoria programada, el movimiento se detiene
y el programa puede continuar cuando se vuelve a pulsar la tecla de arranque.
SyT
En una indicación POS, los datos “S” y “T” permiten seleccionar de entre varias posiciones
de robot posibles para un mismo 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 de movimiento, si se utilizan coordenadas cartesianas es
muy importante programar también “Status” y “Turn” para definir una posición inicial uní-
voca. Como para los movimientos de trayectoria (véase 3.3) no se tienen en 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 completa PTP 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 no
sea necesaria una posición determinada del eje (por ejemplo, porque hay obstáculos). El
robot mantiene el valor de S antiguo y selecciona el nuevo valor T, que da como resultado
el recorrido axial más corto permitido. Este recorrido también es siempre el mismo en las
distintas ejecuciones de la programación debido a la programación única de “S” y “T” en el
primer paso PTP.
Tanto Status (estado) como Turn (giro) requieren datos enteros (integer) que deben
indicarse 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ás
alcanzar ángulos de eje superiores a +180_ o inferiores a --180_ sin una estrategia de
desplazamiento especial (por ejemplo, puntos intermedios). En los ejes rotatorios, los bits
individuales determinan el signo que precede al valor del eje del siguiente modo:
Bit x = 0: Ángulo del eje x ≥ 0_
Bit x = 1: Ángulo del eje x < 0_
Estado
Con el estado S se manejan las ambigüedades en la posición del eje (véase Fig. 25). Por
lo tanto, S depende de la respectiva cinemática del robot.
Eje 5
Ambigüedades
Eje 3
Eje 2
Eje 5
Eje 4 Eje 6
Fig. 25 Ejemplos de cinemáticas de robot ambiguas
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 de
coordenadas $ROBROOT. En los valores distintos de 0_, se
mueve junto con el eje 1.
Así pues, el área de base/por encima de la cabeza, puede definirse del modo siguiente:
G Si el valor x del punto de la raíz de la muñeca, expresado en el sistema de coordenadas
A1, es positivo, el robot se encuentra en el área de base.
G Si el valor x del punto de la raíz de la muñeca, expresado en el sistema de coordenadas
A1, es negativo, el robot se encuentra en el área por encima la cabeza.
El bit 1 indica la posición del brazo. La activación del bit depende del tipo de robot. En los
robots 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 3
y el eje 4 (por ejemplo, los KR 30, véase Fig. 26), la posición angular en la cambia el valor
del bit 1 depende de la magnitud de este offset.
Offset
La Fig. 27 muestra la repercusión de los bits de Status (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 valor
de 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 este
giro. Mientras que la configuración del brazo ha permanecido igual, la configuración de la
muñ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 hasta
una 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.
Fig. 27 Efectos de los bits de estado (Status) sobre la posición del robot
3.2.3.1 Singularidades
La cinemática estándar de KUKA diferencia 3 posiciones singulares distintas. Éstas son: la
singularidad por encima de la cabeza, la posición extendida y la singularidad de los ejes de
la 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 de
los ejes) unívoca aunque se hayan preestablecido los datos Status y Turn. Las pequeñas
alteraciones 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 la muñeca, cuya posición radica en el punto de intersección
de los ejes A4, A5 y A6, se encuentra en el eje 1.
Punto de la raíz
de la muñeca
Punto de la raíz
de la muñeca
¦0,01812_
En casos excepcionales puede que no sea posible alcanzar exactamente un punto fuera
de la zona de singularidad con los mismos ángulos de eje que aprendió originalmente.
Como mínimo, uno de los componentes del movimiento (translación, basculamiento y giro
o eje[4]...[6]) se desplaza en cada instante de la ejecución del movimiento con aceleración
o velocidad programada. Los componentes no dominantes se adaptan con sincronización
de 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 o
en $CONFIG.DAT cuando se activa la secuencia de inicialización del paquete base.
El robot se detiene hasta que se sobrepasa uno de los valores permitidos de velocidad o de
aceleración. Este puede ser el caso, por ejemplo, cuando un movimiento del robot se produce
cerca de la singularidad de la muñeca (posición extendida de los ejes de la muñeca).
Punto de la raíz
La singularidad de la muñeca se alcanza
de la muñeca
cuando los ejes A4 y A6 se encuentran
paralelos.
A través de la variable del sistema $CP_VEL_TYPE se pueden reducir los avances de los
ejes, y con ello la aceleración y la velocidad, para evitar que se alcancen los valores límites
de 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 el modo de servicio T1, se debe activar la variable
#VAR_T1 (en T1 se utilizan valores más pequeños de velocidad y aceleración de los ejes).
Para todos los modos de servicio, se debe activar la variable #VAR_ALL. En el modo de ser-
vicio manual la reducción siempre se encuentra activa.
Con la variable del sistema $CPVELREDMELD, en ambos modos de servicio de test se recibe
un mensaje si se reduce la velocidad de trayectoria. Para ello, se debe asignar a la variable
de mensaje el valor “1”.
3.3.2 Control de la orientación
Si 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 le
asigna un nuevo valor o se reinicia el programa.
$ORI_TYPE = #CONSTANT
Durante el movimiento de trayectoria, la orientación se mantiene constante. Para el punto
final se ignora la orientación programada y se utiliza la del punto inicial.
$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 logra mediante el des-
plazamiento lineal del eje axial de la muñeca. Esta opción permite evitar los problemas que
se derivan de la singularidad de la muñeca, ya que no implica ningún control de orientación
mediante 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 de destino, ya que ambos son necesa-
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 utilizar
ORI_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 las figuras Fig. 31 y Fig. 32 se alcanza un punto en el espacio con las mismas
coordenadas cartesianas pero distinto estado. Aquí los ángulos del eje de la muñeca son
absolutamente idénticos en ambas figuras, pero la orientación del TCP es diferente.
Estado “A” de la
posición del robot
Estado “B” de la
posición del robot
$CIRC_TYPE = #BASE
Control de orientación referido al espacio durante el movimiento circular. Este valor también
se 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 para apli-
caciones en donde lo más importante es el movimiento de trayectoria, es decir, guiar la punta
de la herramienta sobre la trayectoria circular. Resulta idóneo sobre todo en aplicaciones
con una pequeña modificación de la orientación entre el punto inicial y el de destino, o en
aplicaciones 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).
$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 se
mantiene relativo con respecto al plano del círculo y a la tangente del círculo. Esta relación
puede explicarse gráficamente utilizando el denominado trípode que acompaña a la trayec-
toria (véase Fig. 35).
en el sistema mediante
BAS(#INITMOV,0)
$ORI_TYPE #VAR
$CIRC_TYPE #PATH #BASE
En los movimientos lineales, el estado del punto final es igual al del punto inicial. Por
este motivo, en un punto de destino correspondiente al tipo de datos POS se ignora la
indicación del estado (status) y del giro (Turn). Por ello, antes de la primera instrucción
LIN, tiene que estar programado un movimiento PTP con la indicación completa de la
posició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 de
coordenadas Tool y Base, se realizan de nuevo por medio de la rutina de inicialización
BAS.SRC.
DEF LIN_BEW ()
PTP HOME
END
El valor del ángulo circular no está limitado. Una posibilidad especial es la de programar circun-
ferencias completas (> 360_).
CA > 0° CA < 0°
DEF CIRC_BEW ( )
$ORI_TYPE=#VAR
LIN {A 100} ; Reorientación del TCP
PTP HOME
END
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 de
pasos 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 la
superficie de operación durante el procesamiento del programa, muestra siempre el paso
de 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 movimiento
que solamente son preparados por la unidad de control y realizados posteriormente durante
la ejecución principal. (Véase Fig. 38).
Puntero de
ejecución
principal
Para permitir un posicionamiento aproximado, debe estar ajustado, como mínimo, un pro-
cesamiento en avance de 1 (el valor estándar de la variable $ADVANCE es “3”. El máximo
posible de pasos de avance son 5).
En un subprograma de interrupción no es posible el procesamiento en avance. La unidad
de control confecciona siempre los programas de interrupción por líneas, por lo que no es
posible un posicionamiento aproximado en ellos.
Preajustes de $ADVANCE:
en el sistema mediante
BAS (#INITMOV, 0)
$ADVANCE 0 3
Las instrucciones y los datos que pueden influir en los dispositivos periféricos (por ej. las in-
strucciones de entrada/salida) o que se refieren al estado actual del robot generan una Parada
del procesamiento en avance (véase Tab. 6). Esto es necesario para asegurar la secuencia
correcta en ejecución y tiempo, de las instrucciones y los movimientos del robot.
Punto de destino
Punto inicial
Fig. 39 Posicionamiento aproximado de los puntos intermedios
DEF UEBERPTP ( )
PTP HOME
END
x
x=1296,61
y=133,41
x=1246,93
y=--98,86
x=1209,5
y=381,09
x=1159,08
y=--232,06
x=1109,41
y=--0,51
x=988,45
y y=238,53
Para hacer más clara esta idea, se ofrece el siguiente ejemplo, vinculado a la Fig. 41:
DEF UEBERLIN ( )
PTP HOME
END
x=1296,61 x
y=133,41
x=1246,93
y=--98,86
x=1209,5
y=381,09
x=1159,08
y=--232,06
x=1109,41
y=--0,51
x=988,45
y y=238,53
PTP HOME
END
x=980
y=--238
150_
x=867
y=--192
y
Aproximación
LIN--CIRC
Final del posicionamiento
aproximado
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 eje
y 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 del
modo siguiente:
Posicionamiento aproximado PTP trayectoria
El comienzo del posicionamiento aproximado se determina con el criterio PTP $APO.CPTP
mediante 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_DIS
LIN 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.
Programa: P1
...
LIN P1 P2
LIN P2 C_DIS
LIN P2_INTERM C_DIS
PTP P3
... Mesa
DEF UEBERB_P ( )
$APO.CDIS=25
LIN {X 1183.15,Y -52.64,Z 716,A 79.11,B 68.13,C 79.73} C_DIS
CIRC {POS: X 1134,Y 53.63,Z 716},{X 1019.21,Y 124.02,Z 716,A
79.11,B 68.12,C 79.73}
PTP HOME
END
x=1209,74
y=--153,44
x=1183,15
y=--52,64
x=1108,78 x=1134
y=267,16 y=53,63
HP
x=1087,47
y=218,67
HP
x=1037,81
x=1019,31 x=1019,21 y=--117,83
y=306,71 y=124,02
Ejemplo
En este ejemplo, al principio del movimiento de posicionamiento aproximado de P1 a
P2, 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]
TOOL2
Brida
TOOL1 TOOL1
Comienzo
aproximación 1
P2_TOOL2
P0_TOOL1 P1_TOOL1
TOOL2
Fin aproximación 2
P1_TOOL2
P0_TOOL2
Comienzo aproximación 2
Encontrará más información sobre el tema “Listas de datos” en el capítulo [Listas de datos].
Si ha creado una instrucción de movimiento a través de los formularios inline puede utilizar
tambié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 indicados
en el formulario y una X delante (por ello, para los nombres de puntos en los formularios
inline 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 mismo
sistema de coordenadas base para que se produzca el desplazamiento hasta el mismo
punto.
La instrucción GOTO conduce rápidamente a programas no estructurados sin una buena visión
global, dado que además cualquier instrucción GOTO puede ser sustituida por cualquier otra
instrucción de bucle, deberá, en lo posible, evitarse la utilización de GOTO.
4.1.3 Distribuidor
Si existen más de 2 alternativas, se puede programar bien con una estructura IF encajada
o bien – más confortable – utilizar en la programación el distribuidor SWITCH.
SWITCH La instrucción SWITCH es una instrucción de selección para diferentes ramificaciones del
programa. Un criterio de selección es ocupado antes de la instrucción SWITCH con un valor
Identificación determinado. Si el valor concuerda con una identificación de bloque, se procesa la
de bloque ramificación de programa correspondiente, saltando el programa, sin tener en consideración
la identificación de bloque subsiguiente, hasta la instrucción ENDSWITCH. Si no concuerda
una identificación de bloque con el criterio de selección, se procesará, en caso de que exista,
un bloque DEFAULT (por defecto). En caso contrario se continuaría con la instrucción
siguiente a partir de la instrucción ENDSWITCH.
A una ramificación de programa es permisible asignar varios identificadores de bloque. Sin
embargo, a la inversa, no es recomendable utilizar un identificador de bloque repetidas
veces ya que sólo es considerada la primera ramificación con la identificación
correspondiente.
Los tipos de datos permitidos del criterio de selección son INT, CHAR y ENUM. El tipo de dato
del criterio de selección deberá concordar con la identificación de bloque.
La instrucción de DEFAULT (por defecto) puede faltar, pero sólo puede aparecer una sola
vez dentro de una instrucción SWITCH.
Con una instrucción SWITCH puede llamar p. ej. diferentes subprogramas en dependencia
de un número de programa. El número de programa podría enviarse p. ej. del PLC a las
entradas digitales del KR C1. Así está disponible como criterio de selección en forma de un
valor Integer.
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=1
PARTE_1()
CASE 2 ;en caso de PROG_NR=2
PARTE_2()
PARTE_2A()
CASE 3,4,5 ;en caso de PROG_NR=3, 4 o 5
$OUT[3]=TRUE
PARTE_345()
DEFAULT ;en caso de PROG_NR<>1,2,3,4 o 5
ERROR_UP()
ENDSWITCH
…
END
4.2 Bucles
La estructura base siguiente para el control del procesamiento del programa son los bucles
que contienen una o varias instrucciones de procesamiento repetitivas hasta que se haya
cumplido una determinada condición. Los bucles se diferencian según la forma de la 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 siendo
rechazado por la unidad de control (mensaje de fallo).
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
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
DEF WHILE_PR()
…
INT X,W
…
WHILE $IN[4] == TRUE ;Ejecución mientras que entrada 4 activada
PTP PALETA
$OUT[2] = TRUE
PTP POS_2
$OUT[2] = FALSE
PTP HOME
ENDWHILE
…
X = 1
W = 1
WHILE W < 5; ;Ejecución mientras que W sea menor que 5
X = X * W
W = W + 1
ENDWHILE
;W ahora es 5
… ;X ahora es 1S2S3S4 = 24
W = 100
WHILE W < 100 ;Ejecución mientras que W sea menor que
100
$OUT[15] = TRUE W = W + 1
ENDWHILE
… ;El bucle no se ejecuta nunca, W queda 100
END
REPEAT
Instrucciones
UNTIL Condición de interrupción
La condición de interrupción es análoga a la del bucle WHILE, una expresión lógica,
una variable booleana, una llamada de función booleana o una combinación lógica con un
resultado booleano:
DEF REPEAT_P()
…
INT W
…
REPEAT
PTP PALETA
$OUT[2]=TRUE
PTP POS_2
$OUT[2]=FALSE
PTP HOME
UNTIL $IN[4] == TRUE ;Ejecución hasta que se active la entrada 4
…
X = 1
W = 1
REPEAT
X = X * W
W = W + 1
UNTIL W == 4 ;Ejecución hasta que W sea igual a 4
;W ahora es 4
… ;X ahora es 1S2S3S4 = 24
W = 100
REPEAT
$OUT[15] = TRUE
W = 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 activa
END
Con WHILE y REPEAT tiene en sus manos una herramienta muy potente para la programación
estructurada, con esta podrá sustituir en la mayoría de los casos, las instrucciones GOTO. La
secuencia de instrucción se puede realizar por ejemplo de una forma más elegante con REPEAT:
GOTO … REPEAT …
X = 0 X = 0
G = 0 G = 0
MARCA: REPEAT
X = X + G X = X + G
G = G + 1 G = G + 1
IF G > 100 THEN UNTIL G > 100
GOTO LISTO …
ENDIF
GOTO MARCA:
LISTO:
…
LOOP
Instrucciones
ENDLOOP
La ejecución repetida del bloque de instrucción sólo se puede finalizar mediante la instruc-
ción EXIT.
DEF EXIT_PRO()
PTP HOME
LOOP ;Inicio del bucle sinfín
PTP POS_1
LIN POS_2
IF $IN[1] == TRUE THEN
EXIT ;Cancelar, cuando entrada 1 activada
ENDIF
CIRC HELP_1,POS_3
PTP POS_4
ENDLOOP ;Final del bucle sinfín
PTP HOME
END
Valores numéricos
A cada variable se le asigna un número.
Valores variables
En lugar de un número se transfiere una variable. Para ello es necesario una declaración de
las variables en la lista de datos (*.dat). Una convención en el archivo fuente (*.src) fija el
valor de la variable.
Lista de datos: Archivo fuente:
Convención de señales
En una convención de señales, que consta de varias entradas o salidas, se indica solamente
el 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]”.
DEF AUTO_QUIT()
INT M
DECL STOPMESS MLD ;Tipo de estructura predefinida para men-
sajes de Stop
IF $STOPMESS AND $EXT THEN ;Verificar mensaje de Stop y
comprobar modo de servicio
M=MBX_REC($STOPMB_ID,MLD) ;lectura del estado actual en
MLD
IF M==0 THEN ;Comprobación, si se puede producir la
confirmación
IF ((MLD.GRO==2) AND (MLD.STATE==1)) THEN
CONFIRM MLD.CONFNO ;Confirmación de este mensaje
ENDIF
ENDIF
ENDIF
END
5 Instrucciones de entrada/salida
5.1 Generalidades
La KR C... conoce 1026 entradas y 1024 salidas. En el armario de la unidad de control están-
dar de KUKA, el usuario dispone, en el conector X11 (módulo MFC), de las entradas y salidas
siguientes:
Entradas 1 … 16
Salidas 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 de
buses 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 utilizadas
pueden usarse como marcas.
Las entradas/salidas del módulo MFC pueden conmutarse a otras zonas por medio del
archivo “IOSYS.INI”.
La unidad de control tipo “KR C2” se entrega, de forma estándar, sin E/S’s.
Por motivos de seguridad, todas las instrucciones de entrada y de salida, así como
los accesos a las variables de sistema para entrada/salida, producen una parada
del procesamiento en avance.
Los accesos a variables del sistema para entradas/salidas no generan una parada del pro-
cesamiento en avance con una predefinición de la instrucción CONTINUE.
SIGNAL
En la KR C se pueden además asignar nombres a cada una de las entradas/salidas. Para
ello sirve la declaración de la señal. Esta deberá estar ubicada, como todas las 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. Sin
embargo, las salidas del sistema están protegidas contra escritura.
La entrada 1025 siempre es TRUE, la entrada 1026 siempre es FALSE. Estas entradas son
utilizadas p. ej, en los datos de máquinas como variables “Dummy”. Se permite la
multiutilización.
DEF BINSIG ( )
;--------- Sección de declaración ---------
EXT BAS (BAS_COMMAND :IN,REAL :IN )
DECL AXIS HOME
SIGNAL 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}
Mediante la activación de las entradas 1,2 o 3 el robot puede desplazarse a tres posiciones
diferentes. Si el robot ha alcanzado la posición deseada, se muestra este hecho mediante
la activación de las salidas correspondientes 13, 14 o bien 15.
Ya que estas salidas muestran siempre la posición actual del robot se puede evitar, mediante
la 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 de
procesamiento 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 correspondiente
no 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, el
programa.
$OUT[Nr]
$IN [Nr] AND NOT $OUT[Nr]
TRUE FALSE
TRUE FALSE TRUE
$IN[Nr]
FALSE FALSE FALSE
DEF BINSIG_D ( )
Encontrará más información en este mismo capítulo, dentro del apartado [Entradas
digitales predefinidas].
Componentes estructurales
KRL
Primero se realiza la declaración de una variable del tipo de datos “SIGINF” en la sección
de 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)
Componentes estructurales
El tipo de datos “SIGINF” contiene los siguientes componentes estructurales:
DEF SIGTEST ( )
DECL SIGINF S_INF
CHAR S_NAME[24]
S_NAME[] = “$EXT_START”
...
S_INF = GET_SIG_INF(”$MOVE_ENABLE”)
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 este
valor 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 no activadas. Esto es válido para una selección de paso
y para un reset del programa.
Un desplazamiento COI causa también una detención del procesamiento en avance. Recién
después de un rearranque del programa, se activan las salidas de acuerdo con su definición.
$OUT_C[x]:
PTP P1 C_PTP
$OUT_C[5]=TRUE
PTP P2
Trigger:
TRIGGER WHEN DISTANCE=1 DELAY=0 DO $OUT[5]=TRUE
PTP P1 C_PTP
PTP P2
En ambos casos, la salida 5 se activa en cuanto se alcanza el centro de la zona de aproxima-
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 de movimiento), la asignación se efectúa inme-
diatamente al alcanzarse la instrucción “$OUT_C[]”.
PTP P1
WAIT FOR $IN[22]==TRUE
$OUT_C[12]=FALSE
PTP P2
En el ejemplo, en la línea “WAIT...” se crea una parada del procesamiento en avance mien-
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.
PTP P1
Test = TRUE
PTP P2
Encontrará más información en este capítulo, dentro del apartado [Entradas y salidas
binarias].
DEF PULSIG ( )
FOR I=1 TO 16
$OUT[I]=FALSE ;puesta de todas las salidas a nivel LOW
ENDFOR
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.
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”.
10 000
Maximum
4 000
Minimum
2 000
Uestándar [mV]
DEF ANSIG ( )
FOR I=1 TO 16
$ANOUT[I]=0 ;Poner todas las salidas a 0 V
ENDFOR
Mientras que entradas digitales diferentes pueden acceder a la misma entrada, las señales
Strobe, NO pueden escribir la misma salida.
Asignación de DIGIN
valor
INT NÚMERO INT NÚMERO
⋮ ⋮
NÚMERO = $DIGIN2 DIGIN ON NÚMERO = FACTOR * $DIGIN2 +
OFFSET
⋮
DIGIN OFF $DIGIN2
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 sintaxis
es 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
6 Subprogramas y funciones
Para reducir durante la programación la tarea de escribir aquellos apartados de programa
que se repiten con frecuencia, así como la longitud del programa, se han introducido 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 los
subprogramas 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 encabezamiento
de programa, sección de declaraciones 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 el
subprograma.
Desde un subprograma o bien una función, pueden llamarse otros subprogramas y/o funcio-
nes. La profundidad de encajado permitida en este caso es de 20. Si se excede este número,
aparecerá un mensaje de fallo indicando “REBASE APILAMIENTO DE PROGRAMA”. La
llamada recursiva de subprograma o de funciones está permitida. Dicho con otras palabras:
un subprograma o una función puede volver a llamarse a sí mismo.
DEF
Todos los subprogramas se declaran exactamente igual que los programas principales, con
la convención DEF más el nombre, y se cierran con END, p. ej.:
DEF SUBPROG()
…
END
PROG.SRC
DEFFCT
Al contrario que los subprogramas, las funciones emiten un valor de retorno. Una función
comienza con la palabra clave “DEFFCT”. El tipo de datos del valor de retorno se indica
inmediatamente después de la palabra clave “DEFFCT”. El propio valor de retorno es
transferido mediante “RETURN”. Mediante la palabra clave “ENDFCT” se finaliza la función.
DEFFCT INT Función()
DECL INT Sample
Sample = 11
RETURN Sample
ENDFCT
PROG.SRC PROG_1.SRC
X Call by value
15 GLOBAL DEFFCT INT
15 QUADRAT(NÚMERO:IN)
15 NÚMERO INT NÚMERO
225 NÚMERO=NÚMERO*NÚMERO
225 RETURN(NÚMERO)
DEF PROG() ENDFCT
INT X,Y,E
…
X=5*3
⇒ X=15
Y=QUADRAT(X) ;Y=225 Y= 225
E=Y/X E=15
…
END
15
225
X,NÚMERO
15
Call by reference
⇒ X=225
Y= 225
E=1
DEF PROG()
CALCULA (INT:OUT,INT:IN,INT:IN)
FUNC1(REAL:IN,REAL:OUT,REAL:OUT,REAL:IN,REAL:OUT)
INT A,B,C
REAL D,E,F,G,H,X
A = 1
B = 2
C = 3
D = 1
E = 2
F = 3
G = 4
H = 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 global
INT X1,X2,X3
X1=X1+10
X2=X2+10
X3=X3+10
END
DEFFCT REAL FUNC1(X1:IN,X2:OUT,X3:OUT,X4:IN,X5:OUT);función global
REAL X1,X2,X3,X4,X5
X1 = X1*2
X2 = X2*3
X3 = X3*4
X4 = X4*5
X5 = X5*6
RETURN(X4)
ENDFCT
Para transferir un campo, éste también debe ser declarado de nuevo en el subprograma o
en la función, aunque sin índice. Véase a este respecto el siguiente ejemplo, en el cual se
duplican los valores de un campo X[] (la función es global):
DEF ARRAY ( )
EXT BAS (BAS_COMMAND :IN,REAL :IN)
INT X[5] ;Declaración de campo
INT I
BAS (#INITMOV,0)
FOR I=1 TO 5
X[I]=I ;Array X[] inicializar
ENDFOR ;X[1]=1,X[2]=2,X[3]=3,X[4]=4,x[5]=5
7 Tratamiento de interrupciones
Al utilizar robots en instalaciones de producción complejas, existe la necesidad que el robot
reaccione 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 debe
interrumpir 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 robot
interrumpido si no se ha especificado algo distinto.
La interrupción o bien arranque directo de un programa lo posibilitan las instrucciones de
interrupción. Con ellas, el usuario tiene la posibilidad de reaccionar mediante programa, a
un evento determinado que se ha producido, no sincronizado en el tiempo, con la secuencia
del 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 rutina
de interrupción que resetea determinadas señales de salida (programa preparado
IR_STOPM.SRC).
7.1 Declaración
Antes de poder activar una interrupción, deberán definirse previamente las posibles causas
de la misma y las reacciones respectivas del sistema.
INTERRUPT
Esto se realiza con las declaraciones de interrupción, teniendo en cuenta que a cada
interrupción se le ha de asignar una prioridad, un evento y la rutina de interrupción que ha
de activar. La sintaxis completa es:
INTERRUPT DECL Prioridad WHEN Evento DO Subprograma
Para el significado que tienen los argumentos véase Tab. 15.
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 cual
fue 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 en
cualquier 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 al
abandonar 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 de
estructura.
G A la subrutina de interrupción no deben ser entregados como parámetros, variables
de duración temporal, excepto que se trate de GLOBAL o variables declaradas en la
lista de datos.
Programa principal
DEF MAIN()
⋮
INTERRUPT DECL 1 …
INTERRUPT DECL 3 … Subprograma
⋮
UP() DEF UP()
⋮ ⋮
END GLOBAL INTERRUPT DECL 23
…
INTERRUPT DECL 2 …
⋮
END
Validez Interrupt 2
Fig. 49 Rango de validez de una interrupción dependiente del lugar y del tipo de
declaración
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 una
interrupción. Una interrupción bloqueada es detectada y almacenada pero no ejecutada.
Una vez que se produzca la liberación, se procesarán las interrupciones en el orden de priori-
dad respectivo.
DISABLE 4
o
DISABLE
A un evento memorizado ya no se reaccionará si la interrupción ha sido desactivada antes
de 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.
Prioridad
Cuando se produzcan simultáneamente interrupciones, será procesada primeramente la
que tenga la prioridad más alta y a continuación las de prioridades más bajas. El nivel de
prioridad 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 la
rutina de interrupción. La interrupción originada así como todas las prioridades de niveles
má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 incluso para la interrupción
actual.
Es decir que en el momento que se produzca nuevamente (incluso durante el programa de
interrupción), puede procesarse otra vez la interrupción. Sin embargo, si se desea evitar
esto, deberá bloquearse o desactivarse la interrupción explícitamente antes de su salto
atrás.
Un interrupt puede ser interrumpido después del primer comando en el programa de
interrupciones mediante un interrupt de nivel superior. En el primer comando, el
programador tiene la opción de evitar esto bloquendo/desactivando uno o todos los
interrupts. Si una interrupción se desactiva automáticamente dentro del subprograma de
interrupción, éste se procesará hasta el final.
Después de finalizar una interrupción de prioridad más alta, se continuará el programa de
interrupción interrumpido en el mismo lugar en el cual fue interrumpido.
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 de un nuevo arranque, se procesará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 robot
en marcha. Mientras se procesa el programa de interrupción, se ejecutan todos los
movimientos 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, sin
parada del movimiento, es decir, sin prolongar el tiempo del procesamiento. Si por el
contrario, no ha concluido la acción de interrupción, el robot se detendrá hasta que, después
del salto atrás, se procese y continúe el movimiento subsiguiente.
Si en el propio programa de interrupciones existen instrucciones de movimiento, el programa
de interrupción parará en la primera instrucción de movimiento hasta que termine de
procesarse la ejecución en avance del programa principal.
PTP HOME
FOR I=1 TO 2
IF $OUT[I] THEN
LIN PARTE[I] ; Desplazarse hacia la pieza detectada
$OUT[I]=FALSE
PTP HOME
ENDIF
ENDFOR
END
$POS_RET
$POS_INT
$AXIS_RET P2
$AXIS_INT
$POS_FOR
$AXIS_FOR
P1 P3
$POS_BACK $POS_ACT
$AXIS_BACK $AXIS_ACT
P2
$POS_INT $POS_RET
$AXIS_INT $AXIS_RET
$POS_FOR
$AXIS_FOR
$POS_BACK $POS_ACT
$AXIS_BACK $AXIS_ACT
P1 P3
La instrucción BRAKE no tiene por que efectuarse directamente después de su llamada, sino
que puede producirse en cualquier parte del programa de interrupciones. Su efectividad
depende de que si en el momento de su tratamiento, aún se está ejecutando un movimiento
del programa interrumpido. Si el robot está detenido, la instrucción no tiene consecuencias.
Una movimiento en ejecución del programa interrumpido, se parará con el modo de frenado
programado. Sin embargo, la instrucción BRAKE no sustituye la instrucción HALT, si se ha
de 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.
Igual a lo que sucede con la instrucción BRAKE, sólo se permite la instrucción RESUME den-
tro de un programa de interrupción.
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ándar
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}
INTERRUPT DECL 11 WHEN $IN[1] DO IR_PROG ( )
I[1]=0 ;colocar el contador predefinido a 0
;------------- Sección principal ------------
PTP HOME ;desplazamiento COI
INTERRUPT ON 11
MOVEP ( ) ;recorrido del trayecto de busqueda
$ADVANCE=3 ;resetear avance
INTERRUPT OFF 11
GRIP ( )
PTP HOME
END
;-------- Subprograma ------------
DEF MOVEP ( ) ;Subprograma para el recorrido del trayecto de
busqueda
PTP {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 avance
END ;
;------ Programa de interrupción ---------
DEF IR_PROG ( ) ;Guardar posición de piezas
;INTERRUPT OFF 11
I[1]=I[1]+1
POSICIÓN[I]=$POS_INT ;Guardado de la posición
IF I[1]==4 THEN ;4 piezas son detectadas
BRAKE ;Detención del movimiento
RESUME ;Cancelación de IR_PROG & MOVE
ENDIF
;INTERRUPT ON 11
END
;-------- Subprograma ------------l
Si existe el riesgo de que una interrupción dispare, por error, dos veces debido a la
sensibilidad de un sensor (“rebotes de teclas”), puede evitarlo desactivando la interrupción
en la primera línea del programa de interrupción. Sin embargo se ha de tener presente que
aquí tampoco se detectará, en ningún momento, una interrupción real durante el
procesamiento de interrupción. Antes de realizar el salto hacia atrás, si tiene que continuar
estando activa la interrupción, se ha de conectar de nuevo la misma.
--
PUNTO3
1
Fig. 52 Rangos de conmutación y posibles valores de retardo cuando el punto de
inicio y de destino son puntos de parada exactos
0 0 -- 1a +
+
1 1a -- 1b ±
1a
-- 1
1b
PUNTO3 PUNTO4
+
PUNTO2
DISTANCE Rango de DELAY
conmutación
0 0 -- 1a +
1 1a -- 1b ±
0
+
1a
-- 1
1b
PUNTO3 PUNTO4
+
0
+
--
1
PUNTO3
Secuencia de instrucción:
⋮
LIN PUNTO2 C_DIS
TRIGGER WHEN PATH = Y DELAY= X DO $OUT[2]=TRUE
LIN PUNTO3 C_DIS
LIN PUNTO4 C_DIS
LIN PUNTO5
⋮
Al poderse desplazar el punto de conmutación a partir del punto de movimiento del cual fue
programado mas allá de todos los puntos de posicionamiento aproximado siguientes hasta
el próximo punto de parada exacta, es posible un desplazamiento del punto de conmutación
desde 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ón
solo podrá ser desplazado hasta el punto de parada exacta PUNTO2.
PUNTO2
--
DELAY X
-- PUNTO5
+
PATH Y<0
DELAY X
-- +
PUNTO3 PUNTO4
DELAY=0
PATH=0 PATH Y>0 +
Ejemplo de cifras:
X= --10, Y= --20
PUNTO2
Punto de
parada exacta
DELAY= -10
PUNTO5
PATH= -20
PUNTO4
PUNTO3
Casos especiales:
G Desplazamiento COI
Si se realiza una selección de paso en un movimiento de trayectoria, se produce un
desplazamiento de coincidencia de paso COI. Al poder ser el punto inicial del
desplazamiento COI uno cualquiera, no puede ser un punto inicial recomendable para una
indicación de distancia. Si delante de este tipo de movimiento se encuentran programadas
instrucciones Trigger con indicación de PATH, y se produce una selección de paso sobre
estas 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 con
parada exacta. Pero éste básicamente es tratado bajo el aspecto como si se fuese un
movimiento de aproximación. Las acciones de conmutación que deban producirse sobre
la 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 trayectoria
distinta y por consiguiente una longitud de trayectoria también distinta. Las acciones de
conmutación colocadas en la primera parte de la zona de aproximación, debido a un valor
negativo del PATH, se pueden disparar, como muy pronto, en el punto de aproximación:
⋮
LIN P1 C_DIS
TRIGGER WHEN PATH=-120 DELAY=0 DO UP1() PRIO=-1
TRIGGER WHEN PATH=-70 DELAY=0 DO $OUT[2]=TRUE
LIN P2 C_DIS
⋮
En el ejemplo anterior ahora la distancia entre el punto de inicio y de destino debe ser
100 mm. Si se puede realizar un posicionamiento aproximado en P1, se ejecutará la
llamada del subprograma UP1() 20 mm antes de alcanzar el punto de trayectoria más
cercano al punto de aproximación P1. La activación de la salida 2 se efectúa unos 30 mm
después de este punto de la trayectoria. Si no se pudo realizar el movimiento de
posicionamiento aproximado en P1, la trayectoria pasa a través del punto P1, en el cual
también es posicionado. Inmediatamente al salir de P1 se ejecuta la llamada del
subprograma 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, ya
no 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ón PATH-TRIGGER con indicación de trayecto es programada para que sea
un 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 de
inicio es un punto de posicionamiento aproximado PTP -- trayectoria, entonces, dado que
la zona de aproximación completo es movimiento PTP, las acciones de conmutación se
realizará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ún
activas sin conmutar, se disparan en el punto de inicio de la zona de aproximación. Ya que
a partir de este punto se produce un recorrido PTP, sin opción a asignarle una trayectoria.
DEF TRIG ( )
;--------- Sección de declaración ---------
EXT BAS (BAS_COMMAND :IN,REAL :IN)
DECL AXIS HOME
INT I
SIGNAL ADHESIVO $OUT[3]
;---------- 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.
$APO.CDIS=35 ;prefijar la distancia de aproximación
HOME={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]=FALSE
ENDFOR
;------------- Sección principal------------
PTP HOME ;desplazamiento COI
PTP POS0
TRIGGER WHEN DISTANCE=0 DELAY=40 DO $OUT[1]=TRUE
TRIGGER WHEN PATH=-30 DELAY=0 DO UP1(2) PRIO=-1
LIN POS1
TRIGGER WHEN DISTANCE=1 DELAY=-50 DO PEGAMENTO=TRUE
TRIGGER WHEN PATH=180 DELAY 55 DO PULSE($OUT[4],TRUE,0.9)
TRIGGER WHEN PATH=0 DELAY=40 DO $OUT[6]=TRUE
LIN POS2 C_DIS
TRIGGER WHEN DISTANCE=0 DELAY=40 DO PULSE ($OUT[5],TRUE,1.4 )
TRIGGER WHEN PATH=-20 DELAY=-15 DO $OUT[8]
LIN POS3 C_DIS
TRIGGER WHEN DISTANCE=1 DELAY=-15 DO UP1 (7 ) PRIO= -1
LIN POS4
PTP HOME
END
DEF UP1 (NR :IN )
INT NR
IF $IN[1]==TRUE THEN
$OUT[NR]=TRUE
ENDIF
END
$OUT[6]
$OUT[2] 2’E
$OUT[5]
3’B
180
8
$OUT[1] $OUT[8]
20
POS 0 $OUT[4] $OUT[7]
3’
3’E
POS 3
POS 4
9 Listas de datos
9.1 Listas de datos locales
Las listas de datos sirven para poner a disposición declaraciones específicas de programa
o de nivel superior. De estas forman parte también las informaciones de punto tales como
p. ej. coordenadas:
G Para cada archivo SRC se puede crear una lista de datos. Este llevará el mismo
nombre 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 archivos
SRC. Esta declaración es canalizada mediante la clave DEFDAT y el nombre del programa
y concluye con la clave ENDDAT.
La inicialización de variables se realiza mediante la asignación de valor en las variables
respectivas, directamente en la línea de declaración.
PROG_1.SRC PROG_1.DAT
DEF PROG_1 ( )
… DEFDAT PROG_1
OTTO al principio es “0” INT OTTO = 0
HALT
… ENDDAT
OTTO = 25
…
HALT
END
DEFDAT PROG_1
Después de ejecutar el INT OTTO = 25
programa OTTO = 25 ENDDAT
PROG_1.SRC PROG_1.DAT
DEF PROG_1 ( )
… DEFDAT PROG_1 PUBLIC
HALT INT OTTO = 0
… ENDDAT
OTTO = 25
…
END
PROG_2.SRC
DEF PROG_2 ( )
IMPORT INT OTTO_2 IS /R1/PROG_1 .. OTTO
…
…
END
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 la
variable en otro programa principal.
PROG_1.SRC PROG_1.DAT
DEF PROG_1 ( )
… DEFDAT PROG_1 PUBLIC
HALT DECL GLOBAL INT OTTO = 0
… ENDDAT
OTTO = 25
…
END
PROG_2.SRC
DEF PROG_2 ( )
…
…
END
La declaración de una variable global solo está permitida en listas de datos. Si se utiliza
en ficheros SRC o SUB, se genera un mensaje de fallos.
10 Editor externo
Este programa adicional amplia el software del robot añadiendo funciones no disponibles
en la superficie de operación.
Limpiar el programa
Los puntos de trayectoria y los parámetros de movimiento no referenciados son borra-
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á el
robot, 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 sector
marcado, en el sistema de coordenadas universales.
-- Modificar los parámetros de movimiento (velocidad, aceleración, etc.) en la zona
marcada.
-- Correr todos los puntos dentro de la zona de trayectoria marcada en el sistema de
coordenadas de la pieza (BASE), la herramienta (TOOL) o universales (WORLD) El
corrimiento o giro puede efectuarse por la entrada manual de un valor offset en el
sistema de coordenadas correspondiente, o por programación por aprendizaje de
puntos 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 efectuarse
desplazamientos de coordenadas de un punto en el sistema de coordenadas Tool,
Base y universales.
Si el “Editor externo” es arrancado como programa fuera de línea (offline), el software KRC
arranca automáticamente.
Si usted ha marcado de esta manera el fichero deseado, éste se cargará en el editor una
vez pulsada la tecla del softkey correspondiente o la tecla de entrada. El tiempo de duración
de carga depende del tamaño del fichero.
Si aparece el mensaje “*.DAT--File not found” (archivo *.DAT no encontrado), eso significa
que 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 la
presentació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ú de
puesta en servicio o mediante la instrucción “Procesar > Modificar”.
10.2 Operación
Los elementos de la superficie de operación normal se encuentran también en la del editor
externo. Así, se tiene aquí también a disposición, funciones de estado, funciones con
menús, softkeys, una ventana de programas, así como también una ventana de mensajes
y una línea de estados.
Los menús también se pueden abrir pulsando primero la tecla “ALT” y luego la letra que
aparece subrayada en el menú. De la misma manera se puede seleccionar una instrucción
del menú.
Teclas de estado
Con las teclas de estado “Arriba” o “Abajo”, puede mover la marca de línea (el foco) línea
por línea hacia el comienzo o hacia el final de la lista. Las teclas del cursor “"” o “#”, así como
las 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. Para
ello se debe desactivar la función “NUM” o utilizar un teclado externo.
Si usted pulsa la tecla de estado “KRL”, visualizará el programa tal como aparece en
el 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”).
6 Opciones
Línea de estados
En la línea de estados se visualizan informaciones adicionales.
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 de memorizar 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ón del fichero hasta ese momento existente y editado, se pierden
indefectiblemente, por lo menos en parte.
Para cancelar la acción, primero se debe pulsar una de las teclas del cursor para desplazar el
foco hasta el botón “No”. A continuación puede confirmarse la selección pulsando la tecla de
entrada. 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 Abrir
Guardar
Salida Programa actual
Cerrar Todos los programas de usuario
Salir
KRC:\Palette.SRC
*************************************
INI
1:PTP HOME Vel=100 % DEFAULT
10.3.4 Cerrar
Si el fichero que se encuentra en el editor ha sido modificado 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 otro
archivo en el editor.
10.3.5 Salir
Si el fichero que se encuentra en el editor ha sido modificado 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 software
del robot.
Si desea marcar una zona, mantenga pulsada la tecla “SHIFT” (mayúsculas) y pulse la tecla
de estado “Arriba” o “Abajo” (o bien la correspondiente tecla del cursor).
Zona marcada
(marca de bloque)
10.4.4 Borrar
El sector de trayectoria marcado es borrado sin memorizarlo en el portapapeles.
Con las teclas del cursor “↑” o “↓” podrá mover la marca de inserción de un campo de entrada
a otro.
10.5.1 Espejo
+Z
P1
P2’
P2
ROBROOT P3’
--Y
P3
+X
Después de seleccionar una de las posibles opciones, aparece en pantalla una ventana para
la declaración de los valores deseados. Dependiendo del sistema de coordenadas declare
aquí el corrimiento y el giro, o los ángulos de los ejes.
BASE
Bajo corrimiento cartesiano base de un punto se entiende un corrimiento relativo de un punto
cualquiera en el espacio en el sistema de coordenadas originales (WORLD), que se
encuentra en el pie del robot. Por medio del ejemplo aquí representado, quiere aclararse el
corrimiento cartesiano base de un punto:
Z+
A+
Pnuevo
Y+
X+ Pantiguo
Yantiguo --Xr Xantiguo
--Yr
TCP
Un corrimiento cartesiano TCP de un punto significa, que un punto cualquiera en el espacio
es desplazado de forma relativa respecto al sistema de coordenadas TOOL. Por medio del
ejemplo aquí representado quiere aclararse el corrimiento cartesiano TCP de un punto:
Pnuevo
Zantiguo
--Zr
--Yr Y+
C°r
C°
Pantiguo X+
Yantiguo
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:
Z+
Z+nuevo
Y+
Pnuevo +Xr
X+
X+nuevo
+Yr A--
Y+nuevo
Introduzca en los campos de entrada los valores del corrimiento (X, Y, Z) en [mm] y del giro
(A, B, C) en [Grados].
Ejes
Bajo corrimiento especifico del eje de un punto se entiende, que un punto cualquiera en el
espacio es alcanzado por medio de un movimiento relativo de los ejes. Por medio de la figura
aquí representada, quiere efectuarse un corrimiento relativo del eje 5.
Pantiguo
α A5 nuevo
α A5 antiguo
Pnuevo
004
003
002 OK
001 OK
Con las teclas del cursor “→” o “←” podrá mover la marca de inserción de un campo de
entrada 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 tecla
del softkey “Cambio”.
Cancelar La función puede ser abandonada en cualquier momento pul-
sando la tecla del softkey “Cancelar”.
004
003
002 OK
001 OK
Se visualizan todos los programas con aquellos puntos a los cuales hace referencia la
adaptación de Tool o de Base.
Para poder mover la marca de inserción de campo en campo, deben estar activadas las
funciones de mando del cursor en el campo numérico. Para ello pulse brevemente la tecla
“NUM”. A continuación podrá desplazar la marca de inserción de un campo a otro con la tecla
“SHIFT” (mayúsculas).
Los campos de listas se abren con la combinación de teclas “ALT” + “↓”, O “ALT” + “↑”.
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 el
paso 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 editor
a través del menú de puesta en servicio.
Con las teclas del cursor “↑” o “↓” podrá mover la marca de inserción de un campo de entrada
a 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 del
softkey “Cancelar”.
A continuación, la ventana de diálogo se desactivará y aparecerán dos nuevas teclas de
softkey.
En cada corrección de punto se busca 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 desde
el lugar donde se encuentra el punto a corregir, hacia adelante. La excepción la forma el
punto final de un contorno de soldadura o de aplicación de un cordón de pegamento, dado
que 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 sistema de coordenadas base entre dos pasos de movimiento;
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 componente
de ella (no se permiten variables importadas, tampoco variables de datos de máquina).
10.6.2.1 Position--TTS
Marque en el editor externo la instrucción de movimiento deseada y active el comando
“HotEdit > TTS”.
Utilice las teclas del cursor “↑” o “↓”, para colocar el foco en el lugar deseado. Con las teclas
del 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 la
tangente a la trayectoria.
+Z
+Y P2
+X
+Z
+Y
+X
+Y +X
+X
P2
Eje Y
A partir del vector unitario a lo largo de la tangente de la trayectoria (+X) y del eje X del
sistema de coordenadas de la herramienta (+XTool) se genera un plano. El eje Y se encuentra
perpendicular a este plano.
+Z
+Y
+X
+XTool P2
P1
Eje Z
Del vector unitario a lo largo de la tangente de la trayectoria (+X) y el eje Y (+Y) se genera
un plano. El eje Z se encuentra perpendicularmente a este plano.
+Z
+Y
+X
P2
P1
10.6.3 Limite
Sólo se permite una corrección en línea (online) hasta los valores máximos, que pueden
ajustarse mediante 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.
Utilice las teclas del cursor “↑” o “↓”, para colocar el foco en el lugar deseado. Con las teclas
del bloque numérico, defina las nuevas tolerancias.
Los valores introducidos no son aceptados.
Pulse esta tecla del softkey para guardar los valores y cerrar la ventana.
Este menú sólo está disponible mientras no se haya cargado ningún programa en el editor
externo.
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 a
derecha”.
Seleccione en primer lugar el fichero de referencia con las teclas del cursor
y a continuación pulse la tecla del softkey “Flecha a derecha”.
Con esta tecla del softkey, regresará a la página anterior.
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 instrucciones
de movimiento que desea desplazar.
Las posiciones de los ejes son controladas en segundo plano mientras la función “Límite
cambiado” se encuentra activa.
Los valores máximos y mínimos que aparecen 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 pueden marcarse los ejes a los cuales
se 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 que
para ese eje se puede establecer el , debe activarse el interruptor de software
de 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 de
software de fin de carrera de los ejes seleccionados. Esta acción se puede can-
celar en cualquier momento (también más tarde) pulsando la tecla del softkey
“Reset”.
Mientras no se defina ningún medio de salida, los datos se emitirán en un archivo de texto
siguiendo la ruta ajustada en “Set Path” (asignar ruta). Si no se ha definido ninguna ruta
de 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 para
emitir 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 se
guarda como fichero de texto en la ruta establecida con “Set Path” (asignar ruta).
Si se emiten todos los programas del usuario mediante 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 y
también modificarlos, en caso necesario.
Asignar ruta
Esta opción sólo es necesaria cuando se quieran guardar programas como fichero en el
disco 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 a
través de “File” (archivo) se crea el subdirectorio “USERPROG” y en él se guardan los fiche-
ros de texto.
10.9.1 Versión
En la ventana de mensajes aparece el número de versión del editor externo.
Nro. Tiempo Mensaje Resultado
003 17:16:31 Version 5.0.26
002 17:16:27 Fichero abrir OK
001 17:16:27 ExtEdit start OK Número de versión
NOTAS:
Símbolos $SINGUL_POS[3], 78 , 80
$TIMER, 53
.ERR, 11
$TIMER_FLAG, 53
# -- símbolo, 39
$TIMER_STOP, 53
#BASE, 66 , 84
$TOOL, 64 , 71
#CONSTANT, 82
$VEL.CP, 81
#CSTEP, 20
$VEL.ORI1, 81
#GO, 20
$VEL.ORI2, 81
#INITMOV, 82 , 84
$VEL_AXIS, 67 , 81
#ISTEP, 20
$WORLD, 64 , 71
#JOINT, 83
#MSTEP, 20
#PATH, 86 A
#PSTEP, 20 Abrir todas FOLD, 18
#TCP, 66 ABS(X), 51
#VAR, 82 Acción de conmutación, 159
$ACC.CP, 81 Aceleración, 80
$ACC.ORI1, 81 Aceleración de eje, 68
$ACC.ORI2, 81 ACOS(x), 51
$ACC_AXIS, 67 , 81 Activar bits, 49
$ADVANCE, 91 Activar interrupciones, 146
$ALARM_STOP, 54 , 55 Agregado, 36
$APO.CDIS, 96 , 98 Ajuste de BASE, 181
$APO.CORI, 96 , 98 Ajuste del TCP, 181
$APO.CPTP, 94 Ambigüedades, 75
$APO.CVEL, 96 , 98 Ángulo circular, 89
$APO_DIS_PTP, 94 ANIN, 131
$BASE, 64 , 71 ANIN OFF, 132
$CIRC_TYPE, 84 , 87 ANIN ON, 132
$CONFIG.DAT, 8 , 55 ANIN y ANOUT, 129
$CUSTOM.DAT, 55 ANOUT OFF, 130
$CYCFLAG, 53 ANOUT ON, 130
$FLAG, 53 Aproximación LIN--CIRC, 100
Archivos del sistema, 53
$IBUS_ON, 55
Arco coseno, 51
$IPO_MODE, 66
Arco seno, 51
$MACHINE.DAT, 7 , 55
Arco tangente, 51
$NULLFRAME, 71
Área de la base, 75
$NUM_AX, 55
Área por encima de la cabeza, 75
$ORI_TYPE, 82 , 87
Asignación de valor, 27
$OUT_C, 125
ATAN2(Y,X), 51
$POS_ACT, 65 , 66
AXIS, 38 , 62
$PRO_MODE, 20
$PSER, 55
$ROBCOR.DAT, 7 , 56 B
$ROBROOT, 64 , 71 B_AND, 48 , 50
$SET_IO_SIZE, 125 B_EXOR, 48 , 50
Index -- i
Index
B_NOT, 48 , 50 Compilador, 11
B_OR, 48 , 50 Compilar, 11
BAS.SRC, 8 , 73 Concepto de archivo, 8
BASE, 66 CONFIRM, 116
Bidimensional, 34 Constante + referido a la trayectoria, 86
Bin Dec, 31 Constante + referido al espacio, 84
Bloquear / liberar, 146 Continous Path, 80
BOOL, 30 , 32 CONTINUE, 93
Borrar, 14 Contorno de posicionamiento aproximado, 93
BRAKE, 150 Control de ejecución del programa, 107
Bucle rechazante, 110 Control de la orientación, 82
Bucles, 109 Copiar, 14
Bucles de conteo, 109 Corrección de programa, 13
Bucles no rechazantes, 111 Cortar, 14
Bucles sinfín, 112 COS(X), 51
Crear programas y editarlos, 10
Crear un programa nuevo, 10
C
Criterio de distancia, 96
C_DIS, 96 , 98 Criterio de orientación, 96
C_ORI, 96 , 98 Criterio de velocidad, 96
C_PTP, 94 CSTEP, 20
C_VEL, 96 , 98 CTRL--C, 14
CA, 89 CTRL--V, 14
Cadena cinemática, 65 , 66 CTRL--X, 14
Cadenas de caracteres, 36
Cambio de bloque, 180
D
Cambio de útiles, 104
Campo bidimensional, 34 DECL, 29
Campo tridimensional, 35 Declaración, 9
Campo unidimensional, 33 DEF, 8 , 136
DEFDAT, 164
Campos, 33
DEFFCT, 137
Cantidad, 51
Desactivación de bits, 49
CELL.SRC, 7
Desactivar interrupciones, 146
Cerrar todas FOLD, 18
Desplazamiento a Home, 74
CHAR, 30 , 32
DIGIN OFF, 134
Cinemáticas de robot ambiguas, 75
DIGIN ON, 134
CIRC, 89
Disparo por flancos, 146
CIRC !, 105
DISTANCE, 157
CIRC_REL, 89
Duración, 28
COI, 74
Coincidencia de paso, 74
Combinación lógica, 47 E
Combinación lógica de frames, 42 E6AXIS, 38
Combinación lógica O, 48 Editar, 11
Combinación lógica O exclusivo, 48 Editor, 13
Combinación lógica Y, 48 Editor Externo, 168
Comentarios, 26 Ejecución en avance, 91
Index -- ii
Index
Ejecución principal, 91 I
ELSE, 107 Identificación de bloque, 108
END, 8 IF, 107
ENDFOLD, 17 Índice, 33
ENDFOR, 109 Índice de campo, 33
ENDLOOP, 112 INI, 73
ENDWHILE, 110 Insertar, 14
Entrada manual, 176 Instrucción, 9
Entradas / salidas digitales, 121 Instrucciones de entrada/salida, 118
Entradas analógicas, 131 Instrucciones de espera, 113
Entradas digitales, 134 Instrucciones de movimiento, 61
Entradas y salidas binarias, 118 Instrucciones de salto, 107
ENUM, 39 INT, 30 , 31
Esconder partes de un programa, 17 Interpolación referida a la base, 65
Espejo, 175 Interpolación referida a la garra, 66
Estado, 71 , 74 , 75 INTERRUPT, 144
Estructura de archivos, 8 Inversión, 48
Estructura y creación de programas, 7 IR_STOPM.SRC, 8
Estructuras, 36 ISTEP, 20
EXIT, 112
EXT, 73 K
KSD, 7
F
Filtrado de bits, 49 L
Flags, 53 , 154 Lenguaje de máquina, 11
Flags cíclicos, 53 Limits -- Base/World, 187
FOLD, 17 Limits -- TTS, 187
FOLD actual abr/cer, 18 Limpiar lista de ficheros, 180
FRAME, 38 LIN, 87
Funciones, 8 , 136 LIN !, 105
Funciones de bloque, 13 LIN_REL, 87
Lista de datos, 9
G Lista de ficheros, 9
Lista de parámetros, 139
GET_SIG_INF, 123
Listas de datos, 164
Giro, 71 , 74 Listas de datos globales, 165
GLOBAL, 165 Listas de datos locales, 164
Global, 137 Local, 137
GO, 20 LOOP, 112
GOTO, 107
M
H Manipulación de datos, 40
HALT, 116 MARCA, 107
Herramienta fija, 66 Medición rápida, 153
Hex Dec, 31 Modificación de programas, 13
Index -- iii
Index
Index -- iv
Index
T
TAN(X), 51
TCP, 66
Temporizador, 53
Tipo de datos, 29
Tipos de datos geométricos, 38
Tipos de datos simples, 30
Tipos de enumeración, 39
Tool Center Point, 67
Transferencia de parámetros, 139
Transformación de avance, 62
Transformación de las coordenadas, 62
Transformación de retroceso, 62
Translaciones, 63
Tratamiento de errores, 23
Tratamiento de interrupciones, 144
Tridimensional, 34
Trigger, 156
Trípode de tecnología que acompaña a la
trayectoria, 184
TTS, 184
Turn, 74
U
UNTIL, 111
V
Variable + referido a la trayectoria, 86
Variable + referido al espacio, 85
Variable global, 165
Variables del sistema, 53
Variables y declaraciones, 27
Variables y nombres, 27
Index -- v