Qual è il modo più semplice per cambio utensile manuale?

Sezione dedicata a Mach4
Rispondi
orbscan
Junior
Junior
Messaggi: 90
Iscritto il: domenica 29 gennaio 2012, 23:36
Località: Roma

Qual è il modo più semplice per cambio utensile manuale?

Messaggio da orbscan » giovedì 4 aprile 2024, 0:23

Si può fare senza l'utilizzo di "personalizzazioni" ma solo con il programma base?
Non vorrei usare script e mi piacerebbe la gestione con un toolsetter.
Grazie per ogni aiuto.
Un saluto

torn24
God
God
Messaggi: 5091
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Qual è il modo più semplice per cambio utensile manuale?

Messaggio da torn24 » venerdì 5 aprile 2024, 6:39

Ma cosa intendi per cambio utensile manuale, non hai un magazzino utensili, hai i coni sul mandrino o hai solo la tipica pinza che non consente di montare l'utensile con la stessa sporgenza? Non è chiaro cosa vuoi fare e come è fatta la tua macchina, la lunghezza utensile memorizzata è possibile solo se si puo montare l'utensile con la stessa sporgenza, altrimenti non si parla di cambio utensile ma di azzeramento lunghezza utensile che è un altra cosa.
CIAO A TUTTI !

orbscan
Junior
Junior
Messaggi: 90
Iscritto il: domenica 29 gennaio 2012, 23:36
Località: Roma

Re: Qual è il modo più semplice per cambio utensile manuale?

Messaggio da orbscan » venerdì 5 aprile 2024, 14:42

Effettivamente mi sono spiegato male... Non ho molta esperienza...
Intendevo azzeramento lunghezza utensile...
In pratica io vorrei che quando arriva il comado M6 il mandrino si alzi, io cambio l'utensile, il mandrino con il nuovo utensile si posiziona da solo sul toolsetter, registri il nuovo offset e poi riprenda il lavoro...
E vorrei fare questo nel modo più semplice possibile...
Grazie per ogni aiuto...
Un saluto

torn24
God
God
Messaggi: 5091
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Qual è il modo più semplice per cambio utensile manuale?

Messaggio da torn24 » sabato 6 aprile 2024, 5:48

Ci vuole una macro in LUA, pur semplice che sia se si fa per la prima volta risulta complicato.
Per cui prova a fare ricerche in forum in lingua inglese, macro mach4 azzeramento utensile, ovviamente tradotto, e trova la macro che ti sembra piu semplice da capire.
CIAO A TUTTI !

orbscan
Junior
Junior
Messaggi: 90
Iscritto il: domenica 29 gennaio 2012, 23:36
Località: Roma

Re: Qual è il modo più semplice per cambio utensile manuale?

Messaggio da orbscan » sabato 6 aprile 2024, 10:32

Grazie per la risposta.
Ci deve essere un sistema più semplice...
Ho pensato:
1) monto la punta e la azzero sul pezzo (o con uno spessore o con touch plate).
2) posiziono poi manualmente la punta sul toolsetter e vedo la distanza rispetto al punto zero (ad esempio -10 mm)
3) quando arriva T2 M6 il mandrino si ferma
4) alzo il mandrino con i tasti della tastiera di circa 10 cm per cambiare comodamente la punta
5) vado poi a misurare la nuova punta sul toolsetter e trovo ad esempio che il valore è -4 (quindi la punta è piu lunga)
6) dato che la differenza deve essere -10 inserisco il valore -6 (giusto -6?) nel campo Lenght Tool#2
7) riprendo il lavoro dopo aver riposizionato sul pezzo la nuova punta facendo attenzione a non sbattere da qualche parte...
A parte la laboriosità il metodo sopraelencato sarebbe corretto?
Un saluto

Avatar utente
MauPre75
Senior
Senior
Messaggi: 2391
Iscritto il: venerdì 1 dicembre 2017, 14:43

Re: Qual è il modo più semplice per cambio utensile manuale?

Messaggio da MauPre75 » sabato 6 aprile 2024, 10:48

