Boletín de problemas de Scorbot/ACL (soluciones) ROBÓTICA 5º curso de Ingeniero en Informática, Curso 2006-07 Advertencias generales: • Estas soluciones no son las únicas posibles ni correctas. • La indentación se ha incluido para mayor claridad, pero no es posible realizarla en el editor del ATS. • Dado que esta es la primera edición del boletín, no se descarta que existan erratas. Se ruega comunicar al profesor cualquier incidencia observada, y estar atentos a la publicación de posibles actualizaciones. P1: 3 cm Y X POS1 Tornillo apretado En modo manual: * Referencias del enunciado DEFP POS1 DEFP POSR * Posiciones de aproximación DEFP POSRA DEFP PACTA * Posiciones auxiliares DEFP PACT DEFP ATOR Inicializar POS1 y POSR (HERE) Programa TORN: * Indice DEFINE IT * Pinza abierta; posiciones PACT y * PACTA sobre POS1 * POSRA sobre POSR OPEN DELAY 50 SETP PACT=POS1 SETP PACTA=POS1 SHIFTC PACTA BY Z 1000 SETP POSRA = POSR SHIFTC POSRA BY Z 1000 * Para cada tornillo FOR IT=1 TO 4 WAIT IN[1]=1 * Coger tornillo MOVE POSRA MOVELD POSR CLOSE DELAY 50 * Llevar a posicion actual MOVE PACTA MOVELD PACT * Apretar GOSUB APR * Soltar OPEN DELAY 50 MOVEL PACTA * Actualizar posición SHIFTC PACT BY X 300 SHIFTC PACTA BY X 300 ENDFOR END Programa APR (usado como subrutina): * Referencia: La posición actual * ATOR sigue al tornillo en su descenso HERE ATOR LABEL 1 * Salir de bucle cuando esta apretado IF IN[2]=1 GOTO 2 ENDIF * Movimiento incremental * Se supone que no llega al tope de giro SHIFTC ATOR BY R 600 SHIFTC ATOR BY Z -2 MOVELD ATOR * Ahora suelta, deshace el giro y agarra * de nuevo para no acumular tensiones * ni superar limites del robot * (no se exige en el enunciado) OPEN DELAY 50 SHIFTC ATOR BY R -600 MOVED ATOR CLOSE DELAY 50 GOTO 1 LABEL 2 END P2: 10 cm P1 POSR POSS Y X En modo manual: * Posiciones de referencia del enunciado DEFP POSW DEFP POSR DEFP POSS DEFP P1 Inicializar POSW, POSR, POSS y P1 (comando HERE) * Vectores de posiciones de puestos de mecanizado y * posiciones de aproximación DEFP PT[4] DEFP PTA[4] Inicializar PTA[I] como relativas a PT[I] en cartesianas, 15 cm por encima (comando TEACHR con offset en Z de 1500, los demás a cero) * Otras posiciones de aproximación y auxiliares DEFP POSRA DEFP POSSA DEFP PAUX Inicializar POSRA y POSSA como relativas a POSR y POSS en cartesianas, 15 cm por encima (comando TEACHR con offset en Z de 1500, los demás a cero) Programa APLIC: * Indices DEFINE IP DEFINE IPL * Flag de carga ejecutada DEFINE FLAG * Cuenta de puntos de mecanizado libres DEFINE LIBRE * Flags de puntos de mecanizado libres DIM PLIB[4] * Pinza abierta; ir a posición de espera OPEN DELAY 50 MOVE POSW * Inicializar posiciones SETP PAUX=P1 FOR IP=1 TO 4 SETP PT[I]=PAUX SHIFTC PAUX BY X 1000 SET PLIB[IP]=1 ENDFOR END * Bucle principal SET LIBRE=4 LABEL 1 * Esperar OR de entradas * Dos posibilidades: Acaba un puesto o llega * una pieza * Lo mas prioritario es desalojar piezas WAIT IN[7]=1 * Bucle para desalojar todas las piezas acabadas * Podrían acabar otras mientras se recogen las ya * terminadas SET FLAG=1 LABEL 2 * Si no hay peticiones de desalojo, acabar bucle IF FLAG=0 GOTO 3 ENDIF * Identificar petición de desalojo, si la hay SET FLAG=0 FOR IP=1 TO 4 IF IN[IP]=1 * Coger pieza MOVE PTA[IP] MOVELD PT[IP] CLOSE DELAY 50 MOVEL PTA[IP] * Soltar pieza en cinta MOVE POSSA MOVELD POSS OPEN DELAY 50 MOVEL POSSA * Esperar a que desaparezca WAIT IN[6]=0 * Actualizar variables SET FLAG=1 SET LIBRE=LIBRE+1 SET PLIB[IP]=1 ENDIF ENDFOR GOTO 2 * Ya no quedan piezas acabadas LABEL 3 * Recogida de piezas IF LIBRE>0 IF IN[5]=1 * Coger pieza de cinta MOVE POSRA MOVELD POSR CLOSE DELAY 50 MOVEL POSRA * Buscar puesto libre FOR IP=1 TO 4 IF LIB[IP]=1 SET IPL=IP ENDIF ENDFOR * Descargar pieza MOVE TPA[IPL] MOVELD TP[IPL] OPEN DELAY 50 MOVEL TPA[IPL] * Actualizar indicadores SET LIBRE=LIBRE-1 SET LIB[IPL]=0 ENDIF ENDIF * Ir a espera MOVE POSW GOTO 1 END P3: Solución pendiente de publicación.