Attention, sorry posted the wrong code, here the right one
code "M5" ' fermo il motore
' 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
xzero = GetDRO (30) ' memorizzo la posizione iniziale ASSOLUTA di cambio utensile
yzero = GetDRO (31)
zzero = GetDRO (32)
xpos = GetDRO (0) ' memorizzo la posizione inizioale RELATIVA di cambio utensile
ypos = GetDRO (1)
zpos = GetDRO (2)
fpos = GetDRO (18) ' memorizzo il feedrate iniziale
' variabili del programma
fmax = 400 ' imposto il feedrate massimo
fmin = 100 ' imposto il feedrate per la palpata
zavv = -50 ' distanza rapida di avvicinamento al palpatore
zmin = -80 ' profondità oltre il palpatore
xcut = 0 ' posizione X per cambio utensile
ycut = 0 ' 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
code "G0 F" & fmax ' porto il feedrate al valore massimo
code "G53 G0 Z0" ' porto Z a ZERO macchina
While IsMoving()
Wend
' Call SetDro (2,0) ' porto il contatore Z a zero
code "G53 G0 X" & xtool & "Y" & ytool ' mi allineo sul palpatore
While IsMoving()
Wend
code "G0 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 della punta attuale
' code "G31 Z" & zmin
code "G31 Z" & zavv+zmin
While IsMoving()
Wend
End If
zorig = GetVar(2002) ' memorizzo il valore di Z della punta attuale
code "G0 F" & fmax ' riporto il feedrate al massimo
code "G53 G0 Z0" ' porto Z a ZERO macchina
While IsMoving()
Wend
code "G53 G0 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' stata cambiata la punta?", 4 , "ATTENZIONE")
If (Response = 6) Then
i = 99
Else
MsgBox ("Riprendo il lavoro con la punta iniziale")
End If
If i <> 99 Then ' non faccio nulla
code "G53 G0 X" & xzero & "Y" & yzero ' torno alla posizione X Y zero pezzo
While IsMoving()
Wend
code "G0 X" & xpos & "Y" & ypos ' torno alla posizione X Y da dove ero partito
While IsMoving()
Wend
code "G53 G0 Z" & zzero ' riporto Z al valore zero pezzo
While IsMoving()
Wend
Call SetDro (2,0) ' porto il contatore Z a zero
code "G0 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 il pulsante 'LAVORAZIONE'")
code "M3" ' riaccendo il motore e riprendo il lavoro da dove l'avevo lasciato
Else
code "G53 G0 X" & xtool & "Y" & ytool ' mi allineo sul palpatore
While IsMoving()
Wend
code "G0 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
code "G31 Z" & zavv+zmin
While IsMoving()
Wend
znew = GetVar (2002) ' memorizzo il valore di Z della nuova punta
code "G0 F" & fmax ' riporto il feedrate al massimo
code "G53 G0 Z0" ' ritorno Z ZERO macchina
While IsMoving()
Wend
End If
code "G53 G0 X" & xzero & "Y" & yzero ' torno alla posizione X Y zero pezzo
While IsMoving()
Wend
code "G0 X" & xpos & "Y" & ypos ' torno alla posizione X Y da dove ero partito
While IsMoving()
Wend
code "M3" ' riaccendo il motore
zdif = zorig - (znew) ' controllo se l'utensile è più corto o piu lungo
' code "G53 G0 Z" & zzero-(zdif) ' riporto Z al valore zero pezzo con la differenza utensile
code "G0 Z" & zpos-(zdif) ' riporto Z al valore zero pezzo con la differenza utensile
While IsMoving()
Wend
' Call SetDro (2,0) ' porto contatore Z a zero
Call SetDro (2,zpos) ' porto contatore Z a zero
code "G0 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 il tasto LAVORAZIONE")
End If
' riprendo il lavoro da dove l'avevo lasciato
Else
MsgBox ("Per poter cambiare l'utensile bisognava prima aver referenziato la macchina")
End If