Secondo me è uno sbattimento superfluo, il cambio utensile è giustificato se automatizzato, farlo a mano può essere fonte di errori e pericolo per l'operatore, se non si dispone di cambio utensile la cosa più sensata è eseguire e terminare il gcode relativo alla fresa in uso, fermare la macchina, cambio utensile ed azzeramento, ripartire con il nuovo gcode della lavorazione successiva.
Quello che vuoi fare l'ho testato una sola volta e non la ritengo una procedura sicura.

orbscan
Junior
Junior
Messaggi: 90
Iscritto il: domenica 29 gennaio 2012, 23:36
Località: Roma

Re: Qual è il modo più semplice per cambio utensile manuale?

Messaggio da orbscan » sabato 6 aprile 2024, 16:13

Scusami... non ho capito...
"la cosa più sensata è eseguire e terminare il gcode relativo alla fresa in uso, fermare la macchina, cambio utensile ed azzeramento, ripartire"
è quello che voglio fare io...
Che differenza c'è?

Diego
Member
Member
Messaggi: 560
Iscritto il: domenica 13 gennaio 2008, 15:18
Località: Vicenza

Re: Qual è il modo più semplice per cambio utensile manuale?

Messaggio da Diego » sabato 6 aprile 2024, 17:48

Non per mach4... ma quello che vuoi far tu io l'ho fatto. Tastatore fisso in un punto noto della tavola.
Ora: il tuo punto 1 io lo eseguo manualmente come dici tu
2-3 in automatico con memorizzazione variabili di lavoro e lunghezza utensile. Quando arriva il punto 4 si alza in automatico, va sopra al tastatore ed esce una schermata di sicurezza con scritto "premi invio al termine del cambio utensile"
Ora cambi la fresa e se non premi invio la macro non va avanti. Punto 5 e 6 eseguito in automatico per mezzo di "variabili" . Punto 7 in automatico con ripresa lavoro...
Puoi bere un caffè mentre cambi l'utensile... fatta una volta fatta per una vita... perché complicarsi la vita manualmente. Prima usavo 1-2 utensili... ora ne uso anche 5 per un lavoro di 5 minuti... "tanto fa il 90% del lavoro lei (la cnc)".

Avatar utente
MauPre75
Senior
Senior
Messaggi: 2391
Iscritto il: venerdì 1 dicembre 2017, 14:43

Re: Qual è il modo più semplice per cambio utensile manuale?

Messaggio da MauPre75 » sabato 6 aprile 2024, 19:48

orbscan ha scritto:
sabato 6 aprile 2024, 16:13
Scusami... non ho capito...

Che differenza c'è?
La differenza è che tu in un solo gcode vuoi fare lavorazione con più utensili il che implica che devi usare macro e pause, se non è tutto corretto e presidiato puoi rischiare collisioni ed altro, mentre se fai un gcode con un solo utensile a fine lavoro la macchina si ferma, cambi l'utensile carichi il nuovo gcode e riprendi in sicurezza.

orbscan
Junior
Junior
Messaggi: 90
Iscritto il: domenica 29 gennaio 2012, 23:36
Località: Roma

Re: Qual è il modo più semplice per cambio utensile manuale?

Messaggio da orbscan » sabato 6 aprile 2024, 23:00

Ho capito (credo) quello che dici MauPre75...
fai un gcode con un solo utensile a fine lavoro la macchina si ferma, cambi l'utensile carichi il nuovo gcode e riprendi in sicurezza
Ci avevo pensato...
In pratica se ho ben capito scomponi il lavoro in più g-code.
Però mentre per fare lo zero su un pezzo vergine e piano è facile fare lo zero su un pezzo già lavorato come si fa? Non ho più un piano ad esempio per mettere uno spessore o un touch plate...
Come faccio?

orbscan
Junior
Junior
Messaggi: 90
Iscritto il: domenica 29 gennaio 2012, 23:36
Località: Roma

Re: Qual è il modo più semplice per cambio utensile manuale?

Messaggio da orbscan » sabato 6 aprile 2024, 23:29

QUALCHE STUDIO... Ma ancora non ho capito come devo integrare, completare e lanciare lo script...

