MACRO M6 - Cambio utensile e calibrazione

Sezione dedicata a Mach3
Rispondi
Malmesso
Junior
Junior
Messaggi: 75
Iscritto il: sabato 7 maggio 2016, 11:55
Località: Tolmezzzo (UD)

MACRO M6 - Cambio utensile e calibrazione

Messaggio da Malmesso » lunedì 14 maggio 2018, 19:41

Salve a tutti.
Ho finito di testare questa macro per il cambio utensile e dovrebbe andare bene.

Funziona con l'opzione "Wait for Cycle Start" per il cambio utensile manuale che utilizza i file M6Start.m1s e M6End.m1s
Anche se non ho il cambio utensile automatico e non ho idea di come funziona, ho inserito oltre a una posizione di cambio, un'altezza di innesto che tengo a 0 e una velocità di innesto per renderla più facilmente modificabile in caso di cambio automatico.
Perchè funzioni correttamente bisogna sempre azzerare lo z-offset al di sopra del pezzo, in modo che il pezzo sia sotto il margine di sicurezza, avere gli spostamenti negativi verso il basso e attivare il margine di sicurezza rispetto al work offset.
Poi altri requisiti scritti all'inizio della macro: G-43 attivo, interruttori di limite, ecc..

La Macro Start misura l'utensile appena utilizzato e dice di quanto la lunghezza si è scostata dal valore in tabella utensile, senza correggere la compensazione Z-Wear.
Ovviamente la prima punta viene calibrata prima di iniziare il lavoro, le altre invece durante il cambio.
Poi si dirige al ToolChange e aspetta lo start.

La Macro End cambia l'utensile in base al parametro T dell'M6 effettua la calibrazione e scrive la compensazione in tabella dicendo di quanto è la correzione sulla compensazione.
Poi si dirige alla posizione iniziale che rispetto agli Offset è la stessa, ma in coordinate assolute la Z sarà pari alla posizione iniziale più la differenza tra le due punte.

Per i movimenti tra posizione iniziale, posizione cambio utensile e posizione calibrazione tengo conto della maggiore fra le altezze coinvolte, che sono in tutto 4 considerando anche il margine di sicurezza del pezzo.
Qualsiasi cosa succeda, la velocità di avanzamento viene ripristinata a quella iniziale.
Funziona anche con le coordinate macchina in mm e coordinate lavoro in pollici e viceversa, o entrambe in mm o in pollici.
Per versioni di Mach3 da 3.041 in giù, non funzionano le coordinate macchina in pollici perchè non viene letto il comando GetSetupUnits()
Per versioni sopra 3.043.037 non ho testato perchè non viene più gestito il DRO z-wear che preferisco avere sott'occhio, mentre rimane il Z-wear in tabella.
Siccome non ho inserito questo parametro tramite DRO, ma con comandi specifici, dovrebbe andare comunque.

