Blogia
Las Pequeñas Paranoyas de Motagirl

Scorbot + ACL (con video)

(Entrada BETA hasta que se añada el video del evento xD)

EDIT: Ya hay video! Aunque es de la primera prueba que hicimos. Se ve como funciona bien hasta que tiene que dejar las piezas en la cinta, donde hay un pequeño problema "lógico" xD Como bonus final, se nos oye disertando sobre la sentencia MOVED XD

 

Automatización, gran asignatura. Pocas otras han conseguido que los alumnos se queden una hora de clase más sin rechistar XD Y es que hoy , además, teníamos una buena razón: la práctica consistía en hacer unos miniprogramitas para que un brazo robótico hiciera cosas. Concretamente el robot, un Scorbot ER-IX, tenía que coger piezas de un plano inclinado para ponerlas en una mesa giratoria y, cuando estuvieran todas, moverlas a una cinta transportadora a distancias fijas.

No es difícil, pero había un problemilla fundamental: no tenía ni la más remota idea de programar con ACL (Lenguaje de Control Avanzado). Pero contaba con una poderosa arma de nivel-5: Un manual de 200 páginas sobre cómo utilizarlo. (y que colgaría aquí, pero como no estoy segura sobre la legalidad de esto.... a quien le interese que lo pida :3)

Ahí va una mini mini mini explicación de cómo utilizarlo (por si algún día vuestra vida depende de un bicho de estos)

En primer lugar, varias cosas importantes: El tamaño máximo de nombre de variable es 5 caracteres, las etiquetas de salto tienen que ser números, no valen caracteres raros (tildes, eñes...), ni tabuladores, y las líneas de comentarios deben empezar con asterisco y no ser excesivamente largas. Además, las distancias se miden en décimas de milímetro (cuando son lineales) y en pasos de encoder (las que son radiales).

Una vez aprendido eso (a base de "BUG DETECTED" ¬¬)... creo que va a ser más rápido si copio mi propio programa y lo explico línea a línea XD

BRICONSEJO: aparte de esta versión "plana"(lo rojo, nada mas), en mi pc trabajé con una versión "user-friendly" en la que sí que usé tabuladores y comentarios verdadosos.

Cabecera: sirve para asignar a los distintos programas (AUT10 .. AUT13) los códigos 70..73

$pr 70 AUT10
$pr 71 AUT11
$pr 72 AUT12
$pr 73 AUT13

Programa AUT11: Moverá la mesa giratoria (que se encuentra en el eje 7 del robot) una cantidad fija, concretamente 5000 pasos de encoder.

HERE asigna a la variable mes la posicion actual. Con SHIFT
BY se le indica cuánto debe moverla, y con MOVED se realiza el movimiento de un modo secuencial ( o sea, que hasta que no se mueve no se pasa a la siguiente linea). Y END tiene que estar siempre al final de cada programa.
PROGRAM AUT11
****************
HERE mes
SHIFT mes BY 7 5000
MOVED mes
END

Programa AUT12: Mueve la cinta transportadora 3000 décimas de milímetro (esta vez, el movimiento es lineal) La cantidad es negativa porque la cinta se movia "hacia acá" y no "hacia allá" xD


PROGRAM AUT12
***************
HERE mes
SHIFT mes BY 8 -3000
MOVED mes
END

Programa AUT13: Igual que el AUT11, pero la mesa gira en el sentido contrario


PROGRAM AUT13
****************
HERE mes
SHIFT mes BY 7 -5000
MOVED mes
END

Programa AUT10: El programa principal.

DEFINE: permite declarar una variable, en nuestro caso, pieza, que usaremos para contar el número de piezas (ya que a priori es desconocido). Con SET le asignamos el valor 0. LABEL define una etiqueta a la que saltaremos posteriormente (para hacer bucles, basicamente).

 


PROGRAM AUT10
*************
DEFINE pieza
SET pieza = 0
LABEL 1

IF IN[2]=1 comprueba la entrada 2 (que es un sensor colocado en el plano) para saber si hay más piezas (cuando vale 1). Si la hay, aumenta el contador de piezas, e invoca al programa AUT01 (dado por el profesor. el robot coge una pieza y la mueve a la mesa) con GOSUB. Cuando el programa AUT01 acaba de ejecutarse, se vuelve al mismo sitio desde el que se invocó. Se invoca al AUT11, el que os he contado arriba, que mueve la mesa giratoria. Luego. con el GOTO 1, se vuelve a donde pone LABEL 1 y se repite ese cacho.


IF IN[2] = 1
SET pieza = pieza + 1
GOSUB AUT11
GOSUB AUT01
GOTO 1
ELSE

Cuando no hay piezas se entra en el ELSE. Como en el paso anterior hemos ido aumentando el contador piezas hasta que sabemos cuántas piezas tenemos que mover, este paso tendremos que realizarlo ese mismo número de veces. Por eso, mientras el contador diga que hay más de 0 piezas es que nos queda alguna por mover. Le restamos uno, e invocamos con GOSUB al programa AUT02 (también proporcionado por el profesor, coge una pieza de la mesa giratoria y la translada a la cinta transportadora) y luego al AUT13 para desplazar la mesa en el sentido contrario (y estar preparados para coger la pieza siguiente.
LABEL 2
IF pieza > 0
SET pieza = pieza - 1
GOSUB AUT02
GOSUB AUT13

Aquí controlamos el movimiento de la cinta una vez hemos movido la pieza. La cinta tiene un sensor a una determinada distancia de la zona donde caen las piezas: la cinta tiene que estar en marcha hasta que la pieza llega allí (para que las piezas queden todas a la misma distancia) Para ello, consultamos el sensor de la entrada 1: si vale 0 es que la pieza no ha llegado todavía al sensor, así que la cinta debe seguir avanzando (invocamos al AUT12), y estamos en ese feliz bucle hasta que se detecta la pieza. Entonces, movemos una vez más: para que salga del rango del sensor y cuando comparemos con la siguiente pieza NO valga 1, y volvemos a repetir desde LABEL 2.
LABEL 3
IF IN[1] = 0
GOSUB AUT12
GOTO 3
ELSE
GOSUB AUT12
GOTO 2
ENDIF
ENDIF
ENDIF

CLRBUFB
END

Cuando ya no quedan piezas, se sale de todos los IF y ELSE (con los ENDIF) , limpiamos el bufer "porsiaca" (CLRBUFB) y terminamos con un END como una casa :D

Despues de escribir el programilla, se le envía a la parte de control del sistema, donde se comprueba su sintaxis y se cargan en el bicho :) Luego se le da la orden RUN AUT10 y a correr!!

WARNING: Me encantaría decir que el programa va perfecto... pero sólo he podido probar la mitad porque a los del grupo de antes se les ha roto la mesa giratoria por un choque bastante brutal con la pinza del bicho :/ Pero tendremos la esperanza xD (Y eso que jamás he visto usar un botón del pánico tantas veces en tan poco tiempo xD)

Y eso es todo, creo. Si Skelv cuelga el video, lo añadiré a esta entrada =^_^= (por eso es beta)

4 comentarios

Levinor -

El video no carga x_X , se queda el espacio en blanco y au...

Lord_Kote -

video!!! video!!!
Si tienes el que video rompen la mesa, cuelgalo también ^^

Señor Gil -

AAAhhhhh ha nombrado al innombrable Autocad XDDDDD, viva el Ansys!!!

TANDRO -

Qué dulces recuerdos me has traído de AUTOCAD. xD