Anda di halaman 1dari 30

Análisis de Resultado Guía 6

PARTE I
10 '*****************UNIVERSIDAD DON BOSCO******************
20 '* FUNDAMENTOS DE ROBÓTICA *
30 '* *
40 '* PRÁCTICA - 9 *
50 '* INTERRUPCIONES *
60 '* PARTE 1 *
70 '* Fecha: *
80 '* Comentarios: *
90 '* *
100 '*********************************************************
110 DEF POS HORNO ' Declaración variable posición HORNO
120 DEF POS OFFSET ' Declaración variable posición OFFSET
130 DEF POS P9 ' Declaración variable posición P9
140 HORNO = (0,0,+50,0,0,0) ' Definición de HORNO
150 OFFSET = (0,0,+60,0,0,0) ' Definición de OFFSET
160 DEF IO N_PASTEL = BIT,10
170 DEF ACT 1, M_IN(10) = 1 GOSUB *COCER ' Definición interrupción COCER
180 DEF ACT 2, M_TIMER(1) > 30000 GOSUB *RETIRAR ' Definición
interrupción RETIRAR
190 DEF INTE NPP ' Declaración variable entera NPP
200 DEF INTE CONTADOR ' Declaración variable entera CONTADOR
210 DEF INTE RAPIDO ' Declaración variable entera RAPIDO
220 DEF INTE LENTO ' Declaración variable entera LENTO
230 DEF PLT 1, P4, P5, P6, P7, 3, 3, 2 ' Definición del palet 1
240 SPD 500 ' Definición de la velocidad de movimientos interpolados a
500 mm/s
250 RAPIDO = 40 ' Definición de RAPIDO
260 LENTO = 15 ' Definición de LENTO
270
'........................................................................
..................
280 HOPEN 1 ' Abrir Pinza
290 OVRD RAPIDO ' Velocidad al 40%
300 MOV P1 ' Movimiento no interpolado a la posición P1
310 ACT 1 = 1 ' Habilita la interrupción 1
320 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
330 *INI ' Etiqueta INI
340 NPP = 1 ' Inicialización del contador NPP
350 CONTADOR = 0
360 WHILE (NPP <= 9) ' Mientras NPP sea inferior a 10, se ejecutará el
bucle del WHILE
370 P9 = (PLT 1, NPP) ' Asignamos el valor de una posición del palet a la
variable de posición P9
380 MOV P9 + OFFSET ' Movimiento no interpolado a la posición P9+OFFSET
390 OVRD LENTO ' Velocidad al 15%
400 WHILE (CONTADOR <= NPP) ' Mientras CONTADOR sea inferior a NPP, se
ejecutará el WHILE
410 MVS P9 ' Movimiento recto a la posición P9
420 DLY 0.5
430 MVS P9 + OFFSET ' Movimiento recto a la suma de coordenadas de P9 +
OFFSET
440 CONTADOR = CONTADOR + 1 ' Actualización del contador CONTADOR
450 WEND ' Fin del WHILE
460 OVRD RAPIDO ' Velocidad al 40%
470 NPP = NPP + 1 ' Actualización del contador NPP
480 WEND ' Fin del WHILE
490 GOTO *INI ' Salto a la etiqueta INI
500 END ' Fin del programa
510 '--------------------------------------------------------------------
-----------------
520 *TOMAR_P ' Inicio de la subrutina *TOMAR_P
530 OVRD RAPIDO ' Velocidad al 40%
540 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
550 OVRD LENTO ' Velocidad al 15%
560 MVS P2 ' Movimiento recto a la posición P2
570 HCLOSE 1 ' Cierra pinza
580 DLY 0.5 ' Espera de 0.5 segundos
590 MVS P2 + OFFSET ' Movimiento recto a la suma de coordenadas de P2 +
OFFSET
600 OVRD RAPIDO ' Velocidad al 40%
610 RETURN ' Final de la subrutina AGARRAR_P
620 '--------------------------------------------------------------------
------------------
630 *DEJAR_P ' Inicio de la subrutina DEJAR_P
640 OVRD RAPIDO ' Velocidad al 40%
650 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
660 OVRD LENTO ' Velocidad al 15%
670 MVS P2 ' Movimiento recto a la posición P2
680 HOPEN 1 ' Abrir Pinza
690 DLY 0.5 ' Espera de 0.5 segundos
700 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
710 OVRD RAPIDO ' Velocidad al 40%
720 RETURN ' Final de la subrutina DEJAR_P
730 '--------------------------------------------------------------------
------------------
740 *COCER ' Inicio de la interrupción COCER
750 ACT 1 = 0 ' Deshabilita la interrupción 1
760 OVRD RAPIDO ' Velocidad al 40%
770 MOV P1 ' Movimiento no interpolado a la posición P1
780 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
790 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
800 OVRD LENTO ' Velocidad al 15%
810 MVS P3 ' Movimiento recto a la posición P3
820 HCLOSE 1 ' Cierra pinza
830 DLY 0.5 ' Espera de 0.5 segundos
840 MVS P3 + OFFSET ' Movimiento recto a la suma de coordenadas de P3 +
OFFSET
850 OVRD RAPIDO ' Velocidad al 40%
860 MOV P8 + HORNO ' Movimiento no interpolado a la posición P8+OFFSET
870 OVRD LENTO ' Velocidad al 15%
880 MVS P8 ' Movimiento recto a la posición P8
890 HOPEN 1 ' Abrir Pinza
900 DLY 0.5 ' Espera de 0.5 segundos
910 MVS P8 + HORNO ' Movimiento recto a la suma de coordenadas de P8 +
HORNO
920 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
930 MOV P1 ' Movimiento no interpolado a la posición P1
940 ACT 2 = 1 ' Habilita la interrupción 2
950 M_TIMER(1) = 0 ' Inicialización del reloj a cero
960 RETURN 0 ' Final de la interrupción COCER
970 '--------------------------------------------------------------------
------------------
980 *RETIRAR ' Inicio de la interrupción RETIRAR
990 DLY 3 ' Espera de 3 segundos
1000 ACT 2 = 0 ' Deshabilita la interrupción 2
1010 OVRD RAPIDO ' Velocidad al 40%
1020 MOV P1 ' Movimiento no interpolado a la posición P1
1030 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
1040 MOV P8 + HORNO ' Movimiento no interpolado a la posición P8+HORNO
1050 OVRD LENTO ' Velocidad al 15%
1060 MVS P8 ' Movimiento recto a la posición P8
1070 HCLOSE 1 ' Cierra pinza
1080 DLY 0.5 ' Espera de 0.5 segundos
1090 MVS P8 + HORNO ' Movimiento recto a la suma de coordenadas de P8 +
HORNO
1100 OVRD RAPIDO ' Velocidad al 40%
1110 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
1120 OVRD LENTO ' Velocidad al 15%
1130 MVS P3 ' Movimiento recto a la posición P3
1140 HOPEN 1 ' Abrir Pinza
1150 DLY 0.5 ' Espera de 0.5 segundos
1160 MVS P3 + OFFSET ' Movimiento recto a la suma de coordenadas de P3 +
OFFSET
1170 OVRD RAPIDO ' Velocidad al 40%
1180 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
1190 MOV P1 ' Movimiento no interpolado a la posición P1
1200 RETURN 0 ' Final de la interrupción RETIRAR

¿Cómo funciona el programa al solo ejecutarlo?


R// Cuando se ejecuta el programa la garra toma la pieza de punzado hacia el
paletizado 3x3, el proceso es cíclico. Cuando la entrada 10 es 1 durante el proceso
regresa la pieza de punzado por donde estaba antes y toma el pastel hasta el horno
y toma de nuevo el punzado y continua con el paletizado, inicia un conteo de 30
segundos, cuando concluya regresa de nuevo la pieza punzante y toma el pastel que
se dejó en el horno y lo devuelve hasta su posición anterior y finalmente toma la pieza
punzante y continua con el paletizado.

¿Qué sucede al programa al activar la señal de inicio (Forzar la activación de la entrada 10


a 1 y luego a 0) de la cocción de pastel?
R// Se detiene el paletizado y se deja la pieza punzante hacia donde estaba, toma el
pastel y la deja en la posición de horneado y luego toma la pieza punzante.

¿Espera el programa, en CIROS Robotics, los 30 segundos para recoger el pastel?


R// Si
¿Qué sucede si volvemos a activar la señal de inicio (Forzar la activación de la entrada 10
a 1 y luego a 0) de la cocción de pastel?
R// No se podrá realizar la ejecución de nuevo debido a que en el proceso del
programa la habilitación de las interrupciones están negadas booleanamente asi que
solo se repite el paletizado.

PARTE II
Modifique el programa para que se vuelvan a habilitar las interrupciones luego de
ejecutarlas, de manera que otra activación del pulsador de inicio de la cocción repita las
subrutinas de interrupción.

10 DEF POS HORNO ' Declaración variable posición HORNO


20 DEF POS OFFSET ' Declaración variable posición OFFSET
30 DEF POS P9 ' Declaración variable posición P9
40 HORNO = (0,0,+50,0,0,0) ' Definición de HORNO
50 OFFSET = (0,0,+60,0,0,0) ' Definición de OFFSET
60 'DEF IO N_PASTEL = BIT,10
70 DEF ACT 1, M_IN(10) = 1 GOSUB *COCER ' Definición interrupción COCER
80 DEF ACT 3, M_IN(11) = 1 GOSUB *PARO
80 DEF ACT 2, M_TIMER(1) > 30000 GOSUB *RETIRAR ' Definición interrupción RETIRAR
90 DEF INTE NPP ' Declaración variable entera NPP
100 DEF INTE CONTADOR ' Declaración variable entera CONTADOR
110 DEF INTE RAPIDO ' Declaración variable entera RAPIDO
120 DEF INTE LENTO ' Declaración variable entera LENTO
130 DEF PLT 1, P4, P5, P6, P7, 3, 3, 2 ' Definición del palet 1
140 SPD 500 ' Definición de la velocidad de movimientos interpolados a 500 mm/s
150 RAPIDO = 40 ' Definición de RAPIDO
160 LENTO = 15 ' Definición de LENTO
170 '..........................................................................................
180 HOPEN 1 ' Abrir Pinza
190 OVRD RAPIDO ' Velocidad al 40%
200 MOV P1 ' Movimiento no interpolado a la posición P1
210 ACT 1 = 1 ' Habilita la interrupción 1
220 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
230 *INI ' Etiqueta INI
240 NPP = 1 ' Inicialización del contador NPP
250 CONTADOR = 0 ' Inicialización del contador CONTADOR
260 WHILE (NPP <= 9) ' Mientras NPP sea inferior a 10, se ejecutará el bucle del WHILE
270 P9 = (PLT 1, NPP) ' Asignamos el valor de una posición del palet a la variable de
posición P9
280 MOV P9 + OFFSET ' Movimiento no interpolado a la posición P9+OFFSET
290 OVRD LENTO ' Velocidad al 15%
300 WHILE (CONTADOR < NPP) ' Mientras CONTADOR sea inferior a NPP, se ejecutará
el WHILE
310 MVS P9 ' Movimiento recto a la posición P9
320 MVS P9 + OFFSET ' Movimiento recto a la suma de coordenadas de P9 + OFFSET
330 CONTADOR = CONTADOR + 1 ' Actualización del contador CONTADOR
340 WEND ' Fin del WHILE
350 OVRD RAPIDO ' Velocidad al 40%
360 NPP = NPP + 1 ' Actualización del contador NPP
370 WEND ' Fin del WHILE
380 GOTO *INI ' Salto a la etiqueta INI
390 END ' Fin del programa
400 '-------------------------------------------------------------------------------------
410 *TOMAR_P ' Inicio de la subrutina *TOMAR_P
420 OVRD RAPIDO ' Velocidad al 40%
430 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
440 OVRD LENTO ' Velocidad al 15%
450 MVS P2 ' Movimiento recto a la posición P2
460 HCLOSE 1 ' Cierra pinza
470 DLY 0.5 ' Espera de 0.5 segundos
480 MVS P2 + OFFSET ' Movimiento recto a la suma de coordenadas de P2 + OFFSET
490 OVRD RAPIDO ' Velocidad al 40%
500 RETURN ' Final de la subrutina AGARRAR_P
510 '--------------------------------------------------------------------------------------
520 *DEJAR_P ' Inicio de la subrutina DEJAR_P
530 OVRD RAPIDO ' Velocidad al 40%
540 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
550 OVRD LENTO ' Velocidad al 15%
560 MVS P2 ' Movimiento recto a la posición P2
570 HOPEN 1 ' Abrir Pinza
580 DLY 0.5 ' Espera de 0.5 segundos
590 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
600 OVRD RAPIDO ' Velocidad al 40%
610 RETURN ' Final de la subrutina DEJAR_P
620 '--------------------------------------------------------------------------------------
630 *COCER ' Inicio de la interrupción COCER
640 ACT 1 = 0 ' Deshabilita la interrupción 1
650 OVRD RAPIDO ' Velocidad al 40%
660 MOV P1 ' Movimiento no interpolado a la posición P1
670 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
680 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
690 OVRD LENTO ' Velocidad al 15%
700 MVS P3 ' Movimiento recto a la posición P3
710 HCLOSE 1 ' Cierra pinza
720 DLY 0.5 ' Espera de 0.5 segundos
730 MVS P3 + OFFSET ' Movimiento recto a la suma de coordenadas de P3 + OFFSET
740 OVRD RAPIDO ' Velocidad al 40%
750 MOV P8 + HORNO ' Movimiento no interpolado a la posición P8+OFFSET
760 OVRD LENTO ' Velocidad al 15%
770 MVS P8 ' Movimiento recto a la posición P8
780 HOPEN 1 ' Abrir Pinza
790 DLY 0.5 ' Espera de 0.5 segundos
800 MVS P8 + HORNO ' Movimiento recto a la suma de coordenadas de P8 + HORNO
810 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
820 MOV P1 ' Movimiento no interpolado a la posición P1
830 ACT 2 = 1 ' Habilita la interrupción 2
840 M_TIMER(1) = 0 ' Inicialización del reloj a cero
850 RETURN 0 ' Final de la interrupción COCER
860 '--------------------------------------------------------------------------------------
870 *RETIRAR ' Inicio de la interrupción RETIRAR
880 DLY 3 ' Espera de 3 segundos
890 ACT 2 = 0 ' Deshabilita la interrupción 2
900 OVRD RAPIDO ' Velocidad al 40%
910 MOV P1 ' Movimiento no interpolado a la posición P1
920 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
930 MOV P8 + HORNO ' Movimiento no interpolado a la posición P8+HORNO
940 OVRD LENTO ' Velocidad al 15%
950 MVS P8 ' Movimiento recto a la posición P8
960 HCLOSE 1 ' Cierra pinza 1070 DLY 0.5 ' Espera de 0.5 segundos
970 DLY 0.5 ' Espera de 0.5 segundos
980 MVS P8 + HORNO ' Movimiento recto a la suma de coordenadas de P8 + HORNO
990 OVRD RAPIDO ' Velocidad al 40%
1000 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
1010 OVRD LENTO ' Velocidad al 15%
1020 MVS P3 ' Movimiento recto a la posición P3
1030 HOPEN 1 ' Abrir Pinza
1040 DLY 0.5 ' Espera de 0.5 segundos
1050 MVS P3 + OFFSET ' Movimiento recto a la suma de coordenadas de P3 + OFFSET
1060 OVRD RAPIDO ' Velocidad al 40%
1070 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
1080 MOV P1 ' Movimiento no interpolado a la posición P1
1090 ACT 1 = 1 ' Habilita la interrupción 1
1100 ACT 2 = 1 ' habilita la interrupción 2
1110 RETURN 0 ' Final de la interrupción RETIRAR

¿Cómo funciona el programa con los cambios?


