Ejercicios Prácticos de Programación RAPID para Robótica Industrial ABB

Informática y Telecomunicaciones14,94 KB

Ejercicios Prácticos de Programación RAPID

ARI ROBÓTICA INDUSTRIAL - EJERCICIOS RAPID

1. Movimientos básicos, con esperas

El robot se posiciona en el punto P_HOME. Espera hasta que la entrada DI_10 esté activada. Realiza las trayectorias indicadas en la figura y en el punto P30 realiza una espera de 5 segundos. Los movimientos de la figura se realizan a 500 mm/s. El paso por el punto P20 será continuo, con una zona de aproximación de 20 mm de radio.

MODULE ejercicio1
    CONST robtarget P_Home:=…. ;
    CONST robtarget P10:=…. ;
    CONST robtarget P20:=…. ;
    CONST robtarget P30:=…. ;
    CONST robtarget P40:=…. ;
    
    PROC main()
        MoveJ P_HOME, v500, z50, tool0;
        WaitDI DI_10, 1;   ! Señal de entrada
        MoveJ p10, v1000, fine, tool0;
        MoveL p20, v500, z20, tool0;
        MoveL p30, v500, z20, tool0;
        WaitTime 5 \Inpos;   ! Espera 5 segundos /inpos ejes parados antes de empezar cuenta
        MoveL p40, v500, fine, tool0;
        MoveL p10, v500, fine, tool0;
    ENDPROC
ENDMODULE

2. Movimiento circular

Realizar las trayectorias circulares en el sentido que se indica en las figuras. El movimiento se iniciará a partir del punto p10, realizando el movimiento de 360º; una vez haya alcanzado nuevamente p10, realizará la trayectoria circular finalizando en p60. El movimiento debe de ser continuo excepto en los puntos de inicio y final de los círculos.

MODULE ejercicio2
    CONST robtarget P_Home:=…. ;
    CONST robtarget P10:=…. ;
    CONST robtarget P20:=…. ;
    CONST robtarget P30:=…. ;
    CONST robtarget P40:=…. ;
    CONST robtarget P50:=…. ;
    
    PROC main()
        MoveL P_HOME, v500, z50, tool0;
        MoveJ p10, v500, fine, tool0;
        MoveC p20, p30, v100, z1, tool0;
        MoveC p40, p10, v100, fine, tool0;
        MoveC p50, p20, v100, fine, tool0;
    ENDPROC
ENDMODULE

3. Movimientos por desplazamiento

Respecto a un origen, movimiento por tiempo. Considerando el punto p10 como origen de coordenadas, realizar la siguiente figura considerando que el plano de movimientos es paralelo al formado por los ejes XY (paralelo al suelo). La trayectoria del punto p10 a la posición B se debe de realizar en un tiempo de 5 segundos. El movimiento por los puntos de inicio y final del arco de circunferencia debe de ser continuo con la máxima aproximación a los puntos.

MODULE ejercicio3
    CONST robtarget P10:=…. ;
    
    PROC main()
        MoveJ p10, v500, fine, tool0;
        MoveL Offs(p10, 300, 0, 0), v500 \T:=5, z1, tool0;
        MoveC Offs(p10, 400, -100, 0), Offs(p10, 300, -200, 0), v500, z1, tool0;
        MoveL Offs(p10, -200, 0, 0), v500, fine, tool0;
        MoveL p10, v500, fine, tool0;
    ENDPROC
ENDMODULE

4. Condiciones mediante esperas

Proceso: El robot coge pieza en la mesa de entrada y, pasando por el punto p30, la deposita en la mesa de salida.
Condiciones:

  • Espera en el punto p10 hasta que se detecte pieza en el detector d1.
  • Espera en el punto p30 hasta que se detecte en db1 y db2 que la puerta de acceso ha sido retirada.
  • Espera antes de dejar la pieza, que la pieza anterior haya sido retirada (que no se detecte pieza en el detector d2).
