Tutte le macro: calibrazione utensile - calibrazione mandrino - zero sul posto - cambio utensile

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

Tutte le macro: calibrazione utensile - calibrazione mandrino - zero sul posto - cambio utensile

Messaggio da Malmesso » venerdì 15 giugno 2018, 19:12

Ho terminato il mio lavoro sulle macro per automatizzare le procedure di calibrazione e posizionamenti di Mach3.
Ho già pubblicato la macro M6 e la macro per l'offset tramite tastatore e centro cerchio con 3 punti.
Purtroppo nessuno si è interessato a quello che ho fatto, ma vi assicuro che ne vale la pena.
Sono stato mesi a studiare il funzionamento di tutti i parametri di Mach3, tutti i DRO, tutti i pulsanti, e tutti i comandi specifici escludendo la parte del tornio che affronterò più avanti.
Anche perchè non ero soddisfatto della qualità delle procedure di calibrazione che leggevo sui forum.
Avrei preferito trovarmi dei modelli validi da studiare e modificare, ma non li ho trovati.
Le procedure che ho trovato funzionano solo in determinate condizioni, ad esempio:
Se siete con le native units in pollici o millimetri e le unità di lavoro in pollici o millimetri, avete 3 casi su 4 in cui non funzioneranno perchè non tutti i DRO e i parametri di MACH3 cambiano automaticamente.
Se nel menù generale è aggiunto il Tool Lenght Offset alla variabile del G31 bisogna tenerne conto.
Se il G92 non è a zero bisogna tenerne conto.
Se l'altezza di sicurezza è configurata in coordinate macchina.
Queste macro cercano di funzionare in qualsiasi situazione e senza limitazioni.
Le procedure di verifica vi permettono di eseguire test a diverse velocità fornendovi tutti i dati di cui avete bisogno tramite le barre messaggi.
Inoltre quando avete settato lo zero pezzo sopra il pezzo, potete dormire tranquilli con i movimenti automatici.
Queste procedure richiedono di modificare lo screenset, io le ho già inserite insieme ai DRO utilizzati in uno screenset in italiano completamente rifatto con tutti i controlli in una pagina e le impostazioni in un'altra, che mi piacerebbe pubblicare.

- Cambio utensile tramite pulsante, simile all'M6 eccetto che il cambio utensile viene fatto manualmente inserendo il numero utensile nell'apposito dialog.
Anche qui misura lo scostamento della lunghezza utensile rispetto a quella iniziale per l'utensile utilizzato, poi va in posizione cambio utensile, aspetta che inseriamo il numero utensile nel dialog, torna in posizione di calibrazione, ripete la misurazione e scrive la differenza nello z-wear per il nuovo utensile e ritorna alla posizione iniziale tenendo conto della differenza dei due utensili.
Quando torna in posizione iniziale, a differenza dell'M6, utilizza il comando G31, perchè se noi ci troviamo esattamente sopra il piattino di misura e la punta risultasse più corta da raggiungere il limite del nostro intervalo di misura 0.25mm, nel ritornare in posizione iniziale si abbasserebbe di 0.25mm sotto il piatto, per cui la fermiamo col G31.
Stessa cosa per la procedura di calibrazione utensile e mandrino.
Essendo in un unico file, rispetto alla macro per l'M6 ho potuto ottimizzarla e comprimerla ulteriormente.

- Calibrazione Z-Utensile, non fa il cambio come la precedente.
Serve per la calibrazione iniziale e fa due misurazioni invece di una.
Come per la calibrazione nella macro cambio utensile scende da un'altezza di sicurezza tramite il comando G31 a velocità abbastanza elevata 300 mm/min e si ferma alla distanza che corrisponde all'intervallo di misurazione +-25mm.
Se tocca prima ci dice di quanto eccede esattamente l'utensile e torna all'altezza di sicurezza. Basterebbe sommare questo valore alla lunghezza attuale per avere la lunghezza esatta.
Se non tocca inizia la misurazione da +distanza a -distanza (+-0,25mm) che però, in questa procedura moltiplico x8, insieme alla velocità di misurazione.
Quindi si fermà a +8*Distanza e vorrebbe arrivare a -8*Distanza, ma quando tocca il piattino ricalcola la Z da cui ripartire a +Distanza per arrivare a -Distanza, questa seconda misurazione a distanza e velocità ridotta la chiamo "Verifica".
Nella calibrazione per il cambio utensile non faccio così perchè si presume che gli utensili sono già stati tutti calibrati e un'intervallo di 0,25mm è sufficente e in sostanza eseguo solo la verifica.
Qui invece possiamo misurare inizialmente la punta con un'errore di 0.25 X 8 = +-2mm e poi fare la verifica con intervallo e velocità ridotti.
Tutti i parametri sono modificabili tramite DRO entro certi limiti eccetto il moltiplicatore X8.

- Calibrazione mandrino, uguale alla z-utensile, ma in questo caso non c'è alcun controllo e calcolo per la lunghezza utensile, in quanto la procedura va effettuata senza utensile e se non viene azzerato l'offset Z utensile non va.
Questo controllo serve anche per ricordare di togliere l'utensile durante la misura.
Il valore trovato serve per determinare la lunghezza esatta della punta, ma non è necessario saperlo e poi è impossibile riavvitare il mandrino sempre alla stessa altezza.

