Compare commits
123 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ac22b1bd85 | |||
| caa62668b3 | |||
| b93f414964 | |||
| f7016c254a | |||
| c7a9e9dd36 | |||
| 4d72475d2e | |||
| 945da649ff | |||
| 4b01c811c4 | |||
| adb7a7c1be | |||
| 5fe00d81ac | |||
| 66f06de42c | |||
| 55c15f027d | |||
| e964c8ce3e | |||
| 8f4c6a2ad2 | |||
| 8c43edfbff | |||
| 23bc412e02 | |||
| d9a688f082 | |||
| 3e1377c159 | |||
| 4586a2fcbe | |||
| 333cb79179 | |||
| 13ac6a5ee0 | |||
| 0f06de6ee5 | |||
| a6076a694d | |||
| 347e215b7e | |||
| 5c7f506108 | |||
| 07bc0c49f3 | |||
| b2c70129c3 | |||
| 9c80da84fe | |||
| 739dddd97a | |||
| e2091aa8e6 | |||
| 26ecb4d05f | |||
| 1120c84a03 | |||
| 7eff40db37 | |||
| 9c8106c92a | |||
| 3e1a1270bb | |||
| 10e67aef11 | |||
| c699e397f4 | |||
| 4ccfb88447 | |||
| 801cca3bb7 | |||
| 4b9b1a352e | |||
| b2c2f4819b | |||
| e06f67b22a | |||
| e765940154 | |||
| 429c049a44 | |||
| a9a7b2c14e | |||
| a61affc726 | |||
| b9bc1f0922 | |||
| 24cbfe0737 | |||
| 0272e7d606 | |||
| 6df44b4a74 | |||
| 2d43a594d1 | |||
| 5cb0055dc9 | |||
| e33a6c163e | |||
| 171ff119b0 | |||
| 8733ed4007 | |||
| c650b259ff | |||
| c74ff69f55 | |||
| 64bbe6947f | |||
| a3ad415f3e | |||
| 382736ae14 | |||
| b7be5c1b2a | |||
| 67c6573974 | |||
| 85fbb5830d | |||
| 5b3d0e897f | |||
| 8a4bbff20b | |||
| 6e799468ae | |||
| 524bbb1edc | |||
| 7fa71a1002 | |||
| 03218233f7 | |||
| 8a3d1e05f6 | |||
| 009216d59c | |||
| 20b54428f8 | |||
| 492af68caf | |||
| e6e37c6c51 | |||
| 9cffde0047 | |||
| 5af712e8a9 | |||
| 91d5656a3d | |||
| c05b8a4117 | |||
| 824cf6eda2 | |||
| f1262e191f | |||
| 343298e87f | |||
| 49951262c9 | |||
| be109120f1 | |||
| f677ef6213 | |||
| dfb5952a85 | |||
| cdbb04441b | |||
| 5620e2b9e5 | |||
| 9b99aa2a40 | |||
| 97ae764439 | |||
| 566bb9e592 | |||
| 9948a9cfeb | |||
| 8901acb95a | |||
| 74d58029a5 | |||
| f25aecf62a | |||
| 3d4246e540 | |||
| dad97ad557 | |||
| 6c84aacd5a | |||
| 3cd9d39aa0 | |||
| 77bb66d8d6 | |||
| a3b714f790 | |||
| 929e1308a9 | |||
| 37d98a4324 | |||
| f3890dc20f | |||
| 8bd92a578b | |||
| 37b9eb3a9b | |||
| ac09d872eb | |||
| 047669d63f | |||
| fcaeb8530b | |||
| d174f8b79f | |||
| 621a31e283 | |||
| acdc1cfce6 | |||
| 8d162200b1 | |||
| 59e132478d | |||
| 62aefca5c8 | |||
| 530f70de94 | |||
| 04a2d35872 | |||
| edf7a29dfb | |||
| 2edcbf52ad | |||
| 0fa2ea3c67 | |||
| 9789092791 | |||
| bdd4cc17a4 | |||
| b14b3bfc26 | |||
| c77d354a5c |
+359
-143
@@ -28,6 +28,9 @@ function OnStart()
|
||||
--EMT.Ft = 'F' -- token per feed
|
||||
--EMT.St = 'S' -- token per speed
|
||||
EMT.FMAXPINZE = 102000 -- feed massima pinze
|
||||
-- utensili default
|
||||
EMT.PREVTCPOS_H1 = DefTcPos1
|
||||
EMT.PREVTCPOS_H2 = DefTcPos2
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -42,13 +45,18 @@ function OnProgramStart()
|
||||
local BtlInfoId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or EgtGetCurrMachGroup() or GDB_ID.NULL
|
||||
local nPattId = EgtGetInfo( BtlInfoId, 'PATTID', 'i') or 40
|
||||
EmtOutput( '%' .. EgtNumToString( nPattId,-1))
|
||||
|
||||
-- aggiungo prefisso per commentae commenti iniziali se la macchina è utilizzata per fare i test
|
||||
local sPrefixCommentLine = '' ; if IS_TEST_MACHINE or EgtEndsWith( EgtGetCurrMachineDir(), '.TEST') then sPrefixCommentLine = '//' end
|
||||
|
||||
if EMT.INFO then
|
||||
EmtOutput( '('..EMT.INFO..')')
|
||||
EmtOutput( sPrefixCommentLine..'('..EMT.INFO..')')
|
||||
else
|
||||
EmtOutput( '(Program Start)')
|
||||
end
|
||||
EmtOutput( '('.. CSP_INFO..')')
|
||||
EmtOutput( '('.. MACHINE_INFO..')\n')
|
||||
EmtOutput( sPrefixCommentLine..'('.. CSP_INFO..')')
|
||||
EmtOutput( sPrefixCommentLine..'('.. MACHINE_INFO..')\n')
|
||||
EmtOutput( '(HEADER)')
|
||||
-- Se modalità test, aggiungo linee per muovere tappeto e alzare la testa (in automatico viene fatto dal main residente)
|
||||
if TEST_USE then
|
||||
EmitTestProgramStart()
|
||||
@@ -96,6 +104,7 @@ function OnProgramEnd()
|
||||
EMT.SPECSPLIT = nil
|
||||
EMT.RELOAD = nil
|
||||
EMT.RELOAD2 = nil
|
||||
EmtOutput( '(FOOTER)')
|
||||
-- Se modalità test, termino il programma
|
||||
if TEST_USE then
|
||||
EmtOutput( 'M02')
|
||||
@@ -417,6 +426,7 @@ function OnMachiningStart()
|
||||
EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES)
|
||||
EMT.MCHSPLIT = ( EMT.MCHUSERNOTES:find( 'Split;', 1, true) ~= nil)
|
||||
EMT.MCHPRECUT = ( EMT.MCHUSERNOTES:find( 'Precut;', 1, true) ~= nil)
|
||||
EMT.MCHCUT = ( EMT.MCHUSERNOTES:find( 'Cut;', 1, true) ~= nil)
|
||||
|
||||
-- se sega a catena, aggiusto subito angolo scelto per asse virtuale A
|
||||
if EMT.HEAD == 'H13' or EMT.HEAD == 'H15' then
|
||||
@@ -435,7 +445,7 @@ function OnMachiningStart()
|
||||
-- gestione eventuale lavorazione in doppio
|
||||
local nDouType = EgtGetValInNotes( EMT.MCHUSERNOTES, 'DOUBLE', 'i')
|
||||
if nDouType == 2 or nDouType == 3 then
|
||||
local sDouTool = EgtGetValInNotes( EMT.TUSERNOTES, 'DOUBLE', 's') or ''
|
||||
local sDouTool = EgtGetValInNotes( EMT.MCHUSERNOTES, 'TOOLDOUBLE', 's') or EgtGetValInNotes( EMT.TUSERNOTES, 'DOUBLE', 's') or ''
|
||||
local sOldTool = EgtTdbGetCurrToolParam( MCH_TP.NAME)
|
||||
if EgtTdbSetCurrTool( sDouTool) and EgtTdbGetCurrToolParam( MCH_TP.ACTIVE) then
|
||||
-- salvo dati
|
||||
@@ -595,6 +605,28 @@ function OnMachiningEnd()
|
||||
EMT.PREVTOOL = EMT.TOOL
|
||||
EMT.PREVHEAD = EMT.HEAD
|
||||
EMT.PREVTCPOS = EMT.TCPOS
|
||||
-- se taglio finale, aggiorno lunghezza barra
|
||||
if EMT.MCHCUT then
|
||||
EMT.LB = EMT.LT + ( EMT.X_OFF or 0)
|
||||
end
|
||||
-- salvo anche utlimo utensile su testa
|
||||
local nHSet = GetHeadSet( EMT.HEAD)
|
||||
if nHSet == 1 then
|
||||
EMT.PREVTOOL_H1 = EMT.TOOL
|
||||
EMT.PREVHEAD_H1 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H1 = EMT.TCPOS
|
||||
EMT.PREVHOMEX_H1 = EgtGetAxisHomePos( 'X1')
|
||||
EMT.PREVHOMEB_H1 = EgtGetAxisHomePos( 'B1')
|
||||
EMT.PREVHOMEC_H1 = EgtGetAxisHomePos( 'C1')
|
||||
elseif nHSet == 2 then
|
||||
EMT.PREVTOOL_H2 = EMT.TOOL
|
||||
EMT.PREVHEAD_H2 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H2 = EMT.TCPOS
|
||||
EMT.PREVHOMEX_H2 = EgtGetAxisHomePos( 'X2')
|
||||
EMT.PREVHOMEB_H2 = EgtGetAxisHomePos( 'B2')
|
||||
EMT.PREVHOMEC_H2 = EgtGetAxisHomePos( 'C2')
|
||||
end
|
||||
|
||||
if EMT.DOU_TYPE and not EMT.ZMAX then EMT.DOU_TO_ZMAX = true end
|
||||
EMT.DOU_TYPE = nil
|
||||
end
|
||||
@@ -658,6 +690,10 @@ function OnPathEnd()
|
||||
if not EMT.ZMAX then
|
||||
EmitResetMachining()
|
||||
end
|
||||
|
||||
-- salvo dati precedenti
|
||||
EMT.L2pp = EMT.L2o
|
||||
|
||||
EMT.AUXTYPE = nil
|
||||
EMT.UNL = nil
|
||||
EMT.PREROT = nil
|
||||
@@ -777,6 +813,12 @@ function OnRapid()
|
||||
local PrevR1 = EMT.R1p or EMT.R1pp or HomeR1
|
||||
local PrevR2 = EMT.R2p or EMT.R2pp or HomeR2
|
||||
EmtResetPrev()
|
||||
-- gestione speciale per pezzi molto alti. Se il movimento successivo è più alto del precedente, allora prendo il successivo
|
||||
if EMT.L3s then
|
||||
if EMT.L3s > EMT.L3 then
|
||||
EMT.L3 = EMT.L3s
|
||||
end
|
||||
end
|
||||
-- se prima lavorazione
|
||||
if EMT.LOAD then
|
||||
EMT.V2POS = ParkV2
|
||||
@@ -819,26 +861,50 @@ function OnRapid()
|
||||
local HomeB1 = EgtGetAxisHomePos( 'B1')
|
||||
local HomeC1 = EgtGetAxisHomePos( 'C1')
|
||||
local dTRad, dTLen = GetToolRadLen()
|
||||
local dXref = EMT.L2
|
||||
if EMT.HEAD == 'H12' and EMT.L2 < -LimX1PlRotSaw then
|
||||
dXref = -LimX1PlRotSaw
|
||||
end
|
||||
-- se fresa o lama
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
EmitMoveDataHead( 1, { X=dXref, Z=MyMaxZ1, B=ParkB1, C=ParkC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=-ParkX1, Z=MyMaxZ1, B=ParkB1, C=ParkC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
local bMoveZbeforeX = false
|
||||
local dZref = EMT.L3
|
||||
-- se carico destro e ho due teste, altrimenti in caso abbia una testa , tipo ONE, il controlo è invertito
|
||||
if EMT.HEAD == 'H12' and ( EgtIf( not EgtGetHeadId( 'H21') or BD.RIGHT_LOAD, EMT.L2 < -LimX1RotSaw, 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 = min( dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2) - 100, MyMaxZ1)
|
||||
end
|
||||
-- se la quota di lavoro è più in alta della posizione a ZHOME della testa, prima si va alla Z di lavoro e poi si approccia il pezzo
|
||||
if EMT.L3 > dZref then
|
||||
bMoveZbeforeX = true
|
||||
end
|
||||
|
||||
-- se vado in posizione speciale rotazione assi, poi devo ritornare alla X vera di lavoro
|
||||
local dMoveXtoFinalPosition = false
|
||||
local dXref = EMT.L2
|
||||
if EMT.HEAD == 'H12' and EMT.L2 < -LimX1PlRotSaw then
|
||||
dXref = -LimX1PlRotSaw
|
||||
EmitMoveDataHead( 1, { X=dXref, Z=MyMaxZ1, B=ParkB1, C=ParkC1, S=Speed})
|
||||
dZref = max( EMT.L3, dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2))
|
||||
dMoveXtoFinalPosition = true
|
||||
elseif not bMoveZbeforeX then
|
||||
EmitMoveDataHead( 1, { X=dXref, Z=MyMaxZ1, B=ParkB1, C=ParkC1, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=-LimX1PlRotSaw, Z=MyMaxZ1, B=ParkB1, C=ParkC1, S=Speed})
|
||||
dZref = max( EMT.L3, dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2))
|
||||
dMoveXtoFinalPosition = true
|
||||
end
|
||||
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
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, { X=dXref, Z=MyMaxZ1, B=0, C=ParkC1, S=Speed})
|
||||
EmitMoveDataHead( 1, { B=0, S=Speed})
|
||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=dZref, B=EMT.R2, S=Speed})
|
||||
if bMoveZbeforeX then
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
if dMoveXtoFinalPosition then
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, S=Speed})
|
||||
end
|
||||
-- caso standard
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=dXref, Z=dZref, B=ParkB1, C=ParkC1, S=Speed})
|
||||
@@ -854,11 +920,11 @@ function OnRapid()
|
||||
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale
|
||||
if dPosA == 0 or abs( EMT.R2) < 10 then
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=ParkCSawZ1, B=ParkCSawB1, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
-- se circa verticale
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=ParkCSawZ1, B=ParkCSawB1, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
end
|
||||
end
|
||||
@@ -886,31 +952,45 @@ function OnRapid()
|
||||
-- allontanamento o eventuale preselezione successiva testa 1
|
||||
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
|
||||
-- movimento testa
|
||||
local dSafeZ1 = EgtGetAxisHomePos( 'Z21')
|
||||
local dSafeZ1 = EgtGetAxisHomePos( 'Z1')
|
||||
local MyMaxZ1 = EgtGetAxisMax( 'Z1')
|
||||
local HomeC1 = EgtGetAxisHomePos( 'C1')
|
||||
local HomeB1 = EgtGetAxisHomePos( 'B1')
|
||||
local dTRad, dTLen = GetToolRadLen()
|
||||
-- se fresa o lama
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=MyMaxZ1, B=HomeB1, C=HomeC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=-ParkX2, Z=MyMaxZ1, B=HomeB1, C=HomeC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
local bMoveZbeforeX = false
|
||||
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H12' and ( EgtIf( not EgtGetHeadId( 'H21') or BD.RIGHT_LOAD, EMT.L2 < -LimX1RotSaw, 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 = min( dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2) - 100, MyMaxZ1)
|
||||
end
|
||||
-- se la quota di lavoro è più in alta della posizione a ZHOME della testa, prima si va alla Z di lavoro e poi si approccia il pezzo
|
||||
if EMT.L3 > dZref then
|
||||
bMoveZbeforeX = true
|
||||
end
|
||||
if not bMoveZbeforeX then
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=MyMaxZ1, B=HomeB1, C=HomeC1, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=-LimX1RotSawTC2, Z=MyMaxZ1, B=HomeB1, C=HomeC1, S=Speed})
|
||||
end
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
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, { X=EMT.L2, Z=MyMaxZ1, B=0, C=HomeC1, S=Speed})
|
||||
EmitMoveDataHead( 1, { B=0, S=Speed})
|
||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=dZref, B=EMT.R2, S=Speed})
|
||||
if bMoveZbeforeX then
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
-- altrimenti caso standard
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=dZref, B=HomeB1, C=HomeC1, S=Speed})
|
||||
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=dZref, S=Speed})
|
||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
@@ -921,11 +1001,11 @@ function OnRapid()
|
||||
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale
|
||||
if dPosA == 0 or abs( EMT.R2) < 10 then
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=ParkCSawZ1, B=ParkCSawB1, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
-- se circa verticale
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=ParkCSawZ1, B=ParkCSawB1, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
end
|
||||
|
||||
@@ -947,24 +1027,44 @@ function OnRapid()
|
||||
local dTRad, dTLen = GetToolRadLen()
|
||||
-- se fresa o lama
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=MyMaxZ2, B=HomeB2, C=HomeC2, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveDataHead( 2, { X=-ParkX2, Z=MyMaxZ2, B=HomeB2, C=HomeC2, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveStartHead( 2)
|
||||
EmitMoveWaitHead( 2)
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
local bMoveZbeforeX = false
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H22' and ( EgtIf( BD.RIGHT_LOAD, EMT.L2 < -LimX2RotSaw, EMT.L2 > -LimX2RotSaw) or EMT.R2 > 91) then
|
||||
if EMT.HEAD == 'H22' and ( EgtIf( BD.RIGHT_LOAD, EMT.L2 < -LimX1RotSaw, EMT.L2 > -LimX1RotSaw) or EMT.R2 > 91) then
|
||||
dZref = min( dSafeZ2 + GetZExtra( EMT.HEAD, EMT.R2) - 100, MyMaxZ2)
|
||||
end
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
if EMT.HEAD == 'H22' and abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC2 - EMT.R1) > 30.1 or abs( HomeB2 - EMT.R2) > 30.1) then
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=MyMaxZ2, B=0, C=HomeC2, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { Z=dZref, B=EMT.R2, S=Speed})
|
||||
-- altrimenti caso standard
|
||||
|
||||
-- se la quota di lavoro è più in alta della posizione a ZHOME della testa, prima si va alla Z di lavoro e poi si approccia il pezzo
|
||||
if EMT.L3 > dZref then
|
||||
bMoveZbeforeX = true
|
||||
end
|
||||
if not bMoveZbeforeX then
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=MyMaxZ2, B=HomeB2, C=HomeC2, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=dZref, B=HomeB2, C=HomeC2, S=Speed})
|
||||
EmitMoveDataHead( 2, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { X=-LimX2RotSaw, Z=MyMaxZ2, B=HomeB2, C=HomeC2, S=Speed})
|
||||
end
|
||||
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
if abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC2 - EMT.R1) > 30.1 or abs( HomeB2 - EMT.R2) > 30.1) then
|
||||
if EMT.HEAD == 'H22' then
|
||||
EmitMoveDataHead( 2, { B=0, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { Z=dZref, B=EMT.R2, S=Speed})
|
||||
if bMoveZbeforeX then
|
||||
EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
-- altrimenti caso standard
|
||||
else
|
||||
EmitMoveDataHead( 2, { Z=dZref, S=Speed})
|
||||
EmitMoveDataHead( 2, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
if bMoveZbeforeX then
|
||||
EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
end
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
@@ -973,13 +1073,13 @@ function OnRapid()
|
||||
EmitMoveWaitHead( 2)
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale. Dopo attesa movimento carrelli si devono scrivere tutti gli assi.
|
||||
if dPosA == 0 or abs( EMT.R2) < 10 then
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=ParkCSawZ2, B=ParkCSawB2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
-- se circa verticale
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=ParkCSawZ2, B=ParkCSawB2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { Z=EMT.L3, B=EMT.R2, S=Speed})
|
||||
end
|
||||
end
|
||||
@@ -1045,10 +1145,11 @@ function OnRapid()
|
||||
end
|
||||
bToPresel = false
|
||||
-- risalita a Zmax
|
||||
EmitZmax( false, false, EMT.TO_XHOME, PrevR1, PrevR2)
|
||||
EmitZmax( false, false, EMT.TO_XHOME, PrevR1, PrevR2, nil, true)
|
||||
EMT.ZMAX = true
|
||||
EMT.TO_ZMAX = nil
|
||||
EMT.TO_XHOME = nil
|
||||
EMT.L1pp = nil
|
||||
EMT.L3pp = nil
|
||||
PrevR1 = EgtGetAxisHomePos( EgtIf( nHSet == 1, 'C1', 'C2'))
|
||||
PrevR2 = EgtGetAxisHomePos( EgtIf( nHSet == 1, 'B1', 'B2'))
|
||||
@@ -1060,43 +1161,38 @@ function OnRapid()
|
||||
EMT.AUXCMD = {}
|
||||
-- se necessario posizionamento in home (sono sicuramente già a Zmax)
|
||||
if EMT.TO_XHOME then
|
||||
-- se precedente non era sega a catena, vado in home con quella
|
||||
if not HeadIsChainSaw( EMT.PREVHEAD) then
|
||||
-- se devo andare in home, ma lo sono già, non faccio nulla
|
||||
if not EMT.XHOME then
|
||||
local nHSet = GetHeadSet( EMT.HEAD)
|
||||
local nPrevHSet = GetHeadSet( EMT.PREVHEAD)
|
||||
if nPrevHSet == 1 then
|
||||
local HomeX1 = EgtGetAxisHomePos( 'X1')
|
||||
EmitMoveDataHead( 1, { X=-HomeX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos='0'})
|
||||
EmitMoveStartHead( 1, 'EA1')
|
||||
else
|
||||
local HomeX2 = EgtGetAxisHomePos( 'X2')
|
||||
EmitMoveDataHead( 2, { X=-HomeX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos='0'})
|
||||
EmitMoveStartHead( 2, 'EA1')
|
||||
end
|
||||
-- altrimenti la deposito e vado in home speciale
|
||||
else
|
||||
-- se successivo non è sega a catena, ne lancio il carico
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
if nHSet == 1 then
|
||||
-- vado in parcheggio sempre con utensile precedente
|
||||
if not HeadIsChainSaw( EMT.PREVHEAD) then
|
||||
if nPrevHSet == 1 then
|
||||
local HomeX1 = EgtGetAxisHomePos( 'X1')
|
||||
EmitMoveDataHead( 1, { X=-HomeX1, Z=MaxZ1, B=HomeR2, C=HomeR1})
|
||||
EmitMoveDataHead( 1, { X=-EMT.PREVHOMEX_H1, Z=MaxZ1, B=EMT.PREVHOMEB_H1, C=EMT.PREVHOMEC_H1, TPos=AdjustTcPos( false, EMT.PREVTCPOS_H1)})
|
||||
EmitMoveStartHead( 1, 'EA1')
|
||||
EmitMoveWaitHead( 1)
|
||||
else
|
||||
local HomeX2 = EgtGetAxisHomePos( 'X2')
|
||||
EmitMoveDataHead( 2, { X=-HomeX2, Z=MaxZ2, B=HomeR2, C=HomeR1})
|
||||
EmitMoveDataHead( 2, { X=-EMT.PREVHOMEX_H2, Z=MaxZ2, B=EMT.PREVHOMEB_H2, C=EMT.PREVHOMEC_H2, TPos=AdjustTcPos( false, EMT.PREVTCPOS_H2)})
|
||||
EmitMoveStartHead( 2, 'EA1')
|
||||
EmitMoveWaitHead( 2)
|
||||
end
|
||||
-- altrimenti deposito e mi metto in posizione sicura
|
||||
else
|
||||
if GetHeadTCSet( EMT.HEAD, EMT.TCPOS) == 'Head1_TC1' or GetHeadTCSet( EMT.HEAD, EMT.TCPOS) == 'Head1_TC2' then
|
||||
EmitMoveDataHead( 1, { X=-ParkCSawX1S, Z=MaxZ1, B=HomeR2, C=HomeR1, TPos='0'})
|
||||
if GetHeadTCSet( EMT.PREVHEAD, EMT.PREVTCPOS) == 'Head1_TC1' or GetHeadTCSet( EMT.PREVHEAD, EMT.PREVTCPOS) == 'Head1_TC2' then
|
||||
EmitMoveDataHead( 1, { X=-ParkCSawX1S, Z=MaxZ1, B=HomeR2, C=HomeR1, TPos='50'})
|
||||
EmitMoveStartHead( 1, 'EA1')
|
||||
--EmitMoveWaitHead( 1)
|
||||
else
|
||||
EmitMoveDataHead( 2, { X=-ParkCSawX2S, Z=MaxZ2, B=HomeR2, C=HomeR1, TPos='0'})
|
||||
EmitMoveDataHead( 2, { X=-ParkCSawX2S, Z=MaxZ2, B=HomeR2, C=HomeR1, TPos='50'})
|
||||
EmitMoveStartHead( 2, 'EA1')
|
||||
--EmitMoveWaitHead( 2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
EMT.TO_XHOME = nil
|
||||
EMT.L1pp = nil
|
||||
EMT.L3pp = nil
|
||||
PrevR1 = HomeR1
|
||||
PrevR2 = HomeR2
|
||||
@@ -1141,23 +1237,48 @@ function OnRapid()
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
-- se fresa o lama
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
local CurrX1 = EMT.L1pp or ( -LimX1PlRotSaw)
|
||||
local CurrZ1 = EMT.L3pp or MyMaxZ1
|
||||
local CurrB1 = PrevR2
|
||||
local CurrC1 = PrevR1
|
||||
|
||||
local bMoveZbeforeX = false
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H12' and ( EgtIf( BD.RIGHT_LOAD, EMT.L2 < -LimX1RotSaw, EMT.L2 > -LimX1RotSaw) or EMT.R2 < -91) then
|
||||
dZref = min( dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2) - 100, MyMaxZ1)
|
||||
end
|
||||
-- se la quota di lavoro è più in alta della posizione a ZHOME della testa, prima si va alla Z di lavoro e poi si approccia il pezzo
|
||||
if EMT.L3 > dZref then
|
||||
bMoveZbeforeX = true
|
||||
end
|
||||
|
||||
-- se vado in posizione speciale rotazione assi, poi devo ritornare alla X vera di lavoro
|
||||
local dMoveXtoFinalPosition = false
|
||||
local dXref = EMT.L2
|
||||
if EMT.HEAD == 'H12' and EMT.L2 < -LimX1PlRotSaw then
|
||||
dXref = -LimX1PlRotSaw
|
||||
EmitMoveDataHead( 1, { X=dXref, Z=CurrZ1, B=CurrB1, C=CurrC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
dZref = max( EMT.L3, dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2))
|
||||
dMoveXtoFinalPosition = true
|
||||
elseif not bMoveZbeforeX then
|
||||
EmitMoveDataHead( 1, { X=dXref, Z=CurrZ1, B=CurrB1, C=CurrC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=CurrX1, Z=CurrZ1, B=CurrB1, C=CurrC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
dZref = max( EMT.L3, dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2))
|
||||
dMoveXtoFinalPosition = true
|
||||
end
|
||||
EmitMoveDataHead( 1, { X=dXref, Z=CurrZ1, B=CurrB1, C=CurrC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H12' and ( EgtIf( not EgtGetHeadId( 'H21') or BD.RIGHT_LOAD, EMT.L2 < -LimX1RotSaw, EMT.L2 > -LimX1RotSaw) or EMT.R2 < -91) then
|
||||
dZref = min( dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2) - 100, MyMaxZ1)
|
||||
end
|
||||
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
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, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=dZref, B=EMT.R2, S=Speed})
|
||||
if bMoveZbeforeX then
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
if dMoveXtoFinalPosition then
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, S=Speed})
|
||||
end
|
||||
-- altrimenti caso standard
|
||||
else
|
||||
EmitMoveDataHead( 1, { Z=dZref, S=Speed})
|
||||
@@ -1215,24 +1336,40 @@ function OnRapid()
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
-- se fresa o lama
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
local CurrX1 = EMT.L1pp or ( -LimX1PlRotSaw)
|
||||
local CurrZ1 = EMT.L3pp or MyMaxZ1
|
||||
local CurrB1 = PrevR2
|
||||
local CurrC1 = PrevR1
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=CurrZ1, B=CurrB1, C=CurrC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
|
||||
local bMoveZbeforeX = false
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H12' and ( EgtIf( not EgtGetHeadId( 'H21') or BD.RIGHT_LOAD, EMT.L2 < -LimX1RotSaw, 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 = min( dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2) - 100, MyMaxZ1)
|
||||
end
|
||||
-- se la quota di lavoro è più in alta della posizione a ZHOME della testa, prima si va alla Z di lavoro e poi si approccia il pezzo
|
||||
if EMT.L3 > dZref then
|
||||
bMoveZbeforeX = true
|
||||
end
|
||||
|
||||
if not bMoveZbeforeX then
|
||||
EmitMoveDataHead( 1, { X=EMT.L2, Z=CurrZ1, B=CurrB1, C=CurrC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 1, { X=CurrX1, Z=CurrZ1, B=CurrB1, C=CurrC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
end
|
||||
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
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, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { Z=dZref, B=EMT.R2, S=Speed})
|
||||
-- altrimenti caso standard
|
||||
if bMoveZbeforeX then
|
||||
EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
-- altrimenti caso standard
|
||||
else
|
||||
EmitMoveDataHead( 1, { Z=dZref, S=Speed})
|
||||
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
@@ -1263,24 +1400,45 @@ function OnRapid()
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
-- se fresa o lama
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
local CurrX2 = EMT.L1pp or ( -LimX2RotSaw)
|
||||
local CurrZ2 = EMT.L3pp or MyMaxZ2
|
||||
local CurrB2 = PrevR2
|
||||
local CurrC2 = PrevR1
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=CurrZ2, B=CurrB2, C=CurrC2, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
|
||||
local bMoveZbeforeX = false
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H22' and ( EgtIf( BD.RIGHT_LOAD, EMT.L2 < -LimX2RotSaw, EMT.L2 > -LimX2RotSaw) or EMT.R2 > 91) then
|
||||
if EMT.HEAD == 'H22' and ( EgtIf( BD.RIGHT_LOAD, EMT.L2 > -LimX2RotSaw, EMT.L2 < -LimX2RotSaw) or EMT.R2 < -91) then
|
||||
dZref = min( dSafeZ2 + GetZExtra( EMT.HEAD, EMT.R2) - 100, MyMaxZ2)
|
||||
end
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
if EMT.HEAD == 'H22' and abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC2 - EMT.R1) > 30.1 or abs( HomeB2 - EMT.R2) > 30.1) then
|
||||
EmitMoveDataHead( 2, { B=0, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { Z=dZref, B=EMT.R2, S=Speed})
|
||||
-- altrimenti caso standard
|
||||
-- se la quota di lavoro è più in alta della posizione a ZHOME della testa, prima si va alla Z di lavoro e poi si approccia il pezzo
|
||||
if EMT.L3 > dZref then
|
||||
bMoveZbeforeX = true
|
||||
end
|
||||
|
||||
if not bMoveZbeforeX then
|
||||
EmitMoveDataHead( 2, { X=EMT.L2, Z=CurrZ2, B=CurrB2, C=CurrC2, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 2, { Z=dZref, S=Speed})
|
||||
EmitMoveDataHead( 2, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { X=CurrX2, Z=CurrZ2, B=CurrB2, C=CurrC2, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
end
|
||||
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
if abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC2 - EMT.R1) > 30.1 or abs( HomeB2 - EMT.R2) > 30.1) then
|
||||
if EMT.HEAD == 'H22' then
|
||||
EmitMoveDataHead( 2, { B=0, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 2, { Z=dZref, B=EMT.R2, S=Speed})
|
||||
if bMoveZbeforeX then
|
||||
EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
-- altrimenti caso standard
|
||||
else
|
||||
EmitMoveDataHead( 2, { Z=dZref, S=Speed})
|
||||
EmitMoveDataHead( 2, { B=EMT.R2, S=Speed})
|
||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||
if bMoveZbeforeX then
|
||||
EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
end
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
@@ -1549,6 +1707,44 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnArc()
|
||||
-- se necessario, impostazione riferimento locale
|
||||
if EMT.REFLOC == 0 then
|
||||
-- gruppo della testa
|
||||
local nHSet = GetHeadSet( EMT.HEAD)
|
||||
-- calcolo per piano generico
|
||||
CalcInterpPlane()
|
||||
EMT.REFLOC = 1
|
||||
-- salvo posizione attuale
|
||||
local OldL1 = EMT.L1
|
||||
local OldL2 = EMT.L2
|
||||
local OldL3 = EMT.L3
|
||||
-- imposto posizione precedente (non contiene l'offset in X per sovramateriale di testa EMT.X_OFF)
|
||||
EMT.L1 = EMT.L1o
|
||||
EMT.L2 = EMT.L2o
|
||||
EMT.L3 = EMT.L3o
|
||||
-- trasformo i punti nel piano
|
||||
MyAdjustLinearAxes()
|
||||
EmtAdjustRotaryAxes()
|
||||
EMT.L1p = nil
|
||||
EMT.L2p = nil
|
||||
EMT.L3p = nil
|
||||
local sDouFlag = EgtIf( EMT.DOU_TYPE, ' EE1', '')
|
||||
EmtOutput( 'G142'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..EMT.IPLGLSTR..EgtIf( nHSet~=2, ' EU1', ' EU2')..sDouFlag..' EF'..GetFmaxClamp())
|
||||
-- emissione movimento
|
||||
local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..
|
||||
EmtGetAxis('R2')..EmtGetAxis('R1')
|
||||
EmtOutput( sOut)
|
||||
-- aggiorno precedenti
|
||||
local nOriginalMove = EMT.MOVE
|
||||
EMT.MOVE = 0
|
||||
EmtUpdatePrev()
|
||||
EMT.MOVE = nOriginalMove
|
||||
-- ripristino posizione attuale
|
||||
EMT.L1 = OldL1
|
||||
EMT.L2 = OldL2
|
||||
EMT.L3 = OldL3
|
||||
end
|
||||
|
||||
-- non modale su archi
|
||||
EmtResetPrevLinear()
|
||||
-- aggiustamento valori
|
||||
@@ -1585,7 +1781,7 @@ end
|
||||
function CalcDinamicaPinze( dH, dS, dL)
|
||||
local MinTempoAcc = 0.3 -- [s]
|
||||
local MaxTempoAcc = 4.0 -- [s]
|
||||
local KgMtCubo= 550 -- densità legno [Kg / metro cubo]
|
||||
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]
|
||||
@@ -1779,6 +1975,9 @@ function PrepareMoveChar( sCmd, nInd)
|
||||
table.insert( EMT.MDCHAR, MDChar)
|
||||
EMT.Y1POS = MoveY1 or EMT.Y1POS
|
||||
EMT.TPOS = GetCmdAxMove( Cmd, 'T') or EMT.TPOS
|
||||
if EMT.V1POS < 400 and ( EMT.HEAD == 'H12' or EMT.HEAD == 'H22') and EMT.ZMAX and not EMT.XHOME then
|
||||
EMT.TO_XHOME = true
|
||||
end
|
||||
end
|
||||
elseif Cmd[1] == '2' then
|
||||
local MDChar = { IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, BeamVise=EMT.BV}
|
||||
@@ -1806,6 +2005,9 @@ function PrepareMoveChar( sCmd, nInd)
|
||||
end
|
||||
table.insert( EMT.MDCHAR, MDChar)
|
||||
EMT.TPOS = GetCmdAxMove( Cmd, 'T') or EMT.TPOS
|
||||
if EMT.V1POS < 400 and ( EMT.HEAD == 'H12' or EMT.HEAD == 'H22') and EMT.ZMAX and not EMT.XHOME then
|
||||
EMT.TO_XHOME = true
|
||||
end
|
||||
elseif Cmd[1] == '3' then
|
||||
local MDChar = { IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, BeamVise=EMT.BV}
|
||||
local MoveY1 = GetCmdAxMove( Cmd, 'Y1')
|
||||
@@ -1832,6 +2034,9 @@ function PrepareMoveChar( sCmd, nInd)
|
||||
end
|
||||
table.insert( EMT.MDCHAR, MDChar)
|
||||
EMT.TPOS = GetCmdAxMove( Cmd, 'T') or EMT.TPOS
|
||||
if EMT.V1POS < 400 and ( EMT.HEAD == 'H12' or EMT.HEAD == 'H22') and EMT.ZMAX and not EMT.XHOME then
|
||||
EMT.TO_XHOME = true
|
||||
end
|
||||
elseif Cmd[1] == '4' then
|
||||
-- richiesta movimento a ZMAX già gestita
|
||||
if Cmd[2] == '1' then
|
||||
@@ -2066,8 +2271,11 @@ function PreparePreRotation( sCmd, nInd)
|
||||
if Cmd[2] ~= 'Z' then
|
||||
local MDChar
|
||||
if EMT.PREROT then
|
||||
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY1=86, FinStatY1=87, IniStatY2=1, BeamVise=0}
|
||||
elseif EMT.SPECSPLIT then
|
||||
-- parcheggio per sicurezza morsa e paratia lato scarico
|
||||
MDChar = { Y2=ParkY2, V2=ParkV2, IniStatY2=1, FinStatY2=1, BeamVise=0}
|
||||
table.insert( EMT.MDCHAR, MDChar)
|
||||
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), IniStatY1=86, FinStatY1=87, BeamVise=0}
|
||||
elseif EMT.SPECSPLIT or EMT.SPLITROT then
|
||||
MDChar = { [Cmd[2]]=tonumber(Cmd[3]), V1=ParkV1, IniStatY1=EMT.ISY1, FinStatY1=EMT.FSY1, IniStatY2=EMT.ISY2, FinStatY2=EMT.FSY2, IniStatV1=3, BeamVise=EMT.BV}
|
||||
EMT.V1POS = MDChar.V1
|
||||
else
|
||||
@@ -2510,6 +2718,9 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
||||
end
|
||||
-- gruppo della testa
|
||||
local nHSet = GetHeadSet( EMT.HEAD)
|
||||
local dXPos = EgtIf( bUsePrevDelta, EMT.L2pp or EMT.L2o, EMT.L2o)
|
||||
-- reset stato di testa in home
|
||||
EMT.XHOME = nil
|
||||
-- se testa 1
|
||||
if nHSet == 1 then
|
||||
-- posizioni sicure
|
||||
@@ -2528,13 +2739,13 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
-- eseguo la salita a Z1max (oriento solo se assi rotanti non già a posto)
|
||||
if abs( dSafeC1 - PrevR1) > 0.1 or abs( dSafeB1 - PrevR2) > 0.1 then
|
||||
local dZref = dSafeZ1 + GetZExtra( EMT.HEAD, PrevR2)
|
||||
if EgtIf( not EgtGetHeadId( 'H21') or BD.RIGHT_LOAD, -EMT.L2o < -LimX1RotSaw, -EMT.L2o > -LimX1RotSaw) then
|
||||
local dZref = dSafeZ1 + GetZExtra( EMT.HEAD, EgtClamp( PrevR2, -90, 90))
|
||||
if EgtIf( BD.RIGHT_LOAD, -dXPos < -LimX1RotSaw, -dXPos > -LimX1RotSaw) then
|
||||
dZref = dZref - EgtIf( not Mortiser, 100, 370)
|
||||
end
|
||||
dZref = min( dZref, dMaxZ1)
|
||||
local MovH = { Z = EgtIf( dZref > EMT.L3o, dZref, EMT.L3o)}
|
||||
MovH.X = -EMT.L2o ; MovH.B = EgtClamp( PrevR2, -90, 90) ; MovH.C = PrevR1 ;
|
||||
MovH.X = -dXPos ; MovH.B = EgtClamp( PrevR2, -90, 90) ; MovH.C = PrevR1 ;
|
||||
EmitMoveDataHead( 1, MovH)
|
||||
if EMT.HEAD == 'H12' and ( abs( dSafeC1 - PrevR1) > 30.1 or abs( dSafeB1 - PrevR2) > 30.1) then
|
||||
EmitMoveDataHead( 1, { Z=dMaxZ1, B=0})
|
||||
@@ -2544,10 +2755,13 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
||||
EmitMoveDataHead( 1, { Z=dMaxZ1})
|
||||
else
|
||||
local MovH = { Z = dMaxZ1}
|
||||
MovH.X = -EMT.L2o ; MovH.B = PrevR2 ; MovH.C = PrevR1 ;
|
||||
MovH.X = -dXPos ; MovH.B = PrevR2 ; MovH.C = PrevR1 ;
|
||||
EmitMoveDataHead( 1, MovH)
|
||||
end
|
||||
if bXhome then EmitMoveDataHead( 1, { X=-dSafeX1}) end
|
||||
if bXhome then
|
||||
EMT.XHOME = true
|
||||
EmitMoveDataHead( 1, { X=-dSafeX1})
|
||||
end
|
||||
EmitMoveStartHead( 1)
|
||||
-- se lavorazione in doppio
|
||||
if EMT.DOU_TYPE == 2 then
|
||||
@@ -2557,14 +2771,15 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
-- ribadisco movimento perchè in G141 si aspetta sempre tutti i valori
|
||||
local MovH = { X = -EMT.L2o, Z = EMT.L3o, B = PrevR2, C = PrevR1}
|
||||
local MovH = { X = -dXPos, Z = EMT.L3o, B = PrevR2, C = PrevR1}
|
||||
EmitMoveDataHead( 1, MovH)
|
||||
EmitMoveDataHead( 1, { Z=dSafeZ1, B=dSafeB1})
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
EmitMoveDataHead( 1, { Z=ParkCSawZ1, B=ParkB1})
|
||||
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
||||
EmitMoveDataHead( 1, { Z=ParkCSawZ1})
|
||||
end
|
||||
EmitMoveDataHead( 1, { X=-dSafeX1, C=dSafeC1})
|
||||
if bXhome then
|
||||
EMT.XHOME = true
|
||||
EmitMoveDataHead( 1, { X=-ParkX1, Z=ParkCSawZ1, B=ParkB1, C=ParkC1, TPos=50})
|
||||
end
|
||||
EmitMoveStartHead( 1)
|
||||
@@ -2579,9 +2794,9 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
||||
local dZref = dSafeZ1 + GetZExtra( EMT.HEAD, PrevR2)
|
||||
dZref = min( dZref, dMaxZ1)
|
||||
local MovH = { Z = EgtIf( dZref > EMT.L3o, dZref, EMT.L3o)}
|
||||
MovH.X = -EMT.L2o ; MovH.B = EgtClamp( PrevR2, -90, 90) ; MovH.C = PrevR1 ;
|
||||
MovH.X = -dXPos ; MovH.B = EgtClamp( PrevR2, -90, 90) ; MovH.C = PrevR1 ;
|
||||
EmitMoveDataHead( 1, MovH)
|
||||
if EMT.HEAD == 'H12' and ( abs( dSafeC1 - PrevR1) > 30.1 or abs( dSafeB1 - PrevR2) > 30.1) then
|
||||
if EMT.HEAD == 'H12' and ( abs( dSafeC1 - PrevR1) > 30.1 or abs( dSafeB1 - PrevR2) > 30.1) or not( bProgress) then
|
||||
EmitMoveDataHead( 1, { Z=dMaxZ1, B=0})
|
||||
end
|
||||
EmitMoveDataHead( 1, { C=dSafeC1})
|
||||
@@ -2589,23 +2804,27 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
||||
EmitMoveDataHead( 1, { Z=dMaxZ1})
|
||||
else
|
||||
local MovH = { Z = dMaxZ1}
|
||||
MovH.X = -EMT.L2o ; MovH.B = PrevR2 ; MovH.C = PrevR1 ;
|
||||
MovH.X = -dXPos ; MovH.B = PrevR2 ; MovH.C = PrevR1 ;
|
||||
EmitMoveDataHead( 1, MovH)
|
||||
end
|
||||
if bXhome then EmitMoveDataHead( 1, { X=-dSafeX1}) end
|
||||
if bXhome then
|
||||
EMT.XHOME = true
|
||||
EmitMoveDataHead( 1, { X=-dSafeX1})
|
||||
end
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
-- ribadisco movimento perchè in G141 si aspetta sempre tutti i valori
|
||||
local MovH = { X = -EMT.L2o, Z = EMT.L3o, B = PrevR2, C = PrevR1}
|
||||
local MovH = { X = -dXPos, Z = EMT.L3o, B = PrevR2, C = PrevR1}
|
||||
EmitMoveDataHead( 1, MovH)
|
||||
EmitMoveDataHead( 1, { Z=dSafeZ1, B=dSafeB1})
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
EmitMoveDataHead( 1, { Z=ParkCSawZ1, B=ParkB1})
|
||||
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
||||
EmitMoveDataHead( 1, { Z=ParkCSawZ1})
|
||||
end
|
||||
EmitMoveDataHead( 1, { X=-dSafeX1, C=dSafeC1})
|
||||
if bXhome then
|
||||
EMT.XHOME = true
|
||||
EmitMoveDataHead( 1, { X=-ParkX1, Z=ParkCSawZ1, B=ParkB1, C=ParkC1, TPos=50})
|
||||
end
|
||||
EmitMoveStartHead( 1)
|
||||
@@ -2632,7 +2851,7 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
||||
local dZref = dSafeZ2 + GetZExtra( EMT.HEAD, PrevR2)
|
||||
dZref = min( dZref, dMaxZ2)
|
||||
local MovH = { Z = EgtIf( dZref > EMT.L3o, dZref, EMT.L3o)}
|
||||
MovH.X = -EMT.L2o ; MovH.B = EgtClamp( PrevR2, -90, 90) ; MovH.C = PrevR1 ;
|
||||
MovH.X = -dXPos ; MovH.B = EgtClamp( PrevR2, -90, 90) ; MovH.C = PrevR1 ;
|
||||
EmitMoveDataHead( 2, MovH)
|
||||
if EMT.HEAD == 'H22' and ( abs( dSafeC2 - PrevR1) > 30.1 or abs( dSafeB2 - PrevR2) > 30.1) then
|
||||
EmitMoveDataHead( 2, { Z=dMaxZ2, B=0})
|
||||
@@ -2642,23 +2861,27 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
||||
EmitMoveDataHead( 2, { Z=dMaxZ2})
|
||||
else
|
||||
local MovH = { Z = dMaxZ2}
|
||||
MovH.X = -EMT.L2o ; MovH.B = PrevR2 ; MovH.C = PrevR1 ;
|
||||
MovH.X = -dXPos ; MovH.B = PrevR2 ; MovH.C = PrevR1 ;
|
||||
EmitMoveDataHead( 2, MovH)
|
||||
end
|
||||
if bXhome then EmitMoveDataHead( 2, { X=-dSafeX2}) end
|
||||
if bXhome then
|
||||
EMT.XHOME = true
|
||||
EmitMoveDataHead( 2, { X=-dSafeX2})
|
||||
end
|
||||
EmitMoveStartHead( 2)
|
||||
EmitMoveWaitHead( 2)
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
-- ribadisco movimento perchè in G141 si aspetta sempre tutti i valori
|
||||
local MovH = { X = -EMT.L2o, Z = EMT.L3o, B = PrevR2, C = PrevR1}
|
||||
local MovH = { X = -dXPos, Z = EMT.L3o, B = PrevR2, C = PrevR1}
|
||||
EmitMoveDataHead( 2, MovH)
|
||||
EmitMoveDataHead( 2, { Z=dSafeZ2, B=dSafeB2})
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
EmitMoveDataHead( 2, { Z=ParkCSawZ2, B=ParkB2})
|
||||
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
||||
EmitMoveDataHead( 2, { Z=ParkCSawZ2})
|
||||
end
|
||||
EmitMoveDataHead( 2, { X=-dSafeX2, C=dSafeC2})
|
||||
if bXhome then
|
||||
EMT.XHOME = true
|
||||
EmitMoveDataHead( 2, { X=-ParkX2, Z=ParkCSawZ2, B=ParkB2, C=ParkC2, TPos=50})
|
||||
end
|
||||
EmitMoveStartHead( 2)
|
||||
@@ -2755,12 +2978,26 @@ function EmitParkRoller( dPosT, bSplitCut, bUsePrevDelta)
|
||||
local DiffY2 = MyParkY2 - dPosY2
|
||||
--EmtOutput( string.format( 'PosT=%.3f DiffY1=%.3f DiffY2=%.3f', dPosT, DiffY1, DiffY2))
|
||||
if bSplitCut then
|
||||
local bYNoMove, bVNoMove
|
||||
if DiffY1 > 0.1 then
|
||||
bYNoMove = false
|
||||
MDChar.Y1 = dPosY1 + DiffY1
|
||||
else
|
||||
bYNoMove = true
|
||||
MDChar.Y1 = dPosY1
|
||||
end
|
||||
if DiffY2 < -0.1 then
|
||||
bVNoMove = false
|
||||
MDChar.Y2 = dPosY2 + DiffY2
|
||||
dPosT = dPosT + DiffY2
|
||||
else
|
||||
bVNoMove = true
|
||||
MDChar.Y2 = dPosY2
|
||||
end
|
||||
-- se anche solo una morsa è restata in posizione, le sposto comunque entrambe di 5mm per distanziare i pezzi separati
|
||||
if bYNoMove or bVNoMove then
|
||||
MDChar.Y1 = MDChar.Y1 + 5
|
||||
MDChar.Y2 = MDChar.Y2 - 5
|
||||
end
|
||||
elseif DiffY1 > 0.1 and DiffY2 < -0.1 then
|
||||
EmtSetLastError( 1201, 'Error Collision in ParkRoller')
|
||||
@@ -2788,7 +3025,7 @@ function EmitParkRoller( dPosT, bSplitCut, bUsePrevDelta)
|
||||
local dPosY1 = dPosT + dY1Delta
|
||||
local DiffY1 = MyParkY1 - dPosY1
|
||||
local dMoveY1 = EgtIf( DiffY1 > 0.1, dMoveV1, 0)
|
||||
local dTryMoveY1 = ParkV1 - dPosT - EgtIf( bSplitCut or EMT.FALL, EMT.LT, 0)
|
||||
local dTryMoveY1 = min( ParkV1 - dPosT - EgtIf( bSplitCut or EMT.FALL, EMT.LT, 0), MaxY1 - dPosY1 - 10)
|
||||
if ( dPosT > ParkV2 - ExtraParkV and dPosT < ParkV1 and dPosY1 + dTryMoveY1 < MaxY1) then dMoveY1 = max( dMoveY1, dTryMoveY1) end
|
||||
MDChar.Y1 = dPosY1 + dMoveY1
|
||||
MDChar.MovType = 1
|
||||
@@ -2799,7 +3036,7 @@ function EmitParkRoller( dPosT, bSplitCut, bUsePrevDelta)
|
||||
local dPosY2 = dPosT + dY2Delta
|
||||
local DiffY2 = MyParkY2 - dPosY2
|
||||
local dMoveY2 = EgtIf( DiffY2 < -0.1, dMoveV2, 0)
|
||||
local dTryMoveY2 = ParkV2 - dPosT - EMT.LT - EMT.DELTA_LT - EMT.HOVM
|
||||
local dTryMoveY2 = max( ParkV2 - dPosT - EMT.LT - EMT.DELTA_LT - EMT.HOVM, MinY2 - dPosY2 + 10)
|
||||
if ( dPosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM < ParkV1 + ExtraParkV and dPosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM > ParkV2 and dPosY2 + dTryMoveY2 > MinY2) then dMoveY2 = min( dMoveY2, dTryMoveY2) end
|
||||
MDChar.Y2 = dPosY2 + dMoveY2
|
||||
MDChar.MovType = 2
|
||||
@@ -2824,28 +3061,6 @@ function EmitParkRoller( dPosT, bSplitCut, bUsePrevDelta)
|
||||
EMT.TPOS = dPosT
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetNextTool( nMchId)
|
||||
-- inizializzo prossimo utensile
|
||||
local sNextTool
|
||||
-- recupero lavorazione successiva
|
||||
local nNextMchId = EgtGetNextActiveOperation( nMchId)
|
||||
while nNextMchId do
|
||||
if EgtGetOperationType( nNextMchId) ~= MCH_OY.DISP then
|
||||
break
|
||||
end
|
||||
nNextMchId = EgtGetNextActiveOperation( nNextMchId)
|
||||
end
|
||||
-- se trovata
|
||||
if nNextMchId and EgtSetCurrMachining( nNextMchId) then
|
||||
sNextTool = EgtGetMachiningParam( MCH_MP.TOOL)
|
||||
end
|
||||
-- ripristino stato corrente
|
||||
EgtSetCurrMachining( EMT.MCHID)
|
||||
EgtTdbSetCurrTool( EMT.TOOL)
|
||||
return sNextTool
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function PreselectNextDiffHead( nMchId, sHead)
|
||||
-- se non ho due teste, esco subito
|
||||
@@ -2883,12 +3098,12 @@ function PreselectNextDiffHead( nMchId, sHead)
|
||||
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 EMT.PREVHEAD ~= 'H13' then
|
||||
EmitMoveDataHead( 2, { X=-ParkX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos='0'})
|
||||
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 EMT.PREVHEAD ~= 'H23' then
|
||||
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos='0'})
|
||||
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
|
||||
@@ -2921,15 +3136,16 @@ function PreselectNextDiffHead( nMchId, sHead)
|
||||
-- mi assicuro che l'altra testa sia in parcheggio
|
||||
if nHSet == 1 then
|
||||
-- non può essere la sega a catena
|
||||
EmitMoveDataHead( 2, { X=-ParkX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos='0'})
|
||||
EmitMoveStartHead( 2)
|
||||
if EMT.PREVHEAD == 'H23' and EMT.PREVHEAD ~= EMT.HEAD then
|
||||
EmitMoveWaitHead( 2)
|
||||
if EMT.PREVHEAD_H2 ~= 'H23' then
|
||||
EmitMoveDataHead( 2, { X=-ParkX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, EMT.PREVTCPOS_H2)})
|
||||
EmitMoveStartHead( 2)
|
||||
end
|
||||
else
|
||||
-- va bene per frese e lama
|
||||
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos='0'})
|
||||
EmitMoveStartHead( 1)
|
||||
-- non può essere la sega a catena
|
||||
if EMT.PREVHEAD_H1 ~= 'H13' and EMT.PREVHEAD_H1 ~= 'H15' then
|
||||
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, EMT.PREVTCPOS_H1)})
|
||||
EmitMoveStartHead( 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -3086,12 +3302,12 @@ end
|
||||
function EmitBeamHeadData( BhData)
|
||||
if not BhData.Pz5 then
|
||||
local sOut = 'G152'
|
||||
if BhData.T then sOut = sOut .. ' Y' .. EmtLenToString( BhData.T, 3) end
|
||||
if BhData.Y1 then sOut = sOut .. ' EY' .. EmtLenToString( BhData.Y1, 3) end
|
||||
if BhData.Y2 then sOut = sOut .. ' EV' .. EmtLenToString( BhData.Y2, 3) end
|
||||
if BhData.V1 then sOut = sOut .. ' B' .. EmtLenToString( BhData.V1, 3) end
|
||||
if BhData.V2 then sOut = sOut .. ' C' .. EmtLenToString( BhData.V2, 3) end
|
||||
if BhData.W then sOut = sOut .. ' EW' .. EmtLenToString( BhData.W, 3) end
|
||||
if BhData.T then sOut = sOut .. ' Y' .. EmtLenToString( BhData.T, 3) end
|
||||
if BhData.Y1 then sOut = sOut .. ' EY' .. EmtLenToString( BhData.Y1, 3) end
|
||||
if BhData.Y2 then sOut = sOut .. ' EV' .. EmtLenToString( BhData.Y2, 3) end
|
||||
if BhData.V1 then sOut = sOut .. ' B' .. EmtLenToString( BhData.V1, 3) end
|
||||
if BhData.V2 then sOut = sOut .. ' C' .. EmtLenToString( BhData.V2, 3) end
|
||||
if BhData.W then sOut = sOut .. ' EW' .. EmtLenToString( BhData.W, 3) end
|
||||
if BhData.ViseY1 then sOut = sOut .. ' EA' .. EgtNumToString( BhData.ViseY1, 0) end
|
||||
if BhData.ViseY2 then sOut = sOut .. ' EB' .. EgtNumToString( BhData.ViseY2, 0) end
|
||||
if BhData.SetHead then sOut = sOut .. ' EC' .. EgtNumToString( BhData.SetHead, 0) end
|
||||
|
||||
+186
-44
@@ -119,7 +119,15 @@ function OnSimulStart()
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'TRAV'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'COL1'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'COL2'},
|
||||
{ Grp = 'Base', Sub = 'BELT', Name = 'COLLISION'}}
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'TC1'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'TC2'},
|
||||
{ Grp = 'Base', Sub = 'BELT', Name = 'COLLISION'},
|
||||
{ Grp = 'X1', Sub = 'COLLISION', Name = 'STM'}}
|
||||
|
||||
if EgtGetHeadId( 'H21') then
|
||||
table.insert( McdData, { Grp = 'X2', Sub = 'COLLISION', Name = 'STM'})
|
||||
end
|
||||
|
||||
-- gruppo CHSAW si attiva solo se progress, one con BIT mortiser o PF
|
||||
if Progress or Mortiser or EgtGetHeadId( 'H21') then
|
||||
table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'CHSAW'})
|
||||
@@ -132,6 +140,10 @@ function OnSimulStart()
|
||||
if Progress and EgtGetHeadId( 'H21') then
|
||||
table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'SAW1'})
|
||||
end
|
||||
-- se non è Progress ed è una ONE, aggiungo collisioni magazzino speciale
|
||||
if not Progress and not EgtGetHeadId( 'H21') then
|
||||
table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'MTC'})
|
||||
end
|
||||
|
||||
if Clamp5 then
|
||||
table.insert( McdData, { Grp = 'W', Sub = 'COLLISION', Name = 'STM1'})
|
||||
@@ -152,7 +164,7 @@ function OnSimulStart()
|
||||
local nId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( nGrpId, McdData[i].Sub), McdData[i].Name)
|
||||
if nId then
|
||||
table.insert( EMT.MCODET, nId)
|
||||
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is ok', 4)
|
||||
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' (' .. tostring( nId) .. ') is ok', 4)
|
||||
else
|
||||
nMcdNullCnt = nMcdNullCnt + 1
|
||||
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is null', 4)
|
||||
@@ -345,6 +357,8 @@ function OnSimulDispositionStart()
|
||||
else
|
||||
EgtOutText( 'Barra non ruotata')
|
||||
end
|
||||
-- forzo apertura rulli in caso fossero chiusi. Altrimenti all'apertura nell OnSimulMoveStart sposterebbe anche la trave
|
||||
ExecParkRoller( nil, nil, nil, nil, nil, nil)
|
||||
end
|
||||
-- eseguo aggancio
|
||||
local nRawId = EgtGetFirstRawPart()
|
||||
@@ -508,6 +522,8 @@ function OnSimulToolSelect( dPosA)
|
||||
EgtSetAxisPos( 'C1', MyParkCSawC1)
|
||||
EgtSetAxisPos( 'B1', ParkCSawB1)
|
||||
EgtSetAxisPos( 'X1', ParkCSawX1)
|
||||
-- l'utensile viene caricato qui, quindi setto come già cambiato
|
||||
EMT.PREVHEAD_H1 = EMT.HEAD
|
||||
else
|
||||
-- imposto home dell'asse C2 (A=0 -> T111, A=-90 -> T112)
|
||||
local MyParkCSawC2 = GetChainSawCHomeFromVirtualAxis( dPosA)
|
||||
@@ -515,6 +531,8 @@ function OnSimulToolSelect( dPosA)
|
||||
EgtSetAxisPos( 'C2', MyParkCSawC2)
|
||||
EgtSetAxisPos( 'B2', ParkCSawB2)
|
||||
EgtSetAxisPos( 'X2', ParkCSawX2)
|
||||
-- l'utensile viene caricato qui, quindi setto come già cambiato
|
||||
EMT.PREVHEAD_H2 = EMT.HEAD
|
||||
end
|
||||
-- Imposto visualizzazione
|
||||
EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD)
|
||||
@@ -652,10 +670,10 @@ function OnSimulToolDeselect( dPrevA)
|
||||
-- se devo scaricare un utensile normale
|
||||
else
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
if nSetHead == 1 then
|
||||
if nSetHead == 1 and EMT.PREVHEAD_H1 then
|
||||
local MyParkX1 = EgtIf( GetHeadTCSet( EMT.HEAD, EMT.TCPOS) == 'Head1_TC1', ParkX1, ParkFrnX1)
|
||||
SimulMoveAxis( 'X1', MyParkX1, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
elseif EMT.PREVHEAD_H2 then
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
end
|
||||
@@ -818,16 +836,19 @@ function OnSimulMachiningEnd()
|
||||
EMT.DOU_TOOL = nil
|
||||
-- salvo dati utensile
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
-- se non ho già tolto la sega a catena, aggiorno valori
|
||||
if not EMT.CHSAW_OUT then
|
||||
-- per gruppo testa 1
|
||||
if nSetHead == 1 then
|
||||
EMT.PREVTOOL_H1 = EMT.TOOL
|
||||
EMT.PREVHEAD_H1 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H1 = EMT.TCPOS
|
||||
-- per gruppo testa 2
|
||||
elseif nSetHead == 2 then
|
||||
EMT.PREVTOOL_H2 = EMT.TOOL
|
||||
EMT.PREVHEAD_H2 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H2 = EMT.TCPOS
|
||||
if nSetHead == 1 then
|
||||
EMT.PREVTOOL_H1 = EMT.TOOL
|
||||
EMT.PREVHEAD_H1 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H1 = EMT.TCPOS
|
||||
-- per gruppo testa 2
|
||||
elseif nSetHead == 2 then
|
||||
EMT.PREVTOOL_H2 = EMT.TOOL
|
||||
EMT.PREVHEAD_H2 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H2 = EMT.TCPOS
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -947,6 +968,7 @@ function OnSimulMoveStart()
|
||||
VerifyY2Stroke( EMT.A2)
|
||||
VerifyV1Stroke( EMT.A3)
|
||||
VerifyV2Stroke( EMT.A4)
|
||||
|
||||
-- se devo subito parcheggiare i rulli
|
||||
local nRes = 0
|
||||
if bParkV then
|
||||
@@ -958,6 +980,12 @@ function OnSimulMoveStart()
|
||||
end
|
||||
-- se movimento in rapido ad inizio lavorazione
|
||||
if EMT.MOVE == 0 and EMT.MOVEIND <= 3 then
|
||||
-- gestione speciale per pezzi molto alti. Se il movimento successivo è più alto del precedente, allora prendo il successivo
|
||||
if EMT.L3s then
|
||||
if EMT.L3s > EMT.L3 then
|
||||
EMT.L3 = EMT.L3s
|
||||
end
|
||||
end
|
||||
-- Dati
|
||||
local B1Pos = EgtGetAxisPos( 'B1')
|
||||
local B1Home = EgtGetAxisHomePos( 'B1')
|
||||
@@ -972,20 +1000,44 @@ function OnSimulMoveStart()
|
||||
-- se movimento iniziale da Zmax con lama o fresa
|
||||
if EMT.ZMAX or EMT.FLAG == 1 or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
--EgtOutBox( 'Flag 2,1', 'Info Rapid')
|
||||
local bMoveZbeforeX = false
|
||||
|
||||
local dZref = EMT.L3
|
||||
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
|
||||
end
|
||||
-- se la quota di lavoro è più in alta della posizione a ZHOME della testa, prima si va alla Z di lavoro e poi si approccia il pezzo
|
||||
if EMT.L3 > dZref then
|
||||
bMoveZbeforeX = true
|
||||
end
|
||||
|
||||
-- se vado in posizione speciale rotazione assi, poi devo ritornare alla X vera di lavoro
|
||||
local dMoveXtoFinalPosition = false
|
||||
local dXref = EMT.L2
|
||||
if EMT.HEAD == 'H12' and -EMT.L2 < -LimX1PlRotSaw then
|
||||
dXref = LimX1PlRotSaw
|
||||
SimulMoveAxis( 'X1', dXref, MCH_SIM_STEP.RAPID)
|
||||
dZref = max( EMT.L3, Z1Home + GetZExtra( EMT.HEAD, EMT.R2))
|
||||
dMoveXtoFinalPosition = true
|
||||
elseif not bMoveZbeforeX then
|
||||
SimulMoveAxis( 'X1', dXref, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
SimulMoveAxis( 'X1', LimX1PlRotSaw, MCH_SIM_STEP.RAPID)
|
||||
dZref = max( EMT.L3, Z1Home + GetZExtra( EMT.HEAD, EMT.R2))
|
||||
dMoveXtoFinalPosition = true
|
||||
end
|
||||
SimulMoveAxis( 'X1', dXref, MCH_SIM_STEP.RAPID)
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H12' and ( EgtIf( not EgtGetHeadId( 'H21') or BD.RIGHT_LOAD, -EMT.L2 < -LimX1RotSaw, -EMT.L2 > -LimX1RotSaw) or EMT.R2 < -91) then
|
||||
dZref = Z1Home + GetZExtra( EMT.HEAD, EMT.R2) - 100
|
||||
end
|
||||
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
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( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
if bMoveZbeforeX then
|
||||
SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
if dMoveXtoFinalPosition then
|
||||
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- caso standard
|
||||
else
|
||||
SimulMoveAxis( 'Z1', dZref, MCH_SIM_STEP.RAPID)
|
||||
@@ -1029,21 +1081,34 @@ function OnSimulMoveStart()
|
||||
if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' then
|
||||
if EMT.ZMAX or EMT.FLAG == 1 or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
--EgtOutBox( 'Flag 2,1', 'Info Rapid')
|
||||
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
local bMoveZbeforeX = false
|
||||
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H12' and ( -EMT.L2 < -LimX1RotSaw or EMT.R2 > 91) then
|
||||
dZref = Z1Home + GetZExtra( EMT.HEAD, EMT.R2) - 100
|
||||
end
|
||||
-- se la quota di lavoro è più in alta della posizione a ZHOME della testa, prima si va alla Z di lavoro e poi si approccia il pezzo
|
||||
if EMT.L3 > dZref then
|
||||
bMoveZbeforeX = true
|
||||
end
|
||||
if not bMoveZbeforeX then
|
||||
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
SimulMoveAxis( 'X1', LimX1RotSawTC2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 400")
|
||||
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( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
if bMoveZbeforeX then
|
||||
SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- caso standard
|
||||
else
|
||||
SimulMoveAxis( 'Z1', dZref, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
-- altrimenti sega a catena (H13 o H15)
|
||||
@@ -1088,25 +1153,59 @@ function OnSimulMoveStart()
|
||||
-- se movimento iniziale da Zmax con lama o fresa
|
||||
if EMT.ZMAX or EMT.FLAG == 1 or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
--EgtOutBox( 'Flag 2,1', 'Info Rapid')
|
||||
SimulMoveAxis( 'X2', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
local bMoveZbeforeX = false
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H22' and ( EgtIf( BD.RIGHT_LOAD, EMT.L2 < -LimX2RotSaw, EMT.L2 > -LimX2RotSaw) or EMT.R2 > 91) then
|
||||
if EMT.HEAD == 'H22' and ( EgtIf( BD.RIGHT_LOAD, -EMT.L2 < -LimX1RotSaw, -EMT.L2 > -LimX1RotSaw) or EMT.R2 > 91) then
|
||||
dZref = Z2Home + GetZExtra( EMT.HEAD, EMT.R2) - 100
|
||||
end
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
if EMT.HEAD == 'H22' and abs( C2Pos - EMT.R1) > 1 and ( abs( C2Home - EMT.R1) > 30.1 or abs(B2Home - EMT.R2) > 30.1) then
|
||||
SimulMoveAxis( 'B2', 0, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z2', dZref, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
-- caso standard
|
||||
-- se la quota di lavoro è più in alta della posizione a ZHOME della testa, prima si va alla Z di lavoro e poi si approccia il pezzo
|
||||
if EMT.L3 > dZref then
|
||||
bMoveZbeforeX = true
|
||||
end
|
||||
if not bMoveZbeforeX then
|
||||
SimulMoveAxis( 'X2', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
SimulMoveAxis( 'Z2', dZref, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'X2', LimX2RotSaw, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
if abs( C2Pos - EMT.R1) > 1 and ( abs( C2Home - EMT.R1) > 30.1 or abs( B2Home - EMT.R2) > 30.1) then
|
||||
if EMT.HEAD == 'H22' then
|
||||
SimulMoveAxis( 'B2', 0, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z2', dZref, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
if bMoveZbeforeX then
|
||||
SimulMoveAxis( 'Z2', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- caso standard
|
||||
else
|
||||
SimulMoveAxis( 'Z2', dZref, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
if bMoveZbeforeX then
|
||||
SimulMoveAxis( 'Z2', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
-- se anche precedente con sega a catena ma depositata, devo riprenderla
|
||||
if EMT.CHSAW_OUT then
|
||||
local dPosA = GetCurrChainSawingVirtualAxis()
|
||||
EgtSetMode( EgtGetHeadId( EMT.HEAD), GDB_MD.HIDDEN)
|
||||
OnSimulToolDeselect()
|
||||
EgtLoadTool( EMT.HEAD, 1, EMT.TOOL)
|
||||
ShowToolInTcPos( EMT.TCPOS, false)
|
||||
OnSimulToolSelect( dPosA)
|
||||
-- recupero i dati dato che ho scaricato motosega e preso quelli dell'utensile di default
|
||||
EmtModifyAxisHome( 'Z2', GetChainSawZHomeFromVirtualAxis( dPosA))
|
||||
EmtModifyAxisHome( 'C2', GetChainSawCHomeFromVirtualAxis( dPosA))
|
||||
EmtModifyAxisHome( 'B2', ParkCSawB2)
|
||||
B2Home = EgtGetAxisHomePos( 'B2')
|
||||
C2Home = EgtGetAxisHomePos( 'C2')
|
||||
Z2Home = EgtGetAxisHomePos( 'Z2')
|
||||
EMT.CHSAW_OUT = nil
|
||||
end
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale
|
||||
if dPosA == 0 or abs( EMT.R2) < 10 then
|
||||
SimulMoveAxes( 'X2', EMT.L2, MCH_SIM_STEP.RAPID, 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
@@ -1185,6 +1284,7 @@ function OnSimulMoveStart()
|
||||
EMT.A4 = EgtIf( GetV2ToClose(), EMT.V2NEXTPOS, ParkV2)
|
||||
end
|
||||
EMT.ZMAX = nil
|
||||
EMT.XHOME = nil
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -1293,6 +1393,10 @@ function ExecAuxCmd( sCmd, bPathStart)
|
||||
ExecOpenRoller( 1)
|
||||
ExecOpenRoller( 2)
|
||||
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
|
||||
-- se stringo i rulli e ho lama, verifico che sia in home
|
||||
if MoveV1 and MoveV1 < 400 and ( EMT.HEAD == 'H12' or EMT.HEAD == 'H22') and EMT.ZMAX and not EMT.XHOME then
|
||||
ExecMoveZmax( false, true)
|
||||
end
|
||||
local bOk, bOk1, bOk2, bOk3 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
|
||||
sV1, MoveV1, MCH_SIM_STEP.RAPID,
|
||||
sV2, MoveV2, MCH_SIM_STEP.RAPID)
|
||||
@@ -1315,6 +1419,10 @@ function ExecAuxCmd( sCmd, bPathStart)
|
||||
ExecOpenRoller( 1)
|
||||
ExecOpenRoller( 2)
|
||||
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
|
||||
-- se stringo i rulli e ho lama, verifico che sia in home
|
||||
if MoveV1 and MoveV1 < 400 and ( EMT.HEAD == 'H12' or EMT.HEAD == 'H22') and EMT.ZMAX and not EMT.XHOME then
|
||||
ExecMoveZmax( false, true)
|
||||
end
|
||||
local bOk, bOk1, bOk2, bOk3, bOk4 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
|
||||
Cmd[4], tonumber( Cmd[5]), MCH_SIM_STEP.RAPID,
|
||||
sV1, MoveV1, MCH_SIM_STEP.RAPID,
|
||||
@@ -1338,6 +1446,10 @@ function ExecAuxCmd( sCmd, bPathStart)
|
||||
ExecOpenRoller( 1)
|
||||
ExecOpenRoller( 2)
|
||||
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
|
||||
-- se stringo i rulli e ho lama, verifico che sia in home
|
||||
if MoveV1 and MoveV1 < 400 and ( EMT.HEAD == 'H12' or EMT.HEAD == 'H22') and EMT.ZMAX and not EMT.XHOME then
|
||||
ExecMoveZmax( false, true)
|
||||
end
|
||||
local bOk, bOk1, bOk2, bOk3, bOk4, bOk5 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
|
||||
Cmd[4], tonumber( Cmd[5]), MCH_SIM_STEP.RAPID,
|
||||
Cmd[6], tonumber( Cmd[7]), MCH_SIM_STEP.RAPID,
|
||||
@@ -1518,8 +1630,8 @@ function ExecMoveZmax( bMchSplit, btoXHome)
|
||||
if GetHeadTCSet( EMT.HEAD, EMT.TCPOS) == 'Head1_TC1' then
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
if abs( HomeC - CurrC) > 0.1 or abs( HomeB - CurrB) > 0.1 then
|
||||
local dZref = HomeZ + GetZExtra( EMT.HEAD, CurrB)
|
||||
if EgtIf( not EgtGetHeadId( 'H21') or BD.RIGHT_LOAD, -CurrX < -LimX1RotSaw, -CurrX > -LimX1RotSaw) then
|
||||
local dZref = HomeZ + GetZExtra( EMT.HEAD, EgtClamp( CurrB, -90, 90))
|
||||
if EgtIf( BD.RIGHT_LOAD, -CurrX < -LimX1RotSaw, -CurrX > -LimX1RotSaw) then
|
||||
dZref = dZref - EgtIf( not Mortiser, 100, 370)
|
||||
end
|
||||
SimulMoveAxes( 'Z1', EgtIf( dZref > CurrZ, dZref, CurrZ), MCH_SIM_STEP.RAPID, 'B1', EgtClamp( CurrB, -90, 90), MCH_SIM_STEP.COLLROT)
|
||||
@@ -1531,6 +1643,7 @@ function ExecMoveZmax( bMchSplit, btoXHome)
|
||||
end
|
||||
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
|
||||
if btoXHome then
|
||||
EMT.XHOME = true
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- se lavorazione in doppio
|
||||
@@ -1542,6 +1655,7 @@ function ExecMoveZmax( bMchSplit, btoXHome)
|
||||
SimulMoveAxes( 'B2', ParkB2, MCH_SIM_STEP.COLLROT, 'C2', ParkC2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'Z2', MaxZ2, MCH_SIM_STEP.RAPID)
|
||||
if bToXHome then
|
||||
EMT.XHOME = true
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
EMT.DOU_TO_ZMAX = nil
|
||||
@@ -1549,8 +1663,8 @@ function ExecMoveZmax( bMchSplit, btoXHome)
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxes( 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID, 'B1', ParkB1, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxis( 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxes( 'X1', HomeX, MCH_SIM_STEP.RAPID, 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
@@ -1560,7 +1674,7 @@ function ExecMoveZmax( bMchSplit, btoXHome)
|
||||
if abs( HomeC - CurrC) > 0.1 or abs( HomeB - CurrB) > 0.1 then
|
||||
local dZref = HomeZ + GetZExtra( EMT.HEAD, CurrB)
|
||||
SimulMoveAxes( 'Z1', EgtIf( dZref > CurrZ, dZref, CurrZ), MCH_SIM_STEP.RAPID, 'B1', EgtClamp( CurrB, -90, 90), MCH_SIM_STEP.COLLROT)
|
||||
if EMT.HEAD == 'H12' and ( abs( HomeC - CurrC) > 30.1 or abs( HomeB - CurrB) > 30.1) then
|
||||
if EMT.HEAD == 'H12' and ( abs( HomeC - CurrC) > 30.1 or abs( HomeB - CurrB) > 30.1) or not( bProgress) then
|
||||
SimulMoveAxes( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID, 'B1', 0, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxis( 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
@@ -1568,13 +1682,23 @@ function ExecMoveZmax( bMchSplit, btoXHome)
|
||||
end
|
||||
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
|
||||
if btoXHome then
|
||||
EMT.XHOME = true
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxes( 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID, 'B1', ParkB1, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxis( 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
if btoXHome then
|
||||
EgtUnloadTool( EMT.HEAD, 1)
|
||||
ShowToolInTcPos( EMT.TCPOS, true)
|
||||
EMT.PREVTOOL_H1 = nil
|
||||
EMT.PREVHEAD_H1 = nil
|
||||
EMT.PREVTCPOS_H1 = nil
|
||||
EMT.CHSAW_OUT = true
|
||||
EMT.XHOME = true
|
||||
end
|
||||
SimulMoveAxes( 'X1', HomeX, MCH_SIM_STEP.RAPID, 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
@@ -1595,15 +1719,16 @@ function ExecMoveZmax( bMchSplit, btoXHome)
|
||||
end
|
||||
SimulMoveAxis( 'Z2', MaxZ2, MCH_SIM_STEP.RAPID)
|
||||
if btoXHome then
|
||||
EMT.XHOME = true
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
SimulMoveAxes( 'Z2', HomeZ, MCH_SIM_STEP.RAPID, 'B2', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxes( 'Z2', ParkCSawZ2, MCH_SIM_STEP.RAPID, 'B2', ParkB2, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxis( 'Z2', ParkCSawZ2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxes( 'X2', HomeX, MCH_SIM_STEP.RAPID, 'C2', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'X2', HomeX, MCH_SIM_STEP.RAPID, 'C2', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
EMT.ZMAX = true
|
||||
@@ -1730,8 +1855,20 @@ function ExecParkRoller( PosY1, PosY2, PosV1, PosV2, bSpliCut, bAgg)
|
||||
local DiffY2 = MyParkY2 - PosY2
|
||||
-- se appena eseguito taglio di separazione
|
||||
if bSpliCut then
|
||||
local dAddMove
|
||||
-- se entrambe le morse si spostano vado in posizione calcolata
|
||||
if DiffY1 > 0.1 and DiffY2 < -0.1 then
|
||||
dAddMove = 0
|
||||
-- se almeno una è rimasta ferma in posizione, allontano comunque di 5mm ulteriori
|
||||
else
|
||||
dAddMove = 5
|
||||
end
|
||||
local MoveY1 = max( DiffY1, 0.0)
|
||||
local MoveY2 = min( DiffY2, 0.0)
|
||||
|
||||
MoveY1 = MoveY1 + dAddMove
|
||||
MoveY2 = MoveY2 - dAddMove
|
||||
|
||||
-- aggancio i pezzi rimanenti all'asse Y1
|
||||
LinkRemainingPartsToY1()
|
||||
-- eseguo i movimenti
|
||||
@@ -1779,7 +1916,7 @@ function ExecParkRoller( PosY1, PosY2, PosV1, PosV2, bSpliCut, bAgg)
|
||||
local MoveV1 = ParkV1 - PosV1
|
||||
local DiffY1 = MyParkY1 - PosY1
|
||||
local MoveY1 = EgtIf( DiffY1 > 0.1, MoveV1, 0)
|
||||
local TryMoveY1 = ParkV1 - PosT - EgtIf( bSpliCut or EMT.FALL, EMT.LT, 0) - EMT.HOVM
|
||||
local TryMoveY1 = min( ParkV1 - PosT - EgtIf( bSpliCut or EMT.FALL, EMT.LT, 0) - EMT.HOVM, MaxY1 - PosY1 - 10)
|
||||
if ( PosT > ParkV2 - ExtraParkV and PosT < ParkV1 and PosY1 + TryMoveY1 < MaxY1 and not EMT.W2DELTA) then MoveY1 = max( MoveY1, TryMoveY1) end
|
||||
-- se appena eseguito taglio di separazione
|
||||
if bSpliCut then
|
||||
@@ -1809,7 +1946,7 @@ function ExecParkRoller( PosY1, PosY2, PosV1, PosV2, bSpliCut, bAgg)
|
||||
local MoveV2 = ParkV2 - PosV2
|
||||
local DiffY2 = MyParkY2 - PosY2
|
||||
local MoveY2 = EgtIf( DiffY2 < -0.1, MoveV2, 0)
|
||||
local TryMoveY2 = ParkV2 - PosT - EMT.LT - EMT.DELTA_LT - EMT.HOVM
|
||||
local TryMoveY2 = max( ParkV2 - PosT - EMT.LT - EMT.DELTA_LT - EMT.HOVM, MinY2 - PosY2 + 10)
|
||||
if ( PosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM < ParkV1 + ExtraParkV and PosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM > ParkV2 and PosY2 + TryMoveY2 > MinY2) then MoveY2 = min( MoveY2, TryMoveY2) end
|
||||
if not SimulMoveAxes( 'T', PosT + MoveY2, MCH_SIM_STEP.RAPID,
|
||||
'V1', ParkV1, MCH_SIM_STEP.RAPID,
|
||||
@@ -2678,7 +2815,12 @@ function GetNextTool( nMchId)
|
||||
-- recupero lavorazione successiva
|
||||
local nNextMchId = EgtGetNextActiveOperation( nMchId)
|
||||
while nNextMchId do
|
||||
if EgtGetOperationType( nNextMchId) ~= MCH_OY.DISP then
|
||||
-- se la prossima lavorazione è lo start di un altro pezzo, faccio finta che cambia utensile in modo che vada in parcheggio con utensili speciali
|
||||
if EgtGetOperationType( nNextMchId) == MCH_OY.DISP then
|
||||
if IsStartOrRestPhase( EMT.PHASE+1) then
|
||||
return nil
|
||||
end
|
||||
else
|
||||
break
|
||||
end
|
||||
nNextMchId = EgtGetNextActiveOperation( nNextMchId)
|
||||
|
||||
+46
-31
@@ -73,7 +73,7 @@ function OnSpecialGetMaxZ()
|
||||
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
||||
end
|
||||
elseif EMC.HEAD == 'H12' and sHead_TC == 'Head1_TC1' then
|
||||
if vtTp:getX() > 0.3 and vtT:getX() > 0.3 then
|
||||
if vtTp:getX() > 0.4 and vtT:getX() > 0.4 then
|
||||
if bBSameSign and abs( EMC.R1 - EMC.R1p) < 165 then
|
||||
EMC.MAXZ = MaxZ1 - EgtIf( abs( EMC.R2) < 90.1 and abs( EMC.R2p) < 90.1, 0, 130)
|
||||
elseif vtTp:getZ() > 0.707 or vtT:getZ() > 0.707 then
|
||||
@@ -95,7 +95,7 @@ function OnSpecialGetMaxZ()
|
||||
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
||||
end
|
||||
elseif EMC.HEAD == 'H12' and sHead_TC == 'Head1_TC2' then
|
||||
if vtTp:getX() > 0.3 and vtT:getX() > 0.3 then
|
||||
if vtTp:getX() > 0.4 and vtT:getX() > 0.4 then
|
||||
if bBSameSign and abs( EMC.R1 - EMC.R1p) < 165 then
|
||||
EMC.MAXZ = MaxZ1 - EgtIf( abs( EMC.R2) < 90.1 and abs( EMC.R2p) < 90.1, 0, 130)
|
||||
elseif vtTp:getZ() > 0.707 or vtT:getZ() > 0.707 then
|
||||
@@ -124,7 +124,7 @@ function OnSpecialGetMaxZ()
|
||||
EMC.MAXZ = ParkZ2 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
||||
end
|
||||
elseif EMC.HEAD == 'H22' then
|
||||
if vtTp:getX() > 0.3 and vtT:getX() > 0.3 then
|
||||
if vtTp:getX() > 0.4 and vtT:getX() > 0.4 then
|
||||
if bBSameSign and abs( EMC.R1 - EMC.R1p) < 165 then
|
||||
EMC.MAXZ = MaxZ2 - EgtIf( abs( EMC.R2) < 90.1 and abs( EMC.R2p) < 90.1, 0, 130)
|
||||
elseif vtTp:getZ() > 0.707 or vtT:getZ() > 0.707 then
|
||||
@@ -824,6 +824,13 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreRotMch)
|
||||
-- mi salvo info lavorazione su una lista
|
||||
local AuxInfoMach = {}
|
||||
AuxInfoMach.bPreSplit = bPreSplit
|
||||
AuxInfoMach.bSplitting = bSplitting
|
||||
AuxInfoMach.bPreCut = bPreCut
|
||||
AuxInfoMach.bCutting = bCutting
|
||||
AuxInfoMach.bUnload = bUnload
|
||||
|
||||
-- Assegno flag di pezzo separato dal resto del grezzo
|
||||
SPLIT = IsEndPhase( EMC.PHASE) or IsMid2Phase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE)
|
||||
@@ -921,7 +928,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
|
||||
local dPosT = LoadT
|
||||
if IsFirstMachiningAfterRotation( EMC.MCHID) then dPosT = dPosT + TurnerOffs end
|
||||
local vCmd = SpecCalcLoad( dPosT, dDistFront, max( dDistBack, MinJoin + EgtIf( SPLIT, EMC.TCING, 0), EMC.LB - ( MaxY1 - MinY1) + 6))
|
||||
local vCmd2 = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar)
|
||||
local vCmd2 = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar, AuxInfoMach)
|
||||
if bSplitting and EMC.ERR == 18 then
|
||||
table.insert( vCmd, { 22, dRollBack, -dRollFront})
|
||||
end
|
||||
@@ -934,7 +941,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
|
||||
|
||||
-- Se altrimenti carri entrambi diponibili, eseguo calcoli per carrelli
|
||||
elseif not IsEndPhase( EMC.PHASE) then
|
||||
local vCmd = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar)
|
||||
local vCmd = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar, AuxInfoMach)
|
||||
-- Se non ci sono spostamenti, confermo i parametri di aggancio e di posizione roller
|
||||
if SpecTestOnlyRemarkInCmds( vCmd) then
|
||||
table.insert( vCmd, { 21, EgtIf( EMC.Y1DELTA, EMC.Y1DELTA, 0), EgtIf( EMC.Y2DELTA, EMC.Y2DELTA, 0)})
|
||||
@@ -1262,7 +1269,7 @@ function SpecCalcLoad( dPosT, dDistFront, dDistBack)
|
||||
end -- SpecAdjustLoad [L]
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar)
|
||||
function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar, AuxInfoMach)
|
||||
|
||||
local MinFrontJoin = MinJoin + EMC.HCING + EMC.HOVM
|
||||
local MyMinOther = MinOther + EgtIf( EMC.CNT == 1, AggLoad, 0)
|
||||
@@ -1301,13 +1308,11 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del
|
||||
WorkTab.dV2PosF = -dRollFront
|
||||
WorkTab.bV2CloseF = false
|
||||
|
||||
-- aggiuntivo per non avere problemi con pezzi a caduta
|
||||
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 5 * BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + 4 * BD.CHAR_EXTRA_DIST
|
||||
elseif WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 2.5 * BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + 2 * BD.CHAR_EXTRA_DIST
|
||||
elseif WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + BD.CHAR_EXTRA_DIST
|
||||
-- dopo che si è calcolato il minimo e massimo dell'intervallo, verifico che in testa rimanga almeno il minimo per poter fare passaggio pinze e scaricare
|
||||
if AuxInfoMach and ( AuxInfoMach.bSplitting or AuxInfoMach.bCutting) then
|
||||
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST and WorkTab.dY1DeltaMaxF > EMC.LT + BD.MINRAW_S + BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = max( min( EMC.LT + BD.MINRAW_S, WorkTab.dY1DeltaMaxF - 1), WorkTab.dY1DeltaMinF)
|
||||
end
|
||||
end
|
||||
|
||||
-- verifico validità intervallo ammesso per Y1
|
||||
@@ -1346,13 +1351,11 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del
|
||||
WorkTab.dV2PosF = -dRollFront
|
||||
WorkTab.bV2CloseF = false
|
||||
|
||||
-- aggiuntivo per minimizzare scambi carrelli
|
||||
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 5 * BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + 4 * BD.CHAR_EXTRA_DIST
|
||||
elseif WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 2.5 * BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + 2 * BD.CHAR_EXTRA_DIST
|
||||
elseif WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + BD.CHAR_EXTRA_DIST
|
||||
-- dopo che si è calcolato il minimo e massimo dell'intervallo, verifico che in testa rimanga almeno il minimo per poter fare passaggio pinze e scaricare
|
||||
if AuxInfoMach and ( AuxInfoMach.bSplitting or AuxInfoMach.bCutting) then
|
||||
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST and WorkTab.dY1DeltaMaxF > EMC.LT + BD.MINRAW_S + BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = max( min( EMC.LT + BD.MINRAW_S, WorkTab.dY1DeltaMaxF - 1), WorkTab.dY1DeltaMinF)
|
||||
end
|
||||
end
|
||||
|
||||
-- verifico validità intervallo ammesso per Y1
|
||||
@@ -1420,7 +1423,14 @@ function SpecCalcSplit( dLenRaw, dMaxLenLeft)
|
||||
local vCmd = {}
|
||||
EgtOutLog( ' *[S]', 1)
|
||||
local bSplit = ( EMC.Y2DELTA ~= nil or EMC.W2DELTA ~= nil)
|
||||
local ParkT = EgtIf( bSplit and dMaxLenLeft > ParkV1 - 50, LoadT, ParkV1)
|
||||
local ParkT = ParkV1
|
||||
if bSplit then
|
||||
if dMaxLenLeft + 100 > LoadT then
|
||||
ParkT = dMaxLenLeft + 300
|
||||
elseif dMaxLenLeft + 100 > ParkV1 then
|
||||
ParkT = LoadT
|
||||
end
|
||||
end
|
||||
local sType = EgtIf( EMC.Y2DELTA, 'Split', EgtIf( EMC.W2DELTA, 'SpecSplit', 'Fall'))
|
||||
table.insert( vCmd, { 0, sType})
|
||||
if not bSplit then EnsureZmax( false, vCmd) end
|
||||
@@ -1656,19 +1666,24 @@ function SpecAdjustCarriages( WorkTab)
|
||||
local bCloseV = false
|
||||
if WorkTab.dY1DeltaI then
|
||||
if WorkTab.dY1DeltaI <= MinJoin + WorkTab.dV1PosI - WorkTab.dV2PosI + 2 * AGG_V + EMC.HCING + EMC.HOVM + EgtIf( EMC.CNT == 1, AggLoad, 0) then
|
||||
bCloseV = true
|
||||
bCloseV = true
|
||||
end
|
||||
end
|
||||
if WorkTab.dY2DeltaI then
|
||||
if EMC.LB - WorkTab.dY2DeltaI <= MinJoin + WorkTab.dV1PosI - WorkTab.dV2PosI + 2 * AGG_V + EgtIf( SPLIT, EMC.TCING, 0) + EgtIf( EMC.CNT == 1, AggLoad, 0) then
|
||||
bCloseV = true
|
||||
bCloseV = true
|
||||
end
|
||||
end
|
||||
if WorkTab.dY2DeltaMinF then
|
||||
if EMC.LB - WorkTab.dY2DeltaMinF <= MinJoin + WorkTab.dV1PosI - WorkTab.dV2PosI + 2 * AGG_V + EgtIf( SPLIT, EMC.TCING, 0) + EgtIf( EMC.CNT == 1, AggLoad, 0) then
|
||||
bCloseV = true
|
||||
bCloseV = true
|
||||
end
|
||||
end
|
||||
-- se i pezzi del cliente sono molto storti, si forza la chiusura per evitare che vada a sbattere. Se parametro non presente, si chiude solo se necessario
|
||||
if ForceToCloseRollersGate then
|
||||
bCloseV = true
|
||||
end
|
||||
|
||||
WorkTab.bCloseV = bCloseV
|
||||
EgtOutLog( ' Tool : '..( EgtIf( bChangedTool, 'CHANGED', 'same')).. ' CloseV : '..( EgtIf( bCloseV, 'TRUE', 'false')), 1)
|
||||
|
||||
@@ -1824,7 +1839,7 @@ local function MaxDispl( TabI, vCmd, sType)
|
||||
-- allontano (Y1+T) e (Y2)
|
||||
dY1a = MaxY1
|
||||
dY2a = MinY2
|
||||
dTa = ( MaxY1 - TabI.dY1PosI) + dTa
|
||||
dTa = ( dY1a - TabI.dY1PosI) + dTa
|
||||
-- **[M2]** = allontanamento dei trascinatori con Y2 in presa
|
||||
elseif sType == 'M2' then
|
||||
EmitComment( vCmd, '[M2]')
|
||||
@@ -1835,7 +1850,7 @@ local function MaxDispl( TabI, vCmd, sType)
|
||||
-- allontano (Y2+T) e (Y1)
|
||||
dY1a = MaxY1
|
||||
dY2a = MinY2
|
||||
dTa = ( MinY2 - TabI.dY2PosI) + dTa
|
||||
dTa = ( dY2a - TabI.dY2PosI) + dTa
|
||||
-- **[M3]** = accentramento dei trascinatori con Y1 in presa
|
||||
elseif sType == 'M3' then
|
||||
EmitComment( vCmd, '[M3]')
|
||||
@@ -1845,7 +1860,7 @@ local function MaxDispl( TabI, vCmd, sType)
|
||||
-- accentro (Y1+T) e (Y2)
|
||||
dY1a = TabI.MyMinY1V1
|
||||
dY2a = TabI.MaxY2V2
|
||||
dTa = ( TabI.MyMinY1V1 - TabI.dY1PosI) + dTa
|
||||
dTa = ( dY1a - TabI.dY1PosI) + dTa
|
||||
-- **[M4]** = accentramento dei trascinatori con Y2 in presa
|
||||
elseif sType == 'M4' then
|
||||
EmitComment( vCmd, '[M4]')
|
||||
@@ -1856,7 +1871,7 @@ local function MaxDispl( TabI, vCmd, sType)
|
||||
-- accentro (Y2+T) e (Y1)
|
||||
dY1a = TabI.MyMinY1V1
|
||||
dY2a = TabI.MaxY2V2
|
||||
dTa = ( TabI.MaxY2V2 - TabI.dY2PosI) + dTa
|
||||
dTa = ( dY2a - TabI.dY2PosI) + dTa
|
||||
end
|
||||
--
|
||||
table.insert( vCmd, { 3, 'Y1', dY1a, 'Y2', dY2a, 'T', dTa, EMC.CNT})
|
||||
@@ -2182,7 +2197,7 @@ local function PosY1Y2B( TabI, vCmd)
|
||||
end
|
||||
end
|
||||
nCnt = nCnt + 1
|
||||
if nCnt > 5 then return end
|
||||
if nCnt > 10 then return end
|
||||
until ( not bXW)
|
||||
-- chiusura/parcheggio dei trascinatori in funzioni chiamanti
|
||||
local dY1Delta = TabI.dY1PosI - TabI.dTPosI
|
||||
@@ -2321,7 +2336,7 @@ local function PosY2Y1B( TabI, vCmd)
|
||||
end
|
||||
end
|
||||
nCnt = nCnt + 1
|
||||
if nCnt > 5 then return end
|
||||
if nCnt > 10 then return end
|
||||
until ( not bXW)
|
||||
-- la chiusura delle morse è fatta sopra
|
||||
local dY1Delta = TabI.dY1PosI - TabI.dTPosI
|
||||
@@ -2393,7 +2408,7 @@ function SpecAdjustCarrA( WorkTab)
|
||||
dY1DeltaF = PosY1Y2B( TabValI, vCmd)
|
||||
else
|
||||
--[A(1)A] **ALLONTANAMENTO** (dall'origine) del trascinatore Y1
|
||||
EmitComment( vCmd, '[AY1A]')
|
||||
EmitComment( vCmd, '[A-Y1A]')
|
||||
dY1DeltaF = PosY1Y2A( TabValI, vCmd)
|
||||
end
|
||||
-- chiudo Y1
|
||||
|
||||
+100
-4
@@ -1,10 +1,106 @@
|
||||
==== Essetre_StdPF Update Log ====
|
||||
==== Common_ONE-PF Update Log ====
|
||||
|
||||
Versione 2.7c2 (12/03/2025)
|
||||
- (SIM-GEN) Migliorato calcolo posizione barra dopo split. Tiene in considerazione ingombro lavorazioni pezzo. Ticket#2321
|
||||
- (GEN) Aggiunta commenti HEADER e FOOTER per comunicazione con linea o altre macchine, da parte di Essetre.
|
||||
- (SIm-GEN) Migliorato movimento approccio al pezzo con lama. Allineamento simulazione-generazione che facevano due movimenti leggermente diversi. Ticket#2335
|
||||
|
||||
Versione 2.7c1 (05/03/2025)
|
||||
- (GEN) Corretto movimento in home utensile precedente. Ticket#2324
|
||||
|
||||
Versione 2.7b1 (07/02/2025)
|
||||
- (SIM-GEN) In caso di Progress, alla deselezione utensile testa 1 su TC2 si fa movimento Z raddrizzando asse B. Ticket#2247
|
||||
- (SIM-GEN) Estensione soluzione Ticket#2206. Ora si aprono di 5mm extra anche se solo una morsa resta in posizione. Ticket#2259
|
||||
- (SIM) Migliorato controllo collisioni con traversa. Ora si considera asse X. Serve modifica NGE! Ticket#2257
|
||||
|
||||
Versione 2.7a2 (15/01/2024)
|
||||
- (SIM-GEN) In caso di testa 1 su TC2 (ONE), si ruota prima la C e poi la B. Ticket#2247
|
||||
|
||||
Versione 2.7a1 (07/01/2024)
|
||||
- (GEN) In separazione, quando si porta indietro il restante, si aprono le paratie rulli subito. Ticket#2214
|
||||
- (SIM-GEN) Se entrambe le morse sono restate in posizione, le sposto comunque di 5mm per distanziare i pezzi separati. Ticket#2206
|
||||
|
||||
Versione 2.6l2 (09/12/2024)
|
||||
- (SIM-GEN) Corretto problema introdotto in 2.6l1 per risolvere #2198. Ticket#2203
|
||||
- (SIM-GEN) In MLSE modificato controllo direzione utensile per determinare Z massima. Ticket#2204
|
||||
|
||||
Versione 2.6l1 (02/12/2024)
|
||||
- (SIM) Dopo scarico pezzo per ribaltamento, si aprono sempre i rulli. Ticket#2192
|
||||
- (SIM-GEN) Nei movimenti si ricalcola la Z solo se la quota di lavoro è più in alta della posizione a ZHOME della testa. Ticket#2198
|
||||
- (GEN) Se bisogna andare in home, ma la testa lo è già, non si scrive nulla
|
||||
|
||||
Versione 2.6j3 (21/10/2024)
|
||||
- (GEN) Se richiesto movimento in home, si scrive sempre parcheggio in home dell'utensile precedente. Prima si scriveva solo per lama.
|
||||
|
||||
Versione 2.6j2 (17/10/2024)
|
||||
- (SIM-GEN) Se motosega prelevata con A=0, alla fine la si porta sempre alla quota ZMAX, indipendentemente dall'altezza trave che era fissata a 650mm. Ora lo fa sempre.
|
||||
|
||||
Versione 2.6j1 (08/10/2024)
|
||||
- (SIM-GEN) Corretto primo movimento di approccio al pezzo. Ticket#2093
|
||||
- (SIM-GEN) Corretto movimento in Home in caso di lama e movimento rulliera di carico. Ticket#2054
|
||||
- (GEN) In caso di movimento in Home non si fa più preselezione ma si tiene utensile vecchio. Ticket#1926
|
||||
|
||||
Versione 2.6i2 (13/09/2024)
|
||||
- (GEN) Migliorato calcolo chiusura paratia rulli con aggiornamento lunghezza della barra in caso di ultimo taglio e grezzo residuo in coda. Ticket#2017
|
||||
- (NGE-MLDE-GEN-SIM) Aggiunto solidi collisione TC. Corretto movimento a Y di sicurezza con lama. Ticket#2042
|
||||
- (NGE-SIM) Aggiunta collisione magazzino motosega ONE
|
||||
|
||||
Versione 2.6i1 (02/09/2024)
|
||||
- (SIM-GEN) Quando si aprono i rulli, se la trave non può seguire i rulli perchè la pinza andrebbe in extra-corsa, si sposta comunque la pinza fino al massimo della sua corsa. Ticket#1949
|
||||
- (GEN) In preselezione. Se lavorazione motosega, non mando a parcheggio altra testa con utensile precedente, perchè subito dopo viene chiamata preselezione. Ticket#1961
|
||||
|
||||
Versione 2.6h2 (07/08/2024)
|
||||
- (SIM) Allineata simulazione a generazione in primo movimento rapido approccio al pezzo.
|
||||
|
||||
Versione 2.6h1 (01/08/2024)
|
||||
- (GEN) Corretto segno posizione X di sicurezza per rotazione assi rotanti.
|
||||
|
||||
Versione 2.6g5 (31/07/2024)
|
||||
- (SIM-GEN) Se motosega allineata ad asse B per tagli di fianco, corretto movimento che manda testa a parcheggio. Pezzi più alti di 650 va solo in Zmax. Ticket#1943
|
||||
- (SIM-GEN) Gestione movimenti speciali per pezzi molto alti. Se HomeZ < primo punto lavorazione, allora vado al punto Z lavorazione prima di approcciare il pezzo in X. Ticket#1943
|
||||
- (GEN) Gestione creazione piano generico in caso il primo movimento della lavorazione sia un arco. Ticket#1891
|
||||
- (SIM-GEN) Modifica limite inferirore intervallo di pinzaggio per garantire, se possibile, il passaggio pezzo a pinza 2. Da Common-PF1250.
|
||||
- (GEN) Corretta scrittura ISO per parcheggiare morsa 3 dopo ribaltamento. Ticket#1922,#1733
|
||||
|
||||
Versione 2.6g4 (19/07/2024)
|
||||
- (SIM-GEN) Aumentato numero iterazioni per scambio carrelli (da 5 a 10), per pezzi lunghi 30m.
|
||||
|
||||
Versione 2.6g3 (17/07/2024)
|
||||
- (GEN) Correzione modifica precedente (2.6g2). Con lama precedente e motosega successiva, andava a parcheggio con lama alla quota della motosega. Ticket#1880
|
||||
|
||||
Versione 2.6g2 (16/07/2024)
|
||||
- (GEN) Per preselezione o movimenti in home, non si scrive più 'ET0' perchè non è più supportato. Ticket#1926
|
||||
|
||||
Versione 2.6g1 (10/07/2024)
|
||||
- (GEN) Se prima lavorazione con motosega, dopo G151 di attesa carrelli si ribadiscono tutti gli assi. Ticket#1924
|
||||
|
||||
Versione 2.6f1 (03/06/2024)
|
||||
- (GEN) Aggiunta possibilità di scrivere nome utensile doppio anche in lavorazione con parametro "TOOLDOUBLE". Note sulla lavorazione hanno precedenza su note utensile.
|
||||
|
||||
Versione 2.6e1 (30/04/2024)
|
||||
- (GEN) Chiamando la macchina con un nome che termini con '.TEST' si abilita come macchina per test interni, equivalente a settare 'IS_TEST_MACHINE' (che comunque rimane)
|
||||
- (SIM) In log collisioni, si scrive anche ID del gruppo per facilitare riconoscimento in caso di collisione
|
||||
- (MLDE-GEN) Gestione facoltativa parametro WOOD_DENSITY settabile in Ts3. In MLDE, mettere il valore di WOOD_DENSITY nella nostra variabile 'WoodDensity'.
|
||||
|
||||
Versione 2.6d2 (12/04/2024)
|
||||
- (MLDE-SIM-GEN) Aggiunta variabile FACOLTATIVA 'ForceToCloseRollersGate' ( che legge la variabile da TS3 'CHIUDI_PINZE_2_3_SCAMBIO') in mlde per forzare chiusura paratie rulli
|
||||
durante scambio pinze per facilitare passaggio pezzi molto storti. Se non presente chiude solo se necessario.
|
||||
|
||||
Versione 2.6d1 (28/03/2024)
|
||||
- (GEN) Rimosso da generazione funzione GetNextTool duplicata
|
||||
- (SIM-GEN) Se fase successiva start di un altro pezzo, la GetNextTool restituisce nil, per forzare movimento home in caso di utensili speciali
|
||||
- (MLDE-GEN) Aggiunto parametro 'IS_TEST_MACHINE' FACOLTATIVO. Se non esiste o 'false' è macchina standard, se 'true' è una macchina utilizzata per i test Egalware interni
|
||||
- (SIM) Corretto movimento in simulazione se motosega su testa 2
|
||||
|
||||
Versione 2.6c9 (26/03/2024)
|
||||
- (SIM) Corretta gestione cambio utensile con motosega. In alcuni casi non era coerente con generazione
|
||||
- (GEN) In 'PreparePostRotation' si resetta sempre anche la paratia in uscita (Ticket#1733)
|
||||
|
||||
Versione 2.6c8 (22/03/2024)
|
||||
- (SIM) Miglioramento visualizzazione spigoli VMILL alla fine della simulazione. Funzione: EgtVolZmapSetShowEdges. CAM5 ver. 2.6c2 NON OBBLIGATORIA.
|
||||
- (SIM) Miglioramento visualizzazione spigoli VMILL alla fine della simulazione. Funzione: EgtVolZmapSetShowEdges. CAM5 ver. 2.6c2 FACOLTATIVA.
|
||||
|
||||
Versione 2.6c7 (11/03/2024)
|
||||
- (GEN) Aggiunta gestione parametro "SECDIST". Distanza di sicurezza tra paratia con rulli e utensile/testa. Parametro da inserire nelle note utensile.
|
||||
- (SIM-GEN) Aggiunta gestione parametro "SECDIST". Distanza di sicurezza tra paratia con rulli e utensile/testa. Parametro da inserire nelle note utensile.
|
||||
- (MLPE-GEN) Aggiunto parametro "WriteM05Command" (NON OBBLIGATORIO) per decidere se scrivere il comando M05 per arresto mandrino. Default a true.
|
||||
|
||||
Versione 2.6c6 (08/03/2024)
|
||||
@@ -22,7 +118,7 @@ Versione 2.6c3 (05/03/2024)
|
||||
- (MLDE-SIM) Aggiunta variabile FACOLTATIVA 'EstimationRapidMultiplier' in mlde per regolare il tempo stimato di rapido su macchine vecchie. Se non presente default 1.
|
||||
|
||||
Versione 2.6c2 (04/03/2024)
|
||||
- (MLDE-GEN) Aggiunta variabile 'MACH_NAME' in MLDE con nome macchina
|
||||
- (MLDE-GEN) Aggiunta variabile 'MACH_NAME' in mlde con nome macchina
|
||||
|
||||
Versione 2.6c1 (29/02/2024)
|
||||
- (SIM) Gestione rimozione VMILL per tagli a cubetti Zig-Zag
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
local InfoCommon_STD_PP = {
|
||||
NAME = 'Common_ONE-PF', -- nome script PP standard
|
||||
VERSION = '2.6c8', -- versione script
|
||||
VERSION = '2.7c2', -- versione script
|
||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user