Metto a disposizione ciò che uso attualmente, in allegato macro per azzerare l'asse Z sul pezzo:
CurrentFeed=GetOemDRO(818)
DoSpinStop()
Zmove=200.00
ZOffset=49.75
ZSal=ZOffset+10.25
StopZmove=0
If GetOemLed(825)=0 Then
DoOEMButton(1010)
Code"G4 P2"
Code"G31 Z-"& ZMove &"F120"
While IsMoving()
Sleep(200)
Wend
Probepos=GetVar(2002)
If Probepos=-ZMove Then
responce=MsgBox("**TASTATORE NON TROVATO**",4,"Probe**ERROR**")
Code"G1 Z0"
StopZmove=1
Code "F" &CurrentFeed
End If
If StopZMove=0 Then
Code "G1 Z0"& Probepos
While IsMoving()
Sleep(200)
Wend
Call SetDro(2,ZOffset)
Code"G4 P2"
Code"G1 F4000 Z"&ZSal
Code"(Z zeroed)"
Code"F" &CurrentFeed
End If
Else
Code"(Check Ground Probe)"
End If
Exit Sub
Una volta azzerato l'asse, quando lancio il programma viene eseguita quest'altra macro:
DoSpinStop() ' fermo il motore M5
' controllo se la macchina è stata referenziata
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
' parametri lavorazione
ToolPathOnOff = 132 ' mi carico la definizione del tasto tool path
xzero = GetDRO (30) ' memorizzo la posizione iniziale ASSOLUTA di cambio utensile
yzero = GetDRO (31)
zzero = GetDRO (32)
xpos = GetDRO (0) ' memorizzo la posizione iniziale RELATIVA di cambio utensile
ypos = GetDRO (1)
zpos = GetDRO (2)
fpos = GetDRO (18) ' memorizzo il feedrate iniziale
' variabili del programma
fmax = 7000 ' imposto il feedrate massimo
fmin = 120 ' imposto il feedrate per la palpata
zavv = -150 ' distanza rapida di avvicinamento al palpatore
zmin = -220 ' profondità oltre il palpatore
xcut = -11 ' posizione X per cambio utensile
ycut = -460 ' posizione Y per cambio utensile
xtool = GetUserDRO (1200) ' posizione X del palpatore (Settings -> Tool Change Location)
ytool = GetUserDRO (1201) ' posizione Y del palpatore
ztool = GetUserDRO (1202) ' posizione Z del palpatore
' inizio programma
Call DoOEMButton (ToolPathOnOff) ' disabilito il tool path
code "G0 F" & fmax ' porto il feedrate al valore massimo
Code "G1 G53 Z0" ' porto Z a ZERO macchina
While IsMoving()
Wend
Call SetDro (2,0) ' porto il contatore Z a zero
code "G1 G53 X" & xtool & "Y" & ytool ' mi allineo sul palpatore
While IsMoving()
Wend
code "G1 Z" & zavv ' scendo in avvicinamento (fino a zavv)
While IsMoving()
Wend
code "G0 F" & fmin ' porto il feedrate al minimo
If IsSuchSignal (22) Then ' scendo sul palpatore per vedere la misura del utensile attuale
code "G31 Z" & zmin
While IsMoving()
Wend
End If
zuno = GetVar (2002) ' memorizzo il valore Z del utensile attuale
zsu = zuno + 2
code "G1 Z" & zsu ' salgo per la seconda misura
While IsMoving()
Wend
If IsSuchSignal (22) Then ' scendo per la seconda volta per vedere la misura del utensile attuale
code "G31 Z" & zmin
While IsMoving()
Wend
End If
zdue = GetVar (2002) ' memorizzo il valore Z del utensile attuale
zorig = (zuno + (zdue)) / 2
code "G0 F" & fmax ' riporto il feedrate al massimo
code "G1 G53 Z0" ' porto Z a ZERO macchina
While IsMoving()
Wend
code "G1 G53 X" & xcut & "Y" & ycut ' vado in una posizione comoda per il cambio utensile
While IsMoving()
Wend
MsgBox ("Ora si può cambiare la punta")
Response = MsgBox ("E' stato cambiato l'utensile?", 4 , "ATTENZIONE")
If (Response = 6) Then
i = 99
Else
MsgBox ("Riprendo il lavoro con l'utensile iniziale")
End If
If i <> 99 Then ' non faccio nulla
code "G1 G53 X" & xzero & "Y" & yzero ' torno alla posizione X Y zero pezzo
While IsMoving()
Wend
code "G1 X" & xpos & "Y" & ypos ' torno alla posizione X Y da dove ero partito
While IsMoving()
Wend
code "G1 F2000 G53 Z" & zzero ' riporto Z al valore zero pezzo
While IsMoving()
Wend
Call SetDro (2,0) ' porto il contatore Z a zero
code "G1 Z" & zpos ' riporto Z al valore di partenza
While IsMoving()
Wend
code "G0 F" & fpos ' riporto il feedrate al valore di partenza
MsgBox ("Per riprendere il lavoro premere 'START'")
DoSpinCW() ' riaccendo il mandrino M13 e riprendo il lavoro da dove l'avevo lasciato
Else
code "G1 G53 X" & xtool & "Y" & ytool ' mi allineo sul palpatore
While IsMoving()
Wend
code "G1 Z" & zavv ' scendo in avvicinamento
While IsMoving()
Wend
code "G0 F" & fmin ' porto il feedrate al minimo
If IsSuchSignal (22) Then ' scendo sul palpatore
code "G31 Z" & zmin
While IsMoving()
Wend
End If
zuno = GetVar (2002) ' memorizzo il valore Z del nuovo utensile
zsu = zuno + 2
code "G1 Z" & zsu ' salgo per la seconda misura
While IsMoving()
Wend
If IsSuchSignal (22) Then ' scendo per la seconda volta per vedere la misura del nuovo utensile
code "G31 Z" & zmin
While IsMoving()
Wend
End If
zdue = GetVar (2002) ' memorizzo il valore Z del nuovo utensile
znew = (zuno + (zdue)) / 2
code "G0 F" & fmax ' riporto il feedrate al massimo
code "G1 G53 Z0" ' ritorno Z ZERO macchina
While IsMoving()
Wend
code "G1 G53 X" & xzero & "Y" & yzero ' torno alla posizione X Y zero pezzo
While IsMoving()
Wend
code "G1 X" & xpos & "Y" & ypos ' torno alla posizione X Y da dove ero partito
While IsMoving()
Wend
zdif = zorig - (znew) ' controllo se l'utensile è più corto o piu lungo
code "G1 F2000 G53 Z" & zzero-(zdif) ' riporto Z al valore zero pezzo con la differenza utensile
While IsMoving()
Wend
Call SetDro (2,0) ' porto contatore Z a zero
code "G1 Z" & zpos ' riporto Z al valore di partenza (inizio programma)
While IsMoving()
Wend
code "G0 F" & fpos ' riporto il feedrate al valore di partenza
MsgBox ("Per riprendere il lavoro premere 'START'")
End If
' riprendo il lavoro da dove l'avevo lasciato
Else
MsgBox ("Per poter cambiare l'utensile bisogna aver prima referenziato la macchina")
End If
Call DoOEMButton (ToolPathOnOff) ' abilito il tool path
Questa macro esegue la misurazione in una posizione fissa dell'utensile con cui mi sono azzerato in precedenza (prima macro) e per differenza azzera l'utensile richiamato dal programma. In pratica se l'utensile usato per azzerare l'asse Z sul pezzo è lo stesso di inizio programma, non serve sostituirlo, altrimenti dopo la sostituzione ritorna al posto fisso di misurazione e per differenza azzera l'utensile richiesto.
Ciò che vorrei fare è integrare questa macro con un magazzino utensili a più posizioni ma mantenere lo stesso sistema di misurazione.
Macro con magazzino:
Sub Main()
OldTool = GetOEMDRO (1200) 'Tool In spindle DRO You must add this to your settings screen
x = GetToolChangeStart( 0 )
y = GetToolChangeStart( 1 )
z = GetToolChangeStart( 2 )
tool = GetSelectedTool()
NewTool = tool
'----------------Tool Changer Macro (Bed Type)----------------------
MaxToolNum = 4 'Max number off tools for the changer
ToolDown = -50 'Z Pos to Get or drop a tool
ToolUp = 0 'Z Hieght to Rapid from tool to tool
'--------------------Auto Tool Zero---------------------------------
PlateThickness = GetUserDRO(1151) 'Z-plate thickness DRO
If GetOemLed (825)=0 Then 'Check to see if the probe is already grounded or faulty
DoOEMButton (1010) 'zero the Z axis so the probe move will start from here
Else
Code "(Z-Plate is grounded, check connection and try again)" 'this goes in the status bar if aplicable
End If
'-------------------------------------------------------------------
If NewTool = OldTool Then
Exit Sub
End If
While NewTool > MaxToolNum
NewTool = Question ("Enter New Tool Number up to " & MaxToolNum)
Wend
Code "G00 G53 Z" & ToolUp
While IsMoving()
Wend
Call MovePos(OldTool)
While IsMoving()
Wend
Code "G53 Z" & ToolDown
Code "G4 P.75"
While IsMoving()
Wend
ActivateSignal(Output1) 'Turn On Draw bar to release the tool
Code "G4 P1.0" 'Wait for the tool to release
Code "G53 Z-0.5" & ToolUp
Call MovePos(NewTool)
While IsMoving()
Wend
Code "G53 Z" & ToolDown
Code "G4 P.75"
While IsMoving()
Wend
DeActivateSignal(Output1) 'Turn Off Draw bar to Clamp the tool
Code "G4 P1.0" 'Wait for the tool to Clamp
While IsMoving()
Wend
Code "G53 Z" & ToolUp
Call SetUserDRO (1200,NewTool)
SetCurrentTool( NewTool )
'-----------------------------Auto Tool Zero-----------------------------
Code "G53 G0 X100 Y100" ' Move to Probe position
Code "G4 P5" ' this delay gives me time to get from computer to hold probe in place
Code "G31Z-10 F100" 'probing move, can set the feed rate here as well as how far to move
While IsMoving() 'wait while it happens
Wend
ZProbePos = GetVar(2002) 'get the axact point the probe was hit
Code "G0 Z" &ZProbePos 'go back to that point, always a very small amount of overrun
While IsMoving ()
Wend
Call SetDro (2, PlateThickness) 'set the Z axis DRO to whatever is set as plate thickness
Code "G4 P0.25" 'Pause for Dro to update.
Code "G0 Z1." 'put the Z retract height you want here
Code "(Z axis is now zeroed)" 'puts this message in the status bar
Code "G00 X" & x & " Y" & y 'Move back to where the tool change was prompted
End Sub
'---------------------------Tool Positio-------------------------------------
Sub MovePos(ByVal ToolNumber As Integer)
Select Case ToolNumber
Case Is = 1
Xpos = -50.0
YPos = -100.0
Case Is = 2
Xpos = -50.0
YPos = -160.0
Case Is = 3
Xpos = -50.0
YPos = -220.0
Case Is = 4
Xpos = -50.0
YPos = -280.0
End Select
Code "G53 X" & XPos & " Y" & YPos
End Sub
Main
Aiuto!!!