Strumenti Utente

Strumenti Sito


riservata:pw3a2025

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
riservata:pw3a2025 [2025/04/20 17:16] – [Cose minori] adminriservata:pw3a2025 [2025/05/27 07:48] (versione attuale) – [Cose minori] admin
Linea 23: Linea 23:
   * testo il movimento con //Move Along Path// poi sincronizzo con RAPID e eseguo il programma   * testo il movimento con //Move Along Path// poi sincronizzo con RAPID e eseguo il programma
   * dentro MainModule creo le procedure apriPinza() e chiudiPinza() con le istruzioni g_MoveTo(15) e g_GripIn che posso chiamare anche in ambiente grafico dopo aver sincronizzato alla stazione; ricordarsi //Apply// (e volendo //Check Program//) per applicare le modifiche al codice   * dentro MainModule creo le procedure apriPinza() e chiudiPinza() con le istruzioni g_MoveTo(15) e g_GripIn che posso chiamare anche in ambiente grafico dopo aver sincronizzato alla stazione; ricordarsi //Apply// (e volendo //Check Program//) per applicare le modifiche al codice
 +  * creo le variabili tipo num colonna e traversa e la costante tipo num delta
 +  * creo la procedura preleva con due parametri (c,t) che usa la funzione Offs per portare il TCP nel punto di prelievo in base alle coordinate c e t della notazione algebrica
 +  * chiamo la funzione (no parentesi!)
 +  * testo la funzione 
 +  * **NB spesso bisogna re-inizializzare il Virtual SmartGripper che ogni tanto impazzisce da Proprietà mettendo ReInizialization_Enabled a 1 e cliccando su ReInitialize_SmartGripper**
 +  * **resettare la simulazione dopo ogni esecuzione del programma e riportare il program pointer a main dalla scheda Rapid|Program Pointer**
  
  