Per la calibrazione c'è un'altezza di sicurezza che io tengo a 20-30 mm (l'utensile più lungo che ho) e una velocità di avvicinamento che tengo a 300 mm/min in cui l'utensile scende col comando G31.
In caso l'utensile fosse più lungo dell'intervallo di misurazione che tengo a 0,25mm con una velocità di 4mm/min, si ferma e mi dice di quanto eccede.
Altrimenti procede con la misurazione e in caso fosse più corto dell'intervallo di misurazione, il mandrino andrebbe oltre e quindi si ferma.
Durante la misurazione dell'utensile usato, in caso si verificasse una delle due ipotesi non valide mi chiede se voglio continuare la calibrazioine del secondo utensile.
Durante la misurazione dell'utensile da utilizzare si ferma la lavorazione.

Ci sono un po' di DRO da utilizzare, ma possono essere sostituiti con dei valori sulle macro.

Ho fatto anche le altre procedure per completare la questione calibrazione Z:

- calibrazione mandrino, l'ho fatta solo per rendermi conto che non serve ed è soggetta ad errori sistematici.
In base a questo valore determino la lunghezza dell'utensile durante la calibrazione utensile, non ha importanza che la lunghezza assoluta sia precisa, basta non spostare il piatto di misura durante la lavorazione.

- calibrazione utensile con verifica e margine di errore più ampio, da fare ogni volta che si inserisce un utensile nel tool-table e sul primo utensile a inizio lavoro.

- zero sul posto, da fare dopo aver calibrato l'utensile iniziale che non modifica l'offset dell'utensile ma lo zero pezzo. Essendo richiesto il segnale della sonda, è necessario che il pezzo da lavorare sia di metallo e serve un isolamento elettrico tra l'utensile e il piano di lavoro.
Sinceramente non so come si azzera l'offset in Z automaticamente, voi come fate?

Io non ho molte basi di meccanica per cui spero che possiate aiutarmi, controllando che le procedure e i termini siano corretti.
Per me è molto importante imparare ad usare i termini giusti.




' ---------------------- ZERO CAMBIO UTENSILE M6 START ----------------------

If IsEStop Then End
If GetOEMLED(34) = -1 Then
Message "Interruttori di limite attivati !"
End
End If
If GetOEMLED(23) = 0 Then
DoOEMButton (119)
If GetOEMLED(23) = 0 Then
Message "Machine out of limits for SoftLimit Activation."
sleep(5000)
DoOEMButton(1003)
End If
End If
If IsSuchSignal(22) = 0 Then
Message "Segnale della sonda non configurato!"
sleep(5000)
DoOEMButton(1003)
End If
If IsActive(22) Then
Message "Contatto della sonda attivato!"
sleep(5000)
DoOEMButton(1003)
End If
If IsSafeZ() <>1 Then
Message "Attivare L'altezza di sicurezza e configurarla in coordinate relative!"
End
End If
ToolZ = GetOEMDRO(32)
If ToolZ = 0 Then
Message "Inserire la lunghezza dell'utensile e abilitare Z offset!"
sleep(5000)
DoOEMButton(1003)
End If

UM = 1
If GetSetupUnits() = 0 Then
Unit = " mm"
If GetParam("Units") = 1 Then
Unit = " pollici"
UM = 1/25.4
End If
Else
Unit = " pollici"
If GetParam("Units") = 0 Then
Unit = " mm"
UM = 25.4
End If
End If

PrbX = UM*GetOEMDRO(1990) 'posizione misura utensile
PrbY = UM*GetOEMDRO(1991)
PrbZ = UM*GetOEMDRO(1992)
PrbSZ = UM*GetOEMDRO(1993) 'altezza di sicurezza della posizione di misura utensile
PrbSZFeed = UM*GetOEMDRO(1994) 'velocità di avvicinamento dall'altezza di sicurezza
Dist = UM*GetOEMDRO(1995) 'Intervallo della misurazione
DistFeed = UM*GetOEMDRO(1996) 'velocità della misurazione
CurrentFeed = GetOEMDRO(818)
Offset = GetOEMDRO(18) + GetOEMDRO(49) 'zero offset + g92
SafeZ = GetSafeZ()

Message "Utensile in deposito... " & GetToolDesc(GetCurrentTool())
'DoSpinStop()
Code "G90"

' Vai alla posizione di taratura - avvicinamento dall'altezza di sicurezza con G31

A = PrbZ + PrbSZ + ToolZ
B = Offset + SafeZ + ToolZ
C = GetABSPosition(2)

If A >= B And A >= C Then
Code "G53 G0 Z" & A
Else
If B >= A And B >= C Then
Code "G53 G0 Z" & B
End If
End If
Code "G53 G0 X" & PrbX & "Y" & PrbY
Code "G53 G0 Z" & A
Code "F" & PrbSZFeed & " G31 Z" & PrbZ - Offset + Dist
While IsMoving()
Wend

' Protezione
If GetOEMLED(825) = -1 Then
ZProbe = GetVar(2002)
Code "F" & CurrentFeed
Code "G53 G0 Z" & GetABSPosition (2) + Dist*8
If MsgBox ("L'utensile eccede di: " & Format (ZProbe + Offset - ToolZ - PrbZ, "0.0#######") & Unit & Chr(10) & Chr(10) & "Continuare?",52,"") = 7 Then
DoOEMButton(1003)
End
End If
Else

' Lettura vecchio utensile

Code "F" & DistFeed & "G31 Z" & PrbZ - Offset - Dist
While IsMoving()
Wend
ZProbe = GetVar(2002)
If ZProbe < PrbZ - Offset + ToolZ - Dist + UM*0.00001 Then
Code "F" & CurrentFeed
Code "G53 G0 Z" & GetABSPosition (2) + Dist*8
If MsgBox ("Nessun contatto rilevato!" & Chr(10) & Chr(10) & "Continuare?",52,"") = 7 Then
DoOEMButton(1003)
End
End If
Else
Comp = ZProbe + Offset - ToolZ - PrbZ
If Abs(Comp) < UM*0.001 Then Comp = 0
msg = "Aggiunti "
If Comp <= 0 Then msg = "Persi "
Message msg & Format(Abs(Comp), "0.0#######") & Unit & " durante la lavorazione..."
End If
End If

' Vai a ToolChange

TcX = UM*GetOEMDRO(1200) 'posizione cambio utensile
TcY = UM*GetOEMDRO(1201)
TcZ = UM*GetOEMDRO(1202)
TcSZ = UM*GetOEMDRO(1203) 'altezza di innesto x la posizione cambio utensile
TcSZFeed = UM*GetOEMDRO(1204) 'velocità di avvicinamento dall'altezza di innesto

A = ZProbe + Offset + Dist*8
C = TcZ + TcSZ

If A >= B And A >= C Then
Code "G53 G0 Z" & A
Else
If B >= A And B >= C Then
Code "G53 G0 Z" & B
Else
Code "G53 G0 Z" & C
End If
End If
Code "G53 G0 X" & TcX & "Y" & TcY
Code "G53 G0 Z" & C
Code "F" & TcSZFeed & " G53 G1 Z" & TcZ
While IsMoving()
Wend
Code "F" & CurrentFeed



' ---------------------- ZERO CAMBIO UTENSILE M6 END ----------------------

UM = 1
If GetSetupUnits() = 0 Then
Unit = " mm"
If GetParam("Units") = 1 Then
Unit = " pollici"
UM = 1/25.4
End If
Else
Unit = " pollici"
If GetParam("Units") = 0 Then
Unit = " mm"
UM = 25.4
End If
End If

TcZ = UM*GetOEMDRO(1202)
TcSZ = UM*GetOEMDRO(1203)
TcSZFeed = UM*GetOEMDRO(1204)

PrbX = UM*GetOEMDRO(1990)
PrbY = UM*GetOEMDRO(1991)
PrbZ = UM*GetOEMDRO(1992)
PrbSZ = UM*GetOEMDRO(1993)
PrbSZFeed = UM*GetOEMDRO(1994)
Dist = UM*GetOEMDRO(1995)
DistFeed = UM*GetOEMDRO(1996)
CurrentFeed = GetOEMDRO(818)
Offset = GetOEMDRO(18) + GetOEMDRO(49)
SafeZ = GetSafeZ()
ToolOldZ = GetOEMDRO(32)

' Cambio utensile

Message "Nuovo utensile... " & GetToolDesc(GetSelectedTool)
SetDRO(24, GetSelectedTool())
Code "F" & TcSZFeed
Sleep(400)
ToolZ = GetOEMDRO(32)

' Torna alla posizione di taratura

A = PrbZ + PrbSZ + ToolZ
B = Offset + SafeZ + ToolZ
C = TcZ + TcSZ

If A >= B And A >= C Then
Code "G53 G1 Z" & C
Code "G53 G0 Z" & A
Else
If B >= A And B >= C Then
Code "G53 G1 Z" & C
Code "G53 G0 Z" & B
Else
Code "G53 G1 Z" & C
End If
End If
Code "G53 G0 X" & PrbX & "Y" & PrbY
Code "G53 G0 Z" & A
Code "F" & PrbSZFeed & " G31 Z" & PrbZ - Offset + Dist
While IsMoving()
Wend

' Protezione

If GetOEMLED(825) = -1 Then
Code "F" & CurrentFeed
ZProbe = GetVar(2002)
Message "L'utensile eccede di: " & Format (ZProbe + Offset - ToolZ - PrbZ, "0.0#######") & Unit
Code "G53 G0 Z" & GetABSPosition (2) + Dist*8
While IsMoving()
Wend
DoOEMButton(1003)
End
End If

' Lettura nuovo utensile

Code "F" & DistFeed & "G31 Z" & PrbZ - Offset - Dist
While IsMoving()
Wend
Code "F" & CurrentFeed
ZProbe = GetVar(2002)
If ZProbe < PrbZ - Offset + ToolZ - Dist + UM*0.00001 Then
Message "Nessun contatto rilevato!"
Code "G53 G0 Z" & GetABSPosition (2) + Dist*8
While IsMoving()
Wend
DoOEMButton(1003)
End
End If
Comp = ZProbe + Offset - ToolZ - PrbZ
If Abs(Comp) < UM*0.001 Then Comp = 0
Message "Correzione Z-Wear: " & Format (Comp, "0.0#######") & Unit

' Inserisce la differenza per la lunghezza esatta della fresa nel parametro Z-Wear

SetToolParam(GetCurrentTool(), 4, (ZProbe + Offset - UM*GetToolParam(GetCurrentTool(),2) - PrbZ)/UM)
Code "G43"
Sleep(400)
ToolNewZ = GetOEMDRO(32)

'Torna alla posizione di partenza

x = GetToolChangeStart(0)
y = GetToolChangeStart(1)

A = ZProbe + Offset + Dist*8
B = Offset + SafeZ + ToolNewZ
C = GetToolChangeStart(2) + Offset + ToolNewZ - ToolOldZ

If (A >= B And A >= C) Then
Code "G53 G0 Z" & A
Else
If (B >= A And B >=C) Then
Code "G53 G0 Z" & B
Else
Code "G53 G0 Z" & C
End If
End If
Code "G0 X" & x & "Y" & y
Code "G53 G0 Z" & C
While IsMoving()
Wend

Avatar utente
danieleee
God
God
Messaggi: 3673
Iscritto il: lunedì 8 marzo 2010, 22:38
Località: Borgo Vercelli

Re: MACRO M6 - Cambio utensile e calibrazione

Messaggio da danieleee » martedì 15 maggio 2018, 8:17

Grazie per la condivisione!
Ti andrebbe di fare un video dove spieghi il funzionamento?
Rimmarrebbe di più facile comprensione ed utilizzo.

Malmesso
Junior
Junior
Messaggi: 75
Iscritto il: sabato 7 maggio 2016, 11:55
Località: Tolmezzzo (UD)

Re: MACRO M6 - Cambio utensile e calibrazione

Messaggio da Malmesso » martedì 15 maggio 2018, 19:54

Grazie per l'interesse!
Nel video dovrei parlare e non è il caso.
Però posso spiegare tutto se ci sono domande.
Per provarla basta inserirla nei rispettivi file ed inserire i valori al posto dei GetOEMDRO che ho aggiunto io e che sarebbero tutti quelli moltiplicati per UM.
Solo che non so se funziona col tornio, non so neanche come funziona il tornio, devo ancora affrontarlo.

Avatar utente
Fiveaxis
God
God
Messaggi: 5718
Iscritto il: sabato 15 gennaio 2011, 12:08
Località: Monza e Brianza

Re: MACRO M6 - Cambio utensile e calibrazione

Messaggio da Fiveaxis » martedì 15 maggio 2018, 21:58

@Malmesso
Suggerimento: quando inserisci i listati, per renderli più leggibili, ti consiglio di usare il tasto CODE come illustrato in figura... :)
uso CODE.JPG
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login
Ultima modifica di Fiveaxis il giovedì 17 maggio 2018, 1:40, modificato 1 volta in totale.
Motivazione: corretta imprecisione
La macchina conta...ma la differenza la fa il "manico"!