-----------------------------------------------------------------------------
-- Auto Tool Setting Macro
-----------------------------------------------------------------------------
--[[
Requires the following instance registers to be defined
TS_XPos-----------X position of probe (machine position)
TS_YPos-----------Y position of probe (machine position)
TS_Type-----------Offset type (1 or 2)
TS_TouchPos-------Z position of touch off surface (machine position)
TS_ProbeH---------Height of probe above touch off surface
TS_DefaultL-------Default tool length guess
TS_Retract--------Retract distance after probe touch
Offset Type 1-----Length of tool from gauge line to tip
Offset Type 2-----Distance from tip of tool to the touch position
]]
--The function GetRegister() must be defined for use by macros
function m1005()
local inst = mc.mcGetInstance()

------------- Define Vars -------------
local ProbeSignal = mc.ISIG_INPUT0
------------- Get current state -------------
local CurTool = mc.mcToolGetCurrent(inst)
local CurHNum = mc.mcCntlGetPoundVar(inst, 2032)
local CurFeed = mc.mcCntlGetPoundVar(inst, 2134)
local CurZOffset = mc.mcCntlGetPoundVar(inst, 4102)

local CurFeedMode = mc.mcCntlGetPoundVar(inst, 4001)
local CurAbsMode = mc.mcCntlGetPoundVar(inst, 4003)
------------- Get touch off parameters -------------
local Xpos = GetRegister("TS_XPos", 1)
local Ypos = GetRegister("TS_YPos", 1)
local OffsetType = GetRegister("TS_Type", 1)
local TouchPos = GetRegister("TS_TouchPos", 1)
local ProbeHeight = GetRegister("TS_ProbeH", 1)
local RetractDistance = GetRegister("TS_Retract", 1)
local ToolLengthGuess = GetRegister("TS_DefaultL", 1)
------------- Check Probe -------------
local hsig = mc.mcSignalGetHandle(inst, ProbeSignal)
local ProbeState = mc.mcSignalGetState(hsig)
if (ProbeState == true) then
mc.mcCntlSetLastError(inst, "ERROR: Probe signal is activated")
do return end
end

------------- Calculations for Gcode -------------
local StartHeight = TouchPos + ProbeHeight + ToolLengthGuess + .5

------------- Generate GCode -------------
AutoToolSetGCode = ""
AutoToolSetGCode = AutoToolSetGCode .. "G00 G80 G40 G49 G90\n"
AutoToolSetGCode = AutoToolSetGCode .. "G00 G53 Z0.0\n"
AutoToolSetGCode = AutoToolSetGCode .. string.format("G00 G53 X%.4f Y%.4f\n", Xpos, Ypos)
AutoToolSetGCode = AutoToolSetGCode .. string.format("G00 G53 Z%.4f\n", StartHeight)
AutoToolSetGCode = AutoToolSetGCode .. "G91 G31 Z-2.0 F25.\n"

mc.mcCntlGcodeExecuteWait(inst, AutoToolSetGCode)
--Check probe contact
ProbeState = mc.mcSignalGetState(hsig)
if (ProbeState ~= 1) then
mc.mcCntlSetLastError(inst, "ERROR: No contact with probe")
mc.mcCntlGcodeExecuteWait(inst, "G0 G90 G53 Z0.0\n")
do return end
end

AutoToolSetGCode = ""
AutoToolSetGCode = AutoToolSetGCode .. string.format("G91 G00 Z%.4f\n", RetractDistance)
AutoToolSetGCode = AutoToolSetGCode .. "G91 G31 Z-1.0 F10.\n"

mc.mcCntlGcodeExecuteWait(inst, AutoToolSetGCode)
--Check probe contact
ProbeState = mc.mcSignalGetState(hsig)
if (ProbeState ~= 1) then
mc.mcCntlSetLastError(inst, "ERROR: No contact with probe")
mc.mcCntlGcodeExecuteWait(inst, "G0 G90 G53 Z0.0\n")
do return end
end