R// Al activar la entrada 10 realiza el mismo procedimiento, una vez ejecutada la
acción se escribe la habilitación de las interrupciones.

Modifique el programa para que ahora tenga un botón paro que lleve al robot a P1
y termine el programa.

10 DEF POS HORNO ' Declaración variable posición HORNO


20 DEF POS OFFSET ' Declaración variable posición OFFSET
30 DEF POS P9 ' Declaración variable posición P9
40 HORNO = (0,0,+50,0,0,0) ' Definición de HORNO
50 OFFSET = (0,0,+60,0,0,0) ' Definición de OFFSET
60 'DEF IO N_PASTEL = BIT,10
70 DEF ACT 1, M_IN(10) = 1 GOSUB *COCER ' Definición interrupción COCER
80 DEF ACT 2, M_TIMER(1) > 30000 GOSUB *RETIRAR ' Definición interrupción RETIRAR
90 DEF INTE NPP ' Declaración variable entera NPP
100 DEF INTE CONTADOR ' Declaración variable entera CONTADOR
110 DEF INTE RAPIDO ' Declaración variable entera RAPIDO
120 DEF INTE LENTO ' Declaración variable entera LENTO
130 DEF PLT 1, P4, P5, P6, P7, 3, 3, 2 ' Definición del palet 1
140 SPD 500 ' Definición de la velocidad de movimientos interpolados a 500 mm/s
150 RAPIDO = 40 ' Definición de RAPIDO
160 LENTO = 15 ' Definición de LENTO
160 ACCION = 0 ' Definición de la variable ACCION
170 '..........................................................................................
180 HOPEN 1 ' Abrir Pinza
190 OVRD RAPIDO ' Velocidad al 40%
200 WHILE (M_ IN(11) = 0)
210 MOV P1 ' Movimiento no interpolado a la posición P1
220 ACT 1 = 1 ' Habilita la interrupción 1
230 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
240 *INI ' Etiqueta INI
250 NPP = 1 ' Inicialización del contador NPP
260 ACCION = 1 ' detener proceso de paletizado
270 WHILE (NPP <= 9) ' Mientras NPP sea inferior a 10, se ejecutará el bucle del WHILE
280 P9 = (PLT 1, NPP) ' Asignamos el valor de una posición del palet a la variable de
posición P9
290 MOV P9 + OFFSET ' Movimiento no interpolado a la posición P9+OFFSET
300 OVRD LENTO ' Velocidad al 15%
310 CONTADOR = 0 ' Inicialización del contador CONTADOR
320 WHILE (CONTADOR < NPP) ' Mientras CONTADOR sea inferior a NPP, se ejecutará
el WHILE
330 MVS P9 ' Movimiento recto a la posición P9
340 MVS P9 + OFFSET ' Movimiento recto a la suma de coordenadas de P9 + OFFSET
350 CONTADOR = CONTADOR + 1 ' Actualización del contador CONTADOR
360 WEND ' Fin del WHILE
370 OVRD RAPIDO ' Velocidad al 40%
380 NPP = NPP + 1 ' Actualización del contador NPP
390 WEND ' Fin del WHILE
400 GOTO *INI ' Salto a la etiqueta INI
410 WEND ' Fin del proceso de paletizado
420 GOSUB*PARO ' Inicio de la subrutina *PARO
430 '-------------------------------------------------------------------------------------
440 *TOMAR_P ' Inicio de la subrutina *TOMAR_P
450 OVRD RAPIDO ' Velocidad al 40%
460 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
470 OVRD LENTO ' Velocidad al 15%
450 MVS P2 ' Movimiento recto a la posición P2
460 HCLOSE 1 ' Cierra pinza
470 DLY 0.5 ' Espera de 0.5 segundos
480 MVS P2 + OFFSET ' Movimiento recto a la suma de coordenadas de P2 + OFFSET
490 OVRD RAPIDO ' Velocidad al 40%
500 RETURN ' Final de la subrutina AGARRAR_P
510 '--------------------------------------------------------------------------------------
520 *DEJAR_P ' Inicio de la subrutina DEJAR_P
530 OVRD RAPIDO ' Velocidad al 40%
540 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
550 OVRD LENTO ' Velocidad al 15%
560 MVS P2 ' Movimiento recto a la posición P2
570 HOPEN 1 ' Abrir Pinza
580 DLY 0.5 ' Espera de 0.5 segundos
590 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
600 OVRD RAPIDO ' Velocidad al 40%
610 RETURN ' Final de la subrutina DEJAR_P
620 '--------------------------------------------------------------------------------------
630 *DEJAR_P2 ' Inicio de la subrutina DEJAR_P2
640 OVRD RAPIDO ' Velocidad al 40%
650 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
660 OVRD LENTO ' Velocidad al 15%
670 MVS P3 ' Movimiento recto a la posición P3
680 HOPEN 1 ' Abrir Pinza
690 DLY 0.5 ' Espera de 0.5 segundos
700 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
710 OVRD RAPIDO ' Velocidad al 40%
720 RETURN ' Final de la subrutina DEJAR_P3
730 '--------------------------------------------------------------------------------------
740 *DEJAR_P3 ' Inicio de la subrutina DEJAR_P8
750 OVRD RAPIDO ' Velocidad al 40%
760 MOV P8 + OFFSET ' Movimiento no interpolado a la posición P8+OFFSET
770 OVRD LENTO ' Velocidad al 15%
780 MVS P8 ' Movimiento recto a la posición P8
790 HCLOSE 1 ' Cerrar Pinza
800 DLY 0.5 ' Espera de 0.5 segundos
810 MOV P8 + OFFSET ' Movimiento no interpolado a la posición P8+OFFSET
820 OVRD RAPIDO ' Velocidad al 40%
830 RETURN ' Final de la subrutina DEJAR_P3
840 '--------------------------------------------------------------------------------------
850 *COCER ' Inicio de la interrupción COCER
860 ACT 1 = 0 ' Deshabilita la interrupción 1
870 OVRD RAPIDO ' Velocidad al 40%
880 MOV P1 ' Movimiento no interpolado a la posición P1
890 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
900 ACCION = 2 ' Regresar a posición inicial
910 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
920 OVRD LENTO ' Velocidad al 15%
930 MVS P3 ' Movimiento recto a la posición P3
940 HCLOSE 1 ' Cierra pinza
950 DLY 0.5 ' Espera de 0.5 segundos
960 MVS P3 + OFFSET ' Movimiento recto a la suma de coordenadas de P3 + OFFSET
970 ACCION = 3 ' Detener la transferencia de pastel al horno
980 OVRD RAPIDO ' Velocidad al 40%
990 MOV P8 + HORNO ' Movimiento no interpolado a la posición P8+OFFSET
1000 OVRD LENTO ' Velocidad al 15%
1010 MVS P8 ' Movimiento recto a la posición P8
1020 HOPEN 1 ' Abrir Pinza
1030 DLY 0.5 ' Espera de 0.5 segundos
1040 MVS P8 + HORNO ' Movimiento recto a la suma de coordenadas de P8 + HORNO
1050 ACCION = 4 ' Regresar pastel a donde estaba
1060 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
1070 MOV P1 ' Movimiento no interpolado a la posición P1
1080 ACCION = 5 ' Volver a poner la pieza en su lugar
1090 ACT 2 = 1 ' Habilita la interrupción 2
1100 M_TIMER(1) = 0 ' Inicialización del reloj a cero
1110 RETURN 0 ' Final de la interrupción COCER
1120 '--------------------------------------------------------------------------------------
1130 *RETIRAR ' Inicio de la interrupción RETIRAR
1140 DLY 3 ' Espera de 3 segundos
1150 ACT 2 = 0 ' Deshabilita la interrupción 2
1160 OVRD RAPIDO ' Velocidad al 40%
1170 MOV P1 ' Movimiento no interpolado a la posición P1
1180 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
1190 ACCION = 6 ' Regresar al punto de inicio
1200 MOV P8 + HORNO ' Movimiento no interpolado a la posición P8+HORNO
1210 OVRD LENTO ' Velocidad al 15%
1220 MVS P8 ' Movimiento recto a la posición P8
1230 HCLOSE 1 ' Cierra pinza 1070 DLY 0.5 ' Espera de 0.5 segundos
1240 DLY 0.5 ' Espera de 0.5 segundos
1250 MVS P8 + HORNO ' Movimiento recto a la suma de coordenadas de P8 + HORNO
1260 OVRD RAPIDO ' Velocidad al 40%
1270 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
1280 OVRD LENTO ' Velocidad al 15%
1290 MVS P3 ' Movimiento recto a la posición P3
1300 HOPEN 1 ' Abrir Pinza
1310 DLY 0.5 ' Espera de 0.5 segundos
1320 MVS P3 + OFFSET ' Movimiento recto a la suma de coordenadas de P3 + OFFSET
1330 OVRD RAPIDO ' Velocidad al 40%
1340 ACCION = 7 ' regresar al punto de inicio
1350 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
1360 ACCION = 8 ' devolver pieza y regresar
1370 MOV P1 ' Movimiento no interpolado a la posición P1
1090 ACT 1 = 1 ' Habilita la interrupción 1
1100 ACT 2 = 1 ' habilita la interrupción 2
1110 RETURN 0 ' Final de la interrupción RETIRAR
1120 '------------------------------------------------------------------------------------
1130 *PARO ' detener proceso de la maquina
1130 ACT 1 = 0 ' DESHabilita la interrupción 1
1140 ACT 2 = 0 ' DEShabilita la interrupción 2
1140 ACT 3 = 0 ' DEShabilita la interrupción 3
1150 SELECT ACCION ' Selecciona el vector ENT para comparar
1160 CASE ACCION =1 ' Compara una posición del vector
1170 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
1180 BREAK ' Fin de las instrucciones del CASE seleccionado
1190 CASE ACCION =2 ' Compara una posición del vector
1200 BREAK ' Fin de las instrucciones del CASE seleccionado
1220 CASE OPCION =3 ' Compara una posición del vector
1230 GOSUB *DEJAR_P2 ' Devolver pieza de pastel
1240 BREAK ' Fin de las instrucciones del CASE seleccionado
1250 CASE ACCION =4 ' Compara una posición del vector
1260 GOSUB *DEJAR_P3
1270 GOSUB*DEJAR_P2 ' Dejar la pieza de pastel
1280 BREAK ' Fin de las instrucciones del CASE seleccionado
1290 CASE ACCION =5 ' Compara una posición del vector
1300 GOSUB_DEJAR_P
1310 BREAK ' Fin de las instrucciones del CASE seleccionado
1320 CASE ACCION =6 ' Compara una posición del vector
1330 BREAK ' Fin de las instrucciones del CASE seleccionado
1340 CASE ACCION =7 ' Compara una posición del vector
1350 BREAK ' Fin de las instrucciones del CASE seleccionado
1360 CASE ACCION =8 ' Compara una posición del vector
1370 GOSUB *DEJAR_P ' Llama a la subrutina TIRAR
1380 BREAK ' Fin de las instrucciones del CASE seleccionado
1390 DEFAULT ' Si no hay entradas activas
1400 OVRD 60
1410 MOV P1
1420 END