Malmesso
Junior
Junior
Messaggi: 75
Iscritto il: sabato 7 maggio 2016, 11:55
Località: Tolmezzzo (UD)

Re: MACRO M6 - Cambio utensile e calibrazione

Messaggio da Malmesso » mercoledì 16 maggio 2018, 20:16

Chiedo scusa, non lo sapevo.
Si può modificare il messaggio?

Avatar utente
Fiveaxis
God
God
Messaggi: 5718
Iscritto il: sabato 15 gennaio 2011, 12:08
Località: Monza e Brianza

Re: MACRO M6 - Cambio utensile e calibrazione

Messaggio da Fiveaxis » mercoledì 16 maggio 2018, 21:29

No, non è necessario modificare il messaggio. Comunque non hai violato nessuna regola: Il mio è un consiglio, per rendere più leggibili i post.
Tienine conto per la prossima volta. :wink:
La macchina conta...ma la differenza la fa il "manico"!

Malmesso
Junior
Junior
Messaggi: 75
Iscritto il: sabato 7 maggio 2016, 11:55
Località: Tolmezzzo (UD)

Re: MACRO M6 - Cambio utensile e calibrazione

Messaggio da Malmesso » mercoledì 16 maggio 2018, 22:42

Grazie del consiglio.
Ne tengo conto subito perchè non mi piace neanche a me.
Riscrivo qui il codice sopra descritto e ne approfitto per fare alcune modifiche.
Giusto ieri ho scoperto il comando per passare le variabili da una macro all'altra: SetVar() e GetVar().
Qui passo le variabili UM, Current Feed e ToolZ (lunghezza del vecchio utensile) così posso eliminare un po' di righe di comandi.
Ho fatto delle modifiche anche nella visualizzazione dei messaggi mostrandoli nel Ticker che è la barra scorrevole di Mach3, perchè la barra dei messaggi è occupata dall'avviso che Mach3 mette per il cambio utensile e mi cancella il mio.
Nel mio screenset ho cambiato il Ticker0 con il Ticker1, quindi nella macro bisognerà sostituire Ticker1 con Ticker0.
In più il DoOEMButton(1003) (STOP) l'ho messo prima di scrivere il messaggio sempre per lo stesso motivo.
Leggendo nel manuale, tutte le variabili andrebbero dichiarate prima col comando Dim e le costanti con Const, che ne pensate?