AutoToolSetGCode = ""
AutoToolSetGCode = AutoToolSetGCode .. "G90 G00 G53 Z0.0\n"
mc.mcCntlGcodeExecuteWait(inst, AutoToolSetGCode)
------------- Get touch position and set offset -------------
local ZProbed = mc.mcCntlGetPoundVar(inst, 5063)
local ZOffset = ZProbed - ProbeHeight + CurZOffset
if (OffsetType == 1) then
ZOffset = math.abs(TouchPos - ZOffset)
end

mc.mcToolSetData(inst, mc.MTOOL_MILL_HEIGHT, CurTool, ZOffset)
mc.mcCntlSetLastError(inst, string.format("Auto tool setting complete, Offset = %.4f",
ZOffset))


------------- Set previous state -------------
mc.mcCntlSetPoundVar(inst, 2134, CurFeed)
mc.mcCntlSetPoundVar(inst, 4001, CurFeedMode)
mc.mcCntlSetPoundVar(inst, 4003, CurAbsMode)

end
if (mc.mcInEditor() == 1) then
dofile ("load_modules.mcs")
m1005()
end



cercando di capire... (chiesto a AI)

function m1005(): Questa riga definisce una funzione Lua chiamata m1005.

local inst = mc.mcGetInstance(): Questa riga ottiene l'istanza corrente del controllo Mach tramite la funzione mc.mcGetInstance() e la memorizza nella variabile locale inst.

local ProbeSignal = mc.ISIG_INPUT0: Questa riga definisce una variabile locale ProbeSignal e assegna ad essa il valore del segnale di input 0 (ISIG_INPUT0).

Le righe seguenti recuperano lo stato corrente della macchina e delle impostazioni del controllo, come il tool corrente, il numero di altezza corrente, il feed corrente, l'offset Z corrente e così via, utilizzando le funzioni fornite da Mach4 (ad esempio mc.mcToolGetCurrent, mc.mcCntlGetPoundVar, ecc.).

Le righe seguenti recuperano i parametri di tocco, come le coordinate X e Y del punto di tocco, l'altezza del tocco, la distanza di ritrattamento dopo il tocco e così via, utilizzando la funzione GetRegister che è presumibilmente definita altrove nel codice. Questi parametri sono fondamentali per il funzionamento del toolsetter automatico.

local hsig = mc.mcSignalGetHandle(inst, ProbeSignal): Questa riga ottiene l'handle del segnale di sonda utilizzando la funzione mc.mcSignalGetHandle.

local ProbeState = mc.mcSignalGetState(hsig): Questa riga ottiene lo stato del segnale di sonda utilizzando la funzione mc.mcSignalGetState.

Le righe seguenti controllano se il segnale di sonda è attivo e in caso positivo restituiscono un errore.

Le righe successive eseguono calcoli per generare il codice G necessario per eseguire il test di contatto del toolsetter e lo eseguono tramite mc.mcCntlGcodeExecuteWait.

Vengono eseguiti ulteriori controlli per verificare se il contatto con il toolsetter è avvenuto correttamente e se necessario vengono restituiti messaggi di errore.

Viene calcolato l'offset Z basato sulla posizione di tocco e sulla posizione Z corrente, e questo offset viene impostato come altezza dello strumento utilizzando mc.mcToolSetData.

Vengono ripristinate le impostazioni precedenti del feed e della modalità di feed utilizzando mc.mcCntlSetPoundVar.

Infine, viene restituito un messaggio di completamento dell'impostazione automatica dello strumento.

La parte successiva dell'if statement if (mc.mcInEditor() == 1) then è eseguita solo se il programma è in modalità di editor Mach4. In questo caso, viene eseguito il file load_modules.mcs e viene chiamata la funzione m1005(), il che significa che lo script verrà eseguito.

torn24
God
God
Messaggi: 5091
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Qual è il modo più semplice per cambio utensile manuale?

Messaggio da torn24 » domenica 7 aprile 2024, 6:16

Quella macro è la macro che danno per esempio il problema che lavora con i registri di mach4, per farla funzionare bisogna avere una conoscenza molto approfondita di macro mach4, vedendo dagli esempi in forum stranieri ho visto sempre soluzioni alternative, anche perché pe mach4 non esistono la stessa quantità di informazioni esistenti per mach3, per numero di utenti che lo usano e per numero di anni in cui è stato usato.

