ABB - Manual Operador - Introduccion RAPID
ABB - Manual Operador - Introduccion RAPID
ABB - Manual Operador - Introduccion RAPID
ID de documento: 3HAC029364-005
Revisión: -
© Copyright 2007 ABB. Reservados todos los derechos.
La información de este manual puede cambiar sin previo aviso y no puede entenderse
como un compromiso por parte de ABB. ABB no se hace responsable de ningún error
que pueda aparecer en este manual.
Excepto en los casos en que se indica expresamente en este manual, ninguna parte
del mismo debe entenderse como garantía alguna por parte de ABB por las pérdidas,
lesiones, daños materiales, idoneidad para un fin determinado ni garantías similares.
ABB no será en ningún caso responsable de los daños accidentales o consecuentes
que se produzcan como consecuencia del uso de este manual o de los productos
descritos en el mismo.
Se prohíbe la reproducción o la copia de este manual o cualquiera de sus partes si no
se cuenta con una autorización escrita de ABB. Ninguna parte de este manual debe
Descripción general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Documentación del producto, M2004 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Terminología . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3 Estructura 39
3.1 Procedimiento de RAPID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.2 Módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.3 Diseño estructurado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Índice 55
3HAC029364-005 Revisión: - 3
4
Contenido
3HAC029364-005 Revisión: -
© Copyright 2007 ABB. Reservados todos los derechos.
Descripción general
Descripción general
Utilización
Este manual debe leerse antes de empezar a programar. No contiene todo lo que puede
necesitar saber, pero debe familiarizarse con la mayoría de los aspectos de este manual antes
de empezar a escribir un programa de RAPID.
Este manual no sustituye a los cursos de formación acerca de RAPID, pero puede
complementarlos.
Requisitos previos
No existe ningún requisito previo asociado a este manual.
Capítulo Contenido
1. Conceptos básicos de Los fundamentos de la programación. Esta funcional-
© Copyright 2007 ABB. Reservados todos los derechos.
Referencias
Referencia ID de documento
Manual de referencia técnica - Descripción general de RAPID 3HAC16580-5
Continuación
Referencia ID de documento
Manual de referencia técnica - RAPID Instrucciones, funciones y 3HAC16581-5
tipos de datos
Technical reference manual - RAPID Kernel 3HAC16585-1
Manual del operador - IRC5 con FlexPendant 3HAC16590-5
Revisiones
Revisión Descripción
- Primera edición
6 3HAC029364-005 Revisión: -
Documentación del producto, M2004
General
La documentación del robot se divide en varias categorías diferentes. Esta lista se basa en el
tipo de información contenida en los documentos, independientemente de si los productos
son estándar u opcionales. Esto significa que un suministro determinado de productos de
robot no contendrá todos los documentos enumerados, sino sólo aquellos que se
corresponden con el equipo suministrado.
Sin embargo, puede pedir a ABB cualquiera de los documentos de la lista. Los documentos
enumerados son válidos para los sistemas de robot M2004.
Manuales de producto
Todo el hardware, robots y controladores se suministran con un Manual del producto, que
contiene:
• Información de seguridad
• Instalación y puesta en servicio (descripciones de la instalación mecánica y las
conexiones eléctricas)
• Mantenimiento (descripciones de todos los procedimientos de mantenimiento
preventivo necesarios, incluidos sus intervalos)
• Reparaciones (descripciones de todos los procedimientos de reparación
recomendados, incluidos los repuestos)
• Procedimientos adicionales, si los hay (calibración, retirada del servicio)
• Información de referencia (referencias de la documentación a la que se hace referencia
en el manual del producto, procedimientos, listas de herramientas, estándares de
seguridad)
• Lista de piezas
• Láminas o vistas ampliadas
© Copyright 2007 ABB. Reservados todos los derechos.
• Diagramas de circuitos
Continuación
Manuales de aplicaciones
Las aplicaciones específicas (por ejemplo opciones de software o hardware) se describen en
Manuales de aplicaciones. Un mismo manual de aplicaciones puede describir una o varias
aplicaciones.
Generalmente, un manual de aplicaciones contiene información acerca de:
• Finalidad de la aplicación (para qué sirve y en qué situaciones resulta útil)
• Contenido (por ejemplo cables, tarjetas de E/S, instrucciones de RAPID, parámetros
del sistema, CD con software para PC)
• Forma de uso de la aplicación
• Ejemplos sobre cómo usar la aplicación
8 3HAC029364-005 Revisión: -
Seguridad
Seguridad
Normativa de seguridad
Antes de empezar a trabajar con el robot, asegúrese de familiarizarse con la normativa de
seguridad descrita en el Manual del operador - IRC5 con FlexPendant.
© Copyright 2007 ABB. Reservados todos los derechos.
3HAC029364-005 Revisión: - 9
Terminología
Terminología
Términos
Término Descripción
FlexPendant Un terminal de mano para controlar un sistema de robot.
Controlador de El controlador de robot es básicamente un ordenador que controla el
robot robot.
Sintaxis Las reglas que determinan cómo se permite escribir un lenguaje. Puede
contemplarse como la gramática del lenguaje de programación.
La sintaxis de un lenguaje de programación es mucho más estricto que
el de un idioma natural humano. Los humanos son inteligentes y com-
prenderían algo como "Yo rápido corro" en lugar de "Yo corro rápido".
Los ordenadores, por otro lado, son más tontos y no comprenderían algo
a no ser que su sintaxis sea totalmente correcta.
10 3HAC029364-005 Revisión: -
1 Conceptos básicos de RAPID
1.1. Acerca de RAPID
Qué es RAPID
Si quiere que un ordenador haga algo, necesita un programa. RAPID es un lenguaje de
programación que permite escribir tal programa.
El lenguaje nativo de los ordenadores se compone exclusivamente de ceros y unos. Se trata
de algo prácticamente imposible de comprender para las personas. Por tanto, se enseña a los
ordenadores a comprender un lenguaje relativamente fácil de comprender: un lenguaje de
programación de alto nivel. RAPID es un lenguaje de programación de alto nivel. Utiliza
algunas palabras en inglés (como IF y FOR) para hacerlo comprensible para las personas.
PROC main()
length := 10;
width := 5;
area := length * width;
TPWrite "The area of the rectangle is " \Num:=area;
END PROC
ENDMODULE
Este programa calculará el área de un rectángulo y la escribirá en el FlexPendant:
© Copyright 2007 ABB. Reservados todos los derechos.
3HAC029364-005 Revisión: - 11
1 Conceptos básicos de RAPID
1.2.1. Variables
1.2.1. Variables
Tipos de datos
RAPID cuenta con muchos tipos de datos diferentes. De momento, nos centraremos en los
tres tipos de datos generales:
Todos los demás tipos de datos se basan en estos tres. Comprendiendo estos tipos, la forma
de realizar operaciones con ellos y cómo pueden ser combinados para formar tipos de datos
complejos, podrá comprender fácilmente todos los tipos de datos.
Ejemplo
VAR num length;
VAR string name;
VAR bool finished;
Asignación de valores
La asignación de un valor a una variable se hace con la instrucción :=
length := 10;
name := "John"
finished := TRUE;
Recuerde que := no es un signo de igual que. Significa la asignación de la expresión que
aparece a su derecha de la variable que aparece a la izquierda. Sólo puede indicarse una única
variable a la izquierda de :=
Por ejemplo, lo siguiente es un código de RAPID correcto que da como resultado que reg1
tenga el valor 3:
reg1 := 2;
reg1 := reg1 + 1;
Continúa en la página siguiente
12 3HAC029364-005 Revisión: -
1 Conceptos básicos de RAPID
1.2.1. Variables
Continuación
3HAC029364-005 Revisión: - 13
1 Conceptos básicos de RAPID
1.2.2. Variables persistentes
Ejemplo
Considere el ejemplo de código siguiente:
PERS num nbr := 1;
PROC main()
nbr := 2;
ENDPROC
Si se ejecuta este programa, el valor inicial cambia a 2. La próxima vez que se ejecute el
programa, el código del programa tendrá el aspecto siguiente:
PERS num nbr := 2;
PROC main()
nbr := 2;
ENDPROC
14 3HAC029364-005 Revisión: -
1 Conceptos básicos de RAPID
1.2.3. Constantes
1.2.3. Constantes
Declaración de constantes
La constante se declara con la palabra clave CONST seguida del tipo de dato, el identificador
y la asignación de un valor.
CONST num gravity := 9.81;
CONST string greating := "Hello"
3HAC029364-005 Revisión: - 15
1 Conceptos básicos de RAPID
1.2.4. Operadores
1.2.4. Operadores
Operadores numéricos
Estos operadores operan con el tipo de datos num y devuelven el tipo de datos num. Es decir,
en los ejemplos siguientes, las variables reg1, reg2 y reg3 son del tipo de dato num.
Operadores relacionales
Estos operadores devuelven el tipo de dato bool.
En los ejemplos, reg1 y reg2 son del tipo de dato num mientras que flag1 es del tipo bool.
Los operadores lógicos se usan con frecuencia junto con la instrucción IF. Para ver ejemplos
de código, consulte Ejemplos con condiciones lógicas y sentencias IF en la página 19.
Operador de cadena
16 3HAC029364-005 Revisión: -
1 Conceptos básicos de RAPID
1.3.1. IF THEN
1.3.1. IF THEN
IF
La instrucción IF puede usarse cuando un conjunto de sentencias sólo debe ejecutarse si se
cumple una condición determinada.
Si la condición lógica de la sentencia IF se cumple, el código de programa situado entre las
palabras clave THEN y ENDIF se ejecuta. Si la condición no se cumple, ese código no se
ejecuta y la ejecución continúa después de ENDIF.
Ejemplo
En este ejemplo, la cadena string1 se escribe en el FlexPendant si no es una cadena vacía.
Si string1 es una cadena vacía, es decir, no contiene ningún carácter, no se realiza ninguna
acción.
VAR string string1 := "Hello";
ELSE
© Copyright 2007 ABB. Reservados todos los derechos.
Ejemplo
En este ejemplo, la cadena string1 se escribe en el FlexPendant si no es una cadena vacía.
Si string1 es una cadena vacía, se escribe el texto "The string is empty".
VAR string string1 := "Hello";
Continuación
ELSEIF
En ocasiones existen más de dos secuencias de programa alternativas. En este caso, puede
usar ELSEIF para crear distintas alternativas.
Ejemplo
En este ejemplo se escriben textos diferentes en función del valor de la variable time.
VAR num time := 38.7;
18 3HAC029364-005 Revisión: -
1 Conceptos básicos de RAPID
1.3.2. Ejemplos con condiciones lógicas y sentencias IF
Ejemplo
Usar la sentencia IF para determinar qué texto debe escribir en el FlexPendant. Escribir en el
FlexPendant qué pieza se produce a mayor velocidad.
VAR string part1 := "Shaft";
VAR num time1;
VAR string part2 := "Pipe";
VAR num time2;
PROC main()
time1 := 41.8;
time2 := 38.7;
IF time1 < time2 THEN
TPWrite part1 + " is fastest to produce";
ELSEIF time1 > time2 THEN
TPWrite part2 + " is fastest to produce";
ELSE
TPWrite part1 + " y " + part2 + " are equally fast to produce";
ENDIF
ENDPROC
Ejemplo
Si la producción de una pieza requiere más de 60 segundos, escribir un mensaje en el
FlexPendant. Si la variable booleana full_speed contiene FALSE, el mensaje indicará al
operador que debe incrementar la velocidad del robot. Si full_speed contiene TRUE, el
mensaje pedirá al operador que examine el motivo de la lentitud de la producción.
VAR num time := 62.3;
VAR bool full_speed := TRUE;
© Copyright 2007 ABB. Reservados todos los derechos.
PROC main()
IF time > 60 THEN
IF full_speed THEN
TPWrite "Examine why the production is slow";
ELSE
TPWrite "Increase robot speed for faster production";
ENDIF
ENDIF
ENDPROC
3HAC029364-005 Revisión: - 19
1 Conceptos básicos de RAPID
1.3.3. Bucle FOR
20 3HAC029364-005 Revisión: -
1 Conceptos básicos de RAPID
1.3.4. Bucle WHILE
Sintaxis de WHILE
La sintaxis del bucle WHILE es la siguiente:
WHILE condición DO
código de programa a repetir
ENDWHILE
Si la condición no se cumple desde el principio, la secuencia de código no llega a ejecutarse
nunca. Si la condición se cumple, la secuencia de código se ejecuta repetidamente hasta que
la condición deja de cumplirse.
Ejemplo
El código de programa siguiente suma números (1+2+3+...) hasta que la suma llegue a 100.
VAR num sum := 0;
VAR num i := 0;
pero en ese caso debe contener alguna instrucción de espera que permita al ordenador realizar
otras tareas entretanto.
Los bucles pesados (con gran cantidad de cálculos y escrituras en el FlexPendant, sin
instrucciones de movimiento) pueden requerir alguna instrucción de espera incluso si existe
un número limitado de bucles.
WHILE TRUE DO
! Some code
...
! Wait instruction that waits for 1 second
WaitTime 1;
ENDWHILE
Recuerde que las instrucciones de movimiento funcionan como instrucciones de espera, dado
que la ejecución no continúa hasta que el robot ha alcanzado su objetivo.
3HAC029364-005 Revisión: - 21
1 Conceptos básicos de RAPID
1.4.1. Reglas generales de sintaxis de RAPID
Punto y coma
La regla general es que cada sentencia termina con un punto y coma.
Ejemplos
Declaración de variables:
VAR num length;
Asignación de valores:
area := length * width;
Mayoría de llamadas a instrucciones:
MoveL p10,v1000,fine,tool0;
Excepciones
Algunas instrucciones especiales no terminan con un punto y coma. En su lugar, existen
palabras clave especiales para indicar dónde terminan.
Ejemplos de instrucciones que no terminan con un punto y coma:
Palabra clave de instrucción Palabra clave final
IF ENDIF
FOR ENDFOR
WHILE ENDWHILE
PROC ENDPROC
Estas palabras clave son muy importantes para crear una buena estructura en un programa de
RAPID. Se describen en detalle más adelante en este manual.
Comentarios
Ejemplo
! Calculate the area of the rectangle
area := length * width;
22 3HAC029364-005 Revisión: -
1 Conceptos básicos de RAPID
1.4.2. Recomendaciones para el código de RAPID
Indentaciones
Para facilitar la comprensión del código de programación, utilice indentaciones. Todo lo que
esté dentro de un procedimiento PROC (entre PROC y ENDPROC) debe estar indentado. Todo lo
que esté dentro de una sentencia IF-, FOR- o WHILE debe estar aún más indentado.
Al programar con el FlexPendant, la indentación se realiza automáticamente.
Ejemplo
VAR bool repeat;
VAR num times;
PROC main()
repeat := TRUE;
times := 3;
IF repeat THEN
FOR i FROM 1 TO times DO
TPWrite "Hello!";
ENDFOR
ENDIF
END PROC
Observe que es fácil comprobar dónde comienza y termina la sentencia IF. Si tiene varias
sentencias IF sin ninguna indentación, sería prácticamente imposible saber qué ENDIF
© Copyright 2007 ABB. Reservados todos los derechos.
3HAC029364-005 Revisión: - 23
1 Conceptos básicos de RAPID
1.4.2. Recomendaciones para el código de RAPID
24 3HAC029364-005 Revisión: -
2 Funcionalidad de robots en RAPID
2.1.1. Instrucción MoveL
Descripción general
La ventaja de RAPID es que, excepto por el hecho de que presenta una funcionalidad que
aparece en otros lenguajes de programación de alto nivel, ha sido diseñado especialmente
para controlar robots. Y lo que es más importante, existen instrucciones para hacer que el
robot se mueva.
MoveL
Una instrucción de movimiento simple puede tener el aspecto siguiente:
MoveL p10, v1000, fine, tool0;
Donde:
• MoveL es una instrucción que mueve el robot linealmente (en una línea recta) desde
su posición actual hasta la posición especificada.
• p10 especifica la posición hasta la que debe moverse el robot.
• v1000 especifica que la velocidad del robot debe ser de 1.000 mm/s.
• fine especifica que el robot debe moverse exactamente hasta la posición especificada
y no tomar atajos en las esquinas en su desplazamiento hasta la siguiente posición.
• tool0 especifica que lo que debe moverse hasta la posición especificada es la brida
de montaje situada en el extremo del robot.
Sintaxis de MoveL
MoveL ToPoint Speed Zone Tool;
© Copyright 2007 ABB. Reservados todos los derechos.
ToPoint
El punto de destino, definido por una constante del tipo de dato robtarget. Al programar
con el FlexPendant, puede asignar un valor robtarget apuntando a una posición con el
robot. Al programar fuera de línea, puede resultar complicado calcular las coordenadas de una
posición.
robtarget se explica más adelante, en la sección Tipos de datos compuestos en la página
48. De momento, aceptemos simplemente que la posición x=600, y=-100, z=800 puede
declararse y asignarse de la forma siguiente:
CONST robtarget p10 := [ [600, -100, 800], [1, 0, 0, 0], [0, 0, 0,
0], [ 9E9, 9E9, 9E9, 9E9, 9E9, 9E9] ];
Speed
La velocidad del movimiento, definida por una constante del tipo de dato speeddata. Existe
un buen número de valores predefinidos, como por ejemplo:
Continuación
Zone
Especifica una zona de esquina definida por una constante del tipo de dato zonedata. Existe
muchos valores predefinidos, como por ejemplo:
xx0700000358
Continuación
Tool
Especifica la herramienta utilizada por el robot, definida por una variable persistente del tipo
de dato tooldata. Si hay una pistola de soldadura, una pistola de adhesivo o un rotulador
fijado al robot, queremos programar el ToPoint de la punta de esta herramienta. Esto se realiza
automáticamente si se declara, asigna y utiliza un valor de tooldata en la instrucción
MoveL.
tool0 es una herramienta predefinida que representa al robot sin ninguna herramienta
montada en él y no debe ser declarada ni asignada. Cualquier otra herramienta debe ser
declarada y asignada antes de usarla.
© Copyright 2007 ABB. Reservados todos los derechos.
3HAC029364-005 Revisión: - 27
2 Funcionalidad de robots en RAPID
2.1.2. Sistemas de coordenadas
xx0700000397
28 3HAC029364-005 Revisión: -
2 Funcionalidad de robots en RAPID
2.1.3. Ejemplos con MoveL
Trazar un cuadrado
Un robot sostiene un rotulador sobre un papel colocado sobre una mesa. Queremos que el
robot baje la punta del rotulador para colocarla en el papel y que a continuación trace un
cuadrado.
xx0700000362
PROC main()
MoveL p10, v200, fine, tPen;
MoveL p20, v200, fine, tPen;
MoveL p30, v200, fine, tPen;
MoveL p40, v200, fine, tPen;
MoveL p10, v200, fine, tPen;
ENDPROC
Continuación
xx0700000363
PROC main()
MoveL p10, v200, fine, tPen;
MoveL p20, v200, z20, tPen;
MoveL p30, v200, fine, tPen;
MoveL p40, v200, z50, tPen;
MoveL p10, v200, fine, tPen;
ENDPROC
30 3HAC029364-005 Revisión: -
2 Funcionalidad de robots en RAPID
2.1.4. Otras instrucciones de movimiento
MoveJ
MoveJ se utiliza para mover el robot rápidamente de un punto a otro cuando no es
imprescindible que el movimiento siga una línea recta.
Utilice MoveJ para mover el robot hasta un punto en el aire situado a poca distancia de donde
va a trabajar el robot. La instrucción MoveL no funciona si, por ejemplo, la base del robot está
entre la posición actual y la posición programada o si la reorientación de la herramienta es
demasiado grande. MoveJ puede usarse siempre en estos casos.
La sintaxis de MoveJ es similar a la de MoveL.
Ejemplo
MoveJ p10, v1000, fine, tPen;
MoveC
MoveC se usa para mover el robot en círculo describiendo un arco.
Ejemplo
MoveL p10, v500, fine, tPen;
MoveC p20, p30, v500, fine, tPen;
MoveL p40, v500, fine, tPen;
© Copyright 2007 ABB. Reservados todos los derechos.
xx0700000364
3HAC029364-005 Revisión: - 31
2 Funcionalidad de robots en RAPID
2.1.5. Comportamiento de ejecución en las zonas de esquina
xx0700000387
Continuación
Solución
Si desea activar señales en las zonas de esquina y no utiliza fine, existen instrucciones
especiales para resolverlo, por ejemplo MoveLDO, TriggL y DispL. Para obtener más
información acerca de estas instrucciones, consulte el Manual de referencia técnica - RAPID
Instrucciones, funciones y tipos de datos.
Evite las instrucciones de espera o los cálculos pesados a continuación de las zonas de esquina
El controlador del robot puede calcular el movimiento del robot en las trayectorias de esquina
incluso si hay instrucciones entre las instrucciones de movimiento. Sin embargo, si hay una
instrucción de espera a continuación de una instrucción de movimiento con una zona de
esquina, el robot no será capaz de gestionarlo. Utilice fine en la instrucción de movimiento
antes de una instrucción de espera.
También existe una limitación en cuanto al número (y la complejidad) de los cálculos que
puede realizar el controlador de robot entre las instrucciones de movimiento con zonas de
esquina. Esto constituye principalmente un problema al llamar a procedimientos a
continuación de una instrucción de movimiento con una zona de esquina.
© Copyright 2007 ABB. Reservados todos los derechos.
3HAC029364-005 Revisión: - 33
2 Funcionalidad de robots en RAPID
2.2.1. Señales de E/S
Configuración de señales
Las señales son configuradas en los parámetros de sistema del sistema de robot. Es posible
definir nombres personalizados para las señales. No deben declararse en el programa de
RAPID.
Entrada digital
Las señales digitales de entrada pueden tener los valores 0 ó 1. El programa de RAPID puede
leer su valor pero no cambiarlo.
Ejemplo
Si la señal digital de entrada di1 tiene el valor 1, el robot se mueve.
IF di1 = 1 THEN
MoveL p10, v1000, fine, tPen;
ENDIF
Salida digital
Las señales digitales de salida pueden tener los valores 0 ó 1. El programa de RAPID puede
establecer el valor de una señal digital de salida y con ello influir en el comportamiento de los
Ejemplo
El robot cuenta con una herramienta pinza que puede cerrarse con la señal digital de salida
do_grip. El robot se mueve hasta la posición en la que se encuentra el rotulador y cierra la
pinza. A continuación, el robot se mueve hasta donde debe trazar, ahora usando la
herramienta tPen.
MoveJ p0, vmax, fine, tGripper;
SetDO do_grip, 1;
MoveL p10, v1000, fine, tPen;
34 3HAC029364-005 Revisión: -
2 Funcionalidad de robots en RAPID
2.3.1. Comunicación con el FlexPendant
TPWrite
La escritura de un mensaje para el operador puede hacerse con la instrucción TPWrite.
TPWrite "Now producing exhaust pipes";
© Copyright 2007 ABB. Reservados todos los derechos.
xx0700000374
Continuación
TPReadFK
Al escribir un programa de RAPID que requiere que el operador elija una opción, TPReadFK
es una instrucción útil. Permite la visualización de hasta cinco teclas de función y el operador
puede elegir cuál de ellas tocar. Los botones corresponden a los valores 1 a 5.
VAR num answer;
TPReadFK answer, "Select which figure to draw", "Square",
"Triangle", stEmpty, stEmpty, stEmpty;
IF answer = 1 THEN
! code to draw square
ELSEIF answer = 2 THEN
! code to draw triangle
ELSE
! do nothing
ENDIF
xx0700000376
Continuación
TPReadNum
TPReadNum permite al operador escribir un número en el FlexPendant, en lugar de elegir una
opción.
VAR num answer;
TPReadNum answer, "How many times shall I draw the figure?";
FOR i FROM 1 TO answer DO
! code to draw figure
ENDFOR
xx0700000378
3HAC029364-005 Revisión: - 37
2 Funcionalidad de robots en RAPID
2.3.1. Comunicación con el FlexPendant
38 3HAC029364-005 Revisión: -
3 Estructura
3.1. Procedimiento de RAPID
3 Estructura
3.1. Procedimiento de RAPID
Qué es un procedimiento
Hasta el momento, todos los ejemplos de código de RAPID que hemos visto tenían su código
ejecutable en el procedimiento main. La ejecución comienza automáticamente en el
procedimiento llamado main, pero es posible disponer de varios procedimientos.
Los procedimientos deben ser declarados con la palabra clave PROC seguida del nombre del
procedimiento, los argumentos del procedimiento y el código de programa que debe ser
ejecutado por el procedimiento. La llamada a un procedimiento se hace desde otro
procedimiento (excepto en el caso de main, al que se llama directamente cuando se inicia el
programa).
Ejemplo
Si queremos trazar cuatro cuadrados de tamaños diferentes, podemos escribir cuatro veces
prácticamente el mismo código de programa. El resultado sería un montón de código y una
mayor dificultad para comprender el programa. Una forma mucho más eficiente de escribir
este programa es crear un procedimiento que traza el cuadrado y hacer que el procedimiento
main llame cuatro veces a este procedimiento.
PERS tooldata tPen:= ...
CONST robtarget p10:= ...
PROC main()
! Call the procedure draw_square
draw_square 100;
draw_square 200;
draw_square 300;
© Copyright 2007 ABB. Reservados todos los derechos.
draw_square 400;
ENDPROC
Continuación
ENDPROC
Argumentos de procedimientos
Al declarar un procedimiento, todos los argumentos se declaran entre paréntesis a
continuación del nombre del procedimiento. Esta declaración contiene el tipo de dato y el
nombre de cada argumento. El argumento recibe su valor de la llamada al procedimiento y
actúa como una variable dentro del procedimiento (el argumento no puede usarse fuera de su
procedimiento).
PROC main()
my_procedure 14, "Hello", TRUE;
ENDPROC
40 3HAC029364-005 Revisión: -
3 Estructura
3.2. Módulos
3.2. Módulos
Ejemplo
El módulo MainModule contiene código específico de este programa y especifica qué debe
hacer el robot en este programa en concreto. El módulo figures_module contiene código
estándar que puede usarse en cualquier programa en el que se desee trazar un cuadrado, un
triángulo o un círculo.
MODULE MainModule
...
draw_square;
...
ENDMODULE
MODULE figures_module
PROC draw_square()
...
ENDPROC
PROC draw_triangle()
...
ENDPROC
PROC draw_circle()
© Copyright 2007 ABB. Reservados todos los derechos.
...
ENDPROC
ENDMODULE
Módulos de programa
Los módulos de programa se guardan con la extensión de archivo .mod, por ejemplo
figures_module.mod.
Para el controlador de robot no supone ninguna diferencia que el programa esté escrito en
distintos módulos. El motivo de utilizar distintos módulos de programa es sólo facilitar a los
programadores la comprensión del programa y la reutilización del código.
Sólo puede haber un único programa activo en el controlador de robot. Es decir, sólo uno de
los módulos puede contener un procedimiento llamado main.
Continuación
Módulos de sistema
Los módulos de sistema se guardan con la extensión de archivo .sys, por ejemplo
system_data_module.sys.
Los datos y procedimientos que deban permanecer en el sistema incluso al cambiar de
programa deben situarse en un módulo de sistema. Por ejemplo, si se declara una variable
persistente del tipo tooldata en un módulo de sistema, la recalibración de la herramienta se
conserva incluso al cargar un nuevo programa.
42 3HAC029364-005 Revisión: -
3 Estructura
3.3. Diseño estructurado
Acerca de la estructura
Al enfrentarse por primera vez a un problema que desea resolver con un programa de RAPID,
analice con calma el problema y sus componentes. Si empieza a programar sin primero pensar
la totalidad del diseño, su programa será irracional. Un programa bien diseñado tiene una
menor probabilidad de contener errores y es más fácil de comprender para otras personas. El
tiempo dedicado al diseño se recupera muchas veces durante las pruebas y el mantenimiento
del programa.
Divida el problema
Siga estos pasos para dividir el problema en fragmentos manejables:
Acción
1. Identifique la funcionalidad a mayor escala. Intente dividir el problema en piezas más
pequeñas y fáciles de manejar.
2. Cree una estructura de diseño. Trace un mapa de las funciones y de cómo se relacio-
narán entre sí.
3. Observe los distintos bloques de la estructura de diseño. ¿Es posible dividir un bloqueo
en fragmentos más pequeños? ¿Qué se necesita para implementar el bloque?
Ejemplo
Cuando el robot ha trazado 10 figuras en el mismo papel, escribir un mensaje para indicar que
se debe sustituir el papel y esperar a que el operador toque un botón OK.
Entre un dibujo y el siguiente, comprobar si di1 tiene el valor 1. Si es así, moverse hasta un
sacapuntas y cambiar do1 a 1 para poner en marcha el sacapuntas e introducir lentamente el
lápiz en el sacapuntas. Normalmente, necesitamos redefinir la herramienta dado que se acorta
al afilarla, pero en este ejemplo omitiremos ese paso.
Continuación
Estructura de diseño
en0700000381
PROC main()
user_selection;
IF count >= 10 THEN
change_paper;
! Reset count
count := 0;
ENDIF
PROC user_selection()
VAR num answer;
TPReadFK answer, "Select which figure to draw", "Square",
"Triangle", "Quit", stEmpty, stEmpty;
IF answer = 1 THEN
draw_square;
count := count + 1;
ELSEIF answer = 2 THEN
draw_triangle;
count := count + 1;
ELSE
quit;
ENDIF
Continúa en la página siguiente
44 3HAC029364-005 Revisión: -
3 Estructura
3.3. Diseño estructurado
Continuación
ENDPROC
PROC draw_square()
VAR robtarget p20;
VAR robtarget p30;
VAR robtarget p40;
PROC draw_triangle()
VAR robtarget p20;
VAR robtarget p30;
PROC quit()
TPWrite "Good bye!"
! Terminate the program
EXIT;
ENDPROC
PROC change_paper()
VAR num answer;
TPReadFK answer, "Change the paper", "OK", stEmpty, stEmpty,
stEmpty, stEmpty;
ENDPROC
Continuación
PROC sharpen_pencil()
VAR robtarget pSharp2;
VAR robtarget pSharp3;
46 3HAC029364-005 Revisión: -
4 Datos con varios valores
4.1. Matrices
Asignación de valores
Es posible asignar a una matriz todos sus valores de una vez. Al asignar la totalidad de la
matriz, los valores se encierran entre [ ] y se separan con comas.
my_array := [5, 10, 7];
También es posible asignar un valor a uno de los elementos de una matriz. El elemento al que
se asigna el valor se especifica entre { }.
my_array{3} := 8;
Ejemplo
En este ejemplo se usan un bucle FOR y matrices para preguntar al operador el tiempo de
producción estimado de cada pieza. Se trata de una forma muy eficiente de escribir código,
en lugar de tener una variable para cada pieza y no poder usar el bucle FOR.
VAR num time{3};
VAR string part{3} := ["Shaft", "Pipe", "Cylinder"];
VAR num answer;
© Copyright 2007 ABB. Reservados todos los derechos.
PROC main()
FOR i FROM 1 TO 3 DO
TPReadNum answer, "Estimated time for " + part{i} + "?";
time{i} := answer;
ENDFOR
ENDPROC
3HAC029364-005 Revisión: - 47
4 Datos con varios valores
4.2. Tipos de datos compuestos
pos
Un ejemplo sencillo de tipo de dato compuesto es del tipo de dato pos. Contiene tres valores
numéricos (X, Y y Z).
La declaración tiene el aspecto de una variable simple:
VAR pos pos1;
La asignación de todos los valores se realiza como con las matrices:
pos1 := [600, 100, 800];
Los distintos componentes tienen nombres en lugar de números. Los componentes de pos
reciben los nombres x, y y z. El valor de un componente se identifica con el nombre de la
variable, un punto y el nombre del componente:
pos1.z := 850;
orient
El tipo de dato orient especifica la orientación de la herramienta. La orientación se
especifica con cuatro valores numéricos, con los nombres q1, q2, q3 y q4.
VAR orient orient1 := [1, 0, 0, 0];
TPWrite "The value of q1 is " \Num:=orient1.q1;
pose
Un tipo de dato puede componerse de otros tipos de datos compuestos. Un ejemplo de ello es
el tipo de dato pose, que se compone de un dato pos con el nombre trans y un dato orient
con el nombre rot.
robtarget
robtarget es un tipo de dato demasiado complejo como para explicarlo en detalle aquí, de
forma que nos conformaremos con una explicación breve.
robtarget se compone de cuatro partes:
Tipo de dato Nombre Descripción
pos trans Coordenadas X, Y y Z
orient rot Orientación
confdata robconf Especifica ángulos de ejes de robot.
extjoint extax Especifica posiciones de hasta 6 ejes adicionales. Se
usa el valor 9E9 si no hay ningún eje adicional.
Continuación
Descripciones detalladas
Encontrará descripciones detalladas de estos tipos de datos y muchos más en el Manual de
referencia técnica - RAPID Instrucciones, funciones y tipos de datos, sección Tipos de datos.
© Copyright 2007 ABB. Reservados todos los derechos.
3HAC029364-005 Revisión: - 49
4 Datos con varios valores
4.2. Tipos de datos compuestos
50 3HAC029364-005 Revisión: -
5 Instrucciones y funciones de RAPID
5.1. Instrucciones
Descripciones detalladas
Encontrará descripciones detalladas de las instrucciones en el Manual de referencia técnica -
RAPID Instrucciones, funciones y tipos de datos, sección Instrucciones.
© Copyright 2007 ABB. Reservados todos los derechos.
3HAC029364-005 Revisión: - 51
5 Instrucciones y funciones de RAPID
5.2. Funciones
5.2. Funciones
! Convert the num time to string and concatenate with other strings
string1 := name + "’s time was " + NumToStr(time);
Descripciones detalladas
Encontrará descripciones detalladas de las funciones en el Manual de referencia técnica -
RAPID Instrucciones, funciones y tipos de datos, sección Funciones.
52 3HAC029364-005 Revisión: -
6 Qué debe leer a continuación
6.1. Dónde buscar más información
3HAC029364-005 Revisión: - 53
6 Qué debe leer a continuación
6.1. Dónde buscar más información
54 3HAC029364-005 Revisión: -
Índice
A PROC 39
argumentos 40 procedimiento 39
asignar valores 12 procedimiento de RAPID 39
punto y coma 22
B
R
base de coordenadas de la base 28
bool 12 rendimiento 21
bucle 20, 21 rendimiento del ordenador 21
bucles eternos 21 repetición 20, 21
robtarget 25, 48
C
S
comentarios 22
comunicación 34, 35 salida digital 34
condiciones lógicas 16, 19 seguridad 9
conditional execution 17 señal de entrada 34
constantes 15 señal de salida 34
controlador de robot 10 señales 34
señales de E/S 34
D sintaxis 10
declaración de variables 12 sistema de coordenadas de la base 28
diseño 43 sistemas de coordenadas 28
speeddata 25
E string 12
ejecución condicional 21
T
ELSE 17
ELSEIF 18 terminología 10
entrada digital 34 tipos de datos 12, 48
tipos de datos complejos 48
F tooldata 27
FlexPendant 10, 35 TPReadFK 36
FOR 20 TPReadNum 37
funciones 52 TPWrite 35
funciones de RAPID 52
V
I variables 12
IF 17, 19
W
indentaciones 23
instrucciones 51 WHILE 21
© Copyright 2007 ABB. Reservados todos los derechos.
L Z
logical conditions 17 zonas de esquina 30, 32
zonedata 26
M
main 39
matrices 47
módulo 41
MoveC 31
MoveJ 31
MoveL 25, 29
N
num 12
O
operadores 16
orient 48
P
pos 48
pose 48
3HAC029364-005 Revisión: - 55
56
Índice
3HAC029364-005 Revisión: -
© Copyright 2007 ABB. Reservados todos los derechos.
Contact us
ABB AB
3HAC029364-005 Rev -, es
Discrete Automation and Motion
Robotics
S-721 68 VÄSTERÅS
SWEDEN
Telephone +46 (0) 21 344 400
www.abb.com