riservata:pw3a2025
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
| Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedente | ||
| riservata:pw3a2025 [2025/04/20 16:41] – [La parte del robot] admin | riservata: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 38: | Linea 44: | ||
| * 1.1.3 struttura del programma, moduli, routine, parametri | * 1.1.3 struttura del programma, moduli, routine, parametri | ||
| * tipi di dati: atomic, record, alias | * tipi di dati: atomic, record, alias | ||
| - | * array (1.2.2) | + | * array (1.2.2); record sono un' |
| + | * 1.3 espressioni, | ||
| + | * 1.4 istruzioni (anche il concetto di label) | ||
| + | * 1.5 controllo del flusso | ||
| + | * 1.6 istruzioni varie (generiche? | ||
| + | * 2.x movimento, sistemi di riferimento, | ||
| + | attiva, il robot si sposta verso la posizione e l' | ||
| + | configurazione con valori di giunto più prossimi rispetto al punto iniziale.// | ||
| + | * 2.7 singolarità; | ||
| + | |||
| + | ===== Programma per il robot ===== | ||
| + | |||
| + | < | ||
| + | |||
| + | MODULE MainModule | ||
| + | PERS tooldata Servo: | ||
| + | PERS tooldata VaccumOne: | ||
| + | PERS tooldata Camera: | ||
| + | TASK PERS wobjdata wobj_scacchiera_a1: | ||
| + | CONST jointtarget sollevato: | ||
| + | CONST robtarget sopra_a1: | ||
| + | CONST robtarget presa_a1: | ||
| + | |||
| + | ! definizioni sulla scacchiera https:// | ||
| + | |||
| + | ! distanza tra una casa e l' | ||
| + | CONST num delta: | ||
| + | ! stringa di testo con le coordinate di prelievo e deposito del pezzo inviata dal PC | ||
| + | VAR string sFrom: | ||
| + | VAR string sTo: | ||
| + | ! 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, | ||
| + | |||
| + | ! converte la stringa in un valore numerico e segnala eventuali errori di conversione | ||
| + | IF StrToVal(sFrom, | ||
| + | TPWrite " | ||
| + | Stop; | ||
| + | ENDIF | ||
| + | IF StrToVal(sTo, | ||
| + | TPWrite " | ||
| + | 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, | ||
| + | |||
| + | ENDPROC | ||
| + | |||
| + | PROC preleva(num c,num t) | ||
| + | ! sposta il braccio sopra il punto di prelievo | ||
| + | apriPinza; | ||
| + | MoveJ Offs(sopra_a1, | ||
| + | MoveL Offs(presa_a1, | ||
| + | chiudiPinza; | ||
| + | MoveL Offs(sopra_a1, | ||
| + | ENDPROC | ||
| + | |||
| + | PROC deposita(num c,num t) | ||
| + | ! sposta il braccio sopra il punto di prelievo | ||
| + | MoveJ Offs(sopra_a1, | ||
| + | MoveL Offs(presa_a1, | ||
| + | apriPinza; | ||
| + | MoveL Offs(sopra_a1, | ||
| + | ENDPROC | ||
| + | |||
| + | ! per aprire e chiudere la pinza anche dall' | ||
| + | PROC apriPinza() | ||
| + | g_MoveTo(15); | ||
| + | ENDPROC | ||
| + | |||
| + | PROC chiudiPinza() | ||
| + | g_GripIn; | ||
| + | ENDPROC | ||
| + | |||
| + | ENDMODULE | ||
| + | </ | ||
riservata/pw3a2025.1745167263.txt.gz · Ultima modifica: da admin
