primo commit

This commit is contained in:
luca.mazzoleni
2024-09-19 09:27:57 +02:00
commit 5df48bfe17
48 changed files with 3010 additions and 0 deletions
+752
View File
@@ -0,0 +1,752 @@
-- Processore macchina Essetre-WallXS by EgalTech s.r.l. 2022/08/03
-- Con controllo numerico TPA
-- 2021/12/10 DS Prima versione
-- 2022/05/05 DS ver 2.4e1 Ora Nailing emette feed di lavoro.
-- 2022/05/12 DS ver 2.4e3 Ora Nailing usa Z di lavorazione come PodBau (affondamento == lughezza utensile).
-- Variabili di modulo
local MLE_INFO = 'Essetre-WallXS.TPA.mlpe ver.'..PP_VER..' by Egalware s.r.l.'
local TEST_USE = false
---------------------------------------------------------------------
-- *** GENERATION ***
---------------------------------------------------------------------
function OnStart()
-- controllo versione programma
if not EMT.VER or EMT.VER < '2.5d1' then
EmtSetLastError( 1200, 'A newer version of the program is required (minimum EgtMachKernel 2.5d1)')
end
EMT.USETO1 = false -- abilitazione uso origine tavola
EMT.MODAL = true -- abilitazione emissione modale
EMT.INCHES = false -- unità di misura mm/inches
EMT.NUM = false -- abilitazione numerazione linee
--EMT.Nt = 'N' -- token per la numerazione di linea
--EMT.LINENBR = 0 -- numero di linea
--EMT.LINEINC = 1 -- incremento numerazione linee
--EMT.Ft = 'F' -- token per feed
--EMT.St = 'S' -- token per speed
end
---------------------------------------------------------------------
function OnEnd()
-- Ripristino fase iniziale come corrente
EgtSetCurrPhase( 1)
end
---------------------------------------------------------------------
function OnProgramStart()
-- Info da gruppo BtlInfo
local BtlInfoId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or EgtGetCurrMachGroup() or GDB_ID.NULL
EMT.LOAD90 = EgtGetInfo( BtlInfoId, 'LOAD90', 'i') or 0
local nRefPos = EgtClamp( EgtGetInfo( BtlInfoId, 'REFPOS', 'i') or 1, 1, 8)
if nRefPos <= 4 then
EMT.ORIG = nRefPos
else
EMT.ORIG = nRefPos + 6
end
-- Intestazioni
if not TEST_USE then
EMT.PRODID = EgtGetInfo( BtlInfoId, 'PRODID', 'i') or 0
EMT.PATTID = EgtGetInfo( BtlInfoId, 'PATTID', 'i') or 0
end
EmtOutput( ';LISTA = ' .. tostring( EMT.PRODID or 0))
if EMT.INFO then
EmtOutput( ';'..EMT.INFO)
else
EmtOutput( ';Program Start')
end
EmtOutput( ';'.. MLE_INFO)
-- Indice lavorazione
EMT.CNT = 0
-- Non effettuate lavorazioni con sega a catena sul fianco
EMT.CSAWFIRST = true
-- Non effettuata pausa per rimozione sfridi
EMT.SCRAPFIRST = true
-- Cerco primo utensile su testa 1
EMT.TOOL_1, EMT.TLEN_1 = FindFirstToolOnHead( 'H1')
-- Inizializzazioni varie
EmtOutput( 'M6 T000000')
EmtOutput( 'G49')
-- Inizio lista utensili
EmtOutput( 'M993 (Tool List Start)')
end
---------------------------------------------------------------------
function OnProgramEnd()
EmtOutput( '; *** Program End ***')
EmitCount( false)
EmtOutput( 'M117 P1=0')
-- Dichiarazione conclusione pezzi
if EMT.PRODID then
local sOut = 'M113 P1='..tostring( EMT.PRODID)..' P2='..tostring( EMT.PATTID)..' P3='..tostring( -1)..' P4=2'
EmtOutput( sOut)
end
-- Arresto mandrino
EmtOutput( 'M05')
-- Tipo di scarico
if not TEST_USE then
EmtOutput( 'M116')
end
-- Termino il programma
EmtOutput( 'M02')
end
---------------------------------------------------------------------
function OnToolData()
-- emissione dati utensili
if EMT.HEAD == 'H1' then
local sOut = 'M992 P1=' .. EMT.TCPOS:gsub( 'T', '') .. ' P2=' .. EmtLenToString( EMT.TLEN, 3) .. ' P3=' .. EmtLenToString( EMT.TDIAM, 3) ..
' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, 3)
EmtOutput( sOut)
-- cerco posizione di attrezzaggio del primo utensile di lavorazione
if EMT.TOOL == EMT.TOOL_1 and EMT.TLEN_1 < 215.5 then
EMT.TCPOS_1 = EMT.TCPOS
end
-- emissione dati lama
elseif EMT.HEAD == 'H2' then
local sOut = 'M992 P1=' .. EMT.TCPOS:gsub( 'T', '') .. ' P2=' .. EmtLenToString( -SawOffsZ + EMT.TLEN, 3) .. ' P3=' .. EmtLenToString( EMT.TDIAM, 3) ..
' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, 3)
EmtOutput( sOut)
-- emissione dati sega a catena
elseif EMT.HEAD == 'H3' then
if EMT.TDIST and abs( EMT.TDIST) < 0.1 then EMT.TDIST = nil end
local sData = ' P2=' .. EmtLenToString( ( EMT.TDIST or ChSawLen), 3) .. ' P3=' .. EmtLenToString( EMT.TLEN, 3) ..
' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( (EMT.TDIST or ChSawLen), 3)
EmtOutput( 'M992 P1=8' .. sData)
end
end
---------------------------------------------------------------------
function OnDispositionStart()
--EmtOutput( '(Disposition '..EMT.DISPIND..' = '..EMT.DISPID..')')
EMT.OPEISDISP = true
-- Se prima disposizione
if EMT.PHASE == 1 then
-- terminazione lista utensili
EmtOutput( 'G990 (Tool List End)')
-- Parametri macchina
local d1stNailX, d1stNailY, d1stNailZ = 0, 0, 0
if Nail11 ~= 0 then
d1stNailX = DeltaTabY + DimTabY - Nail11DeltaY
d1stNailY = -DeltaTabX + Nail11DeltaX
d1stNailZ = DeltaTabZ - Nail11DeltaZ
end
local d2ndNailX, d2ndNailY, d2ndNailZ = 0, 0, 0
if Nail12 ~= 0 then
d2ndNailX = DeltaTabY + DimTabY - Nail12DeltaY
d2ndNailY = -DeltaTabX + Nail12DeltaX
d2ndNailZ = DeltaTabZ - Nail12DeltaZ
end
local sOut = 'M114'..' P1='..EgtNumToString( DeltaTabY + DimTabY, 2)..' P2='..EgtNumToString( -DeltaTabX, 2)..
' P3='..EgtNumToString( DeltaTabZ - MillOffs, 2)..' P4='..EgtNumToString( d1stNailX, 2)..
' P5='..EgtNumToString( d1stNailY, 2)..' P6='..EgtNumToString( d1stNailZ, 2)..
' P7='..EgtNumToString( d2ndNailX, 2)..' P8='..EgtNumToString( d2ndNailY, 2)..
' P9='..EgtNumToString( d2ndNailZ, 2)..' P10='..EgtNumToString( MillOffs, 2)..
' P11='..EgtNumToString( Orig3DeltaY, 2)..' P12='..EgtNumToString( -Orig3DeltaX, 2)..' P13='..EgtNumToString( Orig3DeltaZ, 2)..
' P14='..EgtNumToString( Orig5DeltaY, 2)..' P15='..EgtNumToString( -Orig5DeltaX, 2)..' P16='..EgtNumToString( Orig5DeltaZ, 2)..
' P17='..EgtNumToString( Orig7DeltaY, 2)..' P18='..EgtNumToString( -Orig7DeltaX, 2)..' P19='..EgtNumToString( Orig7DeltaZ, 2)
EmtOutput( sOut)
end
end
---------------------------------------------------------------------
function OnDispositionEnd()
-- Se prima disposizione
if EMT.PHASE == 1 then
-- Dimensioni grezzo
local b3Raw = EgtGetRawPartBBox( EMT.RAWID)
local sOut = 'M115 P1='..EgtNumToString( b3Raw:getDimY(), 0)..' P2='..EgtNumToString( b3Raw:getDimX(), 0)..
' P3='..EgtNumToString( b3Raw:getDimZ(), 0)..' P4='..EgtNumToString( EMT.ORIG, 0)
EmtOutput( sOut)
EMT.ST = b3Raw:getDimZ()
-- Posizione cuffia
--local dHCuff = b3Raw:getDimZ() + 32
--EmtOutput( 'E30039=' .. EgtNumToString( dHCuff * 1000, 0))
-- Eventuale salto a lavorazione in corso
--EmtOutput( 'G79 NE80000')
-- Lancio del carico
if not TEST_USE then
; --EmtOutput( 'M26 E30054=' .. EgtNumToString( EMT.ORIG, 0))
end
-- Dichiarazione inizio lavorazione pezzi
if EMT.PRODID then
local sOut = 'M113 P1='..tostring( EMT.PRODID)..' P2='..tostring( EMT.PATTID)..' P3='..tostring( -1)..' P4=1'
EmtOutput( sOut)
end
end
EMT.OPEISDISP = false
end
---------------------------------------------------------------------
function OnTableData()
end
---------------------------------------------------------------------
function OnFixtureData()
end
---------------------------------------------------------------------
function OnRawMoveData()
end
---------------------------------------------------------------------
function OnToolSelect()
-- se utensile definito (non definito per disposizioni con movimento)
if EMT.TOOL ~= '' then
-- verifiche su utensile
local sTool = EgtTdbGetToolFromUUID( EgtGetMachiningParam( MCH_MP.TUUID) or "")
if sTool ~= EMT.TOOL then error( "Tool name mismatch") end
-- predefinite EMT.TCPOS EMT.HEAD EMT.EXIT
EMT.TOOLTYPE = EgtTdbGetCurrToolParam( MCH_TP.TYPE)
EMT.TOOLSEL = EMT.TCPOS..' M06'
EMT.TDIAM = EgtTdbGetCurrToolParam( MCH_TP.DIAM)
EMT.TTOTDIAM = EgtTdbGetCurrToolParam( MCH_TP.TOTDIAM)
EMT.TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN)
EMT.TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
if MCH_TP.DIST then EMT.TDIST = EgtTdbGetCurrToolParam( MCH_TP.DIST) end
if EMT.TDIST and abs( EMT.TDIST) < 0.1 then EMT.TDIST = nil end
end
end
---------------------------------------------------------------------
function OnToolDeselect()
end
---------------------------------------------------------------------
function OnMachiningStart()
--EMT.MCHLIBNAME = EgtGetMachiningParam( MCH_MP.NAME)
EMT.MCHNAME = EgtGetOperationName( EMT.MCHID)
EMT.MCHTYPE = EgtGetMachiningParam(MCH_MP.TYPE)
-- non ancora iniziata la lavorazione
EMT.MCHFIRST = true
-- primo posizionamento sempre in globale
EMT.REFLOC = nil
EMT.IPLGL = false
end
---------------------------------------------------------------------
function OnMachiningEnd()
if not EMT.ZMAX then
EmtOutput( 'G27')
EmtOutput( 'M6 T000000')
EmtOutput( 'M99')
EmtOutput( 'M117 P1='..tostring( EMT.CNT+1))
end
EMT.PREVTOOL = EMT.TOOL
end
---------------------------------------------------------------------
function OnPathStart()
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
EmtResetPrev()
EMT.FEED_FIRST = true
end
---------------------------------------------------------------------
function OnPathEnd()
if IsNailingHead( EMT.HEAD) then
EmtOutput( EgtIf( EMT.HEAD == 'H11', 'M6 T200000', 'M6 T300000'))
EmtOutput( 'M101 P1='..EmtLenToString( EMT.NAIL_START_L2o, 3)..' P2='..EmtLenToString( -EMT.NAIL_START_L1o, 3)..' P3='..EmtLenToString( EMT.NAIL_START_L3o, 3))
EmtOutput( 'G24'..EMT.NAIL_END)
local bMoreNails = ( abs( EMT.NAIL_END_L1 - EMT.NAIL_START_L1) > 10 or abs( EMT.NAIL_END_L2 - EMT.NAIL_START_L2) > 10)
local dStep = GetValNotes( EgtGetMachiningParam( MCH_MP.USERNOTES), 'Par', 'd') or 100
local dSafeZ = EMT.ST + ( max( EgtGetMachiningParam( MCH_MP.STARTPOS), 10) or 20)
local dDepth = EMT.NAIL_START_L3
EMT.FP = nil
EMT.F = EgtGetMachiningParam( MCH_MP.FEED) or 9876
local sFeed = EmtGetFeed()
EmtOutput( 'G0 X'..EmtLenToString( EMT.NAIL_START_L1, 3)..' Y'..EmtLenToString( EMT.NAIL_START_L2, 3)..' Z'..EmtLenToString( dSafeZ, 3))
EmtOutput( EgtIf( EMT.HEAD == 'H11', 'M121', 'M131'))
EmtOutput( 'G1 X'..EmtLenToString( EMT.NAIL_START_L1, 3)..' Y'..EmtLenToString( EMT.NAIL_START_L2, 3)..' Z'..EmtLenToString( dDepth, 3)..sFeed)
if bMoreNails then
EmtOutput( EgtIf( EMT.HEAD == 'H11', 'M122', 'M132')..' P1='..EmtLenToString( dStep, 3))
EmtOutput( 'G1 X'..EmtLenToString( EMT.NAIL_END_L1, 3)..' Y'..EmtLenToString( EMT.NAIL_END_L2, 3)..' Z'..EmtLenToString( dDepth, 3)..sFeed)
EmtOutput( EgtIf( EMT.HEAD == 'H11', 'M123', 'M133'))
EmtOutput( 'G0 X'..EmtLenToString( EMT.NAIL_END_L1, 3)..' Y'..EmtLenToString( EMT.NAIL_END_L2, 3)..' Z'..EmtLenToString( dSafeZ, 3))
else
EmtOutput( EgtIf( EMT.HEAD == 'H11', 'M122', 'M132')..' P1=0')
EmtOutput( EgtIf( EMT.HEAD == 'H11', 'M123', 'M133'))
EmtOutput( 'G0 X'..EmtLenToString( EMT.NAIL_START_L1, 3)..' Y'..EmtLenToString( EMT.NAIL_START_L2, 3)..' Z'..EmtLenToString( dSafeZ, 3))
end
end
EMT.FEED_FIRST = nil
end
---------------------------------------------------------------------
function OnRapid()
-- se primo movimento della lavorazione, gestione speciale
if EMT.MCHFIRST and not EMT.OPEISDISP then
MyAdjustLinearAxes()
EmtAdjustRotaryAxes()
EmtOutput( '; *** '..EMT.MCHNAME..'/'..EMT.TOOL..' ***')
EmitCount( true)
-- se lavorazione con sega a catena
if EMT.HEAD == 'H3' then
-- se prima lavorazione sui fianchi con sega a catena
if EMT.CSAWFIRST and string.sub( EMT.MCHNAME, 1, 5) == 'Csaw_' then
EMT.CSAWFIRST = false
-- pausa per rimozione sfridi
local b3Raw = EgtGetRawPartBBox( EMT.RAWID)
local ParkY = min( -( b3Raw:getMin():getX() - 2000), -MinY)
EmtOutput( ';M104 Y' .. EmtLenToString( ParkY, 3) .. ' ET1' .. GetEF())
-- pre-posizionamento
EmtResetPrev()
local sOut = 'M101' .. GetAxisParam( 'R1', 'P5=')
EmtOutput( sOut)
end
-- altrimenti verifico se necessaria pausa
else
if EMT.SCRAPFIRST and EgtExistsInfo( EMT.MCHID, 'MOVE_AFTER') then
EMT.SCRAPFIRST = false
-- pausa per rimozione sfridi
local b3Raw = EgtGetRawPartBBox( EMT.RAWID)
local ParkY = min( -( b3Raw:getMin():getX() - 2000), -MinY)
EmtOutput( ';M104 Y' .. EmtLenToString( ParkY, 3) .. ' ET1' .. GetEF())
end
end
-- dichiarazione testa e utensile
if not IsNailingHead( EMT.HEAD) then
EmtOutput( 'M6 T101' .. AdjustTcPos( true))
local Speed = EMT.S * EgtIf( EMT.HEAD ~= 'H2', 1, 1.65)
if Speed > 0 then
EmtOutput( 'M3 S' .. EgtNumToString( abs( Speed), 0))
else
EmtOutput( 'M4 S' .. EgtNumToString( abs( Speed), 0))
end
-- primo posizionamento
EmtResetPrev()
local sOut = 'M101' .. GetAxisParam( 'L2', 'P1=') .. GetAxisParam( 'L1', 'P2=') .. GetAxisParam( 'L3', 'P3=') ..
GetAxisParam( 'R2', 'P4=') .. GetAxisParam( 'R1', 'P5=')
EmtOutput( sOut)
end
EMT.REFLOC = 0
EMT.MCHFIRST = false
EMT.ZMAX = false
-- se standard
elseif EMT.FLAG == 0 or EMT.FLAG == 1 or EMT.FLAG == 2 then
-- se necessario, impostazione riferimento locale
if EMT.REFLOC == 0 then
-- calcolo per piano generico
CalcInterpPlane()
EMT.REFLOC = 1
if not IsNailingHead( EMT.HEAD) then
EmtOutput( 'G24'..EMT.IPLGLSTR)
end
-- trasformo i punti nel piano
MyAdjustLinearAxes()
EmtAdjustRotaryAxes()
EMT.L1p = nil
EMT.L2p = nil
EMT.L3p = nil
EMT.R1p = nil
EMT.R2p = nil
-- emissione movimento
if not IsNailingHead( EMT.HEAD) then
local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..
EmtGetAxis('R2')..EmtGetAxis('R1')
EmtOutput( sOut)
else
EMT.NAIL_START_L1o = EMT.L1o
EMT.NAIL_START_L2o = EMT.L2o
EMT.NAIL_START_L3o = EMT.L3o
EMT.NAIL_START_L1 = EMT.L1
EMT.NAIL_START_L2 = EMT.L2
EMT.NAIL_START_L3 = EMT.L3
EMT.NAIL_END_L1 = EMT.L1
EMT.NAIL_END_L2 = EMT.L2
EMT.NAIL_END = EMT.IPLGLSTR
end
else
MyAdjustLinearAxes()
EmtAdjustRotaryAxes()
-- emissione movimento
if not IsNailingHead( EMT.HEAD) then
local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..
EmtGetAxis('R2')..EmtGetAxis('R1')
EmtOutput( sOut)
else
if EMT.L1 then EMT.NAIL_END_L1 = EMT.L1 end
if EMT.L2 then EMT.NAIL_END_L2 = EMT.L2 end
if EMT.L3 and EMT.L3 < EMT.NAIL_START_L3 then
EMT.NAIL_START_L3 = EMT.L3
end
end
end
-- se altrimenti risalita a Z max a fine lavorazione
elseif EMT.FLAG == 3 then
if not IsNailingHead( EMT.HEAD) then
if EMT.REFLOC then
EMT.REFLOC = nil
EMT.IPLGL = false
EmtResetPrev()
-- dichiarazione fine lavorazione
EmtOutput( 'G27')
EmtOutput( 'M6 T000000')
EmtOutput( 'M99')
EmtOutput( 'M117 P1='..tostring( EMT.CNT+1))
MyAdjustLinearAxes()
EmtAdjustRotaryAxes()
local sOut = 'M101' .. GetAxisParam( 'L3', 'P3=') .. GetAxisParam( 'R2', 'P4=') .. GetAxisParam( 'R1', 'P5=')
EmtOutput( sOut)
EMT.ZMAX = true
end
else
EMT.TO_ZMAX = true
end
-- se altrimenti movimento in Home
elseif EMT.FLAG == 4 then
-- non previsto
-- altrimenti errore
else
error( "Unknown Rapid flag")
end
-- aggiorno valori come precedenti
EmtUpdatePrev()
end
---------------------------------------------------------------------
function OnLinear()
-- se necessario, impostazione riferimento locale
if EMT.REFLOC == 0 then
-- calcolo per piano generico
CalcInterpPlane()
EMT.REFLOC = 1
-- salvo posizione attuale
local OldL1 = EMT.L1
local OldL2 = EMT.L2
local OldL3 = EMT.L3
local OldR1p = EMT.R1p
local OldR2p = EMT.R2p
-- imposto posizione precedente
EMT.L1 = EMT.L1o
EMT.L2 = EMT.L2o
EMT.L3 = EMT.L3o
EMT.R1p = nil
EMT.R2p = nil
-- trasformo i punti nel piano
MyAdjustLinearAxes()
EmtAdjustRotaryAxes()
if not IsNailingHead( EMT.HEAD) then
EmtOutput( 'G24'..EMT.IPLGLSTR)
end
-- emissione movimento
if not IsNailingHead( EMT.HEAD) then
local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..
EmtGetAxis('R2')..EmtGetAxis('R1')
EmtOutput( sOut)
EmtUpdatePrev()
EMT.Fp = nil
else
EMT.NAIL_START_L1o = EMT.L1o
EMT.NAIL_START_L2o = EMT.L2o
EMT.NAIL_START_L3o = EMT.L3o
EMT.NAIL_START_L1 = EMT.L1
EMT.NAIL_START_L2 = EMT.L2
EMT.NAIL_START_L3 = EMT.L3
EMT.NAIL_END_L1 = EMT.L1
EMT.NAIL_END_L2 = EMT.L2
EMT.NAIL_END = EMT.IPLGLSTR
end
-- ripristino posizione attuale
EMT.L1 = OldL1
EMT.L2 = OldL2
EMT.L3 = OldL3
EMT.R1p = OldR1p
EMT.R2p = OldR2p
end
-- aggiustamento valori
MyAdjustLinearAxes()
EmtAdjustRotaryAxes()
if not IsNailingHead( EMT.HEAD) then
-- se inizio lavorazione
if EMT.FEED_FIRST then
EmtOutput( 'M98')
EMT.FEED_FIRST = nil
end
-- valori degli assi
local sAxes = EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..
EmtGetAxis('R2')..EmtGetAxis('R1')
-- se nulla da emettere, esco
if #sAxes == 0 then
return
end
-- aggiungo feed
local sFeed = EmtGetFeed()
-- emetto linea
EmtOutput( "G1"..sAxes..sFeed)
-- eventuale gestione fondo foro
if EMT.FLAG == 101 and EMT.HEAD == 'H5' then
EmtOutput( 'M155')
end
else
if EMT.L1 then EMT.NAIL_END_L1 = EMT.L1 end
if EMT.L2 then EMT.NAIL_END_L2 = EMT.L2 end
if EMT.L3 and EMT.L3 < EMT.NAIL_START_L3 then
EMT.NAIL_START_L3 = EMT.L3
end
end
-- aggiorno valori come precedenti
EmtUpdatePrev()
end
---------------------------------------------------------------------
function OnArc()
-- non modale su archi
local dPrevZ = EMT.L3p
EmtResetPrevLinear()
-- aggiustamento valori
MyAdjustLinearAxes()
EmtAdjustRotaryAxes()
if not IsNailingHead( EMT.HEAD) then
-- valori degli assi
local sAxes = EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..
EmtGetAxis('R2')..EmtGetAxis('R1')
-- se nulla da emettere, esco
if #sAxes == 0 then
return
end
-- valori delle coordinate del centro
EmtAdjustCenterAxes()
-- coordinate centro (per ora solo archi nel piano XY)
--local sCen = ' ' .. EMT.C1t .. EmtLenToString(EMT.C1,3) ..
-- ' ' .. EMT.C2t .. EmtLenToString(EMT.C2,3)
-- raggio
local sRad = ' ' .. EMT.RRt .. EmtLenToString(EMT.RR,3)
-- aggiungo feed
local sFeed = EmtGetFeed()
-- tipo arco
local sArc = 'G' .. EgtNumToString(EMT.MOVE,0)
-- emetto arco
EmtOutput( sArc..sAxes..sRad..sFeed)
else
-- Archi non previsti con chiodature
EmtSetLastError( 1212, 'Arcs non allowed with nailing')
end
-- aggiorno valori come precedenti
EmtUpdatePrev()
end
---------------------------------------------------------------------
function MyAdjustLinearAxes()
local MyL1o = EMT.L1
local MyL2o = EMT.L2
local MyL3o = EMT.L3
if EMT.REFLOC then
local vtDelta = V_NULL()
local vtE = V_NULL()
if EMT.HEAD == 'H1' then
local Len = EMT.TLEN + MillOffs
local LenRef = MillOffs
local vtTool = EgtGetCalcToolDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
vtE = vtTool * Len - Z_AX() * LenRef
elseif EMT.HEAD == 'H2' then
local Len = EMT.TLEN + MillOffs - SawOffsZ
local LenRef = MillOffs
local vtTool = EgtGetCalcToolDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
vtE = vtTool * Len - Z_AX() * LenRef
elseif EMT.HEAD == 'H3' then
local Len = ( EMT.TDIST or ChSawLen) + MillOffs
local LenRef = MillOffs
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
vtE = vtAux * Len - Z_AX() * LenRef
elseif EMT.HEAD == 'H11' then
vtDelta = -Vector3d( Nail11DeltaX, Nail11DeltaY, Nail11DeltaZ)
vtE = Z_AX() * EMT.TLEN
elseif EMT.HEAD == 'H12' then
vtDelta = -Vector3d( Nail12DeltaX, Nail12DeltaY, Nail12DeltaZ)
vtE = Z_AX() * EMT.TLEN
end
EMT.L1 = EMT.L1 - vtDelta:getX() - vtE:getX()
EMT.L2 = EMT.L2 - vtDelta:getY() - vtE:getY()
EMT.L3 = EMT.L3 - vtDelta:getZ() - DeltaTabZ - vtE:getZ()
end
EmtAdjustLinearAxes()
EMT.L1o = MyL1o
EMT.L2o = MyL2o
EMT.L3o = MyL3o
if not EMT.REFLOC then
EMT.L1 = - EMT.L1
EMT.L1t = 'Y'
EMT.L2t = 'X'
else
EMT.L1t = 'X'
EMT.L2t = 'Y'
end
end
---------------------------------------------------------------------
function CalcInterpPlane()
-- origine del piano
local xS = EMT.START[1]
local yS = EMT.START[2]
local zS = 0
local ptS = Point3d( xS, yS, zS)
-- calcolo per piano generico
local vtE
if EMT.HEAD ~= 'H3' then
vtE = EgtGetCalcToolDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
else
vtE = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
end
EMT.IPLGLFR = Frame3d( ptS, vtE)
--EmtOutput( 'IPLGLFR='..tostring(EMT.IPLGLFR))
local vtX = EMT.IPLGLFR:getVersX()
local vtY = EMT.IPLGLFR:getVersY()
local vtZ = EMT.IPLGLFR:getVersZ()
-- A seconda del corner di riferimento scelto
local xOut = yS - DeltaTabY - DimTabY
local yOut = - ( xS - DeltaTabX)
local zOut = zS
if EMT.ORIG == 2 then
xOut = yS - DeltaTabY
yOut = - ( xS - DeltaTabX)
elseif EMT.ORIG == 3 then
xOut = yS - DeltaTabY - DimTabY
yOut = - ( xS - DeltaTabX - Orig3DeltaX)
elseif EMT.ORIG == 4 then
xOut = yS - DeltaTabY
yOut = - ( xS - DeltaTabX - Orig3DeltaX)
elseif EMT.ORIG == 11 then
xOut = yS - DeltaTabY - DimTabY
yOut = - ( xS - DeltaTabX - Orig5DeltaX)
elseif EMT.ORIG == 12 then
xOut = yS - DeltaTabY
yOut = - ( xS - DeltaTabX - Orig5DeltaX)
elseif EMT.ORIG == 13 then
xOut = yS - DeltaTabY - DimTabY
yOut = - ( xS - DeltaTabX - DimTabX)
elseif EMT.ORIG == 14 then
xOut = yS - DeltaTabY
yOut = - ( xS - DeltaTabX - DimTabX)
end
EMT.IPLGLSTR = ' X' .. EmtLenToString( xOut) ..' Y' .. EmtLenToString( yOut) .. ' Z' .. EmtLenToString( zOut)..
' A' .. EgtNumToString( vtX:getY(), 6) .. ' B' .. EgtNumToString( -vtX:getX(), 6) .. ' C' .. EgtNumToString( vtX:getZ(), 6) ..
' I' .. EgtNumToString( vtY:getY(), 6) .. ' J' .. EgtNumToString( -vtY:getX(), 6) .. ' K' .. EgtNumToString( vtY:getZ(), 6) ..
' P' .. EgtNumToString( vtZ:getY(), 6) .. ' Q' .. EgtNumToString( -vtZ:getX(), 6) .. ' R' .. EgtNumToString( vtZ:getZ(), 6)
EMT.IPLGL = true
end
---------------------------------------------------------------------
function AdjustTcPos( bLen3, sTcPos, dAxR3)
if not sTcPos then sTcPos = EMT.TCPOS end
local sPos = sTcPos:gsub( 'T', '')
if bLen3 then
if #sPos == 1 then
sPos = '00' .. sPos
elseif #sPos == 2 then
sPos = '0' .. sPos
end
end
if sPos == '101' then
if not dAxR3 then dAxR3 = EMT.R3 end
if abs( dAxR3 - 0) < 0.1 then
sPos = '101'
elseif abs( dAxR3 - 270) < 0.1 then
sPos = '102'
elseif abs( dAxR3 - 180) < 0.1 then
sPos = '103'
elseif abs( dAxR3 - 90) < 0.1 then
sPos = '104'
else
EmtSetLastError( 1210, 'Chain saw orientation not allowed')
end
end
return sPos
end
---------------------------------------------------------------------
function GetET()
if EMT.HEAD == 'H1' or EMT.HEAD == 'H3' then
return ' ET2'
elseif EMT.HEAD == 'H2' then
return ' ET1'
elseif EMT.HEAD == 'H5' then
return ' ET3'
end
end
---------------------------------------------------------------------
function GetEU()
local sEU
if EMT.HEAD == 'H1' then
sEU = ' EU'..string.sub( EMT.TCPOS, 2)
elseif EMT.HEAD == 'H2' then
sEU = ' EU0'
elseif EMT.HEAD == 'H3' then
if abs( EMT.R3 - 0) < 0.1 then
sEU = ' EU104'
elseif abs( EMT.R3 - 270) < 0.1 then
sEU = ' EU101'
elseif abs( EMT.R3 - 180) < 0.1 then
sEU = ' EU102'
elseif abs( EMT.R3 - 90) < 0.1 then
sEU = ' EU103'
else
EmtSetLastError( 1210, 'Chain saw orientation not allowed')
end
else
sEU = ''
end
return sEU
end
---------------------------------------------------------------------
function GetEE()
return ' EE' .. EgtNumToString( EMT.ORIG, 0)
end
---------------------------------------------------------------------
function GetEF()
return ' EF60000'
end
---------------------------------------------------------------------
function GetAxisParam( Ax, sPar)
if EMT[Ax] then
local nDec = EMT.DECNUM or 3
if not EMT.INCHES or (( Ax == 'R1' or Ax == 'R2' or Ax == 'R3' or Ax == 'R4')) then
return ' ' .. sPar .. EgtNumToString( EMT[Ax], nDec), true
else
return ' ' .. sPar .. EgtNumToString( EMT[Ax] / GEO.ONE_INCH, nDec + 1), true
end
end
return '', false
end
---------------------------------------------------------------------
function EmitCount( bJump)
EMT.CNT = EMT.CNT + 1
if bJump then
EmtOutput( 'N'..tostring( EMT.CNT)..' IF VGPL > '..tostring( EMT.CNT)..' GOTO N'..tostring( EMT.CNT+1))
else
EmtOutput( 'N'..tostring( EMT.CNT))
end
end
---------------------------------------------------------------------
function IsNailingHead( sHead)
return ( sHead == 'H11' or sHead == 'H12')
end
---------------------------------------------------------------------
function GetValNotes( sNotes, sKey, sType)
local vsChunk = EgtSplitString( sNotes or '', ';')
local dVal
for i = 1, #vsChunk do
local dTmp = EgtGetVal( vsChunk[i], sKey, sType)
if dTmp then dVal = dTmp end
end
return dVal
end
---------------------------------------------------------------------
-- *** END GENERATION ***
---------------------------------------------------------------------
+991
View File
@@ -0,0 +1,991 @@
-- Processore macchina Essetre-WALL by EgalTech s.r.l. 2023/06/27
-- Funzioni generiche indipendenti dal controllo
-- Intestazioni
require( 'EmtGenerator')
EgtEnableDebug( false)
---------------------------------------------------------------------
-- *** GENERATION ***
---------------------------------------------------------------------
local sBaseDir = EgtGetSourceDir()
if NumericalControl == 'NUM' then
error( 'Numerical Control error : NUM not yet managed')
elseif NumericalControl == 'TPA' then
dofile( sBaseDir .. 'Essetre-Wall_XS.TPA.mlpe')
else
error( 'Numerical Control error : unkwnown type')
end
---------------------------------------------------------------------
-- *** SIMULATION ***
---------------------------------------------------------------------
local COLL_SAFE_DIST = 2
---------------------------------------------------------------------
function OnSimulStart()
-- controllo versione programma
if not EMT.VER or EMT.VER < '2.5d1' then
EmtSetLastError( 1200, 'A newer version of the program is required (minimum EgtMachKernel 2.5d1)')
end
-- Carico gli utensili sulle barre portautensili
local vTcPos = EgtGetAllTcPosNames()
if vTcPos then
for i = 1, #vTcPos do
local vTools = EgtGetToolsInCurrSetupPos( vTcPos[i])
if vTools and vTools[1] then
EgtLoadTool( vTcPos[i], 1, vTools[1])
ShowToolInTcPos( vTcPos[i], true)
end
end
end
-- Se reset o home, esco
if EMT.SIM1ST then return end
-- Non effettuate lavorazioni con sega a catena sul fianco
EMT.CSAWFIRST = true
-- Non effettuata pausa per rimozione sfridi
EMT.SCRAPFIRST = true
-- Creo o svuoto gruppo per copia finale degli oggetti virtual milling
local nVmGrpId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill')
if nVmGrpId then
EgtSetStatus( nVmGrpId, GDB_ST.ON)
EgtEmptyGroup( nVmGrpId)
else
nVmGrpId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nVmGrpId, 'VMill')
EgtSetLevel( nVmGrpId, GDB_LV.TEMP)
end
-- Preparo lista oggetti da verificare per collisioni
EMT.COLLOBJ = {}
AddToCollisionCheck( 'B', 'COLLISION', EMT.COLLOBJ)
AddToCollisionCheck( 'C', 'COLLISION', EMT.COLLOBJ)
DumpCollisionCheck( EMT.COLLOBJ, 'Collision Objects :', 4)
-- Preparo lista solidi macchina con cui possono collidere gli oggetti sopra riportati (in aggiunta a VMill)
EMT.MCODET = {}
EMT.MCODET[1] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'STM')
-- Preparo lista collisioni vuota
EMT.COLLIDE = {}
end
---------------------------------------------------------------------
function OnSimulEnd()
if EMT.SCRAPFIRST then
EMT.SCRAPFIRST = false
ExecScrapRemove()
end
ExecUnloading()
end
---------------------------------------------------------------------
--function OnSimulDispositionStarting()
--end
---------------------------------------------------------------------
function OnSimulDispositionStart()
EMT.OPEISDISP = true
-- Se prima disposizione (dovrebbe essere l'unica)
if EMT.PHASE == 1 then
-- Determino dimensioni del grezzo
local nSolId = EgtGetFirstNameInGroup( EgtGetFirstRawPart() or GDB_ID.NULL, 'RawSolid') or GDB_ID.NULL
local b3Sol = EgtGetBBoxGlob( nSolId, GDB_BB.STANDARD)
EMT.LB = 0
EMT.SB = 0
EMT.HB = 0
if b3Sol then
EMT.LB = b3Sol:getDimX()
EMT.SB = b3Sol:getDimY()
EMT.HB = b3Sol:getDimZ()
end
-- Carico primo utensile sulla testa 1
local sTool = FindFirstToolOnHead( 'H1')
if sTool then
EMT.TOOL_1 = sTool
EgtLoadTool( 'H1', 1, EMT.TOOL_1)
EMT.TCPOS_1 = GetToolTcPos( EMT.TOOL_1)
ShowToolInTcPos( EMT.TCPOS_1, false)
else
EgtUnloadTool( 'H1', 1)
end
end
-- Nascondo tutte le lavorazioni
local nMchId = EgtGetFirstOperation()
while nMchId do
if EgtGetOperationType( nMchId) ~= MCH_OY.DISP then
EgtSetOperationStatus( nMchId, false)
end
nMchId = EgtGetNextOperation( nMchId)
end
-- dati del grezzo
local nRawId = EgtGetFirstRawPart()
local b3Raw = EgtGetRawPartBBox( nRawId or GDB_ID.NULL)
-- Se abilitato e trovato grezzo, creazione Zmap
if EgtGetInfo( EgtGetCurrMachGroup(), 'Vm', 'b') and nRawId then
-- Se vero inizio, creo Zmap
if not EMT.SIM1ST then
-- elimino eventuale vecchio Zmap
EgtErase( EgtGetFirstNameInGroup( nRawId, 'VMill') or GDB_ID.NULL)
-- recupero il solido
local nSolId = EgtGetFirstNameInGroup( nRawId, 'RawSolid')
-- determino la risoluzione dello Zmap
local b3Sol = EgtGetBBoxGlob( nSolId, GDB_BB.STANDARD)
local dArea = b3Sol:getDimX() * b3Sol:getDimY() + b3Sol:getDimX() * b3Sol:getDimZ() + b3Sol:getDimY() * b3Sol:getDimZ()
local dTol = 6.13
if dArea < CoeffVM * 6.0e6 then
dTol = 2.81
elseif dArea < CoeffVM * 12.0e6 then
dTol = 3.77
elseif dArea < CoeffVM * 24.0e6 then
dTol = 5.03
end
-- creo lo Zmap
EMT.VMILL = EgtVolZmapBox( nRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB)
if EMT.VMILL then
EgtSetName( EMT.VMILL, 'VMill')
EgtSetLevel( EMT.VMILL, GDB_LV.TEMP)
EgtSetColor( EMT.VMILL, EgtGetColor( nSolId), false)
-- nascondo le altre geometrie
local nId = EgtGetFirstInGroup( nRawId)
while nId do
if nId ~= EMT.VMILL then
EgtSetStatus( nId, GDB_ST.OFF)
end
nId = EgtGetNext( nId)
end
EgtSetStatus( EMT.SCRAP or GDB_ID.NULL, GDB_ST.OFF)
-- imposto eventuale utensile corrente
EmtSetToolForVmill( EMT.TOOL, EMT.HEAD, EMT.EXIT, EMT.VMILL)
end
end
end
-- se vero inizio, assegno solidi per verifica collisione
if not EMT.SIM1ST then
EMT.CODET = {}
for i = 1, #EMT.MCODET do
EMT.CODET[i] = EMT.MCODET[i]
end
if EMT.VMILL then
table.insert( EMT.CODET, EMT.VMILL)
end
end
end
---------------------------------------------------------------------
function OnSimulDispositionEnd()
if EMT.UNLOADING or EMT.FALL then
EMT.UNLOADING = false
EMT.FALL = false
end
EMT.OPEISDISP = false
end
---------------------------------------------------------------------
function OnSimulToolSelect()
-- se utensile non definito, è disposizione ed esco
if EMT.TOOL == '' then return end
-- recupero dati utensile
EMT.TOOLTYPE = EgtTdbGetCurrToolParam( MCH_TP.TYPE)
EMT.TOOLTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
-- se sega a catena, imposto subito angolo scelto per asse virtuale A
if EMT.HEAD == 'H3' then
-- recupero la lavorazione successiva
local NextMchId
if EMT.MCHID then
NextMchId = EgtGetNextActiveOperation( EMT.MCHID)
else
NextMchId = EgtGetFirstActiveOperation()
end
if EgtGetOperationType( NextMchId) == MCH_OY.DISP then
NextMchId = EgtGetNextActiveOperation( NextMchId)
end
EgtSetCurrMachining( NextMchId)
-- leggo e imposto il valore di A1
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
local dPosA = EgtGetVal( sVal, 'A1', 'd') or 0
EgtSetAxisPos( 'A1', dPosA)
EmtModifyAxisHome( 'A1', dPosA)
EgtSetAxisPos( 'C', 90)
end
-- breve pausa
EgtPause( 100)
EgtOutText( '')
if EMT.HEAD == 'H1' or EMT.HEAD == 'H2' or EMT.HEAD == 'H3' then
-- dichiaro utensile su testa 1
EMT.TOOL_1 = EMT.TOOL
EMT.TCPOS_1 = EMT.TCPOS
-- lo nascondo sul portautensili
ShowToolInTcPos( EMT.TCPOS, false)
end
-- se attivo Vmill
EmtSetToolForVmill( EMT.TOOL, EMT.HEAD, EMT.EXIT, EMT.VMILL)
-- se attivo Collision Check
EMT.SAFEDIST = COLL_SAFE_DIST
if EMT.COLLOBJ then
local nInd = EgtIf( EMT.HEAD ~= 'H2', 1001, 1011)
AddToolToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd)
AddToolHolderToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd + 1)
for i, Coll in ipairs( EMT.COLLOBJ) do
EmtAddCollisionObjEx( i, Coll.Fr, Coll.Ty, Coll.Mv, Coll.P1, Coll.P2, Coll.P3)
end
end
end
---------------------------------------------------------------------
function OnSimulToolDeselect()
-- Step di simulazione
local RapSimStep = 4 * EMT.SIMSTEP
local RapSimRotStep = RapSimStep / 10
local CollSimRotStep = min( RapSimRotStep, 5)
-- porto la testa in home
local dPosY = EgtGetAxisHomePos( 'Y')
if IsMobileTcPos( EMT.TCPOS) and IsMobileTcPos( EMT.NEXTTCPOS) then
dPosY = EgtGetAxisPos( 'Y')
end
SimulMoveAxes( 'X', EgtGetAxisHomePos( 'X'), RapSimStep, 'Y', dPosY, RapSimStep,'C', EgtGetAxisHomePos( 'C'), CollSimRotStep, 'B', EgtGetAxisHomePos( 'B'), CollSimRotStep)
-- se testa attuale è sega a catena devo depositarla
if EMT.HEAD == 'H3' then
ShowToolInTcPos( EMT.TCPOS_1, true)
EgtUnloadTool( 'H3', 1)
EMT.TOOL_1 = nil
EMT.TCPOS_1 = nil
end
-- deposito utensile
if EMT.NEXTTOOL ~= EMT.TOOL_1 then
EgtOutText( 'Tool change in progress...')
-- simulo movimento
SimulMoveAxes( 'B', 0, CollSimRotStep, 'C', 0, CollSimRotStep)
SimulMoveAxis( 'X', ( MinX + MaxX) / 2, RapSimStep)
-- breve pausa
EgtPause( 100)
if EMT.HEAD == 'H1' or EMT.HEAD == 'H2' or EMT.HEAD == 'H3' then
ShowToolInTcPos( EMT.TCPOS_1, true)
EgtUnloadTool( EMT.HEAD, EMT.EXIT)
EMT.TOOL_1 = nil
EMT.TCPOS_1 = nil
end
-- se segue sega a catena
if EMT.NEXTHEAD == 'H3' then
-- nascondo l'utensile corrente
EgtSetStatus( EgtGetHeadId( 'H1'), GDB_ST.OFF)
-- eseguo movimenti opportuni
SimulMoveAxis( 'X', ( MinX + MaxX) / 2, RapSimStep)
SimulMoveAxes( 'B', 0, CollSimRotStep, 'C', -90, CollSimRotStep)
end
end
end
---------------------------------------------------------------------
function OnSimulMachiningStart()
-- recupero alcuni dati della lavorazione
EMT.MCHNAME = EgtGetOperationName( EMT.MCHID)
EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE)
local sNotes = EgtGetMachiningParam( MCH_MP.USERNOTES)
EMT.VMRS = false
-- recupero CUTID e TASKID della feature lavorata
local vId = EgtGetMachiningGeometry()
if vId and #vId > 0 and #vId[1] > 0 then
local nPartId = EgtGetParent( EgtGetParent( vId[1][1]) or GDB_ID.NULL)
EMT.CUTID = EgtGetInfo( nPartId or GDB_ID.NULL, 'CUTID', 'i') or 0
EMT.TASKID = EgtGetInfo( vId[1][1], 'TASKID', 'i') or 0 ;
else
EMT.CUTID = 0
EMT.TASKID = 0
end
-- eventuale pausa per rimozione sfridi
if EMT.SCRAPFIRST then
if ( EMT.HEAD == 'H3' and string.sub( EMT.MCHNAME, 1, 5) == 'Csaw_') or EgtExistsInfo( EMT.MCHID, 'MOVE_AFTER') then
EMT.SCRAPFIRST = false
EgtOutText( 'Pause for Scrap Remove')
ParkForScrapRemove()
ExecScrapRemove()
EgtPause( 500)
EgtOutText( '')
end
end
-- non ancora iniziata la lavorazione
EMT.MCHFIRST = true
end
---------------------------------------------------------------------
function OnSimulMachiningEnd()
if EMT.UNLOADING or EMT.FALL then
EMT.UNLOADING = false
EMT.FALL = false
end
end
---------------------------------------------------------------------
--function OnSimulPathStart()
--end
---------------------------------------------------------------------
function OnSimulPathEnd()
-- se attivo VMILL, lavorazione ed è richiesto di eliminare gli sfridi
if EMT.VMILL and not EMT.OPEISDISP and EMT.VMRS then
EgtOutLog( 'OnSimulPathEnd', 5)
local nPart = EgtVolZmapPartCount( EMT.VMILL)
if nPart > 1 then
-- ricerca del pezzo con massimo volume
local nPartMax = 0
local dVolMax = 0
for i = 1, nPart do
local dVol = EgtVolZmapPartVolume( EMT.VMILL, i - 1)
if dVol > dVolMax then
dVolMax = dVol
nPartMax = i
end
end
-- eliminazione di tutti i pezzi piccoli
for i = nPart, 1, -1 do
if i ~= nPartMax then
local b3Vmill = EgtVolZmapGetPartBBoxGlob( EMT.VMILL, i - 1, GDB_BB.STANDARD)
if b3Vmill:getDimX() < 1200 then
EgtRemoveVolZmapPart( EMT.VMILL, i - 1)
end
end
end
-- aggiorno visualizzazione
EgtDraw()
end
end
end
---------------------------------------------------------------------
function OnSimulPathStartAux()
--EgtOutLog( 'OnSimulPathStartAux - ' .. EgtNumToString( EMT.AUXIND, 0) .. ' - ' .. EMT.AUX)
EgtOutLog( 'OnSimulPathStartAux', 5)
-- eseguo il comando
--ExecAuxCmd( EMT.AUX)
end
---------------------------------------------------------------------
function OnSimulPathEndAux()
--EgtOutLog( 'OnSimulPathEndAux - ' .. EgtNumToString( EMT.AUXIND, 0) .. ' - ' .. EMT.AUX)
EgtOutLog( 'OnSimulPathEndAux', 5)
-- eseguo il comando
--ExecAuxCmd( EMT.AUX)
end
---------------------------------------------------------------------
function OnSimulMoveStart()
end
---------------------------------------------------------------------
function OnSimulMoveEnd()
end
---------------------------------------------------------------------
function OnSimulCollision()
-- se prima collisione della lavorazione, la segnalo
if EMT.MCHNAME ~= EMT.LAST_MCHNAME_COLLIDE then
local Class = ''
if EMT.SIMCOBIND == 1001 or EMT.SIMCOBIND == 1011 then
Class = 'T_'..EMT.HEAD
elseif EMT.SIMCOBIND == 1002 or EMT.SIMCOBIND == 1012 then
Class = 'TH_'..EMT.HEAD
else
Class = EMT.COLLOBJ[EMT.SIMCOBIND].Cl
end
-- se foratura verticale ammetto discesa nel piano fino a 20 mm
if EMT.TOOLTYPE == MCH_TY.DRILL_STD and abs( EgtGetAxisPos( 'B')) < 0.1 then
local PosZ = EgtGetAxisPos( 'Z')
local DownZ = PosZ - EMT.TOOLTOTLEN - DeltaTabZ
if DownZ >= -20 then
EgtOutLog( 'Vertical drilling down table '..EgtNumToString( DownZ, 1), 1)
return
end
end
table.insert( EMT.COLLIDE, { Mc = EMT.MCHNAME, Cl = Class, Vm = EMT.SIMVMID})
EMT.LAST_MCHNAME_COLLIDE = EMT.MCHNAME
EMT.ERR = 11
local sErr = 'CUTID='..tostring( EMT.CUTID)..'; TASKID='..tostring( EMT.TASKID)..'; Mach='..EMT.MCHNAME..'; Class='..Class..'; VMill='..EMT.SIMVMID
EmtSetLastError( 1221, sErr, true)
EgtOutLog( 'Collision : ' .. sErr, 1)
end
end
---------------------------------------------------------------------
function ParkForScrapRemove()
-- Step di simulazione
local RapSimStep = 4 * EMT.SIMSTEP
-- Quota di parcheggio
local b3Raw = EgtGetRawPartBBox( EgtGetFirstRawPart() or GDB_ID.NULL)
local ParkY = min( -( b3Raw:getMin():getX() - 2000), -MinY)
--Eseguo
SimulMoveAxis( 'Z', EgtGetAxisHomePos( 'Z'), RapSimStep)
SimulMoveAxis( 'Y', ParkY, RapSimStep)
end
---------------------------------------------------------------------
function ExecScrapRemove()
-- Se non c'è virtual milling attivo, esco
if not EMT.VMILL then return end
-- Se non ci sono almeno due parti nel virtual milling, esco
local nVmPart = EgtVolZmapPartCount( EMT.VMILL)
if nVmPart < 2 then return end
-- Recupero box e area dei pezzi
local vPart = {}
local nPartId = EgtGetFirstPartInRawPart( EgtGetFirstRawPart() or GDB_ID.NULL)
while nPartId do
-- box e area
local b3Part = EgtGetBBoxGlob( EgtGetFirstNameInGroup( nPartId, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD)
local dPartArea = b3Part:getDimX() * b3Part:getDimY()
-- box espanso
local b3PartExp = BBox3d( b3Part)
b3PartExp:Add( b3PartExp:getMin() - Vector3d( 10, 10, 0))
b3PartExp:Add( b3PartExp:getMax() + Vector3d( 10, 10, 0))
-- salvo i dati
table.insert( vPart, { Box = b3Part, BoxExp = b3PartExp, Area = dPartArea})
-- passo al successivo
nPartId = EgtGetNextPartInRawPart( nPartId)
end
-- Recupero box e area delle parti di Vmill
local vVmPart = {}
for i = 1, nVmPart do
-- recupero il box e calcolo l'area della parte come Vmill
local b3VmPart = EgtVolZmapGetPartBBoxGlob( EMT.VMILL, i - 1, GDB_BB.STANDARD)
local dVmPartArea = EgtVolZmapPartVolume( EMT.VMILL, i - 1) / b3VmPart:getDimZ()
-- box espanso
local b3VmPartExp = BBox3d( b3VmPart)
b3VmPartExp:Add( b3VmPart:getMin() - Vector3d( 100, 100, 0))
b3VmPartExp:Add( b3VmPart:getMax() + Vector3d( 100, 100, 0))
-- salvo i dati
table.insert( vVmPart, { Box = b3VmPart, BoxExp = b3VmPartExp, Area = dVmPartArea})
end
-- Tengo solo le parti del Vmill che contengono almeno un box di un pezzo o che interferiscono e sono abbastanza grandi
local nValidCnt = 0
for i = #vVmPart, 1, -1 do
-- verifiche per parte da eliminare
local bToRemove = true
-- se area abbastanza grande, allora da verificare
if vVmPart[i].Area > 1e4 then
-- verifico se sono sicuramente valide (i due box si equivalgono entro la tolleranza)
for j = 1, #vPart do
if EnclosesXY( vVmPart[i].BoxExp, vPart[j].Box) and EnclosesXY( vPart[j].BoxExp, vVmPart[i].Box) then
bToRemove = false
vVmPart[i].Part = j
nValidCnt = nValidCnt + 1
break
end
end
-- verifico se sono molto probabilmente valide
for j = 1, #vPart do
if bToRemove and ( OverlapsXY( vVmPart[i].Box, vPart[j].Box) and vVmPart[i].Area > 0.25 * vPart[j].Area) then
bToRemove = false
break
end
end
end
-- se richiesta eliminazione, la eseguo
if bToRemove then
EgtRemoveVolZmapPart( EMT.VMILL, i - 1)
table.remove( vVmPart, i)
end
end
-- Se il numero delle parti non supera il numero dei pezzi, ho finito
if #vVmPart <= #vPart then
return
end
-- Se il numero delle parti sicuramente valide uguaglia il numero dei pezzi, elimino le altre ed ho finito
if nValidCnt == #vPart then
for i = #vVmPart, 1, -1 do
if not vVmPart[i].Part then
EgtRemoveVolZmapPart( EMT.VMILL, i - 1)
table.remove( vVmPart, i)
end
end
return
end
-- Calcolo punti interni alle parti di Vmill non sicuramente valide
for i = 1, #vVmPart do
if not vVmPart[i].Part then
local ptP = vVmPart[i].Box:getCenter() - Y_AX() * vVmPart[i].Box:getDimY()
local bOk, vIntType, vIntDist = EgtLineVolZmapInters( ptP, Y_AX(), EMT.VMILL, GDB_RT.GLOB)
if bOk then
for j = 1, #vIntType do
-- se la corrente entra ed esiste la successiva che esce
if vIntType[j] == 1 and j + 1 <= #vIntType and vIntType[j + 1] == 2 then
local ptC = ptP + Y_AX() * (( vIntDist[j] + vIntDist[j + 1]) / 2)
local nPart = EgtVolZmapGetPartMinDist( EMT.VMILL, ptC, GDB_RT.GLOB)
if nPart == i - 1 then
vVmPart[i].Cen = ptC
break
end
end
end
end
end
end
-- Verifico le parti di Vmill non già dichiarate valide
for i = #vVmPart, 1, -1 do
if not vVmPart[i].Part and vVmPart[i].Cen then
local bToRemove = true
for j = 1, #vPart do
if EnclosesPointXY( vPart[j].Box, vVmPart[i].Cen) then
bToRemove = false
break
end
end
for j = 1, #vVmPart do
if j ~= i then
local vExpBox = BBox3d( vVmPart[j].Box)
-- lo espando in XY per sicurezza
vExpBox:Add( vExpBox:getMin() - Vector3d( 100, 100, 0))
vExpBox:Add( vExpBox:getMax() + Vector3d( 100, 100, 0))
-- verifico contenimento
if EnclosesXY( vExpBox, vVmPart[i].Box) then
bToRemove = true
break
end
end
end
-- se richiesta eliminazione, la eseguo
if bToRemove then
EgtRemoveVolZmapPart( EMT.VMILL, i - 1)
table.remove( vVmPart, i)
end
end
end
end
---------------------------------------------------------------------
function ExecUnloading()
if EMT.VMILL then
-- gruppo dei Vmill
local nVmGrpId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill')
-- creo un nuovo layer e vi inserisco il nuovo pezzo
local nLayId = EgtGroup( nVmGrpId, EgtGetGlobFrame( EMT.VMILL))
EgtRelocate( EMT.VMILL, nLayId)
EgtSetLevel( EMT.VMILL, GDB_LV.USER)
-- aggiungo gli spigoli
local nFirstId, nCount = EgtVolZmapGetEdges( EMT.VMILL, nLayId)
if nFirstId then
for nId = nFirstId, nFirstId + nCount - 1 do
EgtSetColor( nId, Color3d( 96, 96, 96))
end
end
-- rilascio Vmill
EMT.VMILL = nil
-- aggiorno la visualizzazione
EgtDraw()
-- se finito
if EMT.PHASE == EgtGetPhaseCount() then
-- se impostato di salvare i Vmill, lo faccio
local sMachIni = EgtGetCurrMachineDir() .. '\\' .. EgtGetCurrMachineName() .. '.ini'
if EgtGetStringFromIni( 'VMill', 'Save', '', sMachIni) == '1' then
local sFile = EgtGetCurrFilePath()
if sFile then
local sDir, sName, sExt = EgtSplitPath( sFile)
if sExt and sExt:lower() == ".nge" then
sName = sName .. '_VM_' .. EgtGetMachGroupName( EgtGetCurrMachGroup())
EgtSetLevel( nVmGrpId, GDB_LV.USER)
EgtSaveObjToFile( nVmGrpId, sDir .. sName .. '.Nge')
EgtSetLevel( nVmGrpId, GDB_LV.TEMP)
end
end
end
end
end
end
---------------------------------------------------------------------
function ShowToolInTcPos( sTcPos, bShow)
-- recupero il gruppo dell'utensile
local TcExitId = EgtGetFirstNameInGroup( EgtGetTcPosId( sTcPos or '') or GDB_ID.NULL, 'T1')
if not TcExitId then return end
-- imposto lo stato di visualizzazione
EgtSetStatus( TcExitId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF))
end
---------------------------------------------------------------------
function GetToolTcPos( sTool)
-- salvo stato iniziale
local CurrTool = EgtTdbGetCurrToolParam( MCH_TP.NAME)
-- recupero la posizione di cambio utensile dell'utensile indicato
local sTcPos
if EgtTdbSetCurrTool( sTool) then
sTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS)
end
-- ripristino stato iniziale
if CurrTool then
EgtTdbSetCurrTool( CurrTool)
else
EgtTdbSetCurrTool( '')
end
-- restituisco risultato
return sTcPos
end
---------------------------------------------------------------------
-- *** ESTIMATION T&L ***
---------------------------------------------------------------------
local RAPID_X_FEED = 75000 -- mm/min
local RAPID_Y_FEED = 100000 -- mm/min
local RAPID_Z_FEED = 50000 -- mm/min
local RAPID_C_FEED = 15000 -- deg/min
local RAPID_B_FEED = 15000 -- deg/min
local RAPID_MIN_T = 0.1 -- s
local LOAD_T = 2 -- s
local CHAR_ONE_MOVE_T = 1 -- s
local ROTATION_T = 40 -- s
local SPLIT_T = 6 -- s
local UNLOAD_T = 4 -- s
local FALL_T = 2 -- s
---------------------------------------------------------------------
function OnEstimStart()
EMT.INCHES = not EgtUiUnitsAreMM() -- unità di misura mm/inches
end
---------------------------------------------------------------------
function OnEstimEnd()
end
---------------------------------------------------------------------
function OnEstimProgramStart()
-- imposto inizio movimenti da Home
EMT.L1 = EgtGetAxisHomePos( 'Y')
EMT.L2 = EgtGetAxisHomePos( 'X')
EMT.L3 = EgtGetAxisHomePos( 'Z')
EMT.R1 = EgtGetAxisHomePos( 'C')
EMT.R2 = EgtGetAxisHomePos( 'B')
-- aggiorno valori come precedenti
EmtUpdatePrev()
-- totalizzatori tempi e lunghezze
EMT.TOTCUTLEN = 0
EMT.TOTCUTTIME = 0
EMT.TOTEXTLEN = 0
EMT.TOTEXTTIME = 0
-- variabile per lunghezza taglio utensili
EMT.TOOLCUTLEN = {}
-- intestazioni
EmtTleStart( EMT.INFO)
end
---------------------------------------------------------------------
function OnEstimProgramEnd()
-- stampa dei totali delle lavorazioni
EmtTleAddTotal( EmtSecToHMS( EMT.TOTCUTTIME + EMT.TOTEXTTIME), EmtLenToMF( EMT.TOTCUTLEN))
-- stampa dei totali degli utensili
for i = 1, #EMT.TOOLCUTLEN do
local TCL = EMT.TOOLCUTLEN[i]
EmtTleAddTool( TCL.Name, EmtLenToMF( TCL.Len))
end
-- completo il file
local _, _, sExt = EgtSplitPath( EMT.FILE)
EmtTleEnd( sExt:sub( 2))
-- salvo i dati principali nel progetto
EgtSetInfo( EgtGetCurrMachGroup(), 'Ttot', EgtNumToString( EMT.TOTCUTTIME + EMT.TOTEXTTIME, 0))
EgtSetInfo( EgtGetCurrMachGroup(), 'Ltot', EgtNumToString( EMT.TOTCUTLEN, 0))
end
---------------------------------------------------------------------
function OnEstimDispositionStart()
-- inizio disposizione
EMT.OPEISDISP = true
-- sulla prima fase dichiaro carico barra
if EMT.PHASE == 1 then
EMT.LOAD = true
else
EMT.LOAD = false
end
end
---------------------------------------------------------------------
function OnEstimDispositionEnd()
-- emetto dati in sospeso
if EMT.TLE_NAME then
EmtTleAddMachining( EMT.TLE_NAME, EmtSecToHMS( EMT.TLE_TIME), ' - ', ' - ')
EMT.TLE_NAME = nil
EMT.TLE_TIME = nil
end
-- termine disposizione
EMT.OPEISDISP = false
end
---------------------------------------------------------------------
function OnEstimToolSelect()
-- reset indice utensile in tabella lunghezze
EMT.TCLIND = 0
-- verifico che l'utensile sia definito
if #EMT.TOOL == 0 then return end
-- cerco l'utensile nella tabella
for i = 1, #EMT.TOOLCUTLEN do
if EMT.TOOLCUTLEN[i].Name == EMT.TOOL then
EMT.TCLIND = i
break
end
end
-- se non trovato, lo aggiungo
if EMT.TCLIND == 0 then
table.insert( EMT.TOOLCUTLEN, { Name = EMT.TOOL, Len = 0})
EMT.TCLIND = #EMT.TOOLCUTLEN
end
end
---------------------------------------------------------------------
function OnEstimToolDeselect()
end
---------------------------------------------------------------------
function OnEstimMachiningStart()
EMT.MCHNAME = EgtGetOperationName( EMT.MCHID)
EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE)
EgtOutLog( 'Mach : ' .. EMT.MCHNAME, 5)
-- reset contatori di lavorazione
EMT.MCHCUTLEN = 0
EMT.MCHCUTTIME = 0
EMT.MCHEXTLEN = 0
EMT.MCHEXTTIME = 0
end
---------------------------------------------------------------------
function OnEstimMachiningEnd()
-- nel caso di foratura devo dimezzare la lunghezza di taglio perchè comprende anche l'uscita
if EMT.MCHTYPE == MCH_MY.DRILLING then
EMT.MCHCUTLEN = EMT.MCHCUTLEN / 2
end
local sName = EgtGetName( EMT.MCHID)
EmtTleAddMachining( sName, EmtSecToHMS( EMT.MCHCUTTIME + EMT.MCHEXTTIME), EmtLenToMF( EMT.MCHCUTLEN), EMT.TOOL)
-- aggiorno totali e utensili
EMT.TOTCUTLEN = EMT.TOTCUTLEN + EMT.MCHCUTLEN
EMT.TOTCUTTIME = EMT.TOTCUTTIME + EMT.MCHCUTTIME
EMT.TOTEXTLEN = EMT.TOTEXTLEN + EMT.MCHEXTLEN
EMT.TOTEXTTIME = EMT.TOTEXTTIME + EMT.MCHEXTTIME
EMT.TOOLCUTLEN[EMT.TCLIND].Len = EMT.TOOLCUTLEN[EMT.TCLIND].Len + EMT.MCHCUTLEN
-- emetto dati in sospeso
if EMT.TLE_NAME then
EmtTleAddMachining( EMT.TLE_NAME, EmtSecToHMS( EMT.TLE_TIME), ' - ', ' - ')
EMT.TLE_NAME = nil
EMT.TLE_TIME = nil
end
end
---------------------------------------------------------------------
function OnEstimPathStart()
EMT.AUXTYPE = nil
EMT.MCHMOVEFIRST = true
end
---------------------------------------------------------------------
function OnEstimPathEnd()
EMT.AUXTYPE = nil
end
---------------------------------------------------------------------
function OnEstimPathStartAux()
-- se richiesto, preparo il carico barra
if EMT.LOAD then
if EMT.AUXIND == EMT.AUXTOT then
local dTime = LOAD_T
EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime
EmtTleAddMachining( 'Loading', EmtSecToHMS( dTime), ' - ', ' - ')
EMT.LOAD = false
end
-- se altrimenti carico dopo rotazione
elseif EMT.POSTROT then
if EMT.AUXIND == EMT.AUXTOT then
local dTime = ROTATION_T
EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime
EmtTleAddMachining( 'Rotation', EmtSecToHMS( dTime), ' - ', ' - ')
EMT.POSTROT = false
end
-- altrimenti, spostamento carrelli
else
if EMT.AUXTOT > 2 and EMT.AUXIND == EMT.AUXTOT then
local dTime = ( EMT.AUXTOT - 2) * CHAR_ONE_MOVE_T
EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime
EmtTleAddMachining( 'Charriots move', EmtSecToHMS( dTime), ' - ', ' - ')
end
end
end
---------------------------------------------------------------------
function OnEstimPathEndAux()
-- verifico tipo di emissione
if EMT.OPEISDISP then
if not EMT.AUXTYPE then
local Cmd = EgtSplitString( EMT.AUX)
if Cmd[1] == '0' and Cmd[2] == 'Unloading' then
EMT.AUXTYPE = 'U'
else
EMT.AUXTYPE = 'R'
end
end
else
if not EMT.AUXTYPE then
local Cmd = EgtSplitString( EMT.AUX)
if Cmd[1] == '0' and Cmd[2] == 'Split' then
EMT.AUXTYPE = 'S'
elseif Cmd[1] == '0' and Cmd[2] == 'Unloading' then
EMT.AUXTYPE = 'U'
elseif Cmd[1] == '0' and Cmd[2] == 'Fall' then
EMT.AUXTYPE = 'F'
else
EMT.AUXTYPE = 'P'
end
end
end
-- per lo scarico della rimanenza
if EMT.AUXTYPE == 'R' then
if EMT.AUXIND == EMT.AUXTOT then
local dTime = LOAD_T + UNLOAD_T
EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime
EMT.TLE_NAME = 'Remnant unloading'
EMT.TLE_TIME = dTime
end
-- per lo split
elseif EMT.AUXTYPE == 'S' then
if EMT.AUXIND == EMT.AUXTOT then
local dTime = SPLIT_T
EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime
EMT.TLE_NAME = 'Splitting'
EMT.TLE_TIME = dTime
end
-- per lo scarico
elseif EMT.AUXTYPE == 'U' then
if EMT.AUXIND == EMT.AUXTOT then
local dTime = UNLOAD_T
EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime
EMT.TLE_NAME = 'Unloading'
EMT.TLE_TIME = dTime
end
-- per lo scarico a caduta
elseif EMT.AUXTYPE == 'F' then
if EMT.AUXIND == EMT.AUXTOT then
local dTime = FALL_T
EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime
EMT.TLE_NAME = 'Fall'
EMT.TLE_TIME = dTime
end
-- per la pre-rotazione
elseif EMT.AUXTYPE == 'P' then
; -- calcolato come parte della rotazione
end
end
---------------------------------------------------------------------
function OnEstimRapid()
-- dati movimento
local dL1 = EMT.L1 - ( EMT.L1p or 0)
local dL2 = EMT.L2 - ( EMT.L2p or 0)
local dL3 = EMT.L3 - ( EMT.L3p or 0)
local dR1 = 0
if EMT.R1 and EMT.R1p then dR1 = EMT.R1 - EMT.R1p end
local dR2 = 0
if EMT.R2 and EMT.R2p then dR2 = EMT.R2 - EMT.R2p end
-- se primo posizionamento della lavorazione il movimento di L1 è già conteggiato in quello dei carrelli
if EMT.MCHMOVEFIRST then
EMT.MCHMOVEFIRST = false
dL1 = 0
end
-- calcolo lunghezza
local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3)
EMT.MCHEXTLEN = EMT.MCHEXTLEN + dLen
-- calcolo tempo
local dTime = RAPID_MIN_T
local dT1 = abs( dL1) / RAPID_X_FEED * 60
if dT1 > dTime then dTime = dT1 end
local dT2 = abs( dL2) / RAPID_Y_FEED * 60
if dT2 > dTime then dTime = dT2 end
local dT3 = abs( dL3) / RAPID_Z_FEED * 60
if dT3 > dTime then dTime = dT3 end
local dT4 = abs( dR1) / RAPID_C_FEED * 60
if dT4 > dTime then dTime = dT4 end
local dT5 = abs( dR2) / RAPID_B_FEED * 60
if dT5 > dTime then dTime = dT5 end
EMT.MCHEXTTIME = EMT.MCHEXTTIME + dTime
EgtOutLog( string.format( ' G0 Len=%.0f Rot=%.0f° Time=%.2f', dLen, abs( dR1) + abs( dR2), dTime), 5)
-- aggiorno valori come precedenti
EmtUpdatePrev()
end
---------------------------------------------------------------------
function OnEstimLinear()
-- dati movimento
local dL1 = EMT.L1 - EMT.L1p
local dL2 = EMT.L2 - EMT.L2p
local dL3 = EMT.L3 - EMT.L3p
-- calcolo lunghezza
local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3)
EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen
-- calcolo tempo
local dTime = dLen / EMT.F * 60
EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime
EgtOutLog( string.format( ' G1 Len=%.0f Time=%.2f', dLen, dTime), 5)
-- aggiorno valori come precedenti
EmtUpdatePrev()
end
---------------------------------------------------------------------
function OnEstimArc()
-- dati movimento
local dLxy = EMT.RR * abs( EMT.AC) * pi / 180
local dLz = abs( ( Point3d( EMT.L1, EMT.L2, EMT.L3) - Point3d( EMT.L1p, EMT.L2p, EMT.L3p)) * Vector3d( EMT.EXTR))
-- calcolo lunghezza
local dLen = sqrt( dLxy * dLxy + dLz * dLz)
EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen
-- calcolo tempo
local dTime = dLen / EMT.F * 60
EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime
EgtOutLog( string.format( ' G2 Len=%.0f Time=%.2f', dLen, dTime), 5)
-- aggiorno valori come precedenti
EmtUpdatePrev()
end
---------------------------------------------------------------------
-- *** GENERAL ***
---------------------------------------------------------------------
function FindFirstToolOnHead( sH1)
-- salvo stato iniziale
local CurrMachId = EgtGetCurrMachining()
local CurrTool = EgtTdbGetCurrToolParam( MCH_TP.NAME)
-- cerco lavorazione con utensile su testa indicata
local sTool, nTlen
local OpId = EgtGetFirstActiveOperation()
while OpId do
local nType = EgtGetOperationType( OpId)
if nType ~= MCH_OY.NONE and nType ~= MCH_OY.DISP then
if EgtSetCurrMachining( OpId) then
local sTest = EgtGetMachiningParam( MCH_MP.TOOL)
if EgtTdbSetCurrTool( sTest) then
local sHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
if sHead and ( sHead == sH1) then
sTool = sTest
nTlen = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
break
end
end
end
end
OpId = EgtGetNextActiveOperation( OpId)
end
-- ripristino stato iniziale
if CurrMachId then
EgtSetCurrMachining( CurrMachId)
else
EgtResetCurrMachining()
end
if CurrTool then
EgtTdbSetCurrTool( CurrTool)
else
EgtTdbSetCurrTool( '')
end
-- restituisco risultato
return sTool, nTlen
end
---------------------------------------------------------------------
function IsMobileTcPos( sTcPos)
return ( sTcPos == 'T9' or sTcPos == 'T10' or sTcPos == 'T11' or sTcPos == 'T12')
end
---------------------------------------------------------------------
-- *** END GENERAL ***
---------------------------------------------------------------------
+11
View File
@@ -0,0 +1,11 @@
-- Special Operations macchina Essetre-WALL by EgalTech s.r.l. 2020/11/16
-- Intestazioni
require( 'EmtGenerator')
EgtEnableDebug( false)
EgtOutLog ( '** Essetre-WALL.mlse '..PP_VER..' **', 1)
---------------------------------------------------------------------
--function OnSpecialMoveZup()
--end
+58
View File
@@ -0,0 +1,58 @@
; Commento per evitare BOM con UTF-8
[General]
Material=Beam
[Tools]
Drillbit=1
Sawblade=1
Mill=1
Mortise=1
Chisel=0
DrillMaker=MakeWoodDrill.lua
SawbladeMaker=MakeSawblade.lua
MillMaker=MakeWoodCylMill.lua
MortiseMaker=MakeMortise.lua
ChiselMaker=MakeChisel.lua
Active=1
[ToolHolder]
H1.1=Standard.nge
H1.1:MILL_NOTIP=MillNoTip.nge
H2.1=Saw.nge
H3.1=ChainSaw.nge
[Machinings]
Drilling=1
Sawing=1
Milling=1
Pocketing=1
Mortising=1
Chiseling=0
SawRoughing=0
SawFinishing=0
[Machining]
InitScript=InitMach.lua
ExitScript=ExitMach.lua
[Disposition]
;InitScript=InitDisp.lua
[Heads]
; 5 axis head
H1=6608
; 5 axis saw
H2=6615
; Chainsaw
H3=6616
[SetUp]
Default=Standard
[Estimations]
Enable=1
WinPlace=0,514,138,628,810
[VMill]
Enable=1
Save=0
+431
View File
@@ -0,0 +1,431 @@
-- Descrizione macchina Essetre-WallXS0014 by EgalTech s.r.l. 2023/06/29
-- Macchina Wall.
-- 2023/06/27 v.2.5f1 DS Prima versione partende da WallXS standard.
require( 'EmtGenerator')
EgtEnableDebug( false)
PP_VER = '2.5f3'
-- Parametri macchina
NumericalControl = 'TPA' -- NUM o TPA
MinY = 0.0
MaxY = 22000.0
MinX = -3900.0
MaxX = 45.0
MinZ = -900.0
MaxZ = 0.0
MinB = -120.0
MaxB = 120.0
MinC = -360.0
MaxC = 360.0
MillOffs = 92.5
ChainSaw = 0
SawOffsX = 0.0
SawOffsY = 111.0
SawOffsZ = -150.0
ChSawLen = 90.0
Nail11 = 1
Nail11DeltaX = 330.0
Nail11DeltaY = 272.6
Nail11DeltaZ = -76.5
Nail12 = 1
Nail12DeltaX = 330.0
Nail12DeltaY = -272.6
Nail12DeltaZ = -76.5
Orig2DeltaX = 0
Orig2DeltaY = -3500
Orig2DeltaZ = 0
Orig3DeltaX = 9000
Orig3DeltaY = 0
Orig3DeltaZ = 0
Orig4DeltaX = 9000
Orig4DeltaY = -3500
Orig4DeltaZ = 0
Orig5DeltaX = 11640
Orig5DeltaY = 0
Orig5DeltaZ = 0
Orig6DeltaX = 11640
Orig6DeltaY = -3500
Orig6DeltaZ = 0
Orig7DeltaX = 20640
Orig7DeltaY = 0
Orig7DeltaZ = 0
Orig8DeltaX = 20640
Orig8DeltaY = -3500
Orig8DeltaZ = 0
DimTabX = 20640.0
DimTabY = 3500.0
DeltaTabX = 970.0
DeltaTabY = -3690.0
DeltaTabZ = -606.0 + MillOffs -- -513.5
CoeffVM = 0.75
-- Aggiornamento con dati da TechnoEssetre7
local sTs3Data = EgtGetStringFromIni( 'Wall', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-Wall_XS0014.data"
local sData = EgtGetSourceDir().."\\Wall\\Ts3Data.lua"
if EgtExistsFile( sTs3Data) then
EgtCopyFile( sTs3Data, sData)
local sTs3DataOld = sTs3Data..'.old'
EgtEraseFile( sTs3DataOld)
EgtRenameFile( sTs3Data, sTs3DataOld)
end
if EgtExistsFile( sData) then
local Machine = dofile( sData)
if Machine and Machine.Offsets then
local MchOffs = Machine.Offsets
NumericalControl = EgtIf( MchOffs.TIPO_CN ~= 1, 'NUM', 'TPA')
if MchOffs.MAX_Y then MinY = -MchOffs.MAX_Y end
if MchOffs.MIN_Y then MaxY = -MchOffs.MIN_Y end
MinX = MchOffs.MIN_X or MinX
MaxX = MchOffs.MAX_X or MaxX
MinZ = MchOffs.MIN_Z or MinZ
MaxZ = MchOffs.MAX_Z or MaxZ
MinB = MchOffs.MIN_B or MinB
MaxB = MchOffs.MAX_B or MaxB
MinC = MchOffs.MIN_C or MinC
MaxC = MchOffs.MAX_C or MaxC
MillOffs = MchOffs.PIVOT or MillOffs
if MchOffs.ZERO_Y then DeltaTabX = -MchOffs.ZERO_Y end
if MchOffs.ZERO_X then DeltaTabY = MchOffs.ZERO_X - DimTabY end
if MchOffs.ZERO_Z then DeltaTabZ = MchOffs.ZERO_Z + MillOffs end
ChainSaw = ( MchOffs.CHAIN_SAW or 0)
Nail11 = ( MchOffs.NAIL11 or 0)
if Nail11 ~= 0 and MchOffs.ZERO_Y and MchOffs.ZERO_NAIL11_Y then Nail11DeltaX = - ( MchOffs.ZERO_Y - MchOffs.ZERO_NAIL11_Y) end
if Nail11 ~= 0 and MchOffs.ZERO_X and MchOffs.ZERO_NAIL11_X then Nail11DeltaY = ( MchOffs.ZERO_X - MchOffs.ZERO_NAIL11_X) end
if Nail11 ~= 0 and MchOffs.ZERO_Z and MchOffs.ZERO_NAIL11_Z then Nail11DeltaZ = ( MchOffs.ZERO_Z + MillOffs - MchOffs.ZERO_NAIL11_Z) end
Nail12 = ( MchOffs.NAIL12 or 0)
if Nail12 ~= 0 and MchOffs.ZERO_Y and MchOffs.ZERO_NAIL12_Y then Nail12DeltaX = - ( MchOffs.ZERO_Y - MchOffs.ZERO_NAIL12_Y) end
if Nail12 ~= 0 and MchOffs.ZERO_X and MchOffs.ZERO_NAIL12_X then Nail12DeltaY = ( MchOffs.ZERO_X - MchOffs.ZERO_NAIL12_X) end
if Nail12 ~= 0 and MchOffs.ZERO_Z and MchOffs.ZERO_NAIL12_Z then Nail12DeltaZ = ( MchOffs.ZERO_Z + MillOffs - MchOffs.ZERO_NAIL12_Z) end
if MchOffs.OFFSET_ZERO3_Y then Orig3DeltaX = -MchOffs.OFFSET_ZERO3_Y end
if MchOffs.OFFSET_ZERO3_X then Orig3DeltaY = MchOffs.OFFSET_ZERO3_X end
if MchOffs.OFFSET_ZERO3_Z then Orig3DeltaZ = MchOffs.OFFSET_ZERO3_Z end
if MchOffs.OFFSET_ZERO4_Y then Orig4DeltaX = -MchOffs.OFFSET_ZERO4_Y end
if MchOffs.OFFSET_ZERO4_X then Orig4DeltaY = MchOffs.OFFSET_ZERO4_X end
if MchOffs.OFFSET_ZERO4_Z then Orig4DeltaZ = MchOffs.OFFSET_ZERO4_Z end
if MchOffs.OFFSET_ZERO11_Y then Orig5DeltaX = -MchOffs.OFFSET_ZERO11_Y end
if MchOffs.OFFSET_ZERO11_X then Orig5DeltaY = MchOffs.OFFSET_ZERO11_X end
if MchOffs.OFFSET_ZERO11_Z then Orig5DeltaZ = MchOffs.OFFSET_ZERO11_Z end
if MchOffs.OFFSET_ZERO12_Y then Orig6DeltaX = -MchOffs.OFFSET_ZERO12_Y end
if MchOffs.OFFSET_ZERO12_X then Orig6DeltaY = MchOffs.OFFSET_ZERO12_X end
if MchOffs.OFFSET_ZERO12_Z then Orig6DeltaZ = MchOffs.OFFSET_ZERO12_Z end
if MchOffs.OFFSET_ZERO13_Y then Orig7DeltaX = -MchOffs.OFFSET_ZERO13_Y end
if MchOffs.OFFSET_ZERO13_X then Orig7DeltaY = MchOffs.OFFSET_ZERO13_X end
if MchOffs.OFFSET_ZERO13_Z then Orig7DeltaZ = MchOffs.OFFSET_ZERO13_Z end
if MchOffs.OFFSET_ZERO14_Y then Orig8DeltaX = -MchOffs.OFFSET_ZERO14_Y end
if MchOffs.OFFSET_ZERO14_X then Orig8DeltaY = MchOffs.OFFSET_ZERO14_X end
if MchOffs.OFFSET_ZERO14_Z then Orig8DeltaZ = MchOffs.OFFSET_ZERO14_Z end
end
end
-- Spostamenti delle chiodatrici rispetto al disegno
local Nail11OffsX = Nail11DeltaX - 330.0
local Nail11OffsY = Nail11DeltaY - 272.6
local Nail11OffsZ = Nail11DeltaZ + 76.5
local Nail12OffsX = Nail12DeltaX - 330.0
local Nail12OffsY = Nail12DeltaY + 272.6
local Nail12OffsZ = Nail12DeltaZ + 76.5
EmtGeneral {
File='Essetre-WALL_XS0014.nge',
Offset = Vector3d( 5470.0, -2000.0, -1243.5),
AxisMaxAdjust = 3250,
ExitMaxAdjust = 3250,
Special = 'Essetre-WALL_XS.mlse',
Processor = 'Essetre-WALL_XS.mlpe'}
local BaseId = EmtBase {
Name = 'Base',
Geo='BASE/GEO',
Aux={'BASE/SOLID', 'BASE/COLLISION'}}
local vtMove = Vector3d( DeltaTabX - 970.0, DeltaTabY + 3690.0, DeltaTabZ + 513.5)
EgtMove( BaseId, vtMove, GDB_RT.GLOB)
-- Tavola
EmtTable {
Name = 'Tab',
Parent = 'Base',
Type = MCH_TT.FLAT,
Ref1 = Point3d( DeltaTabX, DeltaTabY, DeltaTabZ),
Geo = 'TABLE/GEO'}
-- Traversa
local YId = EmtAxis {
Name = 'Y',
Parent = 'Base',
Invert = true,
Type = MCH_AT.LINEAR,
Dir = X_AX(),
Pos = Point3d( 0, 0, 0),
Stroke = {MinY, MaxY},
Home = 0,
Geo = 'Y_AXIS/GEO',
Aux = {'Y_AXIS/SOLID'}}
-- Testa cambia utensili
EmtAxis {
Name = 'X',
Parent = 'Y',
Token = 'X',
Type = MCH_AT.LINEAR,
Dir = Y_AX(),
Pos = Point3d( 0, 0, 0),
Stroke = {MinX, MaxX},
Home = ( MinX + MaxX) / 2,
Geo = 'X_AXIS/GEO',
Aux = {'X_AXIS/SOLID'}}
EmtAxis {
Name = 'Z',
Parent = 'X',
Token = 'Z',
Type = MCH_AT.LINEAR,
Dir = Z_AX(),
Pos = Point3d( 0, 0, 0),
Stroke = {MinZ, MaxZ},
Home = 0,
Geo = 'Z_AXIS/GEO',
Aux = {'Z_AXIS/SOLID'}}
-- Chiodatrici
local H11Id, H12Id
if Nail11 ~= 0 then
H11Id = EmtHead {
Name = 'H11',
Parent = 'Z',
HSet = 'H11',
Type = MCH_HT.STD,
Pos = Point3d( Nail11DeltaX, Nail11DeltaY, Nail11DeltaZ),
TDir = Z_AX(),
Geo = 'H11_HEAD/GEO',
Aux = {'H11_HEAD/SOLID'}}
EgtMove( EgtGetFirstNameInGroup( H11Id, 'SOLID'), Vector3d( Nail11OffsX, Nail11OffsY, Nail11OffsZ), GDB_RT.GLOB)
end
if Nail12 ~= 0 then
H12Id = EmtHead {
Name = 'H12',
Parent = 'Z',
HSet = 'H12',
Type = MCH_HT.STD,
Pos = Point3d( Nail12DeltaX, Nail12DeltaY, Nail12DeltaZ),
TDir = Z_AX(),
Geo = 'H12_HEAD/GEO',
Aux = {'H12_HEAD/SOLID'}}
EgtMove( EgtGetFirstNameInGroup( H12Id, 'SOLID'), Vector3d( Nail12OffsX, Nail12OffsY, Nail12OffsZ), GDB_RT.GLOB)
end
-- Assi rotanti
EmtAxis {
Name = 'C',
Parent = 'Z',
Token = 'C',
Type = MCH_AT.ROTARY,
Dir = Z_AX(),
Pos = Point3d( 0, 0, 0),
Stroke = {MinC, MaxC},
Home = 0,
Geo = 'C_AXIS/GEO',
Aux = {'C_AXIS/SOLID', 'C_AXIS/COLLISION'}}
EmtAxis {
Name = 'B',
Parent = 'C',
Token = 'B',
Type = MCH_AT.ROTARY,
Dir = -X_AX(),
Pos = Point3d( 0, 0, MillOffs),
Stroke = {MinB, MaxB},
Home = 0,
Geo = 'B_AXIS/GEO',
Aux = {'B_AXIS/SOLID', 'B_AXIS/COLLISION'}}
-- Testa principale
EmtHead {
Name = 'H1',
Parent = 'B',
HSet = 'H1',
Type = MCH_HT.STD,
Pos = Point3d( 0, 0, 0),
TDir = Z_AX(),
ADir = Y_AX(),
Rot1W = 0.1,
OthColl = {'B/SOLID', 'C/SOLID'},
Geo = 'H1_HEAD/GEO'}
-- Lama su aggregato
local H2Id = EmtHead {
Name = 'H2',
Parent = 'B',
HSet = 'H1',
Type = MCH_HT.STD,
Pos = Point3d( SawOffsX, SawOffsY, SawOffsZ),
TDir = Z_AX(),
ADir = -Y_AX(),
Rot1W = 0.1,
OthColl = {'B/SOLID', 'C/SOLID'},
Geo = 'H2_HEAD/GEO'}
EgtSetInfo( H2Id, 'Gearbox', 1)
-- Sega a catena
if ChainSaw ~= 0 then
EmtAxis {
Name = 'A1',
Parent = 'B',
Token = '**',
Type = MCH_AT.ROTARY,
Dir = Z_AX(),
Pos = Point3d( 0, 0, 0),
Stroke = { 0, 270},
Home = 180,
Geo = 'A_AXIS/GEO'}
local H3Id = EmtHead {
Name = 'H3',
Parent = 'A1',
HSet = 'H1',
Type = MCH_HT.STD,
Pos = Point3d( 0, 0, -ChSawLen),
TDir = -X_AX(),
ADir = Z_AX(),
Rot1W = 0.1,
SolCh = MCH_SCC.ADIR_NEAR,
OthColl = {'B/SOLID', 'C/SOLID'},
Geo = 'H3_HEAD/GEO'}
EgtSetInfo( H3Id, 'ZSAFEDELTA', 60)
end
-- ToolChanger
local ptTc1 = Point3d( 18.0 + ( DeltaTabX - 970.0), -2687.9 + ( DeltaTabY + 3690.0), -691.5 + ( DeltaTabZ + 513.5))
local ptTc = ptTc1 + 22 * Z_AX()
EmtTcPos {
Name = 'T1',
Parent = 'Base',
Pos = ptTc1 + Vector3d( SawOffsX, SawOffsY, SawOffsZ),
TDir = Z_AX(),
ADir = -Y_AX(),
Geo = 'BASE/T1'}
EmtTcPos {
Name = 'T2',
Parent = 'Base',
Pos = ptTc + 600 * Y_AX(),
TDir = Z_AX(),
ADir = X_AX(),
Geo = 'BASE/T2'}
EmtTcPos {
Name = 'T3',
Parent = 'Base',
Pos = ptTc + 800 * Y_AX(),
TDir = Z_AX(),
ADir = X_AX(),
Geo = 'BASE/T3'}
EmtTcPos {
Name = 'T4',
Parent = 'Base',
Pos = ptTc + 1000 * Y_AX(),
TDir = Z_AX(),
ADir = X_AX(),
Geo = 'BASE/T4'}
EmtTcPos {
Name = 'T5',
Parent = 'Base',
Pos = ptTc + 1200 * Y_AX(),
TDir = Z_AX(),
ADir = X_AX(),
Geo = 'BASE/T5'}
EmtTcPos {
Name = 'T6',
Parent = 'Base',
Pos = ptTc + 1400 * Y_AX(),
TDir = Z_AX(),
ADir = X_AX(),
Geo = 'BASE/T6'}
EmtTcPos {
Name = 'T7',
Parent = 'Base',
Pos = ptTc + 1600 * Y_AX(),
TDir = Z_AX(),
ADir = X_AX(),
Geo = 'BASE/T7'}
if ChainSaw ~= 0 then
EmtTcPos {
Name = 'T8',
Parent = 'Base',
Pos = ptTc + 1800 * Y_AX() - ChSawLen * Z_AX(),
TDir = -X_AX(),
ADir = Z_AX(),
Geo = 'BASE/T8CS'}
else
EmtTcPos {
Name = 'T8',
Parent = 'Base',
Pos = ptTc + 1800 * Y_AX(),
TDir = Z_AX(),
ADir = X_AX(),
Geo = 'BASE/T8'}
end
EmtTcPos {
Name = 'T9',
Parent = 'Y',
Pos = Point3d( 0, -3825, -791.5),
TDir = Z_AX(),
ADir = X_AX(),
Geo = 'Y_AXIS/T9'}
EmtTcPos {
Name = 'T10',
Parent = 'Y',
Pos = Point3d( 0, -55, -791.5),
TDir = Z_AX(),
ADir = X_AX(),
Geo = 'Y_AXIS/T10'}
---------------------------------------------------------------------
-- Funzioni richiamate per modificare i dati macchina in casi particolari
--function OnSetTable()
--end
---------------------------------------------------------------------
local function MoveGroup( nGrpId, vtVers, dPos, bLoc)
local dVal = EgtGetInfo( nGrpId or GDB_ID.NULL, 'Val')
if not dVal then return end
if abs( dPos - dVal) > GEO.EPS_SMALL then
local nRT = EgtIf( bLoc, GDB_RT.LOC, GDB_RT.GLOB)
EgtMove( nGrpId, ( dPos - dVal) * vtVers, nRT)
EgtSetInfo( nGrpId, 'Val', dPos)
end
end
---------------------------------------------------------------------
function OnSetHead()
if H11Id then
local dPos = EgtIf( EMC.HEAD == 'H11', 0, 650)
MoveGroup( EgtGetFirstNameInGroup( H11Id, 'SOLID'), Z_AX(), dPos, true)
MoveGroup( EgtGetFirstNameInGroup( H11Id, 'T1'), Z_AX(), dPos, true)
end
if H12Id then
local dPos = EgtIf( EMC.HEAD == 'H12', 0, 650)
MoveGroup( EgtGetFirstNameInGroup( H12Id, 'SOLID'), Z_AX(), dPos, true)
MoveGroup( EgtGetFirstNameInGroup( H12Id, 'T1'), Z_AX(), dPos, true)
end
if EMC.HEAD == 'H11' or EMC.HEAD == 'H12' then
EmtModifyAxisHome( 'B', 90)
EgtResetAxisPos( 'B')
else
if EMC.HEAD == 'H3' then
-- aggiustamenti per distanza da naso mandrino
local dDist = EgtIf( EMC.DIST and abs( EMC.DIST) > 1, EMC.DIST, ChSawLen)
EmtModifyExitPosition( EMC.HEAD, EMC.EXIT, Point3d( 0, 0, -dDist))
local vtMove = Point3d( 0, 0, -dDist) - Point3d( EMC.EXITPOS)
local ExitId = EgtGetFirstNameInGroup( EgtGetHeadId( EMC.HEAD), 'T'..tostring( EMC.EXIT))
EgtMove( ExitId, vtMove)
end
EmtModifyAxisHome( 'B', 0)
end
end
---------------------------------------------------------------------
-- Funzione per resettare tutte le attivazioni della macchina
function OnResetMachine()
EmtUnlinkAllRawPartsFromGroups()
EmtUnlinkAllFixturesFromGroups()
-- nascondo Vmill
local nRawId = EgtGetFirstRawPart()
while nRawId do
local nVmId = EgtGetFirstNameInGroup( nRawId, 'VMill')
local nId = EgtGetFirstInGroup( nRawId)
while nId do
EgtSetStatus( nId, EgtIf( nId ~= nVmId, GDB_ST.ON, GDB_ST.OFF))
nId = EgtGetNext( nId)
end
nRawId = EgtGetNextRawPart( nRawId)
end
EgtSetStatus( EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') or GDB_ID.NULL, GDB_ST.OFF)
end
Binary file not shown.
Binary file not shown.
Binary file not shown.
+36
View File
@@ -0,0 +1,36 @@
-- 2018/11/21 17:30:00
-- Machining Exit for Essetre-FAST machine
-- Intestazioni
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
--------------------------------------------------------------------------------
-- *** Uscita da Lavorazioni ***
-- Nascondo il pezzo così marcato e le geometrie aggiunte, visualizzo il Box
local function ProcessPart( PartId)
-- visualizzo il Box
EgtSetStatus( EgtGetFirstNameInGroup( PartId, 'Box') or GDB_ID.NULL, GDB_ST.ON)
end
-- Disabilito segnalazione modifica progetto
local bEnMod = EgtGetEnableModified()
EgtDisableModified()
-- Processo i pezzi nella radice (già chiusi tutti i gruppi di lavoro)
local PartId = EgtGetFirstPart()
while PartId do
ProcessPart( PartId)
PartId = EgtGetNextPart( PartId)
end
EgtZoom( SCE_ZM.ALL, false)
-- Ripristino segnalazione modifica progetto
if bEnMod then
EgtEnableModified()
end
MACH.ERR = 0
+44
View File
@@ -0,0 +1,44 @@
-- 2018/11/21 16:30:00
-- Machining Init for Essetre-FAST machine
-- Intestazioni
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
--------------------------------------------------------------------------------
-- *** Ingresso in Lavorazioni ***
-- Rendo visibile il pezzo e le geometrie aggiunte, nascondo il Box
local function ProcessPart( PartId)
-- nascondo il Box
EgtSetStatus( EgtGetFirstNameInGroup( PartId, 'Box') or GDB_ID.NULL, GDB_ST.OFF)
end
-- Disabilito segnalazione modifica progetto
local bEnMod = EgtGetEnableModified()
EgtDisableModified()
-- Processo i pezzi nella radice
local PartId = EgtGetFirstPart()
while PartId do
ProcessPart( PartId)
PartId = EgtGetNextPart( PartId)
end
-- Processo i pezzi già nei gruppi di lavoro (quando appena lanciata Process)
local GhostId = EgtGetFirstGhostPart()
while GhostId do
local PartId = EgtGetInfo( GhostId, GDB_SI.SOURCE, 'i')
if PartId then
ProcessPart( PartId)
end
GhostId = EgtGetNextGhostPart( GhostId)
end
-- Ripristino segnalazione modifica progetto
if bEnMod then
EgtEnableModified()
end
MACH.ERR = 0
+213
View File
@@ -0,0 +1,213 @@
-- 2023/06/28
-- Gestione attrezzaggio per Essetre-WallXS0014
-- Intestazioni
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
-- Tavola di passaggio valori
local STU = {}
STU.TUUID = ""
STU.TCPOS = ""
STU.HEAD = ""
STU.GROUP = ""
STU.POS = ""
STU.EXIT = 0
STU.INDEX = 0
STU.HEAD1 = ""
STU.HEAD2 = ""
STU.ISVALID = false
STU.ERR = 0
_G.STU = STU
local INVALIDPOS = ""
local POS = "Pos"
-- Geom Set
local GS = {}
-- Flag presenza sega a catena e chiodatrici/graffettatrici
local bChainSaw = ( EgtGetHeadId( 'H3') ~= nil)
local bNail11 = ( EgtGetHeadId( 'H11') ~= nil)
local bNail12 = ( EgtGetHeadId( 'H12') ~= nil)
-- Configurazione posizioni
local PositionTable={{Pos = "Pos1", TcPos = "T9", Head = "H1", Group = "G1"},
{Pos = "Pos2", TcPos = "T1", Head = "H2", Group = "G2"},
{Pos = "Pos3", TcPos = "T2", Head = "H1", Group = "G2"},
{Pos = "Pos4", TcPos = "T3", Head = "H1", Group = "G2"},
{Pos = "Pos5", TcPos = "T4", Head = "H1", Group = "G2"},
{Pos = "Pos6", TcPos = "T5", Head = "H1", Group = "G2"},
{Pos = "Pos7", TcPos = "T6", Head = "H1", Group = "G2"},
{Pos = "Pos8", TcPos = "T7", Head = "H1", Group = "G2"},
{Pos = "Pos9", TcPos = "T8", Head = EgtIf( bChainSaw, "H3", "H1"), Group = "G2"},
{Pos = "Pos10", TcPos = "T10", Head = "H1", Group = "G3"}}
if bNail11 then
table.insert( PositionTable, {Pos = "Pos11", TcPos = "T11", Head = "H11", Group = "G4"})
end
if bNail12 then
if bNail11 then
table.insert( PositionTable, {Pos = "Pos12", TcPos = "T12", Head = "H12", Group = "G4"})
else
table.insert( PositionTable, {Pos = "Pos11", TcPos = "T12", Head = "H12", Group = "G4"})
end
end
local UsePositionHead = true
local function IsInGeomSet( ToolHead, PosHead)
for GsIndex = 1, #GS do
local bToolHead = false
local bPosHead = false
for HIndex = 1, #GS[GsIndex] do
if GS[GsIndex][HIndex] == ToolHead then
bToolHead = true
elseif GS[GsIndex][HIndex] == PosHead then
bPosHead = true
end
if bToolHead and bPosHead then
return true
end
end
if bToolHead and bPosHead then
return true
end
end
return false
end
function STU.IsCompatibleHeads()
STU.ISVALID = false
if IsInGeomSet(STU.HEAD1, STU.HEAD2) then
STU.ISVALID = true
else
STU.ISVALID = false
end
end
function STU.GetValidHeadExitForPos()
-- se TUUID non valido restituisco errore
local ToolName = EgtTdbGetToolFromUUID( STU.TUUID)
if ToolName == nill then
STU.ERR = 1
return
end
EgtTdbSetCurrTool( ToolName)
local CurrToolHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
STU.EXIT = EgtTdbGetCurrToolParam( MCH_TP.EXIT)
-- recupero testa predefinita per la posizione corrente
local CurrPosHead
for i = 1, #PositionTable do
if PositionTable[i].TcPos == STU.TCPOS then
CurrPosHead = PositionTable[i].Head
break
end
end
-- verifico se la testa è quella della posizione predefinita
if CurrPosHead == CurrToolHead then
STU.HEAD = CurrToolHead
STU.ERR = 0
return
-- verifico se la testa è compatibile con quella della posizione predefinita
elseif IsInGeomSet( CurrToolHead, CurrPosHead) then
if UsePositionHead then
STU.HEAD = CurrPosHead
STU.ERR = 0
return
else
STU.HEAD = CurrToolHead
STU.ERR = 0
return
end
-- la testa non è compatibile con quella della posizione predefinita
else
STU.HEAD = INVALIDPOS
STU.ERR = 0
return
end
end
function STU.IsValidTcPosFromHead()
STU.ISVALID = false
for i = 1, #PositionTable do
if PositionTable[i].TcPos == STU.TCPOS then
if PositionTable[i].Head == STU.HEAD then
STU.ISVALID = true
STU.ERR = 0
return
elseif IsInGeomSet(PositionTable[i].Head, STU.HEAD) then
STU.ISVALID = true
STU.ERR = 0
return
end
STU.ISVALID = false
STU.ERR = 0
return
end
end
end
function STU.GetTcPosHeadGroupFromPos()
for i = 1, #PositionTable do
if PositionTable[i].Pos == (POS .. tostring(STU.INDEX)) then
STU.TCPOS = PositionTable[i].TcPos
STU.HEAD = PositionTable[i].Head
STU.GROUP = PositionTable[i].Group
STU.ERR = 0
return
end
end
STU.TCPOS = INVALIDPOS
STU.HEAD = INVALIDPOS
STU.GROUP = INVALIDPOS
STU.ERR = 1
end
function STU.GetPosFromTcPos()
for i = 1, #PositionTable do
if PositionTable[i].TcPos == STU.TCPOS then
STU.POS = PositionTable[i].Pos
STU.ERR = 0
return
end
end
STU.POS = INVALIDPOS
STU.ERR = 1
end
function STU.GetGroupFromTcPos()
for i = 1, #PositionTable do
if PositionTable[i].TcPos == STU.TCPOS then
STU.GROUP = PositionTable[i].Group
STU.ERR = 0
return
end
end
STU.GROUP = INVALIDPOS
STU.ERR = 1
end
function STU.GetHeadFromPos()
for i = 1, #PositionTable do
if PositionTable[i].Pos == (POS .. tostring(STU.INDEX)) then
STU.HEAD = PositionTable[i].Head
STU.ERR = 0
return
end
end
STU.HEAD = INVALIDPOS
STU.ERR = 1
end
function STU.GetTcPosFromPos()
for i = 1, #PositionTable do
if PositionTable[i].Pos == (POS .. tostring(STU.INDEX)) then
STU.TCPOS = PositionTable[i].TcPos
STU.ERR = 0
return
end
end
STU.TCPOS = INVALIDPOS
STU.ERR = 1
end
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

+14
View File
@@ -0,0 +1,14 @@
; Commento per evitare BOM con UTF-8
[General]
Pos1=T9;H1;1/C24D419A-4196-4A93-A392-AB60F7C21FA9/Fresa20x50
Pos2=T1;H2;1/B68769CD-E781-4A6E-B8E8-25DABB823898/Lama450
Pos3=T2
Pos4=T3
Pos5=T4;H1;1/0A54F32E-C48D-45DB-8502-953CA94FD7A0/Fresa14.5x100
Pos6=T5;H1;1/0D83BA50-5D8F-4831-8EEF-CD2BCF6E21F2/Fresa200
Pos7=T6
Pos8=T7;H1;1/EC758B83-51D2-4247-B406-C13581AAC5C5/PuntaD18
Pos9=T8;H1;1/B449357F-293E-4EDC-8EE4-127A9863F116/PuntaD12
Pos10=T10;H1;1/B758356D-D1A5-4DA7-A0BC-65F59CA1DA24/Fresa25x130
Pos11=T11;H11;1/C6F17A98-329D-410A-A339-51059CCE1A83/11
Pos12=T12;H12;1/7EAAE1B6-0429-4074-A4E5-3E897BEEF424/12
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
+12
View File
@@ -0,0 +1,12 @@
-- CutData.lua by Egaltech s.r.l. 05/07/2022 19:29:52
-- Gestione dati lavorazioni per Travi
-- Tabella per definizione modulo
local CutData = {
{ On = false, Name = 'Cutting300', Type = 'Standard'},
{ On = true, Name = 'Cutting300Pull', Type = 'Standard'},
{ On = true, Name = 'Cutting450', Type = 'Standard'}
}
---------------------------------------------------------------------
return CutData
+19
View File
@@ -0,0 +1,19 @@
-- DrillData.lua by Egaltech s.r.l. 04/03/2022 16:10:20
-- Gestione dati lavorazioni per Travi
-- Tabella per definizione modulo
local DrillData = {
{ On = true, Name = 'DrillD7', Type = 'Drill'},
{ On = true, Name = 'DrillD14', Type = 'Drill'},
{ On = true, Name = 'DrillD16', Type = 'Drill'},
{ On = true, Name = 'DrillD18', Type = 'Drill'},
{ On = true, Name = 'DrillD20', Type = 'Drill'},
{ On = true, Name = 'DrillD32', Type = 'Drill'},
{ On = false, Name = 'DrillD35', Type = 'Drill'},
{ On = true, Name = 'DrillPockD20', Type = 'Pocket'},
{ On = true, Name = 'DrillPockD25', Type = 'Pocket'},
{ On = true, Name = 'DrillPockD40X120', Type = 'Pocket'}
}
---------------------------------------------------------------------
return DrillData
+24
View File
@@ -0,0 +1,24 @@
[Cut]
1=Standard
[Drill]
1=Drill
2=Pocket
[Milling]
1=FreeContour
2=Side
3=SideGroove
4=DtMortise
5=Mark
6=Text
7=CleanCorner60
8=CleanCorner30
9=Nailing
[Pocketing]
1=Pocket
2=Mortise
[Sawing]
1=Sawing
+18
View File
@@ -0,0 +1,18 @@
-- MillingData.lua by Egaltech s.r.l. 24/05/2022 08:41:12
-- Gestione dati lavorazioni per Travi
-- Tabella per definizione modulo
local MillingData = {
{ On = true, Name = 'Milling200x63', Type = 'Side'},
{ On = true, Name = 'MillingBH', Type = 'SideGroove'},
{ On = true, Name = 'Milling25x130', Type = 'FreeContour'},
{ On = true, Name = 'Milling20x50', Type = 'FreeContour'},
{ On = true, Name = 'Clean60x40', Type = 'CleanCorner60'},
{ On = true, Name = 'Clean30x40', Type = 'CleanCorner30'},
{ On = true, Name = 'Text45x40', Type = 'Text'},
{ On = true, Name = 'Nailing_11', Type = 'Nailing'},
{ On = true, Name = 'Nailing_12', Type = 'Nailing'}
}
---------------------------------------------------------------------
return MillingData
+15
View File
@@ -0,0 +1,15 @@
-- PocketingData.lua by Egaltech s.r.l. 02/05/2022 09:25:48
-- Gestione dati lavorazioni per Travi
-- Tabella per definizione modulo
local PocketingData = {
{ On = true, Name = 'Svuot20x50', Type = 'Pocket'},
{ On = true, Name = 'Svuot100x60', Type = 'Pocket'},
{ On = true, Name = 'Svuot25x130', Type = 'Pocket'},
{ On = true, Name = 'Svuot40x120', Type = 'Pocket'},
{ On = true, Name = 'Svuot20x50', Type = 'OpenPocket'},
{ On = true, Name = 'Svuot25x130', Type = 'OpenPocket'}
}
---------------------------------------------------------------------
return PocketingData
+10
View File
@@ -0,0 +1,10 @@
-- SawingData.lua by Egaltech s.r.l. 14/12/2021 16:37:13
-- Gestione dati lavorazioni per Travi
-- Tabella per definizione modulo
local SawingData = {
{ On = true, Name = 'TaglioCatena', Type = 'Sawing'}
}
---------------------------------------------------------------------
return SawingData
+233
View File
@@ -0,0 +1,233 @@
-- C:\TechnoEssetre7\EgtData\Essetre-Wall_XS0014.data
local Offsets = {
MIN_X=-3900,
MAX_X=45,
MIN_Y=-22010,
MAX_Y=0.1,
MIN_Z=-875,
MAX_Z=0,
MIN_B=-120,
MAX_B=120,
MIN_C=-360,
MAX_C=360,
TIPO_CN=1,
ZERO_X=-192.5,
ZERO_Y=-1033.3,
ZERO_Z=-781.4,
PIVOT=92.9,
OFFSET_ZERO3_X=0,
OFFSET_ZERO3_Y=-9013.3,
OFFSET_ZERO3_Z=0,
ZERO_NAIL11_X=-455.0,
ZERO_NAIL11_Y=-722.0,
ZERO_NAIL11_Z=-573.7,
ZERO_NAIL12_X=72,
ZERO_NAIL12_Y=-716,
ZERO_NAIL12_Z=-569.5,
CHAIN_SAW=0,
NAIL11=1,
NAIL12=1,
DELTA_X=0,
OFFSET_ZERO11_X=-5.9,
OFFSET_ZERO11_Y=-11639.8,
OFFSET_ZERO11_Z=0,
OFFSET_ZERO13_X=-5.9,
OFFSET_ZERO13_Y=-20655.7,
OFFSET_ZERO13_Z=0,
Zzz=1
}
local Trave = {
XMIN=10,
XMAX=3590,
YMIN=50,
YMAX=9350,
ZMIN=1,
ZMAX=400,
ZMAX_LAYERS=400,
Zzz=1
}
local User = {
VELOCITA_VELOCITARAPIDOFRESE=10000,
VELOCITA_VELOCITA_USCITA_LAMA=20000,
VELOCITA_FEED_ENTRY=5000,
VELOCITA_FEED_EXIT=20000,
NESTING_MATERIAL=1,
NESTING_TYPEEXTERNALOP=1,
NESTING_FROM_BTL=1,
NESTING_ORDINA=1,
NESTING_NOCOMPAT=0,
PROFILES_PROF_SMUSSO=5,
PAUSE_ACTIVE_PAUSE=0,
SAFETY_DISTANCE_ZSAVE=40,
OPTIMIZATIONS_ENABLE_SLICES_F5=0,
OPTIMIZATIONS_LENGTH_MAX_SCRAP_F5=799,
OPTIMIZATIONS_LENGTH_MAX_SCRAP_F5_P5=1350,
OPTIMIZATIONS_ENABLE_SLICES_F6=0,
OPTIMIZATIONS_LENGTH_SLICES=150,
OPTIMIZATIONS_SYMMETRIC_HEADS_PF=0,
OPTIMIZATIONS_RECOVERY_PRINT_ONLY=1,
L056_DISTSICUR=5,
L056_ENTRY_SPLINTER=10,
L056_ACTIVE_AS=1,
L055_ADD_P13=0,
L055_MODSAG=1,
L055_DISTSICUR=20,
L055_ENTRY_SPLINTER=20,
L055_TOLL_W=0,
L055_ACTIVE_AS=1,
L051_FORCE_P4=0,
L050_ATTIVA_CICLO_L050=0,
L050_FORCE_P4=0,
L050_ISOOUTSVUOTA=1,
L050_ADDDEPTH=0,
L050_DIAM_LUNG=1,
L050_USE2HEAD=0,
L053_ISOOUTSVUOTA=2,
L053_DIAM_LUNG=1,
L060_PEN_F2=2,
L060_PEN_F1=2,
L060_ORTHO_WRITER=0,
L060_ORTHO_WRITER_ADD_Y=0,
L060_DISABLE_L060=0,
L060_PEN_POSITION=0,
L101_MANUAL_POSITIONING=0,
L102_MANUAL_POSITIONING=0,
L103_MANUAL_POSITIONING=0,
L103_RID_SCALA_SMUSSO=5,
L103_ADD_WIDTH=0,
L103_ADD_WIDTH_CHAMFER=0,
L106_MANUAL_POSITIONING=0,
L106_RANGE=0,
L106_ADD_WIDTH=0,
L106_ASL=0,
L106_ASL_DEPTH=0,
L138_TOLLERANZA=0,
L052_ATTIVA_CICLO_MASCHIO=2,
L052_RIDLARGL052=0,
L052_REDUCTION=0,
L037_FEED_1=2000,
L037_FEED_2=4000,
L037_FEED_3=3000,
L037_MIN_LENGTH_ROT_AXE_A=130,
L037_TOOL_WIDTH=0,
L034_CHAMFER=0,
L034_FEED_CHAMFER=3000,
L034_PROF_AS=180,
L034_USE_SAW=19,
L034_LENGTH_MIN_DIV=900,
L032_ADD_P13=0,
L032_LENGTH_MIN_DIV=900,
T055_DISTSICURTENON=5,
T055_RIDP11=1,
T055_RIDLARGT055=0,
T055_ACTIVE_AS=1,
T055_ADDP15=0,
T050_REDUCTION=2,
T050_RIDLARGT050=0,
T050_RIDALTET050=0,
T050_FORCE_P4=0,
T050_ATTIVA_CICLO_MASCHIO=0,
T050_FEED_ENTRY=1500,
L040_ADD_P11=1,
L040_ADD_P11_PASS=0,
L040_OFFSET_P1=-1,
L040_OFFSET_P1_MAX_DISTANCE=0,
L040_2_DRILLINGS=0,
L040_TYPEDRILLING=1,
L040_USE2HEAD=0,
L017_ATTIVA_CICLO_MASCHIO=0,
L017_USAMORTASA_TURN=0,
L017_USAMORTASA=0,
L017_USE_SAW=0,
L017_GLOBAL_CUT=0,
L017_P7MAGG90=0,
L017_DIAM_LUNG=1,
L012_ENABLE_180=0,
L012_LIM=1,
L012_WORK_F1=0,
L012_MM_WORK_F1=0,
L012_LENGTH_MIN_DIV=900,
L012_USCITA_COMPLUVIO=0,
L012_ALT_MAX_LAMA=361,
L010_ENABLE_180=0,
L010_LIM=0,
L010_MM_SLICES=150,
L010_LONGITUDINAL_CYCLE=0,
L010_LENGTH_MIN_DIV=900,
L010_ALT_MAX_LAMA=361,
L016_CYCLE_ZPASS=0,
L016_USAMORTASA=0,
L016_LENGTH_MIN_DIV=2000,
L020_DIAM_HOLE=0,
L020_OFFSET_P1=0,
L020_MANUAL_POSITIONING=0,
L020_DIAM_HOLE_INV=0,
L020_DOUBLE_HOLE=1,
L020_ANTISCHEGGIA_LAMA=0,
L020_ALTMAXLAMA=360,
L030_NO_CAT_FIN=1,
L030_AUM_DIM=0,
L030_USE_ONLY_MILLER=0,
L030_PAUSE_PARETI=2,
L030_DELTA_PORTALE=500,
L030_ANTISCHEGGIA_FRESA=0,
L030_ANTISCHEGGIA_LAMA=0,
L030_ANTISCHEGGIA_LIMITE_MINIMO=0,
L030_USE_BIG_MILLER=1,
L030_MAX_HAUTEUR_OUTIL_203=350,
L030_MAX_LARGEUR_OUTIL_203=250,
L030_OFFSET_P1_OUTIL_203=0,
L030_SORMONTO_TASCA=0,
L030_ATTIVA_CICLO_FEMMINA=0,
L030_DISTANCE_FOR_TOOL_TYPE_4=135,
L030_USE_SAW_P4_12=16,
L030_LENGTH_MIN_DIV=900,
L030_OFFSETPIANOCATENA=15,
T010_TYPECUT=0,
T010_LENGHT_SLICES=400,
T010_ADD_EXIT_ORIZZ=26,
T010_ADD_EXIT=26,
T010_DISTSICURCUT=15,
T010_ADD_EXIT_DOLAMA=10,
T010_TRONCA_DOPPIA_PENDENZA=0,
T010_TRONCATURA_CON_G107=1,
T010_DISABILITA_TRONCATURA=0,
T010_DOUBLE_CUT_HALF=0,
T010_ALT_CAMBIO_TRONCATURA_FAST=360,
T010_NO_START_X=0,
T010_DIST_INF_HEAD=110,
T010_ADD_ENTRY_CUT=20,
T010_USACATENA=1,
T010_ALTCATENA=362,
T010_USA_TRUCIOLATORE=1,
T010_OFFSETPIANOCATENA=20,
T010_DISABLE_MILLING_AFTER_DIVISION=0,
T010_SAFETY_DISTANCE=5,
T010_ROT_C_SAW=700,
T010_FEED_ENTRY_SAW=4900,
T010_USASEMPRECATENA=0,
T010_T010ORIZZFINITURA=0,
T010_TAGLLAT=0,
P010_DEPTH=6,
P011_DISTSICURTENON=5,
P011_RIDLARGT055=0,
P011_RIDP11=2,
P011_ACTIVE_AS=1,
L038_ACTIVE_CUT=1,
L036_LENGTH_MIN_DIV=900,
T138_OFFSETTIMBERLAKE=0,
WUP_LAVSOLOEST=1,
T030_LENGTH_MIN_DIV=500,
T030_ANGMAXINF=15,
L013_LENGTH_MIN_DIV=2000,
P003_ALT_MAX_LAMA=440,
P003_OFFSETPIANOCATENA=0,
T080_ALTCATENA=399,
Zzz=1
}
local Machine = { Offsets=Offsets, Trave=Trave, User=User}
return Machine
+120
View File
@@ -0,0 +1,120 @@
-- WallData.lua by Egaltech s.r.l. 2023/06/28
-- Raccolta dati generali per Pareti
EgtOutLog( ' Wall_XS0014-WallData started', 1)
-- Tabella per definizione modulo
local WallData = {
MIN_LENGTH = 100, -- lunghezza minima del grezzo
MIN_WIDTH = 100, -- larghezza minima del grezzo
MIN_HEIGHT = 10, -- altezza minima del grezzo
MAX_LENGTH = 18000, -- lunghezza massima del grezzo
MAX_WIDTH = 4900, -- larghezza massima del grezzo
MAX_HEIGHT = 400, -- altezza massima del grezzo
STD_RAW_LENGTH = 10000, -- lunghezza standard del grezzo
STD_RAW_WIDTH = 4000, -- larghezza standard del grezzo
OVM_HEAD = 60, -- sovramateriale testa
OVM_MID = 50, -- sovramateriale intermedio
COLL_SIC = 5, -- distanza di sicurezza per collisioni
CUT_SIC = 20, -- distanza di sicurezza per tagli
CUT_EXTRA = 0, -- affondamento extra standard per tagli di lama e fresature
CUT_EXTRA_MIN = 0, -- affondamento extra ridotto per tagli di lama e fresature
NZ_MINA = 0.5, -- componente limite in Z normale di una faccia (-30deg)
NZ_MINB = -0.4, -- componente limite in Z normale di un insieme di facce (-23deg)
DRILL_TOL = 0.5, -- tolleranza tra diametro foro e diametro punta
DRILL_VZ_MIN = 0.5, -- componente limite in Z del versore di un foro
DRILL_VX_MAX = 0.866, -- componente limite in X del versore di un foro sulle facce laterali
DRILL_OVERLAP = 5, -- sovrapposizione tra due mezze forature
MILL_OVERLAP = 5, -- sovrapposizione tra due mezze fresature
RAWCOL = { 255, 160, 32, 30}, -- colore del grezzo
SIMUL_VIEW_DIR = 3, -- direzione di vista predefinita per la simulazione (1=NW, 2=SW, 3=NE, 4=SE)
ORIG_CORNER = 'TL', -- angolo tavola per origine di battuta (BR (default), TR, BL, TL)
MAX_CLEAN_CRN30 = 60, -- massimo spessore per pulitura angolo con fresa 30deg
MIN_DIM_ALLOW_CLEAN = 200, -- apertura minima per lavorazione pulitura spigolo
USE_POSY = true, -- utilizzare POSY di BTL (spostamento sullo spessore per pareti a layer)
MILL_MAX_DEPTH_AS_MAT = true, -- massimo affondamento frese uguale ad altezza tagliente (max materiale)
CHECK_MIN_Z_SAW = false, -- controlla la quota minima della lama rispetto alla tavola (default true)
TAB_EXTRA_XP = 3000, -- extra spazio su tavola per grezzo in X più
TAB_EXTRA_XM = 0, -- extra spazio su tavola per grezzo in X meno
TAB_EXTRA_YP = 0, -- extra spazio su tavola per grezzo in Y più
TAB_EXTRA_YM = 100, -- extra spazio su tavola per grezzo in Y meno
MID_REF = 9000, -- offset X per origini TM e BM
NEW_REF =11640, -- offset X per origini TN e BN
DELTA_Y = 0, -- allontanamento in Y dai riferimenti
DELTA_Z = 0 -- sollevamento dalla tavola
}
-- Aggiornamento con dati da TechnoEssetre7
local sTs3Data = EgtGetStringFromIni( 'Wall', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-Wall_XS0014.data"
local sData = EgtGetSourceDir().."\\Ts3Data.lua"
if EgtExistsFile( sTs3Data) then
EgtCopyFile( sTs3Data, sData)
local sTs3DataOld = sTs3Data..'.old'
EgtEraseFile( sTs3DataOld)
EgtRenameFile( sTs3Data, sTs3DataOld)
end
if EgtExistsFile( sData) then
local Machine = dofile( sData)
if Machine then
if Machine.Trave then
WallData.MIN_LENGTH = Machine.Trave.YMIN or WallData.MIN_LENGTH
WallData.MIN_WIDTH = Machine.Trave.XMIN or WallData.MIN_WIDTH
WallData.MIN_HEIGHT = Machine.Trave.ZMIN or WallData.MIN_HEIGHT
WallData.MAX_LENGTH = Machine.Trave.YMAX or WallData.MAX_LENGTH
WallData.MAX_WIDTH = Machine.Trave.XMAX or WallData.MAX_WIDTH
WallData.MAX_HEIGHT = Machine.Trave.ZMAX or WallData.MAX_HEIGHT
end
if Machine.Offsets then
WallData.DELTA_Y = Machine.Offsets.DELTA_X or WallData.DELTA_Y
WallData.DELTA_Z = Machine.Offsets.DELTA_Z or WallData.DELTA_Z
end
end
end
-------------------------------------------------------------------------------------------------------------
local function GetChainSawBlockedAxis( nInd)
--if nInd == 1 then
return 'A1=270'
--else
-- return 'A1=0'
--end
end
WallData.GetChainSawBlockedAxis = GetChainSawBlockedAxis
-------------------------------------------------------------------------------------------------------------
local function GetSawHeadSide( dSpeed, sHead)
local sMchNotes = EgtGetMachiningParam( MCH_MP.USERNOTES)
if not sMchNotes or not string.find( sMchNotes, 'PULL;', 1, true) then
return EgtIf( dSpeed < 0, MCH_SAW_HS.LEFT, MCH_SAW_HS.RIGHT)
else
return EgtIf( dSpeed > 0, MCH_SAW_HS.LEFT, MCH_SAW_HS.RIGHT)
end
end
WallData.GetSawHeadSide = GetSawHeadSide
-------------------------------------------------------------------------------------------------------------
local function GetOrigCorner( RefPos)
if RefPos == 1 then
return 'TL'
elseif RefPos == 2 then
return 'BL'
elseif RefPos == 3 then
return 'TM'
elseif RefPos == 4 then
return 'BM'
elseif RefPos == 5 then
return 'TN'
elseif RefPos == 6 then
return 'BN'
elseif RefPos == 7 then
return 'TR'
elseif RefPos == 8 then
return 'BR'
else
return 'TL'
end
end
WallData.GetOrigCorner = GetOrigCorner
---------------------------------------------------------------------
return WallData
+9
View File
@@ -0,0 +1,9 @@
-- %TABLE_NAME%.lua by Egaltech s.r.l. %DATE_TIME%
-- Gestione dati lavorazioni per Travi
-- Tabella per definizione modulo
local %TABLE_NAME% = {
}
---------------------------------------------------------------------
return %TABLE_NAME%