- Zero sul posto, non cambia lo Z-Wear degli utensili, ma l'offset di lavoro, lo zero pezzo.

Inizialmente viene richiamato un file iniziale check.m1s, che uso per tutte le macro dello screenset.
A seconda di quale macro lo richiama, fa controlli diversi.
Fa anche un controllo dei parametri inseriti nei DRO previsti dalle procedure.
Se non li inserite nello screenset, allora dovete sostituire i DRO nelle macro con dei valori ed eliminare un paio di controlli in questo file.
I Dro sono:
1200-1201-1202 Posizione X-Y-Z del cambio utensile
1203-1204 Altezza e velocità di innesto del cambio utensile
1990-1991-1992 Posizione X-Y-Z della calibrazione, la Z viene modificata automaticamente dalla procedura di calibrazione mandrino.
1993-1994 Altezza di sicurezza per cambio utensile (30mm) , Velocità di avvicinamento dall'altezza di sicurezza (300mm/min)
1995-1996 Intervallo di misura (0,25mm), velocità di misura (4mm/min)
Ricordo che questi ultimi due parametri vengono moltiplicati x8 nella prima misurazione della procedura di calibrazione Z utensile e X16 l'intervallo di misura per lo zero sul posto (4mm, e poi la verifica a 0,25mm)
La procedura di controllo controllerà che i DRO 1993-1994 non siano inferiori a 8 volte i DRO 1995-1996 che avranno a loro volta dei limiti 1993 (0,05mm-2mm) 1994(0,8-32mm/min)

In più c'è un UserLed(1000) da aggiungere e modificare il bottone di Stop con questo script:

SetUserLED(1000,1)
SetTicker(1,"")
Sleep(20)
DoOEMButton(1003)
Sleep(200) 'solo per vedere il led acceso
SetUserLED(1000,0)

E il Reset con questo:

SetUserLED(1000,1)
SetTicker(1,"")
Sleep(10)
SetUserLED(1000,0)
DoOEMButton(1021)

Dopo numerosi tentativi di programmare un'uscita pulita utilizzando i controlli di serie, ho deciso di aggiungere il Led che si accende quando schiaccio su Stop e su Reset, visto che non esiste.
10ms in anticipo sono sufficenti a consentire alla macro di fare tutto quello che deve fare per poi passare allo Stop o al Reset.
Ovvero ripristinare i parametri iniziali e senza generare errori che sono inevitabili se si forza l'uscita da una funzione o un ciclo.
Oltre a funzionare con lo Stop e il Reset, funziona anche se tocchiamo gli interruttori di limite causando un reset della macchina, quando sblocchiamo il reset, verranno ripristinate anche le condizioni iniziali.
Il controllo suggli interruttori di limite si può fare anche leggendo i 3 led di Home nel ciclo While IsMoving.



Check.m1s

Codice: Seleziona tutto

' ---------------------- CHECK ----------------------

Sub CHK()
Dim Dec As Integer
Dim UM, UMC As Double
Message ""
SetTicker(1,"")

UM = 1
If GetSetupUnits() = 0 Then
  UMC = 1
  Dec = 4
  If GetParam("Units") = 1 Then
    Dec = 6
    UM = 1/25.4
  End If
Else
  UMC = 1/25.4
  Dec = 6
  If GetParam("Units") = 0 Then
    Dec = 4
    UM = 25.4
  End If
End If

If IsEStop Then GoTo Er
If GetOEMLED(34) Then
  Message "Interruttori di limite attivati !"
  GoTo Er
End If
If Not GetOEMLED(23) Then
  DoOEMButton (119)
  If GetOEMLED(23) Then
    Message "Machine out of limits for SoftLimit Activation."
    GoTo Er
  End If
End If
If IsSafeZ() <>1 Then
  Message "Attivare L'altezza di sicurezza e configurarla in coordinate relative!"
  GoTo Er
End If

If GetVar(0) = 1 Or GetVar(0) = 2 Or GetVar(0) = 3 Then
  If IsSuchSignal(22) = 0 Then
    Message "Segnale della sonda non configurato!"
    GoTo Er
  End If
  If IsActive(22) Then 
    Message "Contatto della sonda attivato!"
    GoTo Er
  End If
  If GetOEMDRO(1995) < 0.05*UMC Or GetOEMDRO(1995) > 2*UMC Or GetOEMDRO(1996) < 0.8*UMC Or GetOEMDRO(1996) > 32*UMC Then
    Message "Intervallo o velocità di misurazione fuori dai limiti!"
    GoTo Er
  End If
End If

If GetVar(0) = 2 Or GetVar(0) = 3 Then
 If 8*GetOEMDRO(1995) > GetOEMDRO(1993) Or 8*GetOEMDRO(1996) > GetOEMDRO(1994) Then
    Message "Altezza di sicurezza o velocità di avvicinamento troppo piccoli!"
    GoTo Er
  End If
