martes, 24 de marzo de 2015

PROG_3 - Código

Si bien la programacion es correcta (comprobado en modo T1 reubicando manualmente cada bloque) la variación de dimensiones entre piezas povoca colisiones como la del video, imposibilitando la ejecución en modo AUTO.






DEF  PROG_3_Alvarez ( )
   INT I, J, X, Y, Z, PIEZAS, CAPA
   REAL LARGO, ANCHO, ALTO
   POS CINTA, PALET, IMPARH, IMPARV, PARH, PARV
  
INI

PTP HOME  Vel= 100 % DEFAULT

   $Tool = TOOL_DATA[2]
   FOR I = 1 TO 6
      $ACC_AXIS[I] = 50
      $VEL_AXIS[I] = 50
   ENDFOR
  
   LARGO = 80
   ANCHO = 40
   ALTO = 40
   CINTA.X = (9*ANCHO) - (ANCHO/2)
   CINTA.Y = (2*LARGO) - (LARGO/2)
   CINTA.Z = ALTO + 50
  
   PALET.X = (3 * ANCHO) - (ANCHO/2)
   PALET.Y =  (2 * LARGO) - (LARGO/2)
   PALET.Z = ALTO + 50
  
   PALET.X = (3 * ANCHO) - (ANCHO/2)
   PALET.Y =  (2 * LARGO) - (LARGO/2)
   PALET.Z = ALTO + 50
  
   PIEZAS = 0
   $BASE = BASE_DATA[4]
   PTP{X 340, Y 120, Z 90, A 0, B -90, C -180, S 'B110', T 'B110010'}
  
   FOR  CAPA = 1 TO 3
      FOR I = 1 TO 6
        
         PIEZAS = PIEZAS +1
        
         SWITCH PIEZAS
            CASE 2, 4, 6, 8, 10, 12, 14, 16, 18
               CINTA.Y = LARGO/2
              
              
               $BASE = BASE_DATA[4]
              
               LIN CINTA
               LIN_REL {Z -50}
               COGER()
               LIN_REL {Z 100}
               CINTA.X = CINTA.X - ANCHO
              
            CASE 1, 3, 5, 7, 9, 11, 13, 15, 17
              
               CINTA.Y = LARGO * 1.5
              
               $BASE = BASE_DATA[4]
              
               LIN CINTA
               LIN_REL {Z -50}
               COGER()
               LIN_REL {Z 100}              
              
         ENDSWITCH
        
         $BASE = BASE_DATA[5]
        
         SWITCH CAPA
            CASE 1, 3
               IF I == 1 then
                  IMPARH.X = PALET.X -( LARGO + ANCHO/2)
                  IMPARH.Y = PALET.Y - ANCHO
                  IMPARH.Z = PALET.Z + (CAPA-1)*ALTO
                 
                  IMPARV.X = PALET.X -(LARGO/2)
                  IMPARV.Y = PALET.Y -(ANCHO/2)
                  IMPARV.Z = PALET.Z + (CAPA-1)*ALTO
               ENDIF              
              
               SWITCH I
                  CASE 1, 2, 4, 5
                    
                     LIN IMPARV
                     LIN {A 90}
                     LIN_REL {Z -50}
                     SOLTAR()
                     LIN_REL {Z 50}
                     LIN {A -90}
                    
                     IMPARV.Y = IMPARV.Y - ANCHO                 
                    
                  CASE 3, 6
                    
                     LIN IMPARH
                    
                     LIN_REL {Z -50}
                     SOLTAR()
                     LIN_REL {Z 50}
                    
                    
                     IMPARH.Y = IMPARH.Y - LARGO                    
                    
               ENDSWITCH
              
              
            CASE 2
               IF I == 1 then  
                  PARH.X = PALET.X -(ANCHO/2)
                  PARH.Y = PALET.Y -(LARGO/2)
                  PARH.Z = PALET.Z + (CAPA-1)*ALTO
                 
                  PARV.X = PALET.X -(ANCHO + LARGO/2)
                  PARV.Y = PALET.Y -(ANCHO/2)
                  PARV.Z = PALET.Z + (CAPA-1)*ALTO
               ENDIF
              
               SWITCH I
                  CASE 1, 2, 4, 5
                    
                     LIN PARV
                     LIN {A 90}
                     LIN_REL {Z -50}
                     SOLTAR()
                     LIN_REL {Z 50}
                     LIN {A -90}
                    
                     PARV.Y = PARV.Y - ANCHO                    
                    
                    
                  CASE 3, 6
                    
                     LIN PARH
                     LIN_REL {Z -50}
                    
                     SOLTAR()
                     LIN_REL {Z 50}
                    
                    
                     PARH.Y = PARH.Y - LARGO
               ENDSWITCH
         ENDSWITCH
      ENDFOR
   ENDFOR
  
PTP HOME  Vel= 100 % DEFAULT
  
END

DEF COGER()
  
   $OUT[2]=TRUE
   $OUT[5]=FALSE
   WAIT SEC 1.000000
  
END

DEF SOLTAR()
  
   $OUT[2]=FALSE
   $OUT[5]=TRUE
   WAIT SEC 1.000000
END

No hay comentarios:

Publicar un comentario