MODULE ejercicio4
    CONST robtarget P_Home:=…. ;
    CONST robtarget P10:=…. ;
    CONST robtarget P20:=…. ;
    CONST robtarget P30:=…. ;
    CONST robtarget P40:=…. ;
    CONST robtarget P50:=…. ;
    ! I/O digitales no se declaran
    
    PROC main()
        MoveJ p10, v1000, z50, tool pinza1;
        WaitDI d1, 1;
        MoveL p20, v500, fine, tool pinza1;
        MoveL p10, v500, z50, tool pinza1;
        MoveJ p30, v1000, z50, tool pinza1;
        WaitUntil db1=0 AND db2=0;
        MoveJ p40, v1000, z50, tool pinza1;
        WaitDI d2, 0;
        MoveL p50, v500, fine, tool pinza1;
        MoveL p40, v1000, z50, tool pinza1;
    ENDPROC
ENDMODULE

5. Control de Salidas digitales

Suponiendo que la herramienta es un electroimán controlado por la salida digital DO1, y la orden de abrir la puerta deslizante se controla con la salida DO2, se añaden las instrucciones necesarias para establecer las siguientes condiciones:

  • Coger pieza: Activar electroimán.
  • Dejar pieza: Desactivar electroimán.
  • Antes de llegar al punto p30: Dar la orden de abrir puerta (un impulso en la salida DO2 de 0,5 segundos).
MODULE ejercicio5
    CONST robtarget P_Home:=…. ;
    CONST robtarget P_10:=…. ;
    CONST robtarget P_20:=…. ;
    CONST robtarget P_30:=…. ;
    CONST robtarget P_40:=…. ;
    ! I/O digitales no se declaran
    
    PROC main()
        Reset DO1; ! Abre pinza
        Reset DO2; ! Puesta a 0 de la activación de puerta
        MoveJ p10, v1000, z50, tool pinza1;
        WaitDI d1, 1;
        MoveL p20, v500, fine, tool pinza1;
        SetDO \SDelay:=0.2, DO1, 1; ! Cierra pinza con retardo de 0,2 s
        WaitTime 0.5; ! Detiene la ejecución en 0.5 s
        MoveL p10, v500, z50, tool pinza1;
        MoveJ p30, v1000, z50, tool pinza1;
        PulseDO \PLength:=0.5, DO2; ! Aplica un pulso de 0.5 s sobre DO2
        WaitUntil db1=0 AND db2=0;
        MoveJ p40, v1000, z50, tool pinza1;
        WaitDI d2, 0;
        MoveL p50, v500, fine, tool pinza1;
        SetDO \SDelay:=0.2, DO1, 0; ! Abre pinza con un retardo de 0,2 s
        WaitTime 0.5; ! Detiene la ejecución en 0.5 s
        MoveL p40, v1000, z50, tool pinza1;
    ENDPROC
ENDMODULE

6. Instrucciones de condición IF…ENDIF

Proceso: Igual que el caso anterior, pero con dos posibles mesas de salida para depositar la pieza.
Condiciones: Igual que el caso anterior con la siguiente modificación: Antes de aproximarse a cualquiera de las mesas, pasará por el punto p_espera. La pieza se depositará por defecto en la mesa A. Si ésta estuviera ocupada (d2=1) se depositará en la mesa B en caso de que esté libre. Si ambas están ocupadas, se esperará en el punto p_espera.

MODULE ejercicio6
    CONST robtarget P_Home:=…. ;
    CONST robtarget P10:=…. ;
    CONST robtarget P20:=…. ;
    CONST robtarget P30:=…. ;
    CONST robtarget P40:=…. ;
    CONST robtarget P50:=…. ;
    CONST robtarget P_epera:=…. ;
    ! I/O digitales no se declaran
    
    PROC main()
        MoveJ p10, v1000, z50, tool pinza1;
        WaitDI d1, 1;
        MoveL p20, v500, fine, tool pinza1;
        MoveL p10, v500, z50, tool pinza1;
        MoveJ p30, v1000, z50, tool pinza1;
        IF db1=1 OR db2=1 THEN ! No es necesario
            WaitUntil db1=0 AND db2=0;
        ENDIF
        MoveJ p_espera, v1000, z50, tool pinza1;
        WaitUntil d2=0 OR d3=0;
        IF d2=0 THEN
            MoveJ p40, v1000, z50, tool pinza1;
            MoveL p50, v500, fine, tool pinza1;
            MoveL p40, v1000, z50, tool pinza1;
        ELSE
            IF d3=0 THEN
                MoveJ p60, v1000, z50, tool pinza1;
                MoveL p70, v500, fine, tool pinza1;
                MoveL p60, v1000, z50, tool pinza1;
            ENDIF
        ENDIF
    ENDPROC