End If

If (GetVar(0) = 1 Or GetVar(0) = 2) And GetOEMDRO(32) = 0 Then
  Message "Inserire la lunghezza dell'utensile e abilitare Z Offset!"
  GoTo Er
End If

If GetVar(0) = 3 And GetOEMDRO(32) <> 0 Then
  Message "Azzerare l'offset utensile! Togliere l'utensile e avvitare la ghiera!"
  GoTo Er
End If

If GetOEMLED(807) Or GetOEMLED(808) Or GetOEMLED(809) Then
  If MsgBox ("Asse X Y Z Non referenziato!" & Chr(10) & Chr(10) & "Continuare?",20,"") = 7 Then GoTo Er
End If

SetVar(1, UM)
SetVar(2, Dec)
DoSpinStop()
Code "G90"
Exit Sub

Er:
  SetVar(1, 0)
  DoOEMButton(1003)
End Sub

Cambio utensile

Codice: Seleziona tutto

' ---------------------- ZERO CAMBIO UTENSILE ----------------------

Sub TOOLCHANGE
Dim UM, PrbX, PrbY, PrbZ, PrbSZ, PrbSZFeed, Dist, DistFeed, CurrentFeed, Offset, ToolZ, SafeZ, AbsX, AbsY, PrbZRel, ZProbe, Comp, TcX, TcY, TcZ, TcSZ, TcSZFeed, ToolNewZ, A, B, C, D As Double
Dim Dec, Resp As Integer
Dim Unit, msg As String

SetVar(0,2)
RunScript("macros/Mach3Mill/Check")
UM = GetVar(1)
Dec = GetVar(2)
If UM = 0 Then End
Unit = " mm"
If Dec = 6 Then Unit = " pollici"

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 = FeedRate()
Offset = GetOEMDRO(18) + GetOEMDRO(49)
ToolZ = GetOEMDRO(32)
SafeZ = GetSafeZ()
AbsX = GetABSPosition(0)
AbsY = GetABSPosition(1)
PrbZRel = PrbZ - Offset

SetTicker(1, Space(65) & "Utensile in deposito... " & GetToolDesc(GetCurrentTool()))

 ' Vai alla posizione di taratura - avvicinamento dall'altezza di sicurezza con G31
 
A = PrbZ + PrbSZ + ToolZ
B = Offset + SafeZ + ToolZ
C = GetABSPosition(2)

Go A, B, C, PrbX, PrbY
Code "G53 G0 Z" & A
Code "F" & PrbSZFeed & " G31 Z" & PrbZRel + Dist
ENDMOVE CurrentFeed

 ' Protezione
If GetOEMLED(825)  Then
 ZProbe = V2002(ToolZ)
 Code "G53 G0 Z" & A
 If MsgBox ("L'utensile eccede di: " & Format(nFmt(ZProbe - PrbZRel, Dec)) & Unit & Chr(10) & Chr(10) & "Continuare?",52,"") = 7 Then RESTORE CurrentFeed
Else

 ' Lettura vecchio utensile
 
 Code "F" & DistFeed & "G31 Z" & PrbZRel - Dist
 ENDMOVE CurrentFeed
 ZProbe = V2002(ToolZ)
 If ZProbe <= PrbZRel - Dist Then
  If MsgBox ("Nessun contatto rilevato!"  & Chr(10) & Chr(10) & "Continuare?",52,"") = 7 Then RESTORE CurrentFeed
 Else
  Comp = ZProbe - PrbZRel
  msg = "Aggiunti "
  If Comp <= 0 Then msg = "Persi "
  Message msg & Format(nFmt(Abs(Comp), Dec)) & 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 + ToolZ + Offset + SafeZ
D = TcZ + TcSZ

Go A, B, D, TcX, TcY
Code "G53 G0 Z" & D
Code "F" & TcSZFeed & " G53 G1 Z" & TcZ
ENDMOVE CurrentFeed

 ' Cambio utensile
 
Resp = Question("Inserire il n° del nuovo utensile")
SetDRO(24, Resp)
SetTicker(1, Space(65) & "Nuovo utensile... " & GetToolDesc(Resp))
Sleep(400)  'In caso non aggiornasse in tempo aumentare le pause

 ' Torna alla posizione di taratura
 
ToolNewZ = GetOEMDRO(32)
A = PrbZ + PrbSZ + ToolNewZ
B = Offset + SafeZ + ToolNewZ

Code "G53 G1 Z" & D
Go A, B, D, PrbX, PrbY
Code "G53 G0 Z" & A
Code "F" & PrbSZFeed & " G31 Z" & PrbZRel + Dist
ENDMOVE CurrentFeed

 ' Protezione
 
If GetOEMLED(825) Then
 ZProbe = V2002(ToolNewZ)
 Message "L'utensile eccede di: " & Format(nFmt(ZProbe - PrbZRel, Dec)) & Unit
 Code "G53 G0 Z" & A
 ENDMOVE CurrentFeed
 RESTORE CurrentFeed
End If

 ' Lettura nuovo utensile
 
