Compare commits
63 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d401d8e37c | |||
| ebbe1c9ac6 | |||
| e88ce08053 | |||
| 97ec5d29c6 | |||
| 293dc97749 | |||
| 1fa5c7de64 | |||
| 61fe9ba362 | |||
| 300eead9d1 | |||
| caf3739c3f | |||
| bd04fcb4ab | |||
| 021e841126 | |||
| 87f7aad2f0 | |||
| 5e4ec03149 | |||
| 8cd863c4b7 | |||
| 67a45afd0d | |||
| 66a0e4f2e8 | |||
| dba3a45080 | |||
| 7631f4f86c | |||
| 34a5cb79b6 | |||
| 6c81d8c21d | |||
| 12445313c6 | |||
| 1164be0cb6 | |||
| 651ab27194 | |||
| c385253e0b | |||
| 93701378db | |||
| 367fcdce2e | |||
| b9f0713dda | |||
| 4853f7459f | |||
| d3f5b0e7e8 | |||
| 61b9c86cc4 | |||
| 22c451fde6 | |||
| 727d1812a1 | |||
| 716a404ea8 | |||
| 018bd2d80a | |||
| 6d921cdd39 | |||
| 70618a298f | |||
| 8b1c51b766 | |||
| 85a7efdfa0 | |||
| 71ed6a3db4 | |||
| 72bf618c83 | |||
| 36bc89cec4 | |||
| a96333d99d | |||
| 217d641fbf | |||
| 7a0c2d19c2 | |||
| 32a7deb792 | |||
| 7df6d3ee0d | |||
| 46aa3a34aa | |||
| e4c0e4acdb | |||
| ed7cc79bb4 | |||
| 0a1c916cba | |||
| 9393aa07c7 | |||
| 007314a354 | |||
| 2247b7e332 | |||
| fcd802e499 | |||
| 283a981c17 | |||
| 4a69712c69 | |||
| 575e5e7dfb | |||
| b406dfd7fa | |||
| 771a612d0f | |||
| fadf0c79f1 | |||
| 0ec5ddca1f | |||
| 518acb995c | |||
| ed14366cfc |
+78
-28
@@ -358,6 +358,7 @@ function OnRawMoveData()
|
|||||||
EMT.HT = b3Part:getDimY()
|
EMT.HT = b3Part:getDimY()
|
||||||
EMT.ST = b3Part:getDimZ()
|
EMT.ST = b3Part:getDimZ()
|
||||||
EMT.HOVM = EgtGetInfo( EMT.RAWID, 'HOVM', 'd') or 0
|
EMT.HOVM = EgtGetInfo( EMT.RAWID, 'HOVM', 'd') or 0
|
||||||
|
EMT.XMINT = b3Part:getMin():getX()
|
||||||
EMT.PARTTYPE = 0
|
EMT.PARTTYPE = 0
|
||||||
local sMaterial = EgtGetInfo( PartId, 'MATERIAL')
|
local sMaterial = EgtGetInfo( PartId, 'MATERIAL')
|
||||||
if sMaterial and sMaterial:find( 'CLT-', 1, true) == 1 then
|
if sMaterial and sMaterial:find( 'CLT-', 1, true) == 1 then
|
||||||
@@ -405,6 +406,7 @@ function OnMachiningStart()
|
|||||||
EMT.MCHNAME = EgtGetOperationName( EMT.MCHID)
|
EMT.MCHNAME = EgtGetOperationName( EMT.MCHID)
|
||||||
EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE)
|
EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE)
|
||||||
EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES)
|
EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES)
|
||||||
|
EMT.MCHPRECUT = ( EMT.MCHUSERNOTES:find( 'Precut;', 1, true) ~= nil)
|
||||||
EMT.MCHCUT = ( EMT.MCHUSERNOTES:find( 'Cut;', 1, true) ~= nil)
|
EMT.MCHCUT = ( EMT.MCHUSERNOTES:find( 'Cut;', 1, true) ~= nil)
|
||||||
|
|
||||||
-- se sega a catena, aggiusto subito angolo scelto per asse virtuale A
|
-- se sega a catena, aggiusto subito angolo scelto per asse virtuale A
|
||||||
@@ -538,6 +540,7 @@ function OnMachiningEnd()
|
|||||||
local sEnd= 'M113 P1='..tostring( EMT.PRODID)..' P2='..tostring( EMT.PATTID)..' P3='..tostring( EMT.CUTID)..' P4=2'
|
local sEnd= 'M113 P1='..tostring( EMT.PRODID)..' P2='..tostring( EMT.PATTID)..' P3='..tostring( EMT.CUTID)..' P4=2'
|
||||||
MyOutput( sEnd)
|
MyOutput( sEnd)
|
||||||
end
|
end
|
||||||
|
EMT.FALL = nil
|
||||||
elseif not EMT.PREROT then
|
elseif not EMT.PREROT then
|
||||||
MyOutput( 'M77')
|
MyOutput( 'M77')
|
||||||
end
|
end
|
||||||
@@ -573,12 +576,25 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnPathStart()
|
function OnPathStart()
|
||||||
|
if EMT.OPEISDISP then
|
||||||
|
return
|
||||||
|
end
|
||||||
-- non ancora iniziata la lavorazione
|
-- non ancora iniziata la lavorazione
|
||||||
EMT.MCHFIRST = true
|
EMT.MCHFIRST = true
|
||||||
EMT.MCHFIRSTFEED = true
|
EMT.MCHFIRSTFEED = true
|
||||||
-- primo posizionamento sempre in globale
|
-- primo posizionamento sempre in globale
|
||||||
|
-- primo posizionamento sempre in globale
|
||||||
EMT.REFLOC = nil
|
EMT.REFLOC = nil
|
||||||
EMT.IPLGL = false
|
EMT.IPLGL = false
|
||||||
|
|
||||||
|
|
||||||
|
-- se taglio di precut verifico quanto è più lungo il grezzo rispetto al pezzo (non tiene conto dell'ultimo cubetto)
|
||||||
|
EMT.DELTA_LT = 0
|
||||||
|
if EMT.MCHPRECUT then
|
||||||
|
local dCosA = sqrt( max( 1 - EMT.EXTR[1] * EMT.EXTR[1], 0))
|
||||||
|
EMT.DELTA_LT = max( EMT.XMINT - Point3d( EMT.MMAX):getX() - dCosA * EMT.TDIAM / 2, 0)
|
||||||
|
end
|
||||||
|
|
||||||
-- leggo se ancora presa iniziale carrello
|
-- leggo se ancora presa iniziale carrello
|
||||||
--EMT.CNT = EgtGetInfo( EMT.PATHID, 'CNT', 'i')
|
--EMT.CNT = EgtGetInfo( EMT.PATHID, 'CNT', 'i')
|
||||||
--MyOutput( 'CNT='.. tostring( EMT.CNT or 0))
|
--MyOutput( 'CNT='.. tostring( EMT.CNT or 0))
|
||||||
@@ -602,6 +618,9 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnPathEnd()
|
function OnPathEnd()
|
||||||
|
if EMT.OPEISDISP then
|
||||||
|
return
|
||||||
|
end
|
||||||
if not EMT.ZMAX then
|
if not EMT.ZMAX then
|
||||||
EmitResetMachining()
|
EmitResetMachining()
|
||||||
end
|
end
|
||||||
@@ -628,6 +647,9 @@ function OnPathStartAux()
|
|||||||
local Cmd = EgtSplitString( EMT.AUX)
|
local Cmd = EgtSplitString( EMT.AUX)
|
||||||
if Cmd[1] == '4' then
|
if Cmd[1] == '4' then
|
||||||
EMT.TO_ZMAX = true
|
EMT.TO_ZMAX = true
|
||||||
|
if Cmd[2] == '1' then
|
||||||
|
EMT.ROLL_IN = true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -767,7 +789,15 @@ function OnRapid()
|
|||||||
EmitMoveDataHead( 1, { B=0, S=Speed})
|
EmitMoveDataHead( 1, { B=0, S=Speed})
|
||||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||||
EmitMoveDataHead( 1, { X=EMT.L2, S=Speed})
|
EmitMoveDataHead( 1, { X=EMT.L2, S=Speed})
|
||||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
-- se movimento di B > di 90°, spezza il movimento in 2 arrivando alla quota Z con B+-90 e poi muove l'ultimo segmento
|
||||||
|
-- evita collisione con carro X
|
||||||
|
if EMT.R2 > 91 or EMT.R2 < -91 then
|
||||||
|
local dBref = EgtClamp( EMT.R2, -91, 91)
|
||||||
|
EmitMoveDataHead( 1, { Z=EMT.L3, B=dBref, S=Speed})
|
||||||
|
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||||
|
else
|
||||||
|
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||||
|
end
|
||||||
-- caso standard
|
-- caso standard
|
||||||
else
|
else
|
||||||
-- se bisogna scrivere tutti gli assi
|
-- se bisogna scrivere tutti gli assi
|
||||||
@@ -907,6 +937,8 @@ function OnRapid()
|
|||||||
local dPosT = EMT.TPOS or EMT.L1op
|
local dPosT = EMT.TPOS or EMT.L1op
|
||||||
EmitParkRoller( dPosT, bSplitCut)
|
EmitParkRoller( dPosT, bSplitCut)
|
||||||
end
|
end
|
||||||
|
-- eventuale preselezione successiva testa 2
|
||||||
|
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||||
-- eseguo movimenti
|
-- eseguo movimenti
|
||||||
local Speed = EMT.S
|
local Speed = EMT.S
|
||||||
-- se è macchina a 3 teste con gruppo truciolatore 4 assi
|
-- se è macchina a 3 teste con gruppo truciolatore 4 assi
|
||||||
@@ -914,10 +946,6 @@ function OnRapid()
|
|||||||
EmitMoveDataHead( 3, { Z=EMT.L3, S=Speed})
|
EmitMoveDataHead( 3, { Z=EMT.L3, S=Speed})
|
||||||
EmitMoveDataHead( 3, { B=EMT.R2, C=EMT.R1, S=Speed})
|
EmitMoveDataHead( 3, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||||
EmitMoveStartHead( 3)
|
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
|
-- se gruppo lama dedicato, senza cambio utensile
|
||||||
elseif EgtGetHeadId( 'H38') then
|
elseif EgtGetHeadId( 'H38') then
|
||||||
local B3Home = EgtGetAxisHomePos( 'B3')
|
local B3Home = EgtGetAxisHomePos( 'B3')
|
||||||
@@ -935,16 +963,14 @@ function OnRapid()
|
|||||||
end
|
end
|
||||||
-- muovo in posizione finale
|
-- muovo in posizione finale
|
||||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
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
|
else
|
||||||
EmtSetLastError( 1212, "HEAD not managed")
|
EmtSetLastError( 1212, "HEAD not managed")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
EmitMoveStartHead( 3)
|
||||||
|
-- aspetto esecuzione movimento testa 3
|
||||||
|
EmitMoveWaitHead( 3)
|
||||||
|
-- errore, testa non gestita
|
||||||
end
|
end
|
||||||
-- dati aggancio a trave
|
-- dati aggancio a trave
|
||||||
local BhData = { T=EMT.L1, SetHead=0}
|
local BhData = { T=EMT.L1, SetHead=0}
|
||||||
@@ -998,17 +1024,18 @@ function OnRapid()
|
|||||||
else
|
else
|
||||||
--MyOutput( string.format( 'V1Pos=%.3f V2Pos=%.3f', EMT.V1POS, EMT.V2POS))
|
--MyOutput( string.format( 'V1Pos=%.3f V2Pos=%.3f', EMT.V1POS, EMT.V2POS))
|
||||||
if not EMT.RELOAD and not EMT.ZMAX and #EMT.AUXCMD > 0 and EMT.TO_ZMAX then
|
if not EMT.RELOAD and not EMT.ZMAX and #EMT.AUXCMD > 0 and EMT.TO_ZMAX then
|
||||||
|
local bGotoHome = EMT.HEAD == 'H38' and EMT.ROLL_IN
|
||||||
-- caso speciale in cui bisogna solo cambiare presa aggregato lama sotto
|
-- caso speciale in cui bisogna solo cambiare presa aggregato lama sotto
|
||||||
if EMT.R3_CHANGED then
|
if EMT.R3_CHANGED then
|
||||||
-- EmitZmax è fatta per essere chiamata con utensile attuale. In questo caso l'attuale è già quello con nuova rotazione
|
-- EmitZmax è fatta per essere chiamata con utensile attuale. In questo caso l'attuale è già quello con nuova rotazione
|
||||||
-- Allora salvo l'attuale e imposto il vecchio solo momentanemente, per poi ripristinarlo
|
-- Allora salvo l'attuale e imposto il vecchio solo momentanemente, per poi ripristinarlo
|
||||||
local sBckTcPos = EMT.TCPOS
|
local sBckTcPos = EMT.TCPOS
|
||||||
EMT.TCPOS = EMT.PREVTCPOSREAL_H2
|
EMT.TCPOS = EMT.PREVTCPOSREAL_H2
|
||||||
EmitZmax( false, false, PrevR1, PrevR2, false, false, true)
|
EmitZmax( false, false, PrevR1, PrevR2, false, bGotoHome, true)
|
||||||
EMT.TCPOS = sBckTcPos
|
EMT.TCPOS = sBckTcPos
|
||||||
EMT.R3_CHANGED = nil
|
EMT.R3_CHANGED = nil
|
||||||
else
|
else
|
||||||
EmitZmax( false, false, PrevR1, PrevR2, false, false, true)
|
EmitZmax( false, false, PrevR1, PrevR2, false, bGotoHome, true)
|
||||||
end
|
end
|
||||||
EMT.ZMAX = true
|
EMT.ZMAX = true
|
||||||
EMT.TO_ZMAX = nil
|
EMT.TO_ZMAX = nil
|
||||||
@@ -1084,7 +1111,15 @@ function OnRapid()
|
|||||||
EmitMoveDataHead( 1, { Z=MyMaxZ1, B=0, S=Speed})
|
EmitMoveDataHead( 1, { Z=MyMaxZ1, B=0, S=Speed})
|
||||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||||
EmitMoveDataHead( 1, { X=EMT.L2, S=Speed})
|
EmitMoveDataHead( 1, { X=EMT.L2, S=Speed})
|
||||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
-- se movimento di B > di 90°, spezza il movimento in 2 arrivando alla quota Z con B+-90 e poi muove l'ultimo segmento
|
||||||
|
-- evita collisione con carro X
|
||||||
|
if EMT.R2 > 91 or EMT.R2 < -91 then
|
||||||
|
local dBref = EgtClamp( EMT.R2, -91, 91)
|
||||||
|
EmitMoveDataHead( 1, { Z=EMT.L3, B=dBref, S=Speed})
|
||||||
|
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||||
|
else
|
||||||
|
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||||
|
end
|
||||||
-- caso standard
|
-- caso standard
|
||||||
else
|
else
|
||||||
-- se ero in posizione speciale, prima ruoto poi scendo
|
-- se ero in posizione speciale, prima ruoto poi scendo
|
||||||
@@ -1105,16 +1140,24 @@ function OnRapid()
|
|||||||
-- altrimenti sega a catena
|
-- altrimenti sega a catena
|
||||||
else
|
else
|
||||||
-- se bisogna scrivere tutti gli assi
|
-- se bisogna scrivere tutti gli assi
|
||||||
|
local dSafeZ1 = EgtIf( EMT.TTOTLEN < MinLengthLongCSaw, ParkCSawZ1, ParkLongCSawZ1)
|
||||||
if WriteAllCoordsOnFirstM101 then
|
if WriteAllCoordsOnFirstM101 then
|
||||||
local dSafeZ1 = EgtIf( EMT.TTOTLEN < MinLengthLongCSaw, ParkCSawZ1, ParkLongCSawZ1)
|
|
||||||
EmitMoveDataHead( 1, { X=-ParkCSawX1, Z=dSafeZ1, B=HomeB1, C=HomeC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
EmitMoveDataHead( 1, { X=-ParkCSawX1, Z=dSafeZ1, B=HomeB1, C=HomeC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||||
end
|
end
|
||||||
-- Porto la Z alla giusta quota
|
-- Porto la Z alla giusta quota
|
||||||
if EMT.L3 > HomeZ1 + 1 and abs( EMT.R2) > 89.9 then
|
if EMT.L3 > dSafeZ1 + 1 and abs( EMT.R2) > 89.9 then
|
||||||
EmitMoveDataHead( 1, { X=EMT.L2, S=Speed})
|
EmitMoveDataHead( 1, { X=EMT.L2, S=Speed})
|
||||||
EmitMoveDataHead( 1, { Z=HomeZ1, S=Speed})
|
EmitMoveDataHead( 1, { Z=dSafeZ1, S=Speed})
|
||||||
|
end
|
||||||
|
local dChSawEncumbrance = EMT.L3 + MillOffs - ( ( ChSawLen + MillOffs) * EMT.ADIR[3]) - ( EMT.TTOTLEN * EMT.TDIR[3])
|
||||||
|
local dBeamQuote = DeltaTabZ + EMT.SB + 30
|
||||||
|
if dChSawEncumbrance < dBeamQuote then
|
||||||
|
EmitMoveDataHead( 1, { Z=dSafeZ1, B=EMT.R2, S=Speed})
|
||||||
|
EmitMoveDataHead( 1, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||||
|
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
||||||
|
else
|
||||||
|
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||||
end
|
end
|
||||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
|
||||||
-- se motosega molto lunga, ruoto prima di muovermi in X
|
-- se motosega molto lunga, ruoto prima di muovermi in X
|
||||||
if EMT.TTOTLEN >= MinLengthLongCSaw then
|
if EMT.TTOTLEN >= MinLengthLongCSaw then
|
||||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||||
@@ -1238,6 +1281,8 @@ function OnRapid()
|
|||||||
EmitMoveWaitHead( 2)
|
EmitMoveWaitHead( 2)
|
||||||
-- altrimenti testa 3
|
-- altrimenti testa 3
|
||||||
else
|
else
|
||||||
|
-- eventuale preselezione successiva testa 2
|
||||||
|
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||||
-- selezione testa (posso muovere X solo a Zmax)
|
-- selezione testa (posso muovere X solo a Zmax)
|
||||||
local MyMaxZ3 = EgtGetAxisMax( 'Z3')
|
local MyMaxZ3 = EgtGetAxisMax( 'Z3')
|
||||||
local dSafeZ3 = EgtGetAxisHomePos( 'Z3')
|
local dSafeZ3 = EgtGetAxisHomePos( 'Z3')
|
||||||
@@ -1284,8 +1329,6 @@ function OnRapid()
|
|||||||
end
|
end
|
||||||
|
|
||||||
EmitMoveStartHead( 3)
|
EmitMoveStartHead( 3)
|
||||||
-- eventuale preselezione successiva testa 2
|
|
||||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
|
||||||
-- aspetto esecuzione movimento testa 3
|
-- aspetto esecuzione movimento testa 3
|
||||||
EmitMoveWaitHead( 3)
|
EmitMoveWaitHead( 3)
|
||||||
end
|
end
|
||||||
@@ -1431,7 +1474,7 @@ function OnRapid()
|
|||||||
local nNextTopHSet = GetNextTopHSet( EMT.MCHID)
|
local nNextTopHSet = GetNextTopHSet( EMT.MCHID)
|
||||||
-- ricavo prossimo utensile
|
-- ricavo prossimo utensile
|
||||||
local sNextTool = GetNextTool( EMT.MCHID)
|
local sNextTool = GetNextTool( EMT.MCHID)
|
||||||
local bTopGoHome = ( IsLastPath( EMT.PATHID) and not sNextTool and nHSet == 3) or ( nHSet ~= 2 and nNextTopHSet ~= 0 and nHSet ~= nNextTopHSet) or ( nHSet == 1 and EMT.TTOTLEN > LongTool)
|
local bTopGoHome = ( IsLastPath( EMT.PATHID) and not sNextTool and nHSet == 3) or EMT.HEAD == 'H38' or ( nHSet ~= 2 and nNextTopHSet ~= 0 and nHSet ~= nNextTopHSet) or ( nHSet == 1 and EMT.TTOTLEN > LongTool)
|
||||||
EmitZmax( true, true, EMT.R1p, EMT.R2p, bSplitCut, bTopGoHome, false)
|
EmitZmax( true, true, EMT.R1p, EMT.R2p, bSplitCut, bTopGoHome, false)
|
||||||
-- aggiorno quota finale trave dopo Zmax
|
-- aggiorno quota finale trave dopo Zmax
|
||||||
EMT.L1o = EMT.TPOS
|
EMT.L1o = EMT.TPOS
|
||||||
@@ -2036,12 +2079,16 @@ function PrepareUnload( sCmd, nInd)
|
|||||||
|
|
||||||
local Cmd = EgtSplitString( sCmd)
|
local Cmd = EgtSplitString( sCmd)
|
||||||
if Cmd[1] == '0' then
|
if Cmd[1] == '0' then
|
||||||
-- non interessa
|
if Cmd[3] == 'Manual Unloading' then
|
||||||
|
EMT.MANUAL_UNL = true
|
||||||
|
end
|
||||||
elseif Cmd[1] == '1' then
|
elseif Cmd[1] == '1' then
|
||||||
if Cmd[2] == 'Y2' then
|
if Cmd[2] == 'Y2' then
|
||||||
-- se non è ultima fase e non è fase successiva a scarico su carico c'è una barra sulla pinza Y1
|
-- se non è ultima fase e non è fase successiva a scarico su carico c'è una barra sulla pinza Y1
|
||||||
|
local dUnloadMacroCode = EgtIf( EMT.MANUAL_UNL, 85, 84)
|
||||||
|
EMT.MANUAL_UNL = nil
|
||||||
local bBarOnY = ( EMT.PHASE < EgtGetPhaseCount() and not IsEnd2Phase( EMT.PHASE))
|
local bBarOnY = ( EMT.PHASE < EgtGetPhaseCount() and not IsEnd2Phase( EMT.PHASE))
|
||||||
local MDChar = { Y2=tonumber(Cmd[3]), V2=ParkV2, IniStatY2=1, FinStatY2=-84, BeamVise=EgtIf( bBarOnY, 1, 0), MovType=EgtIf( EMT.CHY_ON, 3, 2)}
|
local MDChar = { Y2=tonumber(Cmd[3]), V2=ParkV2, IniStatY2=1, FinStatY2=-dUnloadMacroCode, BeamVise=EgtIf( bBarOnY, 1, 0), MovType=EgtIf( EMT.CHY_ON, 3, 2)}
|
||||||
table.insert( EMT.MDCHAR, MDChar)
|
table.insert( EMT.MDCHAR, MDChar)
|
||||||
end
|
end
|
||||||
elseif Cmd[1] == '2' then
|
elseif Cmd[1] == '2' then
|
||||||
@@ -2199,6 +2246,9 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function GetV1ToCloseTPA()
|
function GetV1ToCloseTPA()
|
||||||
|
if EMT.MCHPRECUT or EMT.MCHCUT then
|
||||||
|
return false
|
||||||
|
end
|
||||||
local dMaxHeadPos = EMT.MAXMAX[1] + ( EMT.HOVM or 0) - ( EMT.X_OFF or 0)
|
local dMaxHeadPos = EMT.MAXMAX[1] + ( EMT.HOVM or 0) - ( EMT.X_OFF or 0)
|
||||||
local dMinTailPos = EMT.MAXMIN[1] + EMT.LB + EgtIf( IsStartOrMidPhase( EMT.PHASE), 0, ( EMT.HOVM or 0)) - ( EMT.X_OFF or 0)
|
local dMinTailPos = EMT.MAXMIN[1] + EMT.LB + EgtIf( IsStartOrMidPhase( EMT.PHASE), 0, ( EMT.HOVM or 0)) - ( EMT.X_OFF or 0)
|
||||||
--MyOutput( string.format( 'V1 MaxHeadPos=%.3f MinTailPos=%.3f BarLen=%.3f HeadOvm=%.3f V1NextPos=%.3f', dMaxHeadPos, dMinTailPos, EMT.LB, ( EMT.HOVM or 0), EMT.V1NEXTPOS))
|
--MyOutput( string.format( 'V1 MaxHeadPos=%.3f MinTailPos=%.3f BarLen=%.3f HeadOvm=%.3f V1NextPos=%.3f', dMaxHeadPos, dMinTailPos, EMT.LB, ( EMT.HOVM or 0), EMT.V1NEXTPOS))
|
||||||
@@ -2561,9 +2611,9 @@ function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut, bTopGoHome, bUsePrev
|
|||||||
local dPosT = EgtIf( bEnd, EMT.L1o, EMT.TPOS or EMT.L1op)
|
local dPosT = EgtIf( bEnd, EMT.L1o, EMT.TPOS or EMT.L1op)
|
||||||
EmitParkRoller( dPosT, bSplitCut)
|
EmitParkRoller( dPosT, bSplitCut)
|
||||||
end
|
end
|
||||||
-- se non sono esattamente in home, devo ruotare in zona sicura
|
-- se non sono esattamente in home, ruoto dove sono
|
||||||
if abs( dHomeC3 - PrevR1) > 1 or abs( dHomeB3 - PrevR2) > 1 then
|
if abs( dHomeC3 - PrevR1) > 1 or abs( dHomeB3 - PrevR2) > 1 then
|
||||||
EmitMoveDataHead( 3, { X=-SafeX3RotAxis, Fmt=1})
|
--EmitMoveDataHead( 3, { X=-SafeX3RotAxis, Fmt=1})
|
||||||
EmitMoveDataHead( 3, { Z=SafeZ3RotAxis, Fmt=1})
|
EmitMoveDataHead( 3, { Z=SafeZ3RotAxis, Fmt=1})
|
||||||
EmitMoveDataHead( 3, { B=dHomeB3, C=dHomeC3, Fmt=1})
|
EmitMoveDataHead( 3, { B=dHomeB3, C=dHomeC3, Fmt=1})
|
||||||
end
|
end
|
||||||
@@ -2686,8 +2736,8 @@ function EmitParkRoller( dPosT, bSplitCut)
|
|||||||
local dPosY2 = dPosT + EMT.Y2DELTA
|
local dPosY2 = dPosT + EMT.Y2DELTA
|
||||||
local DiffY2 = MyParkY2 - dPosY2
|
local DiffY2 = MyParkY2 - dPosY2
|
||||||
local dMoveY2 = EgtIf( DiffY2 < -0.1, dMoveV2, 0)
|
local dMoveY2 = EgtIf( DiffY2 < -0.1, dMoveV2, 0)
|
||||||
local dTryMoveY2 = max( ParkV2 - dPosT - EMT.LT - EMT.HOVM, MinY2 - dPosY2 + 10)
|
local dTryMoveY2 = max( ParkV2 - dPosT - EMT.LT - EMT.DELTA_LT - EMT.HOVM, MinY2 - dPosY2 + 10)
|
||||||
if ( dPosT + EMT.LT + EMT.HOVM < ParkV1 + ExtraParkV and dPosT + EMT.LT + EMT.HOVM > ParkV2 and dPosY2 + dTryMoveY2 > MinY2) then dMoveY2 = min( dMoveY2, dTryMoveY2) end
|
if ( dPosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM < ParkV1 + ExtraParkV and dPosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM > ParkV2 and dPosY2 + dTryMoveY2 > MinY2) then dMoveY2 = min( dMoveY2, dTryMoveY2) end
|
||||||
--MyOutput( string.format( 'PosT=%.3f LT=%.3f PosY2=%.3f V2POS=%.3f', dPosT, EMT.LT, dPosY2, EMT.V2POS))
|
--MyOutput( string.format( 'PosT=%.3f LT=%.3f PosY2=%.3f V2POS=%.3f', dPosT, EMT.LT, dPosY2, EMT.V2POS))
|
||||||
MDChar.Y2 = dPosY2 + dMoveY2
|
MDChar.Y2 = dPosY2 + dMoveY2
|
||||||
MDChar.MovType = 2
|
MDChar.MovType = 2
|
||||||
|
|||||||
+273
-34
@@ -79,6 +79,14 @@ function OnSimulStart()
|
|||||||
for j = 1, #( vTools or {}) do
|
for j = 1, #( vTools or {}) do
|
||||||
if vTools[j] ~= '' then
|
if vTools[j] ~= '' then
|
||||||
EgtLoadTool( vTcPos[i], j, vTools[j])
|
EgtLoadTool( vTcPos[i], j, vTools[j])
|
||||||
|
-- Aggiunto controllo lunghezza lama minima * 0.9 per ricavare la tolleranza del VMILL
|
||||||
|
if EgtTdbSetCurrTool(vTools[j]) then -- set utensile corrente
|
||||||
|
if EgtTdbGetCurrToolParam( MCH_TP.TYPE) == MCH_TY.SAW_STD or EgtTdbGetCurrToolParam( MCH_TP.TYPE) == MCH_TY.SAW_FLAT then -- controllo tipo utensile sega
|
||||||
|
local dCurrSawLen = EgtTdbGetCurrToolParam( MCH_TP.LEN) * 0.9
|
||||||
|
-- se non definito o minore del valore precedente aggiorna la tolleranza
|
||||||
|
EMT.VMILLTOL = EgtIf( not EMT.VMILLTOL or dCurrSawLen < EMT.VMILLTOL, dCurrSawLen, EMT.VMILLTOL)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
ShowToolInTcPos( vTcPos[i], true)
|
ShowToolInTcPos( vTcPos[i], true)
|
||||||
@@ -152,10 +160,10 @@ function OnSimulStart()
|
|||||||
local nId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( nGrpId, McdData[i].Sub), McdData[i].Name)
|
local nId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( nGrpId, McdData[i].Sub), McdData[i].Name)
|
||||||
if nId then
|
if nId then
|
||||||
table.insert( EMT.MCODET, nId)
|
table.insert( EMT.MCODET, nId)
|
||||||
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' (' .. tostring( nId) .. ') is ok', 4)
|
EgtOutLog( ' Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' (' .. tostring( nId) .. ') is ok', 4)
|
||||||
else
|
else
|
||||||
nMcdNullCnt = nMcdNullCnt + 1
|
nMcdNullCnt = nMcdNullCnt + 1
|
||||||
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is null', 4)
|
EgtOutLog( ' Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is null', 4)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if nMcdNullCnt > 0 then
|
if nMcdNullCnt > 0 then
|
||||||
@@ -163,6 +171,29 @@ function OnSimulStart()
|
|||||||
end
|
end
|
||||||
-- Preparo lista collisioni vuota
|
-- Preparo lista collisioni vuota
|
||||||
EMT.COLLIDE = {}
|
EMT.COLLIDE = {}
|
||||||
|
|
||||||
|
-- si crea gruppo temporaneo appoggio controllo clamping
|
||||||
|
CLAMP_CHECK_GROUP = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'CLAMP_CHECK')
|
||||||
|
CLAMP_CHECK_INTERS = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'CLAMP_INTERS')
|
||||||
|
|
||||||
|
if CLAMP_CHECK_GROUP then
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_GROUP)
|
||||||
|
else
|
||||||
|
local frClampCheckGroup = Frame3d( ORIG(), GDB_FR.FRONT)
|
||||||
|
CLAMP_CHECK_GROUP = EgtGroup( GDB_ID.ROOT, frClampCheckGroup)
|
||||||
|
EgtSetName( CLAMP_CHECK_GROUP, 'CLAMP_CHECK')
|
||||||
|
EgtSetLevel( CLAMP_CHECK_GROUP, GDB_LV.TEMP)
|
||||||
|
EgtSetStatus( CLAMP_CHECK_GROUP, GDB_ST.OFF)
|
||||||
|
end
|
||||||
|
|
||||||
|
if CLAMP_CHECK_INTERS then
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_INTERS)
|
||||||
|
else
|
||||||
|
CLAMP_CHECK_INTERS = EgtGroup( GDB_ID.ROOT)
|
||||||
|
EgtSetName( CLAMP_CHECK_INTERS, 'CLAMP_INTERS')
|
||||||
|
EgtSetLevel( CLAMP_CHECK_INTERS, GDB_LV.TEMP)
|
||||||
|
EgtSetStatus( CLAMP_CHECK_INTERS, GDB_ST.OFF)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -226,7 +257,7 @@ function OnSimulDispositionStart()
|
|||||||
-- determino la risoluzione dello Zmap
|
-- determino la risoluzione dello Zmap
|
||||||
local dTol = 4.71
|
local dTol = 4.71
|
||||||
if EmtGetVMillStep then
|
if EmtGetVMillStep then
|
||||||
dTol = EmtGetVMillStep( b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), 4.71)
|
dTol = EmtGetVMillStep( b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol)
|
||||||
else
|
else
|
||||||
local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ()
|
local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ()
|
||||||
if dArea < 0.075e6 then
|
if dArea < 0.075e6 then
|
||||||
@@ -243,6 +274,7 @@ function OnSimulDispositionStart()
|
|||||||
dTol = 3.77
|
dTol = 3.77
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
dTol = min( dTol, EMT.VMILLTOL or dTol) -- imposto dTol al valore minore tra quello per volume e quello per spessore lama
|
||||||
-- creo lo Zmap
|
-- creo lo Zmap
|
||||||
local VMillId = EgtVolZmapBox( nPartRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB)
|
local VMillId = EgtVolZmapBox( nPartRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB)
|
||||||
if VMillId then
|
if VMillId then
|
||||||
@@ -320,6 +352,10 @@ function OnSimulDispositionStart()
|
|||||||
EMT.LB = b3Bar:getDimX()
|
EMT.LB = b3Bar:getDimX()
|
||||||
EMT.LR = b3Raw:getDimX()
|
EMT.LR = b3Raw:getDimX()
|
||||||
EMT.LT = b3Part:getDimX()
|
EMT.LT = b3Part:getDimX()
|
||||||
|
if b3Part:getMin() then
|
||||||
|
EMT.XMINT = b3Part:getMin():getX() + ( EgtGetAxisPos( 'T') - EgtGetAxisHomePos( 'T'))
|
||||||
|
end
|
||||||
|
EMT.HOVM = EgtGetInfo( nPartRawId or GDB_ID.NULL, 'HOVM', 'd') or 0
|
||||||
EMT.CUTID = EgtGetInfo( EgtGetFirstPartInRawPart( nPartRawId or GDB_ID.NULL) or GDB_ID.NULL, 'CUTID', 'i') or 0
|
EMT.CUTID = EgtGetInfo( EgtGetFirstPartInRawPart( nPartRawId or GDB_ID.NULL) or GDB_ID.NULL, 'CUTID', 'i') or 0
|
||||||
EMT.Y1SPEC = nil
|
EMT.Y1SPEC = nil
|
||||||
-- se vero inizio, assegno solidi per verifica collisione
|
-- se vero inizio, assegno solidi per verifica collisione
|
||||||
@@ -452,10 +488,12 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnSimulToolSelect( dPosA)
|
function OnSimulToolSelect( dPosA)
|
||||||
|
EgtOutLog( '===> ToolSelect : Reset CollisionObj', 4)
|
||||||
-- se utensile non definito, è disposizione ed esco
|
-- se utensile non definito, è disposizione ed esco
|
||||||
if EMT.TOOL == '' then return end
|
if EMT.TOOL == '' then return end
|
||||||
-- recupero dati utensile
|
-- recupero dati utensile
|
||||||
EMT.TOOLTYPE = EgtTdbGetCurrToolParam( MCH_TP.TYPE)
|
EMT.TOOLTYPE = EgtTdbGetCurrToolParam( MCH_TP.TYPE)
|
||||||
|
EMT.TDIAM = EgtTdbGetCurrToolParam( MCH_TP.DIAM)
|
||||||
EMT.TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN)
|
EMT.TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN)
|
||||||
EMT.TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
|
EMT.TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
|
||||||
EMT.TUSERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES)
|
EMT.TUSERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES)
|
||||||
@@ -543,9 +581,9 @@ function OnSimulToolSelect( dPosA)
|
|||||||
-- se attivo Collision Check
|
-- se attivo Collision Check
|
||||||
EMT.SAFEDIST = COLL_SAFE_DIST
|
EMT.SAFEDIST = COLL_SAFE_DIST
|
||||||
if EMT.COLLOBJ then
|
if EMT.COLLOBJ then
|
||||||
local nInd = EgtIf( nSetHead ~= 2, 1001, 1011)
|
local nInd = 1000 + tonumber( string.sub( EMT.HEAD, 2))
|
||||||
AddToolToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd, true)
|
AddToolToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd, true)
|
||||||
AddToolHolderToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd + 1)
|
AddToolHolderToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd + 100)
|
||||||
for i, Coll in ipairs( EMT.COLLOBJ or {}) do
|
for i, Coll in ipairs( EMT.COLLOBJ or {}) do
|
||||||
EmtAddCollisionObjEx( i, Coll.Fr, Coll.Ty, Coll.Mv, Coll.P1, Coll.P2, Coll.P3)
|
EmtAddCollisionObjEx( i, Coll.Fr, Coll.Ty, Coll.Mv, Coll.P1, Coll.P2, Coll.P3)
|
||||||
end
|
end
|
||||||
@@ -646,7 +684,7 @@ function OnSimulToolDeselect( dPrevA)
|
|||||||
-- se passo da testa 1 a 3 scarico aggregato
|
-- se passo da testa 1 a 3 scarico aggregato
|
||||||
if nNextSetHead == 3 then
|
if nNextSetHead == 3 then
|
||||||
-- deposito utensile prelevato da posizioni speciali
|
-- deposito utensile prelevato da posizioni speciali
|
||||||
if EMT.TCPOS == 'T101' or EMT.TCPOS == 'T111' or EMT.TCPOS == 'T121' then
|
if EMT.PREVTCPOS_H1 == 'T101' or EMT.PREVTCPOS_H1 == 'T111' or EMT.PREVTCPOS_H1 == 'T121' then
|
||||||
-- visualizzo utensile su TcPos
|
-- visualizzo utensile su TcPos
|
||||||
ShowToolInTcPos( EMT.PREVTCPOS_H1, true)
|
ShowToolInTcPos( EMT.PREVTCPOS_H1, true)
|
||||||
-- nascondo l'utensile sulla testa
|
-- nascondo l'utensile sulla testa
|
||||||
@@ -704,8 +742,9 @@ function OnSimulToolDeselect( dPrevA)
|
|||||||
-- prendo utensile lama su aggregato
|
-- prendo utensile lama su aggregato
|
||||||
elseif EMT.NEXTHEAD == 'H22' then
|
elseif EMT.NEXTHEAD == 'H22' then
|
||||||
-- aggiungo utensile per verifica collisione
|
-- aggiungo utensile per verifica collisione
|
||||||
AddToolToCollisionObj( EMT.NEXTTOOL, EMT.NEXTHEAD, EMT.NEXTEXIT, 1011, false)
|
local nInd = 1000 + tonumber( string.sub( EMT.NEXTHEAD, 2))
|
||||||
AddToolHolderToCollisionObj( EMT.NEXTTOOL, EMT.NEXTHEAD, EMT.NEXTEXIT, 1011 + 1)
|
AddToolToCollisionObj( EMT.NEXTTOOL, EMT.NEXTHEAD, EMT.NEXTEXIT, nInd, false)
|
||||||
|
AddToolHolderToCollisionObj( EMT.NEXTTOOL, EMT.NEXTHEAD, EMT.NEXTEXIT, nInd + 100)
|
||||||
-- simulo movimento
|
-- simulo movimento
|
||||||
SimulMoveAxis( 'X2', ParkSawX2, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'X2', ParkSawX2, MCH_SIM_STEP.RAPID)
|
||||||
SimulMoveAxes( 'B2', ParkSawB2, MCH_SIM_STEP.COLLROT, 'C2', ParkSawC2, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'B2', ParkSawB2, MCH_SIM_STEP.COLLROT, 'C2', ParkSawC2, MCH_SIM_STEP.COLLROT)
|
||||||
@@ -714,6 +753,7 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnSimulMachiningStart()
|
function OnSimulMachiningStart()
|
||||||
|
EgtOutLog( '===> Start Machining : ' .. EgtGetName( EMT.MCHID), 4)
|
||||||
-- se lavorazione è con gruppo a forare, abilito le altre punte alla lavorazione del VMILL
|
-- se lavorazione è con gruppo a forare, abilito le altre punte alla lavorazione del VMILL
|
||||||
if EMT.HEAD == 'H14' then
|
if EMT.HEAD == 'H14' then
|
||||||
local OtherTools = EgtGetToolsInCurrSetupPos( 'T121')
|
local OtherTools = EgtGetToolsInCurrSetupPos( 'T121')
|
||||||
@@ -722,7 +762,7 @@ function OnSimulMachiningStart()
|
|||||||
if OtherTools[i] ~= '' and OtherTools[i] ~= EMT.TOOL then
|
if OtherTools[i] ~= '' and OtherTools[i] ~= EMT.TOOL then
|
||||||
EmtAddToolForVmill( OtherTools[i], 'H14', i, EMT.VMILL)
|
EmtAddToolForVmill( OtherTools[i], 'H14', i, EMT.VMILL)
|
||||||
-- dichiaro utensile per verifica collisioni
|
-- dichiaro utensile per verifica collisioni
|
||||||
local nInd = 1011
|
local nInd = 1000 + tonumber( string.sub( 'H14', 2))
|
||||||
AddToolToCollisionObj( OtherTools[i], 'H14', i, nInd, true)
|
AddToolToCollisionObj( OtherTools[i], 'H14', i, nInd, true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -764,6 +804,8 @@ function OnSimulMachiningStart()
|
|||||||
EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
|
EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
|
||||||
EMT.VMRS = ( EMT.MCHTYPE ~= MCH_MY.DRILLING and not EMT.MCHUSERNOTES:find( 'VMRS=0;', 1, true))
|
EMT.VMRS = ( EMT.MCHTYPE ~= MCH_MY.DRILLING and not EMT.MCHUSERNOTES:find( 'VMRS=0;', 1, true))
|
||||||
EMT.MCHSPLIT = ( EMT.MCHUSERNOTES:find( 'Split;', 1, true) ~= nil)
|
EMT.MCHSPLIT = ( EMT.MCHUSERNOTES:find( 'Split;', 1, true) ~= nil)
|
||||||
|
EMT.MCHPRECUT = ( EMT.MCHUSERNOTES:find( 'Precut;', 1, true) ~= nil)
|
||||||
|
EMT.MCHCUT = ( EMT.MCHUSERNOTES:find( 'Cut;', 1, true) ~= nil)
|
||||||
-- recupero TASKID e CUTID della feature lavorata (CUTID va recuperato qui per le pareti)
|
-- recupero TASKID e CUTID della feature lavorata (CUTID va recuperato qui per le pareti)
|
||||||
local vId = EgtGetMachiningGeometry()
|
local vId = EgtGetMachiningGeometry()
|
||||||
if vId and #vId > 0 and #vId[1] > 0 then
|
if vId and #vId > 0 and #vId[1] > 0 then
|
||||||
@@ -789,9 +831,9 @@ function OnSimulMachiningStart()
|
|||||||
-- dichiaro utensile per Vmill
|
-- dichiaro utensile per Vmill
|
||||||
EmtAddToolForVmill( sDouTool, sDouHead, nDouExit, EMT.VMILL)
|
EmtAddToolForVmill( sDouTool, sDouHead, nDouExit, EMT.VMILL)
|
||||||
-- dichiaro utensile per verifica collisioni
|
-- dichiaro utensile per verifica collisioni
|
||||||
local nInd = 1011
|
local nInd = 1000 + tonumber( string.sub( sDouHead, 2))
|
||||||
AddToolToCollisionObj( sDouTool, sDouHead, nDouExit, nInd, true)
|
AddToolToCollisionObj( sDouTool, sDouHead, nDouExit, nInd, true)
|
||||||
AddToolHolderToCollisionObj( sDouTool, sDouHead, nDouExit, nInd + 1)
|
AddToolHolderToCollisionObj( sDouTool, sDouHead, nDouExit, nInd + 100)
|
||||||
-- salvo dati
|
-- salvo dati
|
||||||
EMT.DOU_TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN)
|
EMT.DOU_TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN)
|
||||||
EMT.DOU_TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
|
EMT.DOU_TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
|
||||||
@@ -808,19 +850,17 @@ function OnSimulMachiningStart()
|
|||||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||||
if nSetHead ~= 1 and ( EMT.PREVTOOL_H1 and EMT.PREVHEAD_H1) then
|
if nSetHead ~= 1 and ( EMT.PREVTOOL_H1 and EMT.PREVHEAD_H1) then
|
||||||
local nPrevExit_H1 = 1
|
local nPrevExit_H1 = 1
|
||||||
local nInd_H1 = 1001
|
local nInd_H1 = 1000 + tonumber( string.sub( EMT.PREVHEAD_H1, 2))
|
||||||
AddToolToCollisionObj( EMT.PREVTOOL_H1, EMT.PREVHEAD_H1, nPrevExit_H1, nInd_H1, true)
|
AddToolToCollisionObj( EMT.PREVTOOL_H1, EMT.PREVHEAD_H1, nPrevExit_H1, nInd_H1, true)
|
||||||
AddToolHolderToCollisionObj( EMT.PREVTOOL_H1, EMT.PREVHEAD_H1, nPrevExit_H1, nInd_H1 + 1)
|
AddToolHolderToCollisionObj( EMT.PREVTOOL_H1, EMT.PREVHEAD_H1, nPrevExit_H1, nInd_H1 + 100)
|
||||||
end
|
end
|
||||||
if nSetHead ~= 2 and ( EMT.PREVTOOL_H2 and EMT.PREVHEAD_H2) then
|
if nSetHead ~= 2 and ( EMT.PREVTOOL_H2 and EMT.PREVHEAD_H2) then
|
||||||
local nPrevExit_H2 = 1
|
local nPrevExit_H2 = 1
|
||||||
local nInd_H2 = 1011
|
local nInd_H2 = 1000 + tonumber( string.sub( EMT.PREVHEAD_H2, 2))
|
||||||
AddToolToCollisionObj( EMT.PREVTOOL_H2, EMT.PREVHEAD_H2, nPrevExit_H2, nInd_H2, true)
|
AddToolToCollisionObj( EMT.PREVTOOL_H2, EMT.PREVHEAD_H2, nPrevExit_H2, nInd_H2, true)
|
||||||
AddToolHolderToCollisionObj( EMT.PREVTOOL_H2, EMT.PREVHEAD_H2, nPrevExit_H2, nInd_H2 + 1)
|
AddToolHolderToCollisionObj( EMT.PREVTOOL_H2, EMT.PREVHEAD_H2, nPrevExit_H2, nInd_H2 + 100)
|
||||||
end
|
end
|
||||||
if nSetHead ~= 3 and IsHeadExisting( 3) then
|
if nSetHead ~= 3 and IsHeadExisting( 3) then
|
||||||
local nPrevExit_H3 = 1
|
|
||||||
local nInd_H3 = 1001
|
|
||||||
local sHeadName
|
local sHeadName
|
||||||
if EgtGetHeadId( 'H39') then
|
if EgtGetHeadId( 'H39') then
|
||||||
sHeadName = 'H39'
|
sHeadName = 'H39'
|
||||||
@@ -829,8 +869,10 @@ function OnSimulMachiningStart()
|
|||||||
else
|
else
|
||||||
EmtSetLastError( 1212, "HEAD not managed")
|
EmtSetLastError( 1212, "HEAD not managed")
|
||||||
end
|
end
|
||||||
AddToolToCollisionObj( nil, sHeadName, nPrevExit_H3, 1001)
|
local nPrevExit_H3 = 1
|
||||||
AddToolHolderToCollisionObj( nil, sHeadName, nPrevExit_H3, 1002)
|
local nInd_H3 = 1000 + tonumber( string.sub( sHeadName, 2))
|
||||||
|
AddToolToCollisionObj( nil, sHeadName, nPrevExit_H3, nInd_H3)
|
||||||
|
AddToolHolderToCollisionObj( nil, sHeadName, nPrevExit_H3, nInd_H3 + 100)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- se precedente in doppio ma ora solo testa 1 e non in sicurezza
|
-- se precedente in doppio ma ora solo testa 1 e non in sicurezza
|
||||||
@@ -901,6 +943,17 @@ function OnSimulPathStart()
|
|||||||
EMT.TO_FALL = true
|
EMT.TO_FALL = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- dump oggetti di collisione
|
||||||
|
if DumpCollisionObj then
|
||||||
|
DumpCollisionObj( ' ==> CollisionObj :', 4)
|
||||||
|
end
|
||||||
|
-- se taglio di precut verifico quanto è più lungo il grezzo rispetto al pezzo (non tiene conto dell'ultimo cubetto)
|
||||||
|
EMT.DELTA_LT = 0
|
||||||
|
if EMT.MCHPRECUT then
|
||||||
|
local dCosA = sqrt( max( 1 - EMT.EXTR[1] * EMT.EXTR[1], 0))
|
||||||
|
EMT.DELTA_LT = max( EMT.XMINT - Point3d( EMT.MMAX):getX() - dCosA * EMT.TDIAM / 2, 0)
|
||||||
|
EgtOutLog( 'PreCutDeltaLT='..EgtNumToString( EMT.DELTA_LT, 3), 5)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -1036,7 +1089,15 @@ function OnSimulMoveStart()
|
|||||||
SimulMoveAxes( 'Z1', MyMaxZ1, MCH_SIM_STEP.RAPID, 'B1', 0, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'Z1', MyMaxZ1, MCH_SIM_STEP.RAPID, 'B1', 0, MCH_SIM_STEP.COLLROT)
|
||||||
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||||
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||||
SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
-- se movimento di B > di 90°, spezza il movimento in 2 arrivando alla quota Z con B+-90 e poi muove l'ultimo segmento
|
||||||
|
-- evita collisione con carro X
|
||||||
|
if EMT.R2 > 91 or EMT.R2 < -91 then
|
||||||
|
local dBref = EgtClamp( EMT.R2, -91, 91)
|
||||||
|
SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', dBref, MCH_SIM_STEP.COLLROT)
|
||||||
|
SimulMoveAxis( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
|
else
|
||||||
|
SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
|
end
|
||||||
-- caso standard
|
-- caso standard
|
||||||
else
|
else
|
||||||
-- se bisogna scrivere tutti gli assi
|
-- se bisogna scrivere tutti gli assi
|
||||||
@@ -1062,14 +1123,24 @@ function OnSimulMoveStart()
|
|||||||
end
|
end
|
||||||
-- altrimenti sega a catena
|
-- altrimenti sega a catena
|
||||||
else
|
else
|
||||||
|
local dSafeZ1 = EgtIf( EMT.TTOTLEN < MinLengthLongCSaw, ParkCSawZ1, ParkLongCSawZ1)
|
||||||
-- Porto la Z alla giusta quota
|
-- Porto la Z alla giusta quota
|
||||||
if Z1Pos > Z1Home + 1 and abs( B1Pos) > 89.9 then
|
if Z1Pos > dSafeZ1 + 1 and abs( B1Pos) > 89.9 then
|
||||||
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||||
SimulMoveAxis( 'Z1', Z1Home, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'Z1', dSafeZ1, MCH_SIM_STEP.RAPID)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- se movimento iniziale da Zmax
|
-- se movimento iniziale da Zmax
|
||||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||||
SimulMoveAxes( 'Z1', Z1Home, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
local dChSawEncumbrance = EMT.L3 + MillOffs - ( ( ChSawLen + MillOffs) * EMT.ADIR[3]) - ( EMT.TTOTLEN * EMT.TDIR[3])
|
||||||
|
local dBeamQuote = DeltaTabZ + EMT.SB + 30
|
||||||
|
if dChSawEncumbrance < dBeamQuote then
|
||||||
|
SimulMoveAxes( 'Z1', dSafeZ1, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
|
SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||||
|
SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||||
|
else
|
||||||
|
SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
|
end
|
||||||
-- se motosega molto lunga, ruoto prima di muovermi in X
|
-- se motosega molto lunga, ruoto prima di muovermi in X
|
||||||
if EMT.TTOTLEN >= MinLengthLongCSaw then
|
if EMT.TTOTLEN >= MinLengthLongCSaw then
|
||||||
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||||
@@ -1197,6 +1268,12 @@ function OnSimulMoveStart()
|
|||||||
EMT.A6n = 'Z2'
|
EMT.A6n = 'Z2'
|
||||||
local Z2 = -Head2Z + MillOffs + Mill2Offs + EMT.L3
|
local Z2 = -Head2Z + MillOffs + Mill2Offs + EMT.L3
|
||||||
EMT.A6 = EgtClamp( Z2, MinZ2, MaxZ2)
|
EMT.A6 = EgtClamp( Z2, MinZ2, MaxZ2)
|
||||||
|
-- dato che la testa 2 è slave, bisogna controllare eventuale extra-corsa da post
|
||||||
|
if not( EMT.MOVE == 0 and EMT.FLAG == 2) and Z2 > MaxZ2 then
|
||||||
|
local sErr = EMT.MCHNAME..' ==> Out of Stroke: Z2 : '.. EgtNumToString( Z2-MaxZ2, 2)
|
||||||
|
EmtSetLastError( 1220, sErr, true)
|
||||||
|
EgtOutBox( sErr, 'ERROR')
|
||||||
|
end
|
||||||
EMT.A6m = EgtIf( ( EMT.MOVE == 2 or EMT.MOVE == 3), 'Z1', nil)
|
EMT.A6m = EgtIf( ( EMT.MOVE == 2 or EMT.MOVE == 3), 'Z1', nil)
|
||||||
EMT.A7n = 'C2'
|
EMT.A7n = 'C2'
|
||||||
EMT.A7 = EMT.R1
|
EMT.A7 = EMT.R1
|
||||||
@@ -1227,6 +1304,12 @@ function OnSimulMoveStart()
|
|||||||
EMT.DOU_DRILL_END = EMT.L3p - EMT.L3
|
EMT.DOU_DRILL_END = EMT.L3p - EMT.L3
|
||||||
Z2 = Z2 - 2 * EMT.DOU_DRILL_END
|
Z2 = Z2 - 2 * EMT.DOU_DRILL_END
|
||||||
end
|
end
|
||||||
|
-- dato che la testa 2 è slave, bisogna controllare eventuale extra-corsa da post
|
||||||
|
if not( EMT.MOVE == 0 and EMT.FLAG == 2) and Z2 < MinZ2 then
|
||||||
|
local sErr = EMT.MCHNAME..' ==> Out of Stroke: Z2 : '.. EgtNumToString( MinZ2-Z2, 2)
|
||||||
|
EmtSetLastError( 1220, sErr, true)
|
||||||
|
EgtOutBox( sErr, 'ERROR')
|
||||||
|
end
|
||||||
EMT.A6 = EgtClamp( Z2, MinZ2, MaxZ2)
|
EMT.A6 = EgtClamp( Z2, MinZ2, MaxZ2)
|
||||||
EMT.A6m = nil
|
EMT.A6m = nil
|
||||||
EMT.A7n = 'C2'
|
EMT.A7n = 'C2'
|
||||||
@@ -1240,6 +1323,12 @@ function OnSimulMoveStart()
|
|||||||
local sErr = 'Z1 Z2 tools in collision (distance=' .. EgtNumToString( dDistToolZ1Z2, 1) .. ')'
|
local sErr = 'Z1 Z2 tools in collision (distance=' .. EgtNumToString( dDistToolZ1Z2, 1) .. ')'
|
||||||
EmtSetLastError( 1208, sErr)
|
EmtSetLastError( 1208, sErr)
|
||||||
end
|
end
|
||||||
|
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||||
|
local B2Home = EgtGetAxisHomePos( 'B2')
|
||||||
|
local C2Home = EgtGetAxisHomePos( 'C2')
|
||||||
|
SimulMoveAxes( 'X2', SafeX2, MCH_SIM_STEP.RAPID, 'C2', C2Home, MCH_SIM_STEP.RAPROT, 'B2', B2Home, MCH_SIM_STEP.RAPROT)
|
||||||
|
SimulMoveAxis( 'X2', X2, MCH_SIM_STEP.RAPID)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- se necessario ...
|
-- se necessario ...
|
||||||
@@ -1338,7 +1427,7 @@ function OnSimulMoveEnd()
|
|||||||
-- ricavo prossimo utensile
|
-- ricavo prossimo utensile
|
||||||
local sNextTool = GetNextTool( EMT.MCHID)
|
local sNextTool = GetNextTool( EMT.MCHID)
|
||||||
-- vado in home se è ultimo movimento ed è ultima lavorazione
|
-- vado in home se è ultimo movimento ed è ultima lavorazione
|
||||||
local bToXhome = ( IsLastPath( EMT.PATHID) and not sNextTool and nHSet == 3) or ( nHSet == 1 and EMT.TTOTLEN > LongTool)
|
local bToXhome = ( IsLastPath( EMT.PATHID) and not sNextTool and nHSet == 3) or EMT.HEAD == 'H38' or ( nHSet == 1 and EMT.TTOTLEN > LongTool)
|
||||||
-- eseguo
|
-- eseguo
|
||||||
ExecMoveZmax( EMT.MCHSPLIT, bToXhome)
|
ExecMoveZmax( EMT.MCHSPLIT, bToXhome)
|
||||||
EMT.TO_ZMAX = nil
|
EMT.TO_ZMAX = nil
|
||||||
@@ -1377,10 +1466,10 @@ function OnSimulCollision()
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
local Class = ''
|
local Class = ''
|
||||||
if EMT.SIMCOBIND == 1001 or EMT.SIMCOBIND == 1011 then
|
if EMT.SIMCOBIND > 1000 and EMT.SIMCOBIND < 1099 then
|
||||||
Class = 'T_'..EMT.HEAD
|
Class = 'T_H'.. tostring( EMT.SIMCOBIND - 1000)
|
||||||
elseif EMT.SIMCOBIND == 1002 or EMT.SIMCOBIND == 1012 then
|
elseif EMT.SIMCOBIND > 1100 and EMT.SIMCOBIND < 1199 then
|
||||||
Class = 'TH_'..EMT.HEAD
|
Class = 'TH_H'..tostring( EMT.SIMCOBIND - 1100)
|
||||||
else
|
else
|
||||||
Class = EMT.COLLOBJ[EMT.SIMCOBIND].Cl
|
Class = EMT.COLLOBJ[EMT.SIMCOBIND].Cl
|
||||||
end
|
end
|
||||||
@@ -1656,9 +1745,9 @@ function ExecMoveZmax( bMchSplit, bGoToHome)
|
|||||||
SimulMoveAxes( 'B3', ParkB3, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'B3', ParkB3, MCH_SIM_STEP.COLLROT)
|
||||||
elseif EgtGetHeadId( 'H38') then
|
elseif EgtGetHeadId( 'H38') then
|
||||||
local MyMaxZ3 = EgtGetAxisMax( 'Z3')
|
local MyMaxZ3 = EgtGetAxisMax( 'Z3')
|
||||||
-- se non sono esattamente in home, devo ruotare in zona sicura
|
-- se non sono esattamente in home, ruoto dove sono
|
||||||
if abs( HomeC - CurrC) > 1 or abs( HomeB - CurrB) > 1 then
|
if abs( HomeC - CurrC) > 1 or abs( HomeB - CurrB) > 1 then
|
||||||
SimulMoveAxis( 'X3', SafeX3RotAxis, MCH_SIM_STEP.RAPID)
|
-- SimulMoveAxis( 'X3', SafeX3RotAxis, MCH_SIM_STEP.RAPID)
|
||||||
SimulMoveAxis( 'Z3', SafeZ3RotAxis, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'Z3', SafeZ3RotAxis, MCH_SIM_STEP.RAPID)
|
||||||
SimulMoveAxes( 'C3', HomeC, MCH_SIM_STEP.COLLROT, 'B3', HomeB, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'C3', HomeC, MCH_SIM_STEP.COLLROT, 'B3', HomeB, MCH_SIM_STEP.COLLROT)
|
||||||
end
|
end
|
||||||
@@ -1725,16 +1814,163 @@ function ExecUnloading()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function CheckClamping( sClampName)
|
||||||
|
nIndexClamp = EgtGetAxisId( sClampName)
|
||||||
|
local idClampPath = EgtGetFirstInGroup( EgtGetFirstNameInGroup( nIndexClamp, 'CLAMP_CHECK') or GDB_ID.NULL)
|
||||||
|
local b3ClampingArea = EgtGetBBoxGlob( idClampPath or GDB_ID.NULL, GDB_BB.STANDARD)
|
||||||
|
-- se non trovo percorso area di clamping, esco subito
|
||||||
|
if not idClampPath or not EMT.VMILL or not ClampingCoeffMin then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local function GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth)
|
||||||
|
local idCurveList = {}
|
||||||
|
local vtIntersPlane
|
||||||
|
-- piano di interpolazione
|
||||||
|
if sIntersPlane == 'X' then
|
||||||
|
vtIntersPlane = X_AX()
|
||||||
|
elseif sIntersPlane == 'Y' then
|
||||||
|
vtIntersPlane = Y_AX()
|
||||||
|
elseif sIntersPlane == 'Z' then
|
||||||
|
vtIntersPlane = Z_AX()
|
||||||
|
end
|
||||||
|
|
||||||
|
for i = 1, #EMT.VMILL do
|
||||||
|
local b3VMill = EgtGetBBoxGlob( EMT.VMILL[i], GDB_BB.EXACT)
|
||||||
|
local ptPosIntersPlane
|
||||||
|
if sPosIntersPlane == 'MIN' then
|
||||||
|
ptPosIntersPlane = b3VMill:getMin() + dDepth * vtIntersPlane
|
||||||
|
elseif sPosIntersPlane == 'MAX' then
|
||||||
|
ptPosIntersPlane = b3VMill:getMax() - dDepth * vtIntersPlane
|
||||||
|
end
|
||||||
|
|
||||||
|
local idLoop, nLoopCnt = EgtPlaneVolZmapInters( ptPosIntersPlane, vtIntersPlane, EMT.VMILL[i], CLAMP_CHECK_INTERS, GDB_RT.GLOB)
|
||||||
|
-- se c'è almeno una curva
|
||||||
|
if idLoop then
|
||||||
|
for j = 1, nLoopCnt do
|
||||||
|
local idLoopTemp = idLoop + j - 1
|
||||||
|
table.insert( idCurveList, idLoopTemp)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return idCurveList
|
||||||
|
end
|
||||||
|
|
||||||
|
local function CalculateIntersectionArea( sPosIntersPlane, sIntersPlane, dDepth)
|
||||||
|
-- test piano frontale
|
||||||
|
local idCurveList = GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth)
|
||||||
|
|
||||||
|
-- si copia curva intersezione e curva pinza in gruppo di confronto
|
||||||
|
local idFlatSurf, nFlatSurfCnt = EgtSurfFlatRegion( CLAMP_CHECK_GROUP, idCurveList)
|
||||||
|
local idClampSurf = EgtSurfFlatRegion( CLAMP_CHECK_GROUP, idClampPath)
|
||||||
|
|
||||||
|
if idFlatSurf then
|
||||||
|
local dTotalArea = 0
|
||||||
|
local dTotalXLenght = 0
|
||||||
|
for k = 1, nFlatSurfCnt do
|
||||||
|
local idTempSurf = idFlatSurf + k - 1
|
||||||
|
EgtSurfFrIntersect( idTempSurf, idClampSurf)
|
||||||
|
if idTempSurf then
|
||||||
|
dTotalArea = dTotalArea + ceil( EgtSurfArea( idTempSurf) or 0)
|
||||||
|
local b3BoxIntersectionBox = EgtGetBBoxGlob( idTempSurf, GDB_BB.STANDARD)
|
||||||
|
if b3BoxIntersectionBox then
|
||||||
|
dTotalXLenght = dTotalXLenght + ceil( b3BoxIntersectionBox:getDimX()) -- somma lunghezze (x) delle aree pinzate
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return dTotalArea, dTotalXLenght
|
||||||
|
end
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
-- minima area considerata per un corretto pinzaggio
|
||||||
|
DistZClampToTable = DistZClampToTable or 0
|
||||||
|
local MinJoin = BD.GetMinJoin( EMT.HB, EMT.SB, EgtIf( EMT.SPLIT, EMT.LT, EMT.LB))
|
||||||
|
local MinZClamping = min( b3ClampingArea:getDimZ() + DistZClampToTable, EMT.SB) - DistZClampToTable
|
||||||
|
-- si moltiplica per un coefficiente minimo sotto al quale si da l'errore di pinzaggio
|
||||||
|
ClampingCoeffMin = EgtClamp( ClampingCoeffMin, 0.01, 1)
|
||||||
|
local dMinClampingAreaWarn = ( MinJoin * MinZClamping) * ClampingCoeffMin
|
||||||
|
local dMinClampingAreaErr = ( MinJoin * MinZClamping) * ( ClampingCoeffMin / 3)
|
||||||
|
|
||||||
|
local bError = true
|
||||||
|
local sWrn, sErr
|
||||||
|
local bWriteWarnMessage = false
|
||||||
|
local bWriteErrMessage = false
|
||||||
|
-- controllo faccia frontale
|
||||||
|
local dArea, dXClampedLenght = CalculateIntersectionArea( 'MIN', 'Y', 3)
|
||||||
|
-- ERRORE: pinza troppo poco (meno di 1/3 del minimo richiesto)
|
||||||
|
if dArea and dArea < dMinClampingAreaErr then
|
||||||
|
-- solo se pinza almeno 1cm2, e la somma della lunghezza pinzata è maggiore della lunghezza minima pinzabile da Warning e non errore
|
||||||
|
if dXClampedLenght >= MinJoin * ClampingCoeffMin and dArea > 1000 then
|
||||||
|
bError = false
|
||||||
|
end
|
||||||
|
-- pinzaggio non fattibile, errore
|
||||||
|
if bError then
|
||||||
|
sErr = 'ERROR CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
||||||
|
bWriteErrMessage = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- WARNING: pinza meno del minimo richiesto
|
||||||
|
if dArea and dArea < dMinClampingAreaWarn and not bWriteErrMessage then
|
||||||
|
sWrn = 'WARNING CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
||||||
|
bWriteWarnMessage = true
|
||||||
|
end
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_GROUP)
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_INTERS)
|
||||||
|
|
||||||
|
-- controllo altro lato solo se non sono già in errore
|
||||||
|
if not bWriteErrMessage then
|
||||||
|
-- controllo faccia posteriore
|
||||||
|
dArea = CalculateIntersectionArea( 'MAX', 'Y', 3)
|
||||||
|
-- ERRORE: pinza troppo poco (meno di 1/3 del minimo richiesto)
|
||||||
|
if dArea and dArea < dMinClampingAreaErr then
|
||||||
|
-- solo se pinza almeno 1cm2, e la somma della lunghezza pinzata è maggiore della lunghezza minima pinzabile da Warning e non errore
|
||||||
|
if dXClampedLenght >= MinJoin * ClampingCoeffMin and dArea > 1000 then
|
||||||
|
bError = false
|
||||||
|
end
|
||||||
|
-- pinzaggio non fattibile, errore
|
||||||
|
if bError then
|
||||||
|
sErr = 'ERROR CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
||||||
|
bWriteErrMessage = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- WARNING: pinza meno del minimo richiesto
|
||||||
|
if dArea and dArea < dMinClampingAreaWarn and not bWriteWarnMessage and not bWriteErrMessage then
|
||||||
|
sWrn = 'WARNING CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
||||||
|
bWriteWarnMessage = true
|
||||||
|
end
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_GROUP)
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_INTERS)
|
||||||
|
end
|
||||||
|
|
||||||
|
if bWriteErrMessage then
|
||||||
|
EmtSetLastError( 1213, sErr, EgtGetEnableUI())
|
||||||
|
EgtOutBox( sErr, 'CLAMPING', 'ERROR', 'OK')
|
||||||
|
EmtSetSimulPause()
|
||||||
|
elseif bWriteWarnMessage then
|
||||||
|
EgtOutLog( sWrn)
|
||||||
|
EgtOutBox( sWrn, 'CLAMPING', 'WARNING', 'OK')
|
||||||
|
EmtSetSimulPause()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function ExecMovePY1( bClose)
|
function ExecMovePY1( bClose)
|
||||||
SimulMoveAxes( 'PY1', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
SimulMoveAxes( 'PY1', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
||||||
SetPY1Light( bClose)
|
SetPY1Light( bClose)
|
||||||
|
if bClose then
|
||||||
|
CheckClamping( 'PY1')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function ExecMovePY2( bClose)
|
function ExecMovePY2( bClose)
|
||||||
SimulMoveAxes( 'PY2', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
SimulMoveAxes( 'PY2', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
||||||
SetPY2Light( bClose)
|
SetPY2Light( bClose)
|
||||||
|
if bClose then
|
||||||
|
CheckClamping( 'PY2')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -1852,8 +2088,8 @@ function ExecParkRoller( PosY1, PosY2, PosV1, PosV2, bSpliCut, bAgg)
|
|||||||
local MoveV2 = ParkV2 - PosV2
|
local MoveV2 = ParkV2 - PosV2
|
||||||
local DiffY2 = MyParkY2 - PosY2
|
local DiffY2 = MyParkY2 - PosY2
|
||||||
local MoveY2 = EgtIf( DiffY2 < -0.1, MoveV2, 0)
|
local MoveY2 = EgtIf( DiffY2 < -0.1, MoveV2, 0)
|
||||||
local TryMoveY2 = max( ParkV2 - PosT - EMT.LT, MinY2 - PosY2 + 10)
|
local TryMoveY2 = max( ParkV2 - PosT - EMT.LT - EMT.DELTA_LT - EMT.HOVM, MinY2 - PosY2 + 10)
|
||||||
if ( PosT + EMT.LT < ParkV1 + ExtraParkV and PosT + EMT.LT > ParkV2 and PosY2 + TryMoveY2 > MinY2) then MoveY2 = min( MoveY2, TryMoveY2) end
|
if ( PosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM < ParkV1 + ExtraParkV and PosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM > ParkV2 and PosY2 + TryMoveY2 > MinY2) then MoveY2 = min( MoveY2, TryMoveY2) end
|
||||||
if not SimulMoveAxes( 'T', PosT + MoveY2, MCH_SIM_STEP.RAPID,
|
if not SimulMoveAxes( 'T', PosT + MoveY2, MCH_SIM_STEP.RAPID,
|
||||||
'V1', ParkV1, MCH_SIM_STEP.RAPID,
|
'V1', ParkV1, MCH_SIM_STEP.RAPID,
|
||||||
'V2', ParkV2, MCH_SIM_STEP.RAPID,
|
'V2', ParkV2, MCH_SIM_STEP.RAPID,
|
||||||
@@ -2086,6 +2322,9 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function GetV1ToClose()
|
function GetV1ToClose()
|
||||||
|
if EMT.MCHPRECUT or EMT.MCHCUT then
|
||||||
|
return false
|
||||||
|
end
|
||||||
--EgtOutLog( string.format( 'L1m=%.3f L1M=%.3f V2NP=%.3f LB=%.3f', EMT.MAXMIN[1], EMT.MAXMAX[1], EMT.V2NEXTPOS, EMT.LB))
|
--EgtOutLog( string.format( 'L1m=%.3f L1M=%.3f V2NP=%.3f LB=%.3f', EMT.MAXMIN[1], EMT.MAXMAX[1], EMT.V2NEXTPOS, EMT.LB))
|
||||||
--EgtOutLog( string.format( 'LB=%.3f LT=%.3f', EMT.LB, EMT.LT or 0))
|
--EgtOutLog( string.format( 'LB=%.3f LT=%.3f', EMT.LB, EMT.LT or 0))
|
||||||
return ( EMT.MAXMAX[1] <= EMT.V1NEXTPOS + RollCageMin and EMT.MAXMIN[1] + EMT.LB >= EMT.V1NEXTPOS + RollCageMax)
|
return ( EMT.MAXMAX[1] <= EMT.V1NEXTPOS + RollCageMin and EMT.MAXMIN[1] + EMT.LB >= EMT.V1NEXTPOS + RollCageMax)
|
||||||
@@ -2755,9 +2994,9 @@ end
|
|||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function RollerParkingNeeded( sHead, dAng1p, dAng2p, dAng1, dAng2)
|
function RollerParkingNeeded( sHead, dAng1p, dAng2p, dAng1, dAng2)
|
||||||
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H16' then
|
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H16' then
|
||||||
return ( abs( dAng1 - dAng1p) > 1 or ( abs( dAng2 - dAng2p) > 1 and abs( dAng1 % 180.0) > 1))
|
return ( abs( dAng1 - dAng1p) > 1 or ( abs( dAng2 - dAng2p) > 1 and abs( dAng1) % 180.0 > 1))
|
||||||
elseif sHead == 'H21' or sHead == 'H22' then
|
elseif sHead == 'H21' or sHead == 'H22' then
|
||||||
return ( abs( dAng1 - dAng1p) > 1 or ( abs( dAng2 - dAng2p) > 1 and abs( dAng1 % 180.0) > 1))
|
return ( abs( dAng1 - dAng1p) > 1 or ( abs( dAng2 - dAng2p) > 1 and abs( dAng1) % 180.0 > 1))
|
||||||
elseif sHead == 'H38' then
|
elseif sHead == 'H38' then
|
||||||
return ( abs( dAng1 - dAng1p) > 1 or abs( dAng2 - dAng2p) > 1)
|
return ( abs( dAng1 - dAng1p) > 1 or abs( dAng2 - dAng2p) > 1)
|
||||||
end
|
end
|
||||||
|
|||||||
+97
-6
@@ -7,6 +7,66 @@ EgtEnableDebug( false)
|
|||||||
-- Carico libreria
|
-- Carico libreria
|
||||||
local BD = require( 'BeamData')
|
local BD = require( 'BeamData')
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
-- *** Generic Machinings ***
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
require( 'EmtGenMachining')
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
-- *** Special GetPrevMachiningOffset ***
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
-----------------------------------------------------------------------------------------
|
||||||
|
function OnSpecialGetPrevMachiningOffset()
|
||||||
|
-- Aggiorno posizione della testa della trave a seguito di movimenti delle pinze non previsti tra le fasi
|
||||||
|
local function TPosUpdate()
|
||||||
|
local nClId = EgtGetFirstNameInGroup( EMC.CURRMCHID, 'CL') -- recupero Id del gruppo CL della lavorazione corrente
|
||||||
|
local nPathId = EgtGetFirstInGroup( nClId or GDB_ID.NULL) -- Id del primo gruppo nella lavorazione (P1)
|
||||||
|
if not nPathId then
|
||||||
|
EMC.ERR = 12
|
||||||
|
EMC.MSG = ' Error : CL group path not found'
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local dAuxMoveCount = EgtGetInfo( nPathId, 'AS#', 'd') or 0 -- numero di movimenti ausiliari
|
||||||
|
local dTRepos = nil
|
||||||
|
-- controlla ogni gruppo di movimenti ausiliari
|
||||||
|
for i = 1, dAuxMoveCount do
|
||||||
|
local aAuxMove = EgtGetInfo( nPathId, 'AS' .. tostring( i), 'vs') or {} -- array contenete i parametri di ogni gruppo
|
||||||
|
-- controlla solo i movimenti della testa trave e salva l'ultimo
|
||||||
|
if aAuxMove[1] == '2' or aAuxMove[1] == '3' then
|
||||||
|
for j = 2, #aAuxMove do
|
||||||
|
if aAuxMove[j] == 'T' then
|
||||||
|
dTRepos = aAuxMove[j+1]
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return dTRepos
|
||||||
|
end
|
||||||
|
|
||||||
|
-- default
|
||||||
|
EMC.ERR = 0
|
||||||
|
EMC.PREVOFFSX = 0
|
||||||
|
|
||||||
|
-- se c'è cambio di fase tra le lavorazioni (quindi la precedente è l'ultima della sua fase e la corrente la prima)
|
||||||
|
if EMC.PREVPHASE ~= EMC.CURRPHASE then
|
||||||
|
-- se la fase corrente è di inizio lavorazione di nuova trave
|
||||||
|
if IsStartOrRestPhase( EMC.CURRPHASE) then
|
||||||
|
-- recupero la posizione finale della lavorazione precedente
|
||||||
|
local vPrevAx = EmtGetFinalAxesPos( EMC.PREVMCHID)
|
||||||
|
-- ricava se e quanto la trave viene spostata tra le due fasi dai movimenti ausiliari e corregge l'offset di fine fase
|
||||||
|
local dNewTPos = TPosUpdate()
|
||||||
|
-- se ci sono dei movimenti della testa trave tra le due fasi ricava il delta tra la vecchia e la nuova posizione
|
||||||
|
if dNewTPos then
|
||||||
|
EMC.PREVOFFSX = dNewTPos - vPrevAx[1]
|
||||||
|
-- oppure la X (L1) di questa corrisponde alla posizione iniziale della nuova trave, se ne deduce l'offset
|
||||||
|
else
|
||||||
|
EMC.PREVOFFSX = ParkV1 - vPrevAx[1]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- *** Special Z moves ***
|
-- *** Special Z moves ***
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -88,7 +148,7 @@ function OnSpecialGetMaxZ()
|
|||||||
local vMZ = {{ Tz=0.85, Ez=440}, { Tz=0.5, Ez=200}, { Tz=-0.01, Ez=5}, { Tz=-0.5, Ez=1}}
|
local vMZ = {{ Tz=0.85, Ez=440}, { Tz=0.5, Ez=200}, { Tz=-0.01, Ez=5}, { Tz=-0.5, Ez=1}}
|
||||||
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
||||||
else
|
else
|
||||||
local vMZ = {{ Tz=0.85, Ez=400}, { Tz=0.7, Ez=300}, { Tz=0.5, Ez=195}, { Tz=0.15, Ez=70}, { Tz=-0.01, Ez=5}, { Tz=-0.5, Ez=1}}
|
local vMZ = {{ Tz=0.85, Ez=400}, { Tz=0.7, Ez=300}, { Tz=0.5, Ez=195}, { Tz=0.15, Ez=60}, { Tz=-0.01, Ez=5}, { Tz=-0.5, Ez=1}}
|
||||||
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
||||||
end
|
end
|
||||||
elseif EMC.HEAD == 'H16' then
|
elseif EMC.HEAD == 'H16' then
|
||||||
@@ -108,7 +168,7 @@ function OnSpecialGetMaxZ()
|
|||||||
local vMZ = {{ Tz=0.85, Ez=440}, { Tz=0.5, Ez=200}, { Tz=-0.01, Ez=5}, { Tz=-0.5, Ez=1}}
|
local vMZ = {{ Tz=0.85, Ez=440}, { Tz=0.5, Ez=200}, { Tz=-0.01, Ez=5}, { Tz=-0.5, Ez=1}}
|
||||||
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
||||||
else
|
else
|
||||||
local vMZ = {{ Tz=0.85, Ez=400}, { Tz=0.7, Ez=300}, { Tz=0.5, Ez=195}, { Tz=0.15, Ez=70}, { Tz=-0.01, Ez=5}, { Tz=-0.5, Ez=1}}
|
local vMZ = {{ Tz=0.85, Ez=400}, { Tz=0.7, Ez=300}, { Tz=0.5, Ez=195}, { Tz=0.15, Ez=60}, { Tz=-0.01, Ez=5}, { Tz=-0.5, Ez=1}}
|
||||||
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
||||||
end
|
end
|
||||||
elseif EMC.HEAD == 'H21' then
|
elseif EMC.HEAD == 'H21' then
|
||||||
@@ -517,6 +577,24 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnPostApplyMachining()
|
function OnPostApplyMachining()
|
||||||
|
-- Inizializzo codice di errore
|
||||||
|
EMC.ERR = 0
|
||||||
|
-- Verifico se ultima lavorazione della fase
|
||||||
|
local nNextOpeId = EgtGetNextActiveOperation( EMC.MCHID)
|
||||||
|
local bMchLast = ( not nNextOpeId or EgtGetOperationPhase( nNextOpeId) ~= EMC.PHASE) -- Agisco sui diversi percorsi della lavorazione
|
||||||
|
local nPathId = EgtGetFirstInGroup( EgtGetFirstNameInGroup( EMC.MCHID, 'CL') or GDB_ID.NULL)
|
||||||
|
while nPathId do
|
||||||
|
-- recupero id del successivo
|
||||||
|
nPathId = EgtGetNext( nPathId)
|
||||||
|
-- verifico se ultimo percorso di ultima lavorazione della fase
|
||||||
|
local bLast = ( bMchLast and ( not nPathId))
|
||||||
|
-- se ultimo, elimino ritorno in home
|
||||||
|
if bLast then EgtRemoveOperationHome( EMC.MCHID) end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function OnSpecialApplyMachining()
|
||||||
|
|
||||||
EgtOutLog( ' Lavorazione : ' .. EgtGetName( EMC.MCHID) .. ' (' .. tostring( EMC.MCHID) .. ')')
|
EgtOutLog( ' Lavorazione : ' .. EgtGetName( EMC.MCHID) .. ' (' .. tostring( EMC.MCHID) .. ')')
|
||||||
|
|
||||||
@@ -609,7 +687,7 @@ function OnPostApplyMachining()
|
|||||||
-- verifico se ultimo percorso di ultima lavorazione della fase
|
-- verifico se ultimo percorso di ultima lavorazione della fase
|
||||||
local bLast = ( bMchLast and ( not nPathId))
|
local bLast = ( bMchLast and ( not nPathId))
|
||||||
-- se ultimo, elimino ritorno in home
|
-- se ultimo, elimino ritorno in home
|
||||||
if bLast then EgtRemoveOperationHome( EMC.MCHID) end
|
-- if bLast then EgtRemoveOperationHome( EMC.MCHID) end
|
||||||
-- salvo lo stato dei carrelli
|
-- salvo lo stato dei carrelli
|
||||||
local OriTPos = EMC.TPOS
|
local OriTPos = EMC.TPOS
|
||||||
local OriY1Delta = EMC.Y1DELTA
|
local OriY1Delta = EMC.Y1DELTA
|
||||||
@@ -808,6 +886,12 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
|
|||||||
if not EMC.Y2DELTA then
|
if not EMC.Y2DELTA then
|
||||||
EgtOutLog( ' Warning SPLITTING -> separazione con caduta pezzo')
|
EgtOutLog( ' Warning SPLITTING -> separazione con caduta pezzo')
|
||||||
SpecOutputCNT()
|
SpecOutputCNT()
|
||||||
|
-- non funziona ma servirebbe un controllo simile, di modo che non possa avvenire la presenza di un pezzo "FALL" più grande di LEN_VERY_SHORT_PART
|
||||||
|
--if EMC.LT > LEN_VERY_SHORT_PART then
|
||||||
|
-- EMC.ERR = 19
|
||||||
|
-- EMC.MSG = ' Error SPLIT : Y1 or Y2 not clamped'
|
||||||
|
-- return false
|
||||||
|
--end
|
||||||
if IsEndPhase( EMC.PHASE + 1) then
|
if IsEndPhase( EMC.PHASE + 1) then
|
||||||
EgtSetInfo( NextDispId, 'SKIP', '1')
|
EgtSetInfo( NextDispId, 'SKIP', '1')
|
||||||
local NextOpeId = EgtGetNextOperation( NextDispId)
|
local NextOpeId = EgtGetNextOperation( NextDispId)
|
||||||
@@ -1109,7 +1193,7 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del
|
|||||||
-- dopo che si è calcolato il minimo e massimo dell'intervallo, verifico che in testa rimanga almeno il minimo per poter fare passaggio pinze e scaricare
|
-- dopo che si è calcolato il minimo e massimo dell'intervallo, verifico che in testa rimanga almeno il minimo per poter fare passaggio pinze e scaricare
|
||||||
if AuxInfoMach and ( AuxInfoMach.bSplitting or AuxInfoMach.bCutting) then
|
if AuxInfoMach and ( AuxInfoMach.bSplitting or AuxInfoMach.bCutting) then
|
||||||
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST and WorkTab.dY1DeltaMaxF > EMC.LT + BD.MINRAW_S + BD.CHAR_EXTRA_DIST then
|
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST and WorkTab.dY1DeltaMaxF > EMC.LT + BD.MINRAW_S + BD.CHAR_EXTRA_DIST then
|
||||||
WorkTab.dY1DeltaMinF = max( min( EMC.LT + BD.MINRAW_S, WorkTab.dY1DeltaMaxF - 1), WorkTab.dY1DeltaMinF)
|
WorkTab.dY1DeltaMinF = max( min( EMC.LT + BD.MINRAW_S, WorkTab.dY1DeltaMaxF - 1), WorkTab.dY1DeltaMinF + EMC.LT)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1142,7 +1226,9 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del
|
|||||||
WorkTab.dY1DeltaMaxF = min( EMC.LB - MinJoin, MaxY1 + dDistFront + dRollFront + AGG_V)
|
WorkTab.dY1DeltaMaxF = min( EMC.LB - MinJoin, MaxY1 + dDistFront + dRollFront + AGG_V)
|
||||||
WorkTab.dY2DeltaMinF = max( MinJoin + EMC.HCING + EMC.HOVM, EMC.LB + MinY2 - dMyDistBack - AGG_V - dRollBack)
|
WorkTab.dY2DeltaMinF = max( MinJoin + EMC.HCING + EMC.HOVM, EMC.LB + MinY2 - dMyDistBack - AGG_V - dRollBack)
|
||||||
WorkTab.dY2DeltaMaxF = min( dDistFront, EMC.LB - MyMinOther) -- - EMC.TCING
|
WorkTab.dY2DeltaMaxF = min( dDistFront, EMC.LB - MyMinOther) -- - EMC.TCING
|
||||||
if dY1DeltaMaxSP then WorkTab.dY1DeltaMaxF = min( WorkTab.dY1DeltaMaxF, dY1DeltaMaxSP) end
|
if dY1DeltaMaxSP and dY1DeltaMaxSP > WorkTab.dY1DeltaMinF then
|
||||||
|
WorkTab.dY1DeltaMaxF = min( WorkTab.dY1DeltaMaxF, dY1DeltaMaxSP)
|
||||||
|
end
|
||||||
if dY2DeltaMinUL then WorkTab.dY2DeltaMinF = max( WorkTab.dY2DeltaMinF, dY2DeltaMinUL) end
|
if dY2DeltaMinUL then WorkTab.dY2DeltaMinF = max( WorkTab.dY2DeltaMinF, dY2DeltaMinUL) end
|
||||||
WorkTab.dV1PosF = dRollBack
|
WorkTab.dV1PosF = dRollBack
|
||||||
WorkTab.bV1CloseF = false
|
WorkTab.bV1CloseF = false
|
||||||
@@ -1320,7 +1406,9 @@ function SpecCalcUnload()
|
|||||||
table.insert( vCmd, { 2, 'T', dFinT, 'Y2', dFinY2})
|
table.insert( vCmd, { 2, 'T', dFinT, 'Y2', dFinY2})
|
||||||
EgtOutLog( ' Y2PosF=' .. EgtNumToString( dFinY2), 1)
|
EgtOutLog( ' Y2PosF=' .. EgtNumToString( dFinY2), 1)
|
||||||
else
|
else
|
||||||
table.insert( vCmd, { 1, 'Y2', MaxY2})
|
local dFinT = min( MaxY2 - EMC.Y2DELTA, max( UnloadT - MaxUnloadLen, MinY2 - EMC.Y2DELTA))
|
||||||
|
local dFinY2 = dFinT + EMC.Y2DELTA
|
||||||
|
table.insert( vCmd, { 2, 'T', dFinT, 'Y2', dFinY2})
|
||||||
end
|
end
|
||||||
-- apro la morsa
|
-- apro la morsa
|
||||||
table.insert( vCmd, { 12, 0})
|
table.insert( vCmd, { 12, 0})
|
||||||
@@ -2447,6 +2535,9 @@ function SpecOutputCmds( vCmd, bEnd)
|
|||||||
-- commento
|
-- commento
|
||||||
if Cmd[1] == 0 then
|
if Cmd[1] == 0 then
|
||||||
local sInfo = '0,'..Cmd[2]
|
local sInfo = '0,'..Cmd[2]
|
||||||
|
if Cmd[3] then
|
||||||
|
sInfo = sInfo..','..Cmd[3]
|
||||||
|
end
|
||||||
EgtSetInfo( EMC.PATHID, sKey, sInfo)
|
EgtSetInfo( EMC.PATHID, sKey, sInfo)
|
||||||
-- movimento di 1 asse
|
-- movimento di 1 asse
|
||||||
elseif Cmd[1] == 1 then
|
elseif Cmd[1] == 1 then
|
||||||
|
|||||||
@@ -1,5 +1,59 @@
|
|||||||
==== Common_PF1250 Update Log ====
|
==== Common_PF1250 Update Log ====
|
||||||
|
|
||||||
|
Versione 3.1e2 (15/05/2026)
|
||||||
|
- (SIM-GEN) Corretta gestione scarico manuale ( errore in versione 3.1e1)
|
||||||
|
|
||||||
|
Versione 3.1e1 (12/05/2026)
|
||||||
|
- (SIM-GEN) Corretta SIM (muoveva Y2 a MaxY2 senza aprire pinza) e GEN (non chiudeva rulliere e dava extracorsa e non generava P7=-85) di pezzi lunghi che necessitano lo scarico manuale. Ticket#2971
|
||||||
|
|
||||||
|
Versione 3.1c1
|
||||||
|
- (SIM-GEN) Corretto calcolo rimanenza durante ParkRoller. Ticket#2832
|
||||||
|
- (SIM) Corretto caricamento geometrie di collisioni. Modificato indice di collisione per una migliore gestione. ATT: MIN_MACH -> 3.1b2
|
||||||
|
- (SIM-GEN) Aggiunta OnSpecialApplyMachining per calcolare i carrelli da subito
|
||||||
|
- Aggiungendo OnSpecialApplyMachining, ora la OnSpecialGetPrevMachiningOffset lavora correttamente. Ticket#2798
|
||||||
|
- (SIM-GEN) Solo se dY1DeltaMaxSP > WorkTab.dY1DeltaMinF lo prende in considerazione per il valore di WorkTab.dY1DeltaMaxF Ticket#2798
|
||||||
|
|
||||||
|
Versione 3.1b1 (17/02/2026)
|
||||||
|
- (GEN) Generazione non allineata a simulazione. Ticket#2819
|
||||||
|
|
||||||
|
Versione 3.1a2 (30/01/2026)
|
||||||
|
- (SIM) Allineato approccio simulazione a generazione in caso di lavorazione in doppio verticale. Ticket#2781
|
||||||
|
- (GEN) Simulazione non allineata a generazione. Mancava reset flag di pezzo a caduta. Ticket#2798
|
||||||
|
|
||||||
|
Versione 3.1a1 (16/01/2026)
|
||||||
|
- (SIM-GEN) Corretto movimento di approccio con sega a catena e allineati Simulazione e Generazione. Ticket#2771
|
||||||
|
|
||||||
|
Versione 2.7l1 (18/12/2025)
|
||||||
|
- (SIM-GEN) Aggiunto controllo post movimenti ausiliari dell' EMC.PREVOFFSX nella funzione OnSpecialGetPrevMachiningOffset() come su ONE-PF. Ticket#2727
|
||||||
|
- (SIM-GEN) Cambiato delta di correzione Z per lama con inclinazione >= 81° da 70 a 60 mm. Risoluzione Ticket#2210
|
||||||
|
- (SIM-GEN) Divisione movimento B in approccio se > 90°.
|
||||||
|
|
||||||
|
Versione 2.7k5 (26/11/2025)
|
||||||
|
- (SIM) Migliorata funzione CheckClamping, ora il controllo di warning si basa sulla somma delle lunghezze delle aree pinzate
|
||||||
|
|
||||||
|
Versione 2.7k4 (25/11/2025)
|
||||||
|
- (SIM) Migliorata funzione CheckClamping, ora la sezione rientra di 3 mm
|
||||||
|
|
||||||
|
Versione 2.7k3 (21/11/2025)
|
||||||
|
- (SIM-GEN) Corretto problema riposizionamento carrelli. Ticket#2704
|
||||||
|
- (SIM) Aggiornata risoluzione VMillTol in funzione dello spessore lama
|
||||||
|
|
||||||
|
Versione 2.7k2 (19/11/2025)
|
||||||
|
- (SIM-GEN) Con testa H38 si va in home quando testa viene comandata a Zmassima. Ticket#2703_b
|
||||||
|
|
||||||
|
Versione 2.7k1 (19/11/2025)
|
||||||
|
- (GEN) Preselzione testa 1 spostata prima della selezione testa 3. Ticket#2513
|
||||||
|
- (SIM-GEN) Corretto calcolo per decidere se serve aprire i rulli
|
||||||
|
- (SIM) Aggiunto controllo Extra-Corsa testa 2 in caso di lavorazione in doppio. Ticket#2201
|
||||||
|
- (SIM) Prima versione controllo pinzaggio su VMILL. Per attivarlo serve modifica della macchina a MLDE e NGE.
|
||||||
|
- (GEN) Simulazione non allineata a generazione. Se testa H38 e si chiudono i rulli, si deve andare in home. Ticket#2703
|
||||||
|
|
||||||
|
Versione 2.7i1 (08/09/2025)
|
||||||
|
- (GEN) Se fase start o restart, si aggiorna la posizione in X dell'asse per calcolare il link corretto. Serve CAM5 2.7h1 (facoltativo)
|
||||||
|
- (EST) La stima tempi considera ora le accelerazoni degli assi
|
||||||
|
- (SIM) Corretto controllo ultimo utensile utilizzato su testa 1, prima si controllava il precedente, ma poteva essere la testa 2
|
||||||
|
- (SIM-GEN) Se testa 3 deve salire a ZMAX, sale alla X dove si trova e non torna in home
|
||||||
|
|
||||||
Versione 2.7h2 (21/08/2025)
|
Versione 2.7h2 (21/08/2025)
|
||||||
- (GEN) Se la testa rimane bassa, corretto caso di reset del piano generico a fine lavorazione
|
- (GEN) Se la testa rimane bassa, corretto caso di reset del piano generico a fine lavorazione
|
||||||
- (GEN) Corretto movimento in Z massima dopo scarico pezzo
|
- (GEN) Corretto movimento in Z massima dopo scarico pezzo
|
||||||
|
|||||||
+2
-2
@@ -3,8 +3,8 @@
|
|||||||
|
|
||||||
local InfoCommon_STD_PP = {
|
local InfoCommon_STD_PP = {
|
||||||
NAME = 'Common_PF1250', -- nome script PP standard
|
NAME = 'Common_PF1250', -- nome script PP standard
|
||||||
VERSION = '2.7h2', -- versione script
|
VERSION = '3.1e2', -- versione script
|
||||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
MIN_MACH_VER_PP_COMMON = '3.1b2' -- versione minima kernel
|
||||||
}
|
}
|
||||||
|
|
||||||
return InfoCommon_STD_PP
|
return InfoCommon_STD_PP
|
||||||
|
|||||||
Reference in New Issue
Block a user