Codice: Seleziona tutto

' ---------------------- ZERO CAMBIO UTENSILE M6 START ----------------------

'Condizioni iniziali

If IsEStop Then End
If GetOEMLED(34) = -1 Then
  DoOEMButton(1003)
  Message "Interruttori di limite attivati !"
  End
End If
If GetOEMLED(23) = 0 Then
  DoOEMButton (119)
  If GetOEMLED(23) = 0 Then
    DoOEMButton(1003)
    Message "Machine out of limits for SoftLimit Activation."
    End
  End If
End If
If IsSuchSignal(22) = 0 Then
  DoOEMButton(1003)
  Message "Segnale della sonda non configurato!"
  End
End If
If IsActive(22) Then
  DoOEMButton(1003)
  Message "Contatto della sonda attivato!"
  End
End If
If IsSafeZ() <>1 Then
  DoOEMButton(1003)
  Message "Attivare L'altezza di sicurezza e configurarla in coordinate relative!"
  End
End If
ToolZ = GetOEMDRO(32)
If ToolZ = 0 Then
  DoOEMButton(1003)
  Message "Inserire la lunghezza dell'utensile e abilitare Z offset!"
  End
End If

' cambia unità di misura per i valori che non cambiano automaticamente

UM = 1
If GetSetupUnits() = 0 Then
  Unit = " mm"
  If GetParam("Units") = 1 Then
    Unit = " pollici"
    UM = 1/25.4
  End If
