Non vorrei usare script e mi piacerebbe la gestione con un toolsetter.
Grazie per ogni aiuto.
Un saluto
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.
Ci avevo pensato...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
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