Code "F" & DistFeed & "G31 Z" & PrbZRel - Dist
ENDMOVE CurrentFeed
ZProbe = V2002(ToolNewZ)
If ZProbe <= PrbZRel - Dist Then
 Message "Nessun contatto rilevato!"
 RESTORE CurrentFeed
End If
Message "Correzione Z-Wear: " & Format(nFmt(ZProbe - PrbZRel, Dec)) & Unit

 ' Inserisce la differenza per la lunghezza esatta della punta nel parametro Z-Wear
 
SetToolParam(GetCurrentTool(), 4, (ZProbe - PrbZRel + UM*GetToolParam(GetCurrentTool(),4))/UM)
Code "G43"
Sleep(400)
ToolNewZ = GetOEMDRO(32)

'Torna alla posizione di partenza

A = ZProbe + Offset + ToolNewZ + SafeZ
B = Offset + ToolNewZ + SafeZ
C = C + ToolNewZ - ToolZ

Go A, B, C, AbsX, AbsY
Code "F" & PrbSZFeed & " G31 Z" & C - Offset - ToolNewZ
ENDMOVE CurrentFeed
RESTORE CurrentFeed

End Sub

Sub Go (A, B, C, X, Y)
 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" & X & "Y" & Y
End Sub

Sub RESTORE (CurrentFeed)
 SetFeedRate(CurrentFeed/60)
 SetTicker(1,"")
 End
End Sub

Sub ENDMOVE (CurrentFeed)
 While IsMoving
  If GetUserLED(1000) Then RESTORE CurrentFeed
 Wend 
End Sub

Function V2002(ToolZ) As Double
 V2002 = GetVar(2002) - ToolZ
 If IncludeTLOinZFromG31() Then V2002 = GetVar(2002)
End Function

Calibrazione utensile

Codice: Seleziona tutto

'----------------------- CALIBRAZIONE UTENSILE -------------------------

Sub ZTOOL
Dim UM, PrbX, PrbY, PrbZ, PrbSZ, PrbSZFeed, Dist, DistFeed, CurrentFeed, Offset, ToolZ, SafeZ, AbsX, AbsY, PrbZRel, ZProbe, PrbNewZRel, ToolNewZ, A, B, C As Double
Dim Dec As Integer
Dim Unit As String

SetVar(0,2)
RunScript("macros/Mach3Mill/Check")
UM = GetVar(1)
Dec = GetVar(2)
If UM = 0 Then End
Unit = " mm"
If Dec = 6 Then Unit = " pollici"

Const Ratio = 8  ' Moltiplicatore per velocità e intervallo della prima misurazione
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 finale
DistFeed = UM*GetOEMDRO(1996)  'velocità della misurazione finale
CurrentFeed = FeedRate()
Offset = GetOEMDRO(18) + GetOEMDRO(49)
ToolZ = GetOEMDRO(32)
SafeZ = GetSafeZ()
AbsX = GetABSPosition(0)
AbsY = GetABSPosition(1)
PrbZRel = Prbz - Offset

SetTicker(1, space(65) & "Calibrazione utensile... "& GetToolDesc(GetCurrentTool()))

 ' Vai alla posizione di misura - avvicinamento dall'altezza di sicurezza con G31
 
A = PrbZ + PrbSZ + ToolZ
B = Offset + ToolZ + SafeZ
C = GetABSPosition(2)

Go A, B, C, PrbX, PrbY
Code "G53 G0 Z" & A
Code "F" & PrbSZFeed & " G31 Z" & PrbZRel + Dist*Ratio
ENDMOVE CurrentFeed

 ' Protezione
 
If GetOEMLED(825) Then
 ZProbe = GetVar(2002) - ToolZ
 If IncludeTLOinZFromG31() Then ZProbe = GetVar(2002)
 Message "L'utensile eccede di: " & Format(nFmt(ZProbe - PrbZRel, Dec)) & Unit
 Code "G53 G0 Z" & A
 ENDMOVE CurrentFeed
 RESTORE CurrentFeed
End If

 ' Lettura Z-Offset Utensile Velocità:8X Intervallo 8X e calcola nuova altezza della posizione di misura
 
PrbNewZRel = PROBE (PrbZRel, ToolZ, Dist*Ratio, DistFeed*Ratio, CurrentFeed)
Message "Correzione Z-Wear: " & Format(nFmt(PrbNewZRel - PrbZRel, Dec)) & Unit
Code "G53 G0 Z" &  PrbNewZRel + ToolZ + Offset + Dist
ENDMOVE CurrentFeed

 ' Verifica Velocità 1x Intervallo 1x
 
ZProbe = PROBE (PrbNewZRel, ToolZ, Dist, DistFeed, CurrentFeed)
Message "Verifica... Scostamento: " & Format(nFmt(ZProbe - PrbNewZRel, Dec)) & Unit

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

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

 ' Torna alla posizione di partenza, avvicinamento all'altezza iniziale con G31
 
A = ZProbe + Offset +ToolNewZ + SafeZ
B = Offset + ToolNewZ + SafeZ
C = C + ToolNewZ - ToolZ