Else
  Unit = " pollici"
  If GetParam("Units") = 0 Then
    Unit = " mm"
    UM = 25.4
  End If
End If

' Lettura parametri

PrbX = UM*GetOEMDRO(1990) 'posizione misura utensile
PrbY = UM*GetOEMDRO(1991)
PrbZ = UM*GetOEMDRO(1992)
PrbSZ = UM*GetOEMDRO(1993)  'altezza di sicurezza della posizione di misura utensile
PrbSZFeed = UM*GetOEMDRO(1994)  'velocità di avvicinamento dall'altezza di sicurezza
Dist = UM*GetOEMDRO(1995)  'Intervallo della misurazione
DistFeed = UM*GetOEMDRO(1996)  'velocità della misurazione
CurrentFeed = GetOEMDRO(818)
Offset = GetOEMDRO(18) + GetOEMDRO(49) 'zero offset + g92
SafeZ = GetSafeZ()

SetTicker(1, space(65) & "Utensile in deposito... " & GetToolDesc(GetCurrentTool()))
DoSpinStop()
Code "G90"

 ' Vai alla posizione di taratura - avvicinamento dall'altezza di sicurezza con G31

A = PrbZ + PrbSZ + ToolZ
B = Offset + SafeZ + ToolZ
C = GetABSPosition(2)

