lupusimprobus Inserito: 3 luglio 2017 Segnala Inserito: 3 luglio 2017 Buongiorno a tutti. Ho un problema di programmazione con un Robot Comau G5C Ho una pinza tipo cambio utensile che deve: Aprire la pinza; Svincolare il robot; Controllare che l'utensile sia correttamente posizionato nel magazzino (tramite un segnale dal PLC via profinet); Proseguire con il movimento successivo solo se il bit di controllo è ON. Il codice del programma è il seguente: 01 -- $DOUT[74] = Comando apri pinza 02 $DOUT[74] := ON 03 -- Controllo che la pinza sia aperta 04 -- $DIN[75] = Pinza aperta 05 WAIT FOR $DIN[75] = ON 06 DELAY 500 07 -- Svincolo la pinza dall'utensile, salita in lenta 08 MOVEFLY LINEAR NEAR posDep BY off_S ADVANCE WITH $PROG_SPD_OVR = velRid 09 -- Prima di terminare lo svincolo in velocita rapida... 10 -- Controllo che il PX di presenza utensile sia libero 11 -- Reset del numero utensile in carico 12 -- $FMO[89] = Numero utensile presente sul robot 13 $FMO[89] := 0 14 -- $DOUT[79] = Scrittura utensile necessaria 15 PULSE $DOUT[79] FOR 500 16 17 -- Acquisizione stato utensili in magazzino 18 SELECT posizione OF -- "posizione" è una INT che indica in quale posizione [1..8] del magazzino sto lavorando 19 -- Depositato in posto 1 20 CASE(1): 21 -- $DIN[57] = Deposito eseguibile in posto 1 22 depOK := $DIN[57] -- depOK è un BOOL che identifica lo stato del PX che controlla il corretto posizionamento dell'utensile all'interno del magazzino. 23 -- Depositato in posto 2 24 CASE(2): 25 -- $DIN[58] = Deposito eseguibile in posto 2 26 depOK := $DIN[58] 27 -- Depositato in posto 3 28 CASE(3): 29 -- $DIN[59] = Deposito eseguibile in posto 3 30 depOK := $DIN[59] 31 -- Depositato in posto 4 32 CASE(4): 33 -- $DIN[60] = Deposito eseguibile in posto 4 34 depOK := $DIN[60] 35 -- Depositato in posto 5 36 CASE(5): 37 -- $DIN[61] = Deposito eseguibile in posto 5 38 depOK := $DIN[61] 39 -- Depositato in posto 6 40 CASE(6): 41 -- $DIN[62] = Deposito eseguibile in posto 6 42 depOK := $DIN[62] 43 -- Depositato in posto 7 44 CASE(7): 45 -- $DIN[63] = Deposito eseguibile in posto 7 46 depOK := $DIN[63] 47 -- Depositato in posto 8 48 CASE(8): 49 -- $DIN[64] = Deposito eseguibile in posto 8 50 depOK := $DIN[64] 51 ELSE: 52 -- Non dovrebbe mai accadere in quanto il programma principale 53 -- passa valori compresi tra 1 e 8 54 -- Comunque segnalo l'anomalia 55 alarmDeposito(5) 56 RETURN (5) 57 ENDSELECT 58 59 -- Verifica ce il deposito non sia piu disponibile 60 IF depOK = ON THEN 61 -- Posso depositare 62 -- Significa che il deposito non si e concluso correttamente 63 -- Posiziono la pinza in alto fuori ingombro 64 MOVEFLY LINEAR NEAR posDep BY off_L ADVANCE WITH $PROG_SPD_OVR = velRid 65 -- Segnalo l'errore 66 alarmDeposito(6) 67 RETURN (6) 68 ENDIF -- depOK = ON Riga: 08 : Svincolo la pinza dal magazzino 09..16: Segnali che mando al PLC 17..57: In base alla variabile "posizione" leggo lo stato del sensore del posto magazzino corrispondente. 59..67: Controllo lo stato della variabile "depOK" (ON/OFF) A quanto ho capito, il controllo dello stato del sensore viene fatto durante il movimento della riga 08 e non alla sua conclusione, ciò fa si ce se il sensore viene impegnato durante il movimento il robot considera il controllo positivo e prosegue comunque con i movimenti. Come posso modificare il programma per essere sicuro che il robot controlli lo stato del sensore solo dopo aver concluso il movimento? Grazie a tutti per l'attenzione. Valerio Gallo
lupusimprobus Inserita: 4 luglio 2017 Autore Segnala Inserita: 4 luglio 2017 Risposta da COMAU: Per non far elaborare il codice del controllo presenza utansile prima che il movimento di svincolo (riga 08) sia concluso, occorresostituire la riga 07 -- Svincolo la pinza dall'utensile, salita in lenta 08 MOVEFLY LINEAR NEAR posDep BY off_S ADVANCE WITH $PROG_SPD_OVR = velRid con... 07 -- Svincolo la pinza dall'utensile, salita in lenta 08 MOVE LINEAR NEAR posDep BY off_S WITH $PROG_SPD_OVR = velRid In pratica basta togliere il MOVEFLY-ADVANCE
beppo Inserita: 9 luglio 2017 Segnala Inserita: 9 luglio 2017 Grazie per aver aver condiviso la soluzione..
Livio Orsini Inserita: 10 luglio 2017 Segnala Inserita: 10 luglio 2017 La condivisione è lo spirito del forum.
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora