Soluciones

Anuncio
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.
Descargar