Go A, B, C, AbsX, AbsY
Code "F" & PrbSZFeed & " G31 Z" & C - Offset - ToolNewZ
ENDMOVE CurrentFeed
RESTORE CurrentFeed
End Sub

Sub RESTORE (CurrentFeed)
 SetFeedRate(CurrentFeed/60)
 SetTicker(1,"")
 End
End Sub

Sub ENDMOVE (CurrentFeed)
 While IsMoving
  If GetUserLED(1000) Then RESTORE CurrentFeed
 Wend 
End Sub

Sub Go (A, B, C, X, Y)
 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" & X & "Y" & Y
End Sub

Function PROBE (PrbZRel, ToolZ, Dist, DistFeed, CurrentFeed) As Double
 Code "F" & DistFeed & "G31 Z" & PrbZRel - Dist
 ENDMOVE CurrentFeed
 PROBE = GetVar(2002) - ToolZ
 If IncludeTLOinZFromG31() Then PROBE = GetVar(2002)
 If PROBE <= PrbZRel - Dist Then
  Message "Nessun contatto rilevato!"
  RESTORE CurrentFeed
 End If
End Function

Zero sul posto

Codice: Seleziona tutto

'------------------ ZERO SUL POSTO ----------------------

Sub ZOFFSET
Dim UM, Dist, DistFeed, CurrentFeed, Offset, ToolZ, SafeZ, AbsZ, ZProbe As Double
Dim Dec As Integer
Dim Unit As String

SetVar(0,1)
RunScript("macros/Mach3Mill/Check")
UM = GetVar(1)
Dec = GetVar(2)
If UM = 0 Then End
Unit = " mm"
If Dec = 6 Then Unit = " pollici"

Dist = UM*GetOEMDRO(1995) 'intervallo della misurazione
DistFeed = UM*GetOEMDRO(1996)  'velocità della misurazione
ToolZ = GetOEMDRO(32)
AbsZ = GetABSPosition(2)
CurrentFeed = FeedRate()
Offset = GetOEMDRO(18) + GetOEMDRO(49)

SetTicker(1, space(65)  & "Zero sul posto..... ")

 '  Lettura Zero Offset Velocità:8X Intervallo 16X e alcola nuova altezza della posizione di misura
 
ZProbe = PROBE(AbsZ, ToolZ, Offset, 16*Dist, 8*DistFeed, CurrentFeed) 
AbsZ = ZProbe + Offset
Code "G53 G0 Z" & AbsZ + Dist
ENDMOVE CurrentFeed
 ' Verifica
 
ZProbe = PROBE(AbsZ, ToolZ, Offset, Dist, DistFeed, CurrentFeed)

 ' Calcola e aggiungi a Work Offset
 
Message "Verifica... Scostamento: " & Format(nFmt(ZProbe + Offset - AbsZ, Dec)) & Unit
SetOEMDRO (49, ZProbe + Offset - ToolZ)
sleep(400)
GotoSafeZ()
ENDMOVE CurrentFeed
RESTORE CurrentFeed
End Sub

Sub RESTORE (CurrentFeed)
 SetFeedRate(CurrentFeed/60)
 SetTicker(1,"")
 End
End Sub

Sub ENDMOVE (CurrentFeed)
 While IsMoving
  If GetUserLED(1000) Then RESTORE CurrentFeed
 Wend 
End Sub

Function PROBE(AbsZ, ToolZ, Offset, Dist, DistFeed, CurrentFeed) As Double
 Code "F" & DistFeed & "G31 Z" & AbsZ - Offset - ToolZ - Dist
 ENDMOVE CurrentFeed
 PROBE = GetVar(2002)
 If IncludeTLOinZFromG31() Then PROBE = PROBE + ToolZ
 If PROBE <= AbsZ - Offset - Dist Then
  Code "G53 G0 Z" & AbsZ
  Message "Nessun contatto rilevato!"
  ENDMOVE CurrentFeed
  RESTORE CurrentFeed
  End 
 End If
End Function

Calibrazione mandrino

Codice: Seleziona tutto

 '---------------- CALIBRAZIONE MANDRINO ------------------

Sub SPINDCAL
Dim UM, PrbX, PrbY, PrbZ, PrbSZ, PrbSZFeed, Dist, DistFeed, CurrentFeed, Offset, ToolZ, PrbZRel, ZProbe, A, B, C As Double
Dim Dec As Integer
Dim Unit As String

SetVar(0,3)
RunScript("macros/Mach3Mill/Check")
UM = GetVar(1)
Dec = GetVar(2)
If UM = 0 Then End
Unit = " mm"
If Dec = 6 Then Unit = " pollici"