If A >= B And A >= C Then
  Code "G53 G0 Z" & A
Else
  If B >= A And B >= C Then
    Code "G53 G0 Z" & B
  End If
End If
Code "G53 G0 X" & PrbX & "Y" & PrbY
Code "G53 G0 Z" & A
Code "F" & PrbSZFeed & " G31 Z" & PrbZ - Offset + Dist
While IsMoving()
Wend

 ' Protezione

If GetOEMLED(825) = -1  Then
  ZProbe = GetVar(2002)
  Code "G53 G0 Z" & GetABSPosition (2) + Dist*8
  If MsgBox ("L'utensile eccede di: " & Format (ZProbe + Offset - ToolZ - PrbZ, "0.0#######") & Unit & Chr(10) & Chr(10) & "Continuare?",52,"") = 7 Then
    Code "F" & CurrentFeed
    SetTicker(1,"")
    DoOEMButton(1003)
    End
  End If
Else

 ' Lettura vecchio utensile

 Code "F" & DistFeed & "G31 Z" & PrbZ - Offset - Dist
 While IsMoving()
 Wend
 ZProbe = GetVar(2002)
 If ZProbe < PrbZ - Offset + ToolZ - Dist + UM*0.00001 Then
   Code "G53 G0 Z" & GetABSPosition (2) + Dist*8
   If MsgBox ("Nessun contatto rilevato!" & Chr(10) & Chr(10) & "Continuare?",52,"") = 7 Then
     Code "F" & CurrentFeed
     SetTicker(1,"")
     DoOEMButton(1003)
     End
   End If
 Else
  Comp = ZProbe + Offset - ToolZ - PrbZ
  If Abs(Comp) < UM*0.001 Then Comp = 0
  msg = "Aggiunti "
  If Comp <= 0 Then msg = "Persi "
    Message msg & Format(Abs(Comp), "0.0#######") & Unit & " durante la lavorazione..."
  End If
End If

 ' Vai a ToolChange

TcX = UM*GetOEMDRO(1200)  'posizione cambio utensile
TcY = UM*GetOEMDRO(1201)
TcZ = UM*GetOEMDRO(1202)
TcSZ = UM*GetOEMDRO(1203)  'altezza di innesto x la posizione cambio utensile
TcSZFeed = UM*GetOEMDRO(1204)  'velocità di avvicinamento dall'altezza di innesto

A = ZProbe + Offset + Dist*8
C = TcZ + TcSZ

If A >= B And A >= C Then
  Code "G53 G0 Z" & A
Else
  If B >= A And B >= C Then
    Code "G53 G0 Z" & B
  Else
    Code "G53 G0 Z" & C
  End If
End If
Code "G53 G0 X" & TcX & "Y" & TcY
Code "G53 G0 Z" & C
Code "F" & TcSZFeed & " G53 G1 Z" & TcZ
While IsMoving()
Wend

 ' Cambio utensile