Linea 48: Linea 54:
     * 2.7 singolarità; due in più per i robot a 7 assi, nessun problema con MoveJ     * 2.7 singolarità; due in più per i robot a 7 assi, nessun problema con MoveJ
  
 +===== Programma per il robot =====
 +
 +<code>
 +
 +MODULE MainModule
 +    PERS tooldata Servo:=[TRUE,[[0,0,114.2],[1,0,0,0]],[0.24,[8.2,12.5,48.1],[1,0,0,0],0.00022,0.00024,0.00009]];
 +    PERS tooldata VaccumOne:=[TRUE,[[63.5,18.5,37.5],[0.707107,0,0.707107,0]],[0.24,[8.2,12.5,48.1],[1,0,0,0],0.00022,0.00024,9E-5]];
 +    PERS tooldata Camera:=[TRUE,[[-7.3,28.3,35.1],[0.5,-0.5,0.5,0.5]],[0.24,[8.2,12.5,48.1],[1,0,0,0],0.00022,0.00024,0.00009]];
 +    TASK PERS wobjdata wobj_scacchiera_a1:=[FALSE,TRUE,"",[[-500,-160,0],[1,0,0,0]],[[0,0,0],[1,0,0,0]]];
 +    CONST jointtarget sollevato:=[[8.27479467,-55.149085208,-30.437467621,-39.964939475,80.81227792,-129.284033591],[-129.406526204,9E+09,9E+09,9E+09,9E+09,9E+09]];
 +    CONST robtarget sopra_a1:=[[20.000045174,19.999986455,174.999892058],[0.000000042,-0.000000014,1,0.000000086],[0,0,-2,4],[40.568814509,9E+09,9E+09,9E+09,9E+09,9E+09]];
 +    CONST robtarget presa_a1:=[[20.0000107,20.000045104,74.999976278],[0.000000003,0.000000011,1,0.000000087],[0,-1,-2,4],[40.568807487,9E+09,9E+09,9E+09,9E+09,9E+09]];
 +
 +    ! definizioni sulla scacchiera https://it.wikipedia.org/wiki/Notazione_algebrica
 +    
 +    ! distanza tra una casa e l'altra (lato della casella)
 +    CONST num delta:=40;
 +    ! stringa di testo con le coordinate di prelievo e deposito del pezzo inviata dal PC
 +    VAR string sFrom:="11";
 +    VAR string sTo:="53";
 +    ! valore numerico corrispondente alle due stringhe
 +    VAR num numFrom;
 +    VAR num numTo;
 +    ! coordinate x e y dei punti di prelievo e deposito (x = colonna, y = traversa)
 +    VAR num x1;
 +    VAR num y1;
 +    VAR num x2;
 +    VAR num y2;
 +
 +    PROC main()
 +        ! NB bisogna calibrare la pinza da Impostazioni|SmartGripper|modulo servoassistito 
 +        ! cliccare su grip+ poi grip- e infine Calibrate
 +        
 +        !sollevo il robot
 +        MoveAbsJ sollevato,v500,z10,Servo\WObj:=wobj_scacchiera_a1;
 +        
 +        ! converte la stringa in un valore numerico e segnala eventuali errori di conversione
 +        IF StrToVal(sFrom,numFrom)=FALSE THEN
 +            TPWrite "Conversion Failed!";
 +            Stop;
 +        ENDIF
 +        IF StrToVal(sTo,numTo)=FALSE THEN
 +            TPWrite "Conversion Failed!";
 +            Stop;
 +        ENDIF
 +
 +        ! ricava le coordinate dal valore numerico (yx -> x, y)
 +        x1:=numFrom MOD 10;
 +        ! cifra meno significativa
 +        y1:=numFrom DIV 10;
 +        ! cifra più significativa
 +        x2:=numTo MOD 10;
 +        ! cifra meno significativa
 +        y2:=numTo DIV 10;
 +        ! cifra più significativa
 +
 +        ! sposto il pezzo da x1,y1 a x2,y2
 +        preleva x1,y1;
 +        deposita x2,y2;
 +
 +        ! sollevo il robot
 +        MoveAbsJ sollevato,v500,z10,Servo\WObj:=wobj_scacchiera_a1;
 +
 +    ENDPROC
 +
 +    PROC preleva(num c,num t)
 +        ! sposta il braccio sopra il punto di prelievo
 +        apriPinza;
 +        MoveJ Offs(sopra_a1,delta*(c-1),delta*(t-1),0),v500,z10,Servo\wobj:=wobj_scacchiera_a1;
 +        MoveL Offs(presa_a1,delta*(c-1),delta*(t-1),0),v500,fine,Servo\wobj:=wobj_scacchiera_a1;
 +        chiudiPinza;
 +        MoveL Offs(sopra_a1,delta*(c-1),delta*(t-1),0),v500,z10,Servo\wobj:=wobj_scacchiera_a1;
 +    ENDPROC
 +
 +    PROC deposita(num c,num t)
 +        ! sposta il braccio sopra il punto di prelievo
 +        MoveJ Offs(sopra_a1,delta*(c-1),delta*(t-1),0),v500,z10,Servo\wobj:=wobj_scacchiera_a1;
 +        MoveL Offs(presa_a1,delta*(c-1),delta*(t-1),0),v500,fine,Servo\wobj:=wobj_scacchiera_a1;
 +        apriPinza;
 +        MoveL Offs(sopra_a1,delta*(c-1),delta*(t-1),0),v500,z10,Servo\wobj:=wobj_scacchiera_a1;
 +    ENDPROC
 +
 +    ! per aprire e chiudere la pinza anche dall'ambiente grafico
 +    PROC apriPinza()
 +        g_MoveTo(15);
 +    ENDPROC
 +
 +    PROC chiudiPinza()
 +        g_GripIn;
 +    ENDPROC
 +
 +ENDMODULE
 +</code>
  
  
riservata/pw3a2025.1745169415.txt.gz · Ultima modifica: da admin