Práctica 5.0. Subrutinas El contenido difundido o publicado compromete exclusivamente a los autores. Pallet de 3x3 con tres alturas. Proyectos de innovación: CÉLULA ROBOTIZADA • IES José del Campo – Ampuero (Cantabria). • Salesianos San Luis Rey – Palma del Rio (Andalucía). • IFPS Repelega – Portugalete (País Vasco). • CIFP Nº1 Simón de Colonia – Burgos (Castilla León). • CIFP de los Sectores Industrial y Servicios – Gijón (Asturias). • INS Escola del Treball – Lleida (Catalunya). • Salesianos Virgen del Pilar – Zaragoza (Aragón). • IES Jaume I Ontinyent – (Comunidad Valenciana). • IES Armeria Eskola – Eibar (Pais Vasco). • IES Miguel Altuna – Bergara (País Vasco). • IES Ribera del Arga – Peralta (Navarra). • Festo Pneumatic, S.A.U. (Barcelona). INDICE 1. Bloque de ejercicios para familiarizarse con el código de Nivel 5. SUBRUTINAS ........... 3 1.1.- ENUNCIADO .............................................................................................................................................. 3 1.2.- Conocimientos previos. ............................................................................................................................... 3 1.2.1.- Sintaxis de la instrucción GOSUB. ........................................................................................................... 3 1.2.2.- Sintaxis de la instrucción RETURN. ......................................................................................................... 4 1.2.3.- Sintaxis de la instrucción GOTO. ............................................................................................................. 5 1.3.- Descripción de las entradas, salidas y instrucciones a utilizar. ...................................................................... 5 1.4.- Elementos del programa / simulación........................................................................................................... 5 1.5.- Descripción del programa............................................................................................................................ 6 1.6.- Programa a realizar..................................................................................................................................... 6 Proyectos de Innovación: Célula Robotizada Practica 5.0 Pallet doble 3x3 Subrutinas.doc Página 2 de 8 1. BLOQUE DE EJERCICIOS PARA FAMILIARIZARSE CON EL CÓDIGO DE NIVEL 5. SUBRUTINAS 1.1.- ENUNCIADO Se desea construir 1 pallet de 3x3 piezas, con tres alturas. Primero se realizará el programa sin subrutinas, una vez esté en funcionamiento se pasará a programarlo con una subrutina. Para iniciar el proceso será necesario esperar a que existan piezas al final de la rampa. Esto se identificará mediante PART_AV. Las piezas son aportadas al proceso, por lo que se deberá identificar el color de la pieza y llevarlo al pallet correspondiente. Hasta que no esté el pallet completo se seguirán aportando piezas. Una vez que se alcancen las 27 piezas del pallet, el proceso se detendrá. 1.2.- Conocimientos previos. En esta práctica ya debemos controlar operaciones como OVDR, SPD de control de velocidad del equipo; operaciones de MOV, MVS, etc., como movimientos del brazo robot; bucles de control con las instrucciones WHILE / WEND; y definición de variables como serán INTE, POS, IO, PLT. 1.2.1.- Sintaxis de la instrucción GOSUB. La explicación de la expresión es Go Subroutine. Función: Es acceder a la subrutina que se llama en la etiqueta que acompaña a la instrucción. En la sintaxis la podemos encontrar como <Call destination>. Es el parámetro que la acompaña. Sintaxis: GOSUB <Call destination> Parámetros: <Call Destination> Describe el nombre de la etiqueta. Explicación: Aunque se puede llamar al parámetro de la forma que podamos identificarla por su lectura, se recomienda que cuando se llame a una subrutina en el programa base, utilice un nombre de etiqueta que comienza con "L_" (label). Hay que tener presente que se ejecutará cuando se llame y a cuantas etiquetas tengan el mismo nombre la rutina del programa será ejecutada. Proyectos de Innovación: Célula Robotizada Practica 5.0 Pallet doble 3x3 Subrutinas.doc Página 3 de 8 1.2.2.- Sintaxis de la instrucción RETURN. Función: Cuando se utiliza en un subprograma o en una subrutina, hace que se regrese a la instrucción siguiente a la que se produjo la llamada. Sintaxis: En una subrutina tiene la función de retorno sin que le acompañe un parámetro, por lo que la instrucción queda como RETURN. Sintaxis en interrupciones: Al utilizarse en interrupciones se debe acompañar a la instrucción RETURN de los valores que nos permitan saber donde se retorna después de haberse ejecutado las instrucciones de la interrupción. RETURN 0 Devolver el control a la línea donde se generó la interrupción. RETURN 1 Devolver el control a la siguiente línea después de la línea donde se emitió la alarma. Explicación: Cuando hay un comando RETURN en una subrutina normal con un retorno al número de designación, y cuando hay un comando RETURN en una subrutina de interrupción de procesamiento sin retorno a número de destino, se producirá un error. Escribe la instrucción de retorno al final de la tramitación destino del salto llamado por la instrucción GOSUB Se produce un error si la instrucción RETURN se ejecuta sin ser llamado por la instrucción GOSUB. Utilice siempre la instrucción RETURN para volver de una subrutina cuando es llamado por la instrucción GOSUB. Se produce un error si la instrucción GOTO se utiliza para devolver, porque la memoria libre disponible para la estructura de control (memoria de pila) se reduce y, finalmente, se vuelve insuficiente. Proyectos de Innovación: Célula Robotizada Practica 5.0 Pallet doble 3x3 Subrutinas.doc Página 4 de 8 1.2.3.- Sintaxis de la instrucción GOTO. Función: Es un salto incondicional a la etiqueta que acompaña a la instrucción. Sintaxis: GOTO <etiqueta destino> Parámetros: <etiqueta destino> Explicaciones: GOTO no se puede mandar a una etiqueta en el programa base. Así pues, incluso si el nombre de la etiqueta es designada en el programa de base, el error de ningún salto destino se producirá. 1.3.- Descripción de las entradas, salidas y instrucciones a utilizar. Nombre PART_AV Descripción Sensor al final de rampa de aporte Dirección Función Bit 6 Entrada de piezas 1.4.- Elementos del programa / simulación Proyectos de Innovación: Célula Robotizada Practica 5.0 Pallet doble 3x3 Subrutinas.doc Página 5 de 8 1.5.- Descripción del programa Las piezas se irán incorporando al proceso por el módulo de rampa. En la peana del final de la rampa hay un sensor (PART_AV) que detectará la presencia de pieza en este lugar. Una vez que se han completado las tres alturas del pallet el proceso habrá terminado. En este instante el brazo robot estará en reposo. 1.6.- Programa a realizar sin subrutinas 1.6.1.- Programa a realizar sin subrutinas '----------------------------------------------------------------' 'Definimos las variables de posicionamiento para los puntos del 'palet como son las tres esquinas del mismo. '----------------------------------------------------------------' DEF POS P1 DEF POS P6 DEF POS P99 DEF POS P100 'Posicion incial del palet grabada en el lugar DEF POS P101 DEF POS P102 '----------------------------------------------------------------' 'Definimos la variable de posicionamiento para la posion de 'seguridad del brazo. DEF POS VECZ50 VECZ50 = (0.00, 0.00, +50.00, 0.00, 0.00, 0.00) DEF POS VECZ25 VECZ25 = (0.00, 0.00, 00.00, 0.00, 0.00, 0.00) '----------------------------------------------------------------' 'Definimos variables enteras para poder realizar el bucle while 'incrementando una variable como contador. DEF INTE M DEF INTE N '----------------------------------------------------------------' 'Definimos la variable para usarla en el bucle para while/wend 'asignando el palet y el contador de piezas DEF POS P70 '----------------------------------------------------------------' 'Asignamos valores a cada una de las posisciones de las esquinas 'del palet. P101 = P100 + (100,0,0,0,0,0) P102 = P100 + (0,-100,0,0,0,0) '----------------------------------------------------------------' 'Definimos la entrada del sensor de la rampa para la puesta en 'marcha del robot DEF IO Srampa = BIT, 6 'Detectro de pieza en rampa '----------------------------------------------------------------' 'Definimos el palet. DEF PLT 1, P100, P101, P102, ,3,3,2 '----------------------------------------------------------------' 'Velocidades OVRD 50 SPD 50 '----------------------------------------------------------------' 'PROGRAMA. *INICIO MOV P99 'Llevamos el brazo a la posicion de seguridad HOPEN 1 'Nos aseguramos que la pinza esta abierta N =1 Proyectos de Innovación: Célula Robotizada Practica 5.0 Pallet doble 3x3 Subrutinas.doc Página 6 de 8 WHILE (N <= 3) M = 1 'Asignamos el primer valor del palet WHILE (M<=9) 'Iniciomos el bucle *L0 'Permaneceremos en este lazo hasta que exista pieza en la 'rampa IF Srampa = 0 THEN *L0 HOPEN 1 'Nos aseguramos que la pinza esta abierta MOV P99 'Llevamos el brazo a la posicion de seguridad DLY 0.5 MOV P1 + VECZ50 'Nos desplazamos a la posicion 1 con seguridad MVS P1 'Desplazamiento lineal hasta P1 DLY 0.5 HCLOSE 1 'Cerramos la pinza DLY 0.5 MVS P1 + VECZ50 'Nos desplazamos a la posicion 1 con seguridad MOV P100 + VECZ50 + VECZ25 'Nos desplazamos a la posicion 100 con 'seguridad P70 = (PLT 1, M)+ VECZ25 MOV P70 + VECZ50 'Nos desplazamos a la posicion 70 con seguridad MVS P70 'Y nos movemos linealmente hasta la posicion DLY 0.5 HOPEN 1 DLY 0.5 MVS P70 + VECZ50 'Nos desplazamos a la posicion 70 con seguridad M = M + 1 MOV P99 WEND N = N +1 VECZ25 = VECZ25 + (0.00, 0.00, +25.00, 0.00, 0.00, 0.00) WEND GOTO *INICIO End 1.6.2.- Programa a realizar con subrutinas '----------------------------------------------------------------' 'Definimos las variables de posicionamiento para los puntos del 'palet como son las tres esquinas del mismo. '----------------------------------------------------------------' DEF POS P1 DEF POS P6 DEF POS P99 DEF POS P100 'Posicion incial del palet grabada en el lugar DEF POS P101 DEF POS P102 '----------------------------------------------------------------' 'Definimos la variable de posicionamiento para la posion de 'seguridad del brazo. DEF POS VECZ50 VECZ50 = (0.00, 0.00, +50.00, 0.00, 0.00, 0.00) DEF POS VECZ25 VECZ25 = (0.00, 0.00, 00.00, 0.00, 0.00, 0.00) '----------------------------------------------------------------' 'Definimos variables enteras para poder realizar el bucle while 'incrementando una variable como contador. DEF INTE M DEF INTE N '----------------------------------------------------------------' 'Definimos la variable para usarla en el bucle para while/wend 'asignando el palet y el contador de piezas DEF POS P70 '----------------------------------------------------------------' 'Asignamos valores a cada una de las posisciones de las esquinas 'del palet. P101 = P100 + (100,0,0,0,0,0) Proyectos de Innovación: Célula Robotizada Practica 5.0 Pallet doble 3x3 Subrutinas.doc Página 7 de 8 P102 = P100 + (0,-100,0,0,0,0) '----------------------------------------------------------------' 'Definimos la entrada del sensor de la rampa para la puesta en 'marcha del robot DEF IO Srampa = BIT, 6 'Detectro de pieza en rampa '----------------------------------------------------------------' 'Definimos el palet. DEF PLT 1, P100, P101, P102, ,3,3,2 '----------------------------------------------------------------' 'Velocidades OVRD 50 SPD 50 '----------------------------------------------------------------' 'PROGRAMA. *INICIO MOV P99 'Llevamos el brazo a la posicion de seguridad HOPEN 1 'Nos aseguramos que la pinza esta abierta N =1 WHILE (N <= 3) M = 1 'Asignamos el primer valor del palet GoSub *RellenarAltura N = N +1 VECZ25 = VECZ25 + (0.00, 0.00, +25.00, 0.00, 0.00, 0.00) WEND GOTO *INICIO End *RellenarAltura WHILE (M<=9) 'Iniciomos el bucle *L0 'Permaneceremos en este lazo hasta que exista pieza en la 'rampa IF Srampa = 0 THEN *L0 HOPEN 1 'Nos aseguramos que la pinza esta abierta MOV P99 'Llevamos el brazo a la posicion de seguridad DLY 0.5 MOV P1 + VECZ50 'Nos desplazamos a la posicion 1 con seguridad MVS P1 'Desplazamiento lineal hasta P1 DLY 0.5 HCLOSE 1 'Cerramos la pinza DLY 0.5 MVS P1 + VECZ50 'Nos desplazamos a la posicion 1 con seguridad MOV P100 + VECZ50 + VECZ25 'Nos desplazamos a la posicion 100 con seguridad P70 = (PLT 1, M)+ VECZ25 MOV P70 + VECZ50 'Nos desplazamos a la posicion 70 con seguridad MVS P70 'Y nos movemos linealmente hasta la posicion DLY 0.5 HOPEN 1 DLY 0.5 MVS P70 + VECZ50 'Nos desplazamos a la posicion 70 con seguridad M = M + 1 MOV P99 WEND Return Proyectos de Innovación: Célula Robotizada Practica 5.0 Pallet doble 3x3 Subrutinas.doc Página 8 de 8