UVA - CARTIF
J. M. Vázquez
Manual Básico de Programación. Lenguaje RAPID
Pag.: 3
Manual Básico de Programación. Lenguaje RAPID
UVA - CARTIF
MANUAL BÁSICO DE PROGRAMACIÓN LENGUAJE RAPID
J.C. Fraile J. López Cruzado J.M. Vázquez Valladolid, Octubre 2003
J.M. Vázquez
Pag.: 4
UVA - CARTIF
J. M. Vázquez
Manual Básico de Programación. Lenguaje RAPID
Pag.: 5
Manual Básico de Programación. Lenguaje RAPID
UVA - CARTIF
Índice 1. CARACTERÍSTICAS GENERALES DEL LENGUAJE RAPID
8
2. ELEMENTOS BASICOS DEL LENGUAJE
9
2.1 IDENTIFICADORES 2.2 SEPARADORES 2.3 VALORES NUMÉRICOS, LÓGICOS Y DE CADENA 2.4 COMENTARIOS 2.5 COMODINES 2.6 ENCABEZADO DE ARCHIVO 2.7 CONTROL DEL FLUJO DEL PROGRAMA 2.8 INSTRUCCIONES Y ARGUMENTOS
9 9 9 9 9 10 10 10
3. MODULOS Y RUTINAS
12
3.1 ESTRUCTURA DE UNA APLICACIÓN 3.2 MÓDULOS 3.2.1 DECLARACIÓN DE LOS MÓDULOS 3.2.2 MÓDULOS DE SISTEMA 3.3 RUTINAS 3.3.1 TIPOS DE RUTINAS 3.3.2 ALCANCE DE UNA RUTINA 3.3.3 DECLARACIÓN DE UNA RUTINA 3.3.4 PARÁMETROS DE UNA RUTINA
12 12 12 13 13 13 13 13 14
4. DATOS
15
4.1 INTRODUCCIÓN 4.2 CARACTERÍSTICAS DE LOS DATOS 4.2.1 ALCANCE DE LOS DATOS 4.2.2 DECLARACIÓN DE LOS DATOS 4.3 TIPOS DE DATOS 4.4 LISTA DE LOS DIFERENTES TIPOS DE DATOS 4.5 DESCRIPCIÓN DE ALGUNOS DE LOS TIPOS DE DATOS MÁS USUALES 4.5.1 POS 4.5.2 ORIENT 4.5.3 POSE 4.5.4 CONFDATA 4.5.5 LOADDATA 4.5.6 SPEEDDATA 4.5.7 ZONEDATA 4.5.8 EXTT 4.5.9 ROBTARGET 4.5.10 TOOLDATA
J.M. Vázquez
15 15 15 15 15 16 16 16 17 17 18 18 19 19 20 20 20
Pag.: 6
UVA - CARTIF
Manual Básico de Programación. Lenguaje RAPID
4.5.11 WOBJDATA
21
5. MOVIMIENTOS
22
5.1 CARACTERÍSTICAS DE MOVIMIENTO 5.1.1 DEFINICIÓN DE LA VELOCIDAD 5.1.2 DEFINICIÓN DE LA ACELERACIÓN 5.1.3 DEFINICIÓN DE LA GESTIÓN DE LA CONFIGURACIÓN 5.1.4 DEFINICIÓN DE LA CARGA ÚTIL 5.1.5 DEFINICIÓN DEL COMPORTAMIENTO DEL ROBOT CERCA DE UN PUNTO SINGULAR 5.1.6 DESPLAZAMIENTO DE UN PROGRAMA 5.1.7 SERVO SUAVE 5.1.8 VALORES DE AJUSTE DEL ROBOT 5.2 INSTRUCCIONES DE POSICIONAMIENTO MÁS USUALES 5.3 OTRAS INSTRUCCIONES Y FUNCIONES RELACIONADAS
22 22 22 22 23 23 23 24 24 25 27
6. ENTRADAS Y SALIDAS
28
6.1 INSTRUCCIONES DE E/S MÁS USUALES 6.1.1 SET 6.1.2 RESET 6.1.3 SETAO 6.1.4 SETDO 6.1.5 SETGO 6.1.6 WAITDI 6.1.7 WAITDO 6.2 OTRAS INSTRUCCIONES Y FUNCIONES RELACIONADAS 7. DIALOGO CON EL OPERADOR
28 28 28 28 28 28 29 29 29 ¡Error!Marcador no definido.
7.1 INSTRUCCIONES DE COMUNICACIÓN MÁS USUALES 7.1.1 TPWRITE 7.1.2 TPREADFK 7.2 OTRAS INSTRUCCIONES Y FUNCIONES RELACIONADAS
30 30 30 31
8. INSTRUCCIONES VARIAS
32
8.1 INSTRUCCIONES DE ESPERA 8.2 FECHA Y HORA 8.3 MATEMÁTICAS 8.4 INSTRUCCIONES DE SERVICIO 8.5 FUNCIONES DE CADENA 8.6 FUNCIONES VARIAS
J. M. Vázquez
32 32 32 33 33 33
Pag.: 7
Manual Básico de Programación. Lenguaje RAPID
UVA - CARTIF
1. CARACTERÍSTICAS GENERALES DEL LENGUAJE RAPID RAPID = Robotics Application Programming Interactive Dialogue ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗
Lenguaje estructurado de alto nivel. Procedimientos y funciones. Programas modulares. Datos y rutinas locales y globales. Interrupciones. Gestión automática de errores. Gestión de ejecución hacia atrás. Expresiones aritméticas y lógicas. Multitarea: varios programas ejecutándose a la vez. Librerías de módulos de programas para rutinas específicas. El programa robot y los datos definidos por el se almacenan en formato texto PC DOS. Los programas se escriben de una manera fácil usando ventanas que contienen las instrucciones. Puede ser ampliado por el generando sus propias instrucciones. “ProcessWare”: colección de módulos de software que proporcionan herramientas para los distintos procesos. Ejemplos: ArcWare (para soldadura de arco) y SpotWare (para soldadura por puntos). Programación “OFF-LINE” y transmisión de los programas al robot desde disquete o PC (vía puerto serie)
J.M. Vázquez
Pag.: 8
UVA - CARTIF
Manual Básico de Programación. Lenguaje RAPID
2. ELEMENTOS BÁSICOS DEL LENGUAJE 2.1 Identificadores Los identificadores sirven para nombrar módulos, rutinas, datos y etiquetas. ∗ El primer carácter de un identificador debe ser una letra. ∗ El resto de caracteres pueden ser letras, números o el carácter de subrayado “_”. ∗ La longitud máxima de cualquier identificador es de 16 caracteres. ∗ El tamaño de la letra (mayúscula o minúscula) no diferencia los identificadores. Hay una serie de palabras que no se pueden utilizar como identificadores: ∗ Palabras reservadas del lenguaje RAPID (ej.: AND, IF, MODULE, LOCAL, etc.) ∗ Nombres predefinidos para tipos de datos, datos del sistema, instrucciones y funciones.
2.2 Separadores El lenguaje RAPID es un lenguaje sin formatos, lo que significa que los espacios pueden utilizarse en cualquier parte excepto en : identificadores, palabras reservadas, valores numéricos y comodines. Los caracteres fin de línea, tabuladores y fin de página se pueden usar donde se pueda usar un espacio, excepto dentro de comentarios. Las instrucciones se separan entre sí mediante “ ; “. Los identificadores, palabras reservadas y valores numéricos deberán estar separados entre sí por un espacio, un carácter fin de línea o un tabulador. Los espacios innecesarios y los caracteres de fin de línea serán automáticamente borrados al cargar un programa en la memoria. Esto implica que un programa cargado desde un disquete (programa realizado OFF-LINE) y luego almacenado de nuevo, puede diferir del original.
2.3 Valores numéricos, lógicos y de cadena Un valor numérico (entero o coma flotante) deberá estar dentro de los límites especificados por el estándar ANSI de coma flotante simple precisión. Un valor lógico podrá expresarse como TRUE (verdadero) o FALSE (falso). Un valor de cadena es una secuencia de caracteres (ISO 8859-1) y de caracteres de control. Se pueden incluir códigos de caracteres (precedidos por \) y caracteres no imprimibles. Una cadena va siempre entre comillas “ “ . En el caso de tener que incluir dentro de una cadena los caracteres \ o “, se deben escribir dos veces. Ejemplo: “Esta cadena termina con el código de control BEL \07” “Esta cadena contiene un carácter “” comillas”
2.4 Comentarios Los comentarios se incluyen para facilitar la comprensión del programa y no afectan en modo alguno al funcionamiento del mismo. Un comentario empieza siempre con el símbolo ! y acaba con el carácter de fin de línea. Siempre ocupa una línea entera. Ejemplo: ... ! Esto es un comentario ...
2.5 Comodines Los comodines se utilizan para representar de forma temporal ciertas partes del programa que todavía no han sido definidas.
J. M. Vázquez
Pag.: 9
Manual Básico de Programación. Lenguaje RAPID
Comodín
<SMT>
<EIT>
<EXP>
UVA - CARTIF
Representa Una declaración de datos Una declaración de rutina Un parámetro alternativo opcional Un parámetro opcional Una definición de la dimensión de una matriz Una instrucción Una referencia (variable, persistente o parámetro) a un dato La cláusula ELSE de una instrucción IF La cláusula CASE de una instrucción TEST Una expresión Un argumento de llamada de procedimiento Un identificador
2.6 Encabezado de archivo Un archivo de programa empieza siempre con el siguiente encabezado: %%% VERSION: 1 LANGUAGE: ENGLISH %%%
Versión del sistema Idioma
2.7 Control del flujo del programa En algunos casos es necesario interrumpir la ejecución secuencial de las instrucciones del programa. El flujo del programa se puede controlar mediante: • Llamadas a rutinas − ProcCall: llamada (salto) a otra rutina. − CallByVar: llamada a un procedimiento con nombre específico. − RETURN: regreso a la rutina original. • Instrucciones de evaluación de condición: − CompactIF: ejecuta una instrucción sólo si se cumple una condición. − IF: ejecuta una parte de programa u otra según una condición. − WHILE: repite una parte del programa hasta que se cumpla una condición. − TEST: ejecuta diferentes partes de programa según el valor de una expresión. • Instrucciones de repetición de una secuencia: − FOR: repite una parte de programa un cierto número de veces. • Salto a una etiqueta dentro de una rutina: − GOTO: salta a una etiqueta. • Parada de la ejecución del programa: − STOP: detiene la ejecución del programa. − EXIT: para la ejecución de un programa cuando el rearranque de un programa no es permitido. − BREAK: para la ejecución de un programa temporalmente para el diagnóstico y solución de averías.
2.8 Instrucciones y argumentos Un programa robot está formado por una serie de instrucciones que describen el trabajo del mismo: instrucciones de movimiento, de entradas y salidas, de comunicación, etc. Las instrucciones contienen argumentos asociados que definen lo que va a producir la ejecución de la instrucción. Los argumentos se pueden especificar de alguna de las siguientes maneras: ∗ Valor numérico: 4, 1E4, 2.5, etc.
J.M. Vázquez
Pag.: 10
UVA - CARTIF
∗ ∗ ∗ ∗
Manual Básico de Programación. Lenguaje RAPID
Referencia a un dato: reg1 (num), posición3 (robtarget), etc. Expresión. ej.:5+reg1*2. Llamada a una función. ej.: Abs(reg1). Valor de cadena. ej.: “Número de piezas”.
J. M. Vázquez
Pag.: 11
Manual Básico de Programación. Lenguaje RAPID
UVA - CARTIF
3. MÓDULOS Y RUTINAS 3.1 Estructura de una Aplicación
MEMORIA DE PROGRAMA MÓDULO PRINCIPAL
MÓDULO 1
MÓDULO N
DATOS
DATOS
DATOS
RUTINA PRINCIPAL RUTINAS
RUTINAS
...
RUTINAS
PROGRAMA
MÓDULO de SISTEMA
MÓDULO de SISTEMA
...
MÓDULO de SISTEMA
Una Aplicación consta de un programa y una serie de módulos de sistema. A su vez el programa puede estar dividido en varios módulos.
3.2 Módulos Un módulo de programa está compuesto por DATOS y RUTINAS. Cada módulo puede ser cargado o salvado independientemente. Uno de los módulos del programa contendrá la rutina principal o MAIN, que es el punto de arranque del programa.
3.2.1 Declaración de los módulos Al declarar un módulo hay que especificar un nombre y unos atributos (los atributos sólo se pueden añadir OFF-LINE). Tipos de atributos: • • • • •
SYSMODULE: se trata de un módulo de sistema. NOSTEPIN: no permite la entrada en el módulo durante la ejecución paso a paso. VIEWONLY: el módulo no puede ser modificado. READONLY: el módulo no puede ser modificado pero sus atributos pueden ser eliminados. NOVIEW: no puede ser visualizado; sólo ejecutado. Un programa que contiene un módulo NOVIEW no puede ser salvado. NOVIEW se utiliza sobre todo para los módulos de sistema.
Ejemplo: MODULE modulo1 (SYSMODULE, NOVIEW) ! Declaraciones ! Instrucciones ENDMODULE
J.M. Vázquez
Módulo de sistema no visible
Pag.: 12
UVA - CARTIF
Manual Básico de Programación. Lenguaje RAPID
3.2.2 Módulos de Sistema Sirven para la definición de los datos y rutinas específicas del sistema, como por ejemplo las herramientas. No serán incluidos cuando se salva un programa, lo que significa que una modificación realizada en un módulo de sistema afectará a todos los programas. Los módulos de sistema residen siempre en memoria (se cargan durante el arranque en frío del sistema) y pueden ser utilizados siempre.
3.3 Rutinas Una rutina típica tiene la siguiente estructura:
DECLARACIONES DATOS
INSTRUCCIONES RUTINA de TRATAMIENTO de ERRORES
3.3.1 Tipos de rutinas Existen tres tipos de rutinas: • PROCEDIMIENTOS: rutinas que no devuelven ningún valor. • FUNCIONES: devuelven un valor de un tipo determinado. • RUTINAS DE TRATAMIENTO DE INTERRUPCIONES: para el tratamiento de las interrupciones. Nunca pueden ser llamadas explícitamente desde el programa.
3.3.2 Alcance de una rutina El alcance de una rutina hace referencia a desde dónde se puede acceder a dicha rutina. Desde este punto de vista hay dos tipos de rutinas: • LOCALES: sólo se puede acceder desde el módulo que la contiene. Se deben declarar añadiendo al principio la palabra reservada LOCAL. • GLOBALES: puede ser llamada desde cualquier módulo. Las rutinas son globales por defecto.
3.3.3 Declaración de una rutina • Declaración de un procedimiento: PROC nombre_proc ( ...argumentos... ) ... ENDPROC
El final de un procedimiento está indicado por ENDPROC, BACKWARD o ERROR, pero también se puede forzar con la instrucción RETURN. • Declaración de una función: FUNC tipo_devuelto nombre_func ( ...argumentos... ) ... RETURN(...); ... ENDFUNC
J. M. Vázquez
Pag.: 13
Manual Básico de Programación. Lenguaje RAPID
UVA - CARTIF
La evaluación de una función debe terminar con una instrucción RETURN. • Declaración de una rutina de tratamiento de interrupciones: TRAP nombre_rut_trat_int ... RETURN ... ENDTRAP
El final de una rutina de interrupción está indicado por ENDTRAP o ERROR, pero también se puede forzar con la instrucción RETURN.
3.3.4 Parámetros de una rutina Son los argumentos que se deben suministrar a dicha rutina cuando se la llama. Tipos de parámetros: • NORMALES: se utilizan como entradas a la rutina y son procesados como variables de la rutina. El cambio de esta variable en la rutina no cambia el valor del argumento. • INOUT: el argumento correspondiente debe ser una variable o un entero persistente y su valor puede ser cambiado por la rutina. • VAR: el argumento correspondiente debe ser una variable que puede ser cambiada por la rutina. • PERS: el argumento correspondiente debe ser un persistente entero que puede ser cambiado por la rutina. Un parámetro puede ser opcional. En ese caso se antepone un \ en la declaración. Si hay varios parámetros opcionales mutuamente excluyentes entre sí se deben separar por |. Ejemplo: PROC
rutina1
(num par_in, INOUT num par_inout, VAR num par_var, PERS num par_pers, num par_obligat, \num par_opcional, \num par_opc_1 | num par_opc_2)
El tipo especial switch sólo puede ser asignado a parámetros opcionales y proporciona una forma de utilizar argumentos especificados por los nombres y no por los valores. Ejemplo: PROC rutina2 (\switch on | \switch off) ... IF present(off) THEN ... ENDPROC
Las matrices también pueden utilizarse como argumento. La dimensión de la matriz será determinada por el parámetro. Ejemplo: PROC
J.M. Vázquez
rutina3
(VAR num matriz1{*,*})
Pag.: 14
UVA - CARTIF
Manual Básico de Programación. Lenguaje RAPID
4. DATOS 4.1 Introducción Existen 3 tipos de datos: • VARIABLES: se les puede asignar un nuevo valor durante la ejecución del programa. • PERSISTENTES: es una variable que tiene la particularidad de que su valor de inicialización se actualiza a medida que va cambiando. Cuando se guarda un programa, el valor de inicialización de cualquier declaración de persistente refleja el último valor que ha tomado el dato persistente. • CONSTANTES: representan un valor estático que no podrá cambiar. Siempre que se declara un dato es necesario asignarle un tipo de dato, excepto los datos predefinidos y las variables de bucle. No hay limitación en cuanto al número de datos que se pueden definir de cada tipo, excepto las limitaciones impuestas por la memoria del sistema.
4.2 Características de los datos 4.2.1 Alcance de los datos El alcance de un dato hace referencia a desde donde se puede acceder a dicho dato. Según dónde se declaren los datos, éstos pueden ser: • DATOS DE PROGRAMA: datos declarados fuera de una rutina. Estos datos a su vez pueden ser : ∗ LOCALES: sólo se pueden usar en el módulo que los contiene. Se deben declarar añadiendo al principio la palabra reservada LOCAL. ∗ GLOBALES: puede ser llamada desde cualquier módulo. Las rutinas son globales por defecto. • DATOS DE RUTINA: datos declarados dentro de una rutina. Sólo se pueden usar en la rutina en que se encuentran.
4.2.2 Declaración de los datos • Declaración de un dato variable: [LOCAL] VAR tipo_dato nombre_dato
Los datos de variable con tipo de valor podrán ser inicializados en la declaración: VAR num matriz{10}:=[1,2,3,4,5,6,7,8,9,0] VAR string nombre:=“JUAN”
• Declaración de un dato persistente: PERS num reg1:=0
Los datos persistentes sólo pueden declararse en el nivel de módulo (fuera de las rutinas) y deben tener obligatoriamente un valor inicial. Si un dato persistente es actualizado, se actualizará automáticamente su valor de inicialización. • Declaración de un dato constante: CONS num pi:= 3.1415
4.3 Tipos de datos Atendiendo a su descomposición, existen 2 grandes grupos de tipos de datos: • ATÓMICOS: datos cuya definición no está basada en otro tipo y que no puede ser dividido en partes ni componentes. Ej.: num. • REGISTRO: tipo de datos formado por componentes ordenados y nombrados. Ej.: pos. Atendiendo a su valor, hay dos grandes grupos de tipos de datos:
J. M. Vázquez
Pag.: 15
Manual Básico de Programación. Lenguaje RAPID
UVA - CARTIF
• CON VALOR: representan de alguna forma un valor. Pueden ser utilizados en operaciones que tratan con valores: inicialización, asignación, comparación , etc. • SIN VALOR: no representan un valor.
4.4 Lista de los diferentes tipos de datos bool clock confdata dionum errnum extt intnum iodev ttarget loaddata mecunit motsetdata num orient o_lointtarget o_robtarget pos pose progdisp robt robtarget signalai signalao signaldi signaldo signalgi signalgo speeddata string symnum tooldata triggdata tunetype wobjdata zonedata Datos del sistema
Valores lógicos Medida del tiempo Datos de configuración del robot Valores digitales (0,1) Número de error Posición de los ejes externos Identificación de una interrupción Canales y archivos de comunicación serie Datos de posición de los ejes Datos de carga Unidad mecánica Datos de movimiento Valores numéricos (registros) Orientación Dato de posición original de un eje Datos de posición original Posiciones (X,Y,Z) sin orientación Transformación de coordenadas Desplazamiento de programa Posición de los ejes del robot Datos de posición (completos) Señales de entrada analógicas Señales de salida analógicas Señales de entrada digitales Señales de salida digitales Grupo de señales de entrada digitales Grupo de señales de salida digitales Datos de velocidad Cadena de caracteres Número simbólico Datos de herramienta Eventos de posicionamiento (disparo) Tipo de ajuste servo Datos del objeto de trabajo Datos de zona de ajuste
4.5 Descripción de algunos de los tipos de datos más usuales 4.5.1 Pos Se usa para almacenar la posición del robot (Solo X,Y,Z) Componentes:
J.M. Vázquez
Pag.: 16
UVA - CARTIF
Manual Básico de Programación. Lenguaje RAPID
Coordenada X Coordenada Y Coordenada Z
x y z
num num num
Ejemplo: VAR pos posicion1:= [600,500,400];
4.5.2 Orient El tipo de datos Orient se utiliza para almacenar la orientación de un sistema de coordenadas. Componentes: Cuaternio 1 Cuaternio 2 Cuaternio 3 Cuaternio 4
q1 q2 q3 q4
num num num num
La orientación de un sistema de coordenadas respecto a uno de referencia se puede describir mediante una matriz de rotación. Esta matriz tendrá por columnas los vectores normalizados que representan las direcciones de los ejes X, Y y Z respecto al sistema de coordenadas de referencia. Necesitamos, por tanto, 9 valores para representar una orientación.
x = ( x1, x 2, x 3) y = ( y1, y 2, y 3) z = ( z1, z 2, z 3)
x1 y1 z1 x 2 y 2 z2 x 3 y 3 z 3
Mediante los cuaternios podemos representar la orientación con sólo 4 valores. Los cuaternios se calculan en función de los componentes de la matriz de rotación de la siguiente forma:
x1 + y 2 + z 3 + 1 2 x1 − y 2 − z 3 + 1 q2 = sign q 2 = sign( y 3 − z 2) 2 y 2 − x1 − z 3 + 1 sign q 3 = sign( z1 − x 3) q3 = 2 z 3 − x1 − y 2 + 1 q4 = sign q 4 = sign( x 2 − y1) 2 q1 =
Siempre se cumple que
q12 + q 2 2 + q 32 + q 4 = 1
Ejemplo: VAR orient orient1:= [1,0,0,0];
Orientación del sistema de coordenadas de la muñeca
4.5.3 Pose Se usa para definir un sistema de coordenadas respecto a otro, por ejemplo, el sistema de coordenadas de la herramienta respecto al sistema de la muñeca Componentes: trans rot
Desplazamiento (x,y,z) del sistema de coordenadas Rotación del sistema de coordenadas
pos orient
Ejemplo: VAR pose pose1:= [[50,0,40], [1,0,0,0] ];
J. M. Vázquez
Pag.: 17
Manual Básico de Programación. Lenguaje RAPID
UVA - CARTIF
4.5.4 Confdata Sirve para definir las configuraciones de los ejes del robot. A veces el robot es capaz de alcanzar la misma posición y orientación de la herramienta mediante varias configuraciones de ejes diferentes. Para evitar esta ambigüedad se utilizará este tipo de dato. Componentes: Indica el cuadrante en el que se encuentra el eje 1 (entre -4 y +3) Indica el cuadrante en el que se encuentra el eje 4 (entre -4 y +3) Indica el cuadrante en el que se encuentra el eje 6 (entre -4 y +3) No se utiliza de momento
cf1 cf4 cf6 cfx
num num num num
El cuadrante 0 corresponde a un ángulo entre 0º y 90º, el 1 entre 90º y 180º, el -1 entre 0º y -90º, y así sucesivamente. Ejemplo: VAR confdata config1:= [1,-1,0,0];
4.5.5 Loaddata Sirve para definir las cargas instaladas en la brida de montaje del robot. Las cargas definidas sirven para determinar un modelo de dinámica del robot, de forma que los movimientos puedan ser controlados de la mejor forma posible. NOTA: la carga útil que manipula la pinza del robot es de tipo Loaddata. La carga de la propia herramienta es también de este tipo pero está definida dentro de la herramienta. Si la carga declarada es mayor que la real, el robot no será utilizado a su capacidad máxima, la precisión será incorrecta y habrá riesgo de vibraciones. Si la carga declarada es menor que la instalada, la precisión será incorrecta y habrá también riesgo de vibraciones. Componentes: mass cog aom ix iy iz
El peso de la carga en Kg. num El centro de gravedad de la carga (x,y,z) en mm pos La orientación de los ejes del momento de la carga en el centro de orient gravedad. El momento de inercia de la carga alrededor del eje X en Kgm2 num 2 El momento de inercia de la carga alrededor del eje Y en Kgm num 2 El momento de inercia de la carga alrededor del eje Z en Kgm num
La orientación de los ejes de momento y de los momentos de inercia, normalmente no necesitan ser definidos. Si ix, iy e iz son 0 kgm2, se considera una carga puntual. Normalmente, sólo se definirá el momento de inercia cuando la distancia entre la brida de montaje y el centro de gravedad sea menor que la dimensión de la carga. La carga útil debe ser definida sólo como persistente y no dentro de una rutina. La carga load0 define una carga útil de un peso de 0 kg. Siempre se puede acceder a la carga load0 desde el programa, pero no se puede cambiar (se almacena en el módulo de sistema BASE). PERS loaddata load0:= [0, [0,0,0], [1,0,0,0],0,0,0];
Ejemplo: PERS loaddata pieza1:= [5, [50,0,50], [1,0,0,0],0,0,0]; Set pinza; WaitTime 0.3; GripLoad pieza1; La conexión de la carga útil pieza1 se especifica en el momento en que el robot coge la pieza1 Reset pinza; WaitTime 0.3; GripLoad load0; La desconexión de la carga útil pieza1 se especifica en el momento en que el robot deja la pieza1
J.M. Vázquez
Pag.: 18
UVA - CARTIF
Manual Básico de Programación. Lenguaje RAPID
4.5.6 Speeddata Sirve para especificar la velocidad del robot: T, reorientación de la herramienta y de los ejes externos. Cuando se combinan diferentes tipos de movimientos hay una velocidad que limita todos los movimientos. La velocidad del resto de movimientos será reducida para que los movimientos acaben su ejecución al mismo tiempo. La velocidad también será restringida por la capacidad del robot. Componentes: Velocidad del T en mm/s Velocidad de la reorientación de la herramienta en grados/segundo Velocidad de los ejes externos lineales en mm/s Velocidad de los ejes externos rotativos en mm/s
v_t v_ori v_leax v_reax
num num num num
Hay una serie de datos de velocidad ya definidos en el módulo de sistema BASE: v5, v10, v20, ..., v3000 y vmax. Ejemplo: VAR speeddata vel_alta:= [2000,30,200,15];
4.5.7 Zonedata Una posición puede terminarse en un punto de paro o en un punto de paso. Un punto de paro significa que el robot debe alcanzar la posición programada. En un punto de paso, el robot nunca alcanza la posición programada sino que comenzará o moverse hacia el siguiente punto cuando entre en la “zona” que se haya definido. Para cada posición se pueden definir 2 zonas distintas: ∗ Zona de la trayectoria del T ∗ Zona extendida de reorientación de la herramienta y ejes externos. El tamaño de la zona nunca podrá ser mayor que la mitad de la distancia a la posición anterior o siguiente más cercana. Si se especifica una zona mayor, el robot la reducirá automáticamente. Zona extendida (reorientación y ejes externos)
Inicio del cambio de reorientación
Zona del T
Punto Programa
Inicio del cambio de trayectoria del T
Componentes: finep pzone_t pzone_ori pzone_eax zone_ori zone_leax zone_reax
TRUE: el movimiento termina en un punto de paro FALSE: el movimiento termina en un punto de paso Radio de la zona del T en mm Radio de la zona de reorientación de la herramienta en mm (debe ser mayor que pzonet) Radio de la zona de los ejes externos (debe ser mayor que pzonet) Tamaño de la zona de reorientación de herramienta en grados Tamaño de zona de los ejes externos lineales en mm Tamaño de la zona de los ejes externos rotativos en grados
bool num num num num num num
Hay una serie de datos de zona ya definidos en el módulo de sistema BASE: z1, z5, z10, z15, ..., z200 y fine (punto de paro).
J. M. Vázquez
Pag.: 19
Manual Básico de Programación. Lenguaje RAPID
UVA - CARTIF
Ejemplo: VAR zonedata zona1:= [FALSE,25,40,40,10,35,5];
4.5.8 Extt Se utiliza para almacenar la posición de los ejes externos. Los 6 ejes externos que puede controlar el robot se denominan a,b,c,d,e y f. Cada uno de estos ejes lógicos podrá ser conectado a una eje físico mediante un parámetro de sistema. En el caso de que un eje lógico no esté conectado a un eje físico, se indicará 9E9 como valor de posición. Para los ejes rotativos, la posición será definida como la rotación en grados a partir de la posición de calibración. Para los ejes lineales, la posición será definida como la distancia en mm a partir de la posición de calibración. Componentes: eax_a eax_b eax_c eax_d eax_e eax_f
Posición del eje externo a (en grados o mm según el tipo de eje) Posición del eje externo b (en grados o mm según el tipo de eje) Posición del eje externo c (en grados o mm según el tipo de eje) Posición del eje externo d (en grados o mm según el tipo de eje) Posición del eje externo e (en grados o mm según el tipo de eje) Posición del eje externo f (en grados o mm según el tipo de eje)
num num num num num num
Ejemplo: VAR extt pos_ejes_ext1:= [11,25.2,9E9,9E9,9E9,9E9];
4.5.9 Robtarget Sirve para definir la posición del robot y los ejes externos. Dado que el robot es capaz de alcanzar una misma posición de varias formas diferentes, se deberá especificar la configuración de los ejes. Componentes: trans rot robconf extax
Posición XYZ del T en mm respecto al sistema de coordenadas pos objeto incluyendo desplazamiento si lo hay. Orientación de la herramienta expresada en cuaternios orient Configuración de los ejes del robot (cf1, cf4, cf6 y cfx) confdata Posición de los ejes externos extt
Ejemplo: CONST robtarget punto1:= [[600,500,400], [1,0,0,0], [1,1,0,0], [15,20.3,9E9,9E9,9E9,9E9];
4.5.10 Tooldata Se utiliza para describir las características de una herramienta: T, carga, etc. Los datos de herramienta deberán ser definidos únicamente como persistentes y no deberán ser definidos dentro de una rutina. Componentes: robhold tframe tload
TRUE: el robot está sujetando la herramienta. bool FALSE: se trata de una herramienta estacionaria. Sistema de coordenadas de la herramienta: posición del T y pose orientación. Define la carga de la herramienta loaddata
La herramienta tool0 define el sistema de coordenadas de la muñeca. Los datos de tool0 no pueden ser cambiados (están almacenados en el módulo de sistema BASE). PERS tooldata tool0:= [TRUE,[ [0,0,0], [1,0,0,0] ], [0,[0,0,0], [1,0,0,0],0,0,0] ];
Ejemplo:
J.M. Vázquez
Pag.: 20
UVA - CARTIF
Manual Básico de Programación. Lenguaje RAPID
PERS tooldata herram1:= [TRUE,[ [58,26.3,0], [0.924,0,0.383,0] ], [5,[23,0,75], [1,0,0,0],0,0,0] ];
4.5.11 Wobjdata Se utiliza para definir el objeto de trabajo del robot. Si se utiliza una herramienta estacionaria o ejes externos coordinados se deberá definir el objeto de trabajo, ya que la trayectoria y la velocidad se referirán al objeto de trabajo y no al T. Componentes: robhold ufprog
ufmec uframe oframe
TRUE: el robot está sujetando el objeto de trabajo. FALSE: el robot está sujetando la herramienta. TRUE: sistema de coordenadas fijo del . FALSE: sistema de coordenadas móvil de (ejes externos coordinados) La unidad mecánica con la que los movimientos del robot están coordinados. Sistemas de coordenadas del Sistema de coordenadas del objeto
bool bool
string pose pose
Los datos de objeto deberán ser definidos únicamente como persistentes y no deberán ser definidos dentro de una rutina. El objeto wobj0 coincide con el sistema de coordenadas mundo. Los datos de wobj0 no pueden ser cambiados (están almacenados en el módulo de sistema BASE). PERS wobjdata wobj0:= [FALSE,TRUE,””,[ [0,0,0], [1,0,0,0] ], [[0,0,0], [1,0,0,0]]];
Ejemplo: PERS wobjdata objeto1:= [FALSE,TRUE,””,[ [300,600,200], [1,0,0,0] ], [[0,200,30], [1,0,0,0]]];
NOTA: para más información sobre el resto de tipos de datos, consultar el capítulo “Tipos de datos” de la GUIA DE REFERENCIA RAPID.
J. M. Vázquez
Pag.: 21
Manual Básico de Programación. Lenguaje RAPID
UVA - CARTIF
5. MOVIMIENTOS 5.1 Características de movimiento Las características básicas del movimiento del robot están especificadas en los argumentos de las instrucciones de movimiento. Sin embargo hay algunas que se especifican en instrucciones separadas y se aplican a todos los movimientos hasta que estas cambian. Las características generales de movimiento del robot están especificadas mediante una serie de instrucciones, pero también pueden leerse mediante las variables de sistema C_MOTSET (características de movimiento excepto desplazamientos de programa) y C_PROGDISP (desplazamiento de programa). Los valores por defecto de estas características quedan activados automáticamente (mediante la ejecución de la rutina SYS_RESET del módulo de sistema BASE) al arrancar el programa, cargar un programa nuevo o arrancar un programa desde el principio. Veamos a continuación estas características:
5.1.1 Definición de la velocidad Además de la velocidad absoluta especificada en cada instrucción se puede definir una velocidad máxima y un ajuste de velocidad con la instrucción VelSet.
VelSet ajuste Max Sirve para definir la velocidad máxima y el ajuste de velocidad. Es la velocidad deseada expresada en un % de la velocidad programada. num Valor por defecto = 100% Velocidad máxima del T en mm/s. num Valor por defecto = 5000 mm/s.
ajuste Max Ejemplo:
VelSet 200, 1000
Todas las velocidades programadas se duplican pero sin pasar nunca de 1000.
5.1.2 Definición de la aceleración Cuando se manipulan piezas frágiles, por ejemplo, se puede reducir la aceleración en una parte del programa, para que los movimientos del robot sean más suaves.
AccSet Acc Rampa Sirve para ajustar la aceleración del robot. Limita la aceleración, mediante un porcentaje de la aceleración máxima. num Valor máximo =100%. Un valor <20% se toma como 20%. Limita la rampa de aceleración, mediante un porcentaje del valor normal. num Valor máximo=100%. Un valor <10% se toma como 10%.
Acc Rampa Ejemplo:
AccSet 30, 50
La aceleración se limita al 30% de la máxima y la rampa al 50%.
5.1.3 Definición de la gestión de la configuración Las instrucciones ConfJ y ConfL permiten gestionar el control de la configuración de los ejes durante un movimiento eje a eje o lineal respectivamente. Hay que tener en cuenta que a veces es posible alcanzar la misma posición y orientación con diferentes configuraciones de ejes.
ConfJ [\On] | [\Off] Activa o desactiva el control de la configuración de los ejes en los movimientos de tipo MOVEJ.
J.M. Vázquez
Pag.: 22
UVA - CARTIF
Manual Básico de Programación. Lenguaje RAPID
El robot siempre se mueve a la configuración de ejes programada. Si ello no switch es posible la ejecución del programa se detiene. Opción activa por defecto. En el caso en que la posición y orientación programadas se pueda alcanzar switch de varias maneras diferentes, con distintas configuraciones de ejes, el sistema escogerá la más cercana posible.
[\On] [\Off]
ConfL [\On] | [\Off] Activa o desactiva el control de la configuración de los ejes en los movimientos de tipo MOVEL o MOVEC. El robot siempre se mueve a la configuración de ejes programada. Si ello no switch es posible la ejecución del programa se detiene. Opción activa por defecto. En el caso en que la posición y orientación programadas se pueda alcanzar switch de varias maneras diferentes, con distintas configuraciones de ejes, el sistema escogerá la más cercana posible.
[\On] [\Off]
5.1.4 Definición de la carga útil Se deberá definir la carga útil correcta del robot para optimizar el funcionamiento del mismo.
GripLoad carga Define la carga útil que el robot sujeta con su pinza. Carga útil utilizada. Por defecto es load0 (de 0 Kg).
carga
loaddata
5.1.5 Definición del comportamiento del robot cerca de un punto singular Se puede programar el robot para que evite los puntos singulares cambiando la orientación de la herramienta automáticamente.
SingArea [\Wrist] | [\Arm] | [\Off] Define cómo el robot debe moverse en la proximidad de los puntos singulares. Se tolera una pequeña diferencia en la orientación de la herramienta a fin de switch evitar la singularidad de la muñeca. Se usa cuando los ejes 4 y 6 están alineados. Se tolera una pequeña diferencia en la orientación de la herramienta a fin de switch evitar la singularidad del brazo. Se usa cuando el centro de la muñeca coincide con la extensión del eje 1. No se permite cambiar la orientación en los puntos singulares. Argumento switch por defecto.
[\Wrist]
[\Arm]
[\Off]
5.1.6 Desplazamiento de un programa Permite desplazar todos los puntos de un programa en una dirección determinada. Se utilizará cuando se repitan estructuras de movimientos en diferentes lugares del programa. Un desplazamiento de programa consiste en una traslación y una rotación respecto al sistema de coordenadas objeto.
PDispSet BaseDesp Define y activa un desplazamiento de programa utilizando valores. BaseDesp Ejemplo:
Dato que define el desplazamiento.
pose
VAR pose desp1:= [[100,-50,0],[1,0,0,0]]; PDispSet desp1;
El sistema de coordenadas de desplazamiento de programa será desplazado 100 mm del sistema de coordenadas objeto en la dirección positiva del eje X y 50 en la negativa del eje y. La orientación no cambia. Otras instrucciones relacionadas: J. M. Vázquez
Pag.: 23
Manual Básico de Programación. Lenguaje RAPID
PDispOn PDispOff EOffsOn EOffsSet EOffsOff
UVA - CARTIF
Activa el desplazamiento de programa Desactiva el desplazamiento de programa Activar un offset de un eje externo Activar un offset de un eje externo especificando un valor Desactivar un offset de un eje externo
Funciones relacionadas: DefDFrame DefFrame ORobT
Calcula un desplazamiento de programa a partir de 3 posiciones Calcula un desplazamiento de programa a partir de 6 posiciones Elimina un desplazamiento de programa a partir de 1 posición
5.1.7 Servo suave Esta función puede aplicarse a uno o varios ejes del robot, proporcionándole una gran flexibilidad.
SoftAct Eje Suavidad [\Rampa] Activa el “servo suave” en cualquiera de los ejes del robot. Eje Suavidad
[\Rampa]
Eje del robot (1 a 6). num Valor de suavidad en porcentaje (0-100%)En el caso en que la posición y num orientación programadas se pueda alcanzar de varias maneras diferentes, con distintas configuraciones de ejes, el sistema escogerá la más cercana posible. Factor de rampa en % (>100%). Cuanto más elevado sea el valor, el servo num funcionará más lentamente. (rampa más larga)
SoftDeact Desactiva el “servo suave” en todos los ejes del robot.
5.1.8 Valores de ajuste del robot En el caso de desajuste del robot, se podrán ajustar determinados valores para conseguir siempre el máximo rendimiento del robot.
TuneServo Unidec Eje Valorajuste [\Tipo] Ajusta el comportamiento dinámico de los ejes del robot. Unidec Eje Valorajuste [\Tipo]
Unidad mecánica (ej.: IRB) del robot (1 a 6). Número de eje (1 a 6) Valor de ajuste en % (1 a 200%). 100 es el valor normal. Tipo de ajuste servo: TUNE_DF, TUNE_KP, TUNE_KV y TUNE_TI.
mecunit num num tunetype
TuneReset Reinicializa el comportamiento dinámico del todos los ejes del robot a sus valores normales.
J.M. Vázquez
Pag.: 24
UVA - CARTIF
Manual Básico de Programación. Lenguaje RAPID
5.2 Instrucciones de posicionamiento más usuales MoveJ [\Conc] Alpunto Velocidad [\V] [\T] Zona [\Z] Herramienta [\WObj] Sirve para mover rápidamente el robot de un punto a otro punto cuando este movimiento no tiene que realizarse necesariamente en línea recta. Todos los ejes se mueven a una velocidad constante y alcanzan su posición final a la vez. La herramienta será orientada y los ejes externos se moverán, al mismo tiempo que se mueve el T. En el caso en que la reorientación o los ejes externos no puedan alcanzar la velocidad programada, la velocidad de T será reducida. [\Conc] Alpunto Velocidad [\V] [\T] Zona [\Z] Herramienta [\WObj]
Con esta opción, las instrucciones lógicas siguientes se ejecutarán mientras el robot está en movimiento. Acorta tiempo de ciclo. Coordenadas y orientación del punto destino. Velocidad del T, reorientación de la herramienta y ejes externos. Sirve para especificar la velocidad del T en mm/s directamente en la instrucción. Sirve para especificar el tiempo total del movimiento en segundos. Tamaño de la “zona cero” del movimiento. Sirve para especificar el tamaño en mm. de la “zona cero” directamente en la instrucción Es la herramienta activa durante el movimiento. El T de la misma es el punto que se mueve. Es el objeto de trabajo (sistema de coordenadas) al que se refiere la posición del robot en la instrucción. Si se omite este argumento, se refiere al sistema de coordenadas mundo.
switch robtarget speeddata num num zonedata num tooldata wobjdata
Ejemplo: MoveJ punto1, v200, z40, pinza3;
MoveL [\Conc] Alpunto Velocidad [\V] [\T] Zona [\Z] Herramienta [\WObj] Sirve para mover el T de la herramienta de forma lineal al punto destino. La herramienta es orientada a intervalos iguales sobre la trayectoria y los ejes externos (no coordinados) se moverán a un a velocidad constante para que puedan llegar al punto de destino al mismo tiempo que los ejes del robot. En el caso en que la reorientación o los ejes externos no puedan alcanzar la velocidad programada, la velocidad de T será reducida. [\Conc] Alpunto Velocidad [\V] [\T] Zona [\Z] Herramienta [\WObj]
Con esta opción, las instrucciones lógicas siguientes se ejecutarán mientras el robot está en movimiento. Acorta tiempo de ciclo. Coordenadas y orientación del punto destino. Velocidad del T, reorientación de la herramienta y ejes externos. Sirve para especificar la velocidad del T en mm/s directamente en la instrucción. Sirve para especificar el tiempo total del movimiento en segundos. Tamaño de la “zona cero” del movimiento. Sirve para especificar el tamaño en mm. de la “zona cero” directamente en la instrucción Es la herramienta activa durante el movimiento. El T de la misma es el punto que se mueve. Es el objeto de trabajo (sistema de coordenadas) al que se refiere la posición del robot en la instrucción. Si se omite este argumento, se refiere al sistema de coordenadas mundo.
switch robtarget speeddata num num zonedata num tooldata wobjdata
Ejemplo: MoveL punto1, v200, z40, pinza3;
J. M. Vázquez
Pag.: 25
Manual Básico de Programación. Lenguaje RAPID
UVA - CARTIF
MoveC [\Conc] PuntoCirculo Alpunto Velocidad [\V] [\T] Zona [\Z] Herramienta [\WObj] Sirve para mover el T de la herramienta de forma circular. La herramienta es reorientada a velocidad constante desde la orientación de la posición de arranque hasta la del punto destino. La reorientación se lleva a cabo respecto a la trayectoria circular. En el caso en que la reorientación o los ejes externos no puedan alcanzar la velocidad programada, la velocidad de T será reducida. Con esta opción, las instrucciones lógicas siguientes se ejecutarán mientras el robot está en movimiento. Acorta tiempo de ciclo. PuntoCirculo Es la posición en el círculo entre el punto de arranque y de destino. No debe estar situado demasiado cerca del punto de arranque o destino. Coordenadas y orientación del punto destino. Alpunto Velocidad del T, reorientación de la herramienta y ejes externos. Velocidad Sirve para especificar la velocidad del T en mm/s directamente en la [\V] instrucción. Sirve para especificar el tiempo total del movimiento en segundos. [\T] Tamaño de la “zona cero” del movimiento. Zona Sirve para especificar el tamaño en mm. de la “zona cero” directamente en [\Z] la instrucción Herramienta Es la herramienta activa durante el movimiento. El T de la misma es el punto que se mueve. Es el objeto de trabajo (sistema de coordenadas) al que se refiere la [\WObj] posición del robot en la instrucción. Si se omite este argumento, se refiere al sistema de coordenadas mundo. Ejemplo: [\Conc]
switch robtarget robtarget speeddata num num zonedata num tooldata wobjdata
MoveC punto2,punto3, v200, z40, pinza3;
MoveAbsJ [\Conc] APosEje Velocidad [\V] [\T] Zona [\Z] Herramienta [\WObj] Sirve para mover el T de la herramienta a una posición absoluta. Se debe utilizar esta instrucción sólo en los siguientes casos: cuando el punto final es un punto singular o para posiciones ambiguas en el 6400C. [\Conc] APosEje Velocidad [\V] [\T] Zona [\Z] Herramienta [\WObj]
Con esta opción, las instrucciones lógicas siguientes se ejecutarán mientras el robot está en movimiento. Acorta tiempo de ciclo. Posición absoluta de destino del robot y de los ejes externos. Velocidad del T, reorientación de la herramienta y ejes externos. Sirve para especificar la velocidad del T en mm/s directamente en la instrucción. Sirve para especificar el tiempo total del movimiento en segundos. Tamaño de la “zona cero” del movimiento. Sirve para especificar el tamaño en mm. de la “zona cero” directamente en la instrucción Es la herramienta activa durante el movimiento. El T de la misma es el punto que se mueve. Es el objeto de trabajo (sistema de coordenadas) al que se refiere la posición del robot en la instrucción. Si se omite este argumento, se refiere al sistema de coordenadas mundo.
switch ttarget speeddata num num zonedata num tooldata wobjdata
Ejemplo: MoveAbsJ punto2, v200, z40, pinza3;
J.M. Vázquez
Pag.: 26
UVA - CARTIF
Manual Básico de Programación. Lenguaje RAPID
5.3 Otras instrucciones y funciones relacionadas Instrucciones de búsqueda: SearchC SearchL
Búsqueda a lo largo de una trayectoria circular Búsqueda a lo largo de una trayectoria lineal
Activación de salidas o interrupciones específicas: TriggIO TriggInt TriggEquip
TriggC TriggJ TriggL
Define una condición de disparo para la activación de una salida en una posición determinada. Define una condición de disparo para la ejecución de una rutina de tratamiento de interrupciones en una posición determinada Define una condición de disparo para la activación de una salida en una posición específica con la posibilidad de incluir una compensación de tiempo por el retraso en el equipo externo. Hacer funcionar el robot de forma circular con una condición de disparo activada Hacer funcionar el robot eje a eje con una condición de disparo activada Hacer funcionar el robot de forma lineal con una condición de disparo activada
Control del movimiento en caso de error o interrupción: StopMove StartMove StorePath RestoPath
Parar los movimientos del robot Rearrancar los movimientos del robot Almacenar la última trayectoria generada Volver a generar una trayectoria almacenada con anterioridad
Control de los ejes externos: DeactUnit ActUnit
Desactivar una unidad mecánica externa Activar una unidad mecánica externa
Ejes independientes: IndAMove IndCMove IndDMove IndRMove IndReset IndInpos IndSpeed
Cambiar un eje a modo independiente y mover el eje a una posición absoluta Cambiar un eje a modo independiente y arrancar un movimiento continuo del eje Cambiar un eje a modo independiente y mover el eje una distancia delta Cambiar un eje a modo independiente y mover el eje a una posición relativa Cambiar un eje a modo dependiente y/o reinicializar el área de trabajo Comprobar si un eje independiente está en su posición Comprobar si un eje independiente ha alcanzado la velocidad programada.
Funciones de posición Offs RelTool os CRobT CtT Reotor CTool CWObj ORobT MirPos
J. M. Vázquez
Añadir un offset a una posición del robot, expresado respecto al objeto de trabajo Añadir un offset, expresado en el sistema de coordenadas de la herramienta Lee la posición del robot (sólo X,Y,Z) Lee la posición del robot (el robtarget completo) Lee los ángulos de los ejes Lee los ángulos del motor Lee los datos de la herramienta Lee los datos del objeto de trabajo Eliminar un desplazamiento de programa Realizar una copia espejo de una posición
Pag.: 27
Manual Básico de Programación. Lenguaje RAPID
UVA - CARTIF
6. ENTRADAS Y SALIDAS El robot está equipado con una serie de cartas de entradas y salidas. Los nombres de las señales de estas cartas se declaran en los parámetros de configuración del sistema, y mediante estos nombres se pueden utilizan estas señales en el programa. El valor de una señal analógica o un grupo de señales digitales está especificado como un valor numérico.
6.1 Instrucciones de E/S más usuales 6.1.1 Set Set sal_dig Sirve para activar (poner a 1) una salida digital. sal_dig Ejemplo:
El nombre de la señal a activar
signaldo
Set do12
6.1.2 Reset Reset sal_dig Sirve para desactivar (poner a 0) una salida digital. sal_dig Ejemplo:
El nombre de la señal a desactivar
signaldo
Reset do12
6.1.3 SetAO SetAO sal_analog valor Sirve para cambiar el valor de una salida analógica. sal_analog valor
El nombre de la salida analógica a cambiar El valor deseado de la señal
signalao num
6.1.4 SetDO SetDO [\Sdelay] sal_dig valor Sirve para cambiar el valor de una salida digital con posible retraso. [\Sdelay]
sal_dig valor Ejemplo: SetDO
Retrasa el cambio los segundos especificados (de 0.1 a 32 segundos con num una resolución de 0.01 seg.). El programa continúa con la instrucción siguiente. El nombre de la salida digital a cambiar signaldo El valor deseado de la señal (0,1) dionum \Sdelay:=0.2 , do15 , 1
La salida digital 15 pasara a 1 al cabo de 0.2 segundos.
6.1.5 SetGO SetGO grup_sal valor Sirve para cambiar el valor de un grupo de salidas digitales. grup_sal valor
J.M. Vázquez
El nombre del grupo de salidas digitales que se desea cambiar signalgo El valor deseado de la señal (entero positivo): Depende del número de num
Pag.: 28
UVA - CARTIF
Manual Básico de Programación. Lenguaje RAPID
señales que formen el grupo: de 0 a 2numero señales grupo - 1 Ejemplo: SetGO
grupo_1 , 12
6.1.6 WaitDI WaitDI ent_dig valor [\MaxTime] [\TimeFlag] Espera hasta que se active una señal de entrada digital. ent_dig valor [\MaxTime]
[\TimeFlag]
Nombre de la señal El valor deseado de la señal (0,1) Es el intervalo de tiempo de espera máximo en seg. Si transcurrido ese tiempo la condición no se ha cumplido, se genera el error ERR_WAIT_MAXTIME. Es el parámetro de salida que contiene el valor TRUE cuando el tiempo de espera máximo permitido ha transcurrido sin que se haya cumplido la condición. En este caso no se produce error.
signaldi dionum num
bool
Ejemplo: WaitDI
di12 , 1
El programa espera hasta que la entrada digital 12 pase a valer 1.
6.1.7 WaitDO WaitDO sal_dig valor [\MaxTime] [\TimeFlag] Espera hasta que se active una señal de salida digital. sal_dig valor [\MaxTime]
[\TimeFlag]
Nombre de la señal El valor deseado de la señal (0,1) Es el intervalo de tiempo de espera máximo en seg. Si transcurrido ese tiempo la condición no se ha cumplido, se genera el error ERR_WAIT_MAXTIME. Es el parámetro de salida que contiene el valor TRUE cuando el tiempo de espera máximo permitido ha transcurrido sin que se haya cumplido la condición. En este caso no se produce error.
signaldo dionum num
bool
Ejemplo: WaitDO
do12 , 0
El programa espera hasta que la salida digital 12 pase a valer 0.
6.2 Otras instrucciones y funciones relacionadas Instrucciones: InvertDO PulseDO Doutput Goutput
Invierte el valor de una salida digital Genera un pulso en una señal de salida digital Para leer el valor de una salida digital Para leer el valor de un grupo de salidas digitales
Funciones: TestDI
J. M. Vázquez
Comprueba si se ha activado una entrada digital
Pag.: 29
Manual Básico de Programación. Lenguaje RAPID
UVA - CARTIF
7. DIALOGO CON EL OPERADOR Existen cuatro formas distintas de comunicar a través de los canales serie: • Mostrar mensajes que se pueden en el visualizador del pupitre y que pueden solicitar una respuesta del . • Leer o escribir en la memoria másica del sistema (archivos de texto). • Transferir información binaria entre el robot y un sensor, por ejemplo. • Transferir información binaria entre el robot y otro computador, por ejemplo un protocolo de enlace. Si se requiere una comunicación en ambos sentidos de forma simultánea, se necesitará un tipo de transmisión binaria. Cada canal serie o archivo deberá en primer lugar ser abierto. Al hacerlo, recibirá un nombre que se utilizará posteriormente como referencia en el momento de leer o escribir. La unidad de programación está siempre abierta y se puede utilizar en cualquier momento.
7.1 Instrucciones de comunicación más usuales 7.1.1 TPWrite TPWrite texto [\Num] | [\Bool] | [\Pos] | [\Orient] Escribe un texto en el visualizador del pupitre móvil. Cadena de texto de menos de 80 caracteres string texto Dato numérico a añadir a la cadena num [\Num] Dato lógico a añadir a la cadena bool [\Bool] Dato de posición del robot a añadir a la cadena pos [\Pos] Dato de orientación del robot a añadir a la cadena orient [\Orient] El texto empieza siempre en una línea nueva del visualizador. Cuando éste se llena, el texto se mueve hacia arriba. Ejemplo: TPWrite “El Nº de piezas producidas es “ \NUM:= num_piezas
7.1.2 TPReadFK TPReadFK contestación texto FK1 FK2 FK3 KF4 FK5 [\MaxTime] [\DIBreak] [\BreakFlag] Escribe una etiqueta sobre cada tecla de función y lee qué tecla ha sido pulsada. Variable que contendrá 1,2,3,4 o 5 según la tecla pulsada num Texto informativo que aparecerá en el visualizador string Texto que aparece sobre las teclas de función. Máximo 7 caracteres string Intervalo máximo de tiempo (en seg) que la ejecución del programa espera. num Si no se pulsa ninguna tecla en ese tiempo se genera el error ERR_TP_MAXTIME Entrada digital que podría interrumpir el diálogo. Si no se pulsa ninguna signaldi [\DIBreak] tecla antes de que esta señal pase a 1 se genera el error ERR_TP_DIBREAK [\BreakFlag] Variable de salida que contiene el código de error si se utiliza MaxTime o errnum DIBreak. Si esta variable está presente no se produce el error. El texto empieza siempre en una línea nueva del visualizador. Cuando éste se llena el texto se mueve hacia arriba. Las teclas de función que no tengan indicador serán desactivadas. Ejemplo: contestación texto FKx [\MaxTime]
VAR errnum error;
J.M. Vázquez
Pag.: 30
UVA - CARTIF
Manual Básico de Programación. Lenguaje RAPID
... TPReadFK reg1 “¿Ir a la posición de REPLIEGUE?”, “”, “”, “”, “Si”, “No” \Maxtime:=600 \DIBreak:=di5 \BreakFlag:=error; IF reg1=4 or error=ERR_TP_DIBREAK THEN MoveL repli, v500, fine, tool1; Stop; ENDIF IF error=ERR_TP_MAXTIME EXIT
El robot se mueve a la posición repli si se pulsa la tecla “Si” o si se activa la entrada 5. Si no hay respuesta en 10 minutos, la ejecución termina.
7.2 Otras instrucciones y funciones relacionadas Instrucciones: TPErase ErrWrite TPReadNum Open Write Close WriteBin
Borra la información del visualizador de la unidad de programación Escribe un texto en el visualizador y lo almacena en el registro de errores Lee un valor numérico de la unidad de programación Abrir un canal o archivo para lectura o escritura Escribir texto en un canal o archivo Cerrar un canal o archivo Escribir en un canal serie binario
Funciones: ReadNum ReadStr ReadBin
J. M. Vázquez
Lee un valor numérico de un canal o archivo Lee una cadena de texto de un canal o archivo Lee desde un canal serie binario.
Pag.: 31
Manual Básico de Programación. Lenguaje RAPID
UVA - CARTIF
8. INSTRUCCIONES VARIAS 8.1 Instrucciones de espera Se puede programar el robot para que espere un cierto tiempo o hasta que se cumpla un acierta condición. Instrucciones: WaitTime WaitUntil WaitDI WaitDO
Esperar un cierto tiempo o esperar hasta que el robot se detenga Esperar hasta que se cumpla una condición Esperar hasta que se active una entrada digital (Ver cap. entradas y salidas). Esperar hasta que se active una salida digital (Ver cap. entradas y salidas).
8.2 Fecha y hora Las instrucciones de reloj permiten al contar, controlar y registrar el tiempo, utilizando relojes (clock) que funcionan como cronómetros. La hora o fecha actual se registra en una cadena. Pero existen la posibilidad de registrar algunos de los componentes de la hora del sistema como valor numérico. Esto permite al programa realizar una actividad a una hora o un día determinado. Instrucciones: ClkReset ClkStart ClkStop
Pone a 0 un reloj para cronometraje Arranca un reloj para el cronometraje Parar un reloj para el cronometraje
Funciones: ClkRead CDate CTime GetTime
Leer el reloj del cronometraje Leer la fecha actual como una cadena Leer la hora actual como una cadena Leer la hora actual como un valor numérico
8.3 Matemáticas Las instrucciones y funciones matemáticas sirven para calcular y cambiar el valor de los datos. El resultado de los cálculos se suele asignar a un nuevo dato mediante la instrucción de asignación: “ := “. Instrucciones: Clear Add Incr Decr
Poner a 0 un valor Sumar o restar un valor Incrementar en 1 Decrementar en 1
Funciones: Abs Round Trunc Sqrt Exp Pow ACos ASin ATan ATan2
J.M. Vázquez
Calcula el valor absoluto Redondea un valor numérico Trunca un valor numérico Calculo la raíz cuadrada Calcula la exponencial de “e” Calcula la exponencial con cualquier base Calcula el arco coseno Calcula el arco seno Calcula el arco tangente (entre -90 y 90) Calcula el arco tangente (entre -180 y 180)
Pag.: 32
UVA - CARTIF
Cos Sin Tan EulerZYX OrientZYX PoseInv PoseMult PoseVect
Manual Básico de Programación. Lenguaje RAPID
Calcula el coseno Calcula el seno Calcula la tangente Calcula los ángulos de Euler a partir de una orientación (cuaternios) Calcula la orientación (cuaternios) a partir de los ángulos de Euler Invertir una posición Multiplicar una posición Multiplicar una posición y un vector
8.4 Instrucciones de servicio El sistema dispone de una serie de instrucciones que sirven para hacer el test del sistema robot. Se puede direccionar una señal de referencia (por ejemplo la velocidad de un motor) a una salida analógica del robot Funciones: TestSign
Definir y activar una señal de test
8.5 Funciones de cadena Permiten realizar operaciones con cadenas como: copia, concatenación, comparación, búsqueda, conversión, etc. Operadores: := + = <>
Asignar un valor a una cadena Concatenación de cadenas Comprobar si es igual a Comprobar si no es igual a
Funciones: StrLen StrPart StrMemb StrFind StrMatch StrOrder NumToStr ValToStr StrToVal StrMap
Calcula la longitud de una cadena Tomar parte de una cadena Comprobar si un carácter pertenece a una cadena Buscar un carácter dentro de una cadena Buscar una estructura de caracteres en una cadena Comprobar si las cadenas están ordenadas Convertir un valor numérico en cadena Convertir un valor en una cadena Convertir una cadena en un valor Realizar un mapa de la cadena
8.6 Funciones varias OpMode RunMode Dim Present IsPers IsVar Load UnLoad
J. M. Vázquez
Lee el modo de funcionamiento actual del robot Lee el modo de ejecución de programa que está usando actualmente el robot Obtiene las dimensiones de una matriz Descubrir si un parámetro opcional estaba presente en la llamada a la rutina Comprobar si un parámetro es un dato persistente Comprobar si un parámetro es un dato variable Carga un módulo de programa en la memoria de programa Descarga un módulo de programa en la memoria de programa
Pag.: 33