GUÍA VAL 2 MANUAL N° 2 © Copyright 1992 by STÄUBLI S.A. D.280.172.05. (A) INTRODUCCIÓN Este curso es un complemento del curso nº 1 VAL II, por lo tanto es aconsejable tener bien aprendido el curso nº 1 antes de abordar el curso nº 2. Este curso comporta las instrucciones necesarias para: • • • • La programación estructurada. La conversión digital/analógica y analógica/digital. La modificación de trayectorias en tiempo real. Las funciones de autómatas programables o tratamiento de informaciones asincronas con respecto al programa de movimiento del robot. Para todas las instrucciones básicas referirse al curso nº 1 VAL II. Este fascículo está estructurado para responder cuestiones: • • • • • en la primera parte, descripción de cada instrucción, en el caso en que pdría haber ambigüedad, un ejemplo de aplicación lo más simple posible. En anexo 1, un conjunto de ejemplos de aplicaciones con ejemplos para ayudar a una buena asimilación de estas instrucciones. En Anexo 2, algunos programas que contienen errores voluntarios de sintaxis y/o estructura, unsted deberá encontrarlas ... En Anexo 3, lista de palabras clave. En Anexo 4, empleo de instrucciones que permiten trabajar en lenguaje máquina. Es posible que este fascículo contenga inexactitudes o errores tipográficos. En ediciones posteriores pueden aportarse modificaciones para mejorar su calidad. Nota: Todas las instrucciones descritas en este fascículo corresponden a la versión 2.0 del logiciel VAL II. Buena asimilación ! 1 SUMARIO 0. Convenios de escritura ................................................................................. 4 y 5 Funcionamiento en mono-tarea..................................................................... 6 Funcionamiento en multi-tarea ...................................................................... 7 y 8 Repaso .......................................................................................................... 9 Las variables reales ...................................................................................... 10 y 11 Las variables dimensionadas ....................................................................... 12 y 13 1. LLAST, RLAST ............................................................................................. 14 Operadores de relación y lógicos ................................................................. 15 Operadores matemáticas ............................................................................. 16 Operadores binarios ..................................................................................... 17 Orden relacional de desencadenamiento de las operaciones ...................... 18 FuncIones matematlcas ................................................................................ 19 y 20 Programas asincronos .................................................................................. 21 PCEXECUTE y PCEND, BRAKE ................................................................. 22 2. Instrucciones de movimiento ........................................................................ 23 STOP............................................................................................................. 24 Operaciones matemáticas con las coordenadas de los puntos .................... 25 DECOMPOSE ............................................................................................... 25 DX, DY, DZ .................................................................................................... 26 TRANS .......................................................................................................... 27 PPOINT ......................................................................................................... 27 SCALE........................................................................................................... 28 INVERSE....................................................................................................... 29 a 31 NORMAL........................................................................................................ 32 3. NULL.............................................................................................................. 33 DISTANCE ..................................................................................................... 34 INRANGE....................................................................................................... 35 TODIS, TOANG.............................................................................................. 36 HAND ............................................................................................................. 37 Funciones de control del robot ...................................................................... 38 PENDANT ...................................................................................................... 39 y 40 DET ACH, A TTACH ..................................................................................... 41 ERROR .......................................................................................................... 42 4. REACTE......................................................................................................... 43 STATE ........................................................................................................... 44 y 45 ID ................................................................................................................... 46 TPS ................................................................................................................ 47 STRANS......................................................................................................... 48 TIMER ............................................................................................................ 49 5. Instrucciones estructuradas de test ............................................................... 50 Introducción.................................................................................................... 51 DO ... UNTIL .................................................................................................. 52 WHILE ... DO ... END .................................................................................... 53 CASE...OF ... V ALUE...END ........................................................................ 54 IF... THEN...ELSE...END ............................................................................... 58 FOR... TO...END ........................................................................................... 59 6. Las señales de entradas y salidas exteriores "todo o nada" ......................... 60 Asignación general ........................................................................................ 61 Entradas sincronas, BITS .............................................................................. 62 Entradas asincronas, REACT O REACTI ...................................................... 63 PRIORIDAD de las distintas llamadas ............................................................ 64 2 PRIORITY....................................................................................................... 69 LOCK ............................................................................................................. 70 Aplicacion ...................................................................................................... 71 Salidas .......................................................................................................... 74 10PUT y 10GET............................................................................................. 75 7. Las senales de entradas y salidas "analágicas" ............................................ 76 Entradas analógicas ...................................................................................... 77 Caracteñsticas principales del convertidor de entrada................................... 78 Salidas analo.gicas ........................................................................................ 79 Caracteristicas principales del convertidor de salida...................................... 80 8. Funciones y comandos diversas .................................................................... 81 PARAMETER, TERMINAL, ADCGAIN, etc .................................................... 82 Interruptores software, DISK NET ................................................................. 84 DRY RUN ....................................................................................................... 85 EHAND .......................................................................................................... 85 INTERACTIVE................................................................................................ 85 NETWORK, SRV ERR, etc ............................................................................ 87 SWITCH ........................................................................................................ 88 PCST A TUS ................................................................................................. 89 PULSE .......................................................................................................... 90 ULIMIT o LLIMIT ............................................................................................ 91 SPEED (argument) ....................................................................................... 92 COMMANDS ................................................................................................. 93 I0 .............................................................................................................. 94 9. Modificación de trayectorias en tiempo real .................................................. 95 Principb ......................................................................................................... 96 Descripcion general ....................................................................................... 97 NOAL TER, AL TOUT ................................................................................... 98 Corrección en AL TER interno ...................................................................... 99 Corrección en AL TER externo ..................................................................... 100 Organigrama del principio de funcionamiento de la funcion AL TER ............ 101 Protocolo de envio de datas o mensajes ....................................................... 102 Comunicación de VAL II hacia un calculador exterior ................................... 104 Mensaje inicial ............................................................................................... 105 Mensaje corriente .......................................................................................... 106 Mensaje final ................................................................................................. 107 Comunicacion de un calculador exterior hacia el V AL II ............................... 108 Serial de recibo del mensaje inicial ............................................................... 109 Mensajes corrientes ...................................................................................... 110 Observaciones importantes ........................................................................... 112 Tiempo necesario para las transmisiones ..................................................... 113 Tiempo de transmision de V AL II hacia un calculador exterior ..................... 114 Tiempo de transmision de un calculador exterior hacia el VAL II................... 115 10. Anexo 1. Ejercicios de aplicación cronómetro de ciclo ................................. 116 Figuras Collage 11. Anexo 2. Encontrar el error ........................................................................... 124 3 CONVENIO DE ESCRITURA Vamos a pasar revista de las distintas instrucciones del lenguaje VAL II, Por simplificación vamos a utilizar símbolos que rodean los parámetros de estas instrucciones. [] Este símbolo significa que los parámetros del interior de estos corchetes son facultativos. <> Este símbolo sirve para delimitar los distintos parámetros de la instrucción. Ejemplo: EXECUTE [<TOTO>], [<3>], [<2>] Significa que el nombre del programa TOTO, así como 3 y 2 son facultativos. 4 El lenguaje VAL II es un lenguaje adaptado a la robótica, destinado a hacer ejecutar al brazo del robot o a las salidas de tareas especificadas. El lenguaje VAL II posee su propia síntaxis o gramática la cual rige su estructura. No acepta más de una instrucción por línea y el formato de una línea es el siguiente: < número de línea > < instrucción Æ [; comentarios ] Todas las instrucciones que componen un programa se ejecutan secuencialmente. De todas formas, el ordenador a nivel interno anticipa ciertos cálculos (ver curso nº 1 VAL II). El lenguaje VAL II tiene una estructura de funcionamiento mono o multi-tareas, es decir, que el ordenador es capaz de ejecutar dos programas independientemente uno del otro o entrelazados, de forma que se podría considerar que se trabaja con dos ordenadores separados. 5 FUNCIONAMIENTO EN MONO-TAREA 6 FUNCIONAMIENTO EN MULTI-TAREAS 7 Decimos Que el lenguaje VAL es un lenguaje “interpretado” ya que traduce cada línea del programa en lenguaje máquina que es el único lenguaje aceptado por la unidad central, antes de encrutar la siguiente instrucción. Si todo el programa escrito en VAL II se tradujera a lenguaje máquina y luego se lanzara la ejecución en lenguaje máquina se trataría de lenguaje “compilado”. Si este procedimiento tiene la ventaja de ser más rapido en velocidad de ejecución, tiene el inconveniente de necesitar mucha memoria y ser muy poco interactivo de cara al usuario (en caso de modificación del programa) esta razón es la que ha llevado a la elaboración de un lenguaje VAL II interpretado. 8 REPASO Un programa de robótica escrito en lenguaje VAL II comporta tres partes: • • • Parte de programa (xxxxx.PG), Parte de variables de posición (xxxxx.LC) Parte de variables reales (xxxxx.RV) IMPORTANTE Los nombres de programas, ficheros (Programas en disquette), variables reales o variables puntos, pueden ser cualesquiera y comportar un número ilimitado de caracteres. Pero es necesario: 1. Que el primer caracter sea obligatoriamente una letra. 2. Que los otros caracteres sean caracteres alfanuméricos (A...Z, 0 ... 1) y/o puntos. 3. Para las variables reales o puntos, se pueden utilizar corchetes, pero en este caso se tratará de variables con índice. 4. Que el nombre no sea una palabra clave (ver anexo 3). Ejemplo: TOTO TOTO.1 T1 ABZOARTUVHKLVUTRSKLOTUH.2 A DUPONT.DURAND.TUTU.2 Etc... Aunque A[1] solo se autoriza si se trata de una variable punto o real. 1TOTO esta prohibida ya que empieza por una cifra. TOTO + 1 esta prohibido ya que el signo + no es un carácter alfanumérico ni un punto. 9 LAS VARIABLES REALES Una variable real se puede atribuir explícitamente por el programador o como resultado de un cálculo ordenado por el programa. CARACTER DE DECLARACIÓN Implícitamente, una variable se expresa en base decimal. Por razones de comodidad, a veces, estas variables se pueden definir en: - Base octal En este caso, el prefijo que añadimos ante el valor es “Λ”. Ejemplo: A = Λ23 (2 x 81) + (3 x 80) = 19 en base decimal 16 3 Esta notación es interesante para la manipulación de entradas / salidas exteriores (ver capítulo correspondiente). 10 - En código ASCII En este caso el prefijo es <<’>> Ejemplo : A = ‘1 Todos los caracteres alfanuméricos o símbolos teienen una equivalencia binaria que se puede codificar según un código internacional llamado ASCII con el fin de facilitar la transmisión de información entre máquinas. Así, el carácter ~ tiene el valor 176 (base octal, mientra que 1 tiene el valor 61 (en base octal). No busquemos ninguna correlación entre estos valores ASCII y una base cualquiera se trata de una tabla de equivalencia establecida de común acuerdo entre los constructores de material informático. Usted encontrará esta tabla en el fascícula de programación suministrado con el robot. ATENCION: Una variable a la que no se ha asignado ningún valor u operación no comporta el valor “0”, para la máquina tiene un valor indefinido. Ejemplo : y = y + 8 Respuesta de la máquina: Æ * UNDEFINITE VALUE * Hay que hacer Y=0 y=y+8 11 VARIABLES DIMENSIONADAS Se pueden asignar índices a los nombres de variables reales y variables punto. Ejemplo : A[l] = 3.14 o MOVE B [l] l en este caso se debe considerar como una variable entera. La utilización de variables dimensionadas es interesante, ya que más que asignar nombres distintos a cada punto de una trayectoria, basta con incrementar el índice de la variable, lo cual simplifica considerablemente la programación (ver los bucles FOR – END, curso Nº 1). Así se obtiene una tabla que contiene 12 elementos. 12 Además, vemos que se pueden utilizar varios índices para una misma variable ya que se pueden realizar operaciones matemáticas en el interior de los corchetes. Paleta X Æ J ¶ I Ejemplo : MOVE A [ I * 10 + J * 1] J para asignar el número de puntos de la trayectoria de la máquina I para asignar el tipo de máquina. El índice debe estar comprendido entre 0 y 63535 y ser un entero positivo. 13 LLAST (< nombre de variable punto [] <) Gracias a esta instrucción, se puede obtener el valor máximo del índice de una variable punto dimensionada. Ejemplo : Supongamos que tenemos en el fichero de puntos, las variables siguientes. X A ... B ... X[1] ... X[2] ... C[2] ... C ... D ... X[129] ... Y[1] ... G ... Y ... ... ... ... ... ... ... ... ... ... Z ... ... ... ... ... ... ... ... ... ... O ... ... ... ... ... ... ... ... ... ... A ... ... ... ... ... ... ... ... ... ... T ... ... ... ... ... ... ... ... ... ... Si en un programa, ejecutamos la instrucción: VAR = LLAST (X[ ]) Obtendremos 129 en la variable real VAR. RLAST (<nombre variable []>) Esta instrucción es idéntica a la anterior, pero se refiere a las variables dimensionadas reales. 14 OPERADORES RELACIONALES Operador Descripción Simbolo Ejemplo Menor que A<B IF A < B GOTO 10 A <= B (o A =< B) IF A <= B GOTO 10 == Menor o Igual que Igual que <> Distinto de A <> B >= = > Mayor o Igual que Mayor que A>=B (o A=>B) De relación < <= =< > A == B A>B OPERADORES LÓGICOS Operadores Función Ejemplo Descripción AND Y IF ((B==3 AND (C==2)) GOTO 10 Si B = 3 Y C = 2 OR O (Inclusivo) NO IF ((B==3 OR (C==2)) GOTO 10 Si B = 3 o C = 2 Iremos a 10 Si B es distinto a 3 Iremos a 10 NOT IF NOT (B == 3) GOTO 10 15 OPERACIONES MATEMATICAS Operadores matemáticas Importante: Para las distintas operaciones matemáticas, lógicas, etc ... se pueden agrupar las operaciones con paréntesis. Ejemplo: En lugar de hacer: A=3+B G=7/3 C+A*G K = C / 2.4 P=K–6 Se pueden hacer : P = (( 3 + B) * 7 / 3) / 2.4 ) - 6 Del mismo modo no se aceptan 2 operadores puntos. Ejemplo: A = B + - 3 no se acepta pero A = B + (-3) si. 16 OPERADORES BINARIOS 17 ORDEN RELACIONAL OPERACIONES DE DESENCADENAMIENTO DE Cuando la máquina debe ejecutar una expresión del tipo: Z=(A/3+2–5*3)+4 Por qué operación elemental empieza ? Para el software VAL II, las operaciones se ejecutan en el orden siguiente: Nota : En el caso de idéntico nivel de prioridad, las operaciones, se realizan de izquierda a derecha. Consejo: Para evitar tener que conocer perfectamente la tabla superior, se pueden jerarquizar las operaciones encuadrándolas entre paréntesis (el calculador, efectua primero las operaciones de los parántisis más interiores. 18 FUNCIONES MATEMATICAS Aparte de las cinco operaciones elementales, se pueden llamar funciones matemáticas particulares. 19 20 PROGRAMAS ASINCRONOS Ejecución de dos programas simultáneamente. PROG. PRINCIPAL 1 ? MOVE A 2 ? MOVE B 3 ? READY 4 ? SIG 1, -2 5 ? MOVE C 6 ? WAIT (SIG(1001) <> 0 7 ? TYPE “ES MARAVILLOSO” 8 ? TYPE “TODO VA BIEN” Unidad Central PROG. AUXILIAR 1?A=A+B+4*7 2 ? WAIT (SIG(2002) <> 0) 3 ? TYPE <<PROGR PC>> 4 =? TIMER 4 = 0 5 ? G = (A / 3) * 7 6 ? SIG 1,3,8,19 El programa PC (programa auxiliar) puede comportar las mismas instrucciones que el programa principal excepto las siguientes: INSTRUCCIONES DE MOVIMIENTO REACT REACTI REACTE ATTACH DETACH BASE TOOL PROMPT BREAK DELAY (esta instrucción se podría utilizar a partir de la versión 2.0). El selector RESTART / HALT / RUN no afecta al programa PC. Tabla comparativo funciones Principal – Auxiliar Lanzar un programa Detener un programa Reemprender un programa Reemprender un programa Paro inmediato del movimiento Detención al final del ciclo EXECUTE PROG, 3 ABORTED PROCEED RETRY PANIC PCEXECUTE PROG, 3 PCABORTED PCPROCEED PCRETRY PCEND Nota: Si el PC está bloqueado en un bucle interno, hacer ΛC , seguido de PCABORT. 21 Además, las instrucciones: PCEXECUTE Y PCEND Se pueden ejecutar en un programa principal para sincronizar los dos programas entre sí. Ejemplo: PROG TOTO 1? 2? 3? 4? 5? 6? 7? 8? 9? MOVE A MOVE B PCEX TITI, -3 MOVE G MOVE D PCEND MOVE K DELAY 5 MOVE D3 PROG TITI 1? 2? Æ ejecución 3? 4? SIG1, -2 TIMER 3 = 0 TWAIT TIMER (3)>=10 SIG –1, 2 Æ paro ejecución OBSERVACIÓN: Generalmente, se utiliza el programa auxiliar para asegurar las funciones de autómata programable en paralelo o sincronizado con el programa de movimientos del robot. Puede comunicarse con el programa de movimiento por medio de variables y/o bits de señales de logiciel. Puede ejercer un control sobre el brazo del robot por medio de BRAKE y/o ALTOUT. Durante la ejecución de un programa auxiliar, éste no tomará más del 28% de los recursos de la unidad central y pase lo que pase, no modificará la velocidad de los movimientos del brazo BRAKE Esta instrucción provoca el paro inmediato del brazo. Así, en un programa PC, se puede provocar un paro bajo condición. 22 INSTRUCCIONES DE MOVIMIENTO No volveremos sobre iinstrucción como MOVE, APPRO, DEPARTS, OPEN, etc (ver curso nº 1). De todas formas recordamos que si definen incrementos de movimientos, demasiado pequeños, el robot no los ejecutará inmediatamente sino que los acumulará de forma que la distancia entre dos desplazamientos tenga al menos una duración superiora 140 ms para líneas rectas (MOVES A) Y 60 ms para movimientos de interpolaciones angulares (MOVE A o MOVE # A). Además, la unidad central siempre anticipa el cálculo del punto siguiente durante la ejecución del movimiento. MOVE A ! o APPRO A!, 50 Esta instrucción es idéntica a MOVE A o APPRO A, 50, salvo que se asigne al punto A la posición del robot en el momento de teclear RETURN (®). Ejemplo: 18? MOVE A! ® 23 STOP Esta instrucción permite interrumpir la ejecución de un programa. Se pueden distinguir dos casos: 1er. Caso: la ejecución del programa sólo se ha pedido una vez. En este caso, el programa acabará cuando se encuentra la instrucción STOP, incluso cuando esta instrucción se encuentre en un subprograma. Ejemplo: EX TOTO, 1 1? MOVE A 2? MOVE B 3? CALL TITI PROG TITI 1? MOVE G 2? STOP 3? TYPE “HOLA” 4? RETURN ÆParo 2º CASO: Se ha pedido la ejecución varias veces. En este caso, la unidad central reemprenderá la ejecución de las instrucciones a partir del principio del programa principal, incluso si esta instrucción se encuentra en un subprograma. Ejemplo: EX TOTO, -1 PROG TITI 1? MOVE A 2? MOVE B 3? CALL TITI 1? MOVE G 2? STOP 3? TYPE “HOLA” 4? RETURN ÆVuelta al paso 1 del programa principal 24 OPERACIONES MATEMATICAS CON LAS COORDENADAS DE PUNTOS DESCOMPOSE <variable dimensionada> = <variable punto> Esta instrucción permite asignar las coordenadas X, Y, Z, O, A, T del punto definido por “variable punto” (o las coordenadas angulares de los 6 ejes, si se trata de un punto de precisión) a los seis primeros elementos de la variable dimensionada. Ejemplo: DESCOMPOSE Y [] = PTA Y[0] <= X = 100 (en mm) Y[1] <= Y = 30 (en mm) Y[2] <= Z = 20 (en mm) Y[3] <= 0 = 90 (en grados) Y[4] <= A = -90 (en grados) Y[5] <= T = 0 (en grados) Esta función también vale para los puntos de precisión. DESCOMPOSE TOTO [ ] = #PT 1 Aunque los valores asignados a la variable dimensionada TOTO serán en grados: 25 DX ( <COMP 1> ) DY ( <COMP 2> ) DZ ( <COMP 3> ) Esta instrucción es idéntica por su efecto, a la orden DESCOMPOSE analizada anteriormente, pero solo afecta al eje deseado (no funciona con los angulos O, A, T). Ejemplo: Si PTA = X = 100 Y = 30 Z = 20 0 = 90 A = -90 T=0 X1 = DX (PTA) => X1 = 100 X2 = DZ (PTA) => X2 = 20 26 TRANS ({<expr>}, {<expr>}, {<expr>}, {<expr>}) Es la operación inversa de DESCOMPOSE, de esta forma, con la ayuda de valores, se puede reconstituir un punto. Gracias a esta instrucción se pueden realizar operaciones matemáticas con las coordenadas de un punto y asignar el resultado a éste. Ejemplo: MOVE A MOVE TRANS (X * 1.27, X/cas (angle), Z* 3.29, 4*2, 20*3.28,0) Pero ATENCIÓN, TRANS no funciona para puntos de precisión. En este caso utilizaremos la instrucción PPOINT. PPOINT (<expr>}, {<expr>},{<expr>}{<expr>}{<expr>}{<expr>} Ejemplo: MOVE # PPOINT (x[0], x[1] + 7, x[2]*sin(a), x[3], x[4], x[5] –28) 27 SCALE (<transformada> BY <expresión>) Esta instrucción permite una operación matemática (multiplicación, división, etc...) con los valores de las coordenadas X, Y, Z de los puntos designados. Ejemplo: si el punto Q tiene por coordenadas: Q X Y Z O A T 300 50 10 90 -90 0 Q=SCALE(Q BY 2) Î Q X Y Z O A T 600 100 20 90 -90 0 Constatamos que las coordenadas X, Y, Z se han multiplicado por Z (pero no O, A, T) 28 INVERSE <punto> Ejemplo: SET G = INVERSE (A) Si A es una transformación que define un punto con respecto a la referencia de base, INVERSE (A) definirá la referencia del robot con respecto al punto A. 29 APLICACIÓN Si deseamos obtener la transformación B a partir de la transformada A y C, cómo lo haremos? Se puede escribir: [C] = [A].[B] así [A-1].[C] = [A-1].[A].[B] [I] Matriz identidad Así: [B] = [A-1].[C] por lo que es útil la función INVERSE: SET B = INVERSE (A):C Recordamos que la multiplicación no es commutativa para el producto matricial, lo caul significa que si multiplicamos una expresión por una matriz a la derecha, deberemos multiplicar la otra por una matriz a la derecha. 30 EJEMPLOS Disponemos de las cotas del punto T con respecto a la ref de base O (estas cotas se han definido previamente por una orden HERE, POINT, etc). Se conocen las coordenadas del punto A. Deseamos obtener las cotas del punto T con respecto a la referencia útil situada en el punto A. Se puede escribir. T=A.B B es la transformada entre el punto T y el punto A Desconocido Conocido Conocido En VAL II - - > SET T = A : B Entonces B = A – 1 . T En VAL II => SET B = INVERSE (A) : T Cotas del punto T con respecto al punto A. 31 NORMAL (<punto>) Esta instrucción permite reducir los errores del cálculo en transformadas compuestas sucesivas. Ejemplo: MOVE A:B:C:D:E:F:G Hemos visto que por encima de 5 transformaciones, se obtienen errores de cotas muy importantes. Para reducirlas, tenemos la posibilidad de hacerlo con la instrucción NORMAL. Procederemos de la manera siguiente: MOVE A:B:C:D:E:F:G SET X = A:B:C:D:E:F:G SET X = NORMAL (X) MOVE X 32 NULL Esta instrucción permite definir un vector NULL del tipo. X 0 Y 0 Z 0 O 90 A -90 T 0 y representa por los ángulos 0, A, T la posición “READY” del robot ya que READY representa la posición nula mecánicamente). Ejemplo: SET B = NULL A menudo, esta instrucción se utiliza para reinicializar una variable punto. ANTES DESPUES Punto B X = 123 Y = -17 Z = -127 0 = 90 A = -10 T = +30 Punto B X=0 Y=0 Z=0 0 = 90 A = -90 T=0 SET B = NULL => 33 DISTANCE (<comp 1>, <comp 2>) Esta instrucción da la distancia en mm entre dos puntos. Ejemplo 1 : X = DISTANCE (A,B) A 155 mm B 34 INRANGE ( C ) O INRANGE (A:B) Esta instrucción permite definir, en una variable, un código el cual, según su valor nos dirá si el eje 1 está fuera del límite, etc... Ejemplo : ER = INRANGE (A:B) ER podría tomar los siguientes valores: 0 1 2 4 8 16 32 64 128 256 Se puede llegar al punto El eje 1 estará en limite El eje 2 estará en límite El eje 3 estará en límite El eje 4 estará en límite El eje 5 estará en límite El eje 6 estará en límite Reservado para aplicaciones futuras. El punto estará demasiado cerca de la columna del robot El punto estará demasiado lejos de la columna del robot. Ejemplo: 20T = INRANGE (B) IF (T ==0) GOTO 5 IF (T == 256) GOTO 10 . . . 5 TYPE “TODO VA BIEN” GOTO 20 TYPE “NO SE PUEDE LLEGAR AL PUNTO, ESTA DEMASIADO LEJOS DE LA COLUMNA DEL ROBOT” NOTA: Esta instrucción sólo funciona con los puntos de transformada, y no con los puntos de precisión. 35 TODIS Esta instrucción nos da el factor de conversión que utiliza el calculador para convertir las dimensiones, expresadas en mm para cada tipo de robot (260, 560, 761, 762, ...) TOANG Esta instrucción es identica a la anterior pero se refiere al coeficiente que afecte los ángulos. 36 HAND Esta instrucción permite declarar el estado de la pinza en una variable. 37 FUNCIONES DE CONTROL DEL ROBOT 38 PENDANT (<expresión>) Hemos visto que el robot se puede desplazar manualmente gracias al mando manual, por las teclas situadas en este mando, o por el armario de mandos, por un código que se puede detectar a través de un programa en lenguaje VAL II. Ejemplo: X = PENDANT (2) Si obtenemos en la variable X, el valor (Λ20) deduciremos que el botón COMP del mando manual, ha sido presionado. 39 40 DETACH Esta instrucción ordena dar el control del brazo del robot al mando manual. Así, el usuario podrá en el interior de un programa, desplazar el brazo manualmente para situarlo en el lugar deseado. ATTACH Esta instrucción permite dar control del brazo del robot a la unidad de mando. Ejemplo: MOVE A MOVE B DETACH TYPE “DESPLAZARSE AL PUNTO C POR FAVOR” TYPE “CON LA AYUDA DEL MANDO MANUAL” TYPE “CUANDO LLEGUE, PRESIONAR COMP” * WAIT (PENDANT (2) BAND Λ20 <> 0 SET C = HERE ATTACH MOVE K MOVE C * Nota: También podríamos haber utilizado: WAIT (STATE (3) == 5) <> 0 41 ERROR (<expresión>) Esta instrucción permite obtener un código que indica el tipo del último error que se ha producido. Si la expresión es 0, se trata del último error encontrado en un programa robot. Si la expresión es 1 se trata de un error en un programa PC. Si la expresión es –1 se trata del último error que se ha recibido de un calculador exterior a través de la función ALTER externa. Ejemplo X = ERROR (0) TYPE “EL CODIGO DE ERROR ES EL SIGUIENTE “, X Ver el cuadro del fascículo de lenguaje VALII, apéndice F. 42 REACTE <programa> Si ocurre algún error después de la ejecución de esta instrucción, el programa se desviará hacia el programa designado. Ejemplo: error: Invalide -> Solution 1 MOVE A 2 REACTE ACCIDENTE 3 MOVE B 4 MOVE C 5 MOVE K 6 MOVE F -> PROG ACCIDENTE 1 ATTACH 2 MOVE J3 3 TYPE “HAY UN PROBLEMA” 4 RETURN De todas formas, un programa PC, no puede contener instrucciones REACTE. El programa designado no se interrumpe nunca por consideraciones de prioridad. El programa de tratamiento provocado por un error, siempre debe empezar por la instrucción ATTACH. El objetivo de esta instrucción, es permitir el paro o la puesta en marcha de un proceso perirobótico después de un error. La ejecución de esta instrucción con otros fines requiere extrema prudencia. 43 STATE (<expresión>) El objetivo de esta instrucción, es conocer el estado de la unidad de comando (1), brazo del robot (2) o mando manual (3). Si la expresión es igual a 1 Ejemplo : X = STATE (1) Nos referimos al cuadro inferior para interpretar el código encontrado en la variable X. Obtenemos el estado de la unidd de comando. Valor 0 1 2 3 4 5 6 7 Sistema instalándose. Todavía no hay alimentación en el brazo. Ha aparecido un FATAL ERROR y la alimentación del brazo no se puede hacer. En espera de que se presione el botón de alimentación del brazo. Se acaba de alimentar el brazo. Se ha validado el modo manual. Se está calibrando Se esta efectuando el comando LIMP (robot 260) El brazo está bajo el control de un programa de aplicación. Si la expresión es igual a 2 Nos obtenemos el estado del brazo del robot; Valor 0 1 2 3 4 5 6 7 8 9 10 No se ha ejecutado ninguna instrucció de desplazamiento Se está haciendo el cálculo de la trayectoria. El movimiento está detenido sobre un punto definido No hay error de posición en un punto final indefinido. El movimiento se ha detenido sobre un punto indefinido. Declaración para situarse en modo HOLD. Detención en modo HALT. Declaración debida a la ejecución de una instrucción REACTI o BRAKE Paro debido a las instrucciones REACTI o BRAKE. Deceleración debida a un error generado por el sistema o paro PANIC. Paro debido a un error generado por el sistema o paro PANIC. 44 Si la expresión es igual a 3 Obtenemos el estado del modo manual Valor 0 1 2 3 4 5 Ejemplo: Modo OFF FREE JOINT WORLD TOOL COMP V = STATE (3) Si en la variable V encontramos el valor 4, significa que el mando manual está en modo TOOL. Si la expresión es igual a 4 Valor 0 1 Modo No calibrado Calibrado Si la expresión es igual a 5 Para el robot 562 Valor 0 1 2 3 Modo PAYLOAD 4kg, ELSPOFF PAYLOAD 4 kg, ELSPON PAYLOAD 2,5 kg, ELSPOFF PAYLOAD 2,5 kg, ESLPON Para el robot 760 Valor Modo 0 1 ELSPOFF ELSPON 45 ID (<expresión>) Esta función describe la configuración del robot: esta instrucción es útil en el caso de un supervisor que quiera conocer la configuración del sistema supervisado. Ejemplo: VA = ID (1) => VA = 560 Es el modelo 560. Los argumentos son los siguientes: 1 => Modelo 2 => Nº de serie 3 => Versión del logiciel 4 => Revisión 5 => Tipo de opción 46 TPS Esta instrucción permite sabel el número de impulsos generados por el sistema de tiempo interno en la unidad central, para el encadenamiento de las distintas secuencias. VA = TPS => VA = 34.72222 Armario robot Este valor corresponde al número de segmentos elementales de 28 ms) por unidad de tiempo (1 seg). Nota: Se puede deducir que 2 ms es el período mientras 34.72222 la frecuencia del sistema de tiempo interno. 47 STRANS <nombre variable > [] Esta instrucción permite obtener, en una tabla dimensionada, el modelo matemático (la matriz de transfert) de la posición del robot en el momento en que esta instrucción se ejecuta. Ejemplo: STRANS A [] A [] es un cuadro constituido por 12 elementos, de los cuales los 9 primeros representan la matriz de rotación y los 3 últimos representan la matriz de traslación. Estos elementos se deben multiplicar por los coeficientes (TODIS para los elementos de traslación) para ser utilizables. Nota: Esta instrucción también puede figurar en un programa PC pero sólo funciona a partir de la versión 2.0 de VAL II: 48 TIMER número = valor (-2 < 0 = número < 0 = 15) entero, real, expresión, etc ... Esta instrucción permite afectar un contador (TIMER) con un valor cualquiera. Ejemplo: TIMER 3 = 10 Preselecciona el valor 10 segundas en el timer nº 3 por lo tanto timer nº 3 va a incrementarse en segundos en paralelo al funcionamiento de la unidad de comandos y su contenido será accesible por el programa en el momento deseado. TIMER (<expresión>) Esta instrucción permite recuperar un contenido (en segundos) de un TIMER designado por una expresión. Ejemplo 1: TP = TIMER (3) TYPE “VALOR DEL TIMER (3) = “, TP Aparecerá: 2648.458 Así podemos hacer una temporización muy precisa con la ayuda del programa siguiente: 1 2 3 4 MOVE A TIMER 4 + 0 WAIT TIMER (4) <= 5 MOVE B Obtenendremos una temporización de 5 segundos entre el movimiento de A y el de B. Los timers 0, -1, -2 son timers particulares: - El TIMER (0) responde al reloj interno del sistema, y por lo tanto solo puede ser leído. El TIMER (–1) empieza a descontar el principio de un movimiento hasta llegar al valor 0 en el momento en que se llega a destino, esto sirve para determinar el tiempo previsto para un desplazamiento elemental. El TIMER (-2) es similar al TIMER (-1) salvo que el valor 0 se obtiene cuando empieza la deceleración de movimiento. Observación: Si los TIMERS (1) al (15) no se preseleccionan, tienen un valor identico a TIMER (0). 49 INSTRUCCIONES ESTRUCTURADAS DE TEST 50 INSTRUCCION Estas instrucciones de test, se llaman estructuradas porque obligan al programador a estructurar convenientemente su programa. En efecto, un programa estructurado, permite una claridad mayo y, por lo tanto, una mayor facilidad para todas las modificaciones posteriores (lo cual supone una ventaja no despreciable en robótica). Las instrucciones de test estructuradas son las siguientes: - DO ... UNTIL WHILE ... DO ... END CASE ... OF ... VALUE ... END IF ... THEN .... ELSE ... END FOR ... TO ... STEP ... END 51 DO <bloque de paso de programa> . . . UNTIL < expresión lógica > Esta instrucción permite realizar un bloque de paso de programa hasta que el resultado de la expresión lógica sea cierto. Constatamos que con este tipo de instrucción, el bloque de paso de programa se ejecuta al menos una vez. Ejemplo: PROG BUCLE 1 1 MOVE A 2 DO 3 MOVE G 4 MOVE F 5 TYPE “EJECUCION DEL CICLO” 6 MOVE F3 7 UNTIL SIG (1001) 8 TYPE “EL CICLO SE HA TERMINADO” Cuando el nivel de la entrada 1001 esté en el estado 1, en pantalla aparecerá EL CICLO SE HA TERMINADO. 52 WHILE <expresión lógica > DO <bloque de paso de programa> END Esta instrucción permite (como la instrucción DO ... UNTIL), realizar un bloque de paso de programa, hasta que el resultado de la expresión lógica sea falso (al contrario que la expresión DO ... UNTIL). Cuando el resultado sea falso, el programa continuará ejecutando las instrucciones que siguen la instrucción END. Ejemplo: PROG BUCLE 2 MOVE A WHILE SIG (1001) DO MOVE G MOVE F TYPE “EJECUCION DEL CICLO” MOVE F3 END TYPE “EL CICLOS SE HA TERMINADO” Cuando el nivel de la entrada 1001 pase al estado 0, en pantalla aparecerá. EL CICLO SE HA TERMINADO De todas formas, aunque el principio parezca similar a la instrucción anterior (DO .. UNTIL) constatamos que el programa no está obligado a ejecutar al menos una vez (caso en que SIG (1001) = 0, desde el principio del programa). 53 CASE <expresión> OF VALUE <expresión> {,... < expresión >}; <bloque de paso de programa> . . . VALUE <expresión> {... <expresión>} <bloque de paso de programa> {ANY} {<bloque de paso de programa>} END Esta instrucción de test permite realizar un u otro bloque de instrucciones en función del valor declarado en la lista que sigue VALUE. Ejemplo: PROG ELECCION 1 2 3 4 5 6 7 8 9 10 MOVE A CASE TUTI OF VALUE 1,2 : TYPE “EL VALOR DE TUTI ES 1 O 2” VALUE 3,4: TYPE “EL VALOR DE TUTI ES 3 O 4” ANY TYPE “EL VALOR DE TUTI ES DISTINTO A 1,2,3,4” END TYPE “HE TERMINADO” 54 En el ejemplo anterior, vemos que en el caso que TUTI tenga el valor 3, el programa irá a ejecutar la línea 6 y saltará a la ejecución de las diversas instrucciones que siguen la instrucción END. Esta instrucción tiene la ventaja de realizar de una sola vez el organigrama siguiente: 55 Además, esta instrucción es muy útil para el tratamiento de procesos de automatismos industriales con ramas paralelas selectivas (método GRAFCET) ejecutado normalmente por un programa PC auxiliar. Ejemplo: Deseamos hacer funcionar tres cilindros según el ciclo: b, c , d, e, f, g son los finales de carrera de los distintos cilindros. M es el botón de inicio del ciclo. S1 es un selector. 56 El programa será el siguiente: ; Puesta a 0 de salidas ; Espera pulsar n ; Test del selector S1 ; Salida del pistón V1 ; Espera final carrera ; Entrada pistón V! , Espera final carrera ; Salida del pistón V2 ; Espera final carrera ; Entrada pistón V2 ; Espera final carrera ; Salida del pistón V3 ; Espera final carrera ; Entrada pistón V3 ; Espera final carrera ; Retorno al inicio 57 IF ... THEN ... ELSE ... END Ejemplo: 11 12 13 14 15 16 17 18 19 20 MOVE A IF N> 6 THEN TYPE “N>6” SIG 2 ELSE TYPE “N<= 6 “ SIG 1 DELAY 3 END MOVE B Consejo: Para facilitar la lectura de un programa, a veces es interesante presentar las instrucciones ELSE, END con ligero decalaje. Esto se hace automáticamente con el logiciel VAL II en el caso de tests entrelazados. 9 10 11 12 13 14 15 16 17 18 MOVE A IF N> 6 THEN IF G < 2 THEN TYPE “SI” ELSE TYPE “NO” END ELSE TYPE “DESCONOCIDO” END 58 FOR ... TO ...STEP ... END Esta instrucción permite realizar un número de bucles de programa sin estar obligado a crear un puntero “contador”. Ejemplo: MOVE A FOR I = 1 TO 10 STEP 1 MOVE B MOVE C END El robot se desplazará entre los puntos B y C diez veces seguidas. Los extremos inferiores y superiores, así como el paso, pueden ser variables que contengan valores reales negativos o positivos. Ejemplo: MIN = 0.23 MAX = 19.72 FOR J = MAX TO MIN STEP –0.37 MOVE B MOVE C END 59 LAS SEÑALES DE ENTRADAS Y SALIDAS EXTERIORES “TODO O NADA” 60 ASIGNACIÓN GENERAL Dirección Pagina 0 Pagina 1 Pagina 2 Pagina 3 1 a 32 1 001 a 1 032 2 001 a 2 032 3 001 (Sólo se puede leer) 3 002 (Solo se puede leer) Asignación Salidas exteriores Entradas exteriores Bits internos Programa del robot activo Programa del posición HOLD robot en 61 ENTRADAS (1001 a 1032) Si pulsamos sobre el detector exterior CP1 y no sobre CP2 obtenemos: A = SIG (1001) => A = -1 (car. –1 = verdadero) A = SIG (1002) => A = 0 ( car.0 = falso) Si damos A = SIG (1001, 1002) => A = 0 Función Y Observación : A = SIG (1, 1002) Es una instrucción aceptada ya que, en este caso, consideramos el estado 1 de la salida nº1 y el estado 1 de la entrada 1002. 62 BITS (<señal>, {<bits>}) Esta instrucción permite coger el estado de las entradas asignadas, para asignarlos a una variable real. Ejemplo: 63 REACT < señal >, < programa>, [<PRIORIDAD>] O REACTI <señal>, <programa>, [<PRIORIDAD>] 1 < o PRIORIDAD < o = 127 No volveremos sobre el principi de estas instrucciones que ya han sido analizadas en el curso VAL II nº 1. De todas maneras, vamos a desarrollar más ampliamente la sutileza de estas instrucciones a nivel de su prioridad. Hay que considerar que el programa principal está implicitamente afectado por el valor de prioridad 0 (el más bajo). Un subprograma conectado después de la ejecución de una instrucción REACT o REACTI sin índice de prioridad, es considerado como nivel de prioridad 1 y puede ser interrumpido por un subprograma conectado por un REACT o REACTI que tenga un índice de prioridad superior (maxi 127) Este índice de prioridad se puede actualizar en un subprograma con la instrucción LOCK Índice de prioridad Ejemplo: . REACTI 1001, TOTO 12 REACTO 1002, TUTU, 120 MOVE A MOVE B El programa TUTU será prioritario con respecto al programa TOTO. Observación : T = 1001 REACTI T, TOTO Funciona ya que la señal puede ser una variable, pero T debe estar comprendido imperativamente entre 1001 y 1016. 64 PRIORIDAD REACTI 1º Caso: 65 PRIORIDAD REACTI 2º. Caso : Atención: Aunque la prioridad del programa TITI queda oculta por la del prog TOTO, ésta provocará un punto de paro y el ciclo encadenará la ejecución del movimiento siguiente si DEST no está. 66 PRIORIDAD REACT 1er caso. 67 PRIORIDAD REACT 2o caso: 68 PRIORITY Ejemplo : X = PRIORITY Esta instrucción indica el valor del índice de prioridad que se ha declarado para la ejecución de la instrucción REACT o REACTI. Ejemplo: PROG PRINC 1 ? MOVE A 2 ? REACTI 1001, TOTO ? 12 3 ? MOVE B 4? MOVE C PROG TOTO 1 ? MOVE G 2 ? Y = PRIORITY 3 ? TYPE “EL COEFICIENTE DE PRIORIDAD ES” 4 ? MOVE G 5 ? RETURN Veremos aparecer el valor 12 en pantalla. 69 LOCK <PRIORIDAD> La prioridad debe estar comprendida entre 0 y 127 y ser: - un valor numérico un variable real una expresión aritmética Por esta instrucción se puede cambiar el valor de prioridad definido al ejecutar la instrucción REACT o REACTI. Esta instrucción se utiliza en el interior de un subprograma, llamado por la reacción y asignará un nuevo índice de prioridad, que será válido hasta la ejecución de la instrucción RETURN del subprograma en cuestión. Ejemplo: PROG PRINC 1 2 3 4 5 6 MOVE A REACTI 1001, TOTO,12 MOVE B REACTI 1002, TUTU, 20 MOVE C MOVE D PROG TOTO 1 2 3 4 5 6 7 MOVE G MOVE DE LOCK PRORITY + 30 <- El prog TOTO verá creer su prioridad en MOVE K 30, ya no podrá ser interrumpido por TUTU MOVE F hasta RETURN MOVE T RETURN 70 Se puede desear, durante el empleo de las instrucciones REACT y REACTI, volver a puntos o movimientos distintos a los que corresponden a la instrucción Utilización de la instrucción REACT o REACTI 1er caso: Deseamos Ejemplo: PROGRAM PRINC.0 1 REACTI 1001, TUTU 2 MOVE A 3 MOVE B 4 MOVE C 5 MOVE D END PROGRAM TUTU 1 2 3 END TYPE “ESTOY EN EL SUBPROGRAMA” MOVE A9 RETURN 71 2o caso: Deseamos 72 3er caso: deseamos: 73 SALIDAS (1 a 32) Nos volvemos a las instrucciones vanales del tipo SIG, etc ..., que ya hemos visto en el curso 1. PC <señal>, {<bits>} = <valor> Esta instrucción permite asignar, sobre un conjunto de salidas en que el número de la primera salida es declarado por señal y el número de salidas por la variable bits, el valor de una variable (que será convertido implicitamente en binario). Ejemplo: A=9 PC 15,4 = A 9 Î 1001 en binario 74 IOPUT dirección = valor Esta instrucción permite poner un valor en la dirección designada. Esta dirección deberá estar comprendida entre 57344 (160000 octal) y 65535 (177777 octal). El valor, así como la dirección, puede ser una expresión aritmética, un valor real o una variable. IOGET (dirección) Esta instrucción hace la función inversa a la anterior. De esta forma obtenemos el contenido de la dirección designada. Ejemplo: X + IOGET (dirección) La dirección puede ser una expresión aritmética, un valor real o una variable. Esta función és util para saber el contenido de entradas en una tarjeta suplementaria de entradas/salidas. Para más información sobre estas dos instrucciones, ver el manual de programación. 75 LAS SEÑALES DE ENTRADAS Y SALIDAS EXTERIORES “ANALÓGICAS” 76 ENTRADAS ANALOGICAS Estas entradas permiten convertir tensiones exteriores en valores numéricas. Forma general ADC (<CANAL>) De 0 a 15 Ejemplo : X = ADC (6) X toma un valor entero entre –2048 y +2047 para una tensión exterior comprendida ente –10 V y +10 V (para una ganacia = 0) Nota: Para obtener una mayor precisión se puede modificar la ganancia del convertidor con la instrucción siguiente. PARAMETER ADC.GAIN = 0 Valor GANANCIA 0 1 2 3 Gama tensión (V) -10 V a 10 V -5 V a 5 V -2,5 V a 2,5 V -1.25 V a 1,25 V Resolución 2.44 103 V 1.22 103 V 0.61 103 V 0.305 103 V Por defecto el valor de la ganancia se toma 0. 77 CARACTERISTICAS PRINCIPALES DEL CONVERTIDOR Tipo Nº Entradas Impedancia de entradas Capacidad Error máximo Codificación Tensión que no hay que sobrepasar Resolución Valor 16 1MΩ < 50 pf 1LSB (1 bit menos significativo) Complemento verdad +/- 25 V 12 bits Nota: Para los esquemas de cableado de entradas y salidas ver el capítulo diversos al final de este documento. 78 SALIDAS ANALOGICAS Estas salidas permiten convertir expresiones numéricas en tensiones directamente proporcionales. 79 CARACTERISTICAS PRINCIPALES DEL CONVERTIDOR Nº de salidas Impedancia de salida Intensidad máximo de salida Linearidad Resolución 2 0.1 Ω 5mA +/- 0.012% 12 bits 80 FUNCIONES DIVERSAS 81 PARAMETER <nombre parámetro > = valor Esta instrucción permite parametrizar funciones particulares. Ejemplo: PARAMETER ADC.GAIN = 2 Nótese que esta función funciona en modo comando y en modo programa. PARAMETER (nombre función) Esta instrucción permite obtener el valor del elemento parametrizado. Ejemplo: 1 MOVE A 2 G = PARAMETER (ADC.GAIN) 3 TYPE “VALOR DE LA GANANCIA” , G Al ejecutar el programa aparecerá 2 en pantalla. Nótese que esta función también funciona en modo comando, aunque entonces no hay paréntesis. Ejemplo: . PARAMETER ADC.GAIN .2 82 Los elementos que se pueden parametrizar son: HAND TIME Esta instrucción determina la duración de las instrucciones OPENI y CLOSEI, la cual debe estar comprendida entre 0 y 32 767 veces 28 milisegundos. El valor, por defecto es 6, así que, la duración será de 168 ms para la ejecución de las operaciones OPENI y CLOSEI. Ejemplo: PARAMETER HAND.TIME = 12 TERMINAL Esta instrucción permite transponer los distintos códigos ASCII salidos de los terminales SOROC(0), ADDS (1), HAZELTINE(2), VT 100 (3), de forma que estos terminales tengan las mismas posibilidades que el terminal Unimation suministrado con el robot. Ejemplo: PARAMETER TERMINAL = 1 ADC.GAIN Se puede definir la ganancia de las entradas analógicas, los valores se deben escoger entre 0, 1, 2 y 3. Para más precisión, ver el capítulo Entradas/Salidas analógicas. Ejemplo: PARAMETER ADC.GAIN = 3 Por defecto la ganancia queda definida a 0. 83 INTERRUPTORES LOGICIELS En el curso nº1 VAL II hemos visto que con las instrucciones DISABLE y ENABLE, se podía conectar o desconectar. La función CP (Continous Path). Existen otras funciones que se pueden validar o no de esta forma. Estas funciones son las siguientes: DISK.NET Hasta que este comando sea validado, asociado con la validación de NETWORK, el logiciel VAL II, utiliza el lector de disquette para comunicarse, por eso, inicialmente, esta función está inhibida. Ejemplo: ENABLE DISK.NET DRY.RUN Esta función permite la ejecución de un programa VAL II sin desplazar el brazo del robot, a la vez que el brazo del robot queda bajo el control del mando manual. Ejemplo: Se desea simular el desplazamiento de distintos elementos perirobóticos (pistones, motores, detectores, ...) en una aplicación en que la gestión del proceso se efectua por el programa principal, pero se desea que el brazo del robot quede immovil aunque hay instrucciones de desplazamiento. PROG TOTO 1 2 3 4 5 5 6 7 10 14 MOVE A IF SIG (1001, 1004) GOTO 14 MOVE B GOTO 10 SIG 1, -2 ; salida del pistón 1 y entrada del pistón 2 WAIT (1005, 1006) SIG –1, 2 ; Entrada del pistón 1 y salida del pistón 2 84 EN DRY.RUN Ejemplo: TOTO, -9 El brazo del robot no se desplazará entre el punto A y el punto B pero se podría verificar el buen funcionamiento de los pistones. EHAND Esta instrucción se debe utilizar únicamente para el empleo de una mano asistida. Permite validar el servo. INTERACTIVE En lenguaje Val II, algunos comandos o instrucciones piden confirmación para ejecutarse. En el caso en que se inhiba la interactividad, estas demandas de confirmación no aparecerán más. Ejemplo: Inicialmente: . CAL ARE YOU SURE (Y/N) = Y ® El calibrado se ejecuta, Si .DIS INTERACTIVE .CAL el calibrado se ejecuta sin pedir si estamos seguros... Nota: Inicialmente esta instrucción está validada. 85 MESSAGES Esta función es similar a INTERACTIVE, pero solo afecta a los mensajes de las instrucciones TYPE o PROMPT. En el caso en que se inhiban (por medio de DIS MESSAGES), los comentarios contenidos entre comillas no apareceran: Ejemplo: EN MESSAGES 1 MOVE A 2 TYPE “TODO VA BIEN” 3 MOVE B Durante la ejecución, aparecerá, TODO VA BIEN en pantalla. DIS MESSAGES 1 MOVE A 2 TYPE “TODO VA BIEN” 3 MOVE B Durante la ejecución, TODO VA BIEN, no aparecerá en pantalla. 86 NETWORK, REMOTE.PIN, SUPERVISEUR Estas tres funciones sirven, esencialmente cuando el robot comunica con un calculador u ordenador exterior (ver curso sobre supervisor). Inicialmente, estas funciones son invalidadas. SRV.ERR La unidad de mando vigila constantemente la trayectoria del brazo del robot durante sus desplazamientos y emite un mensaje si ésta se separa demasiado de la consigna previamente calculada (mensaje de estilo “ENVELOPE ERROR JT 6”). Este seguimiento se asegura por un programa interno en la unidad de comando, pero se puede suprimir declarando DISABLE SRV.ERR. Inicialmente, esta función está validada. 87 Observaciones generales Se pueden validar o inhibir varias funciones a la vez con la condición de separarlas por comas. Ejemplo: ENABLE SRV.ERR, DRY.RUN, DISK.NET Nótese que ENABLE y DISABLE funcionan tanto en modo comando como en programa. Además, se puede visualizar el estado (ENABLE o DISABLE) de una o varias funciones, utilizando el comando: SWITCH {<funcion 1>}, {,..., <función n>} Ejemplo: SWITCH CP, DRY.RUN Visualizará los estados de CP y de DRY.RUN. Nótese que SWITCH sólo funciona en modo comando. 88 PCSTATUS Este comando permite conocer el estado del programa complementario PC. Se obtiene: • • • • • el estado de funcionamiento o no funcionamiento del PC. El número de bucles ejecutados. El numero de bucles por ejecutar. El nombre del programa. El paso del programa donde éste se ha detenido. Nótese que PCSTATUTS solo funciona en modo comando. 89 PULSE < valor > Con valor 1 o 2 Esta instrucción, que se puede emplear en el programa PC, permite generar una pulsación de duración 200 MS. El valor representa el número de salida afectada por esta instrucción. Nota: Esta instrucción se emplea sobretodo en la soldadura. 200 ms Robot Salida nº 1 90 ULIMIT o LLIMIT Esta instrucción permite conocer el límite máximo (ULIMIT) y mínimo (LLIMIT) de cada articulación y eventualmente, modificar según un procedimiento idéntico a la orden POINT. También se puede restringir el campo de movimiento de una o varias articulaciones para no entrar en una zona prohibida. Nota: Este comando sólo funciona en modo comando, pero se puede introducir en un programa AUTOSTART. 91 X = SPEED (argumento) Si X = SPEED (1): - obtenemos en la variable X, la velocidad monitor. Si X = SPEED (2): - obtenemos en la variable X, la velocidad que hayamos definido en el programa (con la instrucción SPEED <valor> ALWAYS). Si X = SPEED (3): - obtenemos en la variable X, la velocidad del último movimiento o del movimiento actual. Si X = SPEED (4): - obtenemos en la variable X, la velocidad del programa del movimiento siguiente 92 COMMANDS <programa> Este comando permite realizar el encadenamiento de distintas tareas, tal y como lo hace el comando AUTOSTART (ver curso nº1 VAL II). La diferencia está en que el encadenamiento empezará a partir de la función COMMANDS, que entremos por teclado, mientras que el proceso AUTOSTART, empieza cuando pulsamos el botón situado en la parte frontal. Además, en este caso, el programa no se tiene que llamar obligatoriamente AUTO. Ejemplo: PROG FER 1 ? MEC CAL 2 ? MC SP 10 3? MC DO TYPE “********” 4? MC EX TOTO, 3 • COMMADS FER El robot asegurará su calibrado, se situará a velocidad monitor 10 y ejecutará el programa TOTO, 3 veces seguidas. Nótese que COMMANDS sólo funciona en modo comando. 93 IO Este comando permite visualizar en pantalla el estado de las entradas/salidas de una forma global. La visualización en pantalla es dinámica. Se sale de este modo de visualización haciendo ΛC. Ejemplo: 32-29 28-25 24-21 20-17 16-13 12-09 08-05 04-01 00XX 10XX 20XX 0000 0000 0000 1100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 Las salidas 27 y 28 están en el estado 1. Nótese que IO sólo funciona en modo comando. 94 MODIFICACION DE TRAYECTORIAS EN TIEMPO REAL 95 PRINCIPIO Sería interesante poder modificar, en cualquier momento, una trayectoria previamente definida. Esta modificación, podría tener lugar como resultado de indicaciones dadas por detectores, cámaras de visión, etc, ... exteriores al robot (elementos perirobóticos) o de parametros salidos del calculador interno del robot, a través de la función PC. Esta modificación de trayectoria en tiempo real solo puede tener lugar en DELAY o en movimientos en línea recta. 96 DESCRIPCIÓN GENERAL El programa principal deberá comportar la siguiente instrucción: 97 NOALTER Esta instrucción o comando permite detener el control de la trayectoria en tiempo real (salir del MODO ALTER). Si el modo ALTER no está validado, esta instrucción no tiene ningún efecto. En todos los casos, veremos aparecer “ALTER PAUSING” seguido de “ALTER ENDING” para indicar que el comando ALTER esta invalidado. ALTOUT <código excepción>, {<dx>,},{<dy>,},{<dz>,},{<rx>,}, {<ry>,},{<rz>,} A partir del programa auxiliar “PC” se pueden transmitir los siguientes valores: Sintaxix DX DY DZ RX RY RZ Descripción Desplazamiento según el eje X Desplazamiento según el eje Y Desplazamiento según el eje Z Rotación alrededor del eje X Rotación alrededor del eje Y Rotación alrededor del eje Z Normalmente el código de excepción está a cero para toda operación ALTER clásica. Si este código tiene un valor distinto de cero, el programa se desviará (como con la instrucción REACT) al subprograma designado en la declaración de la función ALTER y el código se puede recuperar en la función EXCEPTION. Ejemplo: X = EXCEPTION Si hay un error, el calculador exterior deberá enviar un valor negativo y éste se podrá recuperar por ERROR (-1). Ejemplo : X = ERROR (-1). 98 Corrección de trayectorias Con la ayuda de la función ALTER interno (en modo WORLD – coord. De base) PROG TRAJ 1 2 3 4 5 6 PCEND PCEXECUTE MODIF, -1, 0 ALTER (-1, 18) 10 MOVE A MOVES B GOTO 10 PROG MODIF 1 2 3 4 5 COEF = 200 FOR ANG = 1 TO 360 X = SIN(ANG)*COEF ALTOUT 0,0,0,X,0,0,0 END ALTER (-1,18) Alter Interno + + + + = 0 x 1 <- bit 0 -> 0 1 x 2 <- bit 1 -> 1 0 x 4 <- bit 2 -> 0 0 x 8 <- bit 3 -> 0 o 1 1 x 16 <- bit 4 -> 1 18 -> Valor no acumulativo. -> WORLD -> Sin mensaje -> Sin importancia (no hay mensajes) -> Utiliza los datos de entradas Alter 99 Corrección de trayectorias Con la ayuda de la función ALTER externo (en modo WORLD – coordenada de base). El logiciel VAL II envía a un ordenador exterior mensajes (36 por segundo), el ordenador exterior debe responder al envio de estos mensajes enviando los DX, DY, DZ, RX, RY, RZ esperados por el robot para modificar la trayectoria en tiempo real. Este intercambio deberá durar hasta que se slaga del modo Alter, si no, aparecerá un mensaje de error. El desarrollo del proceso Alter se efectua de la forma siguiente: 100 Organigrama: Principio de funcionamiento de la función Alter 101 Protocolo de envío de datos o mensajes Nota: El puerto nº2, para conectarlo en serie, en tiempo real, debe estar configurado imperativamente a 19 200 baudios. 102 Nota: Si, en la transmisión de datos, aparece el valor 144 (en base 10) (DLE), el sistema reemite un segundo valor 144 (DLE) que será transparente para el octeto verificador. Si en la recepción de datos, el sistema ve aparecer dos valores 144 (DLE) sucesivos, evacuará automáticamente el segundo (siempre transparente para el octeto verificador). Nótese que si el calculador exterior, no genera un segundo DLE en la transición de datos puede haber pérdida de datos o aparición de mensajes de error de transmisión. 103 Acabamos de ver que los distintos datos, se transmiten por la conexión RS 232 C según un protocolo estricto. Vamos a ver los mensajes que puede enviar el Val II al ordenador exterior. 104 Mensaje inicial 105 Mensaje inicial 106 Mensaje final Consiste simplemente en enviar el octeto de control al calculador, el cual no tiene que responder al envío de este octeto. 107 COMUNICACION CALCULADOR EXTERIOR HACIA VAL II Vamos a analizar los distintos mensajes que puede enviar el calculador exterior hacia el VAL II como respuesta a los enviados por el VAL II. 108 Señal de mensaje inicial recibido. Cuando el VAL II, después de la ejecución de la función ALTER, envía el mensaje: “ALTER Empieza” el calculador debe dar una señal de mensaje recibido en un tiempo dado, mediante un octeto de recibo. El valor de este octeto puede tomar el siguiente valor: 1 (Base 10) - > 0 0 0 0 0 0 0 1 El calculador externo ha detectado un error en la comunicaicón y pide al Val II retransmitir el mensaje inicial. Pasadas 4 tentativas el VAL II para y emite un mensaje de error. 0 (Base 10) - > 0 0 0 0 0 0 0 0 El calculador externo indica que todo es correcto y que está preparado para recibir los mensajes corrientes. -1 (Base 10) - > 1 1 1 1 1 1 1 1 El calculador externo indica que no ha podido entrar en modo ALTER y le pide al Val II que interrumpa el proceso y el envío de mensaje de error. 109 110 Observaciones importantes 1. 2. Inicialmente los valores de los parámetros ejes están puestos a cero. En modo acumulativo los ejes no seleccionados son percibidos por el lenguaje Val II como si estuvieran a cero. En modo no acumulativo los ejes no seleccionados se consideran por VAL II como invariados. 3. los valores de los distintos parámetros de entradas (X, Y, Z, Rot. X, Rot. Y, Rot Z) se expresan respectivamente: en mm X, Y, Z en grado Rot. X, Rot. Y, Rot. Z. Aunque: Para el robot modelo 260, estos valores enviados por el calculador se deben multiplicar por: 48.81143 (+/- 700 mm) para X, Y, Z 182.0444 (+/- 180 grados) para Rot.X, Y, Z Para el robot modelo 560 estos son los valores: 32.00000 (+/- 1 024 mm) para X, Y, Z 182.0444 (+/- 180 grados) para Rot.X, Y, Z 112 TIEMPO NECESARIO PARA LAS TRANSMISIONES Una vez empieza el proceso ALTER (se ejecuta la instrucción ALTER), y que la modificación de la trayectoria empieza, los intercambios entre VAL II y el calculador se efectuan en períodos de 28 ms. Cada 28 milisegundo, el VAL II transmite un mensaje y espera una respuesta del calculador. En modo acumulativo, el tiempo máximo que puede tardar el calculador exterior en transmitir su respuesta (a partir del DLE emitido por el VAL II al final del mensaje) es de 16 ms. En modo no acumulativo, esta respuesta se debe hacer en 18 ms. Si se sobrepasan estos tiempos, aparece un ERROR TIMEOUT, y el programa se interrumpe después de 3 tentativas sucesivas con resultado de ERRORES TIMEOUT. 113 Tiempo de transmisiones VAL II -> calculador exterior El tiempo necesario para que el Val II transmita totalmente un mensaje Alter al calculador exterior depende del tipo de transformada, del número de octetos enviados. Escogiendo los casos más desfavorables obtenemos. Mensajes que no comportan datos de transformada Mensajes que comportan datos de transformada Nº Octetas 15 Tiempo 7,3 ms 52 27,1 ms 114 Tiempo de transmisiones calculador exterior -> Val II Estos tiempos están en función del modo y la longitud del mensaje utilizado. Nota: El tiempo definido anteriormente es el tiempo máximo del que debe disponer el calculador para empezar a responder el mensaje enviado por VAL II. Constatamos que cuanto más largo sea el mensaje enviado por el ordenador, el calculador dispondrá de menos tiempo para responder. 115 ANEXO Ejercicio nº 1 CRONOMETRO ELECTRONICO Para el cálculo del tiempo de ciclo de un programa se desea cronometrar el tiempo de ciclo de un programa cualquiera (en nuestro caso para la simulación utilizamos un program MT). 116 Conexión del cronómetro: debemos dar la hora, minutos y segundos. PROGRAM ensayo 1 1 2 3 4 PROMPT “DAR LA HORA EN H, MN, S”, h,m,s Val = H * 3600 + m *60 + s TIMER 3 = val RETURN END Paro del cronómetro (por el robot): obtendremos la hora, minutos y segundos y la duración del ciclo. PROGRAM ensayo 2 1 2 3 4 5 6 7 8 9 x = TIMER h = INT (x/3600) y = x – (h * 3600) M= INT (y/60) S = INT (x – (h*3600 + m*60)) TYPE “ES”, h, “HORA”, m, “MINUTOS”, s, “SEGUNDOS” dur = x – val TYPE “DURACIÓN DEL CICLO” RETURN END Programa cronómetro completo Programa cualquiera para la simulación PROGRAM pp PROGRAM mt 1 CALL ensayo 1 2 CALL mt 3 CALL ensayo 2 END 1 MOVE mt 2 MOVE mt1 3 MOVE mt2 4 MOVE mt3 END 117 GRAFICOS ROBOTIZADOS Se pide: 1. Establecer el programa de forma que, en función de los distintos parámetros entrados por teclado, se puedan obtener las siguientes figuras Nota: Estas figuras se realizarán con respecto a un punto relativo declarado y según la referencia útil. 2. Misma pregunta, pero con respecto a un nuevo tiedro previamente declarado en una orden FRAME. 118 119 Programa correspondiente al ejercicio nº 2, pregunta nº 1 PROGRAM ROSA.PARAM 1 MOVE INICIO 1 2 FOR T = 1 TO 5 3 TYPE 4 END 5 TYPE”PROGRAMA DE ROSACEAS PARAMETRIZABLES” 6 TYPE 7 TYPE 8 TYPE”RESPONDER A LAS PREGUNTAS POR FAVOR “ 9 TYPE 10 TYPE “GRACIAS Y BUENOS DIAS...” 11 TYPE 12 TYPE 13 PROMPT”NUMERO DE PETALOS ( 1 al 10)”, A 14 PROMPT “ANCHURA DE LOS PETALOS ( 0 A 10)” , B 15 PROMPT “NUMERO DE FIGURAS (1 A 10)”, P 16 PROMPT “ VALOR DEL PASO (0.1 A 1)”, PASO 17 PROMPT “LONGITUD DE LOS PETALOS (5 A 100)”, K 18 R = K / (B + 1) 19 FOR I = 0 TO (360 * P) STEP PASO 20 X = R * (COS (A*1) + B) * COS (I) 21 Y = R * (COS (A *1) + B) * SIN (I) 22 MOVE D: TRANS (X,Y,0,90,-90,0) 23 END END 120 Programa correspondiente al ejercicio nº 2, pregunta nº 2 PROGRAM rosáceas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 ; prog rosáceas parametrizables ; con respecto a un triedro cualquiera ; en el espacio CALL text 1 TYPE “origen de la referencia” CALL text2 FOR y = 1 TO 40 TYPE END ELAY SET or 4 = xyz CALL text1 TYPE “un punto situado en el eje” CALL text2 FOR t = 1 TO 40 TYPE END DELAY SET or2 = xyz CALL text1 TYPE “un punto situado en el plano x,y” CALL text2 SET or3 = xyz SET c = FRAME (or4, or2, or3, or4) FOR t=1 TO 5 TYPE END TYPE “programa de rosáceas parametrizables” TYPE TYPE TYPE “responde a las preguntas siguientes por favor” TYPE TYPE “gracias y buenos dias” TYPE TYPE PROMPT “número de pétalos (1 a 10)”, a PROMPT “ancho de los petalos (0 a 10)”, b PROMPT “número de figuras (1 a 10)”, p; idéntico a PE: período de la rosácea PROMPT “valor del paso (0.1 a 1)”, paso; idem a PA PROMPT “ longitud de los pétalos (5 a 100)”, k; idem a radio r= k 7 (b+1) FOR i = 0 TO (360 * p) STEP paso x1 = r*(COS (a*i) + b) * COS (i) y1 = r (COS (a*i) + b) * SIN (i) MOVE c: TRANS (x1, y1, 0,90,0) END END PROGRAM text 1 1 2 3 TYPE “desplazar el robot para “ TYPE “situarlo en: “ RETURN END PROGRAM text2 1 2 3 4 5 6 7 TYPE “cuando este listo presionar” TYPE “comp en el mando manual” DETACH WAIT PENDANT (2) == Λ20 SET xyz = HERE ATTACH RETURN END 121 Ejercicio Nº 3 Aplicación utilizando la función ALTER INTERNO Deseamos poner una junta de cola en una pieza de plástico triangular. Para que la junta sea homogénea, superponemos un movimiento en diente de sierra entre A y B y un movimiento en forma de almena entre B1 y C, el movimiento entre A y C se hará linealmente. 122 Pregunta: Si el programa cuadrado hubiera sido: y = k1 TIMER 1 = 0 WAIT (TIMER (1) < 0.3) <> 0 ALTOUT 0,0,Y,0,0,0 y = -k1 TIMER 1 = 0 WAIT (TIMER (1) >= 0.3) <> 0 ALTOUT 0,0,Y0,0,0 Por que no habría funcionado? 123 Anexo 2 Encontrar el error ( o los errores) en los programas siguientes: 124 Ejercicio de despaletización de decapsuladores Se pide: 1. 2. 3. 4. Despaletizar los decapsuladores de un soporte para presentarlos al cliente cuando este pulse BP1. Si el cliente pulsa BP2, la pinza se abre y puede recuperarlo Si pasan 10 seg. y no ha pulsado BP2, el decapsulador cae en una caja y el robot va a buscar otro. Cuando el palet esté vacio indicar “rellenar” y “Después de rellenar, teclear “PROCEED y pulsar RETURN””. 125 PROGRAM AERO 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 SPEED 30 MOVE R1, 40 3 OPENI WAIT SIG (1001) SPEED 30 ALWAYS A1 = A FOR L = 1 TO 4 FOR K = 1 TO 5 SPEED 100 APPRO A1, 100 MOVES A1 BREAK CLOSEI DEPARTS 100 SPEED 100 MOVES B TIMER 1 = 0 2 X = TIMER (1) IF SIG 1002 GOTO 1 IF X < 10 GOTO 2 1 OPENI SET A1 = SHIFT (A1 BY 50,0,0) END SET A1 = SHIFT 5A1 BY 50, 0? 0) END SPEED 100 MOVE R1 TYPE “RELLENAR CUIDADOSAMENTE EL PALET DE LA MESA” TYPE “TECLEAR PROCEED PARA CONTINUAR” PAUSE GOTO 3 END Hay 5 errores .... Encontrarlos 126 Ejercicio de aplicación Deseamos perforar 5 agujeros en 4 coronas de quemador de gas, y esto, en 3 soportes de los cuales uno (Ref 1) está situado verticalmente. Realizar el programa utilizando la instrucción FRAME. 127 CONFIGURACIÓN DEL SISTEMA ANALÓGICO 128 Cableado de entradas analógicas En modo referencial 129