10 DEF POS HORNO ' Declaración variable posición HORNO


20 DEF POS OFFSET ' Declaración variable posición OFFSET
30 DEF POS P9 ' Declaración variable posición P9
40 HORNO = (0,0,+50,0,0,0) ' Definición de HORNO
50 OFFSET = (0,0,+60,0,0,0) ' Definición de OFFSET
60 'DEF IO N_PASTEL = BIT,10
70 DEF ACT 1, M_IN(10) = 1 GOSUB *COCER ' Definición interrupción COCER
80 DEF ACT 3, M_IN(11) = 1 GOSUB *PARO
80 DEF ACT 2, M_TIMER(1) > 30000 GOSUB *RETIRAR ' Definición interrupción RETIRAR
90 DEF INTE NPP ' Declaración variable entera NPP
100 DEF INTE CONTADOR ' Declaración variable entera CONTADOR
110 DEF INTE RAPIDO ' Declaración variable entera RAPIDO
120 DEF INTE LENTO ' Declaración variable entera LENTO
130 DEF PLT 1, P4, P5, P6, P7, 3, 3, 2 ' Definición del palet 1
140 SPD 500 ' Definición de la velocidad de movimientos interpolados a 500 mm/s
150 RAPIDO = 40 ' Definición de RAPIDO
160 LENTO = 15 ' Definición de LENTO
170 '..........................................................................................
180 HOPEN 1 ' Abrir Pinza
190 OVRD RAPIDO ' Velocidad al 40%
200 MOV P1 ' Movimiento no interpolado a la posición P1
210 ACT 1 = 1 ' Habilita la interrupción 1
220 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
230 *INI ' Etiqueta INI
240 NPP = 1 ' Inicialización del contador NPP
250 CONTADOR = 0 ' Inicialización del contador CONTADOR
260 WHILE (NPP <= 9) ' Mientras NPP sea inferior a 10, se ejecutará el bucle del WHILE
270 P9 = (PLT 1, NPP) ' Asignamos el valor de una posición del palet a la variable de
posición P9
280 MOV P9 + OFFSET ' Movimiento no interpolado a la posición P9+OFFSET
290 OVRD LENTO ' Velocidad al 15%
300 WHILE (CONTADOR < NPP) ' Mientras CONTADOR sea inferior a NPP, se ejecutará
el WHILE
310 MVS P9 ' Movimiento recto a la posición P9
320 MVS P9 + OFFSET ' Movimiento recto a la suma de coordenadas de P9 + OFFSET
330 CONTADOR = CONTADOR + 1 ' Actualización del contador CONTADOR
340 WEND ' Fin del WHILE
350 OVRD RAPIDO ' Velocidad al 40%
360 NPP = NPP + 1 ' Actualización del contador NPP
370 WEND ' Fin del WHILE
380 GOTO *INI ' Salto a la etiqueta INI
390 END ' Fin del programa
400 '-------------------------------------------------------------------------------------
410 *TOMAR_P ' Inicio de la subrutina *TOMAR_P
420 OVRD RAPIDO ' Velocidad al 40%
430 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
440 OVRD LENTO ' Velocidad al 15%
450 MVS P2 ' Movimiento recto a la posición P2
460 HCLOSE 1 ' Cierra pinza
470 DLY 0.5 ' Espera de 0.5 segundos
480 MVS P2 + OFFSET ' Movimiento recto a la suma de coordenadas de P2 + OFFSET
490 OVRD RAPIDO ' Velocidad al 40%
500 RETURN ' Final de la subrutina AGARRAR_P
510 '--------------------------------------------------------------------------------------
520 *DEJAR_P ' Inicio de la subrutina DEJAR_P
530 OVRD RAPIDO ' Velocidad al 40%
540 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
550 OVRD LENTO ' Velocidad al 15%
560 MVS P2 ' Movimiento recto a la posición P2
570 HOPEN 1 ' Abrir Pinza
580 DLY 0.5 ' Espera de 0.5 segundos
590 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
600 OVRD RAPIDO ' Velocidad al 40%
610 RETURN ' Final de la subrutina DEJAR_P
620 '--------------------------------------------------------------------------------------
630 *COCER ' Inicio de la interrupción COCER
640 ACT 1 = 0 ' Deshabilita la interrupción 1
650 OVRD RAPIDO ' Velocidad al 40%
660 MOV P1 ' Movimiento no interpolado a la posición P1
670 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
680 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
690 OVRD LENTO ' Velocidad al 15%
700 MVS P3 ' Movimiento recto a la posición P3
710 HCLOSE 1 ' Cierra pinza
720 DLY 0.5 ' Espera de 0.5 segundos
730 MVS P3 + OFFSET ' Movimiento recto a la suma de coordenadas de P3 + OFFSET
740 OVRD RAPIDO ' Velocidad al 40%
750 MOV P8 + HORNO ' Movimiento no interpolado a la posición P8+OFFSET
760 OVRD LENTO ' Velocidad al 15%
770 MVS P8 ' Movimiento recto a la posición P8
780 HOPEN 1 ' Abrir Pinza
790 DLY 0.5 ' Espera de 0.5 segundos
800 MVS P8 + HORNO ' Movimiento recto a la suma de coordenadas de P8 + HORNO
810 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
820 MOV P1 ' Movimiento no interpolado a la posición P1
830 ACT 2 = 1 ' Habilita la interrupción 2
840 M_TIMER(1) = 0 ' Inicialización del reloj a cero
850 RETURN 0 ' Final de la interrupción COCER
860 '--------------------------------------------------------------------------------------
870 *RETIRAR ' Inicio de la interrupción RETIRAR
880 DLY 3 ' Espera de 3 segundos
890 ACT 2 = 0 ' Deshabilita la interrupción 2
900 OVRD RAPIDO ' Velocidad al 40%
910 MOV P1 ' Movimiento no interpolado a la posición P1
920 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
930 MOV P8 + HORNO ' Movimiento no interpolado a la posición P8+HORNO
940 OVRD LENTO ' Velocidad al 15%
950 MVS P8 ' Movimiento recto a la posición P8
960 HCLOSE 1 ' Cierra pinza 1070 DLY 0.5 ' Espera de 0.5 segundos
970 DLY 0.5 ' Espera de 0.5 segundos
980 MVS P8 + HORNO ' Movimiento recto a la suma de coordenadas de P8 + HORNO
990 OVRD RAPIDO ' Velocidad al 40%
1000 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
1010 OVRD LENTO ' Velocidad al 15%
1020 MVS P3 ' Movimiento recto a la posición P3
1030 HOPEN 1 ' Abrir Pinza
1040 DLY 0.5 ' Espera de 0.5 segundos
1050 MVS P3 + OFFSET ' Movimiento recto a la suma de coordenadas de P3 + OFFSET
1060 OVRD RAPIDO ' Velocidad al 40%
1070 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
1080 MOV P1 ' Movimiento no interpolado a la posición P1
1090 ACT 1 = 1 ' Habilita la interrupción 1
1100 ACT 2 = 1 ' habilita la interrupción 2
1110 RETURN 0 ' Final de la interrupción RETIRAR

¿Cómo funciona el programa con los cambios?


R// Al activar la entrada 10 realiza el mismo procedimiento, una vez ejecutada la
acción se escribe la habilitación de las interrupciones.

Modifique el programa para que ahora tenga un botón paro que lleve al robot a P1
y termine el programa.

10 DEF POS HORNO ' Declaración variable posición HORNO


20 DEF POS OFFSET ' Declaración variable posición OFFSET
30 DEF POS P9 ' Declaración variable posición P9
40 HORNO = (0,0,+50,0,0,0) ' Definición de HORNO
50 OFFSET = (0,0,+60,0,0,0) ' Definición de OFFSET
60 'DEF IO N_PASTEL = BIT,10
70 DEF ACT 1, M_IN(10) = 1 GOSUB *COCER ' Definición interrupción COCER
80 DEF ACT 2, M_TIMER(1) > 30000 GOSUB *RETIRAR ' Definición interrupción RETIRAR
90 DEF INTE NPP ' Declaración variable entera NPP
100 DEF INTE CONTADOR ' Declaración variable entera CONTADOR
110 DEF INTE RAPIDO ' Declaración variable entera RAPIDO
120 DEF INTE LENTO ' Declaración variable entera LENTO
130 DEF PLT 1, P4, P5, P6, P7, 3, 3, 2 ' Definición del palet 1
140 SPD 500 ' Definición de la velocidad de movimientos interpolados a 500 mm/s
150 RAPIDO = 40 ' Definición de RAPIDO
160 LENTO = 15 ' Definición de LENTO
160 ACCION = 0 ' Definición de la variable ACCION
170 '..........................................................................................
180 HOPEN 1 ' Abrir Pinza
190 OVRD RAPIDO ' Velocidad al 40%
200 WHILE (M_ IN(11) = 0)
210 MOV P1 ' Movimiento no interpolado a la posición P1
220 ACT 1 = 1 ' Habilita la interrupción 1
230 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
240 *INI ' Etiqueta INI
250 NPP = 1 ' Inicialización del contador NPP
260 ACCION = 1 ' detener proceso de paletizado
270 WHILE (NPP <= 9) ' Mientras NPP sea inferior a 10, se ejecutará el bucle del WHILE
280 P9 = (PLT 1, NPP) ' Asignamos el valor de una posición del palet a la variable de
posición P9
290 MOV P9 + OFFSET ' Movimiento no interpolado a la posición P9+OFFSET
300 OVRD LENTO ' Velocidad al 15%
310 CONTADOR = 0 ' Inicialización del contador CONTADOR
320 WHILE (CONTADOR < NPP) ' Mientras CONTADOR sea inferior a NPP, se ejecutará
el WHILE
330 MVS P9 ' Movimiento recto a la posición P9
340 MVS P9 + OFFSET ' Movimiento recto a la suma de coordenadas de P9 + OFFSET
350 CONTADOR = CONTADOR + 1 ' Actualización del contador CONTADOR
360 WEND ' Fin del WHILE
370 OVRD RAPIDO ' Velocidad al 40%
380 NPP = NPP + 1 ' Actualización del contador NPP
390 WEND ' Fin del WHILE
400 GOTO *INI ' Salto a la etiqueta INI
410 WEND ' Fin del proceso de paletizado
420 GOSUB*PARO ' Inicio de la subrutina *PARO
430 '-------------------------------------------------------------------------------------
440 *TOMAR_P ' Inicio de la subrutina *TOMAR_P
450 OVRD RAPIDO ' Velocidad al 40%
460 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
470 OVRD LENTO ' Velocidad al 15%
450 MVS P2 ' Movimiento recto a la posición P2
460 HCLOSE 1 ' Cierra pinza
470 DLY 0.5 ' Espera de 0.5 segundos
480 MVS P2 + OFFSET ' Movimiento recto a la suma de coordenadas de P2 + OFFSET
490 OVRD RAPIDO ' Velocidad al 40%
500 RETURN ' Final de la subrutina AGARRAR_P
510 '--------------------------------------------------------------------------------------
520 *DEJAR_P ' Inicio de la subrutina DEJAR_P
530 OVRD RAPIDO ' Velocidad al 40%
540 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
550 OVRD LENTO ' Velocidad al 15%
560 MVS P2 ' Movimiento recto a la posición P2
570 HOPEN 1 ' Abrir Pinza
580 DLY 0.5 ' Espera de 0.5 segundos
590 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
600 OVRD RAPIDO ' Velocidad al 40%
610 RETURN ' Final de la subrutina DEJAR_P
620 '--------------------------------------------------------------------------------------
630 *DEJAR_P2 ' Inicio de la subrutina DEJAR_P2
640 OVRD RAPIDO ' Velocidad al 40%
650 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
660 OVRD LENTO ' Velocidad al 15%
670 MVS P3 ' Movimiento recto a la posición P3
680 HOPEN 1 ' Abrir Pinza
690 DLY 0.5 ' Espera de 0.5 segundos
700 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
710 OVRD RAPIDO ' Velocidad al 40%
720 RETURN ' Final de la subrutina DEJAR_P3
730 '--------------------------------------------------------------------------------------
740 *DEJAR_P3 ' Inicio de la subrutina DEJAR_P8
750 OVRD RAPIDO ' Velocidad al 40%
760 MOV P8 + OFFSET ' Movimiento no interpolado a la posición P8+OFFSET
770 OVRD LENTO ' Velocidad al 15%
780 MVS P8 ' Movimiento recto a la posición P8
790 HCLOSE 1 ' Cerrar Pinza
800 DLY 0.5 ' Espera de 0.5 segundos
810 MOV P8 + OFFSET ' Movimiento no interpolado a la posición P8+OFFSET
820 OVRD RAPIDO ' Velocidad al 40%
830 RETURN ' Final de la subrutina DEJAR_P3
840 '--------------------------------------------------------------------------------------
850 *COCER ' Inicio de la interrupción COCER
860 ACT 1 = 0 ' Deshabilita la interrupción 1
870 OVRD RAPIDO ' Velocidad al 40%
880 MOV P1 ' Movimiento no interpolado a la posición P1
890 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
900 ACCION = 2 ' Regresar a posición inicial
910 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
920 OVRD LENTO ' Velocidad al 15%
930 MVS P3 ' Movimiento recto a la posición P3
940 HCLOSE 1 ' Cierra pinza
950 DLY 0.5 ' Espera de 0.5 segundos
960 MVS P3 + OFFSET ' Movimiento recto a la suma de coordenadas de P3 + OFFSET
970 ACCION = 3 ' Detener la transferencia de pastel al horno
980 OVRD RAPIDO ' Velocidad al 40%
990 MOV P8 + HORNO ' Movimiento no interpolado a la posición P8+OFFSET
1000 OVRD LENTO ' Velocidad al 15%
1010 MVS P8 ' Movimiento recto a la posición P8
1020 HOPEN 1 ' Abrir Pinza
1030 DLY 0.5 ' Espera de 0.5 segundos
1040 MVS P8 + HORNO ' Movimiento recto a la suma de coordenadas de P8 + HORNO
1050 ACCION = 4 ' Regresar pastel a donde estaba
1060 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
1070 MOV P1 ' Movimiento no interpolado a la posición P1
1080 ACCION = 5 ' Volver a poner la pieza en su lugar
1090 ACT 2 = 1 ' Habilita la interrupción 2
1100 M_TIMER(1) = 0 ' Inicialización del reloj a cero
1110 RETURN 0 ' Final de la interrupción COCER
1120 '--------------------------------------------------------------------------------------
1130 *RETIRAR ' Inicio de la interrupción RETIRAR
1140 DLY 3 ' Espera de 3 segundos
1150 ACT 2 = 0 ' Deshabilita la interrupción 2
1160 OVRD RAPIDO ' Velocidad al 40%
1170 MOV P1 ' Movimiento no interpolado a la posición P1
1180 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
1190 ACCION = 6 ' Regresar al punto de inicio
1200 MOV P8 + HORNO ' Movimiento no interpolado a la posición P8+HORNO
1210 OVRD LENTO ' Velocidad al 15%
1220 MVS P8 ' Movimiento recto a la posición P8
1230 HCLOSE 1 ' Cierra pinza 1070 DLY 0.5 ' Espera de 0.5 segundos
1240 DLY 0.5 ' Espera de 0.5 segundos
1250 MVS P8 + HORNO ' Movimiento recto a la suma de coordenadas de P8 + HORNO
1260 OVRD RAPIDO ' Velocidad al 40%
1270 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
1280 OVRD LENTO ' Velocidad al 15%
1290 MVS P3 ' Movimiento recto a la posición P3
1300 HOPEN 1 ' Abrir Pinza
1310 DLY 0.5 ' Espera de 0.5 segundos
1320 MVS P3 + OFFSET ' Movimiento recto a la suma de coordenadas de P3 + OFFSET
1330 OVRD RAPIDO ' Velocidad al 40%
1340 ACCION = 7 ' regresar al punto de inicio
1350 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
1360 ACCION = 8 ' devolver pieza y regresar
1370 MOV P1 ' Movimiento no interpolado a la posición P1
1090 ACT 1 = 1 ' Habilita la interrupción 1
1100 ACT 2 = 1 ' habilita la interrupción 2
1110 RETURN 0 ' Final de la interrupción RETIRAR
1120 '------------------------------------------------------------------------------------
1130 *PARO ' detener proceso de la maquina
1130 ACT 1 = 0 ' DESHabilita la interrupción 1
1140 ACT 2 = 0 ' DEShabilita la interrupción 2
1140 ACT 3 = 0 ' DEShabilita la interrupción 3
1150 SELECT ACCION ' Selecciona el vector ENT para comparar
1160 CASE ACCION =1 ' Compara una posición del vector
1170 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
1180 BREAK ' Fin de las instrucciones del CASE seleccionado
1190 CASE OPCION =2 ' Compara una posición del vector
1200 BREAK ' Fin de las instrucciones del CASE seleccionado
1220 CASE OPCION =3 ' Compara una posición del vector
1230 GOSUB *DEJAR_P2 ' Devolver pieza de pastel
1240 BREAK ' Fin de las instrucciones del CASE seleccionado
1250 CASE OPCION =4 ' Compara una posición del vector
1260 GOSUB *DEJAR_P3
1270 GOSUB*DEJAR_P2 ' Dejar la pieza de pastel
1280 BREAK ' Fin de las instrucciones del CASE seleccionado
1290 CASE ACCION =5 ' Compara una posición del vector
1300 GOSUB_DEJAR_P
1310 BREAK ' Fin de las instrucciones del CASE seleccionado
1320 CASE OPCION =6 ' Compara una posición del vector
1330 BREAK ' Fin de las instrucciones del CASE seleccionado
1340 CASE OPCION =7 ' Compara una posición del vector
1350 BREAK ' Fin de las instrucciones del CASE seleccionado
1360 CASE OPCION =8 ' Compara una posición del vector
1370 GOSUB *DEJAR_P ' Llama a la subrutina TIRAR
1380 BREAK ' Fin de las instrucciones del CASE seleccionado
1390 DEFAULT ' Si no hay entradas activas
1400 OVRD 60
1410 MOV P1
1420 END
10 DEF POS HORNO ' Declaración variable posición HORNO
20 DEF POS OFFSET ' Declaración variable posición OFFSET
30 DEF POS P9 ' Declaración variable posición P9
40 HORNO = (0,0,+50,0,0,0) ' Definición de HORNO
50 OFFSET = (0,0,+60,0,0,0) ' Definición de OFFSET
60 'DEF IO N_PASTEL = BIT,10
70 DEF ACT 1, M_IN(10) = 1 GOSUB *COCER ' Definición interrupción COCER
80 DEF ACT 3, M_IN(11) = 1 GOSUB *PARO
80 DEF ACT 2, M_TIMER(1) > 30000 GOSUB *RETIRAR ' Definición interrupción RETIRAR
90 DEF INTE NPP ' Declaración variable entera NPP
100 DEF INTE CONTADOR ' Declaración variable entera CONTADOR
110 DEF INTE RAPIDO ' Declaración variable entera RAPIDO
120 DEF INTE LENTO ' Declaración variable entera LENTO
130 DEF PLT 1, P4, P5, P6, P7, 3, 3, 2 ' Definición del palet 1
140 SPD 500 ' Definición de la velocidad de movimientos interpolados a 500 mm/s
150 RAPIDO = 40 ' Definición de RAPIDO
160 LENTO = 15 ' Definición de LENTO
170 '..........................................................................................
180 HOPEN 1 ' Abrir Pinza
190 OVRD RAPIDO ' Velocidad al 40%
200 MOV P1 ' Movimiento no interpolado a la posición P1
210 ACT 1 = 1 ' Habilita la interrupción 1
220 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
230 *INI ' Etiqueta INI
240 NPP = 1 ' Inicialización del contador NPP
250 CONTADOR = 0 ' Inicialización del contador CONTADOR
260 WHILE (NPP <= 9) ' Mientras NPP sea inferior a 10, se ejecutará el bucle del WHILE
270 P9 = (PLT 1, NPP) ' Asignamos el valor de una posición del palet a la variable de
posición P9
280 MOV P9 + OFFSET ' Movimiento no interpolado a la posición P9+OFFSET
290 OVRD LENTO ' Velocidad al 15%
300 WHILE (CONTADOR < NPP) ' Mientras CONTADOR sea inferior a NPP, se ejecutará
el WHILE
310 MVS P9 ' Movimiento recto a la posición P9
320 MVS P9 + OFFSET ' Movimiento recto a la suma de coordenadas de P9 + OFFSET
330 CONTADOR = CONTADOR + 1 ' Actualización del contador CONTADOR
340 WEND ' Fin del WHILE
350 OVRD RAPIDO ' Velocidad al 40%
360 NPP = NPP + 1 ' Actualización del contador NPP
370 WEND ' Fin del WHILE
380 GOTO *INI ' Salto a la etiqueta INI
390 END ' Fin del programa
400 '-------------------------------------------------------------------------------------
410 *TOMAR_P ' Inicio de la subrutina *TOMAR_P
420 OVRD RAPIDO ' Velocidad al 40%
430 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
440 OVRD LENTO ' Velocidad al 15%
450 MVS P2 ' Movimiento recto a la posición P2
460 HCLOSE 1 ' Cierra pinza
470 DLY 0.5 ' Espera de 0.5 segundos
480 MVS P2 + OFFSET ' Movimiento recto a la suma de coordenadas de P2 + OFFSET
490 OVRD RAPIDO ' Velocidad al 40%
500 RETURN ' Final de la subrutina AGARRAR_P
510 '--------------------------------------------------------------------------------------
520 *DEJAR_P ' Inicio de la subrutina DEJAR_P
530 OVRD RAPIDO ' Velocidad al 40%
540 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
550 OVRD LENTO ' Velocidad al 15%
560 MVS P2 ' Movimiento recto a la posición P2
570 HOPEN 1 ' Abrir Pinza
580 DLY 0.5 ' Espera de 0.5 segundos
590 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
600 OVRD RAPIDO ' Velocidad al 40%
610 RETURN ' Final de la subrutina DEJAR_P
620 '--------------------------------------------------------------------------------------
630 *COCER ' Inicio de la interrupción COCER
640 ACT 1 = 0 ' Deshabilita la interrupción 1
650 OVRD RAPIDO ' Velocidad al 40%
660 MOV P1 ' Movimiento no interpolado a la posición P1
670 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
680 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
690 OVRD LENTO ' Velocidad al 15%
700 MVS P3 ' Movimiento recto a la posición P3
710 HCLOSE 1 ' Cierra pinza
720 DLY 0.5 ' Espera de 0.5 segundos
730 MVS P3 + OFFSET ' Movimiento recto a la suma de coordenadas de P3 + OFFSET
740 OVRD RAPIDO ' Velocidad al 40%
750 MOV P8 + HORNO ' Movimiento no interpolado a la posición P8+OFFSET
760 OVRD LENTO ' Velocidad al 15%
770 MVS P8 ' Movimiento recto a la posición P8
780 HOPEN 1 ' Abrir Pinza
790 DLY 0.5 ' Espera de 0.5 segundos
800 MVS P8 + HORNO ' Movimiento recto a la suma de coordenadas de P8 + HORNO
810 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
820 MOV P1 ' Movimiento no interpolado a la posición P1
830 ACT 2 = 1 ' Habilita la interrupción 2
840 M_TIMER(1) = 0 ' Inicialización del reloj a cero
850 RETURN 0 ' Final de la interrupción COCER
860 '--------------------------------------------------------------------------------------
870 *RETIRAR ' Inicio de la interrupción RETIRAR
880 DLY 3 ' Espera de 3 segundos
890 ACT 2 = 0 ' Deshabilita la interrupción 2
900 OVRD RAPIDO ' Velocidad al 40%
910 MOV P1 ' Movimiento no interpolado a la posición P1
920 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
930 MOV P8 + HORNO ' Movimiento no interpolado a la posición P8+HORNO
940 OVRD LENTO ' Velocidad al 15%
950 MVS P8 ' Movimiento recto a la posición P8
960 HCLOSE 1 ' Cierra pinza 1070 DLY 0.5 ' Espera de 0.5 segundos
970 DLY 0.5 ' Espera de 0.5 segundos
980 MVS P8 + HORNO ' Movimiento recto a la suma de coordenadas de P8 + HORNO
990 OVRD RAPIDO ' Velocidad al 40%
1000 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
1010 OVRD LENTO ' Velocidad al 15%
1020 MVS P3 ' Movimiento recto a la posición P3
1030 HOPEN 1 ' Abrir Pinza
1040 DLY 0.5 ' Espera de 0.5 segundos
1050 MVS P3 + OFFSET ' Movimiento recto a la suma de coordenadas de P3 + OFFSET
1060 OVRD RAPIDO ' Velocidad al 40%
1070 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
1080 MOV P1 ' Movimiento no interpolado a la posición P1
1090 ACT 1 = 1 ' Habilita la interrupción 1
1100 ACT 2 = 1 ' habilita la interrupción 2
1110 RETURN 0 ' Final de la interrupción RETIRAR