ENDMODULE

7. Instrucción de Salto GOTO

Siguiendo con la aplicación anterior, se añade la siguiente modificación: Al iniciar el programa el robot se posicionará en un punto de inicio (p_home) por el que ya no volverá a pasar hasta que se reinicie el programa de nuevo o se cumpla la siguiente condición. Cada 20 piezas el proceso se interrumpe y el robot lleva la herramienta a un punto de refrigeración de la misma. Una vez finalizada la refrigeración, inicia otra secuencia de 20 piezas empezando el programa desde el punto p_home.

MODULE ejercicio7
    CONST robtarget P_Home:=…. ;
    CONST robtarget P10:=…. ;
    CONST robtarget P20:=…. ;
    CONST robtarget P30:=…. ;
    CONST robtarget P40:=…. ;
    CONST robtarget P50:=…. ;
    CONST robtarget P60:=…. ;
    CONST robtarget P70:=…. ;
    CONST robtarget P80:=…. ;
    CONST robtarget P_epera:=…. ;
    VAR num cont_Pieza:=1; ! También válido PERS num cont_piezas:=1
    
    PROC main()
        MoveJ p_home, v1000, z50, tool pinza1;
        cont_piezas:=1; ! Inicialización del dato numérico cont_piezas a valor 1
    nueva:
        ! Etiqueta destino de salto
        MoveJ p10, v1000, z50, tool pinza1;
        WaitDI d1, 1;
        MoveL p20, v500, fine, tool pinza1;
        MoveL p10, v500, z50, tool pinza1;
        MoveJ p30, v1000, z50, tool pinza1;
        WaitUntil db1=0 AND db2=0;
        MoveJ p_espera, v1000, z50, tool pinza1;
        WaitUntil d2=0 OR d3=0;
        IF d2=0 THEN
            MoveJ p40, v1000, z50, tool pinza1;
            MoveL p50, v500, fine, tool pinza1;
            MoveL p40, v1000, z50, tool pinza1;
        ELSEIF d3=0 THEN
            MoveJ p60, v1000, z50, tool pinza1;
            MoveL p70, v500, fine, tool pinza1;
            MoveL p60, v1000, z50, tool pinza1;
        ENDIF
        cont_piezas:=cont_piezas+1; ! Incremento de piezas
        IF cont_piezas < 21 THEN
            GOTO nueva; ! Salto
        ENDIF
        MoveJ p80, v1000, fine, tool pinza1; ! Posición de la herramienta donde se realiza la refrigeración
        Set DO11; ! Activación de la salida para ejecutar el proceso de refrigeración
    ENDPROC
ENDMODULE

8. Instrucción WHILE……ENDWHILE

Realizar el ejercicio anterior sin usar instrucción de salto.

MODULE ejercicio8
    CONST robtarget P_Home:=…. ;
    CONST robtarget P10:=…. ;
    CONST robtarget P20:=…. ;
    CONST robtarget P30:=…. ;
    CONST robtarget P40:=…. ;
    CONST robtarget P50:=…. ;
    CONST robtarget P60:=…. ;
    CONST robtarget P70:=…. ;
    CONST robtarget P80:=…. ;
    CONST robtarget P_epera:=…. ;
    VAR num cont_Pieza:=1; ! También válido PERS num cont_piezas:=1
    
    PROC main()
        MoveJ p_home, v1000, z50, tool pinza1;
        cont_piezas:=1; ! Inicialización del dato numérico cont_piezas a valor 1
        WHILE cont_piezas < 21 DO
            MoveJ p10, v1000, z50, tool pinza1;
            WaitDI d1, 1;
            MoveL p20, v500, fine, tool pinza1;
            MoveL p10, v500, z50, tool pinza1;
            MoveJ p30, v1000, z50, tool pinza1;
            WaitUntil db1=0 AND db2=0;
            MoveJ p_espera, v1000, z50, tool pinza1;
            WaitUntil d2=0 OR d3=0;
            IF d2=0 THEN
                MoveJ p40, v1000, z50, tool pinza1;
                MoveL p50, v500, fine, tool pinza1;
                MoveL p40, v1000, z50, tool pinza1;
            ELSEIF d3=0 THEN
                MoveJ p60, v1000, z50, tool pinza1;
                MoveL p70, v500, fine, tool pinza1;
                MoveL p60, v1000, z50, tool pinza1;
            ENDIF
            cont_piezas:=cont_piezas+1; ! También válido Incr cont_piezas;
        ENDWHILE
        MoveJ p80, v1000, fine, tool pinza1;
        Set DO11;
    ENDPROC
