Compare commits
28 Commits
TestNewBigSplit
...
2.7k3
| Author | SHA1 | Date | |
|---|---|---|---|
| 7d0f491909 | |||
| 4165843cf9 | |||
| 61bb0aa701 | |||
| f3f9f38c84 | |||
| 4b12300100 | |||
| 1f93f2f45a | |||
| 718d2ceee3 | |||
| d85a6e3ba3 | |||
| 605400d40c | |||
| 3576c6ac11 | |||
| dc43388def | |||
| 3102d381ed | |||
| 3e80505457 | |||
| 7d1749c9ab | |||
| 900cc65fb0 | |||
| 7850144992 | |||
| d6c384d159 | |||
| b314c701fb | |||
| 1c731d2f51 | |||
| 9da267149a | |||
| ee7db694e6 | |||
| b66f238ca5 | |||
| edd07a5bc5 | |||
| 5825c0f292 | |||
| 7e5738ffa9 | |||
| 947a2c27ae | |||
| b6f4304daa | |||
| 4cb36a2899 |
@@ -67,6 +67,8 @@ local BeamData = {
|
||||
KIOTP = 6, -- coefficiente moltiplicativo per attacco/uscita lama tangente anzichè perpendicolare
|
||||
MAXDIAM_POCK_CORNER = 31, -- diametro massimo utensile ammesso per tasche con angoli interni
|
||||
USE_LONGCUT = false, -- per i tagli longitudinali usare solo la lavorazione di lama LongCut
|
||||
PRECUT_HEAD = true, -- flag abilitazione pretaglio grezzo a zero in testa
|
||||
PRECUT_TAIL = true, -- flag abilitazione pretaglio grezzo a zero in coda
|
||||
ADVANCE_TAIL_CUT = true, -- per spostare prima del taglio di separazione il taglio di coda su pezzi corti con robabile caduta
|
||||
ADVANCE_TAIL_OFFS = 1, -- accorciamento taglio di coda avanzato (minimo 1)
|
||||
CLAMP5 = false -- presenza pinza speciale per pezzi piccoli
|
||||
@@ -96,6 +98,16 @@ if EgtExistsFile( sData) then
|
||||
BeamData.DIM_STRIP_SMALL = Machine.Offsets.DIM_STRIP_SMALL or BeamData.DIM_STRIP_SMALL
|
||||
BeamData.DIM_TO_CENTER_STRIP = Machine.Offsets.DIM_TO_CENTER_STRIP or BeamData.DIM_TO_CENTER_STRIP
|
||||
BeamData.MAXDIAM_POCK_CORNER = Machine.Offsets.MAXDIAM_POCK_CORNER or BeamData.MAXDIAM_POCK_CORNER
|
||||
if Machine.Offsets.PRECUT_HEAD_DISABLE then BeamData.PRECUT_HEAD = ( Machine.Offsets.PRECUT_HEAD_DISABLE == 0) end
|
||||
if Machine.Offsets.PRECUT_TAIL_DISABLE then BeamData.PRECUT_TAIL = ( Machine.Offsets.PRECUT_TAIL_DISABLE == 0) end
|
||||
BeamData.LONGCUT_ENDLEN = Machine.Offsets.LONGCUT_ENDLEN or BeamData.LONGCUT_ENDLEN
|
||||
BeamData.LONGCUT_MAXLEN = Machine.Offsets.LONGCUT_MAXLEN or BeamData.LONGCUT_MAXLEN
|
||||
BeamData.ADVANCE_TAIL_OFFS = Machine.Offsets.ADVANCE_TAIL_OFFS or BeamData.ADVANCE_TAIL_OFFS
|
||||
BeamData.LEN_VERY_SHORT_PART = Machine.Offsets.LEN_VERY_SHORT_PART or BeamData.LEN_VERY_SHORT_PART
|
||||
BeamData.LEN_SHORT_PART = Machine.Offsets.LEN_SHORT_PART or BeamData.LEN_SHORT_PART
|
||||
BeamData.OVM_MID = Machine.Offsets.OVM_MID or BeamData.OVM_MID
|
||||
if Machine.Offsets.ROT90 ~= nil then BeamData.ROT90 = ( Machine.Offsets.ROT90 == 1) end
|
||||
if Machine.Offsets.CUT_SIC then BeamData.CUT_SIC = EgtClamp( Machine.Offsets.CUT_SIC, 15, 50) end
|
||||
end
|
||||
if Machine.Trave then
|
||||
BeamData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
17=ProfTCone
|
||||
18=SmallToolContour
|
||||
19=AntiSplintMillCut
|
||||
20=SideMillAsBlade
|
||||
21=Prof_end
|
||||
|
||||
[Pocketing]
|
||||
1=Pocket
|
||||
|
||||
+88
-67
@@ -27,7 +27,10 @@ function OnStart()
|
||||
--EMT.LINEINC = 1 -- incremento numerazione linee
|
||||
--EMT.Ft = 'F' -- token per feed
|
||||
--EMT.St = 'S' -- token per speed
|
||||
EMT.FMAXPINZE = 102000 -- feed massima pinze
|
||||
EMT.FMAXPINZE = EgtClamp( MaxFeedPinze or 102000, 20000, 102000) -- feed massima pinze
|
||||
EMT.MAXACC = MaxAcc or ( EMT.FMAXPINZE / ( 60 * 0.3)) -- accelerazione massima pinze
|
||||
EMT.MINACC = MinAcc or ( EMT.FMAXPINZE / ( 60 * 4)) -- accelerazione minima pinze
|
||||
|
||||
-- utensili default
|
||||
EMT.PREVTCPOS_H1 = DefTcPos1
|
||||
EMT.PREVTCPOS_H2 = DefTcPos2
|
||||
@@ -56,6 +59,7 @@ function OnProgramStart()
|
||||
end
|
||||
EmtOutput( sPrefixCommentLine..'('.. CSP_INFO..')')
|
||||
EmtOutput( sPrefixCommentLine..'('.. MACHINE_INFO..')\n')
|
||||
EmtOutput( '(HEADER)')
|
||||
-- Se modalità test, aggiungo linee per muovere tappeto e alzare la testa (in automatico viene fatto dal main residente)
|
||||
if TEST_USE then
|
||||
EmitTestProgramStart()
|
||||
@@ -103,6 +107,7 @@ function OnProgramEnd()
|
||||
EMT.SPECSPLIT = nil
|
||||
EMT.RELOAD = nil
|
||||
EMT.RELOAD2 = nil
|
||||
EmtOutput( '(FOOTER)')
|
||||
-- Se modalità test, termino il programma
|
||||
if TEST_USE then
|
||||
EmtOutput( 'M02')
|
||||
@@ -124,6 +129,11 @@ function OnToolData()
|
||||
local sOut = 'L1='..EgtNumToString( EMT.SMAX, 0)..' L2='..EmtLenToString( EMT.TDIST or ChSawLen, 1)
|
||||
sOut = sOut .. EgtIf( EMT.TCPOS == 'T111', ' G76H9998.2N411N414', ' G76H9998.2N511N514')
|
||||
EmtOutput( '('..sOut..')')
|
||||
-- emissione dati aggregato BlockHaus
|
||||
elseif EMT.HEAD == 'H17' then
|
||||
sPos = EgtIf( #EMT.TCPOS == 2, EMT.TCPOS:gsub( 'T', 'N30'), EMT.TCPOS:gsub( 'T', 'N3'))
|
||||
local sOut = 'L1='..EgtNumToString( EMT.SMAX, 0)..' L2='..EmtLenToString( ( AngTrBHOffs), 1)..' G76H9998.2'..sPos..sPos
|
||||
EmtOutput( '('..sOut..')')
|
||||
-- emissione dati utensile (esclusa sega a catena)
|
||||
else
|
||||
-- output info
|
||||
@@ -137,7 +147,6 @@ function OnToolData()
|
||||
if EMT.TCPOS == 'T201' then
|
||||
sPos = 'N411'
|
||||
else
|
||||
|
||||
sPos = EgtIf( #EMT.TCPOS == 2, EMT.TCPOS:gsub( 'T', 'N30'), EMT.TCPOS:gsub( 'T', 'N3'))
|
||||
end
|
||||
local sOut = 'L1='..EgtNumToString( EMT.SMAX, 0)..' L2='..EmtLenToString( dAddLen + EMT.TTOTLEN, 1)..' G76H9998.2'..sPos..sPos
|
||||
@@ -305,8 +314,12 @@ function OnDispositionEnd()
|
||||
else
|
||||
if #EMT.MDCHAR > 0 then
|
||||
MyOutputNoNum( '(PART UNLOAD)')
|
||||
-- movimento intermedio di apertura pinza-rulli per evitare di trovare delle collisioni
|
||||
EmitParkRoller( EMT.TPOS, false, false)
|
||||
for i = 1, #EMT.MDCHAR do
|
||||
EmitMoveDataChars( EMT.MDCHAR[i])
|
||||
if EMT.MDCHAR[i].V1 then EMT.V1POS = EMT.MDCHAR[i].V1 end
|
||||
if EMT.MDCHAR[i].V2 then EMT.V2POS = EMT.MDCHAR[i].V2 end
|
||||
end
|
||||
EmitMoveStartChars( 2)
|
||||
-- se dopo c'è scarico spezzone devo mettere attesa termine esecuzione
|
||||
@@ -322,7 +335,8 @@ function OnDispositionEnd()
|
||||
end
|
||||
elseif EMT.SPECUNLOADING then
|
||||
EmtOutput( '(PART SPEC UNLOADING)')
|
||||
EmitBeamHeadData( { T=EMT.L1, Pz5=2})
|
||||
local dAbsHeadPos = EMT.L1pp or EMT.L1
|
||||
EmitBeamHeadData( { T=dAbsHeadPos, Pz5=2})
|
||||
EMT.SPECUNLOADING = nil
|
||||
EMT.W2DELTA = nil
|
||||
-- emissione conclusione pezzo precedente
|
||||
@@ -603,6 +617,7 @@ function OnMachiningEnd()
|
||||
EMT.PREVTOOL = EMT.TOOL
|
||||
EMT.PREVHEAD = EMT.HEAD
|
||||
EMT.PREVTCPOS = EMT.TCPOS
|
||||
|
||||
-- se taglio finale, aggiorno lunghezza barra
|
||||
if EMT.MCHCUT then
|
||||
EMT.LB = EMT.LT + ( EMT.X_OFF or 0)
|
||||
@@ -667,9 +682,9 @@ function OnPathStart()
|
||||
if EMT.TOOL == EMT.PREVTOOL and not EMT.ZMAX then
|
||||
EMT.L1pp = EMT.L1op
|
||||
EMT.L2pp = EMT.L2op
|
||||
EMT.L3pp = EMT.L3op
|
||||
EMT.R1pp = EMT.R1p
|
||||
EMT.R2pp = EMT.R2p
|
||||
EMT.L3pp = EMT.L3op or EMT.L3pp
|
||||
EMT.R1pp = EMT.R1p or EMT.R1pp
|
||||
EMT.R2pp = EMT.R2p or EMT.R2pp
|
||||
else
|
||||
EMT.L1pp = nil
|
||||
EMT.L2pp = nil
|
||||
@@ -1031,7 +1046,7 @@ function OnRapid()
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
local bMoveZbeforeX = false
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H22' and ( EgtIf( BD.RIGHT_LOAD, EMT.L2 < -LimX2RotSaw, EMT.L2 > -LimX2RotSaw) or EMT.R2 > 91) then
|
||||
if EMT.HEAD == 'H22' and ( EgtIf( BD.RIGHT_LOAD, EMT.L2 < -LimX1RotSaw, EMT.L2 > -LimX1RotSaw) or EMT.R2 > 91) then
|
||||
dZref = min( dSafeZ2 + GetZExtra( EMT.HEAD, EMT.R2) - 100, MyMaxZ2)
|
||||
end
|
||||
|
||||
@@ -1046,18 +1061,23 @@ function OnRapid()
|
||||
end
|
||||
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
if EMT.HEAD == 'H22' and abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC2 - EMT.R1) > 30.1 or abs( HomeB2 - EMT.R2) > 30.1) then
|
||||
EmitMoveDataHead( 2, { B=0, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { Z=dZref, B=EMT.R2, S=Speed})
|
||||
if bMoveZbeforeX then
|
||||
EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed})
|
||||
if abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC2 - EMT.R1) > 30.1 or abs( HomeB2 - EMT.R2) > 30.1) then
|
||||
if EMT.HEAD == 'H22' then
|
||||
EmitMoveDataHead( 2, { B=0, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { Z=dZref, B=EMT.R2, S=Speed})
|
||||
if bMoveZbeforeX then
|
||||
EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
-- altrimenti caso standard
|
||||
else
|
||||
EmitMoveDataHead( 2, { Z=dZref, S=Speed})
|
||||
EmitMoveDataHead( 2, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
if bMoveZbeforeX then
|
||||
EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
end
|
||||
-- altrimenti caso standard
|
||||
else
|
||||
EmitMoveDataHead( 2, { Z=dZref, S=Speed})
|
||||
EmitMoveDataHead( 2, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
@@ -1131,7 +1151,7 @@ function OnRapid()
|
||||
else
|
||||
--EmtOutput( string.format( 'V1Pos=%.3f V2Pos=%.3f', EMT.V1POS, EMT.V2POS))
|
||||
local bToPresel = true
|
||||
if not EMT.RELOAD and not EMT.ZMAX and #EMT.AUXCMD > 0 and EMT.TO_ZMAX then
|
||||
if not EMT.ZMAX and #EMT.AUXCMD > 0 and EMT.TO_ZMAX then
|
||||
-- allontanamento o eventuale preselezione successiva testa differente
|
||||
if not EMT.DOU_TYPE then
|
||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||
@@ -1400,7 +1420,7 @@ function OnRapid()
|
||||
|
||||
local bMoveZbeforeX = false
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H22' and ( EgtIf( BD.RIGHT_LOAD, EMT.L2 > -LimX2RotSaw, EMT.L2 < -LimX2RotSaw) or EMT.R2 < -91) then
|
||||
if EMT.HEAD == 'H22' and ( EgtIf( BD.RIGHT_LOAD, EMT.L2 > -LimX2RotSaw, EMT.L2 > -LimX2RotSaw) or EMT.R2 < -91) then
|
||||
dZref = min( dSafeZ2 + GetZExtra( EMT.HEAD, EMT.R2) - 100, MyMaxZ2)
|
||||
end
|
||||
-- se la quota di lavoro è più in alta della posizione a ZHOME della testa, prima si va alla Z di lavoro e poi si approccia il pezzo
|
||||
@@ -1415,18 +1435,23 @@ function OnRapid()
|
||||
end
|
||||
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
if EMT.HEAD == 'H22' and abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC2 - EMT.R1) > 30.1 or abs( HomeB2 - EMT.R2) > 30.1) then
|
||||
EmitMoveDataHead( 2, { B=0, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { Z=dZref, B=EMT.R2, S=Speed})
|
||||
if bMoveZbeforeX then
|
||||
EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed})
|
||||
if abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC2 - EMT.R1) > 30.1 or abs( HomeB2 - EMT.R2) > 30.1) then
|
||||
if EMT.HEAD == 'H22' then
|
||||
EmitMoveDataHead( 2, { B=0, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { Z=dZref, B=EMT.R2, S=Speed})
|
||||
if bMoveZbeforeX then
|
||||
EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
-- altrimenti caso standard
|
||||
else
|
||||
EmitMoveDataHead( 2, { Z=dZref, S=Speed})
|
||||
EmitMoveDataHead( 2, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
if bMoveZbeforeX then
|
||||
EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
end
|
||||
-- altrimenti caso standard
|
||||
else
|
||||
EmitMoveDataHead( 2, { Z=dZref, S=Speed})
|
||||
EmitMoveDataHead( 2, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
@@ -1502,6 +1527,7 @@ function OnRapid()
|
||||
end
|
||||
EMT.REFLOC = 0
|
||||
EMT.MCHFIRST = false
|
||||
EMT.PLANEACTIVE = true
|
||||
EMT.ZMAX = false
|
||||
-- se standard
|
||||
elseif EMT.FLAG == 0 or EMT.FLAG == 1 or EMT.FLAG == 2 then
|
||||
@@ -1531,6 +1557,7 @@ function OnRapid()
|
||||
EmtOutput( 'M175')
|
||||
end
|
||||
EMT.MCHFIRST = false
|
||||
EMT.PLANEACTIVE = true
|
||||
end
|
||||
-- se necessario, impostazione riferimento locale
|
||||
if EMT.REFLOC == 0 then
|
||||
@@ -1587,7 +1614,7 @@ function OnRapid()
|
||||
MyAdjustLinearAxes()
|
||||
EmtAdjustRotaryAxes()
|
||||
-- se Split o Presplit lascio agganciata solo la pinza Y2 alla fine dei movimenti
|
||||
local sNextTool = GetNextTool( EMT.MCHID)
|
||||
local sNextTool = GetNextTool( EMT.MCHID, true)
|
||||
-- vado in home se è ultimo movimento ed è ultima lavorazione, se sono con motosega e devo cambiare utensile, oppure se ho la lama
|
||||
local bToXhome = ( IsLastPath( EMT.PATHID) and not sNextTool) or ( EMT.HEAD == 'H23' and EMT.TOOL ~= sNextTool) or ( EMT.HEAD == 'H13' and EMT.TOOL ~= sNextTool) or
|
||||
( EMT.HEAD == 'H12' and EMT.TOOL ~= sNextTool ) or ( EMT.HEAD == 'H22' and EMT.TOOL ~= sNextTool) or EMT.MCHSPLIT
|
||||
@@ -1635,6 +1662,7 @@ function OnLinear()
|
||||
EMT.L3p = nil
|
||||
local sDouFlag = EgtIf( EMT.DOU_TYPE, ' EE1', '')
|
||||
EmtOutput( 'G142'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..EMT.IPLGLSTR..EgtIf( nHSet~=2, ' EU1', ' EU2')..sDouFlag..' EF'..GetFmaxClamp())
|
||||
EMT.PLANEACTIVE = true
|
||||
-- emissione movimento
|
||||
local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..
|
||||
EmtGetAxis('R2')..EmtGetAxis('R1')
|
||||
@@ -1718,6 +1746,7 @@ function OnArc()
|
||||
EMT.L3p = nil
|
||||
local sDouFlag = EgtIf( EMT.DOU_TYPE, ' EE1', '')
|
||||
EmtOutput( 'G142'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..EMT.IPLGLSTR..EgtIf( nHSet~=2, ' EU1', ' EU2')..sDouFlag..' EF'..GetFmaxClamp())
|
||||
EMT.PLANEACTIVE = true
|
||||
-- emissione movimento
|
||||
local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..
|
||||
EmtGetAxis('R2')..EmtGetAxis('R1')
|
||||
@@ -1765,28 +1794,6 @@ function OnArc()
|
||||
EmtUpdatePrev()
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function CalcDinamicaPinze( dH, dS, dL)
|
||||
local MinTempoAcc = 0.3 -- [s]
|
||||
local MaxTempoAcc = 4.0 -- [s]
|
||||
local KgMtCubo= WoodDensity or 550 -- densità legno [Kg / metro cubo]
|
||||
local Massa = ( dH * dS * dL * KgMtCubo ) / 1e9 -- massa [Kg]
|
||||
local FMaxPinze = EMT.FMAXPINZE -- Feed massima pinze [mm/min]
|
||||
local ForzaAttrito = 350 * 9.8 * 0.2 -- Forza chiusura pinze [Kgf] * g * Coeff_Attrito -> [N]
|
||||
local TempoAcc = ( ( Massa * FMaxPinze) / ( 60 * ForzaAttrito) / 1000)
|
||||
if ( TempoAcc < MinTempoAcc) then TempoAcc = MinTempoAcc end
|
||||
if ( TempoAcc > MaxTempoAcc) then TempoAcc = MaxTempoAcc end
|
||||
local AccMaxPinze = FMaxPinze / ( 60 * MinTempoAcc)
|
||||
local AccPinze = FMaxPinze / ( 60 * TempoAcc)
|
||||
local RidFeed = 100 / Massa * 100
|
||||
if RidFeed > 100 then
|
||||
RidFeed = 100
|
||||
elseif RidFeed < 10 then
|
||||
RidFeed = 10
|
||||
end
|
||||
return AccPinze, AccMaxPinze, RidFeed
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function CalcCharStatusN( sCmd)
|
||||
-- aperto
|
||||
@@ -2265,7 +2272,7 @@ function PreparePreRotation( sCmd, nInd)
|
||||
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY1=86, FinStatY1=87, BeamVise=0}
|
||||
elseif EMT.SPECSPLIT or EMT.SPLITROT then
|
||||
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), V1=ParkV1, IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, IniStatV1=3, BeamVise=EMT.BV}
|
||||
EMT.V1POS = MDChar.V1
|
||||
EMT.V1NEXTPOS = MDChar.V1
|
||||
else
|
||||
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, BeamVise=EMT.BV}
|
||||
end
|
||||
@@ -2403,6 +2410,9 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetV1ToCloseNum( UseCurrV1)
|
||||
if EMT.MCHPRECUT or EMT.MCHCUT then
|
||||
return false
|
||||
end
|
||||
--EmtOutput( string.format( 'L1m=%.3f L1M=%.3f', EMT.MAXMIN[1], EMT.MAXMAX[1]))
|
||||
--EmtOutput( string.format( 'LB=%.3f LT=%.3f', EMT.LB, EMT.LT))
|
||||
local dV1Pos
|
||||
@@ -2495,10 +2505,15 @@ function MyAdjustLinearAxes()
|
||||
local Len = ( EMT.TDIST or ChSawLen) + Mill2Offs
|
||||
local LenRef = Mill2Offs
|
||||
vtE = Vector3d( EMT.ADIR) * Len - Z_AX() * LenRef
|
||||
elseif EMT.HEAD == 'H17' then
|
||||
local LenAux = AngTrBHOffs + MillOffs
|
||||
local LenRef = MillOffs
|
||||
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
|
||||
vtE = vtAux * LenAux - Z_AX() * LenRef
|
||||
else
|
||||
EmtSetLastError( 1211, 'Head not defined ' .. ( EMT.HEAD or ''))
|
||||
end
|
||||
if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' or EMT.HEAD == 'H13' or EMT.HEAD == 'H15' then
|
||||
if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' or EMT.HEAD == 'H13' or EMT.HEAD == 'H15' or sHead == 'H17' then
|
||||
EMT.L1 = EMT.L1 - vtE:getX()
|
||||
EMT.L2 = EMT.L2 - DeltaTabY - vtE:getY()
|
||||
EMT.L3 = EMT.L3 - DeltaTabZ - vtE:getZ()
|
||||
@@ -2611,6 +2626,9 @@ function GetToolRadLen()
|
||||
-- se sega a catena
|
||||
elseif HeadIsChainSaw( EMT.HEAD) then
|
||||
return EMT.TLEN, ( EMT.TDIST or ChSawLen)
|
||||
-- se aggregato BlockHaus
|
||||
elseif EMT.HEAD == 'H17' then
|
||||
return EMT.TDIAM / 2, AngTrBHOffs
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2632,7 +2650,7 @@ function CalcInterpPlane()
|
||||
local _, dAngV, dAngO = SphericalFromVector( vtE)
|
||||
local dAngO2 = EmtGetAngO2( EMT.IPLGLFR:getVersZ(), EMT.IPLGLFR:getVersX(), dAngV, dAngO)
|
||||
dAngO = dAngO + 90
|
||||
while dAngO >= 360 do
|
||||
while dAngO + 100 * GEO.EPS_SMALL > 360 do
|
||||
dAngO = dAngO - 360
|
||||
end
|
||||
EMT.IPLGLSTR = ' EX0 EY'..EmtLenToString( xS)..' EZ0'..
|
||||
@@ -2784,9 +2802,7 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
||||
local MovH = { Z = EgtIf( dZref > EMT.L3o, dZref, EMT.L3o)}
|
||||
MovH.X = -dXPos ; MovH.B = EgtClamp( PrevR2, -90, 90) ; MovH.C = PrevR1 ;
|
||||
EmitMoveDataHead( 1, MovH)
|
||||
if EMT.HEAD == 'H12' and ( abs( dSafeC1 - PrevR1) > 30.1 or abs( dSafeB1 - PrevR2) > 30.1) or not( bProgress) then
|
||||
EmitMoveDataHead( 1, { Z=dMaxZ1, B=0})
|
||||
end
|
||||
EmitMoveDataHead( 1, { Z=dMaxZ1, B=0})
|
||||
EmitMoveDataHead( 1, { C=dSafeC1})
|
||||
EmitMoveDataHead( 1, { B=dSafeB1})
|
||||
EmitMoveDataHead( 1, { Z=dMaxZ1})
|
||||
@@ -2937,14 +2953,19 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function EmitResetMachining()
|
||||
if ( EMT.TOOL ~= GetNextTool( EMT.MCHID) and IsLastPath( EMT.PATHID)) or GetSpecUnloading( EMT.PATHID) or GetFall( EMT.PATHID) then
|
||||
-- se da MLDE parametro non settato, o settato a true, scrivo il comando arresto mandrino
|
||||
if WriteM05Command == nil or WriteM05Command then
|
||||
if EMT.PLANEACTIVE then
|
||||
-- se non sono a Z massima e operatore deve entrare in cabina spango sempre
|
||||
if not EMT.ZMAX and ( GetSpecUnloading( EMT.PATHID) or GetFall( EMT.PATHID)) then
|
||||
EmtOutput( 'M05')
|
||||
-- altrimenti spegnimento dipende da parametro
|
||||
elseif ( EMT.TOOL ~= GetNextTool( EMT.MCHID, false) and IsLastPath( EMT.PATHID)) or GetSpecUnloading( EMT.PATHID) or GetFall( EMT.PATHID) then
|
||||
EmtOutput( 'M05')
|
||||
end
|
||||
local sOut = 'G157 EA1'
|
||||
EmtOutput( sOut)
|
||||
-- piano non più attivo
|
||||
EMT.PLANEACTIVE = false
|
||||
end
|
||||
local sOut = 'G157 EA1'
|
||||
EmtOutput( sOut)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -3095,7 +3116,7 @@ function PreselectNextDiffHead( nMchId, sHead)
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
end
|
||||
-- Emetto preselezione (non ammessa per sega a catena H13 e H23)
|
||||
-- Emetto preselezione (non ammessa per sega a catena H13 e H23 e aggregato BlockHaus H17)
|
||||
if sNextHead == 'H11' then
|
||||
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sNextTcPos)})
|
||||
EmitMoveStartHead( 1)
|
||||
@@ -3174,7 +3195,7 @@ function EmitTestProgramStart()
|
||||
EmtOutput( 'M12 $START PER SVINCOLO TESTE')
|
||||
EmtOutput( '(SVINCOLO TESTA 1)')
|
||||
EmitMoveDataHead( 1, {Z=ParkZ1-100, TPos=0})
|
||||
if Progress then
|
||||
if Progress or SecondToolChanger then
|
||||
EmtOutput( 'IF E80001<=10 THEN')
|
||||
EmitMoveDataHead( 1, {C=ParkC1, TPos=0})
|
||||
EmitMoveDataHead( 1, {Z=-150, B=ParkB1, TPos=0})
|
||||
|
||||
+155
-60
@@ -24,7 +24,7 @@ end
|
||||
---------------------------------------------------------------------
|
||||
-- *** SIMULATION ***
|
||||
---------------------------------------------------------------------
|
||||
local COLL_SAFE_DIST = 4
|
||||
local COLL_SAFE_DIST = 3
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulInit()
|
||||
@@ -79,6 +79,14 @@ function OnSimulStart()
|
||||
if vTools and vTools[1] and #(vTools[1]) > 0 then
|
||||
EgtLoadTool( vTcPos[i], 1, vTools[1])
|
||||
ShowToolInTcPos( vTcPos[i], true)
|
||||
-- Aggiunto controllo lunghezza lama minima * 0.9 per ricavare la tolleranza del VMILL
|
||||
if EgtTdbSetCurrTool(vTools[1]) 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
|
||||
@@ -129,7 +137,7 @@ function OnSimulStart()
|
||||
end
|
||||
|
||||
-- gruppo CHSAW si attiva solo se progress, one con BIT mortiser o PF
|
||||
if Progress or Mortiser or EgtGetHeadId( 'H21') then
|
||||
if Progress or Mortiser or EgtGetHeadId( 'H21') or SecondToolChanger then
|
||||
table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'CHSAW'})
|
||||
end
|
||||
-- gruppo MORTISER si attiva solo se PF con BIT mortiser attivo
|
||||
@@ -237,19 +245,26 @@ function OnSimulDispositionStart()
|
||||
end
|
||||
end
|
||||
-- determino la risoluzione dello Zmap
|
||||
local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ()
|
||||
local dTol = 4.51
|
||||
if dArea < CoeffVM * 0.5e6 then
|
||||
dTol = 1.01
|
||||
elseif dArea < CoeffVM * 1.2e6 then
|
||||
dTol = 1.51
|
||||
elseif dArea < CoeffVM * 2.5e6 then
|
||||
dTol = 1.97
|
||||
elseif dArea < CoeffVM * 5.0e6 then
|
||||
dTol = 2.81
|
||||
elseif dArea < CoeffVM * 10.0e6 then
|
||||
dTol = 3.77
|
||||
local dTol = 4.71
|
||||
if EmtGetVMillStep then
|
||||
dTol = EmtGetVMillStep( b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol)
|
||||
else
|
||||
local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ()
|
||||
if dArea < 0.075e6 then
|
||||
dTol = 0.71
|
||||
elseif dArea < 0.15e6 then
|
||||
dTol = 1.01
|
||||
elseif dArea < 0.3e6 then
|
||||
dTol = 1.51
|
||||
elseif dArea < 0.6e6 then
|
||||
dTol = 1.97
|
||||
elseif dArea < 1.2e6 then
|
||||
dTol = 2.81
|
||||
elseif dArea < 2.4e6 then
|
||||
dTol = 3.77
|
||||
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
|
||||
local VMillId = EgtVolZmapBox( nPartRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB)
|
||||
if VMillId then
|
||||
@@ -466,6 +481,7 @@ function OnSimulDispositionEnd()
|
||||
EMT.UNLOADING = false
|
||||
EMT.FALL = false
|
||||
EMT.TO_FALL = false
|
||||
EMT.Y2DELTA = nil
|
||||
end
|
||||
-- se disposizione intermedia
|
||||
if IsMidPhase( EMT.PHASE) or IsEnd2Phase( EMT.PHASE) then
|
||||
@@ -507,10 +523,8 @@ function OnSimulToolSelect( dPosA)
|
||||
end
|
||||
-- se sega a catena, imposto subito angolo scelto per asse virtuale A
|
||||
if HeadIsChainSaw( EMT.HEAD) then
|
||||
-- se non Progress, apro le paratie
|
||||
if not Progress then
|
||||
ExecParkRoller( nil, nil, nil, nil, false, IsStartPhase( EMT.PHASE))
|
||||
end
|
||||
-- apro le paratie
|
||||
ExecParkRoller( nil, nil, nil, nil, false, IsStartPhase( EMT.PHASE))
|
||||
-- valore dell'asse virtuale
|
||||
dPosA = dPosA or GetNextChainSawingVirtualAxis( EMT.MCHID)
|
||||
-- imposto il valore di A
|
||||
@@ -642,7 +656,7 @@ function OnSimulToolDeselect( dPrevA)
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
-- deposito utensile lama
|
||||
elseif EMT.PREVHEAD_H1 == 'H12' then
|
||||
elseif EMT.PREVHEAD_H1 == 'H12' or EMT.PREVHEAD_H1 == 'H17' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
@@ -710,12 +724,12 @@ function OnSimulToolDeselect( dPrevA)
|
||||
-- nascondo l'utensile sulla testa
|
||||
EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H1 or '') or GDB_ID.NULL, GDB_MD.HIDDEN)
|
||||
-- prendo utensile fresa o lama
|
||||
if EMT.NEXTHEAD == 'H11' or EMT.NEXTHEAD == 'H12' then
|
||||
if EMT.NEXTHEAD == 'H11' or EMT.NEXTHEAD == 'H12' or EMT.NEXTHEAD == 'H17' then
|
||||
local MyParkX1 = EgtIf( GetHeadTCSet( EMT.NEXTHEAD, EMT.NEXTTCPOS) == 'Head1_TC1', ParkX1, ParkFrnX1)
|
||||
local MyParkB1 = ParkB1
|
||||
local MyParkC1 = ParkC1
|
||||
-- se ho due teste oppure è progress, significa che ho CU verticale
|
||||
if EgtGetHeadId('H21') or bProgress then
|
||||
if EgtGetHeadId('H21') or Progress or SecondToolChanger then
|
||||
MyParkB1 = EgtIf( GetHeadTCSet( EMT.NEXTHEAD, EMT.NEXTTCPOS) == 'Head1_TC1', ParkB1, ParkFrnB1)
|
||||
MyParkC1 = EgtIf( GetHeadTCSet( EMT.NEXTHEAD, EMT.NEXTTCPOS) == 'Head1_TC1', ParkC1, ParkFrnC1)
|
||||
-- altrimenti su one CU speciale motosega-utensile lungo
|
||||
@@ -766,6 +780,7 @@ function OnSimulMachiningStart()
|
||||
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.MCHPRECUT = ( EMT.MCHUSERNOTES:find( 'Precut;', 1, true) ~= nil)
|
||||
EMT.MCHCUT = ( EMT.MCHUSERNOTES:find( 'Cut;', 1, true) ~= nil)
|
||||
-- recupero TASKID della feature lavorata
|
||||
local vId = EgtGetMachiningGeometry()
|
||||
if vId and #vId > 0 and #vId[1] > 0 then
|
||||
@@ -959,7 +974,12 @@ function OnSimulMoveStart()
|
||||
-- pinza 5
|
||||
if EMT.W2DELTA then
|
||||
EMT.A5n = 'W'
|
||||
EMT.A5m = 'T'
|
||||
local dPosQW = EgtGetAxisPos( 'QW') or 0
|
||||
if dPosQW < 1 then
|
||||
EMT.A5m = nil
|
||||
else
|
||||
EMT.A5m = 'T'
|
||||
end
|
||||
EMT.A5 = EMT.L1 + EMT.W2DELTA - EMT.A4
|
||||
VerifyWStroke( EMT.A5)
|
||||
end
|
||||
@@ -1047,9 +1067,9 @@ function OnSimulMoveStart()
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
local dPosA = GetCurrChainSawingVirtualAxis()
|
||||
-- se anche precedente con sega a catena ma depositata, devo riprenderla
|
||||
if EMT.CHSAW_OUT then
|
||||
local dPosA = GetCurrChainSawingVirtualAxis()
|
||||
EgtSetMode( EgtGetHeadId( EMT.HEAD), GDB_MD.HIDDEN)
|
||||
OnSimulToolDeselect()
|
||||
EgtLoadTool( EMT.HEAD, 1, EMT.TOOL)
|
||||
@@ -1078,7 +1098,7 @@ function OnSimulMoveStart()
|
||||
else
|
||||
if GetHeadTCSet( EMT.HEAD, EMT.TCPOS) == 'Head1_TC2' then
|
||||
-- se movimento iniziale da Zmax con lama o fresa
|
||||
if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' then
|
||||
if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' or EMT.HEAD == 'H17' then
|
||||
if EMT.ZMAX or EMT.FLAG == 1 or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
--EgtOutBox( 'Flag 2,1', 'Info Rapid')
|
||||
local bMoveZbeforeX = false
|
||||
@@ -1113,9 +1133,9 @@ function OnSimulMoveStart()
|
||||
end
|
||||
-- altrimenti sega a catena (H13 o H15)
|
||||
else
|
||||
local dPosA = GetCurrChainSawingVirtualAxis()
|
||||
-- se anche precedente con sega a catena ma depositata, devo riprenderla
|
||||
if EMT.CHSAW_OUT then
|
||||
local dPosA = GetCurrChainSawingVirtualAxis()
|
||||
EgtSetMode( EgtGetHeadId( EMT.HEAD), GDB_MD.HIDDEN)
|
||||
OnSimulToolDeselect()
|
||||
EgtLoadTool( EMT.HEAD, 1, EMT.TOOL)
|
||||
@@ -1155,9 +1175,9 @@ function OnSimulMoveStart()
|
||||
--EgtOutBox( 'Flag 2,1', 'Info Rapid')
|
||||
local bMoveZbeforeX = false
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H22' and ( EgtIf( BD.RIGHT_LOAD, EMT.L2 < -LimX2RotSaw, EMT.L2 > -LimX2RotSaw) or EMT.R2 > 91) then
|
||||
if EMT.HEAD == 'H22' and ( EgtIf( BD.RIGHT_LOAD, -EMT.L2 < -LimX1RotSaw, -EMT.L2 > -LimX1RotSaw) or EMT.R2 > 91) then
|
||||
dZref = Z2Home + GetZExtra( EMT.HEAD, EMT.R2) - 100
|
||||
end
|
||||
end
|
||||
-- se la quota di lavoro è più in alta della posizione a ZHOME della testa, prima si va alla Z di lavoro e poi si approccia il pezzo
|
||||
if EMT.L3 > dZref then
|
||||
bMoveZbeforeX = true
|
||||
@@ -1168,25 +1188,30 @@ function OnSimulMoveStart()
|
||||
SimulMoveAxis( 'X2', LimX2RotSaw, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
if EMT.HEAD == 'H22' and abs( C2Pos - EMT.R1) > 1 and ( abs( C2Home - EMT.R1) > 30.1 or abs(B2Home - EMT.R2) > 30.1) then
|
||||
SimulMoveAxis( 'B2', 0, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z2', dZref, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
if bMoveZbeforeX then
|
||||
SimulMoveAxis( 'Z2', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
if abs( C2Pos - EMT.R1) > 1 and ( abs( C2Home - EMT.R1) > 30.1 or abs( B2Home - EMT.R2) > 30.1) then
|
||||
if EMT.HEAD == 'H22' then
|
||||
SimulMoveAxis( 'B2', 0, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z2', dZref, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
if bMoveZbeforeX then
|
||||
SimulMoveAxis( 'Z2', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- caso standard
|
||||
else
|
||||
SimulMoveAxis( 'Z2', dZref, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
if bMoveZbeforeX then
|
||||
SimulMoveAxis( 'Z2', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
end
|
||||
-- caso standard
|
||||
else
|
||||
SimulMoveAxis( 'Z2', dZref, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
local dPosA = GetCurrChainSawingVirtualAxis()
|
||||
-- se anche precedente con sega a catena ma depositata, devo riprenderla
|
||||
if EMT.CHSAW_OUT then
|
||||
local dPosA = GetCurrChainSawingVirtualAxis()
|
||||
EgtSetMode( EgtGetHeadId( EMT.HEAD), GDB_MD.HIDDEN)
|
||||
OnSimulToolDeselect()
|
||||
EgtLoadTool( EMT.HEAD, 1, EMT.TOOL)
|
||||
@@ -1332,7 +1357,7 @@ function OnSimulMoveEnd()
|
||||
-- eventuale rimozione sfridi
|
||||
ExecRemoveScraps()
|
||||
-- se Split o Presplit lascio agganciata solo la pinza Y2 alla fine dei movimenti
|
||||
local sNextTool = GetNextTool( EMT.MCHID)
|
||||
local sNextTool = GetNextTool( EMT.MCHID, true)
|
||||
-- vado in home se è ultimo movimento ed è ultima lavorazione, se sono con motosega e devo cambiare utensile, oppure se ho la lama
|
||||
local bToXhome = ( IsLastPath( EMT.PATHID) and not sNextTool) or ( EMT.HEAD == 'H23' and EMT.TOOL ~= sNextTool) or ( EMT.HEAD == 'H13' and EMT.TOOL ~= sNextTool) or
|
||||
( EMT.HEAD == 'H12' and EMT.TOOL ~= sNextTool ) or ( EMT.HEAD == 'H22' and EMT.TOOL ~= sNextTool) or EMT.MCHSPLIT
|
||||
@@ -1466,7 +1491,7 @@ function ExecAuxCmd( sCmd, bPathStart)
|
||||
ExecMoveHome( Cmd[2] == '1', EgtIf( bPathStart, false, EMT.MCHSPLIT))
|
||||
elseif Cmd[1] == '11' then
|
||||
local bClose = Cmd[2] ~= '0'
|
||||
if bPathStart and EMT.MCHSPLIT and not EMT.FALL and GetPY2Light() then bClose = false end
|
||||
if bPathStart and EMT.MCHSPLIT and not ( EMT.FALL or EMT.TO_FALL) and GetPY2Light() then bClose = false end
|
||||
ExecMovePY1( bClose)
|
||||
elseif Cmd[1] == '12' then
|
||||
ExecMovePY2( Cmd[2] ~= '0')
|
||||
@@ -1584,7 +1609,15 @@ function ExecMoveHome( bNearV, bMchSplit)
|
||||
EMT.CHSAW_OUT = true
|
||||
end
|
||||
-- porto le teste in home
|
||||
SimulMoveAxes( 'X1', ParkX1, MCH_SIM_STEP.RAPID, 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
if EgtGetHeadId( 'H21') then
|
||||
SimulMoveAxes( 'X1', ParkX1, MCH_SIM_STEP.RAPID, 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
if GetHeadTCSet( EMT.HEAD, EMT.TCPOS) == 'Head1_TC1' then
|
||||
SimulMoveAxes( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
SimulMoveAxes( 'X1', ParkFrnX1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
end
|
||||
-- sistemo i rulli
|
||||
ExecOpenRoller( 1)
|
||||
ExecOpenRoller( 2)
|
||||
@@ -1664,21 +1697,19 @@ function ExecMoveZmax( bMchSplit, btoXHome)
|
||||
SimulMoveAxes( 'X1', HomeX, MCH_SIM_STEP.RAPID, 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
else
|
||||
-- se sega a catena
|
||||
-- se fresa o lama
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
if abs( HomeC - CurrC) > 0.1 or abs( HomeB - CurrB) > 0.1 then
|
||||
local dZref = HomeZ + GetZExtra( EMT.HEAD, CurrB)
|
||||
SimulMoveAxes( 'Z1', EgtIf( dZref > CurrZ, dZref, CurrZ), MCH_SIM_STEP.RAPID, 'B1', EgtClamp( CurrB, -90, 90), MCH_SIM_STEP.COLLROT)
|
||||
if EMT.HEAD == 'H12' and ( abs( HomeC - CurrC) > 30.1 or abs( HomeB - CurrB) > 30.1) or not( bProgress) then
|
||||
SimulMoveAxes( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID, 'B1', 0, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxes( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID, 'B1', 0, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
|
||||
if btoXHome then
|
||||
EMT.XHOME = true
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'X1', HomeX, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
@@ -1689,6 +1720,8 @@ function ExecMoveZmax( bMchSplit, btoXHome)
|
||||
if btoXHome then
|
||||
EgtUnloadTool( EMT.HEAD, 1)
|
||||
ShowToolInTcPos( EMT.TCPOS, true)
|
||||
-- nascondo l'utensile sulla testa
|
||||
EgtSetMode( EgtGetHeadId( EMT.HEAD or '') or GDB_ID.NULL, GDB_MD.HIDDEN)
|
||||
EMT.PREVTOOL_H1 = nil
|
||||
EMT.PREVHEAD_H1 = nil
|
||||
EMT.PREVTCPOS_H1 = nil
|
||||
@@ -1717,13 +1750,13 @@ function ExecMoveZmax( bMchSplit, btoXHome)
|
||||
EMT.XHOME = true
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
SimulMoveAxes( 'Z2', HomeZ, MCH_SIM_STEP.RAPID, 'B2', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxis( 'Z2', ParkCSawZ2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxes( 'X2', HomeX, MCH_SIM_STEP.RAPID, 'C2', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'X2', ParkCSawX2, MCH_SIM_STEP.RAPID, 'C2', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
EMT.ZMAX = true
|
||||
@@ -2195,6 +2228,9 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
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( '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)
|
||||
@@ -2209,11 +2245,17 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function ShowToolInTcPos( sTcPos, bShow)
|
||||
-- recupero identificativo della posizione sul TC
|
||||
local TcPosId = EgtGetTcPosId( sTcPos or '')
|
||||
if not TcPosId then return end
|
||||
-- recupero il gruppo dell'utensile
|
||||
local TcExitId = EgtGetFirstNameInGroup( EgtGetTcPosId( sTcPos or '') or GDB_ID.NULL, 'T1')
|
||||
local TcExitId = EgtGetFirstNameInGroup( TcPosId 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))
|
||||
-- recupero eventuale gruppo ausiliario da visualizzare/nascondere
|
||||
local TcHSId = EgtGetFirstNameInGroup( TcPosId, sTcPos .. '_HS')
|
||||
if TcHSId then EgtSetStatus( TcHSId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF)) end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -2234,7 +2276,7 @@ function LoadNextTool( nHSet, sTcPosDef, bFirst)
|
||||
if vTools and vTools[1] and #(vTools[1]) > 0 then
|
||||
sTool = vTools[1]
|
||||
sTcPos = sTcPosDef
|
||||
if Progress then
|
||||
if Progress or SecondToolChanger then
|
||||
sHead = EgtIf( sTcPos == 'T11', 'H12', 'H11')
|
||||
elseif nHSet == 1 then
|
||||
sHead = EgtIf( sTcPos == 'T1', 'H12', 'H11')
|
||||
@@ -2291,6 +2333,9 @@ local FALL_T = 2 * ESTIMATION_RAPID_COEFF -- s
|
||||
---------------------------------------------------------------------
|
||||
function OnEstimStart()
|
||||
EMT.INCHES = not EgtUiUnitsAreMM() -- unità di misura mm/inches
|
||||
EMT.FMAXPINZE = EgtClamp( MaxFeedPinze or 102000, 20000, 102000) -- feed massima pinze
|
||||
EMT.MAXACC = MaxAcc or ( EMT.FMAXPINZE / ( 60 * 0.3)) -- accelerazione massima pinze
|
||||
EMT.MINACC = MinAcc or ( EMT.FMAXPINZE / ( 60 * 4)) -- accelerazione minima pinze
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -2376,6 +2421,15 @@ function OnEstimDispositionEnd()
|
||||
EMT.OPEISDISP = false
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnEstimRawMoveData()
|
||||
-- se start del pezzo
|
||||
if IsStartOrRestPhase( EMT.PHASE) then
|
||||
EMT.SPLIT = false
|
||||
end
|
||||
OnRawMoveData()
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnEstimToolSelect()
|
||||
-- reset indice utensile in tabella lunghezze
|
||||
@@ -2432,6 +2486,12 @@ function OnEstimMachiningEnd()
|
||||
EMT.TLE_NAME = nil
|
||||
EMT.TLE_TIME = nil
|
||||
end
|
||||
|
||||
EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
|
||||
EMT.MCHSPLIT = ( EMT.MCHUSERNOTES:find( 'Split;', 1, true) ~= nil)
|
||||
if EMT.MCHSPLIT then
|
||||
EMT.SPLIT = true
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -2557,11 +2617,11 @@ function OnEstimRapid()
|
||||
EMT.MCHEXTLEN = EMT.MCHEXTLEN + dLen
|
||||
-- calcolo tempo
|
||||
local dTime = RAPID_MIN_T
|
||||
local dT1 = abs( dL1) / RAPID_X_FEED * 60
|
||||
local dT1 = CalcMoveTime( abs( dL1), RAPID_X_FEED, EMT.SPLIT)
|
||||
if dT1 > dTime then dTime = dT1 end
|
||||
local dT2 = abs( dL2) / RAPID_Y_FEED * 60
|
||||
local dT2 = CalcMoveTime( abs( dL2), EMT.FMAXPINZE, EMT.SPLIT)
|
||||
if dT2 > dTime then dTime = dT2 end
|
||||
local dT3 = abs( dL3) / RAPID_Z_FEED * 60
|
||||
local dT3 = CalcMoveTime( abs( dL3), RAPID_Z_FEED, EMT.SPLIT)
|
||||
if dT3 > dTime then dTime = dT3 end
|
||||
local dT4 = abs( dR1) / RAPID_C_FEED * 60
|
||||
if dT4 > dTime then dTime = dT4 end
|
||||
@@ -2583,7 +2643,7 @@ function OnEstimLinear()
|
||||
local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3)
|
||||
EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen
|
||||
-- calcolo tempo
|
||||
local dTime = dLen / EMT.F * 60
|
||||
local dTime = CalcMoveTime( dLen, EMT.F, EMT.SPLIT)
|
||||
EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime
|
||||
EgtOutLog( string.format( ' G1 Len=%.0f Time=%.2f', dLen, dTime), 5)
|
||||
-- aggiorno valori come precedenti
|
||||
@@ -2804,7 +2864,7 @@ function GetNextChainSawingVirtualAxis( MchId)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetNextTool( nMchId)
|
||||
function GetNextTool( nMchId, bResetOnStart)
|
||||
-- inizializzo prossimo utensile
|
||||
local sNextTool
|
||||
-- recupero lavorazione successiva
|
||||
@@ -2812,7 +2872,7 @@ function GetNextTool( nMchId)
|
||||
while nNextMchId do
|
||||
-- se la prossima lavorazione è lo start di un altro pezzo, faccio finta che cambia utensile in modo che vada in parcheggio con utensili speciali
|
||||
if EgtGetOperationType( nNextMchId) == MCH_OY.DISP then
|
||||
if IsStartOrRestPhase( EMT.PHASE+1) then
|
||||
if IsStartOrRestPhase( EMT.PHASE+1) and bResetOnStart then
|
||||
return nil
|
||||
end
|
||||
else
|
||||
@@ -2837,10 +2897,10 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function RollerParkingNeeded( sHead, dAng1p, dAng2p, dAng1, dAng2)
|
||||
if sHead == 'H11' or sHead == 'H12' or HeadIsChainSaw( sHead) then
|
||||
return ( abs( dAng1 - dAng1p) > 1 or ( abs( dAng2 - dAng2p) > 1 and abs( dAng1 % 180.0) > 1))
|
||||
if sHead == 'H11' or sHead == 'H12' or sHead == 'H17' or HeadIsChainSaw( sHead) then
|
||||
return ( abs( dAng1 - dAng1p) > 1 or ( abs( dAng2 - dAng2p) > 1 and abs( dAng1) % 180.0 > 1))
|
||||
elseif sHead == 'H21' or sHead == 'H22' or HeadIsChainSaw( sHead) 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))
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2855,5 +2915,40 @@ function GetCmdAxMove( Cmd, sAx)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function CalcDinamicaPinze( dH, dS, dL)
|
||||
local KgMtCubo= WoodDensity or 550 -- densità legno [Kg / metro cubo]
|
||||
local Massa = ( dH * dS * dL * KgMtCubo ) / 1e9 -- massa [Kg]
|
||||
local FMaxPinze = EMT.FMAXPINZE -- Feed massima pinze [mm/min]
|
||||
local ForzaAttrito = 350 * 9.8 * 0.2 -- Forza chiusura pinze [Kgf] * g * Coeff_Attrito -> [N]
|
||||
local TempoAcc = ( ( Massa * FMaxPinze) / ( 60 * ForzaAttrito) / 1000)
|
||||
local AccMaxPinze = EMT.MAXACC
|
||||
local AccPinze = EgtClamp( FMaxPinze / ( 60 * TempoAcc), EMT.MINACC, EMT.MAXACC)
|
||||
local RidFeed = 100 / Massa * 100
|
||||
if RidFeed > 100 then
|
||||
RidFeed = 100
|
||||
elseif RidFeed < 10 then
|
||||
RidFeed = 10
|
||||
end
|
||||
return AccPinze, AccMaxPinze, RidFeed
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function CalcMoveTime( dPathLen, dFeed, bIsSplitted)
|
||||
local dTime
|
||||
local dFeedInSec = dFeed / 60
|
||||
local dAcc, _, _ = CalcDinamicaPinze( EMT.HB, EMT.SB, EgtIf( bIsSplitted, EMT.LT, EMT.LB))
|
||||
|
||||
-- Caso 1: dFeed raggiunta
|
||||
if dPathLen >= ( dFeedInSec ^ 2) / dAcc then
|
||||
dTime = ( dFeedInSec / dAcc) + ( dPathLen / dFeedInSec)
|
||||
-- Caso 2: dFeed non raggiunta
|
||||
else
|
||||
dTime = 2 * sqrt( dPathLen / dAcc)
|
||||
end
|
||||
|
||||
return dTime
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- *** END GENERAL ***
|
||||
|
||||
+49
-10
@@ -7,6 +7,31 @@ EgtEnableDebug( false)
|
||||
-- Carico libreria
|
||||
local BD = require( 'BeamData')
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- *** Generic Machinings ***
|
||||
---------------------------------------------------------------------
|
||||
require( 'EmtGenMachining')
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- *** Special GetPrevMachiningOffset ***
|
||||
---------------------------------------------------------------------
|
||||
-----------------------------------------------------------------------------------------
|
||||
function OnSpecialGetPrevMachiningOffset()
|
||||
-- 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)
|
||||
-- la X (L1) di questa corrisponde alla posizione iniziale della nuova trave, se ne deduce l'offset
|
||||
EMC.PREVOFFSX = ParkV1 - vPrevAx[1]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------- OnSpecialGetMaxZ -----------------------------
|
||||
---------------------------------------------------------------------
|
||||
local function CalcExtraZ( vtTp, vtT, vMZ)
|
||||
@@ -72,7 +97,7 @@ function OnSpecialGetMaxZ()
|
||||
local vMZ = {{ Tz=0.85, Ez=390}, { Tz=0.5, Ez=280}, { Tz=-0.01, Ez=160}, { Tz=-0.5, Ez=1}, { Tz=-0.61, Ez=1}}
|
||||
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
||||
end
|
||||
elseif EMC.HEAD == 'H12' and sHead_TC == 'Head1_TC1' then
|
||||
elseif ( EMC.HEAD == 'H12' or EMC.HEAD == 'H17') and sHead_TC == 'Head1_TC1' then
|
||||
if vtTp:getX() > 0.4 and vtT:getX() > 0.4 then
|
||||
if bBSameSign and abs( EMC.R1 - EMC.R1p) < 165 then
|
||||
EMC.MAXZ = MaxZ1 - EgtIf( abs( EMC.R2) < 90.1 and abs( EMC.R2p) < 90.1, 0, 130)
|
||||
@@ -173,7 +198,7 @@ function OnSpecialMoveZup()
|
||||
if EMC.HEAD == 'H11' or EMC.HEAD == 'H21' then
|
||||
;
|
||||
-- se lama posizionata su CU prossimo a testa 1
|
||||
elseif EMC.HEAD == 'H12' and sHead_TC == 'Head1_TC1' then
|
||||
elseif ( EMC.HEAD == 'H12' or EMC.HEAD == 'H17') and sHead_TC == 'Head1_TC1' then
|
||||
-- se inclinata oltre 90 gradi e interferisce con la trave
|
||||
if ( EMC.R2 > 87.9 and ( EMC.R1 < 15.0 or EMC.R1 > 180.0)) or ( EMC.R2 < -87.9 and ( EMC.R1 > -15.0 and EMC.R1 < 180.0)) then
|
||||
local dZref = dZmax + min( 330 * vtT:getZ(), 0) + 260 * ( 1 - sqrt( 1- vtT:getZ() * vtT:getZ()))
|
||||
@@ -223,7 +248,7 @@ local MIN_BACK_ENG_V = 115 -- ingombro asse Z a sinistra
|
||||
local AGG_V = MinDeltaYV -- ingombro rulli pressori + sicurezza
|
||||
local MIN_CLAMP_5 = 150 -- minima presa con la pinza speciale (pinza 5)
|
||||
local SIC_CLAMP_5 = 50 -- sicurezza testa da pinza speciale
|
||||
local MAX_BACK_CLAMP_5 = 320 -- massima sporgenza posteriore del pezzo da pinza speciale
|
||||
local MAX_BACK_CLAMP_5 = EgtClamp( MaxBackClamp5 or 320, 200, 380) -- massima sporgenza posteriore del pezzo da pinza speciale
|
||||
|
||||
----------------------- Variabili -----------------------------------
|
||||
local Test = false
|
||||
@@ -1423,7 +1448,14 @@ function SpecCalcSplit( dLenRaw, dMaxLenLeft)
|
||||
local vCmd = {}
|
||||
EgtOutLog( ' *[S]', 1)
|
||||
local bSplit = ( EMC.Y2DELTA ~= nil or EMC.W2DELTA ~= nil)
|
||||
local ParkT = EgtIf( bSplit and dMaxLenLeft > ParkV1 - 50, LoadT, ParkV1)
|
||||
local ParkT = ParkV1
|
||||
if bSplit then
|
||||
if dMaxLenLeft + 100 > LoadT then
|
||||
ParkT = dMaxLenLeft + 300
|
||||
elseif dMaxLenLeft + 100 > ParkV1 then
|
||||
ParkT = LoadT
|
||||
end
|
||||
end
|
||||
local sType = EgtIf( EMC.Y2DELTA, 'Split', EgtIf( EMC.W2DELTA, 'SpecSplit', 'Fall'))
|
||||
table.insert( vCmd, { 0, sType})
|
||||
if not bSplit then EnsureZmax( false, vCmd) end
|
||||
@@ -1546,8 +1578,11 @@ function SpecCalcUnload()
|
||||
EgtOutLog( ' *[U1]', 1)
|
||||
end
|
||||
local vCmd = {}
|
||||
-- Tipo di scarico
|
||||
local bStdUl = ( not MaxUnloadLen or MaxUnloadLen < 1 or EMC.LB - EMC.HOVM < MaxUnloadLen + 1)
|
||||
|
||||
-- Commento
|
||||
table.insert( vCmd, { 0, 'Unloading'})
|
||||
table.insert( vCmd, { 0, 'Unloading', EgtIf( bStdUl, 'Unloading', 'Manual Unloading')})
|
||||
-- posizionamento sicuro teste e rulli (non serve ?)
|
||||
--table.insert( vCmd, { 4, 0})
|
||||
-- Se pinza Y chiusa, la apro
|
||||
@@ -1555,11 +1590,15 @@ function SpecCalcUnload()
|
||||
table.insert( vCmd, { 11, 0})
|
||||
EMC.CNT = nil
|
||||
end
|
||||
-- Sposto il pezzo in posizione di scarico
|
||||
local dFinT = UnloadT - EMC.LB
|
||||
local dFinY2 = dFinT + EMC.Y2DELTA
|
||||
table.insert( vCmd, { 2, 'T', dFinT, 'Y2', dFinY2})
|
||||
EgtOutLog( ' Y2PosF=' .. EgtNumToString( dFinY2), 1)
|
||||
-- Se non supero la lunghezza massima di scarico, sposto il pezzo in posizione di scarico
|
||||
if bStdUl then
|
||||
local dFinT = UnloadT - EMC.LB
|
||||
local dFinY2 = dFinT + EMC.Y2DELTA
|
||||
table.insert( vCmd, { 2, 'T', dFinT, 'Y2', dFinY2})
|
||||
EgtOutLog( ' Y2PosF=' .. EgtNumToString( dFinY2), 1)
|
||||
else
|
||||
table.insert( vCmd, { 1, 'Y2', MaxY2})
|
||||
end
|
||||
-- apro la morsa
|
||||
table.insert( vCmd, { 12, 0})
|
||||
-- riporto il carrello in home
|
||||
|
||||
+42
-13
@@ -32,10 +32,10 @@
|
||||
require( 'EmtGenerator')
|
||||
EgtEnableDebug( false)
|
||||
|
||||
PP_VER = '2.7c1_DEV1'
|
||||
PP_NVER = '2.7.3.1'
|
||||
PP_VER = '2.7k3'
|
||||
PP_NVER = '2.7.11.3'
|
||||
MIN_MACH_VER = '2.5k1'
|
||||
MACH_NAME = 'Essetre-ONE'
|
||||
MACH_NAME = string.match( EgtGetCurrMachineDir(), "[^\\]+$") -- si ricava il nome della macchina dal direttorio
|
||||
|
||||
-- Carico i dati globali
|
||||
local sMachDir = EgtGetCurrMachineDir()
|
||||
@@ -135,9 +135,9 @@ DimTabX = 30000
|
||||
AutomaticRotation = true
|
||||
AutoRotMinLen = 0
|
||||
DefTcPos1 = 'T3'
|
||||
CoeffVM = 0.5
|
||||
EstimationRapidMultiplier = 1
|
||||
ForceToCloseRollersGate = false
|
||||
SecondToolChanger = false
|
||||
|
||||
-- Aggiornamento con dati da TechnoEssetre7
|
||||
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-ONE.data"
|
||||
@@ -202,9 +202,15 @@ if EgtExistsFile( sData) then
|
||||
if Machine.Offsets.SAWOFFSX then SawOffsX = Machine.Offsets.SAWOFFSX end
|
||||
if Machine.Offsets.SAWOFFSZ then SawOffsZ = Machine.Offsets.SAWOFFSZ end
|
||||
if Machine.Offsets.DEFTCPOS1 then DefTcPos1 = ( 'T' .. Machine.Offsets.DEFTCPOS1) end
|
||||
if Machine.Offsets.NOULOAD then MaxUnloadLen = Machine.Offsets.NOULOAD end
|
||||
if Machine.Offsets.MAXFEEDPINZE then MaxFeedPinze = Machine.Offsets.MAXFEEDPINZE end
|
||||
if Machine.Offsets.MAXACC then MaxAcc = Machine.Offsets.MAXACC end
|
||||
if Machine.Offsets.MINACC then MinAcc = Machine.Offsets.MINACC end
|
||||
if Machine.Offsets.COEFF_STIMATEMPI and Machine.Offsets.COEFF_STIMATEMPI > 0 then EstimationRapidMultiplier = Machine.Offsets.COEFF_STIMATEMPI end
|
||||
if Machine.Offsets.CHIUDI_PINZE_2_3_SCAMBIO then ForceToCloseRollersGate = Machine.Offsets.CHIUDI_PINZE_2_3_SCAMBIO == 1 end
|
||||
if Machine.Offsets.WOOD_DENSITY then WoodDensity = Machine.Offsets.WOOD_DENSITY end
|
||||
if Machine.Offsets.MAX_BACK_CLAMP_5 then MaxBackClamp5 = Machine.Offsets.MAX_BACK_CLAMP_5 end
|
||||
if Machine.Offsets.SEC_TC then SecondToolChanger = ( Machine.Offsets.SEC_TC == 1) end
|
||||
-- aggiustamenti
|
||||
MinY1 = MinV1 + MinDeltaYV
|
||||
MaxY1 = MaxMchY1
|
||||
@@ -218,6 +224,7 @@ if EgtExistsFile( sData) then
|
||||
ParkCSawZ1 = min( ParkCSawZ1, MaxZ1)
|
||||
ParkCSaw0Z1 = min( ParkCSaw0Z1, MaxZ1)
|
||||
Mortiser = ( Mortiser and not Progress)
|
||||
SecondToolChanger = ( SecondToolChanger and not Progress)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -237,6 +244,10 @@ if Progress then
|
||||
table.insert( sBaseAux, 'BASE/TC1S')
|
||||
table.insert( sBaseAux, 'BASE/TC2')
|
||||
table.insert( sBaseAux, 'BASE/TC3')
|
||||
elseif SecondToolChanger then
|
||||
table.insert( sBaseAux, 'BASE/TC2')
|
||||
table.insert( sBaseAux, 'BASE/TC2S')
|
||||
table.insert( sBaseAux, 'BASE/TC3')
|
||||
else
|
||||
table.insert( sBaseAux, 'BASE/MTC')
|
||||
if Mortiser then table.insert( sBaseAux, 'BASE/TC3') end
|
||||
@@ -330,7 +341,7 @@ EmtAxis {
|
||||
Home = 0,
|
||||
Geo = 'A1_AXIS/GEO'}
|
||||
local H13Id
|
||||
if Progress then
|
||||
if Progress or SecondToolChanger then
|
||||
H13Id = EmtHead {
|
||||
Name = 'H13',
|
||||
Parent = 'A',
|
||||
@@ -361,9 +372,9 @@ else
|
||||
end
|
||||
EgtSetInfo( H13Id, 'ZSAFEDELTA', '60')
|
||||
EgtSetInfo( H13Id, 'ZMAXONROT', '1,80')
|
||||
-- Mortasatrice sotto la traversa (solo per One)
|
||||
-- Mortasatrice sotto la traversa (solo per One base con un solo cambio utensile)
|
||||
local H15Id
|
||||
if not Progress and Mortiser then
|
||||
if not Progress and Mortiser and not SecondToolChanger then
|
||||
H15Id = EmtHead {
|
||||
Name = 'H15',
|
||||
Parent = 'A',
|
||||
@@ -532,6 +543,7 @@ EmtTable {
|
||||
Parent = 'T',
|
||||
Type = MCH_TT.FLAT,
|
||||
Ref1 = Point3d( - DimTabX, DeltaTabY - DimTabY, DeltaTabZ),
|
||||
Coll = 'Base/BELT',
|
||||
Geo = 'TABLE/GEO',
|
||||
Aux = 'TABLE/SOLID'}
|
||||
-- *** ToolChanger ***
|
||||
@@ -617,16 +629,33 @@ EmtTcPos {
|
||||
TDir = -Y_AX(),
|
||||
ADir = -X_AX(),
|
||||
Geo = 'BASE/T10'}
|
||||
if Progress then
|
||||
if Progress or SecondToolChanger then
|
||||
local ptTc2 = Point3d( 150, -170, -217 + ( DeltaTabZ + DeltaRulliTraveZ + 29))
|
||||
local vtDt2 = Vector3d( 0, 0, - 102.5)
|
||||
if SecondToolChanger then
|
||||
EmtTcPos {
|
||||
Name = 'T11',
|
||||
Parent = 'Base',
|
||||
Pos = ptTc2 + Vector3d( SawOffsX, SawOffsZ, 0),
|
||||
Pos = ptTc2,
|
||||
TDir = Y_AX(),
|
||||
ADir = -X_AX(),
|
||||
Geo = 'BASE/T11'}
|
||||
Geo = 'BASE/T11b'}
|
||||
EmtTcPos {
|
||||
Name = 'T12',
|
||||
Parent = 'Base',
|
||||
Pos = ptTc2 + 1 * vtDt1,
|
||||
TDir = Y_AX(),
|
||||
ADir = -X_AX(),
|
||||
Geo = 'BASE/T12'}
|
||||
else
|
||||
EmtTcPos {
|
||||
Name = 'T11',
|
||||
Parent = 'Base',
|
||||
Pos = ptTc2 + Vector3d( SawOffsX, SawOffsZ, 0),
|
||||
TDir = Y_AX(),
|
||||
ADir = -X_AX(),
|
||||
Geo = 'BASE/T11'}
|
||||
end
|
||||
EmtTcPos {
|
||||
Name = 'T13',
|
||||
Parent = 'Base',
|
||||
@@ -701,9 +730,9 @@ else
|
||||
ADir = X_AX(),
|
||||
Geo = 'BASE/T201'}
|
||||
end
|
||||
if Progress or Mortiser then
|
||||
if Progress or Mortiser or SecondToolChanger then
|
||||
local ptTc3 = Point3d( 480, 506.1, -200.8 + ( DeltaTabZ + DeltaRulliTraveZ + 29))
|
||||
local sName = EgtIf( Progress, 'T101', 'T301')
|
||||
local sName = EgtIf( Progress or SecondToolChanger, 'T101', 'T301')
|
||||
EmtTcPos {
|
||||
Name = sName,
|
||||
Parent = 'Base',
|
||||
@@ -777,7 +806,7 @@ function OnSetHead()
|
||||
else
|
||||
local MyHomeB1, MyHomeC1
|
||||
-- se cambio utensile verticale
|
||||
if EgtGetHeadId('H21') or bProgress then
|
||||
if EgtGetHeadId( 'H21') or Progress or SecondToolChanger then
|
||||
MyHomeB1 = ParkFrnB1
|
||||
MyHomeC1 = ParkFrnC1
|
||||
-- altrimenti su one CU speciale motosega-utensile lungo
|
||||
|
||||
Binary file not shown.
+27
-19
@@ -7,18 +7,19 @@
|
||||
[Sawing]
|
||||
|
||||
[Milling]
|
||||
0=d,MaxElev,0
|
||||
0=l,MaxElev,0
|
||||
1=d,OutRaw,0
|
||||
2=d,SideElev,0
|
||||
2=l,SideElev,0
|
||||
3=d,TrimExt,0
|
||||
4=sr,VtFaceUse,0,0,0
|
||||
4=s,VtFaceUse,0,0,0
|
||||
5=s,EdgesFaceUse,0
|
||||
|
||||
[Pocketing]
|
||||
0=d,MaxElev,0
|
||||
0=l,MaxElev,0
|
||||
1=b,Open,0
|
||||
2=d,OpenMinSave,0
|
||||
2=d,OpenMinSafe,0
|
||||
3=d,OpenOutRaw,0
|
||||
4=d,MaxOptSize,0
|
||||
4=l,MaxOptSize,0
|
||||
|
||||
[Mortising]
|
||||
0=d,MaxElev,0
|
||||
@@ -30,21 +31,28 @@
|
||||
[SawFinishing]
|
||||
|
||||
[GenMachining]
|
||||
0=l,LinTol,0.1
|
||||
1=l,MaxLen,2
|
||||
2=s,Type,ZigZag
|
||||
3=d,SideAng,90
|
||||
4=l,Step,10
|
||||
5=l,OffsProj,0
|
||||
6=l,LiTang,0
|
||||
7=l,LiOrth,0
|
||||
8=l,LiElev,0
|
||||
9=l,LoTang,0
|
||||
10=l,LoOrth,0
|
||||
11=l,LoElev,0
|
||||
12=b,DirFromGuide,1
|
||||
|
||||
[SurfRoughing]
|
||||
0=l,MaxElev,1000
|
||||
1=b,PlaneZ,0
|
||||
|
||||
[SurfFinishing]
|
||||
0=b,SkipMaxDown,1
|
||||
|
||||
[5AxMilling]
|
||||
0=l,LinTol,0.01
|
||||
1=l,MaxLen,10
|
||||
2=s,Type,ZigZag
|
||||
3=d,SideAng,90
|
||||
4=l,Step,10
|
||||
5=d,AngIni,-90
|
||||
6=d,AngFin,90
|
||||
7=l,LiTang,0
|
||||
8=l,LiOrth,0
|
||||
9=l,LiElev,0
|
||||
10=l,LoTang,0
|
||||
11=l,LoOrth,0
|
||||
12=l,LoElev,0
|
||||
13=b,DirFromGuide,0
|
||||
14=b,SurfAvoid,0
|
||||
|
||||
|
||||
+23
-1
@@ -29,8 +29,30 @@ local GS = {}
|
||||
|
||||
-- Configurazione posizioni (con o senza TC2)
|
||||
local PositionTable = {}
|
||||
-- se secondo toolchanger
|
||||
if EgtGetTcPosId( 'T12') then
|
||||
PositionTable = {{Pos = "Pos1", TcPos = "T1", Head = "H12", Group = "G1"},
|
||||
{Pos = "Pos2", TcPos = "T3", Head = "H11", Group = "G1"},
|
||||
{Pos = "Pos3", TcPos = "T4", Head = "H11", Group = "G1"},
|
||||
{Pos = "Pos4", TcPos = "T5", Head = "H11", Group = "G1"},
|
||||
{Pos = "Pos5", TcPos = "T6", Head = "H11", Group = "G1"},
|
||||
{Pos = "Pos6", TcPos = "T7", Head = "H11", Group = "G1"},
|
||||
{Pos = "Pos7", TcPos = "T8", Head = "H11", Group = "G1"},
|
||||
{Pos = "Pos8", TcPos = "T9", Head = "H11", Group = "G1"},
|
||||
{Pos = "Pos9", TcPos = "T10", Head = "H11", Group = "G1"},
|
||||
{Pos = "Pos10", TcPos = "T11", Head = "H11", Group = "G2"},
|
||||
{Pos = "Pos11", TcPos = "T12", Head = "H11", Group = "G2"},
|
||||
{Pos = "Pos12", TcPos = "T13", Head = "H11", Group = "G2"},
|
||||
{Pos = "Pos13", TcPos = "T14", Head = "H11", Group = "G2"},
|
||||
{Pos = "Pos14", TcPos = "T15", Head = "H11", Group = "G2"},
|
||||
{Pos = "Pos15", TcPos = "T16", Head = "H11", Group = "G2"},
|
||||
{Pos = "Pos16", TcPos = "T17", Head = "H11", Group = "G2"},
|
||||
{Pos = "Pos17", TcPos = "T18", Head = "H11", Group = "G2"},
|
||||
{Pos = "Pos18", TcPos = "T19", Head = "H11", Group = "G2"},
|
||||
{Pos = "Pos19", TcPos = "T20", Head = "H11", Group = "G2"},
|
||||
{Pos = "Pos20", TcPos = "T101", Head = "H13", Group = "G3"}}
|
||||
-- se Progress
|
||||
if EgtGetTcPosId( 'T11') then
|
||||
elseif EgtGetTcPosId( 'T11') then
|
||||
PositionTable = {{Pos = "Pos1", TcPos = "T1", Head = "H11", Group = "G1"},
|
||||
{Pos = "Pos2", TcPos = "T2", Head = "H11", Group = "G1"},
|
||||
{Pos = "Pos3", TcPos = "T3", Head = "H11", Group = "G1"},
|
||||
|
||||
Binary file not shown.
@@ -1,5 +1,74 @@
|
||||
==== Common_ONE-PF Update Log ====
|
||||
|
||||
Versione 2.7k3 (28/11/2025)
|
||||
- (GEN) Prima di andare allo scarico, si aggiunge movimento intermedio dove si aspetta che rulli scarico siano arrivati in posizione. Ticket#2716
|
||||
|
||||
Versione 2.7k2 (20/11/2025)
|
||||
- (SIM) Aggiornata risoluzione VMillTol in funzione dello spessore lama
|
||||
|
||||
Versione 2.7k1 (05/11/2025)
|
||||
- (SIM-GEN) Corretto calcolo per decidere se serve aprire i rulli
|
||||
- (GEN) Aggiunta tolleranza in creazione piano di lavoro inclinato
|
||||
- (SIM) Allo scarico si resetta Y2DELTA. Ticket#2687
|
||||
|
||||
Versione 2.7j3 (23/10/2025)
|
||||
- (SIM) Corretta posizione parcheggio in caso di testa 1 su magazzino 2. Ticket#2660
|
||||
|
||||
Versione 2.7j2 (21/10/2025)
|
||||
- (GEN) Se SPLIT con pinza 5, corretto salvataggio posizione pinza 2. Ticket#2654
|
||||
|
||||
Versione 2.7j1 (08/10/2025)
|
||||
- (GEN) Salvataggio posizione Z su lavorazione precedente, sbagliava in caso di separazione. Ticket#2637
|
||||
|
||||
Versione 2.7i1 (10/09/2025)
|
||||
- (SIM-GEN) Piccole correzioni per gestire secondo TC su ONE. Ticket#2563
|
||||
- (SIM-GEN) Gestione aggregato BH completato. Ticket#2482
|
||||
- (EST) Stima tempi considerando accelerazioni
|
||||
- (SIM-GEN) Se fase start o restart, si aggiorna la posizione in X dell'asse per calcolare il link corretto
|
||||
- (GEN) Piccola correzione risalita ZMAX dopo RELOAD del pezzo. Generazione allineata a simulazione.
|
||||
|
||||
Versione 2.7h2 (28/08/2025)
|
||||
- (GEN) Migliorata gestione spegnimento utensile e disattivazione piano
|
||||
- (SIM-GEN) Corretto nome variabile e altre piccole modifiche per Progress
|
||||
|
||||
Versione 2.7h1 (20/08/2025)
|
||||
- (SIM-GEN) Non si chiudono i rulli se tagli o pretagli di testa e coda
|
||||
- (SIM) Corretto movimento pinza 5 in caso di riposizionamento pinza 1
|
||||
- (GEN) Corretta quota assoluta posizione testa trave in caso di pinza 5 e testa rimasta bassa
|
||||
- (GEN) Se ultima lavorazione pezzo precedente ha stesso utensile della prima lavorazione pezzo successivo, la speed resta accesa
|
||||
|
||||
Versione 2.7g4 (23/07/2025)
|
||||
- (SIM-GEN) Aggiunto parametro configurabile da TS3 per massima sporgenza trave in coda per pinza 5. Ticket#2538
|
||||
|
||||
Versione 2.7g3 (22/07/2025)
|
||||
- (SIM) Corretto lettura angolo di presa della motosega
|
||||
|
||||
Versione 2.7g2 (08/07/2025)
|
||||
- (SIM) Corretto movimento a parcheggio sega a catena. Ticket#2517
|
||||
|
||||
Versione 2.7g1 (01/07/2025)
|
||||
- (GEN) Rimossa gestione PROBE inserita per sbaglio
|
||||
- (GEN) Corretto gestione accelerazioni
|
||||
- (SIM-GEN) Aggiunta gestione massima lunghezza scarico
|
||||
|
||||
Versione 2.7f1 (04/06/2025)
|
||||
- (SIM) Aggiunta gestione qualità VMILL da impostazioni macchina. Tolto parametro 'CoeffVM'.
|
||||
- (GEN) Aggiunti parametri FMAXPINZE, MAXACC, MINACC configurabili da TS3. Ticket#2052
|
||||
|
||||
Versione 2.7e1 (28/05/2025)
|
||||
- (SIM-GEN) Alla separazione si spostano i carrelli di 30mm aprendo il taglio. Ticket#2259,Ticket#2328
|
||||
|
||||
Versione 2.7d1 (16/04/2025)
|
||||
- (SIM) Distanza di collisione portata a 3mm, qualità VMILL ridotta a 4mm. Ticket#2395
|
||||
|
||||
Versione 2.7c3 (25/03/2025)
|
||||
- (GEN) Corretto movimento approccio alla lavorazione se utensile lama montata su magazzino 2. Ticket#2361
|
||||
|
||||
Versione 2.7c2 (12/03/2025)
|
||||
- (SIM-GEN) Migliorato calcolo posizione barra dopo split. Tiene in considerazione ingombro lavorazioni pezzo. Ticket#2321
|
||||
- (GEN) Aggiunta commenti HEADER e FOOTER per comunicazione con linea o altre macchine, da parte di Essetre.
|
||||
- (SIm-GEN) Migliorato movimento approccio al pezzo con lama. Allineamento simulazione-generazione che facevano due movimenti leggermente diversi. Ticket#2335
|
||||
|
||||
Versione 2.7c1 (05/03/2025)
|
||||
- (GEN) Corretto movimento in home utensile precedente. Ticket#2324
|
||||
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
local InfoCommon_STD_PP = {
|
||||
NAME = 'Common_ONE-PF', -- nome script PP standard
|
||||
VERSION = '2.7c1', -- versione script
|
||||
VERSION = '2.7k3', -- versione script
|
||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user