Allora, ho lavorato in questo modo ma ho un problema da risolvere e chiedo il vostro aiuto:
1) azzero il primo utensile sul pezzo
2) avvio la lavorazione e nel G-CODE ce quando incontra l'istruzione di cambio utensile "M6 T2" richiama il codice contenuto in M6start modificato come segue:
Codice: Seleziona tutto
'M6Start
TastatoreX = 35
TastatoreY = 100
ZoffsetParam = 2
MisuraTastatura = 0
If Not GetLed (7) Then ' è referenziato X
vxled = 1
End If
If Not GetLed (8) Then ' è referenziato Y
vyled = 1
End If
If Not GetLed (9) Then ' è referenziato Z
vzled = 1
End If
Tled = vxled + vyled + vzled
If Tled = 3 Then ' se non sono referenziati X, Y e Z esco
If IsSuchSignal (22) Then ' Il Probe è abilitato
DoSpinStop() ' Fermo il Motore
'fa l'homing dell'asse Z
DoButton(24)
'aspetta che abbia terminato il movimento
While IsMoving()
Sleep 500
Wend
'Si sposta sul tastatore
code "G53 G0 Z0"
code "G53 G0 X" & TastatoreX & " Y" & TastatoreY
While IsMoving()
Sleep 500
Wend
'Cerco Switch fino a -200
code "G31 Z" & (GetParam("ZDRO")-200) & "F180"
code "G4 P1"
While IsMoving()
Sleep 500
Wend
MisuraTastatura = GetParam("ZMachine")
SetVar(1234, MisuraTastatura)
Code "G4 P1.0" 'Pausa per fargli aggiornare il valore
'SetUserDRO(2001, GetParam("ZDRO")) ' Trovato il segnale cioè lo switch, sovrascrivo il valore dell'UserDRO
' con quello letto in ZDRO
'fa l'homing dell'asse Z per sicurezza
DoButton(24)
'aspetta che abbia terminato il movimento
While IsMoving()
Sleep 500
Wend
code "G53 G0 X200 Y0" 'posizione per il cambio utensile
While IsMoving()
Sleep 500
Wend
tool = GetSelectedTool()
SetCurrentTool( tool )
Code "G4 P1.0" 'Pausa per fargli aggiornare il valore
End If
Else
MsgBox ("Per poter cambiare l'utensile bisognava prima aver referenziato la macchina")
End If
con questo codice effettuo una prima tastatura dell'utensile per determinarne la lunghezza del primo utensile che memorizzo nella variabile "SetVar(1234, MisuraTastatura)", mi sarà utile dopo.
Subito sposto il mandrino in una posizione comoda per effettuare il cambo utensile e riprendo la lavorazione. A questo punto:
3) viene eseguito il codice contenuto nel file M6End che riporto di seguito:
Codice: Seleziona tutto
'REM The default script here moves the tool back To m6start If Any movement has occured during the tool change..
'x = GetToolChangeStart( 0 )
'y = GetToolChangeStart( 1 )
'z = GetToolChangeStart( 2 )
'a = GetToolChangeStart( 3 )
'b = GetToolChangeStart( 4 )
'c = GetToolChangeStart( 5 )
'if(IsSafeZ() = 1) Then
' SafeZ = GetSafeZ()
' If SafeZ > z Then StraightTraverse x, y,SafeZ, a, b, c
' 'StraightFeed x, y, z , a, b, c
'else'
' Code "G00 X" & x & "Y" & y
'End If
TastatoreX = 35
TastatoreY = 100
Dim ZPartenza
Dim MisuraTastatura
Dim ZArrivo
Dim DifferenzaTraUtensili
Dim NuovaZ
If IsSuchSignal (22) Then ' Il Probe è abilitato
DoSpinStop() ' Fermo il Motore
ZPartenza = GetParam("ZDRO")
'fa l'homing dell'asse Z
DoButton(24)
While IsMoving()
Sleep 500
Wend
'si sposta sul tastatore
code "G53 G0 X" & TastatoreX & " Y" & TastatoreY
Sleep (500)
While IsMoving()
Sleep 500
Wend
' Cerco Switch fino a -200
code "G31 Z" & (GetParam("ZDRO")-200) & "F180"
Sleep (500)
While IsMoving() ' Aspetto mentre si muove
Sleep 100
Wend
'recupera la misura della tastatura avvenuta nella routine M6Start
'serve per misurare la differenza di lunghezza tra gli utensili
MisuraTastatura = GetVar(1234)
ZArrivo = GetParam("ZMachine")
Code "G4 P2.00" 'Pausa per fargli leggere il valore
DifferenzaTraUtensili = ZArrivo - MisuraTastatura
NuovaZ = ZPartenza - DifferenzaTraUtensili
'MsgBox("NuovaZ: " & NuovaZ)
'fa l'homing dell'asse Z
DoButton(24)
'aspetta che abbia terminato il movimento
While IsMoving()
Sleep 500
Wend
Code "G4 P2.00" 'pausa
'SetOEMDRO(ZDRO, NuovaZ)
'torna al vecchio sistema di coordinate
'Code "G54 G90"
'Code "G4 P5.0" 'Pause for Dro to update
'Code "G10 L2 P1 Z" & NuovaZ
'Code "G4 P1.0" 'Pause for Dro to update
'imposta la nuova Z
SetToolZ(NuovaZ)
'SetOEMDro (2, NuovaZ)
Code "G4 P2.00" 'Pausa per fargli scrivere il valore
End If
questo codice misura la lunghezza del nuovo utensile e la confronta con la misura effettuata in precedenza e memorizzata nella variabile "MisuraTastatura" per ottenere la differenza di lunghezza tra i due utensili. Calcolo quindi il nuovo valore di Z.
Il codice contenuto in M6Start funziona perfettamente in ogni condizione mentre il secondo codice, quello di M6End, funziona bene solo in modalità debug (ossia eseguo una riga per volta nell'editor di VBScript), al contrario se avvio la lavorazione normalmente sbala (probabilmente) la memorizzazione del nuovo valore di Z che risulta essere più del doppio di quello che dovrebbe essere. Ho provato a inserire pause (Sleep) o ritardi con Code "G4" ma non ne vuole sapere.
Qualcuno ha qualche suggerimento?