SetVar(1, UM)
SetVar(2, CurrentFeed)
SetVar(3, ToolZ)
SetTicker(1, space(65) & "Nuovo utensile... " & GetToolDesc(GetSelectedTool))
SetDRO(24, GetSelectedTool())

Codice: Seleziona tutto

' ---------------------- ZERO CAMBIO UTENSILE M6 END ----------------------

UM = GetVar(1)
TcZ = UM*GetOEMDRO(1202)
TcSZ = UM*GetOEMDRO(1203)
TcSZFeed = UM*GetOEMDRO(1204)
PrbX = UM*GetOEMDRO(1990)
PrbY = UM*GetOEMDRO(1991)
PrbZ = UM*GetOEMDRO(1992)
PrbSZ = UM*GetOEMDRO(1993)
PrbSZFeed = UM*GetOEMDRO(1994)
Dist = UM*GetOEMDRO(1995)
DistFeed = UM*GetOEMDRO(1996)
CurrentFeed = GetVar(2)
Offset = GetOEMDRO(18) + GetOEMDRO(49)
SafeZ = GetSafeZ()
ToolOldZ = GetVar(3)
ToolZ = GetOEMDRO(32)

 ' Torna alla posizione di taratura

A = PrbZ + PrbSZ + ToolZ
B = Offset + SafeZ + ToolZ
C = TcZ + TcSZ

If A >= B And A >= C Then
  Code "G53 G1 Z" & C
  Code "G53 G0 Z" & A
Else
  If B >= A And B >= C Then
    Code "G53 G1 Z" & C
    Code "G53 G0 Z" & B
  Else
    Code "G53 G1 Z" & C
  End If
End If
Code "G53 G0 X" & PrbX & "Y" & PrbY
Code "G53 G0 Z" & A
Code "F" & PrbSZFeed & " G31 Z" & PrbZ - Offset + Dist
While IsMoving()
Wend

 ' Protezione

If GetOEMLED(825) = -1  Then
  ZProbe = GetVar(2002)
  Message "L'utensile eccede di: " & Format (ZProbe + Offset - ToolZ - PrbZ, "0.0#######") & Unit
  Code "G53 G0 Z" & GetABSPosition (2) + Dist*8
  While IsMoving()
  Wend
  Code "F" & CurrentFeed
  SetTicker(1,"")
  DoOEMButton(1003)
  End
End If

 ' Lettura nuovo utensile

Code "F" & DistFeed & "G31 Z" & PrbZ - Offset - Dist
While IsMoving()
Wend
Code "F" & CurrentFeed
ZProbe = GetVar(2002)
If ZProbe < PrbZ - Offset + ToolZ - Dist + UM*0.00001 Then
  Message "Nessun contatto rilevato!"
  Code "G53 G0 Z" & GetABSPosition (2) + Dist*8
  While IsMoving()
  Wend
  SetTicker(1,"")
  DoOEMButton(1003)
  End
End If
Comp = ZProbe + Offset - ToolZ - PrbZ
If Abs(Comp) < UM*0.001 Then Comp = 0
Message "Correzione Z-Wear: " & Format (Comp, "0.0#######") & Unit

 ' Inserisce la differenza per la lunghezza esatta della punta nel parametro Z-Wear

SetToolParam(GetCurrentTool(), 4, (ZProbe + Offset - UM*GetToolParam(GetCurrentTool(),2) - PrbZ)/UM)
Code "G43"
Sleep(400)
ToolZ = GetOEMDRO(32)

'Torna alla posizione di partenza

x = GetToolChangeStart(0)
y = GetToolChangeStart(1)

A = ZProbe + Offset + Dist*8
B = Offset + SafeZ + ToolZ
C = GetToolChangeStart(2) + Offset + ToolZ - ToolOldZ

If (A >= B And A >= C) Then
  Code "G53 G0 Z" & A
Else
  If (B >= A And B >=C) Then
    Code "G53 G0 Z" & B
  Else
    Code "G53 G0 Z" & C
  End If
End If
Code "G0 X" & x & "Y" & y
Code "G53 G0 Z" & C
While IsMoving()
Wend
SetTicker(1,"")

Rispondi

Torna a “Mach3”