- Prima versione funzionante (DA VALIDARE!)
- Allineamento con common 2.6k1 - Pezzo massimo a 30metri - Aggiunta aggregato foratore multiplo 6 uscite
This commit is contained in:
+143
-43
@@ -166,7 +166,7 @@ function OnDispositionStart()
|
||||
' P15='..EmtLenToString( -DeltaTabY, 2)..' P16='..EmtLenToString( DeltaTabZ - MillOffs, 2)..
|
||||
' P17='..EmtLenToString( Delta2TabY, 2)..' P18='..EmtLenToString( -Delta2TabZ - Mill2Offs, 2)
|
||||
-- se è in configurazione a 3 teste
|
||||
if EgtGetHeadId( 'H31') then
|
||||
if IsHeadExisting( 3) then
|
||||
sOut = sOut .. ' P19='..EmtLenToString( -Delta3TabY, 2)..' P20='..EmtLenToString( Delta3TabZ - Mill3Offs, 2)..
|
||||
' P21='..EmtLenToString( Mill3Offs, 2).. ' P22='.. EmtLenToString( -ParkInLavZ2, 2)
|
||||
else
|
||||
@@ -475,18 +475,18 @@ function OnMachiningEnd()
|
||||
EmitRemark( 'PART UNLOAD')
|
||||
elseif EMT.AUXTYPE == 'P' then
|
||||
if EMT.PREROT then
|
||||
EmitZmax( false, true, EMT.R1, EMT.R2)
|
||||
EmitZmax( false, true, EMT.R1, EMT.R2, false, false, false)
|
||||
EMT.ZMAX = true
|
||||
EmitRemark( 'PART ROTATION')
|
||||
elseif EMT.FALL then
|
||||
if EMT.TO_ZMAX and not EMT.ZMAX then
|
||||
EmitZmax( false, true, EMT.R1, EMT.R2)
|
||||
EmitZmax( false, true, EMT.R1, EMT.R2, false, false, false)
|
||||
EMT.ZMAX = true
|
||||
EMT.TO_ZMAX = nil
|
||||
end
|
||||
EmitRemark( 'PART FALL')
|
||||
else
|
||||
EmitZmax( false, true, EMT.R1, EMT.R2)
|
||||
EmitZmax( false, true, EMT.R1, EMT.R2, false, false, false)
|
||||
EMT.ZMAX = true
|
||||
EmitRemark( 'PART SPLIT 2')
|
||||
end
|
||||
@@ -590,6 +590,10 @@ function OnPathEnd()
|
||||
if not EMT.ZMAX then
|
||||
EmitResetMachining()
|
||||
end
|
||||
|
||||
-- salvo dati precedenti
|
||||
EMT.L2pp = EMT.L2o
|
||||
|
||||
EMT.AUXTYPE = nil
|
||||
EMT.UNL = nil
|
||||
EMT.PREROT = nil
|
||||
@@ -883,13 +887,40 @@ function OnRapid()
|
||||
end
|
||||
-- eseguo movimenti
|
||||
local Speed = EMT.S
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, S=Speed})
|
||||
EmitMoveDataHead( 3, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
EmitMoveStartHead( 3)
|
||||
-- eventuale preselezione successiva testa 2
|
||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||
-- aspetto esecuzione movimento testa 3
|
||||
EmitMoveWaitHead( 3)
|
||||
-- se è macchina a 3 teste con gruppo truciolatore 4 assi
|
||||
if EgtGetHeadId( 'H39') then
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, S=Speed})
|
||||
EmitMoveDataHead( 3, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
EmitMoveStartHead( 3)
|
||||
-- eventuale preselezione successiva testa 2
|
||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||
-- aspetto esecuzione movimento testa 3
|
||||
EmitMoveWaitHead( 3)
|
||||
-- se gruppo lama dedicato, senza cambio utensile
|
||||
elseif EgtGetHeadId( 'H38') then
|
||||
local B3Home = EgtGetAxisHomePos( 'B3')
|
||||
local C3Home = EgtGetAxisHomePos( 'C3')
|
||||
EmitMoveDataHead( 3, { X=SafeX3RotAxis, S=Speed})
|
||||
-- se non sono esattamente in home, devo ruotare in zona sicura
|
||||
if abs( C3Home - EMT.R1) > 1 or abs( B3Home - EMT.R2) > 1 then
|
||||
EMT.L3 = min( EMT.L3, SafeZ3RotAxis)
|
||||
EmitMoveDataHead( 3, { Z=SafeZ3RotAxis, S=Speed})
|
||||
EmitMoveDataHead( 3, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, S=Speed})
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, S=Speed})
|
||||
end
|
||||
-- muovo in posizione finale
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
|
||||
EmitMoveStartHead( 3)
|
||||
-- eventuale preselezione successiva testa 2
|
||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||
-- aspetto esecuzione movimento testa 3
|
||||
EmitMoveWaitHead( 3)
|
||||
-- errore, testa non gestita
|
||||
else
|
||||
EmtSetLastError( 1212, "HEAD not managed")
|
||||
end
|
||||
end
|
||||
-- dati aggancio a trave
|
||||
local BhData = { T=EMT.L1, SetHead=0}
|
||||
@@ -933,7 +964,7 @@ function OnRapid()
|
||||
EmitParkedLines()
|
||||
-- se sfrido grande, emetto comando speciale
|
||||
if EMT.HOVM > 99 then
|
||||
if EgtGetHeadId( 'H31') then
|
||||
if IsHeadExisting( 3) then
|
||||
MyOutput( 'M107')
|
||||
else
|
||||
MyOutput( ';M107')
|
||||
@@ -949,11 +980,11 @@ function OnRapid()
|
||||
-- Allora salvo l'attuale e imposto il vecchio solo momentanemente, per poi ripristinarlo
|
||||
local sBckTcPos = EMT.TCPOS
|
||||
EMT.TCPOS = EMT.PREVTCPOSREAL_H2
|
||||
EmitZmax( false, false, PrevR1, PrevR2)
|
||||
EmitZmax( false, false, PrevR1, PrevR2, false, false, true)
|
||||
EMT.TCPOS = sBckTcPos
|
||||
EMT.R3_CHANGED = nil
|
||||
else
|
||||
EmitZmax( false, false, PrevR1, PrevR2)
|
||||
EmitZmax( false, false, PrevR1, PrevR2, false, false, true)
|
||||
end
|
||||
EMT.ZMAX = true
|
||||
EMT.TO_ZMAX = nil
|
||||
@@ -991,7 +1022,7 @@ function OnRapid()
|
||||
if EMT.MCHUSERNOTES and EMT.MCHUSERNOTES:find( 'Cut', 1, true) then
|
||||
-- se sfrido grande, emetto comando speciale
|
||||
if EMT.LB - EMT.LT > 99 then
|
||||
if EgtGetHeadId( 'H31') then
|
||||
if IsHeadExisting( 3) then
|
||||
MyOutput( 'M107')
|
||||
else
|
||||
MyOutput( ';M107')
|
||||
@@ -1032,9 +1063,20 @@ function OnRapid()
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
-- caso standard
|
||||
else
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
||||
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||
-- se ero in posizione speciale, prima ruoto poi scendo
|
||||
if bXSpec then
|
||||
local dZPos = max( HomeZ1, EMT.L3)
|
||||
EmitMoveDataHead( 1, { Z=dZPos, S=Speed})
|
||||
EmitMoveDataHead( 1, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, S=Speed})
|
||||
if abs( dZPos - EMT.L3) > 1 then
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
else
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
||||
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||
end
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
@@ -1178,20 +1220,43 @@ function OnRapid()
|
||||
local HomeC3 = EgtGetAxisHomePos( 'C3')
|
||||
local HomeB3 = EgtGetAxisHomePos( 'B3')
|
||||
local Speed = EMT.S
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
local CurrB3 = PrevR2
|
||||
local CurrC3 = PrevR1
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=MyMaxZ3, B=CurrB3, C=CurrC3, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=MyMaxZ3, S=Speed})
|
||||
end
|
||||
-- se è macchina a 3 teste con gruppo truciolatore 4 assi
|
||||
if EgtGetHeadId( 'H39') then
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
local CurrB3 = PrevR2
|
||||
local CurrC3 = PrevR1
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=MyMaxZ3, B=CurrB3, C=CurrC3, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=MyMaxZ3, S=Speed})
|
||||
end
|
||||
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
end
|
||||
-- se gruppo lama dedicato, senza cambio utensile
|
||||
elseif EgtGetHeadId( 'H38') then
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
local B3Home = EgtGetAxisHomePos( 'B3')
|
||||
local C3Home = EgtGetAxisHomePos( 'C3')
|
||||
EmitMoveDataHead( 3, { X=SafeX3RotAxis, S=Speed})
|
||||
-- se non sono esattamente in home, devo ruotare in zona sicura
|
||||
if abs( C3Home - EMT.R1) > 1 or abs( B3Home - EMT.R2) > 1 then
|
||||
EMT.L3 = min( EMT.L3, SafeZ3RotAxis)
|
||||
EmitMoveDataHead( 3, { Z=SafeZ3RotAxis, S=Speed})
|
||||
EmitMoveDataHead( 3, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, S=Speed})
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, S=Speed})
|
||||
end
|
||||
end
|
||||
-- muovo in posizione finale
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
else
|
||||
EmtSetLastError( 1212, "HEAD not managed")
|
||||
end
|
||||
|
||||
EmitMoveStartHead( 3)
|
||||
-- eventuale preselezione successiva testa 2
|
||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||
@@ -1338,7 +1403,7 @@ function OnRapid()
|
||||
-- porto in home la testa corrente se lavorazione successiva sopra con testa diversa oppure se punta lunga
|
||||
local nNextTopHSet = GetNextTopHSet( EMT.MCHID)
|
||||
local bTopGoHome = ( nHSet ~= 2 and nNextTopHSet ~= 0 and nHSet ~= nNextTopHSet) or ( nHSet == 1 and EMT.TTOTLEN > LongTool)
|
||||
EmitZmax( true, true, EMT.R1p, EMT.R2p, bSplitCut, bTopGoHome)
|
||||
EmitZmax( true, true, EMT.R1p, EMT.R2p, bSplitCut, bTopGoHome, false)
|
||||
-- aggiorno quota finale trave dopo Zmax
|
||||
EMT.L1o = EMT.TPOS
|
||||
EMT.ZMAX = true
|
||||
@@ -2350,11 +2415,12 @@ function GetHeadToolCode()
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut, bTopGoHome)
|
||||
function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut, bTopGoHome, bUsePrevDelta)
|
||||
if bReset then
|
||||
EmitResetMachining()
|
||||
end
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
local dXPos = EgtIf( bUsePrevDelta, EMT.L2pp or EMT.L2o, EMT.L2o)
|
||||
-- se testa 1
|
||||
if nSetHead == 1 then
|
||||
-- posizioni sicure
|
||||
@@ -2375,12 +2441,12 @@ function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut, bTopGoHome)
|
||||
local dZref = dHomeZ1 + GetZExtra( EMT.HEAD, PrevR2)
|
||||
dZref = min( dZref, dMaxZ1)
|
||||
local MovH = { Z = EgtIf( dZref > EMT.L3o, dZref, EMT.L3o)}
|
||||
MovH.X = -EMT.L2o ; MovH.B = EgtClamp( PrevR2, -90, 90) ; MovH.C = PrevR1 ;
|
||||
MovH.X = -dXPos ; MovH.B = EgtClamp( PrevR2, -90, 90) ; MovH.C = PrevR1 ;
|
||||
EmitMoveDataHead( 1, MovH)
|
||||
if ( EMT.HEAD == 'H12' or EMT.HEAD == 'H16') and ( abs( dHomeC1 - PrevR1) > 30.1 or abs( dHomeB1 - PrevR2) > 30.1) then
|
||||
EmitMoveDataHead( 1, { Z=dMaxZ1, B=0, Fmt=1})
|
||||
end
|
||||
if EgtIf( BD.RIGHT_LOAD, ( EMT.L2 > -DeltaTabY), ( EMT.L2 < -DeltaTabY)) then
|
||||
if EgtIf( BD.RIGHT_LOAD, ( -dXPos > -DeltaTabY), ( -dXPos < -DeltaTabY)) then
|
||||
EmitMoveDataHead( 1, { X=-DeltaTabY, Fmt=1})
|
||||
end
|
||||
EmitMoveDataHead( 1, { C=dHomeC1, Fmt=1})
|
||||
@@ -2426,8 +2492,8 @@ function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut, bTopGoHome)
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=dHomeX2, Fmt=1})
|
||||
end
|
||||
-- solo se è macchina a 3 teste, devo stare più alto
|
||||
if EgtGetHeadId( 'H31') then
|
||||
-- solo se è macchina a 3 teste con gruppo truciolatore 4 assi, devo stare più alto
|
||||
if EgtGetHeadId( 'H39') then
|
||||
EmitMoveDataHead( 2, { Z=-ParkInLavZ2, Fmt=1})
|
||||
end
|
||||
EmitMoveStartHead( 2)
|
||||
@@ -2438,11 +2504,36 @@ function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut, bTopGoHome)
|
||||
local dMaxZ3 = EgtGetAxisMax( 'Z3')
|
||||
local dHomeX3 = EgtGetAxisHomePos( 'X3')
|
||||
local dHomeB3 = EgtGetAxisHomePos( 'B3')
|
||||
-- eseguo la salita a Z3max
|
||||
EmitMoveDataHead( 3, { Z=dMaxZ3, Fmt=1})
|
||||
if bTopGoHome then
|
||||
EmitMoveDataHead( 3, { X=-dHomeX3, B=dHomeB3, Fmt=1})
|
||||
|
||||
-- se è macchina a 3 teste con gruppo truciolatore 4 assi
|
||||
if EgtGetHeadId( 'H39') then
|
||||
-- eseguo la salita a Z3max
|
||||
EmitMoveDataHead( 3, { Z=dMaxZ3, Fmt=1})
|
||||
if bTopGoHome then
|
||||
EmitMoveDataHead( 3, { X=-dHomeX3, B=dHomeB3, Fmt=1})
|
||||
end
|
||||
-- se gruppo lama dedicato, senza cambio utensile
|
||||
elseif EgtGetHeadId( 'H38') then
|
||||
local dHomeC3 = EgtGetAxisHomePos( 'C3')
|
||||
if RollerParkingNeeded( EMT.HEAD, PrevR1, PrevR2, dHomeC3, dHomeB3) then
|
||||
local dPosT = EgtIf( bEnd, EMT.L1o, EMT.TPOS or EMT.L1op)
|
||||
EmitParkRoller( dPosT, bSplitCut)
|
||||
end
|
||||
-- se non sono esattamente in home, devo ruotare in zona sicura
|
||||
if abs( dHomeC3 - PrevR1) > 1 or abs( dHomeB3 - PrevR2) > 1 then
|
||||
EmitMoveDataHead( 3, { X=SafeX3RotAxis, Fmt=1})
|
||||
EmitMoveDataHead( 3, { Z=SafeZ3RotAxis, Fmt=1})
|
||||
EmitMoveDataHead( 3, { B=dHomeB3, C=dHomeC3, Fmt=1})
|
||||
end
|
||||
-- eseguo la salita a Z3max
|
||||
EmitMoveDataHead( 3, { Z=dMaxZ3, Fmt=1})
|
||||
if bTopGoHome then
|
||||
EmitMoveDataHead( 3, { X=-dHomeX3, Fmt=1})
|
||||
end
|
||||
else
|
||||
EmtSetLastError( 1212, "HEAD not managed")
|
||||
end
|
||||
|
||||
EmitMoveStartHead( 3)
|
||||
EmitMoveWaitHead( 3)
|
||||
end
|
||||
@@ -2667,8 +2758,10 @@ function PreselectNextDiffHead( nMchId, sHead)
|
||||
else
|
||||
-- se preselezione testa 1
|
||||
if nNextHSet == 1 then
|
||||
-- TC su montante destro
|
||||
if nPrevTc == 1 then return
|
||||
local nNextTc = GetTcForTopHeadTool( sNextTcPos) -- utensile da caricare
|
||||
local nPrevTc = GetTcForTopHeadTool( EMT.PREVTCPOS_H1) -- utensile da depositare
|
||||
-- se devo lasciare o prelevare da TC1 oppure non so cosa c'è montato, non posso preselezionare
|
||||
if nNextTc == 1 or nPrevTc == 1 or nPrevTc == 0 then return
|
||||
-- TC su montante sinistro
|
||||
else
|
||||
if BD.RIGHT_LOAD and EMT.MAXMAX[2] > ( DeltaTabY + MaxHoOpen + 200) then return end
|
||||
@@ -2688,8 +2781,15 @@ function PreselectNextDiffHead( nMchId, sHead)
|
||||
|
||||
-- faccio preselezione ( se sono arrivato qui, vuol dire che posso preselezionare)
|
||||
if nNextHSet == 1 then
|
||||
-- Recupero quota X1 (nostro L2)
|
||||
local dNextX = GetStartMachiningXaxis( nNextMchId)
|
||||
local dNextX
|
||||
-- se sto lavorando con testa 3, la testa 1 deve restare in home
|
||||
if nHSet == 3 then
|
||||
dNextX = EgtGetAxisHomePos( 'X1')
|
||||
-- altrimenti recupero quota X1 (nostro L2)
|
||||
else
|
||||
dNextX = GetStartMachiningXaxis( nNextMchId)
|
||||
end
|
||||
|
||||
-- Emetto preselezione
|
||||
if sNextHead == 'H11' then
|
||||
if dNextTotLen < LongTool then
|
||||
|
||||
Reference in New Issue
Block a user