Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programacion de Robots en VRS Con El Lenguaje Industrial RAPID PDF
Programacion de Robots en VRS Con El Lenguaje Industrial RAPID PDF
FACULTAD DE INFORMÁTICA
ROBÓTICA
Noviembre, 2008
1. Introducción
En el ámbito de la robótica industrial cada vez cobra mayor importancia la programación fuera
de línea (off-line programming) en la implantación de robots en sistemas de producción en
serie. Al crear programas de robot fuera de línea surge la necesidad de comprobar el correcto
funcionamiento de los mismos, siendo de gran utilidad los entornos de simulación gráfica de
robots como el VirtualRobot Simulator (VRS) creado por el Departamento de Ingeniería de
Sistemas y Automática (DISA) de la Universidad Politécnica de Valencia.
EdtRAPID está creado como una herramienta externa para VRS comunicándose con este
último por medio de una librería de acceso dinámico dll llamada Virtual Robot External Access
Library (VREAL). Esta librería proporciona acceso a algunas funcionalidades del entorno de
simulación a programas desarrollados en lenguaje C o C++, como es el caso de EdtRAPID.
Haciendo uso del archivo de definición vreal.h y del archivo de especificación de acceso a la
librería vreal.lib, la aplicación EdtRAPID tiene acceso al entono de simulación en tiempo de
ejecución.
*
Parte de este documento se ha extraído de la documentación preparada por Diego Pérez Losada, del
Departamento de Ingeniería de Sistemas y Automática (DISA) de la Universidad de Vigo, que ha
implementado la aplicación EdtRAPID.
Fue introducido en el mercado en la primera mitad de los años noventa y representó un enorme
avance para ABB. Hasta ese momento ABB había ofrecido a sus clientes un lenguaje de
programación relativamente simple, el ARLA, el cual había sido diseñado bajo la filosofía de
una aplicación fácil y rápida. Esto presentó el inconveniente de que los grandes clientes
descubrieron sus limitaciones muy rápido al intentar realizar tareas complejas.
Para programar en ARLA era necesario disponer de una controladora de robot, o lo que es lo
mismo, no tenía herramientas de desarrollo externas y el código era encriptado. No era posible
ver el programa desde un ordenador personal o computadora, aunque esto no era un problema
excesivamente significativo debido al precio de los ordenadores en la época.
El lenguaje RAPID está formado por un conjunto de instrucciones que describen las tareas a
realizar por el robot. La descripción de tareas y no de movimientos implica la existencia de una
amplia lista de instrucciones, a las que hay que sumarle las funciones.
Generalmente, las instrucciones llevan asociado una serie de argumentos que definen la
acción a realizar, pudiendo estar definidos de diferentes formas:
• Como un valor numérico.
• Como una referencia a un dato.
• Como una expresión.
• Como una llamada a una función.
• Como una cadena de caracteres.
Procedimientos
Los procedimientos consisten en un conjunto de instrucciones que pueden ser llamados desde
otros procedimientos. Se pueden pasar parámetros en las llamadas a procedimientos, pero no
se devuelve ningún tipo de dato.
Funciones
Las funciones, a diferencia de los procedimientos, devuelven un valor de tipo concreto y suelen
utilizarse como argumento de una instrucción.
Rutinas
Las rutinas son un tipo especial de procedimiento que proporciona una forma de atender a las
interrupciones. Si se produce una interrupción y está atendida dentro del programa mediante
una rutina, esta se ejecuta con prioridad.
Control de flujo
El control de flujo de ejecución se realiza mediante sentencias de control similares a las
existentes en cualquier lenguaje de alto nivel. Existen sentencias de repetición de instrucciones
(bucles de ejecución) y sentencias de bifurcación (toma de decisiones).
Datos
Los tipos de dato se pueden definir como constantes CONST o como variables VAR. Las
constantes sólo pueden ser modificadas manualmente debiendo ser inicializadas en el
momento de declararlas. Las variables al contrario, son manejadas, normalmente, por el propio
programa. Un tipo especial de variables son los datos persistentes PERS que se almacenan en
la zona de memoria persistente, se mantiene el tipo de dato al salir del programa o ante una
pérdida de alimentación.
Expresiones
Las expresiones pueden ser aritméticas o lógicas, especifican la evaluación de un valor y
suelen utilizarse en los siguientes casos:
• En instrucciones de asignación.
• Como una condición de una sentencia de control.
• Como argumento de una instrucción.
• Como argumento de una llamada a una función.
Los operadores aritméticos y lógicos utilizados en la evaluación tienen asignada una prioridad
dentro de la cadena, pudiendo ser reasignada mediante la utilización de paréntesis. En las
expresiones se pueden incluir datos o referencias a datos declarados previamente.
Multitarea
RAPID dispone de un modo multitarea para la ejecución de programas en pseudoparalelo. Un
programa ejecutado en paralelo puede situarse en primer o en segundo plano respecto al
programa principal, también pueden estar al mismo nivel. El plano en el que se encuentre
durante su ejecución determina su prioridad. Se pueden definir hasta 10 tareas en
pseudoparalelo, cada una formada por un conjunto de módulos, similar a los programas
normales. Todos los módulos se consideran locales en cada una de las tareas.
Las constantes y variables se consideran locales dentro de una tarea, al contrario que las
variables persistentes, que se consideran globales para todas las tareas. Si existen dos tipos
de dato diferentes con el mismo nombre en módulos de tareas distintas y se trata de un valor
persistente, se produce un error en tiempo de ejecución.
Cada tarea dispone de su propia gestión de interrupciones. Las tareas poseen mecanismos de
sincronización y comunicación entre ellas. Existen una serie de restricciones en la utilización
del modo multitarea:
• No se pueden combinar programas en paralelo con un PLC. No se puede atender a una
interrupción de un programa ejecutado en segundo plano mientras el programa en primer
plano se encuentra ocupado.
• Sólo existe una unidad de programación, con lo cual se pueden mezclar los mensajes
escritos en pantalla por las distintas tareas.
• Las instrucciones de movimiento del robot sólo pueden ejecutarse en la tarea principal.
• La ejecución de tareas en pseudoparalelo queda detenida cuando el usuario u otras tareas
hacen uso del sistema de archivos.
• La unidad de programación Teach Pendant no tiene acceso a tareas distintas de la
principal. Por ello, el desarrollo de programas en RAPID para manejar otras tareas sólo se
permite si se carga el código en la tarea principal o fuera de línea.
Interrupciones
Las interrupciones son eventos definidos por el programa e identificados por números que
deben estar predefinidos con anterioridad a la ejecución. El número máximo de interrupciones
por cada programa es de 70, estando limitada la CPU a un máximo de 100 interrupciones.
Durante el transcurso de le ejecución de un programa, si se activa una interrupción, se detiene
la ejecución secuencial de las instrucciones y se ejecuta la rutina TRAP correspondiente a la
atención de la interrupción. Una vez finalizada la ejecución de la rutina se retoma el programa
en el punto en el cual fue dejado.
Señales
La controladora de un robot puede tener asociadas distintas placas con señales de
entrada/salida. Cada una de las placas dispondrá de varios canales físicos analógicos o
digitales que deben estar conectados a señales lógicas referenciadas desde el programa.
Estas señales son definidas en la controladora, fuera del programa en lenguaje RAPID.
Un canal físico puede tener asociadas distintas señales lógicas, pero no está permitido asociar
una misma señal lógica a diferentes canales físicos.
RAPID de ABB es un lenguaje textual interpretado de alto nivel diseñado para la programación
de robots industriales. Consiste básicamente en un conjunto de instrucciones que describen la
actividad del robot. Estas instrucciones pueden llevar asociados un conjunto de argumentos
que definen la acción a realizar por el robot. Los argumentos se pueden especificar mediante:
• Valor numérico
• Referencia a un dato
• Como una expresión
• Como una llamada a una función
• Como un valor de cadena de caracteres
Determinadas instrucciones como pueden ser la definición de tipos de dato se pueden realizar
fuera de los procedimientos, funciones o rutinas. Estos tipos de dato pueden estar definidos
como constantes CONST o variables VAR. Un tipo particular de variables son los datos
persistentes PERS que se almacenan en una zona de memoria que mantiene la información
ante un corte de alimentación. Las variables pueden ser modificadas en la ejecución del
programa y no es necesario inicializarlas cuando se declaran, las constantes al contrario no se
pueden modificar y se inicializan a un valor en el momento de declararlas.
El código se estructura dentro de un programa en módulos MODULE, los cuales pueden ser
cargados en tiempo de ejecución desde la memoria de almacenamiento o eliminarse de la
memoria de programa. Esta estructura viene dada por la limitación de memoria de la
controladora del robot, pudiendo de esta manera manejar grandes programas con recursos
limitados.
El intérprete de EdtRAPID sólo implementa las instrucciones y tipos de datos más usados.
Utiliza solamente dos módulos de programa, uno de sistema donde se encuentran definidos los
tipos de dato utilizados generalmente y los datos asociados a la herramienta del robot, y otro
de usuario donde se debe definir el procedimiento principal main que siempre debe existir en
un programa en lenguaje RAPID. Las instrucciones implementadas se muestran a
continuación:
“:=”. Asignación
<Nombre variable> := <expresión>
Las expresiones interpretables son sencillas, sin paréntesis
Escritura en pantalla
Control de esperas
WaitDI. Esperar hasta que se activa o desactiva una señal digital de entrada:
WaitDI <Nombre señal, valor>
WaitDO. Esperar hasta que se activa o desactiva una señal digital de salida:
WaitDO <Nombre señal, valor>
MoveJ. Mover el robot a un punto determinado describiendo una trayectoria no lineal (libre):
MoveJ <robtarget, speeddata, zonedata, tooldata>
MoveJDO. Mover el robot a un punto determinado describiendo una trayectoria no lineal (libre)
y activar una señal digital de salida al finalizar el movimiento:
MoveJDO <robtarget, speeddata, zonedata, tooldata, señal, numero>
MoveJSync. Mover el robot a un punto describiendo una trayectoria no lineal (libre) y llamar a
un procedimiento al finalizar el movimiento:
MoveJSync <robtarget, speeddata, zonedata, tooldata, nombre proc>
MoveL. Mover el robot a un punto determinado describiendo una trayectoria lineal (línea recta):
MoveL <robtarget, speeddata, zonedata, tooldata>
MoveLDO. Mover el robot a un punto describiendo una trayectoria lineal (línea recta) y activar
una señal digital de salida al finalizar el movimiento:
MoveLDO <robtarget, speeddata, zonedata, tooldata, señal, numero>
MoveLSync. Mover el robot a un punto describiendo una trayectoria lineal (línea recta) y llamar
a un procedimiento al finalizar el movimiento:
MoveLSync <robtarget, speeddata, zonedata, tooldata, nombre proc>
EdtRAPID es una herramienta de prototipado rápido diseñada para programar robots fuera de
línea en lenguaje RAPID. Dispone de un editor de texto para desarrollar el código de programa
que posteriormente se puede simular en el entrono VRS a través de un intérprete que posee
herramientas propias para el control de la ejecución.
La aplicación está dividida en tres bloques formados por el editor de texto plano, el árbol de
configuración de robots de la célula de trabajo y la interfaz de ejecución de programa. Al
arrancar la aplicación siempre se muestra la barra de configuración a la izquierda y la zona de
edición de programa a la derecha como se puede observar en la Figura 1, aunque esto es
personalizable puesto que la barra se puede poner en cualquier lugar, incluso dejarla flotante
como en la Figura 2. En la parte superior se muestra la barra del menú principal de la
aplicación y dos barras de herramientas, la primera de ellas correspondiente al editor y la
segunda a la interfaz de conexión con VRS. Existen algunas herramientas más como son otra
barra de organización de ventanas en el editor de texto o el menú para cargar o guardar células
de trabajo de VRS que se explicarán en detalle posteriormente.
EdtRAPID puede usarse como editor de texto plano estando desconectado de VRS pero de
esta forma quedan deshabilitadas las herramientas de captura de posiciones del robot, así
como todas las relacionadas con la configuración de robots y células de trabajo.
El modo de uso normal es estar conectado con un entorno de simulación ya sea para la edición
de un programa RAPID o para la simulación del mismo, pudiendo aprovechar todas las
posibilidades que ofrece el editor en lo referente a la captura de posiciones de los robots del
entrono de simulación.
La interfaz de conexión con el entorno de simulación se controla con los botones de la barra de
herramientas de conexión. Al ejecutar el programa esta barra se muestra encima del árbol de
configuración.
Para conectarse con VRS se pulsa el primer botón de la barra mostrada en la Figura 3 que se
encuentra activo. Las funciones que desempeñan cada uno de los botones (de derecha a
izquierda):
• Conectar con VRS
• Desconectar de VRS
• Actualizar elementos del entrono en el árbol de configuración
• Capturar posición de robot
• Ejecutar programa
Al pulsar el botón de conectar aparecerá un diálogo como el mostrado en la Figura 4 con dos
opciones, la primera de ellas para establecer una conexión con VRS ejecutado en la misma
máquina que el editor y una segunda opción para conectar el editor a un ordenador remoto que
ejecute VRS con funcionamiento en modo remoto. En caso de realizar una conexión sobre un
servidor remoto será necesario especificar la dirección IP del ordenador donde se ejecute VRS.
Para desconectar EdtRAPID de VRS sólo es necesario pulsar el botón desconectar (el segundo
botón comenzando por la izquierda de la barra de conexión). Una vez desconectado el editor
se actualizará el estado del árbol de configuración, perdiéndose toda la información asociada a
los robots que esté previamente definida. Es conveniente guardar los cambios antes de
desconectar el editor.
Editor de texto
Los nombres de datos y funciones definidas por el usuario no son coloreados por el editor,
quedando de esta forma en negro. La tabulación de las diferentes líneas también debe ser a
cargo del programador.
Herramientas de edición
La barra de herramientas principal del entorno es la del editor de texto tal como se muestra en
la Figura 6. A continuación se muestra la descripción de las funciones implementadas (de
izquierda a derecha):
• Nuevo documento.
• Abrir documento.
• Guardar documento.
• Guardar documento como.
• Cortar texto seleccionado.
• Copiar texto seleccionado.
• Pegar texto del portapapeles.
• Deshacer la última acción.
• Rehacer la acción anteriormente deshecha.
• Buscar cadena de texto.
• Buscar siguiente cadena.
• Buscar cadena anterior.
• Reemplazar cadena de texto.
• Imprimir documento.
• Acerca de EdtRAPID.
• Introducir/Eliminar marcador.
• Ir al marcador siguiente.
• Ir al marcador anterior.
• Eliminar todos los marcadores del documento.
Como se puede ver las herramientas de edición son las habituales de cualquier editor con lo
cual no se describirá en detalle su funcionamiento.
Marcadores
Los marcadores se utilizan para señalar la situación de determinadas líneas de código durante
la edición. Un documento con marcadores definidos se muestra en la Figura 7. Para insertar un
nuevo marcador en una línea hay que situar el cursor de texto en dicha línea y pulsar el botón
Introducir marcador. Para eliminarlo se pulsa nuevamente el mismo botón. Si se desea ir de un
marcador a otro se utilizan los botones de desplazamiento entre marcadores y para eliminar
todos los marcadores que contiene el texto se utiliza el último botón de la barra de edición de
texto.
Para introducir el código referente a la posición actual de un robot se utiliza el botón de captura
de la barra de conexión. Antes de pulsar el botón es necesario situar el cursor de texto del
documento activo en el lugar de inserción del código y tener seleccionado el robot deseado en
el árbol de configuración.
Una vez hecho esto último se pulsa el botón y aparece un diálogo como el mostrado en la
Figura 8. La ventana de diálogo dispone de un campo de texto para introducir el nombre del
punto a capturar. Un vez introducido el nombre se pulsa aceptar y de forma automática se
inserta el código fuente correspondiente a la posición del robot tal como se muestra en la
Figura 9.
La posición de un robot está representada en lenguaje RAPID por el tipo de dato robtarget que
a su vez está formado por otros cuatro tipos de dato, pos para definir las coordenadas
cartesianas del robot, confdata que define la configuración de los ejes, orient para definir la
orientación por medio de un cuaternio y extjoint que representa los ejes externos del robot.
Célula de Trabajo
La célula de trabajo de los robots se define en el simulador VRS pero debido a que este no
dispone de herramientas para guardar las posiciones de los robots cargados en el entorno de
simulación se incluye una herramienta en EdtRAPID para poder guardar los trabajos creados.
En el menú de la aplicación simulador se dispone de dos funciones (ver Figura 10). La primera
de ellas Cargar célula como su propio nombre indica es para cargar una célula de trabajo en el
simulador al que esté conectado EdtRAPID, en caso de estar desconectado ambas opciones
del menú simulador quedarán deshabilitadas. Además sólo se pueden cargar células de trabajo
en entornos locales, si la conexión es remota no se puede modificar la célula. La segunda
acción Guardar célula se puede ejecutar tanto en un entorno local como remoto siendo
necesario en ambos casos disponer de todos los archivos que componen la célula en el
ordenador donde se ejecuta EdtRAPID.
Es necesario definir una serie de parámetros en una ventana de diálogo como la mostrada en
la Figura 11. En la parte izquierda hay una lista con los elementos que contiene la célula, para
cada una de ellos es necesario especificar la dirección del archivo de dicho elemento. Para ello
se selecciona el nombre en la lista y se pulsa el botón situado a la derecha del texto cambiar
archivo para seleccionar una nueva ruta. Una vez asignada la nueva dirección el color del
elemento cambia a gris claro (ver elementos 1 y 3 de la Figura 11). Cuando toda la lista tenga
asignada una dirección se activará el botón aceptar. También se puede guardar opcionalmente
el entorno de la célula denominada como environment en el VRS, para ello se debe seleccionar
la dirección del archivo que contiene el entorno pulsando el botón situado a la derecha del texto
Entorno.
La célula de trabajo se guarda en un archivo de texto plano con extensión .cdt y se crea una
carpeta con el mismo nombre donde se guardan los archivos de todos los elementos que
contiene la célula y del entorno si se eligió la opción en la ventana de diálogo Guardar célula.
Ejecución de programa
Al pulsar el botón Ejecutar programa aparece una ventana de diálogo como la mostrada en la
Figura 14. Este diálogo dispone de ocho botones de herramienta en la parte derecha que se
corresponden con las acciones (de arriba hacia abajo):
• Ejecutar continuo/Reanudar: Con este botón se inicia la ejecución continua de un
programa sobre el simulador. Es una ejecución repetida de modo cíclico, de forma que el
robot ejecutará y repetirá el procedimiento main hasta que se indique una parada, se
produzca un error o bien se detenga o pause la ejecución del programa. Si el programa se
encuentra pausado se reanuda la ejecución.
• Ejecutar paso a paso: Modo de ejecución paso a paso (instrucción por instrucción). Para
ejecutar una instrucción el programa pide verificación debiendo pulsar un botón.
• Ejecutar siguiente paso: Ejecutar la siguiente instrucción cuando se está en modo de
ejecución paso a paso.
• Pausar ejecución: Pausar la ejecución cuando se está en modo de ejecución continuo.
• Parar ejecución: Detiene el programa en ejecución, tanto si se trata de modo continuo o
paso a paso.
• Ver la consola: Muestra la consola de programación. En esta pantalla se imprimen los
errores de programa y las incidencias de ejecución.
• Resetear señales: Pone todas las señales del robot asociado a la ejecución a su valor
mínimo o a cero en caso de tratarse de señales digitales. Es una función muy importante
para no perder sincronización en la ejecución de programas.
• Cerrar ventana: Finaliza el modo ejecución.
Además se dispone de dos campos para seleccionar el módulo base y el código fuente:
• Módulo base: es el archivo que contiene el módulo de sistema con la definición de la
herramienta y constantes generales
MODULE EJEMPLO
VAR num i := 0;
! Procedimiento principal
PROC main()
TPWrite "En ejecución";
WaitTime 1;
Incr i;
IF i = 5 THEN
TPWrite “Programa repetido 5 veces”;
WaitTime 2;
TPErase;
i := 0;
ENDIF
ENDPROC
ENDMODULE
Elige un archivo nuevo o parte del anterior para introducir el siguiente programa que tiene dos
procedimientos adicionales, uno para abrir la pinza y otro para cerrarla.
MODULE EJEMPLO
! Procedimiento principal
PROC main()
! Introduce aquí el control de la pinza
ENDPROC
ENDMODULE
*
El intérprete de EdtRAPID tampoco es completo, por lo que a veces una instrucción no se
ejecuta pero no muestra error.
Observa que se han definido tres procedimientos en el módulo, el principal (main) y dos más,
pero por ahora sólo se ejecutará el principal, ya que los otros dos no son llamados por el
principal. Para que se ejecute el procedimiento de abrir pinza se usará la instrucción
Abrir;
Y de forma similar, para cerrar la pinza se realizará la llamada siguiente:
Cerrar;
Ejercicio 1:
Modifica el programa anterior para que la pinza esté abierta 2 segundos y cerrada 3 segundos.
Si bien se puede definir una localización tecleándolas de forma adecuada, la manera más fácil
es mover el robot en VRS con el VRS TeachPendant o cualquier otra aplicación (VRS
PartHandling por ejemplo) y capturar las localizaciones desde EdtRAPID. Para ello hay que
hacer lo siguiente:
• Mover en VRS el robot a la localización deseada para capturarla en EdtRAPID
• En EdtRAPID, asegurarse de tener seleccionado el robot para el que se captura la
localización
• Situar el cursor del editor en el lugar donde se desea introducir la localización.
Normalmente, se suelen definir las localizaciones al principio del fichero, fuera de los
procedimientos para que se puedan referenciar desde cualquier procedimiento.
• Pulsar el botón Capturar punto e introducir un nombre, por ejemplo home.
• Se introducirán 6 líneas para definir la localización de tipo robtarget, que tendrá de nombre
rob_home
• En los procedimientos se podrán añadir instrucciones que ejecuten movimientos del robot
usando rob_home como localización destino del movimiento
Ejercicio 2:
Define en el programa anterior la localización de home (synchro en VRS) y dos localizaciones
más pos1 y pos2. Para ello, muévelo antes con el VRS TeachPendant.
Se pueden definir se forma sencilla localizaciones relativas unas de otras, en las que sólo
tengan cambio en las coordenadas cartesianas del punto, pero mantengan igual orientación.
Supuesto que se ha definido para un robot la localización pos1 de la siguiente forma:
Si se desea definir una nueva localización de aproximación a esta localización con, por
ejemplo, una distancia de aproximación de 100mm en el eje Z, bastará con definir una nueva
posición y luego una localización con los valores anteriores y la nueva posición, es decir:
Ejercicio 3:
Define en el programa anterior localizaciones de aproximación a pos1 y pos2.
Todas las instrucciones de movimiento tienen al menos cuatro parámetros fundamentales para
su interpretación:
• La localización a la que mover el robot. Este parámetro será un dato definido según el
proceso anterior.
• La velocidad del movimiento. El robot se moverá más rápido cuanto mayor sea. Los
posibles valores están definidos en el fichero basesys.txt, pero puede ser suficiente con
usar, por ejemplo, los valores v100 (muy lento), v500, v1000, v3000, v5000 y v7000 (muy
rápido).
• La fineza con la que se exige que realice el movimiento, entendiendo como tal el margen
de desviación que se le permite al robot en una localización. Los posibles valores están
definidos en el fichero basesys.txt, pero puede ser suficiente con usar, por ejemplo, los
valores fine (puntos muy precisos), z10, z30, z50, z100, z200 (para puntos de paso)
aunque en VRS no se llega a simular el efecto de este parámetro.
• El sistema de coordenadas de herramienta con el que se realiza el movimiento. Los
posibles valores están definidos en el fichero basesys.txt y en principio sólo se dispone del
valor tool0.
Ejercicio 3:
Modifica el programa anterior para que mueva el robot entre las localizaciones usando la
instrucción MoveJ.
Ejercicio 4:
Con ayuda de la traza de VRS, verifica la diferencia cuando el robot se mueve entre estas
localizaciones con MoveJ y con MoveL.
Ejercicio 5:
Haz que el robot coja la pieza, la levante hasta la posición de home y la coloque en otro lugar
de la mesa, repitiendo el proceso contrario para volver a dejarla donde estaba. Ayúdate si
quieres de VRS PartHandling para definir las localizaciones adecuadas de cogida y
aproximación.