Const Ratio = 8  ' Moltiplicatore per velocità e intervallo della prima misurazione
PrbX = GetOEMDRO(1990)  'posizione del piattino di misura - questi DRO vanno aggiunti nello screenset
PrbY = GetOEMDRO(1991)
PrbZ = GetOEMDRO(1992)  'inserire manualmente questo parametro con una precisione di +- 8xDist
PrbSZ = GetOEMDRO(1993)  'altezza di sicurezza della posizione di misura utensile
PrbSZFeed = GetOEMDRO(1994)  'velocità di avvicinamento dall'altezza di sicurezza
Dist = GetOEMDRO(1995)  'intervallo di verifica, equivale a +/- Dist (2Dist)
DistFeed = GetOEMDRO(1996) 'velocità della verifica
CurrentFeed = FeedRate()
Offset = GetOEMDRO(18) + GetOEMDRO(49)
SafeZ = GetSafeZ()
ToolZ = GetOEMDRO(32)
PrbZRel = Prbz - Offset

SetTicker(1, space(65) & "Calibrazione mandrino... Togliere l'utensile e avvitare la ghiera!")

 ' Vai alla posizione di misura - avvicinamento dall'altezza di sicurezza con G31
 
A = PrbZ + PrbSZ
B = Offset + SafeZ
C = GetABSPosition(2)

Go A, B, C, PrbX, PrbY
Code "G53 G0 Z" & A
Code "F" & PrbSZFeed & " G31 Z" & PrbZRel + Dist*Ratio
ENDMOVE CurrentFeed

 ' Protezione
 
If GetOEMLED(825) Then
 ZProbe = GetVar(2002)
 Message "Il mandrino eccede di: " & Format(nFmt(ZProbe - PrbZRel, Dec)) & Unit
 Code "G53 G0 Z" & A
 ENDMOVE CurrentFeed
 RESTORE CurrentFeed
End If
 
 ' Lettura Z-Offset mandrino: Velocità 8X Intervallo 8X - Calcola nuova altezza della posizione di misura e aggiorna il DRO
 
PrbZRel = PROBE (PrbZRel, Dist*Ratio, DistFeed*Ratio, CurrentFeed)
SetOEMDRO(1992, PrbZRel + Offset)
Code "G53 G0 Z" &  PrbZRel + Offset + Dist
ENDMOVE CurrentFeed

 ' Verifica: Velocità 1X Intervallo 1X - Aggiorna il DRO
 
ZProbe = PROBE (PrbZRel, Dist, DistFeed, CurrentFeed)
Message "Verifica... Scostamento: " & Format(nFmt(ZProbe - PrbZRel, Dec)) & Unit
SetOEMDRO(1992, ZProbe + Offset)

 ' Vai a ToolChange
 
TcX = GetOEMDRO(1200)  'posizione cambio utensile
TcY = GetOEMDRO(1201)
TcZ = GetOEMDRO(1202)
TcSZ = GetOEMDRO(1203)  'altezza di innesto x la posizione cambio utensile
TcSZFeed = GetOEMDRO(1204)  'velocità di avvicinamento dall'altezza di innesto
A = PrbZ + SafeZ
C = TcZ + TcSZ

Go A, B, C, TcX, TcY
Code "G53 G0 Z" & C
Code "F" & TcSZFeed & " G53 G1 Z" & TcZ
ENDMOVE CurrentFeed
RESTORE CurrentFeed

End Sub

Sub RESTORE (CurrentFeed)
 SetFeedRate(CurrentFeed/60)
 SetTicker(1,"")
 End
End Sub

Sub ENDMOVE (CurrentFeed)
 While IsMoving
  If GetUserLED(1000) Then RESTORE CurrentFeed
 Wend 
End Sub

Sub Go (A, B, C, X, Y)
 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" & X & "Y" & Y
End Sub

Function PROBE (PrbZRel, Dist, DistFeed, CurrentFeed) As Double
 Code "F" & DistFeed & "G31 Z" & PrbZRel - Dist
 ENDMOVE CurrentFeed
 PROBE = GetVar(2002)
 If PROBE <= PrbZRel - Dist Then
  Message "Nessun contatto rilevato!"
  RESTORE CurrentFeed
 End If
End Function

belli491
Newbie
Newbie
Messaggi: 3
Iscritto il: giovedì 12 febbraio 2015, 20:55
Località: Parma

Re: Tutte le macro: calibrazione utensile - calibrazione mandrino - zero sul posto - cambio utensile

Messaggio da belli491 » venerdì 17 agosto 2018, 18:21

Ciao
li ho trovati molto interessanti, ti chiedo comre faccio ad iserirli?
e poi come inserisco le coordinate per il cambio utensile e la coordinata del tastatore?

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

Re: Tutte le macro: calibrazione utensile - calibrazione mandrino - zero sul posto - cambio utensile

Messaggio da danieleee » sabato 18 agosto 2018, 7:33

Che dire...
Un lavoro ECCEZZIONALE!! =D>
Ti faccio la stessa somanda di @belli491
Credo servirebbe avere pure il file dello screen...
Io aspetto di vedere anche quelli per il tornio...
Curiosità...Mach4 lo hai provato?
Complomenti ancora, e grazie per il contributo!

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

Re: Tutte le macro: calibrazione utensile - calibrazione mandrino - zero sul posto - cambio utensile

Messaggio da Malmesso » martedì 21 agosto 2018, 7:33

Ciao,
Grazie mille per l'interesse!
Vi aiuto volentieri ad adattarle al vostro screenset, ma in questi giorni ho dei lavori urgenti.
E ho dovuto rimandare di nuovo lo studio di questa dannata CNC.

