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

Prog_2_2 - Código


DEF  Program_2_2 ( )
  
   INT I, J, X, Y, Z, PIEZAS
   REAL LARGO, ANCHO, ALTO
   POS CINTA, PALET
  
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 = 41
   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
   PIEZAS = 0
  
   $BASE = BASE_DATA[4]
   PTP{X 340, Y 120, Z 90, A 0, B -90, C -180, S 'B110', T 'B110010'}
  
   FOR Z = 1 TO 3
      FOR Y = 1 TO 2
         FOR X = 1 TO 3
            PIEZAS = PIEZAS +1
           
            SWITCH PIEZAS
               CASE 2, 4, 6, 8, 10, 12, 14, 16, 18
                  CINTA.Y = LARGO/2
                 
                 
                  $BASE = BASE_DATA[4]
                 
                  LIN_REL CINTA.X
                  LIN_REL CINTA.Y
                  LIN_REL CINTA.Z
                  LIN_REL {Z -50}
                  COGER()
                  LIN_REL {Z 100}
                  CINTA.X = CINTA.X - ANCHO
                 
               CASE 1, 3, 5, 7, 9, 11, 13, 15
                 
                  CINTA.Y = LARGO * 1.5
                 
                  $BASE = BASE_DATA[4]
                 
                  LIN_REL CINTA.X
                  LIN_REL CINTA.Y
                  LIN_REL CINTA.Z
                  LIN_REL {Z -50}
                  COGER()
                  LIN_REL {Z 100}
                 
                 
            ENDSWITCH
           
           
            $BASE = BASE_DATA[5]
            LIN PALET
            LIN_REL {Z -50}
            SOLTAR()
            LIN_REL {Z 50}
            PALET.X = PALET.X - ANCHO
         ENDFOR
         PALET.X = (3 * ANCHO) - (ANCHO/2)
         PALET.Y = PALET.Y - LARGO
      ENDFOR
      PALET.Y = (2 * LARGO) - (LARGO /2)
      PALET.Z = PALET.Z + ALTO
   ENDFOR

FOLD 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