¿Cómo funciona el programa con los cambios?


R// Al activar la entrada 10 realiza el mismo procedimiento, una vez ejecutada la
acción se escribe la habilitación de las interrupciones.

Modifique el programa para que ahora tenga un botón paro que lleve al robot a P1
y termine el programa.

10 DEF POS HORNO ' Declaración variable posición HORNO


20 DEF POS OFFSET ' Declaración variable posición OFFSET
30 DEF POS P9 ' Declaración variable posición P9
40 HORNO = (0,0,+50,0,0,0) ' Definición de HORNO
50 OFFSET = (0,0,+60,0,0,0) ' Definición de OFFSET
60 'DEF IO N_PASTEL = BIT,10
70 DEF ACT 1, M_IN(10) = 1 GOSUB *COCER ' Definición interrupción COCER
80 DEF ACT 3, M_IN(11) = 1 GOSUB *PARO
90 DEF ACT 2, M_TIMER(1) > 30000 GOSUB *RETIRAR ' Definición interrupción
RETIRAR
100 DEF INTE NPP ' Declaración variable entera NPP
110 DEF INTE CONTADOR ' Declaración variable entera CONTADOR
120 DEF INTE RAPIDO ' Declaración variable entera RAPIDO
130 DEF INTE LENTO ' Declaración variable entera LENTO
140 DEF INTE ACCION
150 DEF PLT 1, P4, P5, P6, P7, 3, 3, 2 ' Definición del palet 1
160 SPD 500 ' Definición de la velocidad de movimientos interpolados a 500 mm/s
170 RAPIDO = 40 ' Definición de RAPIDO
180 LENTO = 15 ' Definición de LENTO
190 '..........................................................................................
200 HOPEN 1 ' Abrir Pinza
210 OVRD RAPIDO ' Velocidad al 40%
220 MOV P1 ' Movimiento no interpolado a la posición P1
230 ACT 1 = 1 ' Habilita la interrupción 1
240 ACT 3 = 1
250 ACCION = 0
260 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
270 *INI ' Etiqueta INI
280 NPP = 1 ' Inicialización del contador NPP
290 ACCION = 1 ' detener proceso de paletizado
300 CONTADOR = 0
310 WHILE (NPP <= 9) ' Mientras NPP sea inferior a 10, se ejecutará el bucle del WHILE
320 P9 = (PLT 1, NPP) ' Asignamos el valor de una posición del palet a la variable de
posición P9
330 MOV P9 + OFFSET ' Movimiento no interpolado a la posición P9+OFFSET
340 OVRD LENTO ' Velocidad al 15%
350 WHILE (CONTADOR < NPP) ' Mientras CONTADOR sea inferior a NPP, se ejecutará
el WHILE
360 MVS P9 ' Movimiento recto a la posición P9
370 MVS P9 + OFFSET ' Movimiento recto a la suma de coordenadas de P9 + OFFSET
380 CONTADOR = CONTADOR + 1 ' Actualización del contador CONTADOR
390 WEND ' Fin del WHILE
400 OVRD RAPIDO ' Velocidad al 40%
410 NPP = NPP + 1 ' Actualización del contador NPP
420 WEND ' Fin del WHILE
430 GOTO *INI ' Salto a la etiqueta INI
440 '-------------------------------------------------------------------------------------
450 *TOMAR_P ' Inicio de la subrutina *TOMAR_P
460 OVRD RAPIDO ' Velocidad al 40%
470 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
480 OVRD LENTO ' Velocidad al 15%
490 MVS P2 ' Movimiento recto a la posición P2
500 HCLOSE 1 ' Cierra pinza
510 DLY 0.5 ' Espera de 0.5 segundos
520 MVS P2 + OFFSET ' Movimiento recto a la suma de coordenadas de P2 + OFFSET
530 OVRD RAPIDO ' Velocidad al 40%
540 RETURN ' Final de la subrutina AGARRAR_P
550 '--------------------------------------------------------------------------------------
560 *DEJAR_P ' Inicio de la subrutina DEJAR_P
570 OVRD RAPIDO ' Velocidad al 40%
580 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
590 OVRD LENTO ' Velocidad al 15%
600 MVS P2 ' Movimiento recto a la posición P2
610 HOPEN 1 ' Abrir Pinza
620 DLY 0.5 ' Espera de 0.5 segundos
630 MOV P2 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
640 OVRD RAPIDO ' Velocidad al 40%
650 RETURN ' Final de la subrutina DEJAR_P
660 '--------------------------------------------------------------------------------------
670 *DEJAR_P2 ' Inicio de la subrutina DEJAR_P2
680 OVRD RAPIDO ' Velocidad al 40%
690 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P2+OFFSET
700 OVRD LENTO ' Velocidad al 15%
710 MVS P3 ' Movimiento recto a la posición P3
720 HOPEN 1 ' Abrir Pinza
730 DLY 0.5 ' Espera de 0.5 segundos
740 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
750 OVRD RAPIDO ' Velocidad al 40%
760 RETURN ' Final de la subrutina DEJAR_P3
770 '--------------------------------------------------------------------------------------
780 *DEJAR_P3 ' Inicio de la subrutina DEJAR_P8
790 OVRD RAPIDO ' Velocidad al 40%
800 MOV P8 + OFFSET ' Movimiento no interpolado a la posición P8+OFFSET
810 OVRD LENTO ' Velocidad al 15%
820 MVS P8 ' Movimiento recto a la posición P8
830 HCLOSE 1 ' Cerrar Pinza
840 DLY 0.5 ' Espera de 0.5 segundos
850 MOV P8 + OFFSET ' Movimiento no interpolado a la posición P8+OFFSET
860 OVRD RAPIDO ' Velocidad al 40%
870 RETURN ' Final de la subrutina DEJAR_P3
880 '--------------------------------------------------------------------------------------
890 *COCER ' Inicio de la interrupción COCER
900 ACT 1 = 0 ' Deshabilita la interrupción 1
910 OVRD RAPIDO ' Velocidad al 40%
920 MOV P1 ' Movimiento no interpolado a la posición P1
930 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
940 ACCION = 2 ' Regresar a posición inicial
950 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
960 OVRD LENTO ' Velocidad al 15%
970 MVS P3 ' Movimiento recto a la posición P3
980 HCLOSE 1 ' Cierra pinza
990 DLY 0.5 ' Espera de 0.5 segundos
1000 MVS P3 + OFFSET ' Movimiento recto a la suma de coordenadas de P3 + OFFSET
1010 ACCION = 3 ' Detener la transferencia de pastel al horno
1020 OVRD RAPIDO ' Velocidad al 40%
1030 MOV P8 + HORNO ' Movimiento no interpolado a la posición P8+OFFSET
1040 OVRD LENTO ' Velocidad al 15%
1050 MVS P8 ' Movimiento recto a la posición P8
1060 HOPEN 1 ' Abrir Pinza
1070 DLY 0.5 ' Espera de 0.5 segundos
1080 MVS P8 + HORNO ' Movimiento recto a la suma de coordenadas de P8 + HORNO
1090 ACCION = 4 ' Regresar pastel a donde estaba
1100 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
1110 MOV P1 ' Movimiento no interpolado a la posición P1
1120 ACCION = 5 ' Volver a poner la pieza en su lugar
1130 ACT 2 = 1 ' Habilita la interrupción 2
1140 M_TIMER(1) = 0 ' Inicialización del reloj a cero
1150 RETURN 0 ' Final de la interrupción COCER
1160 '--------------------------------------------------------------------------------------
1170 *RETIRAR ' Inicio de la interrupción RETIRAR
1180 DLY 3 ' Espera de 3 segundos
1190 ACT 2 = 0 ' Deshabilita la interrupción 2
1200 OVRD RAPIDO ' Velocidad al 40%
1210 MOV P1 ' Movimiento no interpolado a la posición P1
1220 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
1230 ACCION = 6 ' Regresar al punto de inicio
1240 MOV P8 + HORNO ' Movimiento no interpolado a la posición P8+HORNO
1250 OVRD LENTO ' Velocidad al 15%
1260 MVS P8 ' Movimiento recto a la posición P8
1270 HCLOSE 1 ' Cierra pinza 1070 DLY 0.5 ' Espera de 0.5 segundos
1280 DLY 0.5 ' Espera de 0.5 segundos
1290 MVS P8 + HORNO ' Movimiento recto a la suma de coordenadas de P8 + HORNO
1300 OVRD RAPIDO ' Velocidad al 40%
1310 MOV P3 + OFFSET ' Movimiento no interpolado a la posición P3+OFFSET
1320 OVRD LENTO ' Velocidad al 15%
1330 MVS P3 ' Movimiento recto a la posición P3
1340 HOPEN 1 ' Abrir Pinza
1350 DLY 0.5 ' Espera de 0.5 segundos
1360 MVS P3 + OFFSET ' Movimiento recto a la suma de coordenadas de P3 + OFFSET
1370 OVRD RAPIDO ' Velocidad al 40%
1380 ACCION = 7 ' regresar al punto de inicio
1390 GOSUB *TOMAR_P ' Llama a la subrutina TOMAR_P
1400 ACCION = 8 ' devolver pieza y regresar
1410 MOV P1 ' Movimiento no interpolado a la posición P1
1420 ACT 1 = 1 ' Habilita la interrupción 1
1430 ACT 2 = 1 ' habilita la interrupción 2
1440 RETURN 0 ' Final de la interrupción RETIRAR
1450 '------------------------------------------------------------------------------------
1460 *PARO ' detener proceso de la maquina
1470 ACT 1 = 0 ' DESHabilita la interrupción 1
1480 ACT 2 = 0 ' DEShabilita la interrupción 2
1490 ACT 3 = 0 ' DEShabilita la interrupción 3
1500 SELECT ACCION ' Selecciona el vector ENT para comparar
1510 CASE ACCION =1 ' Compara una posición del vector
1520 GOSUB *DEJAR_P ' Llama a la subrutina DEJAR_P
1530 BREAK ' Fin de las instrucciones del CASE seleccionado
1540 CASE ACCION =2 ' Compara una posición del vector
1550 BREAK ' Fin de las instrucciones del CASE seleccionado
1560 CASE ACCION =3 ' Compara una posición del vector
1570 GOSUB *DEJAR_P2 ' Devolver pieza de pastel
1580 BREAK ' Fin de las instrucciones del CASE seleccionado
1590 CASE ACCION =4 ' Compara una posición del vector
1600 GOSUB *DEJAR_P3
1610 GOSUB *DEJAR_P2 ' Dejar la pieza de pastel
1620 BREAK ' Fin de las instrucciones del CASE seleccionado
1630 CASE ACCION =5 ' Compara una posición del vector
1640 GOSUB *DEJAR_P
1650 BREAK ' Fin de las instrucciones del CASE seleccionado
1660 CASE ACCION =6 ' Compara una posición del vector
1670 BREAK ' Fin de las instrucciones del CASE seleccionado
1680 CASE ACCION =7 ' Compara una posición del vector
1690 BREAK ' Fin de las instrucciones del CASE seleccionado
1700 CASE ACCION =8 ' Compara una posición del vector
1710 GOSUB *DEJAR_P ' Llama a la subrutina TIRAR
1720 BREAK ' Fin de las instrucciones del CASE seleccionado
1730 END SELECT
1740 OVRD 60
1750 MOV P1
1760 END

Anda mungkin juga menyukai