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