ENDMODULE

9. Instrucción FOR…ENDFOR

Paletizado: El robot coge piezas de la mesa de entrada y las deposita en un palet bidimensional tal como se indica en la figura del proceso. El sentido del paletizado y la orientación de las coordenadas mundo del robot se indican en la figura.
NOTA: Los puntos de referencia p30 y p40 tienen que haberse declarado o creado previamente.

MODULE ejercicio5
    CONST robtarget P_Home:=…. ;
    CONST robtarget P10:=…. ;
    CONST robtarget P20:=…. ;
    CONST robtarget P30:=…. ;
    CONST robtarget P40:=…. ;
    ! Las variables de For no es preciso declararlas, si se declaran:
    VAR num j;
    
    PROC Main()
        MoveJ P_home, v1000, z50, tool0;
        FOR i FROM 0 TO -300 STEP -150 DO
            FOR j FROM 0 TO 500 STEP 100 DO
                MoveJ p10, …….;
                WaitDI detector, 1;
                MoveL p20, …….;
                Set do_electroiman;
                WaitTime 0.5;
                MoveL p10, v500, fine, tool pinza1;
                MoveJ Offs(p30, j, i, 0), v500, fine, tool pinza1;
                MoveL Offs(p40, j, i, 0), v500, fine, tool pinza1;
                Reset do_electroiman;
                WaitTime 0.5;
                MoveL Offs(p30, j, i, 0), v500, fine, tool pinza1;
            ENDFOR
        ENDFOR
    ENDPROC
ENDMODULE

10. TEST…ENDTEST (y uso de grupo de entradas)

En una estación de trabajo que procesa 4 tipos de piezas distintas, el PLC le informa al robot del tipo de pieza que tiene que procesar. Para ello se dispone en el robot de un Grupo de entradas digitales denominado GI_seleccion formado por 3 entradas digitales (previamente configurado en los parámetros de I/O). Estas entradas están conectadas a 3 salidas digitales del PLC, cuyo programa envía al robot mediante esta salida un valor binario correspondiente al tipo de pieza que se ha de procesar. El programa de robot debe de ejecutar la rutina correspondiente a la pieza según las siguientes condiciones:

  • Valor (decimal) 0: Programa parado
  • Valor 2: Pieza tipoA
  • Valor 3 o 5: TipoD
  • Valor 4: Pieza tipoB
  • Valor 6: Pieza tipoC
  • Valor 7: Valor no reconocido

(Nota: Prescindimos de la programación de cada rutina)

MODULE ejercicio5
    VAR num tipo_pieza := 0; ! Declaración tipo Dato
    
    PROC main()
        …….;
        tipo_pieza := GInput(GI_selection); ! GI_selection entrada digitales al PLC
        TEST tipo_pieza
        CASE 2:
            Rutina_tipoA;
        CASE 4:
            rutina_tipoB;
        CASE 6:
            rutina_tipoC;
        CASE 3, 5:
            rutina_tipoD;
        CASE 0:
            STOP;
        DEFAULT:
            TPWrite "Valor para rutina no reconocido";
            STOP;
        ENDTEST
    ENDPROC
ENDMODULE

11. Paletización de clase Main pallet

CONST robtarget P_Dejar := (....);
VAR num Movx := 0;
VAR num Movy := 0;
VAR num Movz := 0;

PROC main()
    FOR posz FROM 1 TO 4 STEP 1 DO
        FOR posy FROM 1 TO 2 STEP 1 DO
            FOR posx FROM 1 TO 4 STEP 1 DO ! 4 veces
                MoveL Offs(Pdejar, Movx, Movy, Movz), v500, zfine, tool1;
                Movx := Movx - 42; ! Distancia entre centros
            ENDFOR
            Movy := Movy + 30; ! Distancia entre centros
            Movx := 0;
        ENDFOR
        Movz := Movz + 20;
        Movy := 0;
    ENDFOR
ENDPROC

Descargar

PDF Word HTML