Compare commits
51 Commits
2.7h2_DEV2_B
...
3.1f3
| Author | SHA1 | Date | |
|---|---|---|---|
| 2bda916a16 | |||
| 42752eefcd | |||
| 86c030f38e | |||
| 7d8bb8f03e | |||
| 016122276d | |||
| 0e78fe9c40 | |||
| 6b81b0b686 | |||
| 3c6ed86e75 | |||
| 8984f91cbc | |||
| 2a93cace52 | |||
| 7fd266f3dd | |||
| 64d0a46970 | |||
| 58db14bc02 | |||
| 1ee22cf974 | |||
| 87d240b49f | |||
| 14b225a4b0 | |||
| d7aa89fad5 | |||
| 11459ac20b | |||
| ecfae285f3 | |||
| db78493a2a | |||
| 88d53d6195 | |||
| 81ee9426c1 | |||
| c578b2c03d | |||
| 8ccbe8263e | |||
| 1f9a271e7b | |||
| 72cf8717b2 | |||
| af58e92003 | |||
| 232d5a36c7 | |||
| 957942b623 | |||
| 5970cd61c1 | |||
| e6a6169f45 | |||
| 860e1fc5c1 | |||
| b4b11607e4 | |||
| eef2c16193 | |||
| ce72052463 | |||
| f9b4eab0c9 | |||
| 7b4293688d | |||
| a2c3e80b5b | |||
| 09baa44e02 | |||
| a280c0ea3d | |||
| 0dea456d13 | |||
| 9f3fbfe597 | |||
| 24d88cde41 | |||
| eeb9a93132 | |||
| 76c52eecce | |||
| e5ee956c8e | |||
| 5e1c975ef7 | |||
| 842c491713 | |||
| d49127232e | |||
| 53e583b9d2 | |||
| 8c31dbcf51 |
+13
-4
@@ -42,6 +42,7 @@ local BeamData = {
|
|||||||
DRILL_TOL = 0.2, -- tolleranza tra diametro foro e diametro punta
|
DRILL_TOL = 0.2, -- tolleranza tra diametro foro e diametro punta
|
||||||
DRILL_VZ_MIN = - 0.51, -- componente limite in Z del versore di un foro
|
DRILL_VZ_MIN = - 0.51, -- componente limite in Z del versore di un foro
|
||||||
DRILL_VX_MAX = 0.867, -- componente limite in X del versore di un foro sulle facce laterali
|
DRILL_VX_MAX = 0.867, -- componente limite in X del versore di un foro sulle facce laterali
|
||||||
|
MAX_ANGLE_DRILL_CUT = 15, -- delta angolo massimo tra foro e taglio che lo attraversa
|
||||||
DRILL_OVERLAP = 5, -- sovrapposizione tra due mezze forature
|
DRILL_OVERLAP = 5, -- sovrapposizione tra due mezze forature
|
||||||
MILL_OVERLAP = 5, -- sovrapposizione tra due mezze fresature
|
MILL_OVERLAP = 5, -- sovrapposizione tra due mezze fresature
|
||||||
MAX_DIST_HTFEA = 50.0, -- massima distanza di feature da testa o coda per essere considerata tale
|
MAX_DIST_HTFEA = 50.0, -- massima distanza di feature da testa o coda per essere considerata tale
|
||||||
@@ -68,13 +69,16 @@ local BeamData = {
|
|||||||
KIOTP = 5, -- coefficiente moltiplicativo per attacco/uscita lama tangente anzichè perpendicolare
|
KIOTP = 5, -- coefficiente moltiplicativo per attacco/uscita lama tangente anzichè perpendicolare
|
||||||
MAXDIAM_POCK_CORNER = 31, -- diametro massimo utensile ammesso per tasche con angoli interni
|
MAXDIAM_POCK_CORNER = 31, -- diametro massimo utensile ammesso per tasche con angoli interni
|
||||||
USE_LONGCUT = true, -- per i tagli longitudinali usare solo la lavorazione di lama LongCut
|
USE_LONGCUT = true, -- per i tagli longitudinali usare solo la lavorazione di lama LongCut
|
||||||
PRECUT_HEAD = true, -- flag abilitazione pretaglio grezzo a zero in testa
|
HEAD_DIM_FOR_BH = 125, -- dimensione di ingombro della testa per block haus
|
||||||
PRECUT_TAIL = true, -- flag abilitazione pretaglio grezzo a zero in coda
|
MAX_LEN_BH_FROM_BOTTOM = 210, -- massima lunghezza lavorabile da un lato di block haus da sotto
|
||||||
|
MAX_DIST_BH_FROM_BOTTOM = 600, -- massima distanza tra naso mandrino e sopra della trave senza collisione
|
||||||
ADVANCE_TAIL_CUT = true, -- per spostare prima del taglio di separazione il taglio di coda su pezzi corti con robabile caduta
|
ADVANCE_TAIL_CUT = true, -- per spostare prima del taglio di separazione il taglio di coda su pezzi corti con robabile caduta
|
||||||
ADVANCE_TAIL_OFFS = 10, -- accorciamento taglio di coda avanzato (minimo 1)
|
ADVANCE_TAIL_OFFS = 10, -- accorciamento taglio di coda avanzato (minimo 1)
|
||||||
DOUBLE_HEAD_DOVETAIL = false, -- flag abilitazione lavorazione mortase a coda di rondine in doppio
|
DOUBLE_HEAD_DOVETAIL = false, -- flag abilitazione lavorazione mortase a coda di rondine in doppio
|
||||||
DOUBLE_HEAD_MORTISE = false, -- flag abilitazione lavorazione mortase in doppio
|
DOUBLE_HEAD_MORTISE = false, -- flag abilitazione lavorazione mortase in doppio
|
||||||
DOUBLE_HEAD_DRILLING = false, -- flag abilitazione forature in doppio
|
DOUBLE_HEAD_DRILLING = false, -- flag abilitazione forature in doppio
|
||||||
|
PRECUT_HEAD = true, -- flag abilitazione pretaglio grezzo a zero in testa
|
||||||
|
PRECUT_TAIL = true, -- flag abilitazione pretaglio grezzo a zero in coda
|
||||||
CLAMP5 = false -- presenza pinza speciale per pezzi piccoli
|
CLAMP5 = false -- presenza pinza speciale per pezzi piccoli
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,6 +103,8 @@ if EgtExistsFile( sData) then
|
|||||||
if Machine.Offsets.DOUBLE_HEAD_DOVETAIL then BeamData.DOUBLE_HEAD_DOVETAIL = ( Machine.Offsets.DOUBLE_HEAD_DOVETAIL == 1) end
|
if Machine.Offsets.DOUBLE_HEAD_DOVETAIL then BeamData.DOUBLE_HEAD_DOVETAIL = ( Machine.Offsets.DOUBLE_HEAD_DOVETAIL == 1) end
|
||||||
if Machine.Offsets.DOUBLE_HEAD_MORTISE then BeamData.DOUBLE_HEAD_MORTISE = ( Machine.Offsets.DOUBLE_HEAD_MORTISE == 1) end
|
if Machine.Offsets.DOUBLE_HEAD_MORTISE then BeamData.DOUBLE_HEAD_MORTISE = ( Machine.Offsets.DOUBLE_HEAD_MORTISE == 1) end
|
||||||
if Machine.Offsets.DOUBLE_HEAD_DRILLING then BeamData.DOUBLE_HEAD_DRILLING = ( Machine.Offsets.DOUBLE_HEAD_DRILLING == 1) end
|
if Machine.Offsets.DOUBLE_HEAD_DRILLING then BeamData.DOUBLE_HEAD_DRILLING = ( Machine.Offsets.DOUBLE_HEAD_DRILLING == 1) end
|
||||||
|
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.MINRAW_S = max( BeamData.MINRAW_S, Machine.Offsets.MINRAW_S or BeamData.MINRAW_S)
|
BeamData.MINRAW_S = max( BeamData.MINRAW_S, Machine.Offsets.MINRAW_S or BeamData.MINRAW_S)
|
||||||
BeamData.MINRAW_L = max( BeamData.MINRAW_L, Machine.Offsets.MINRAW_L or BeamData.MINRAW_L)
|
BeamData.MINRAW_L = max( BeamData.MINRAW_L, Machine.Offsets.MINRAW_L or BeamData.MINRAW_L)
|
||||||
BeamData.CUT_EXTRA = Machine.Offsets.CUT_EXTRA or BeamData.CUT_EXTRA
|
BeamData.CUT_EXTRA = Machine.Offsets.CUT_EXTRA or BeamData.CUT_EXTRA
|
||||||
@@ -112,9 +118,11 @@ if EgtExistsFile( sData) then
|
|||||||
BeamData.LEN_VERY_SHORT_PART = Machine.Offsets.LEN_VERY_SHORT_PART or BeamData.LEN_VERY_SHORT_PART
|
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.LEN_SHORT_PART = Machine.Offsets.LEN_SHORT_PART or BeamData.LEN_SHORT_PART
|
||||||
BeamData.OVM_MID = Machine.Offsets.OVM_MID or BeamData.OVM_MID
|
BeamData.OVM_MID = Machine.Offsets.OVM_MID or BeamData.OVM_MID
|
||||||
|
if Machine.Offsets.MAX_ANGLE_DRILL_CUT then BeamData.MAX_ANGLE_DRILL_CUT = EgtClamp( Machine.Offsets.MAX_ANGLE_DRILL_CUT, 1, 89) end
|
||||||
if Machine.Offsets.ROT90 ~= nil then BeamData.ROT90 = ( Machine.Offsets.ROT90 == 1) end
|
if Machine.Offsets.ROT90 ~= nil then BeamData.ROT90 = ( Machine.Offsets.ROT90 == 1) end
|
||||||
if Machine.Offsets.PRECUT_HEAD_DISABLE then BeamData.PRECUT_HEAD = ( Machine.Offsets.PRECUT_HEAD_DISABLE == 0) end
|
if Machine.Offsets.CUT_SIC then BeamData.CUT_SIC = EgtClamp( Machine.Offsets.CUT_SIC, 15, 50) end
|
||||||
if Machine.Offsets.PRECUT_TAIL_DISABLE then BeamData.PRECUT_TAIL = ( Machine.Offsets.PRECUT_TAIL_DISABLE == 0) end
|
if Machine.Offsets.MIN_JOIN_S then BeamData.MIN_JOIN_S = EgtClamp( Machine.Offsets.MIN_JOIN_S, 80, 150) end
|
||||||
|
if Machine.Offsets.MIN_JOIN_L then BeamData.MIN_JOIN_L = EgtClamp( Machine.Offsets.MIN_JOIN_L, 300, 450) end
|
||||||
end
|
end
|
||||||
if Machine.Trave then
|
if Machine.Trave then
|
||||||
BeamData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH
|
BeamData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH
|
||||||
@@ -226,6 +234,7 @@ local function GetSetupInfo( sHead)
|
|||||||
SetupInfo.bIsCSymmetrical = true
|
SetupInfo.bIsCSymmetrical = true
|
||||||
SetupInfo.dCAxisEncumbrance = 180
|
SetupInfo.dCAxisEncumbrance = 180
|
||||||
SetupInfo.bToolOnAggregate = false
|
SetupInfo.bToolOnAggregate = false
|
||||||
|
SetupInfo.Head = {}
|
||||||
|
|
||||||
-- testa 5 assi da sopra, dietro
|
-- testa 5 assi da sopra, dietro
|
||||||
if sHead == 'H11' then
|
if sHead == 'H11' then
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
23=SmallToolContour
|
23=SmallToolContour
|
||||||
24=AntiSplintMillCut
|
24=AntiSplintMillCut
|
||||||
25=Prof_end
|
25=Prof_end
|
||||||
|
26=SideMillAsBlade
|
||||||
|
|
||||||
[Pocketing]
|
[Pocketing]
|
||||||
1=Pocket
|
1=Pocket
|
||||||
|
|||||||
+238
-89
@@ -129,6 +129,11 @@ function OnToolData()
|
|||||||
local sOut = 'L1='..EgtNumToString( EMT.SMAX, 0)..' L2='..EmtLenToString( EMT.TDIST or ChSawLen, 1)
|
local sOut = 'L1='..EgtNumToString( EMT.SMAX, 0)..' L2='..EmtLenToString( EMT.TDIST or ChSawLen, 1)
|
||||||
sOut = sOut .. EgtIf( EMT.TCPOS == 'T111', ' G76H9998.2N411N414', ' G76H9998.2N511N514')
|
sOut = sOut .. EgtIf( EMT.TCPOS == 'T111', ' G76H9998.2N411N414', ' G76H9998.2N511N514')
|
||||||
EmtOutput( '('..sOut..')')
|
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)
|
-- emissione dati utensile (esclusa sega a catena)
|
||||||
else
|
else
|
||||||
-- output info
|
-- output info
|
||||||
@@ -142,7 +147,6 @@ function OnToolData()
|
|||||||
if EMT.TCPOS == 'T201' then
|
if EMT.TCPOS == 'T201' then
|
||||||
sPos = 'N411'
|
sPos = 'N411'
|
||||||
else
|
else
|
||||||
|
|
||||||
sPos = EgtIf( #EMT.TCPOS == 2, EMT.TCPOS:gsub( 'T', 'N30'), EMT.TCPOS:gsub( 'T', 'N3'))
|
sPos = EgtIf( #EMT.TCPOS == 2, EMT.TCPOS:gsub( 'T', 'N30'), EMT.TCPOS:gsub( 'T', 'N3'))
|
||||||
end
|
end
|
||||||
local sOut = 'L1='..EgtNumToString( EMT.SMAX, 0)..' L2='..EmtLenToString( dAddLen + EMT.TTOTLEN, 1)..' G76H9998.2'..sPos..sPos
|
local sOut = 'L1='..EgtNumToString( EMT.SMAX, 0)..' L2='..EmtLenToString( dAddLen + EMT.TTOTLEN, 1)..' G76H9998.2'..sPos..sPos
|
||||||
@@ -310,6 +314,8 @@ function OnDispositionEnd()
|
|||||||
else
|
else
|
||||||
if #EMT.MDCHAR > 0 then
|
if #EMT.MDCHAR > 0 then
|
||||||
MyOutputNoNum( '(PART UNLOAD)')
|
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
|
for i = 1, #EMT.MDCHAR do
|
||||||
EmitMoveDataChars( EMT.MDCHAR[i])
|
EmitMoveDataChars( EMT.MDCHAR[i])
|
||||||
if EMT.MDCHAR[i].V1 then EMT.V1POS = EMT.MDCHAR[i].V1 end
|
if EMT.MDCHAR[i].V1 then EMT.V1POS = EMT.MDCHAR[i].V1 end
|
||||||
@@ -591,7 +597,7 @@ function OnMachiningEnd()
|
|||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
end
|
end
|
||||||
elseif not EMT.PREROT then
|
elseif not EMT.PREROT then
|
||||||
EmtOutput( '(M77)')
|
EmtOutput( 'M77')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -678,7 +684,7 @@ function OnPathStart()
|
|||||||
if EMT.TOOL == EMT.PREVTOOL and not EMT.ZMAX then
|
if EMT.TOOL == EMT.PREVTOOL and not EMT.ZMAX then
|
||||||
EMT.L1pp = EMT.L1op
|
EMT.L1pp = EMT.L1op
|
||||||
EMT.L2pp = EMT.L2op
|
EMT.L2pp = EMT.L2op
|
||||||
EMT.L3pp = EMT.L3op
|
EMT.L3pp = EMT.L3op or EMT.L3pp
|
||||||
EMT.R1pp = EMT.R1p or EMT.R1pp
|
EMT.R1pp = EMT.R1p or EMT.R1pp
|
||||||
EMT.R2pp = EMT.R2p or EMT.R2pp
|
EMT.R2pp = EMT.R2p or EMT.R2pp
|
||||||
else
|
else
|
||||||
@@ -1002,7 +1008,16 @@ function OnRapid()
|
|||||||
if EMT.HEAD == 'H12' and abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC1 - EMT.R1) > 30.1 or abs( HomeB1 - EMT.R2) > 30.1) then
|
if EMT.HEAD == 'H12' and abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC1 - EMT.R1) > 30.1 or abs( HomeB1 - EMT.R2) > 30.1) then
|
||||||
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, { Z=dZref, 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=dZref, B=dBref, S=Speed})
|
||||||
|
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||||
|
else
|
||||||
|
EmitMoveDataHead( 1, { Z=dZref, B=EMT.R2, S=Speed})
|
||||||
|
end
|
||||||
|
|
||||||
if bMoveZbeforeX then
|
if bMoveZbeforeX then
|
||||||
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
||||||
end
|
end
|
||||||
@@ -1063,7 +1078,7 @@ function OnRapid()
|
|||||||
local dTRad, dTLen = GetToolRadLen()
|
local dTRad, dTLen = GetToolRadLen()
|
||||||
-- se fresa o lama
|
-- se fresa o lama
|
||||||
if not HeadIsChainSaw( EMT.HEAD) then
|
if not HeadIsChainSaw( EMT.HEAD) then
|
||||||
EmitMoveDataHead( 1, { X=-ParkX2, Z=MyMaxZ1, B=HomeB1, C=HomeC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
EmitMoveDataHead( 1, { X=-ParkFrnX1, Z=MyMaxZ1, B=HomeB1, C=HomeC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||||
EmitMoveStartHead( 1)
|
EmitMoveStartHead( 1)
|
||||||
EmitMoveWaitHead( 1)
|
EmitMoveWaitHead( 1)
|
||||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||||
@@ -1086,7 +1101,15 @@ function OnRapid()
|
|||||||
if EMT.HEAD == 'H12' and abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC1 - EMT.R1) > 30.1 or abs( HomeB1 - EMT.R2) > 30.1) then
|
if EMT.HEAD == 'H12' and abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC1 - EMT.R1) > 30.1 or abs( HomeB1 - EMT.R2) > 30.1) then
|
||||||
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, { Z=dZref, 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=dZref, B=dBref, S=Speed})
|
||||||
|
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||||
|
else
|
||||||
|
EmitMoveDataHead( 1, { Z=dZref, B=EMT.R2, S=Speed})
|
||||||
|
end
|
||||||
if bMoveZbeforeX then
|
if bMoveZbeforeX then
|
||||||
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
||||||
end
|
end
|
||||||
@@ -1156,7 +1179,15 @@ function OnRapid()
|
|||||||
if EMT.HEAD == 'H22' then
|
if EMT.HEAD == 'H22' then
|
||||||
EmitMoveDataHead( 2, { B=0, S=Speed})
|
EmitMoveDataHead( 2, { B=0, S=Speed})
|
||||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||||
EmitMoveDataHead( 2, { Z=dZref, 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( 2, { Z=dZref, B=dBref, S=Speed})
|
||||||
|
EmitMoveDataHead( 2, { B=EMT.R2, S=Speed})
|
||||||
|
else
|
||||||
|
EmitMoveDataHead( 2, { Z=dZref, B=EMT.R2, S=Speed})
|
||||||
|
end
|
||||||
if bMoveZbeforeX then
|
if bMoveZbeforeX then
|
||||||
EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed})
|
EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed})
|
||||||
end
|
end
|
||||||
@@ -1242,7 +1273,7 @@ function OnRapid()
|
|||||||
else
|
else
|
||||||
--EmtOutput( string.format( 'V1Pos=%.3f V2Pos=%.3f', EMT.V1POS, EMT.V2POS))
|
--EmtOutput( string.format( 'V1Pos=%.3f V2Pos=%.3f', EMT.V1POS, EMT.V2POS))
|
||||||
local bToPresel = true
|
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
|
-- allontanamento o eventuale preselezione successiva testa differente
|
||||||
if not EMT.DOU_TYPE then
|
if not EMT.DOU_TYPE then
|
||||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||||
@@ -1376,7 +1407,15 @@ function OnRapid()
|
|||||||
if EMT.HEAD == 'H12' and abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC1 - EMT.R1) > 30.1 or abs( HomeB1 - EMT.R2) > 30.1) then
|
if EMT.HEAD == 'H12' and abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC1 - EMT.R1) > 30.1 or abs( HomeB1 - EMT.R2) > 30.1) then
|
||||||
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, { Z=dZref, 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=dZref, B=dBref, S=Speed})
|
||||||
|
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||||
|
else
|
||||||
|
EmitMoveDataHead( 1, { Z=dZref, B=EMT.R2, S=Speed})
|
||||||
|
end
|
||||||
if bMoveZbeforeX then
|
if bMoveZbeforeX then
|
||||||
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
||||||
end
|
end
|
||||||
@@ -1465,7 +1504,15 @@ function OnRapid()
|
|||||||
if EMT.HEAD == 'H12' and abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC1 - EMT.R1) > 30.1 or abs( HomeB1 - EMT.R2) > 30.1) then
|
if EMT.HEAD == 'H12' and abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC1 - EMT.R1) > 30.1 or abs( HomeB1 - EMT.R2) > 30.1) then
|
||||||
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, { Z=dZref, 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=dZref, B=dBref, S=Speed})
|
||||||
|
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||||
|
else
|
||||||
|
EmitMoveDataHead( 1, { Z=dZref, B=EMT.R2, S=Speed})
|
||||||
|
end
|
||||||
if bMoveZbeforeX then
|
if bMoveZbeforeX then
|
||||||
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
||||||
end
|
end
|
||||||
@@ -1530,7 +1577,15 @@ function OnRapid()
|
|||||||
if EMT.HEAD == 'H22' then
|
if EMT.HEAD == 'H22' then
|
||||||
EmitMoveDataHead( 2, { B=0, S=Speed})
|
EmitMoveDataHead( 2, { B=0, S=Speed})
|
||||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||||
EmitMoveDataHead( 2, { Z=dZref, 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( 2, { Z=dZref, B=dBref, S=Speed})
|
||||||
|
EmitMoveDataHead( 2, { B=EMT.R2, S=Speed})
|
||||||
|
else
|
||||||
|
EmitMoveDataHead( 2, { Z=dZref, B=EMT.R2, S=Speed})
|
||||||
|
end
|
||||||
if bMoveZbeforeX then
|
if bMoveZbeforeX then
|
||||||
EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed})
|
EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed})
|
||||||
end
|
end
|
||||||
@@ -1725,7 +1780,9 @@ function OnRapid()
|
|||||||
EMT.L1o = EMT.TPOS
|
EMT.L1o = EMT.TPOS
|
||||||
if bZMax then
|
if bZMax then
|
||||||
EMT.ZMAX = true
|
EMT.ZMAX = true
|
||||||
|
ToolPreSelectionSingleHead( EMT.MCHID)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- se altrimenti movimento in Home
|
-- se altrimenti movimento in Home
|
||||||
elseif EMT.FLAG == 4 then
|
elseif EMT.FLAG == 4 then
|
||||||
-- non previsto
|
-- non previsto
|
||||||
@@ -1788,6 +1845,7 @@ function OnLinear()
|
|||||||
local sDouFlag = EgtIf( EMT.DOU_TYPE, ' EE1', '')
|
local sDouFlag = EgtIf( EMT.DOU_TYPE, ' EE1', '')
|
||||||
EmtOutput( 'G142'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..EMT.IPLGLSTR
|
EmtOutput( 'G142'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..EMT.IPLGLSTR
|
||||||
..EgtIf( nHSet~=2 and nHSet~=22, ' EU1', ' EU2')..sDouFlag..' EF'..GetFmaxClamp())
|
..EgtIf( nHSet~=2 and nHSet~=22, ' EU1', ' EU2')..sDouFlag..' EF'..GetFmaxClamp())
|
||||||
|
EMT.PLANEACTIVE = true
|
||||||
-- emissione movimento
|
-- emissione movimento
|
||||||
local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..
|
local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..
|
||||||
EmtGetAxis('R2')..EmtGetAxis('R1')
|
EmtGetAxis('R2')..EmtGetAxis('R1')
|
||||||
@@ -1873,6 +1931,7 @@ function OnArc()
|
|||||||
local sDouFlag = EgtIf( EMT.DOU_TYPE, ' EE1', '')
|
local sDouFlag = EgtIf( EMT.DOU_TYPE, ' EE1', '')
|
||||||
EmtOutput( 'G142'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..EMT.IPLGLSTR
|
EmtOutput( 'G142'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..EMT.IPLGLSTR
|
||||||
..EgtIf( nHSet~=2 and nHSet~=22, ' EU1', ' EU2')..sDouFlag..' EF'..GetFmaxClamp())
|
..EgtIf( nHSet~=2 and nHSet~=22, ' EU1', ' EU2')..sDouFlag..' EF'..GetFmaxClamp())
|
||||||
|
EMT.PLANEACTIVE = true
|
||||||
-- emissione movimento
|
-- emissione movimento
|
||||||
local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..
|
local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..
|
||||||
EmtGetAxis('R2')..EmtGetAxis('R1')
|
EmtGetAxis('R2')..EmtGetAxis('R1')
|
||||||
@@ -1920,24 +1979,6 @@ function OnArc()
|
|||||||
EmtUpdatePrev()
|
EmtUpdatePrev()
|
||||||
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 CalcCharStatusN( sCmd)
|
function CalcCharStatusN( sCmd)
|
||||||
-- aperto
|
-- aperto
|
||||||
@@ -2416,7 +2457,7 @@ function PreparePreRotation( sCmd, nInd)
|
|||||||
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY1=86, FinStatY1=87, BeamVise=0}
|
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY1=86, FinStatY1=87, BeamVise=0}
|
||||||
elseif EMT.SPECSPLIT or EMT.SPLITROT then
|
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}
|
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
|
else
|
||||||
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, BeamVise=EMT.BV}
|
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, BeamVise=EMT.BV}
|
||||||
end
|
end
|
||||||
@@ -2650,10 +2691,15 @@ function MyAdjustLinearAxes()
|
|||||||
local Len = ( EMT.TDIST or ChSawLen) + Mill2Offs
|
local Len = ( EMT.TDIST or ChSawLen) + Mill2Offs
|
||||||
local LenRef = Mill2Offs
|
local LenRef = Mill2Offs
|
||||||
vtE = Vector3d( EMT.ADIR) * Len - Z_AX() * LenRef
|
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
|
else
|
||||||
EmtSetLastError( 1211, 'Head not defined ' .. ( EMT.HEAD or ''))
|
EmtSetLastError( 1211, 'Head not defined ' .. ( EMT.HEAD or ''))
|
||||||
end
|
end
|
||||||
if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' or EMT.HEAD == 'H13' or EMT.HEAD == 'H15' or EMT.HEAD == 'H19' then
|
if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' or EMT.HEAD == 'H13' or EMT.HEAD == 'H15' or sHead == 'H17' or EMT.HEAD == 'H19' then
|
||||||
EMT.L1 = EMT.L1 - vtE:getX()
|
EMT.L1 = EMT.L1 - vtE:getX()
|
||||||
EMT.L2 = EMT.L2 - DeltaTabY - vtE:getY()
|
EMT.L2 = EMT.L2 - DeltaTabY - vtE:getY()
|
||||||
EMT.L3 = EMT.L3 - DeltaTabZ - vtE:getZ()
|
EMT.L3 = EMT.L3 - DeltaTabZ - vtE:getZ()
|
||||||
@@ -2766,6 +2812,9 @@ function GetToolRadLen()
|
|||||||
-- se sega a catena
|
-- se sega a catena
|
||||||
elseif HeadIsChainSaw( EMT.HEAD) then
|
elseif HeadIsChainSaw( EMT.HEAD) then
|
||||||
return EMT.TLEN, ( EMT.TDIST or ChSawLen)
|
return EMT.TLEN, ( EMT.TDIST or ChSawLen)
|
||||||
|
-- se aggregato BlockHaus
|
||||||
|
elseif EMT.HEAD == 'H17' then
|
||||||
|
return EMT.TDIAM / 2, AngTrBHOffs
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -2787,7 +2836,7 @@ function CalcInterpPlane()
|
|||||||
local _, dAngV, dAngO = SphericalFromVector( vtE)
|
local _, dAngV, dAngO = SphericalFromVector( vtE)
|
||||||
local dAngO2 = EmtGetAngO2( EMT.IPLGLFR:getVersZ(), EMT.IPLGLFR:getVersX(), dAngV, dAngO)
|
local dAngO2 = EmtGetAngO2( EMT.IPLGLFR:getVersZ(), EMT.IPLGLFR:getVersX(), dAngV, dAngO)
|
||||||
dAngO = dAngO + 90
|
dAngO = dAngO + 90
|
||||||
while dAngO >= 360 do
|
while dAngO + 100 * GEO.EPS_SMALL > 360 do
|
||||||
dAngO = dAngO - 360
|
dAngO = dAngO - 360
|
||||||
end
|
end
|
||||||
EMT.IPLGLSTR = ' EX0 EY'..EmtLenToString( xS)..' EZ0'..
|
EMT.IPLGLSTR = ' EX0 EY'..EmtLenToString( xS)..' EZ0'..
|
||||||
@@ -2881,10 +2930,10 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
|||||||
-- se tastatura attiva, si disabilita la tastatura
|
-- se tastatura attiva, si disabilita la tastatura
|
||||||
-- gestione eventuale tastatura
|
-- gestione eventuale tastatura
|
||||||
local bStopProbing = EgtGetValInNotes( EMT.MCHUSERNOTES, 'PROBE', 'b') or EgtGetValInNotes( EMT.MCHUSERNOTES, 'END-PROBE', 'b')
|
local bStopProbing = EgtGetValInNotes( EMT.MCHUSERNOTES, 'PROBE', 'b') or EgtGetValInNotes( EMT.MCHUSERNOTES, 'END-PROBE', 'b')
|
||||||
if bStopProbing then
|
if EMT.PROBE and bStopProbing then
|
||||||
EmtOutput( 'G145 Z-10 EF0')
|
EmtOutput( 'G145 Z-10 EF0')
|
||||||
|
EMT.PROBE = nil
|
||||||
end
|
end
|
||||||
EMT.PROBE = nil
|
|
||||||
|
|
||||||
-- gruppo della testa
|
-- gruppo della testa
|
||||||
local nHSet = GetHeadSet( EMT.HEAD)
|
local nHSet = GetHeadSet( EMT.HEAD)
|
||||||
@@ -2986,6 +3035,24 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
|||||||
-- ribadisco movimento perchè in G141 si aspetta sempre tutti i valori
|
-- ribadisco movimento perchè in G141 si aspetta sempre tutti i valori
|
||||||
local MovH = { X = -dXPos, Z = EMT.L3o, B = PrevR2, C = PrevR1}
|
local MovH = { X = -dXPos, Z = EMT.L3o, B = PrevR2, C = PrevR1}
|
||||||
EmitMoveDataHead( 1, MovH)
|
EmitMoveDataHead( 1, MovH)
|
||||||
|
-- controlla che l'ingombro della sega a catena non possa collidere durante il suo riposizionamento
|
||||||
|
local dChSawEncumbrance = sqrt( pow( EMT.TTOTLEN, 2) + pow( ChSawLen + MillOffs, 2))
|
||||||
|
if EMT.ADIR and EMT.TDIR then
|
||||||
|
-- direzione versore sega a catena X- (copre anche eventuali inclinazioni in Y)
|
||||||
|
if EMT.TDIR[1] <= 0 then
|
||||||
|
-- ingombro massimo di quota Z (senza pivot) + ingombro massimo sega + altezza pezzo + altezza sicurezza
|
||||||
|
local dEncumbranceTot = EMT.L3o + MillOffs - dChSawEncumbrance - EMT.SB - 30
|
||||||
|
-- nuova quota Z intermedia
|
||||||
|
local dZUp = EMT.L3o + ( DeltaTabZ - dEncumbranceTot)
|
||||||
|
-- se la nuova quota è minore della quota di parcheggio
|
||||||
|
if dZUp <= ParkCSawZ1 then
|
||||||
|
-- se B è oltre il punto di massimo ingombro (con l'inclinazione attuale non ha il massimo ingombro)
|
||||||
|
if asin( EMT.TDIR[3] / 1) > asin( EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) / dChSawEncumbrance) and ( dEncumbranceTot < DeltaTabZ) then
|
||||||
|
EmitMoveDataHead( 1, { Z=dZUp})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
EmitMoveDataHead( 1, { Z=dSafeZ1, B=dSafeB1})
|
EmitMoveDataHead( 1, { Z=dSafeZ1, B=dSafeB1})
|
||||||
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
||||||
EmitMoveDataHead( 1, { Z=ParkCSawZ1})
|
EmitMoveDataHead( 1, { Z=ParkCSawZ1})
|
||||||
@@ -3043,6 +3110,24 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
|||||||
-- ribadisco movimento perchè in G141 si aspetta sempre tutti i valori
|
-- ribadisco movimento perchè in G141 si aspetta sempre tutti i valori
|
||||||
local MovH = { X = -dXPos, Z = EMT.L3o, B = PrevR2, C = PrevR1}
|
local MovH = { X = -dXPos, Z = EMT.L3o, B = PrevR2, C = PrevR1}
|
||||||
EmitMoveDataHead( 2, MovH)
|
EmitMoveDataHead( 2, MovH)
|
||||||
|
-- controlla che l'ingombro della sega a catena non possa collidere durante il suo riposizionamento
|
||||||
|
local dChSawEncumbrance = sqrt( pow( EMT.TTOTLEN, 2) + pow( ChSawLen + Mill2Offs, 2))
|
||||||
|
if EMT.ADIR and EMT.TDIR then
|
||||||
|
-- direzione versore sega a catena X- (copre anche eventuali inclinazioni in Y)
|
||||||
|
if EMT.TDIR[1] <= 0 then
|
||||||
|
-- ingombro massimo di quota Z (senza pivot) + ingombro massimo sega + altezza pezzo + altezza sicurezza
|
||||||
|
local dEncumbranceTot = EMT.L3o + Mill2Offs - dChSawEncumbrance - EMT.SB - 30
|
||||||
|
-- nuova quota Z intermedia
|
||||||
|
local dZUp = EMT.L3o + ( DeltaTabZ - dEncumbranceTot)
|
||||||
|
-- se la nuova quota è minore della quota di parcheggio
|
||||||
|
if dZUp <= ParkCSawZ2 then
|
||||||
|
-- se B è oltre il punto di massimo ingombro (con l'inclinazione attuale non ha il massimo ingombro)
|
||||||
|
if asin( EMT.TDIR[3] / 1) > asin( EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) / dChSawEncumbrance) and ( dEncumbranceTot < DeltaTabZ) then
|
||||||
|
EmitMoveDataHead( 2, { Z=dZUp})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
EmitMoveDataHead( 2, { Z=dSafeZ2, B=dSafeB2})
|
EmitMoveDataHead( 2, { Z=dSafeZ2, B=dSafeB2})
|
||||||
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
||||||
EmitMoveDataHead( 2, { Z=ParkCSawZ2})
|
EmitMoveDataHead( 2, { Z=ParkCSawZ2})
|
||||||
@@ -3235,6 +3320,57 @@ function EmitParkRoller( dPosT, bSplitCut, bUsePrevDelta)
|
|||||||
EMT.TPOS = dPosT
|
EMT.TPOS = dPosT
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
-- Se la lavorazione segue una disposizione ha un utensile diverso da quello attuale lo cambia durante la disposizione
|
||||||
|
function ToolPreSelectionSingleHead( nMchId)
|
||||||
|
-- Se non sono nell'ultima lavorazione della fase o se è una macchina a doppia testa ritorna senza fare nulla
|
||||||
|
local bIsPhaseEnd = ( EgtGetNextActiveOperation( nMchId) and EgtGetInfo( EgtGetNextActiveOperation( nMchId), 'TYPE') == 'END')
|
||||||
|
if not bIsPhaseEnd or EgtGetHeadId( 'H21') then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
-- nome utensile
|
||||||
|
local sToolChange
|
||||||
|
local sToolChangePos
|
||||||
|
local sToolChangeHead
|
||||||
|
-- recupero lavorazione successiva e se contiene un utensile diverso salva utensile e posizione utensile
|
||||||
|
local nNextMchId = EgtGetNextActiveOperation( nMchId)
|
||||||
|
while nNextMchId do
|
||||||
|
if EgtGetOperationType( nNextMchId) ~= MCH_OY.DISP then
|
||||||
|
if EgtSetCurrMachining( nNextMchId) then
|
||||||
|
local sNextTool = EgtGetMachiningParam( MCH_MP.TOOL)
|
||||||
|
if EgtTdbSetCurrTool( sNextTool) then
|
||||||
|
if EMT.TOOL ~= sNextTool then
|
||||||
|
local sNextHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
||||||
|
if not HeadIsChainSaw( sNextHead) then
|
||||||
|
sToolChange = sNextTool
|
||||||
|
sToolChangePos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS)
|
||||||
|
sToolChangeHead = sNextHead
|
||||||
|
end
|
||||||
|
end
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
nNextMchId = EgtGetNextActiveOperation( nNextMchId)
|
||||||
|
end
|
||||||
|
-- ripristino stato corrente
|
||||||
|
EgtSetCurrMachining( EMT.MCHID)
|
||||||
|
EgtTdbSetCurrTool( EMT.TOOL)
|
||||||
|
-- controlla se l'operazione successiva e quella ancora dopo esistono e sono disposizioni
|
||||||
|
local bNextOpIsDisp = ( EgtGetNextActiveOperation( nMchId)
|
||||||
|
and ( EgtGetOperationType( EgtGetNextActiveOperation( nMchId)) == MCH_OY.DISP)
|
||||||
|
and ( EgtGetNextActiveOperation( EgtGetNextActiveOperation( nMchId)))
|
||||||
|
and ( EgtGetOperationType( EgtGetNextActiveOperation( EgtGetNextActiveOperation( nMchId))) == MCH_OY.DISP))
|
||||||
|
-- emetto preselezione utensile
|
||||||
|
if bIsPhaseEnd and bNextOpIsDisp then
|
||||||
|
if ( EMT.TOOL and sToolChangePos and sToolChange and sToolChangeHead) and EMT.TOOL ~= sToolChangePos and not HeadIsChainSaw( sToolChangeHead) then
|
||||||
|
local MyParkX1 = EgtIf( GetHeadTCSet( sToolChangeHead, sToolChangePos) == 'Head1_TC2', ParkFrnX1, ParkX1)
|
||||||
|
EmitMoveDataHead( 1, { X=-MyParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sToolChangePos)})
|
||||||
|
EmitMoveStartHead( 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function PreselectNextDiffHead( nMchId, sHead)
|
function PreselectNextDiffHead( nMchId, sHead)
|
||||||
-- se non ho due teste, esco subito
|
-- se non ho due teste, esco subito
|
||||||
@@ -3244,67 +3380,80 @@ function PreselectNextDiffHead( nMchId, sHead)
|
|||||||
|
|
||||||
-- gruppo della testa
|
-- gruppo della testa
|
||||||
local nHSet = GetHeadSet( sHead)
|
local nHSet = GetHeadSet( sHead)
|
||||||
|
|
||||||
|
local bVerifyPresel = true
|
||||||
|
-- se lavorazione con testa 1 e sotto al limite massimo di preselezione della testa 2, allora non si fa preselezione
|
||||||
|
if nHSet == 1 and Limit_T1_Presel_T2 and EMT.MAXMIN[2] < Limit_T1_Presel_T2 then
|
||||||
|
bVerifyPresel = false
|
||||||
|
-- se lavorazione con testa 1 e sopra al limite minimo di preselezione della testa 1, allora non si fa preselezione
|
||||||
|
elseif nHSet == 2 and Limit_T2_Presel_T1 and EMT.MAXMIN[2] > Limit_T2_Presel_T1 then
|
||||||
|
bVerifyPresel = false
|
||||||
|
end
|
||||||
|
|
||||||
-- flag preselezione eseguita
|
-- flag preselezione eseguita
|
||||||
local bPresel = false
|
local bPresel = false
|
||||||
-- recupero lavorazione successiva
|
|
||||||
local nNextMchId = EgtGetNextActiveOperation( nMchId)
|
if bVerifyPresel then
|
||||||
while nNextMchId do
|
-- recupero lavorazione successiva
|
||||||
if EgtGetOperationType( nNextMchId) ~= MCH_OY.DISP then
|
local nNextMchId = EgtGetNextActiveOperation( nMchId)
|
||||||
if EgtSetCurrMachining( nNextMchId) then
|
while nNextMchId do
|
||||||
local sNextTool = EgtGetMachiningParam( MCH_MP.TOOL)
|
if EgtGetOperationType( nNextMchId) ~= MCH_OY.DISP then
|
||||||
if EgtTdbSetCurrTool( sNextTool) then
|
if EgtSetCurrMachining( nNextMchId) then
|
||||||
local sNextHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
local sNextTool = EgtGetMachiningParam( MCH_MP.TOOL)
|
||||||
local nNextHSet = GetHeadSet( sNextHead)
|
if EgtTdbSetCurrTool( sNextTool) then
|
||||||
if nNextHSet ~= nHSet then
|
local sNextHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
||||||
break
|
local nNextHSet = GetHeadSet( sNextHead)
|
||||||
|
if nNextHSet ~= nHSet then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
nNextMchId = EgtGetNextActiveOperation( nNextMchId)
|
||||||
|
end
|
||||||
|
-- se esiste ed appartiene a gruppo diverso
|
||||||
|
if nNextMchId and EgtSetCurrMachining( nNextMchId) then
|
||||||
|
local sNextTool = EgtGetMachiningParam( MCH_MP.TOOL)
|
||||||
|
if EgtTdbSetCurrTool( sNextTool) then
|
||||||
|
local sNextHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
||||||
|
local nNextHSet = GetHeadSet( sNextHead)
|
||||||
|
if nNextHSet ~= nHSet then
|
||||||
|
local sNextTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS)
|
||||||
|
-- se testa attuale da caricare è sega a catena, mando l'altra prima in HomeX (per evitare possibili collisioni) e poi lancio preselezione
|
||||||
|
if sHead == 'H13' and nHSet ~= GetHeadSet( EMT.PREVHEAD_H1) then
|
||||||
|
EmitMoveDataHead( 2, { X=-ParkX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, EMT.PREVTCPOS_H2)})
|
||||||
|
EmitMoveStartHead( 2)
|
||||||
|
EmitMoveWaitHead( 2)
|
||||||
|
elseif sHead == 'H23' and nHSet ~= GetHeadSet( EMT.PREVHEAD_H2) then
|
||||||
|
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, EMT.PREVTCPOS_H1)})
|
||||||
|
EmitMoveStartHead( 1)
|
||||||
|
EmitMoveWaitHead( 1)
|
||||||
|
end
|
||||||
|
-- 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)
|
||||||
|
bPresel = true
|
||||||
|
elseif sNextHead == 'H12' then
|
||||||
|
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sNextTcPos)})
|
||||||
|
EmitMoveStartHead( 1)
|
||||||
|
bPresel = true
|
||||||
|
elseif sNextHead == 'H21' then
|
||||||
|
EmitMoveDataHead( 2, { X=-ParkX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, sNextTcPos)})
|
||||||
|
EmitMoveStartHead( 2)
|
||||||
|
bPresel = true
|
||||||
|
elseif sNextHead == 'H22' then
|
||||||
|
EmitMoveDataHead( 2, { X=-ParkX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, sNextTcPos)})
|
||||||
|
EmitMoveStartHead( 2)
|
||||||
|
bPresel = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
nNextMchId = EgtGetNextActiveOperation( nNextMchId)
|
-- ripristino stato corrente
|
||||||
|
EgtSetCurrMachining( EMT.MCHID)
|
||||||
|
EgtTdbSetCurrTool( EMT.TOOL)
|
||||||
end
|
end
|
||||||
-- se esiste ed appartiene a gruppo diverso
|
|
||||||
if nNextMchId and EgtSetCurrMachining( nNextMchId) then
|
|
||||||
local sNextTool = EgtGetMachiningParam( MCH_MP.TOOL)
|
|
||||||
if EgtTdbSetCurrTool( sNextTool) then
|
|
||||||
local sNextHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
|
||||||
local nNextHSet = GetHeadSet( sNextHead)
|
|
||||||
if nNextHSet ~= nHSet then
|
|
||||||
local sNextTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS)
|
|
||||||
-- se testa attuale da caricare è sega a catena, mando l'altra prima in HomeX (per evitare possibili collisioni) e poi lancio preselezione
|
|
||||||
if sHead == 'H13' and nHSet ~= GetHeadSet( EMT.PREVHEAD_H1) then
|
|
||||||
EmitMoveDataHead( 2, { X=-ParkX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, EMT.PREVTCPOS_H2)})
|
|
||||||
EmitMoveStartHead( 2)
|
|
||||||
EmitMoveWaitHead( 2)
|
|
||||||
elseif sHead == 'H23' and nHSet ~= GetHeadSet( EMT.PREVHEAD_H2) then
|
|
||||||
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, EMT.PREVTCPOS_H1)})
|
|
||||||
EmitMoveStartHead( 1)
|
|
||||||
EmitMoveWaitHead( 1)
|
|
||||||
end
|
|
||||||
-- Emetto preselezione (non ammessa per sega a catena H13 e H23)
|
|
||||||
if sNextHead == 'H11' then
|
|
||||||
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sNextTcPos)})
|
|
||||||
EmitMoveStartHead( 1)
|
|
||||||
bPresel = true
|
|
||||||
elseif sNextHead == 'H12' then
|
|
||||||
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sNextTcPos)})
|
|
||||||
EmitMoveStartHead( 1)
|
|
||||||
bPresel = true
|
|
||||||
elseif sNextHead == 'H21' then
|
|
||||||
EmitMoveDataHead( 2, { X=-ParkX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, sNextTcPos)})
|
|
||||||
EmitMoveStartHead( 2)
|
|
||||||
bPresel = true
|
|
||||||
elseif sNextHead == 'H22' then
|
|
||||||
EmitMoveDataHead( 2, { X=-ParkX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, sNextTcPos)})
|
|
||||||
EmitMoveStartHead( 2)
|
|
||||||
bPresel = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- ripristino stato corrente
|
|
||||||
EgtSetCurrMachining( EMT.MCHID)
|
|
||||||
EgtTdbSetCurrTool( EMT.TOOL)
|
|
||||||
-- se non eseguita preselezione
|
-- se non eseguita preselezione
|
||||||
if not bPresel then
|
if not bPresel then
|
||||||
-- mi assicuro che l'altra testa sia in parcheggio
|
-- mi assicuro che l'altra testa sia in parcheggio
|
||||||
@@ -3360,7 +3509,7 @@ function EmitTestProgramStart()
|
|||||||
EmtOutput( 'M12 $START PER SVINCOLO TESTE')
|
EmtOutput( 'M12 $START PER SVINCOLO TESTE')
|
||||||
EmtOutput( '(SVINCOLO TESTA 1)')
|
EmtOutput( '(SVINCOLO TESTA 1)')
|
||||||
EmitMoveDataHead( 1, {Z=ParkZ1-100, TPos=0})
|
EmitMoveDataHead( 1, {Z=ParkZ1-100, TPos=0})
|
||||||
if Progress then
|
if Progress or SecondToolChanger then
|
||||||
EmtOutput( 'IF E80001<=10 THEN')
|
EmtOutput( 'IF E80001<=10 THEN')
|
||||||
EmitMoveDataHead( 1, {C=ParkC1, TPos=0})
|
EmitMoveDataHead( 1, {C=ParkC1, TPos=0})
|
||||||
EmitMoveDataHead( 1, {Z=-150, B=ParkB1, TPos=0})
|
EmitMoveDataHead( 1, {Z=-150, B=ParkB1, TPos=0})
|
||||||
|
|||||||
+307
-24
@@ -79,6 +79,14 @@ function OnSimulStart()
|
|||||||
if vTools and vTools[1] and #(vTools[1]) > 0 then
|
if vTools and vTools[1] and #(vTools[1]) > 0 then
|
||||||
EgtLoadTool( vTcPos[i], 1, vTools[1])
|
EgtLoadTool( vTcPos[i], 1, vTools[1])
|
||||||
ShowToolInTcPos( vTcPos[i], true)
|
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
|
end
|
||||||
end
|
end
|
||||||
@@ -134,7 +142,7 @@ function OnSimulStart()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- gruppo CHSAW si attiva solo se progress, one con BIT mortiser o PF
|
-- 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'})
|
table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'CHSAW'})
|
||||||
end
|
end
|
||||||
-- gruppo MORTISER si attiva solo se PF con BIT mortiser attivo
|
-- gruppo MORTISER si attiva solo se PF con BIT mortiser attivo
|
||||||
@@ -244,7 +252,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
|
||||||
@@ -261,6 +269,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
|
||||||
@@ -477,6 +486,7 @@ function OnSimulDispositionEnd()
|
|||||||
EMT.UNLOADING = false
|
EMT.UNLOADING = false
|
||||||
EMT.FALL = false
|
EMT.FALL = false
|
||||||
EMT.TO_FALL = false
|
EMT.TO_FALL = false
|
||||||
|
EMT.Y2DELTA = nil
|
||||||
end
|
end
|
||||||
-- se disposizione intermedia
|
-- se disposizione intermedia
|
||||||
if IsMidPhase( EMT.PHASE) or IsEnd2Phase( EMT.PHASE) then
|
if IsMidPhase( EMT.PHASE) or IsEnd2Phase( EMT.PHASE) then
|
||||||
@@ -769,7 +779,7 @@ function OnSimulToolDeselect( dPrevA)
|
|||||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||||
-- deposito utensile lama
|
-- deposito utensile lama
|
||||||
elseif EMT.PREVHEAD_H1 == 'H12' then
|
elseif EMT.PREVHEAD_H1 == 'H12' or EMT.PREVHEAD_H1 == 'H17' then
|
||||||
-- simulo movimento
|
-- simulo movimento
|
||||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||||
@@ -837,12 +847,12 @@ function OnSimulToolDeselect( dPrevA)
|
|||||||
-- nascondo l'utensile sulla testa
|
-- nascondo l'utensile sulla testa
|
||||||
EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H1 or '') or GDB_ID.NULL, GDB_MD.HIDDEN)
|
EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H1 or '') or GDB_ID.NULL, GDB_MD.HIDDEN)
|
||||||
-- prendo utensile fresa o lama
|
-- 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 MyParkX1 = EgtIf( GetHeadTCSet( EMT.NEXTHEAD, EMT.NEXTTCPOS) == 'Head1_TC1', ParkX1, ParkFrnX1)
|
||||||
local MyParkB1 = ParkB1
|
local MyParkB1 = ParkB1
|
||||||
local MyParkC1 = ParkC1
|
local MyParkC1 = ParkC1
|
||||||
-- se ho due teste oppure è progress, significa che ho CU verticale
|
-- se ho due teste oppure è progress, significa che ho CU verticale
|
||||||
if EgtGetHeadId('H21') or Progress then
|
if EgtGetHeadId('H21') or Progress or SecondToolChanger then
|
||||||
MyParkB1 = EgtIf( GetHeadTCSet( EMT.NEXTHEAD, EMT.NEXTTCPOS) == 'Head1_TC1', ParkB1, ParkFrnB1)
|
MyParkB1 = EgtIf( GetHeadTCSet( EMT.NEXTHEAD, EMT.NEXTTCPOS) == 'Head1_TC1', ParkB1, ParkFrnB1)
|
||||||
MyParkC1 = EgtIf( GetHeadTCSet( EMT.NEXTHEAD, EMT.NEXTTCPOS) == 'Head1_TC1', ParkC1, ParkFrnC1)
|
MyParkC1 = EgtIf( GetHeadTCSet( EMT.NEXTHEAD, EMT.NEXTTCPOS) == 'Head1_TC1', ParkC1, ParkFrnC1)
|
||||||
-- altrimenti su one CU speciale motosega-utensile lungo
|
-- altrimenti su one CU speciale motosega-utensile lungo
|
||||||
@@ -1165,7 +1175,15 @@ function OnSimulMoveStart()
|
|||||||
if EMT.HEAD == 'H12' and abs( C1Pos - EMT.R1) > 1 and ( abs( C1Home - EMT.R1) > 30.1 or abs(B1Home - EMT.R2) > 30.1) then
|
if EMT.HEAD == 'H12' and abs( C1Pos - EMT.R1) > 1 and ( abs( C1Home - EMT.R1) > 30.1 or abs(B1Home - EMT.R2) > 30.1) then
|
||||||
SimulMoveAxis( 'B1', 0, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxis( 'B1', 0, MCH_SIM_STEP.COLLROT)
|
||||||
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||||
SimulMoveAxes( 'Z1', dZref, 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', dZref, MCH_SIM_STEP.RAPID, 'B1', dBref, MCH_SIM_STEP.COLLROT)
|
||||||
|
SimulMoveAxis( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
|
else
|
||||||
|
SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
|
end
|
||||||
if bMoveZbeforeX then
|
if bMoveZbeforeX then
|
||||||
SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||||
end
|
end
|
||||||
@@ -1212,13 +1230,13 @@ function OnSimulMoveStart()
|
|||||||
else
|
else
|
||||||
if GetHeadTCSet( EMT.HEAD, EMT.TCPOS) == 'Head1_TC2' then
|
if GetHeadTCSet( EMT.HEAD, EMT.TCPOS) == 'Head1_TC2' then
|
||||||
-- se movimento iniziale da Zmax con lama o fresa
|
-- 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
|
if EMT.ZMAX or EMT.FLAG == 1 or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||||
--EgtOutBox( 'Flag 2,1', 'Info Rapid')
|
--EgtOutBox( 'Flag 2,1', 'Info Rapid')
|
||||||
local bMoveZbeforeX = false
|
local bMoveZbeforeX = false
|
||||||
|
|
||||||
local dZref = EMT.L3
|
local dZref = EMT.L3
|
||||||
if EMT.HEAD == 'H12' and ( -EMT.L2 < -LimX1RotSaw or EMT.R2 > 91) then
|
if EMT.HEAD == 'H12' and ( EgtIf( BD.RIGHT_LOAD, -EMT.L2 < -LimX1RotSaw, -EMT.L2 > -LimX1RotSaw) or EMT.R2 > 91) then
|
||||||
dZref = Z1Home + GetZExtra( EMT.HEAD, EMT.R2) - 100
|
dZref = Z1Home + 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
|
-- 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
|
||||||
@@ -1234,7 +1252,15 @@ function OnSimulMoveStart()
|
|||||||
if EMT.HEAD == 'H12' and abs( C1Pos - EMT.R1) > 1 and ( abs( C1Home - EMT.R1) > 30.1 or abs(B1Home - EMT.R2) > 30.1) then
|
if EMT.HEAD == 'H12' and abs( C1Pos - EMT.R1) > 1 and ( abs( C1Home - EMT.R1) > 30.1 or abs(B1Home - EMT.R2) > 30.1) then
|
||||||
SimulMoveAxis( 'B1', 0, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxis( 'B1', 0, MCH_SIM_STEP.COLLROT)
|
||||||
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||||
SimulMoveAxes( 'Z1', dZref, 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', dZref, MCH_SIM_STEP.RAPID, 'B1', dBref, MCH_SIM_STEP.COLLROT)
|
||||||
|
SimulMoveAxis( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
|
else
|
||||||
|
SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
|
end
|
||||||
if bMoveZbeforeX then
|
if bMoveZbeforeX then
|
||||||
SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||||
end
|
end
|
||||||
@@ -1306,7 +1332,15 @@ function OnSimulMoveStart()
|
|||||||
if EMT.HEAD == 'H22' then
|
if EMT.HEAD == 'H22' then
|
||||||
SimulMoveAxis( 'B2', 0, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxis( 'B2', 0, MCH_SIM_STEP.COLLROT)
|
||||||
SimulMoveAxis( 'C2', EMT.R1, 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)
|
-- 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( 'Z2', dZref, MCH_SIM_STEP.RAPID, 'B2', dBref, MCH_SIM_STEP.COLLROT)
|
||||||
|
SimulMoveAxis( 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
|
else
|
||||||
|
SimulMoveAxes( 'Z2', dZref, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
|
end
|
||||||
if bMoveZbeforeX then
|
if bMoveZbeforeX then
|
||||||
SimulMoveAxis( 'Z2', EMT.L3, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'Z2', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||||
end
|
end
|
||||||
@@ -1723,7 +1757,15 @@ function ExecMoveHome( bNearV, bMchSplit)
|
|||||||
EMT.CHSAW_OUT = true
|
EMT.CHSAW_OUT = true
|
||||||
end
|
end
|
||||||
-- porto le teste in home
|
-- 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
|
-- sistemo i rulli
|
||||||
ExecOpenRoller( 1)
|
ExecOpenRoller( 1)
|
||||||
ExecOpenRoller( 2)
|
ExecOpenRoller( 2)
|
||||||
@@ -1849,10 +1891,28 @@ function ExecMoveZmax( bMchSplit, btoXHome)
|
|||||||
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
|
||||||
if btoXHome then
|
if btoXHome then
|
||||||
EMT.XHOME = true
|
EMT.XHOME = true
|
||||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'X1', HomeX, MCH_SIM_STEP.RAPID)
|
||||||
end
|
end
|
||||||
-- altrimenti sega a catena
|
-- altrimenti sega a catena
|
||||||
else
|
else
|
||||||
|
-- controlla che l'ingombro della sega a catena non possa collidere durante il suo riposizionamento
|
||||||
|
local dChSawEncumbrance = sqrt( pow( EgtTdbGetCurrToolParam( MCH_TP.TOTLEN), 2) + pow( ChSawLen + MillOffs, 2))
|
||||||
|
if EMT.ADIR and EMT.TDIR then
|
||||||
|
-- direzione versore sega a catena X- (copre anche eventuali inclinazioni in Y)
|
||||||
|
if EMT.TDIR[1] <= 0 then
|
||||||
|
-- ingombro massimo di quota Z (senza pivot) + ingombro massimo sega + altezza pezzo + altezza sicurezza
|
||||||
|
local dEncumbranceTot = EMT.L3p + MillOffs - dChSawEncumbrance - EMT.SB - 30
|
||||||
|
-- nuova quota Z intermedia
|
||||||
|
local dZUp = EMT.L3p + ( DeltaTabZ - dEncumbranceTot)
|
||||||
|
-- se la nuova quota è minore della quota di parcheggio
|
||||||
|
if dZUp <= ParkCSawZ1 then
|
||||||
|
-- se B è oltre il punto di massimo ingombro (con l'inclinazione attuale non ha il massimo ingombro)
|
||||||
|
if asin( EMT.TDIR[3] / 1) > asin( EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) / dChSawEncumbrance) and ( dEncumbranceTot < DeltaTabZ) then
|
||||||
|
SimulMoveAxis( 'Z1', dZUp, MCH_SIM_STEP.RAPID)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||||
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
||||||
SimulMoveAxis( 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID)
|
||||||
@@ -1860,9 +1920,8 @@ function ExecMoveZmax( bMchSplit, btoXHome)
|
|||||||
if btoXHome then
|
if btoXHome then
|
||||||
EgtUnloadTool( EMT.HEAD, 1)
|
EgtUnloadTool( EMT.HEAD, 1)
|
||||||
ShowToolInTcPos( EMT.TCPOS, true)
|
ShowToolInTcPos( EMT.TCPOS, true)
|
||||||
EMT.PREVTOOL_H1 = nil
|
-- nascondo l'utensile sulla testa
|
||||||
EMT.PREVHEAD_H1 = nil
|
EgtSetMode( EgtGetHeadId( EMT.HEAD or '') or GDB_ID.NULL, GDB_MD.HIDDEN)
|
||||||
EMT.PREVTCPOS_H1 = nil
|
|
||||||
EMT.CHSAW_OUT = true
|
EMT.CHSAW_OUT = true
|
||||||
EMT.XHOME = true
|
EMT.XHOME = true
|
||||||
end
|
end
|
||||||
@@ -1890,6 +1949,24 @@ function ExecMoveZmax( bMchSplit, btoXHome)
|
|||||||
end
|
end
|
||||||
-- altrimenti sega a catena
|
-- altrimenti sega a catena
|
||||||
else
|
else
|
||||||
|
-- controlla che l'ingombro della sega a catena non possa collidere durante il suo riposizionamento
|
||||||
|
local dChSawEncumbrance = sqrt( pow( EgtTdbGetCurrToolParam( MCH_TP.TOTLEN), 2) + pow( ChSawLen + Mill2Offs, 2))
|
||||||
|
if EMT.ADIR and EMT.TDIR then
|
||||||
|
-- direzione versore sega a catena X- (copre anche eventuali inclinazioni in Y)
|
||||||
|
if EMT.TDIR[1] <= 0 then
|
||||||
|
-- ingombro massimo di quota Z (senza pivot) + ingombro massimo sega + altezza pezzo + altezza sicurezza
|
||||||
|
local dEncumbranceTot = EMT.L3p + Mill2Offs - dChSawEncumbrance - EMT.SB - 30
|
||||||
|
-- nuova quota Z intermedia
|
||||||
|
local dZUp = EMT.L3p + ( DeltaTabZ - dEncumbranceTot)
|
||||||
|
-- se la nuova quota è minore della quota di parcheggio
|
||||||
|
if dZUp <= ParkCSawZ2 then
|
||||||
|
-- se B è oltre il punto di massimo ingombro (con l'inclinazione attuale non ha il massimo ingombro)
|
||||||
|
if asin( EMT.TDIR[3] / 1) > asin( EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) / dChSawEncumbrance) and ( dEncumbranceTot < DeltaTabZ) then
|
||||||
|
SimulMoveAxis( 'Z2', dZUp, MCH_SIM_STEP.RAPID)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
SimulMoveAxes( 'Z2', HomeZ, MCH_SIM_STEP.RAPID, 'B2', HomeB, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'Z2', HomeZ, MCH_SIM_STEP.RAPID, 'B2', HomeB, MCH_SIM_STEP.COLLROT)
|
||||||
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
||||||
SimulMoveAxis( 'Z2', ParkCSawZ2, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'Z2', ParkCSawZ2, MCH_SIM_STEP.RAPID)
|
||||||
@@ -1969,16 +2046,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)
|
||||||
SimulMoveAxis( 'PY1', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( '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)
|
||||||
SimulMoveAxis( 'PY2', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'PY2', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
||||||
SetPY2Light( bClose)
|
SetPY2Light( bClose)
|
||||||
|
if bClose then
|
||||||
|
CheckClamping( 'PY2')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -2383,11 +2607,17 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function ShowToolInTcPos( sTcPos, bShow)
|
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
|
-- 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
|
if not TcExitId then return end
|
||||||
-- imposto lo stato di visualizzazione
|
-- imposto lo stato di visualizzazione
|
||||||
EgtSetStatus( TcExitId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF))
|
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
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -2408,7 +2638,7 @@ function LoadNextTool( nHSet, sTcPosDef, bFirst)
|
|||||||
if vTools and vTools[1] and #(vTools[1]) > 0 then
|
if vTools and vTools[1] and #(vTools[1]) > 0 then
|
||||||
sTool = vTools[1]
|
sTool = vTools[1]
|
||||||
sTcPos = sTcPosDef
|
sTcPos = sTcPosDef
|
||||||
if Progress then
|
if Progress or SecondToolChanger then
|
||||||
sHead = EgtIf( sTcPos == 'T11', 'H12', 'H11')
|
sHead = EgtIf( sTcPos == 'T11', 'H12', 'H11')
|
||||||
elseif nHSet == 1 then
|
elseif nHSet == 1 then
|
||||||
sHead = EgtIf( sTcPos == 'T1', 'H12', 'H11')
|
sHead = EgtIf( sTcPos == 'T1', 'H12', 'H11')
|
||||||
@@ -2473,6 +2703,9 @@ local FALL_T = 2 * ESTIMATION_RAPID_COEFF -- s
|
|||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnEstimStart()
|
function OnEstimStart()
|
||||||
EMT.INCHES = not EgtUiUnitsAreMM() -- unità di misura mm/inches
|
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
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -2558,6 +2791,15 @@ function OnEstimDispositionEnd()
|
|||||||
EMT.OPEISDISP = false
|
EMT.OPEISDISP = false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function OnEstimRawMoveData()
|
||||||
|
-- se start del pezzo
|
||||||
|
if IsStartOrRestPhase( EMT.PHASE) then
|
||||||
|
EMT.SPLIT = false
|
||||||
|
end
|
||||||
|
OnRawMoveData()
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnEstimToolSelect()
|
function OnEstimToolSelect()
|
||||||
-- reset indice utensile in tabella lunghezze
|
-- reset indice utensile in tabella lunghezze
|
||||||
@@ -2614,6 +2856,12 @@ function OnEstimMachiningEnd()
|
|||||||
EMT.TLE_NAME = nil
|
EMT.TLE_NAME = nil
|
||||||
EMT.TLE_TIME = nil
|
EMT.TLE_TIME = nil
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -2739,11 +2987,11 @@ function OnEstimRapid()
|
|||||||
EMT.MCHEXTLEN = EMT.MCHEXTLEN + dLen
|
EMT.MCHEXTLEN = EMT.MCHEXTLEN + dLen
|
||||||
-- calcolo tempo
|
-- calcolo tempo
|
||||||
local dTime = RAPID_MIN_T
|
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
|
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
|
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
|
if dT3 > dTime then dTime = dT3 end
|
||||||
local dT4 = abs( dR1) / RAPID_C_FEED * 60
|
local dT4 = abs( dR1) / RAPID_C_FEED * 60
|
||||||
if dT4 > dTime then dTime = dT4 end
|
if dT4 > dTime then dTime = dT4 end
|
||||||
@@ -2765,7 +3013,7 @@ function OnEstimLinear()
|
|||||||
local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3)
|
local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3)
|
||||||
EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen
|
EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen
|
||||||
-- calcolo tempo
|
-- calcolo tempo
|
||||||
local dTime = dLen / EMT.F * 60
|
local dTime = CalcMoveTime( dLen, EMT.F, EMT.SPLIT)
|
||||||
EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime
|
EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime
|
||||||
EgtOutLog( string.format( ' G1 Len=%.0f Time=%.2f', dLen, dTime), 5)
|
EgtOutLog( string.format( ' G1 Len=%.0f Time=%.2f', dLen, dTime), 5)
|
||||||
-- aggiorno valori come precedenti
|
-- aggiorno valori come precedenti
|
||||||
@@ -3019,10 +3267,10 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function RollerParkingNeeded( sHead, dAng1p, dAng2p, dAng1, dAng2)
|
function RollerParkingNeeded( sHead, dAng1p, dAng2p, dAng1, dAng2)
|
||||||
if sHead == 'H11' or sHead == 'H12' or HeadIsChainSaw( sHead) then
|
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))
|
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
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -3037,5 +3285,40 @@ function GetCmdAxMove( Cmd, sAx)
|
|||||||
end
|
end
|
||||||
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 ***
|
-- *** END GENERAL ***
|
||||||
|
|||||||
+80
-3
@@ -13,6 +13,65 @@ require( 'EmtGenMachining')
|
|||||||
-- 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
|
||||||
|
|
||||||
---------------------- OnSpecialGetMaxZ -----------------------------
|
---------------------- OnSpecialGetMaxZ -----------------------------
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
local function CalcExtraZ( vtTp, vtT, vMZ)
|
local function CalcExtraZ( vtTp, vtT, vMZ)
|
||||||
@@ -78,7 +137,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}}
|
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)
|
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
||||||
end
|
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 vtTp:getX() > 0.4 and vtT:getX() > 0.4 then
|
||||||
if bBSameSign and abs( EMC.R1 - EMC.R1p) < 165 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)
|
EMC.MAXZ = MaxZ1 - EgtIf( abs( EMC.R2) < 90.1 and abs( EMC.R2p) < 90.1, 0, 130)
|
||||||
@@ -179,7 +238,7 @@ function OnSpecialMoveZup()
|
|||||||
if EMC.HEAD == 'H11' or EMC.HEAD == 'H21' then
|
if EMC.HEAD == 'H11' or EMC.HEAD == 'H21' then
|
||||||
;
|
;
|
||||||
-- se lama posizionata su CU prossimo a testa 1
|
-- 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
|
-- 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
|
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()))
|
local dZref = dZmax + min( 330 * vtT:getZ(), 0) + 260 * ( 1 - sqrt( 1- vtT:getZ() * vtT:getZ()))
|
||||||
@@ -667,6 +726,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), 1)
|
EgtOutLog( ' Lavorazione : ' .. EgtGetName( EMC.MCHID), 1)
|
||||||
|
|
||||||
@@ -814,7 +891,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
|
||||||
|
|||||||
Binary file not shown.
@@ -110,6 +110,7 @@ H11.1=Standard.nge
|
|||||||
H11.1:MILL_NOTIP=MillNoTip.nge
|
H11.1:MILL_NOTIP=MillNoTip.nge
|
||||||
H12.1=Saw.nge
|
H12.1=Saw.nge
|
||||||
H13.1=ChainSaw.nge
|
H13.1=ChainSaw.nge
|
||||||
|
H17.1=AngTransmBH.nge
|
||||||
H21.1=Standard.nge
|
H21.1=Standard.nge
|
||||||
H21.1:MILL_NOTIP=MillNoTip.nge
|
H21.1:MILL_NOTIP=MillNoTip.nge
|
||||||
H22.1=Saw.nge
|
H22.1=Saw.nge
|
||||||
@@ -141,6 +142,8 @@ H11=6608
|
|||||||
H12=6615
|
H12=6615
|
||||||
; Chainsaw
|
; Chainsaw
|
||||||
H13=6616
|
H13=6616
|
||||||
|
; Angular transmission
|
||||||
|
H17=6617
|
||||||
; Probe
|
; Probe
|
||||||
H19=6618
|
H19=6618
|
||||||
; Second 5 axis head
|
; Second 5 axis head
|
||||||
|
|||||||
+67
-17
@@ -42,12 +42,12 @@
|
|||||||
|
|
||||||
-- Intestazioni
|
-- Intestazioni
|
||||||
require( 'EmtGenerator')
|
require( 'EmtGenerator')
|
||||||
EgtEnableDebug( true)
|
EgtEnableDebug( false)
|
||||||
|
|
||||||
PP_VER = '2.7h2_DEV2_B'
|
PP_VER = '3.1f3'
|
||||||
PP_NVER = '2.7.8.2'
|
PP_NVER = '3.1.6.3'
|
||||||
MIN_MACH_VER = '2.7f3'
|
MIN_MACH_VER = '2.5k1'
|
||||||
MACH_NAME = string.match( EgtGetCurrMachineDir(), "[^\\]+$") -- si ricava il nome della macchina dal direttorio
|
MACH_NAME = EgtGetCurrMachineName()
|
||||||
|
|
||||||
-- Carico i dati globali
|
-- Carico i dati globali
|
||||||
local sMachDir = EgtGetCurrMachineDir()
|
local sMachDir = EgtGetCurrMachineDir()
|
||||||
@@ -116,6 +116,7 @@ SawC2Offs = 0
|
|||||||
SawB2Offs = 0
|
SawB2Offs = 0
|
||||||
MinX1 = 700
|
MinX1 = 700
|
||||||
MaxX1 = 2735
|
MaxX1 = 2735
|
||||||
|
Limit_T1_Presel_T2 = MinX1
|
||||||
MinZ1 = -1550
|
MinZ1 = -1550
|
||||||
MaxZ1 = 0
|
MaxZ1 = 0
|
||||||
MinC1 = -275
|
MinC1 = -275
|
||||||
@@ -140,6 +141,7 @@ ParkCSaw0C1 = 0
|
|||||||
ParkCSawB1 = 0
|
ParkCSawB1 = 0
|
||||||
MinX2 = 0
|
MinX2 = 0
|
||||||
MaxX2 = 2035
|
MaxX2 = 2035
|
||||||
|
Limit_T2_Presel_T1 = MaxX2
|
||||||
MinZ2 = -1550
|
MinZ2 = -1550
|
||||||
MaxZ2 = 0
|
MaxZ2 = 0
|
||||||
MinC2 = -275
|
MinC2 = -275
|
||||||
@@ -155,6 +157,8 @@ ParkB2 = -90
|
|||||||
MinDeltaX1X2 = 650
|
MinDeltaX1X2 = 650
|
||||||
MinDistToolX1X2 = 40
|
MinDistToolX1X2 = 40
|
||||||
LimX2RotSaw = 800
|
LimX2RotSaw = 800
|
||||||
|
AngTrBHOffs = 154.5
|
||||||
|
AngTrBHLen = 90
|
||||||
TurnerOffs = 120.0
|
TurnerOffs = 120.0
|
||||||
AggLoad = 50
|
AggLoad = 50
|
||||||
DeltaTabY = 1170.0
|
DeltaTabY = 1170.0
|
||||||
@@ -177,6 +181,9 @@ AutoRotMinLen = 0
|
|||||||
EstimationRapidMultiplier = 1
|
EstimationRapidMultiplier = 1
|
||||||
ForceToCloseRollersGate = false
|
ForceToCloseRollersGate = false
|
||||||
Probe = nil
|
Probe = nil
|
||||||
|
AggreBlockHaus = false
|
||||||
|
DistZClampToTable = 5 -- distanza tra la tavola e il punto più basso della morsa
|
||||||
|
ClampingCoeffMin = nil -- coefficiente di fissaggio, se 0 o nil non fa controllo, per il momento da inizializzare da Ts3Data
|
||||||
|
|
||||||
-- Aggiornamento con dati da TechnoEssetre7
|
-- Aggiornamento con dati da TechnoEssetre7
|
||||||
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-PFrl.data"
|
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-PFrl.data"
|
||||||
@@ -233,6 +240,8 @@ if EgtExistsFile( sData) then
|
|||||||
if Machine.Offsets.MIN_V2 then MinV2 = Machine.Offsets.MIN_V2 end
|
if Machine.Offsets.MIN_V2 then MinV2 = Machine.Offsets.MIN_V2 end
|
||||||
if Machine.Offsets.MAX_V2 then MaxV2 = Machine.Offsets.MAX_V2 end
|
if Machine.Offsets.MAX_V2 then MaxV2 = Machine.Offsets.MAX_V2 end
|
||||||
if Machine.Offsets.CLAMP5 then Clamp5 = ( Machine.Offsets.CLAMP5 == 1) end
|
if Machine.Offsets.CLAMP5 then Clamp5 = ( Machine.Offsets.CLAMP5 == 1) end
|
||||||
|
if Machine.Offsets.MIN_W then MinW = Machine.Offsets.MIN_W end
|
||||||
|
if Machine.Offsets.MAX_W then MaxW = Machine.Offsets.MAX_W end
|
||||||
if Machine.Offsets.MINWOPEN then MinWOpen = Machine.Offsets.MINWOPEN end
|
if Machine.Offsets.MINWOPEN then MinWOpen = Machine.Offsets.MINWOPEN end
|
||||||
if Machine.Offsets.MAXWOPEN then MaxWOpen = Machine.Offsets.MAXWOPEN end
|
if Machine.Offsets.MAXWOPEN then MaxWOpen = Machine.Offsets.MAXWOPEN end
|
||||||
if Machine.Offsets.MAXWHEIGHT then MaxWHeight = Machine.Offsets.MAXWHEIGHT end
|
if Machine.Offsets.MAXWHEIGHT then MaxWHeight = Machine.Offsets.MAXWHEIGHT end
|
||||||
@@ -258,20 +267,24 @@ if EgtExistsFile( sData) then
|
|||||||
if Machine.Offsets.SAWOFFSZ then SawOffsZ = Machine.Offsets.SAWOFFSZ end
|
if Machine.Offsets.SAWOFFSZ then SawOffsZ = Machine.Offsets.SAWOFFSZ end
|
||||||
if Machine.Offsets.SAW2OFFSX then Saw2OffsX = Machine.Offsets.SAW2OFFSX end
|
if Machine.Offsets.SAW2OFFSX then Saw2OffsX = Machine.Offsets.SAW2OFFSX end
|
||||||
if Machine.Offsets.SAW2OFFSZ then Saw2OffsZ = Machine.Offsets.SAW2OFFSZ end
|
if Machine.Offsets.SAW2OFFSZ then Saw2OffsZ = Machine.Offsets.SAW2OFFSZ end
|
||||||
|
if Machine.Offsets.DEFTCPOS1 then DefTcPos1 = ( 'T' .. Machine.Offsets.DEFTCPOS1) end
|
||||||
|
if Machine.Offsets.DEFTCPOS2 then DefTcPos2 = ( 'T' .. Machine.Offsets.DEFTCPOS2) end
|
||||||
|
if Machine.Offsets.LIMIT_T1_PRESEL_T2 then Limit_T1_Presel_T2 = Machine.Offsets.LIMIT_T1_PRESEL_T2 end
|
||||||
|
if Machine.Offsets.LIMIT_T2_PRESEL_T1 then Limit_T2_Presel_T1 = Machine.Offsets.LIMIT_T2_PRESEL_T1 end
|
||||||
if Machine.Offsets.NOULOAD then MaxUnloadLen = Machine.Offsets.NOULOAD end
|
if Machine.Offsets.NOULOAD then MaxUnloadLen = Machine.Offsets.NOULOAD end
|
||||||
if Machine.Offsets.MAXFEEDPINZE then MaxFeedPinze = Machine.Offsets.MAXFEEDPINZE end
|
if Machine.Offsets.MAXFEEDPINZE then MaxFeedPinze = Machine.Offsets.MAXFEEDPINZE end
|
||||||
if Machine.Offsets.MAXACC then MaxAcc = Machine.Offsets.MAXACC end
|
if Machine.Offsets.MAXACC then MaxAcc = Machine.Offsets.MAXACC end
|
||||||
if Machine.Offsets.MINACC then MinAcc = Machine.Offsets.MINACC end
|
if Machine.Offsets.MINACC then MinAcc = Machine.Offsets.MINACC end
|
||||||
if Machine.Offsets.DEFTCPOS1 then DefTcPos1 = ( 'T' .. Machine.Offsets.DEFTCPOS1) end
|
|
||||||
if Machine.Offsets.DEFTCPOS2 then DefTcPos2 = ( 'T' .. Machine.Offsets.DEFTCPOS2) end
|
|
||||||
if Machine.Offsets.COEFF_STIMATEMPI and Machine.Offsets.COEFF_STIMATEMPI > 0 then EstimationRapidMultiplier = Machine.Offsets.COEFF_STIMATEMPI end
|
if Machine.Offsets.COEFF_STIMATEMPI and Machine.Offsets.COEFF_STIMATEMPI > 0 then EstimationRapidMultiplier = Machine.Offsets.COEFF_STIMATEMPI end
|
||||||
if Machine.Offsets.MAXFEEDPINZE then MaxFeedPinze = Machine.Offsets.MAXFEEDPINZE 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.CHIUDI_PINZE_2_3_SCAMBIO then ForceToCloseRollersGate = Machine.Offsets.CHIUDI_PINZE_2_3_SCAMBIO == 1 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.WOOD_DENSITY then WoodDensity = Machine.Offsets.WOOD_DENSITY end
|
||||||
if Machine.Offsets.PROBE then Probe = Machine.Offsets.PROBE end -- Tastatore su entrembe le teste. 1 = solo testa 1, 2 = solo testa 2, 3 = entrambe le teste
|
if Machine.Offsets.PROBE then Probe = Machine.Offsets.PROBE end -- Tastatore su entrembe le teste. 1 = solo testa 1, 2 = solo testa 2, 3 = entrambe le teste
|
||||||
|
if Machine.Offsets.AGGRE_BH then AggreBlockHaus = ( Machine.Offsets.AGGRE_BH == 1) end
|
||||||
|
AngTrBHOffs = Machine.Offsets.OFFSETZ_RINV_BH or AngTrBHOffs
|
||||||
|
AngTrBHLen = Machine.Offsets.OFFSETX_RINV_BH or AngTrBHLen
|
||||||
if Machine.Offsets.MAX_BACK_CLAMP_5 then MaxBackClamp5 = Machine.Offsets.MAX_BACK_CLAMP_5 end
|
if Machine.Offsets.MAX_BACK_CLAMP_5 then MaxBackClamp5 = Machine.Offsets.MAX_BACK_CLAMP_5 end
|
||||||
|
if Machine.Offsets.COEFF_CLAMP_CHECK then ClampingCoeffMin = Machine.Offsets.COEFF_CLAMP_CHECK end
|
||||||
-- aggiustamenti
|
-- aggiustamenti
|
||||||
MinY1 = MinV1 + MinDeltaYV
|
MinY1 = MinV1 + MinDeltaYV
|
||||||
MaxY1 = MaxMchY1
|
MaxY1 = MaxMchY1
|
||||||
@@ -430,6 +443,24 @@ local H13Id = EmtHead {
|
|||||||
Geo = 'H13_HEAD/GEO'}
|
Geo = 'H13_HEAD/GEO'}
|
||||||
EgtSetInfo( H13Id, 'ZSAFEDELTA', '60')
|
EgtSetInfo( H13Id, 'ZSAFEDELTA', '60')
|
||||||
EgtSetInfo( H13Id, 'ZMAXONROT', '1,80')
|
EgtSetInfo( H13Id, 'ZMAXONROT', '1,80')
|
||||||
|
|
||||||
|
-- Eventuale aggregato per lavorazioni BlockHaus
|
||||||
|
if AggreBlockHaus then
|
||||||
|
local H17Id = EmtHead {
|
||||||
|
Name = 'H17',
|
||||||
|
Parent = 'B1',
|
||||||
|
HSet = 'H11',
|
||||||
|
Type = MCH_HT.STD,
|
||||||
|
Pos = Point3d( -AngTrBHLen, 0, -AngTrBHOffs),
|
||||||
|
TDir = X_AX(),
|
||||||
|
ADir = Z_AX(),
|
||||||
|
Rot1W = 0.2,
|
||||||
|
SolCh = MCH_SCC.ADIR_NEAR,
|
||||||
|
OthColl = {'H2', 'B/SOLID', 'C/SOLID'},
|
||||||
|
Geo = 'H17_HEAD/GEO',
|
||||||
|
Aux = {'H17_HEAD/SOLID', 'H17_HEAD/COLLISION'}}
|
||||||
|
end
|
||||||
|
|
||||||
-- *** Testa 2 ***
|
-- *** Testa 2 ***
|
||||||
local X2Id = EmtAxis {
|
local X2Id = EmtAxis {
|
||||||
Name = 'X2',
|
Name = 'X2',
|
||||||
@@ -560,7 +591,7 @@ local PY1Id = EmtAxis {
|
|||||||
Stroke = {0, MaxHoOpen},
|
Stroke = {0, MaxHoOpen},
|
||||||
Home = MaxHoOpen,
|
Home = MaxHoOpen,
|
||||||
Geo = 'PY1_AXIS/GEO',
|
Geo = 'PY1_AXIS/GEO',
|
||||||
Aux = 'PY1_AXIS/SOLID'}
|
Aux = {'PY1_AXIS/SOLID', 'PY1_AXIS/CLAMP_CHECK'}}
|
||||||
local Y2Id = EmtAxis {
|
local Y2Id = EmtAxis {
|
||||||
Name = 'Y2',
|
Name = 'Y2',
|
||||||
Parent = 'Base',
|
Parent = 'Base',
|
||||||
@@ -580,7 +611,7 @@ local PY2Id = EmtAxis {
|
|||||||
Stroke = {0, MaxHoOpen},
|
Stroke = {0, MaxHoOpen},
|
||||||
Home = MaxHoOpen,
|
Home = MaxHoOpen,
|
||||||
Geo = 'PY2_AXIS/GEO',
|
Geo = 'PY2_AXIS/GEO',
|
||||||
Aux = 'PY2_AXIS/SOLID'}
|
Aux = {'PY2_AXIS/SOLID', 'PY2_AXIS/CLAMP_CHECK'}}
|
||||||
-- Rulli
|
-- Rulli
|
||||||
local V1Id = EmtAxis {
|
local V1Id = EmtAxis {
|
||||||
Name = 'V1',
|
Name = 'V1',
|
||||||
@@ -691,6 +722,7 @@ EmtTable {
|
|||||||
Parent = 'T',
|
Parent = 'T',
|
||||||
Type = MCH_TT.FLAT,
|
Type = MCH_TT.FLAT,
|
||||||
Ref1 = Point3d( -DimTabX, DeltaTabY, DeltaTabZ),
|
Ref1 = Point3d( -DimTabX, DeltaTabY, DeltaTabZ),
|
||||||
|
Coll = 'Base/BELT',
|
||||||
Geo = 'TABLE/GEO',
|
Geo = 'TABLE/GEO',
|
||||||
Aux = 'TABLE/SOLID'}
|
Aux = 'TABLE/SOLID'}
|
||||||
-- *** ToolChanger ***
|
-- *** ToolChanger ***
|
||||||
@@ -745,13 +777,24 @@ EmtTcPos {
|
|||||||
TDir = -Y_AX(),
|
TDir = -Y_AX(),
|
||||||
ADir = -X_AX(),
|
ADir = -X_AX(),
|
||||||
Geo = 'BASE/T8'}
|
Geo = 'BASE/T8'}
|
||||||
EmtTcPos {
|
if AggreBlockHaus then
|
||||||
|
local TcpSsId = EmtTcPos {
|
||||||
|
Name = 'T9',
|
||||||
|
Parent = 'Base',
|
||||||
|
Pos = ptTc1 + 8 * vtDt1 + Vector3d( -AngTrBHLen, AngTrBHOffs, 0),
|
||||||
|
TDir = X_AX(),
|
||||||
|
ADir = -Y_AX(),
|
||||||
|
Geo = 'BASE/T9_BH',
|
||||||
|
Aux = 'BASE/T9_HS'}
|
||||||
|
else
|
||||||
|
EmtTcPos {
|
||||||
Name = 'T9',
|
Name = 'T9',
|
||||||
Parent = 'Base',
|
Parent = 'Base',
|
||||||
Pos = ptTc1 + 8 * vtDt1,
|
Pos = ptTc1 + 8 * vtDt1,
|
||||||
TDir = -Y_AX(),
|
TDir = -Y_AX(),
|
||||||
ADir = -X_AX(),
|
ADir = -X_AX(),
|
||||||
Geo = 'BASE/T9'}
|
Geo = 'BASE/T9'}
|
||||||
|
end
|
||||||
EmtTcPos {
|
EmtTcPos {
|
||||||
Name = 'T10',
|
Name = 'T10',
|
||||||
Parent = 'Base',
|
Parent = 'Base',
|
||||||
@@ -861,6 +904,10 @@ EgtMove( EgtGetFirstNameInGroup( BaseId, 'TC3') or GDB_ID.NULL, vtMovB, GDB_RT.G
|
|||||||
if Mortiser then
|
if Mortiser then
|
||||||
EgtMove( EgtGetFirstNameInGroup( BaseId, 'TC4') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( BaseId, 'TC4') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB)
|
||||||
end
|
end
|
||||||
|
-- sposto geometria aggiuntiva agrgegato BlockHaus
|
||||||
|
if AggreBlockHaus then
|
||||||
|
EgtMove( EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( BaseId, 'T9'), 'T9_HS') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB)
|
||||||
|
end
|
||||||
EgtMove( EgtGetFirstNameInGroup( X1Id, 'SOLID'), vtMovB, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( X1Id, 'SOLID'), vtMovB, GDB_RT.GLOB)
|
||||||
EgtMove( EgtGetFirstNameInGroup( X1Id, 'COLLISION'), vtMovB, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( X1Id, 'COLLISION'), vtMovB, GDB_RT.GLOB)
|
||||||
EgtMove( EgtGetFirstNameInGroup( X2Id, 'SOLID'), vtMovB, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( X2Id, 'SOLID'), vtMovB, GDB_RT.GLOB)
|
||||||
@@ -871,8 +918,10 @@ local vtMove = Vector3d( 0, ( DeltaTabY - 1170.0), ( DeltaTabZ + 1010.0))
|
|||||||
EgtMove( EgtGetFirstNameInGroup( BaseId, 'CONVOYER'), vtMove, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( BaseId, 'CONVOYER'), vtMove, GDB_RT.GLOB)
|
||||||
EgtMove( EgtGetFirstNameInGroup( Y1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( Y1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||||
EgtMove( EgtGetFirstNameInGroup( PY1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( PY1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||||
|
EgtMove( EgtGetFirstNameInGroup( PY1Id, 'CLAMP_CHECK'), vtMove + Vector3d(0,0,DistZClampToTable), GDB_RT.GLOB)
|
||||||
EgtMove( EgtGetFirstNameInGroup( Y2Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( Y2Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||||
EgtMove( EgtGetFirstNameInGroup( PY2Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( PY2Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||||
|
EgtMove( EgtGetFirstNameInGroup( PY2Id, 'CLAMP_CHECK'), vtMove + Vector3d(0,0,DistZClampToTable), GDB_RT.GLOB)
|
||||||
EgtMove( EgtGetFirstNameInGroup( V1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( V1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||||
EgtMove( EgtGetFirstNameInGroup( PV1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( PV1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||||
EgtMove( EgtGetFirstNameInGroup( QV1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
EgtMove( EgtGetFirstNameInGroup( QV1Id, 'SOLID'), vtMove, GDB_RT.GLOB)
|
||||||
@@ -908,7 +957,7 @@ function OnSetHead()
|
|||||||
EmtModifyAxisHome( 'B1', ParkB1)
|
EmtModifyAxisHome( 'B1', ParkB1)
|
||||||
EmtModifyAxisDirection( 'B1', X_AX())
|
EmtModifyAxisDirection( 'B1', X_AX())
|
||||||
-- se testa H12 (lama)
|
-- se testa H12 (lama)
|
||||||
elseif EMC.HEAD == 'H12' then
|
elseif EMC.HEAD == 'H12' or EMC.HEAD == 'H17' then
|
||||||
EmtModifyAxisHome( 'X1', ParkX1)
|
EmtModifyAxisHome( 'X1', ParkX1)
|
||||||
EmtModifyAxisHome( 'Z1', ParkZ1)
|
EmtModifyAxisHome( 'Z1', ParkZ1)
|
||||||
EmtModifyAxisHome( 'C1', ParkC1)
|
EmtModifyAxisHome( 'C1', ParkC1)
|
||||||
@@ -949,12 +998,13 @@ function OnSetHead()
|
|||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
-------------------------- Testa utilizzata -------------------------
|
||||||
function GetHeadSet( sHead)
|
function GetHeadSet( sHead)
|
||||||
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' then
|
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H15' or sHead == 'H17' then
|
||||||
return 1
|
return 1
|
||||||
elseif sHead == 'H19' then
|
elseif sHead == 'H19' then
|
||||||
return 11
|
return 11
|
||||||
elseif sHead == 'H21' or sHead == 'H22' then
|
elseif sHead == 'H21' or sHead == 'H22' or sHead == 'H23' then
|
||||||
return 2
|
return 2
|
||||||
elseif sHead == 'H29' then
|
elseif sHead == 'H29' then
|
||||||
return 21
|
return 21
|
||||||
@@ -968,7 +1018,7 @@ end
|
|||||||
function GetHeadTCSet( sHead, sTcPos)
|
function GetHeadTCSet( sHead, sTcPos)
|
||||||
local nPos = tonumber( string.sub( sTcPos, 2)) or 0
|
local nPos = tonumber( string.sub( sTcPos, 2)) or 0
|
||||||
-- testa 1
|
-- testa 1
|
||||||
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H15' then
|
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H15' or sHead == 'H17' then
|
||||||
-- testa 1 su CU prossimo a testa 2
|
-- testa 1 su CU prossimo a testa 2
|
||||||
if nPos > 10 then
|
if nPos > 10 then
|
||||||
return 'Head1_TC2'
|
return 'Head1_TC2'
|
||||||
@@ -1080,7 +1130,7 @@ end
|
|||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- Funzione che ritorna ZExtra partendo dalla testa e dall'angolo verticale
|
-- Funzione che ritorna ZExtra partendo dalla testa e dall'angolo verticale
|
||||||
function GetZExtra( sHead, dAngV)
|
function GetZExtra( sHead, dAngV)
|
||||||
if sHead == 'H11' or sHead == 'H21' then
|
if sHead == 'H11' or sHead == 'H21' or sHead == 'H17' then
|
||||||
if abs( dAngV) < 30.1 then
|
if abs( dAngV) < 30.1 then
|
||||||
return 400
|
return 400
|
||||||
elseif abs( dAngV) < 45.1 then
|
elseif abs( dAngV) < 45.1 then
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
2=d,OpenMinSafe,0
|
2=d,OpenMinSafe,0
|
||||||
3=d,OpenOutRaw,0
|
3=d,OpenOutRaw,0
|
||||||
4=l,MaxOptSize,0
|
4=l,MaxOptSize,0
|
||||||
|
5=b,AdjustFeed,1
|
||||||
|
|
||||||
[Mortising]
|
[Mortising]
|
||||||
0=d,MaxElev,0
|
0=d,MaxElev,0
|
||||||
|
|||||||
+3
-2
@@ -30,6 +30,7 @@ local GS = {}
|
|||||||
-- Configurazione posizioni (con o senza TC2)
|
-- Configurazione posizioni (con o senza TC2)
|
||||||
local PositionTable = {}
|
local PositionTable = {}
|
||||||
local SecondSaw = ( EgtGetHeadId( 'H22') ~= nil)
|
local SecondSaw = ( EgtGetHeadId( 'H22') ~= nil)
|
||||||
|
local AggreBH = ( EgtGetHeadId( 'H17') ~= nil)
|
||||||
local ProbeFirstHead = ( EgtGetHeadId( 'H19') ~= nil)
|
local ProbeFirstHead = ( EgtGetHeadId( 'H19') ~= nil)
|
||||||
local ProbeSecondHead = ( EgtGetHeadId( 'H29') ~= nil)
|
local ProbeSecondHead = ( EgtGetHeadId( 'H29') ~= nil)
|
||||||
if SecondSaw then
|
if SecondSaw then
|
||||||
@@ -40,7 +41,7 @@ if SecondSaw then
|
|||||||
{Pos = "Pos5", TcPos = "T6", Head = "H11", Group = "G1"},
|
{Pos = "Pos5", TcPos = "T6", Head = "H11", Group = "G1"},
|
||||||
{Pos = "Pos6", TcPos = "T7", Head = "H11", Group = "G1"},
|
{Pos = "Pos6", TcPos = "T7", Head = "H11", Group = "G1"},
|
||||||
{Pos = "Pos7", TcPos = "T8", Head = "H11", Group = "G1"},
|
{Pos = "Pos7", TcPos = "T8", Head = "H11", Group = "G1"},
|
||||||
{Pos = "Pos8", TcPos = "T9", Head = "H11", Group = "G1"},
|
{Pos = "Pos8", TcPos = "T9", Head = EgtIf( AggreBH, "H17", "H11"), Group = "G1"},
|
||||||
{Pos = "Pos9", TcPos = "T10", Head = "H11", Group = "G1"},
|
{Pos = "Pos9", TcPos = "T10", Head = "H11", Group = "G1"},
|
||||||
{Pos = "Pos10", TcPos = "T11", Head = "H22", Group = "G3"},
|
{Pos = "Pos10", TcPos = "T11", Head = "H22", Group = "G3"},
|
||||||
{Pos = "Pos11", TcPos = "T13", Head = "H21", Group = "G3"},
|
{Pos = "Pos11", TcPos = "T13", Head = "H21", Group = "G3"},
|
||||||
@@ -63,7 +64,7 @@ else
|
|||||||
{Pos = "Pos5", TcPos = "T6", Head = "H11", Group = "G1"},
|
{Pos = "Pos5", TcPos = "T6", Head = "H11", Group = "G1"},
|
||||||
{Pos = "Pos6", TcPos = "T7", Head = "H11", Group = "G1"},
|
{Pos = "Pos6", TcPos = "T7", Head = "H11", Group = "G1"},
|
||||||
{Pos = "Pos7", TcPos = "T8", Head = "H11", Group = "G1"},
|
{Pos = "Pos7", TcPos = "T8", Head = "H11", Group = "G1"},
|
||||||
{Pos = "Pos8", TcPos = "T9", Head = "H11", Group = "G1"},
|
{Pos = "Pos8", TcPos = "T9", Head = EgtIf( AggreBH, "H17", "H11"), Group = "G1"},
|
||||||
{Pos = "Pos9", TcPos = "T10", Head = "H11", Group = "G1"},
|
{Pos = "Pos9", TcPos = "T10", Head = "H11", Group = "G1"},
|
||||||
{Pos = "Pos10", TcPos = "T11", Head = "H21", Group = "G3"},
|
{Pos = "Pos10", TcPos = "T11", Head = "H21", Group = "G3"},
|
||||||
{Pos = "Pos11", TcPos = "T12", Head = "H21", Group = "G3"},
|
{Pos = "Pos11", TcPos = "T12", Head = "H21", Group = "G3"},
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
+57
-1
@@ -1,5 +1,62 @@
|
|||||||
==== Common_ONE-PF Update Log ====
|
==== Common_ONE-PF Update Log ====
|
||||||
|
|
||||||
|
Versione 3.1f3 (08/06/2026)
|
||||||
|
- (GEN) M77 viene ora eseguita, prima era commentata.
|
||||||
|
|
||||||
|
Versione 3.1f2 (05/06/2026)
|
||||||
|
- (MLDE-GEN) Aggiunti parametri di limite asse X per decidere se fare preselezione su altra testa. Serve modifica MLDE
|
||||||
|
|
||||||
|
Versione 3.1f1 (03/06/2026)
|
||||||
|
- (NGE-MLDE-GEN-SIM) Versione unificata con predisposizione per gestione tastatori. Serve modificare anche la macchina, per ora gestione completa solo su PFrl.
|
||||||
|
|
||||||
|
Versione 3.1c2 (17/03/2026)
|
||||||
|
- (SIM-GEN) Aggiunta OnSpecialApplyMachining per calcolare i carrelli da subito
|
||||||
|
- Aggiungendo OnSpecialApplyMachining, ora la OnSpecialGetPrevMachiningOffset lavora correttamente. ATT: MIN_MACH -> 3.1b2
|
||||||
|
|
||||||
|
Versione 3.1c1 (04/03/2026)
|
||||||
|
- (GEN) Corretta chiamata di una variabile insesistente in caso di ONE
|
||||||
|
- (SIM) Allineata simulazione a generazione
|
||||||
|
|
||||||
|
Versione 3.1b1 (20/02/2026)
|
||||||
|
- (GEN) Aggiunta funzione ToolPreSelection() per la preselezione utensile. Ticket#2789
|
||||||
|
- (GEN) Funzione rinominata in ToolPreSelectionSingleHead(), ora utilizza funzione in MLDE per capire se è motosega
|
||||||
|
|
||||||
|
Versione 3.1a1 (16/01/2026)
|
||||||
|
- (SIM-GEN) Aggiunto controllo che evita collisioni durante lo svincolo in Z della sega a catena nelle funzioni ExecMoveZMax() e EmitZMax(). Ticket#2767
|
||||||
|
- (SIM-GEN) Piccola correzione modifiche fatte in precedenza
|
||||||
|
|
||||||
|
Versione 2.7l1 (18/12/2025)
|
||||||
|
- (SIM-GEN) Aggiunto controllo post movimenti ausiliari dell' EMC.PREVOFFSX nella funzione OnSpecialGetPrevMachiningOffset(). Ticket#2727
|
||||||
|
- (SIM-GEN) Divisione movimento B in approccio se > 90°. Ticket#2754
|
||||||
|
- (SIM) Aggiunta funzione CheckClamping
|
||||||
|
|
||||||
|
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)
|
Versione 2.7h2 (28/08/2025)
|
||||||
- (GEN) Migliorata gestione spegnimento utensile e disattivazione piano
|
- (GEN) Migliorata gestione spegnimento utensile e disattivazione piano
|
||||||
- (SIM-GEN) Corretto nome variabile e altre piccole modifiche per Progress
|
- (SIM-GEN) Corretto nome variabile e altre piccole modifiche per Progress
|
||||||
@@ -26,7 +83,6 @@ Versione 2.7g1 (01/07/2025)
|
|||||||
|
|
||||||
Versione 2.7f1 (04/06/2025)
|
Versione 2.7f1 (04/06/2025)
|
||||||
- (SIM) Aggiunta gestione qualità VMILL da impostazioni macchina. Tolto parametro 'CoeffVM'.
|
- (SIM) Aggiunta gestione qualità VMILL da impostazioni macchina. Tolto parametro 'CoeffVM'.
|
||||||
- (GEN) Prima versione gestione tastatore
|
|
||||||
- (GEN) Aggiunti parametri FMAXPINZE, MAXACC, MINACC configurabili da TS3. Ticket#2052
|
- (GEN) Aggiunti parametri FMAXPINZE, MAXACC, MINACC configurabili da TS3. Ticket#2052
|
||||||
|
|
||||||
Versione 2.7e1 (28/05/2025)
|
Versione 2.7e1 (28/05/2025)
|
||||||
|
|||||||
+2
-2
@@ -3,8 +3,8 @@
|
|||||||
|
|
||||||
local InfoCommon_STD_PP = {
|
local InfoCommon_STD_PP = {
|
||||||
NAME = 'Common_ONE-PF', -- nome script PP standard
|
NAME = 'Common_ONE-PF', -- nome script PP standard
|
||||||
VERSION = '2.7h2', -- versione script
|
VERSION = '3.1f3', -- 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