Ho modificato quella macro per evitare di usare i registri, è meno sofisticata in quando i dati come posizione del tastatore bisogna indicarli manualmente nelle variabili, mentre con uso dei registri è automatico ma bisogna sapere dove indicarli in mach4, cosa che sembra non sanno in molti.

Il problema che ti si deve guidare passo passo perche non conosci che esistono piu versioni mach4, non sai dove inserire la macro, e non sai dove posizionare il tastatore dove collegarlo e quale segnale utilizzare.


Cose semplice? Come si usa la più semplice delle cnc, monti l'utensile sfiori la parte superiore del pezzo mettendo un foglio di carta, e premi il pulsante zero dell'asse Z, in questo modo il punto di tocco è zero zeta "cosa semplice e la più semplice". Se cambi utensile avresti la necessità di misurare la lunghezza utensile, ma esiste uno stratagemma, tu hai il grezzo di partenza da cui lavori il tuo pezzo, se lasci un parte in cui puoi riprendere nuovamente lo zero in zeta come descritto. Esempio ho una piastra di partenza il mio grezzo, monto il primo utensile tocco la superficie e azzero la zeta, monto il secondo utensile ma mi è rimasta una parte di piastra grezza e la uso per prendere di nuovo lo zero del secondo utensile.
In pratica basta che lasci un pezzo di grezzo dove puoi azzerare i vari utensili.
CIAO A TUTTI !

Immo
Junior
Junior
Messaggi: 130
Iscritto il: domenica 2 maggio 2021, 12:29

Re: Qual è il modo più semplice per cambio utensile manuale?

Messaggio da Immo » domenica 7 aprile 2024, 8:12

Se ti azzerri sempre li sin dal primo utensile non serve nemmeno che lo spiani in primis, oppure lo zero lo prendi sulla morsa se possibile, aggiungendo l'offset Z tra zero pezzo e zero morsa

orbscan
Junior
Junior
Messaggi: 90
Iscritto il: domenica 29 gennaio 2012, 23:36
Località: Roma

Re: Qual è il modo più semplice per cambio utensile manuale?

Messaggio da orbscan » domenica 7 aprile 2024, 10:56

Ringrazio per le risposte ricevute.
Ho incaricato un programmatore professionista di farmi il codice.
Dice che il LUA è facile... Bah...
Appena mi da il listato con tutte le spiegazioni lo metto qui.
Ditemi se gli devo dire qualcosa in particolare.
Un saluto

torn24
God
God
Messaggi: 5091
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Qual è il modo più semplice per cambio utensile manuale?

Messaggio da torn24 » domenica 7 aprile 2024, 11:46

Lua è il linguaggio poi ci sono le Api di mach4 che consentono di fare le cose e non fanno parte di LUA, per cui se lua è facile ma non conosci i metodi specifici di mach4 fai poco. Mi sa che non può fare meglio dello script che hai trovato come esempio modificherà quello come ho fatto
io :D

Questa è la macro come l'ho modificata io, c'è da inserire il giusto INPUT della scheda collegato al proble, c'è da inserire la posizione del proble sulla tavola in X Y, questo cambiando i valori alle variabili. Poi c'è da imparare con che estensione salvarla e in che cartella metterla di Mach4. Studiare un po. E' una semplificazione della macro proposta dagli sviluppatori, evitando di usare i registri, come detto cosa complessa se si conosce poco mach4.

Codice: Seleziona tutto