Per inserie queste macro nello screenset bisogna utilizzare machscreen scaricabile qui: https://kd-dietz.com/
Caricate il vostro screenset.set in machscreen, create dei pulsanti e inserite le macro così come sono tranne la prima check.m1s.
Quella va inserita in un file con nome "check.m1s" e va messo in Mach3\macros\Mach3Mill perchè viene richiamato da ogni macro che ho pubblicato.
Inoltre sempre con machscreen bisogna inserire i codici per il bottone di stop e reset e creare i DRO.
Vorrei precisare che la macro di cambio utensile non funziona con l'M6, è fatta per funzionare manualmente, bisogna fermare la lavorazione e premere il bottone di cambio utensile.
Se avete bisogno della macro che parte con l'M6 l'ho pubblicata in un altro post, è come questa ma divisa in due file che vanno inseriti sempre in Mach3\macros\Mach3Mill sostituendo gli originali M6start.m1s e M6end.m1s
Se vi serve solo quella dovreste riuscire a fare tutto senza inserire niente nello screenset, basta sostituire il codice dei DRO con dei valori dove vengono dichiarate le variabili nelle macro e sistemare la procedura che legge le variabili g-code settate dai bottoni di stop e di reset.
Comunque con le macro già pronte è più difficile usare Paint che modificare lo screenset con machscreen.
Per la compatibilità io uso la versione R3.043.037 che è l'ultima che supporta il DRO Z-Wear, la correzione dell'offset nelle versioni successive può essere fatto solo direttamente nel parametro di lunghezza utensile e non capisco il motivo di questa decisione.
Se volete usare versioni successive alla mia, la modifica da fare nelle macro dovrebbe essere solo questa anche se potrebbe funzionare anche così perchè io non scrivo il valore sul DRO, ma utilizzo un comando specifico e non ho verificato se il comando viene supportato lo stesso.
Per versioni molto precedenti a questa mancano delle librerie che supportano alcuni comandi che utilizzo, ci sono soluzioni alternative, ma sarebbe meglio aggiornare la versione del programma.
Nelle foto c'è lo screenset che non ho finito, mi manca la pagina "Strumenti" dedicata principalmente alla digitalizzazione, poi se qualcuno mi da una mano vorrei impaginarlo bene con i termini giusti.
I pulsanti che ho inserito sono nella pagina di "Controllo": Cambio utensile, Z-Utensile e Zero sul posto, più altri 2 per andare in posizione di cambio o calibrazione senza fare niente.
Nella pagina "Impostazioni" ci sono tutti i DRO aggiuntivi sotto POSIZIONI cambio e calibrazione, "velocità X-Y tastatore" non è utilizzato qui.
Ci sono 2 pulsanti per memorizzare le posizioni assolute nei rispettivi DRO per non doverle scriverle.
C'è anche il pulsante per calibrare il mandrino in parte alla coordinata Z nella posizione di calibrazione.
Le coordinate X Y corrispondono al centro del piattino di misura, la Z è di quanto sporge il piattino rispetto al mandrino senza utensile posizionato all'origine di Z e vanno misurate e inserite manualmente.
Poi la procedura di calibrazione mandrino dovrebbe aggiornare il DRO Z della posizione di calibrazione con una misura più precisa, ma come dicevo, almeno col mio mandrino non posso avere un riferimento valido perchè l'altezza del mandrino cambia a seconda di quanto lo avvito per stringere l'utensile.
Inoltre il mandrino deve arrivare a toccare il piattino, ma anche se non utilizzate questa procedura e mettete valori a caso avrete solo una misura sbagliata della lunghezza dell'utensile nelle altre procedure che non influisce però sul loro funzionamento perchè si basano sulla differenza di lunghezza degli utensili.

Per il file dello screenset, ve lo invio in un file rar, con la consapevolezza che la pagina Strumenti al momento è una pagina da evitare, non c'è niente che funziona e alcuni tasti è meglio non toccarli.
Ho anche modificato queste macro per la calibrazione in base a nuove esperienze, piccole cose.
Quindi in caso, i codici aggiornati potete prelevarli aprendo il mio screenset e metterli nel vostro.
Dovrò modificare le procedure della tastatura XY perchè non tengono conto della calibrazione del tastatore, procedura che devo ancora fare.
E' tutto nello screenset, dovete scompattare il file nella cartella Mach3, consentire di sovrascrivere un paio di macro e caricare il profilo Robscreenset.set da Mach3, non mi ricordo se il percorso delle bitmaps aggiuntive che utilizzo è memorizzato nello screenset o nel file Mach3Mill.xml.
In caso questo file si potrà aggiornare con Mach3Profile sempre scaricabile dallo stesso sito.
Manca comunque un file bmp che è la lista dei comandi g-code messa in verticale, per questioni di spazio non ho potuto inserirla nel file, ma non è indispensabile visto che lo screenset è provvisorio.