function m100()

  -- Definisci il segnale del tastatore (sostituisci con il numero effettivo del segnale)
  local probeSignal = mc.ISIG_DIGITIZE --Mettere il segnale dei proble non so quale sia


  -- Imposta i parametri di azzeramento (modifica se necessario)
  local xPos = 0.0 -- Posizione X del punto di tocco
  local yPos = 0.0 -- Posizione Y del punto di tocco
  local touchPos = 0.0 -- Posizione Z del punto di tocco (zero macchina)
  local probeHeight = 10.0 -- Altezza del tastatore
  local retractDistance = 5.0 -- Distanza di retrazione
  local toolLengthGuess = 50.0 -- Stima della lunghezza utensile




  -- Controlla se il tastatore è attivato
  local probeState = mc.mcSignalGetState(mc.mcSignalGetHandle(mc.mcGetInstance(), probeSignal))
  if probeState == true then
    mc.mcCntlSetLastError(mc.mcGetInstance(), "ERRORE: Segnale del tastatore attivato")
    return
  end



  -- Ottieni lo strumento corrente e gli offset
  local currentTool = mc.mcToolGetCurrent(mc.mcGetInstance())
  local currentZOffset = mc.mcToolGetData(mc.mcGetInstance(), mc.MTOOL_MILL_HEIGHT, currentTool)

  -- Imposta temporaneamente velocità di avanzamento e modalità
  local savedFeed = mc.mcCntlGetPoundVar(mc.mcGetInstance(), 2134)
  local savedFeedMode = mc.mcCntlGetPoundVar(mc.mcGetInstance(), 4001)
  mc.mcCntlSetPoundVar(mc.mcGetInstance(), 2134, 25.0) -- Sostituisci con la velocità di avanzamento desiderata
  mc.mcCntlSetPoundVar(mc.mcGetInstance(), 4001, 1) -- Imposta la modalità G00

  -- Posizionati a un'altezza di partenza sicura sopra la piastra di tocco
  mc.mcCntlGcodeExecuteWait(mc.mcGetInstance(), "G00 G80 G40 G49 G90")
  mc.mcCntlGcodeExecuteWait(mc.mcGetInstance(), "G00 G53 Z10.0")
  

  

  -- Calcola l'altezza di partenza considerando l'altezza del tastatore, la stima della lunghezza 
  -- utensile e un margine di sicurezza
  local startHeight = touchPos + probeHeight + toolLengthGuess + 0.5 --VALORE APPROSSIMATO PARTENZA, IPOTESI 50 MM LUNGHEZZA UTENSILE

  -- Genera codice G per il tocco iniziale e l'azzeramento dell'asse Z
  local autoToolSetGCode = "G00 G53 X"..xPos.." Y"..yPos.."\n".."G00 G53 Z"..startHeight.."\n".."G91 G31 Z-2.0 F25.\n" -- Primo tocco

  mc.mcCntlGcodeExecuteWait(mc.mcGetInstance(), autoToolSetGCode)

  -- Controlla il contatto del tastatore

  probeState = mc.mcSignalGetState(mc.mcSignalGetHandle(mc.mcGetInstance(), probeSignal))
  if probeState ~= 1 then
    mc.mcCntlSetLastError(mc.mcGetInstance(), "ERRORE: Mancato contatto con il tastatore")
    mc.mcCntlGcodeExecuteWait(mc.mcGetInstance(),"G0 G90 G53 Z0.0\n")
    return
  end

  -- Retrazione, secondo tocco per un azzeramento più preciso e aggiornamento dell'offset
  autoToolSetGCode = "G91 G00 Z".. retractDistance .."\n".. "G91 G31 Z-1.0 F10.\n".. "G90 G00 G53 Z0.0\n"

  mc.mcCntlGcodeExecuteWait(mc.mcGetInstance(), autoToolSetGCode)

  local zProbed = mc.mcCntlGetPoundVar(mc.mcGetInstance(), 5063)-- LEGGO IL VALORE MISURATO DAL PROBLE
  --IL CALCOLO LUNGHEZZA PROTREBBE ESSERE SBAGLIATO, VALORE MISURATO DAL PROBLE + ALTEZZA PROBLE - LUNGHEZZA ATTUALE  TROVARE CALCOLO GIUSTO
  local newZOffset = zProbed - probeHeight + currentZOffset --Questo calcolo protrebbe essere sbagliato
 --Imposta la lunghezza utensile calcolata
 mc.mcToolSetData(mc.mcGetInstance(), mc.MTOOL_MILL_HEIGHT, mc.newZOffset)
end

if (mc.mcInEditor() == 1) then
 m100()
end

CIAO A TUTTI !

Rispondi

Torna a “Mach4”