@danieleee
Il tornio non l'ho ancora visto e non so come funziona, ma credo che le macro si possano adattare al profilo Turn.
Ho provato a vedere in cosa differenziano il profilo Mill e Turn per vedere se si possono integrare gli screenset, ma purtroppo gestiscono diversamente la tool-table e alcuni settaggi nel menù generale di mach3.
Le macro andrebbero testate sul profilo Turn e in caso fare qualche modifica per adattarle alla tool-table.
Mach4 non l'ho provato perchè quando ho comprato la CNC cinese mi hanno dato la licenza per Mach3 e siccome mi sono trovato bene non ho pensato di provare altro.
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

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

Re: Tutte le macro: calibrazione utensile - calibrazione mandrino - zero sul posto - cambio utensile

Messaggio da danieleee » martedì 21 agosto 2018, 20:28

Screen superbi! Però per preferenza personale li vedo troppo pieni... io preferirei aggiungere pagine, ma parlo per me..

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

Re: Tutte le macro: calibrazione utensile - calibrazione mandrino - zero sul posto - cambio utensile

Messaggio da Malmesso » mercoledì 22 agosto 2018, 1:31

Grazie danieleee!
Quando avrò finito di sviluppare macro e capito quello che voglio fare con la CNC, potrei spostare in altre pagine quello che non mi serve e allargare tutto.
Solo che la grafica non fa per me.
L'unica cosa che mi piace sono i DRO perchè non sono un'idea mia.
Li ho copiati dallo screenset green in italiano.
Ma sono riuscito comunque a peggiorarli nell'insieme.

scj

Re: Tutte le macro: calibrazione utensile - calibrazione mandrino - zero sul posto - cambio utensile

Messaggio da scj » mercoledì 22 agosto 2018, 7:37

Complimenti!

Alex_live
God
God
Messaggi: 17068
Iscritto il: giovedì 30 luglio 2015, 12:06
Località: Milano

Re: Tutte le macro: calibrazione utensile - calibrazione mandrino - zero sul posto - cambio utensile

Messaggio da Alex_live » mercoledì 22 agosto 2018, 10:54

Ottimo lavoro. =D>

scj

Re: Tutte le macro: calibrazione utensile - calibrazione mandrino - zero sul posto - cambio utensile

Messaggio da scj » giovedì 23 agosto 2018, 13:54

Un Carnico vedo...

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

Re: Tutte le macro: calibrazione utensile - calibrazione mandrino - zero sul posto - cambio utensile

Messaggio da Malmesso » sabato 25 agosto 2018, 8:38

Grazie dei complimenti!
@scj
Essere carnico è una malattia di cui farei volentieri a meno.
Spero di trasferirmi in Sicilia prima o poi.

scj

Re: Tutte le macro: calibrazione utensile - calibrazione mandrino - zero sul posto - cambio utensile

Messaggio da scj » sabato 25 agosto 2018, 9:13

:lol: Non lo dire a me che ci vivo tra i Carnici :mrgreen:

Dai, con un po' di pazienza la puoi curare. E se non puoi andare in Sicilia almeno sposati una siciliana così ci dovrebbe essere un po' di effetto placebo.
Scherzo dai. :lol:

Abito ad Arta. Magari prima o poi ci conosceremo di persona. Anche perché conoscere uno smanettone con le macro di mach fa sempre comodo :- )

Fine OT

turbina

Re: Tutte le macro: calibrazione utensile - calibrazione mandrino - zero sul posto - cambio utensile

Messaggio da turbina » sabato 25 agosto 2018, 11:05

Ben fatto Roberto

GioCa
Newbie
Newbie
Messaggi: 41
Iscritto il: domenica 18 giugno 2017, 15:30
Località: Vicenza

Re: Tutte le macro: calibrazione utensile - calibrazione mandrino - zero sul posto - cambio utensile

Messaggio da GioCa » domenica 26 agosto 2018, 12:18

Grazie per il lavoro,sono troppo crudo con mack3 per poterne usufruire ora, ma mi segno tutto e appena posso cercherò di approfittarne :D

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

Re: Tutte le macro: calibrazione utensile - calibrazione mandrino - zero sul posto - cambio utensile

Messaggio da Malmesso » domenica 26 agosto 2018, 19:23

@scj
A me farebbe comodo invece uno che sa fare tutto il resto.
Magari un giorno ci vediamo.
Il problema è che devo trovare il tempo da dedicare alla CNC.
Grazie per i pensieri positivi.
Spero di sposarmi con una Siciliana il prima possibile.
Ma va bene anche una di Paularo :)

@turbina
Grazie Maurizio dell'apprezzamento.
Dopo che sei passato a vedere la CNC ho dovuto mollare per un anno e mezzo.
Mi dispiace di procedere a rilento.

@GioCa
Prego. Mi raccomando, cucinati a fuoco lento...
Se hai bisogno di spiegazioni sulle procedure fammi sapere.

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

Re: Tutte le macro: calibrazione utensile - calibrazione mandrino - zero sul posto - cambio utensile

Messaggio da danieleee » domenica 26 agosto 2018, 19:54

Domanda... a @Malmesso
Ma come hai fatto ad imparare così bene a fare ste macro?

Rispondi

Torna a “Mach3”