Compare commits
139 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8092ad5083 | |||
| ecb5776c68 | |||
| 1f9bb69187 | |||
| cce6a49ecc | |||
| a84de83f72 | |||
| 087764ad1e | |||
| 106d5242e4 | |||
| 440862314a | |||
| 54b0f5ed9a | |||
| 97a163579e | |||
| a90a4070b8 | |||
| 835b0a2637 | |||
| 96faf7cd54 | |||
| 797bf6f8eb | |||
| 88c7786e84 | |||
| 14fc485df7 | |||
| 3dc7d36c7a | |||
| 194a17102c | |||
| 7ab3e14a66 | |||
| 026718885e | |||
| 00aacc6594 | |||
| 55de04f2be | |||
| 77589f595c | |||
| be911ff558 | |||
| 997c5de5d9 | |||
| e6336d59a0 | |||
| 787b3348af | |||
| 2a595eb68a | |||
| 4fa1dbab6e | |||
| b8999246d5 | |||
| 8df9d0fca3 | |||
| a9ed23d74f | |||
| 3c991ae8a0 | |||
| 3732923ad7 | |||
| bf4bf9ba45 | |||
| bcfc3ca059 | |||
| 5761cb5d15 | |||
| dc2d384733 | |||
| bf72eb5191 | |||
| 69ca1baee3 | |||
| 0256bd8c09 | |||
| f62422e7d6 | |||
| 75c20c8c87 | |||
| f50e41e1e3 | |||
| 5d9161d084 | |||
| 97549443d8 | |||
| 5b710e4ac7 | |||
| 1e415d2861 | |||
| 23f6b5b6d0 | |||
| 32672e81d8 | |||
| 618a67508f | |||
| b9877d9df3 | |||
| dfffc4f207 | |||
| bc137e869e | |||
| 81d2f164d3 | |||
| ec2d3c17dc | |||
| ae1b8fc06a | |||
| 9c1269b11b | |||
| 23f22b559f | |||
| 586ce999af | |||
| 2998d6fa4e | |||
| 5b016fd559 | |||
| 3db068936c | |||
| 7394cd769b | |||
| 9301eaa3b6 | |||
| 8e138131c4 | |||
| 14c090b23f | |||
| 0ed07e3541 | |||
| 880873c1d3 | |||
| 830bd62c72 | |||
| c01cc3f2d1 | |||
| 0dba75296d | |||
| 8e707122b2 | |||
| 3aebd1d297 | |||
| b5ffbdea11 | |||
| b7fbaf80f9 | |||
| 6bc6420d01 | |||
| ee7c64627a | |||
| 345224da78 | |||
| 240c837cd4 | |||
| aa2004042e | |||
| e3e9494411 | |||
| d495c3a2af | |||
| 6d562d1ee6 | |||
| 26efc4308b | |||
| df13a4134e | |||
| 33fdb5a64f | |||
| 0b70495e30 | |||
| a27d448f81 | |||
| 984376affd | |||
| a21e44f2d8 | |||
| 7c832dd546 | |||
| 357a317610 | |||
| 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 | |||
| e765940154 | |||
| 429c049a44 | |||
| a9a7b2c14e | |||
| a61affc726 | |||
| b9bc1f0922 | |||
| 0272e7d606 |
+438
-75
@@ -27,7 +27,10 @@ function OnStart()
|
|||||||
--EMT.LINEINC = 1 -- incremento numerazione linee
|
--EMT.LINEINC = 1 -- incremento numerazione linee
|
||||||
--EMT.Ft = 'F' -- token per feed
|
--EMT.Ft = 'F' -- token per feed
|
||||||
--EMT.St = 'S' -- token per speed
|
--EMT.St = 'S' -- token per speed
|
||||||
EMT.FMAXPINZE = 102000 -- feed massima pinze
|
EMT.FMAXPINZE = EgtClamp( MaxFeedPinze or 102000, 20000, 155000) -- feed massima pinze
|
||||||
|
EMT.MAXACC = MaxAcc or ( EMT.FMAXPINZE / ( 60 * 0.3)) -- accelerazione massima pinze
|
||||||
|
EMT.MINACC = MinAcc or ( EMT.FMAXPINZE / ( 60 * 4)) -- accelerazione minima pinze
|
||||||
|
|
||||||
-- utensili default
|
-- utensili default
|
||||||
EMT.PREVTCPOS_H1 = DefTcPos1
|
EMT.PREVTCPOS_H1 = DefTcPos1
|
||||||
EMT.PREVTCPOS_H2 = DefTcPos2
|
EMT.PREVTCPOS_H2 = DefTcPos2
|
||||||
@@ -56,6 +59,7 @@ function OnProgramStart()
|
|||||||
end
|
end
|
||||||
EmtOutput( sPrefixCommentLine..'('.. CSP_INFO..')')
|
EmtOutput( sPrefixCommentLine..'('.. CSP_INFO..')')
|
||||||
EmtOutput( sPrefixCommentLine..'('.. MACHINE_INFO..')\n')
|
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)
|
-- Se modalità test, aggiungo linee per muovere tappeto e alzare la testa (in automatico viene fatto dal main residente)
|
||||||
if TEST_USE then
|
if TEST_USE then
|
||||||
EmitTestProgramStart()
|
EmitTestProgramStart()
|
||||||
@@ -103,6 +107,7 @@ function OnProgramEnd()
|
|||||||
EMT.SPECSPLIT = nil
|
EMT.SPECSPLIT = nil
|
||||||
EMT.RELOAD = nil
|
EMT.RELOAD = nil
|
||||||
EMT.RELOAD2 = nil
|
EMT.RELOAD2 = nil
|
||||||
|
EmtOutput( '(FOOTER)')
|
||||||
-- Se modalità test, termino il programma
|
-- Se modalità test, termino il programma
|
||||||
if TEST_USE then
|
if TEST_USE then
|
||||||
EmtOutput( 'M02')
|
EmtOutput( 'M02')
|
||||||
@@ -124,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
|
||||||
@@ -137,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
|
||||||
@@ -305,8 +314,12 @@ 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].V2 then EMT.V2POS = EMT.MDCHAR[i].V2 end
|
||||||
end
|
end
|
||||||
EmitMoveStartChars( 2)
|
EmitMoveStartChars( 2)
|
||||||
-- se dopo c'è scarico spezzone devo mettere attesa termine esecuzione
|
-- se dopo c'è scarico spezzone devo mettere attesa termine esecuzione
|
||||||
@@ -322,7 +335,8 @@ function OnDispositionEnd()
|
|||||||
end
|
end
|
||||||
elseif EMT.SPECUNLOADING then
|
elseif EMT.SPECUNLOADING then
|
||||||
EmtOutput( '(PART SPEC UNLOADING)')
|
EmtOutput( '(PART SPEC UNLOADING)')
|
||||||
EmitBeamHeadData( { T=EMT.L1, Pz5=2})
|
local dAbsHeadPos = EMT.L1pp or EMT.L1
|
||||||
|
EmitBeamHeadData( { T=dAbsHeadPos, Pz5=2})
|
||||||
EMT.SPECUNLOADING = nil
|
EMT.SPECUNLOADING = nil
|
||||||
EMT.W2DELTA = nil
|
EMT.W2DELTA = nil
|
||||||
-- emissione conclusione pezzo precedente
|
-- emissione conclusione pezzo precedente
|
||||||
@@ -407,6 +421,7 @@ function OnToolSelect()
|
|||||||
if MCH_TP.DIST then EMT.TDIST = EgtTdbGetCurrToolParam( MCH_TP.DIST) end
|
if MCH_TP.DIST then EMT.TDIST = EgtTdbGetCurrToolParam( MCH_TP.DIST) end
|
||||||
if EMT.TDIST and abs( EMT.TDIST) < 0.1 then EMT.TDIST = nil end
|
if EMT.TDIST and abs( EMT.TDIST) < 0.1 then EMT.TDIST = nil end
|
||||||
EMT.TUSERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES)
|
EMT.TUSERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES)
|
||||||
|
EMT.ISPROBING = HeadIsProbe( EMT.HEAD)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -440,6 +455,7 @@ function OnMachiningStart()
|
|||||||
local MyParkCSawC2 = GetChainSawCHomeFromVirtualAxis( dPosA)
|
local MyParkCSawC2 = GetChainSawCHomeFromVirtualAxis( dPosA)
|
||||||
EmtModifyAxisHome( 'C2', MyParkCSawC2)
|
EmtModifyAxisHome( 'C2', MyParkCSawC2)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- gestione eventuale lavorazione in doppio
|
-- gestione eventuale lavorazione in doppio
|
||||||
local nDouType = EgtGetValInNotes( EMT.MCHUSERNOTES, 'DOUBLE', 'i')
|
local nDouType = EgtGetValInNotes( EMT.MCHUSERNOTES, 'DOUBLE', 'i')
|
||||||
if nDouType == 2 or nDouType == 3 then
|
if nDouType == 2 or nDouType == 3 then
|
||||||
@@ -603,6 +619,7 @@ function OnMachiningEnd()
|
|||||||
EMT.PREVTOOL = EMT.TOOL
|
EMT.PREVTOOL = EMT.TOOL
|
||||||
EMT.PREVHEAD = EMT.HEAD
|
EMT.PREVHEAD = EMT.HEAD
|
||||||
EMT.PREVTCPOS = EMT.TCPOS
|
EMT.PREVTCPOS = EMT.TCPOS
|
||||||
|
|
||||||
-- se taglio finale, aggiorno lunghezza barra
|
-- se taglio finale, aggiorno lunghezza barra
|
||||||
if EMT.MCHCUT then
|
if EMT.MCHCUT then
|
||||||
EMT.LB = EMT.LT + ( EMT.X_OFF or 0)
|
EMT.LB = EMT.LT + ( EMT.X_OFF or 0)
|
||||||
@@ -614,11 +631,15 @@ function OnMachiningEnd()
|
|||||||
EMT.PREVHEAD_H1 = EMT.HEAD
|
EMT.PREVHEAD_H1 = EMT.HEAD
|
||||||
EMT.PREVTCPOS_H1 = EMT.TCPOS
|
EMT.PREVTCPOS_H1 = EMT.TCPOS
|
||||||
EMT.PREVHOMEX_H1 = EgtGetAxisHomePos( 'X1')
|
EMT.PREVHOMEX_H1 = EgtGetAxisHomePos( 'X1')
|
||||||
|
EMT.PREVHOMEB_H1 = EgtGetAxisHomePos( 'B1')
|
||||||
|
EMT.PREVHOMEC_H1 = EgtGetAxisHomePos( 'C1')
|
||||||
elseif nHSet == 2 then
|
elseif nHSet == 2 then
|
||||||
EMT.PREVTOOL_H2 = EMT.TOOL
|
EMT.PREVTOOL_H2 = EMT.TOOL
|
||||||
EMT.PREVHEAD_H2 = EMT.HEAD
|
EMT.PREVHEAD_H2 = EMT.HEAD
|
||||||
EMT.PREVTCPOS_H2 = EMT.TCPOS
|
EMT.PREVTCPOS_H2 = EMT.TCPOS
|
||||||
EMT.PREVHOMEX_H2 = EgtGetAxisHomePos( 'X2')
|
EMT.PREVHOMEX_H2 = EgtGetAxisHomePos( 'X2')
|
||||||
|
EMT.PREVHOMEB_H2 = EgtGetAxisHomePos( 'B2')
|
||||||
|
EMT.PREVHOMEC_H2 = EgtGetAxisHomePos( 'C2')
|
||||||
end
|
end
|
||||||
|
|
||||||
if EMT.DOU_TYPE and not EMT.ZMAX then EMT.DOU_TO_ZMAX = true end
|
if EMT.DOU_TYPE and not EMT.ZMAX then EMT.DOU_TO_ZMAX = true end
|
||||||
@@ -663,9 +684,9 @@ 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
|
EMT.R1pp = EMT.R1p or EMT.R1pp
|
||||||
EMT.R2pp = EMT.R2p
|
EMT.R2pp = EMT.R2p or EMT.R2pp
|
||||||
else
|
else
|
||||||
EMT.L1pp = nil
|
EMT.L1pp = nil
|
||||||
EMT.L2pp = nil
|
EMT.L2pp = nil
|
||||||
@@ -802,8 +823,8 @@ function OnRapid()
|
|||||||
EMT.IPLGL = false
|
EMT.IPLGL = false
|
||||||
MyAdjustLinearAxes()
|
MyAdjustLinearAxes()
|
||||||
EmtAdjustRotaryAxes()
|
EmtAdjustRotaryAxes()
|
||||||
local HomeR1 = EgtGetAxisHomePos( EgtIf( nHSet == 1, 'C1', 'C2'))
|
local HomeR1 = EgtGetAxisHomePos( EgtIf( nHSet == 1 or nHSet == 11, 'C1', 'C2'))
|
||||||
local HomeR2 = EgtGetAxisHomePos( EgtIf( nHSet == 1, 'B1', 'B2'))
|
local HomeR2 = EgtGetAxisHomePos( EgtIf( nHSet == 1 or nHSet == 11, 'B1', 'B2'))
|
||||||
local PrevR1 = EMT.R1p or EMT.R1pp or HomeR1
|
local PrevR1 = EMT.R1p or EMT.R1pp or HomeR1
|
||||||
local PrevR2 = EMT.R2p or EMT.R2pp or HomeR2
|
local PrevR2 = EMT.R2p or EMT.R2pp or HomeR2
|
||||||
EmtResetPrev()
|
EmtResetPrev()
|
||||||
@@ -813,6 +834,101 @@ function OnRapid()
|
|||||||
EMT.L3 = EMT.L3s
|
EMT.L3 = EMT.L3s
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- se tastatore
|
||||||
|
if EMT.ISPROBING then
|
||||||
|
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||||
|
local bIsFirstHead = ( nSetHead == 1 or nSetHead == 11)
|
||||||
|
local idProbeMachining = EMT.MCHID
|
||||||
|
local bFound = false
|
||||||
|
local nProbeHead = GetHeadSet( EMT.HEAD)
|
||||||
|
local idProbeNextMachining = EgtGetNextActiveOperation( idProbeMachining)
|
||||||
|
while not bFound do
|
||||||
|
if idProbeNextMachining then
|
||||||
|
EgtSetCurrMachining( idProbeNextMachining)
|
||||||
|
local sToolNameNextProbe = EgtGetMachiningParam( MCH_MP.TOOL)
|
||||||
|
if sToolNameNextProbe then
|
||||||
|
local sToolHeadNextProbe, sToolTcPosNextProbe = GetToolHead( sToolNameNextProbe)
|
||||||
|
local nToolHead = GetHeadSet( sToolHeadNextProbe)
|
||||||
|
-- se sono sulla stessa testa
|
||||||
|
if bIsFirstHead and nProbeHead == 11 then
|
||||||
|
EMT.PROBENEXTTOOL_H1 = sToolNameNextProbe
|
||||||
|
EMT.PROBENEXTHEAD_H1 = sToolHeadNextProbe
|
||||||
|
EMT.PROBENEXTTCPOS_H1 = sToolTcPosNextProbe
|
||||||
|
bFound = true
|
||||||
|
elseif not bIsFirstHead and nProbeHead == 21 then
|
||||||
|
EMT.PROBENEXTTOOL_H2 = sToolNameNextProbe
|
||||||
|
EMT.PROBENEXTHEAD_H2 = sToolHeadNextProbe
|
||||||
|
EMT.PROBENEXTTCPOS_H2 = sToolTcPosNextProbe
|
||||||
|
bFound = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
break
|
||||||
|
end
|
||||||
|
idProbeNextMachining = EgtGetNextActiveOperation( idProbeNextMachining)
|
||||||
|
end
|
||||||
|
-- ripristino lavorazione corrente
|
||||||
|
EgtSetCurrMachining( EMT.MCHID)
|
||||||
|
|
||||||
|
local bChanged = true
|
||||||
|
if bIsFirstHead then
|
||||||
|
-- se prossimo utensile compatibile, lo prelevo
|
||||||
|
if IsToolCompatibleWithProbe( EMT.PROBENEXTTOOL_H1, EMT.TOOL) then
|
||||||
|
EMT.TCPOS = EMT.PROBENEXTTCPOS_H1
|
||||||
|
EMT.HEAD = EMT.PROBENEXTHEAD_H1
|
||||||
|
EMT.TOOL = EMT.PROBENEXTTOOL_H1
|
||||||
|
else
|
||||||
|
-- se vecchio utensile compatibile, tengo quello caricato
|
||||||
|
if IsToolCompatibleWithProbe( EMT.PREVTOOL_H1, EMT.TOOL) then
|
||||||
|
bChanged = false
|
||||||
|
EMT.TCPOS = EMT.PREVTCPOS_H1
|
||||||
|
EMT.HEAD = EMT.PREVHEAD_H1
|
||||||
|
EMT.TOOL = EMT.PREVTOOL_H1
|
||||||
|
-- altrimenti si seleziona utensile di default
|
||||||
|
else
|
||||||
|
ExecMoveZmax( EMT.MCHSPLIT, true)
|
||||||
|
EMT.TCPOS = DefTcPos1
|
||||||
|
EMT.TOOL = GetToolNameFromTcPos( DefTcPos1)
|
||||||
|
EMT.HEAD, _ = GetToolHead( EMT.TOOL)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- se cambiato utensile, si setta subito nome precedente
|
||||||
|
if bChanged then
|
||||||
|
EMT.PREVTOOL_H1 = EMT.TOOL
|
||||||
|
EMT.PREVHEAD_H1 = EMT.HEAD
|
||||||
|
EMT.PREVTCPOS_H1 = EMT.TCPOS
|
||||||
|
end
|
||||||
|
else
|
||||||
|
-- se prossimo utensile compatibile, lo prelevo
|
||||||
|
if IsToolCompatibleWithProbe( EMT.PROBENEXTTOOL_H2, EMT.TOOL) then
|
||||||
|
EMT.TCPOS = EMT.PROBENEXTTCPOS_H2
|
||||||
|
EMT.HEAD = EMT.PROBENEXTHEAD_H2
|
||||||
|
EMT.TOOL = EMT.PROBENEXTTOOL_H2
|
||||||
|
else
|
||||||
|
-- se vecchio utensile compatibile, tengo quello caricato
|
||||||
|
if IsToolCompatibleWithProbe( EMT.PREVTOOL_H2, EMT.TOOL) then
|
||||||
|
bChanged = false
|
||||||
|
EMT.TCPOS = EMT.PREVTCPOS_H2
|
||||||
|
EMT.HEAD = EMT.PREVHEAD_H2
|
||||||
|
EMT.TOOL = EMT.PREVTOOL_H2
|
||||||
|
-- altrimenti si seleziona utensile di default
|
||||||
|
else
|
||||||
|
ExecMoveZmax( EMT.MCHSPLIT, true)
|
||||||
|
EMT.TCPOS = DefTcPos2
|
||||||
|
EMT.TOOL = GetToolNameFromTcPos( DefTcPos2)
|
||||||
|
EMT.HEAD, _ = GetToolHead( EMT.TOOL)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- se cambiato utensile, si setta subito nome precedente
|
||||||
|
if bChanged then
|
||||||
|
EMT.PREVTOOL_H2 = EMT.TOOL
|
||||||
|
EMT.PREVHEAD_H2 = EMT.HEAD
|
||||||
|
EMT.PREVTCPOS_H2 = EMT.TCPOS
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- se prima lavorazione
|
-- se prima lavorazione
|
||||||
if EMT.LOAD then
|
if EMT.LOAD then
|
||||||
EMT.V2POS = ParkV2
|
EMT.V2POS = ParkV2
|
||||||
@@ -878,13 +994,13 @@ function OnRapid()
|
|||||||
if EMT.HEAD == 'H12' and EMT.L2 < -LimX1PlRotSaw then
|
if EMT.HEAD == 'H12' and EMT.L2 < -LimX1PlRotSaw then
|
||||||
dXref = -LimX1PlRotSaw
|
dXref = -LimX1PlRotSaw
|
||||||
EmitMoveDataHead( 1, { X=dXref, Z=MyMaxZ1, B=ParkB1, C=ParkC1, S=Speed})
|
EmitMoveDataHead( 1, { X=dXref, Z=MyMaxZ1, B=ParkB1, C=ParkC1, S=Speed})
|
||||||
dZref = min( dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2), MyMaxZ1)
|
dZref = max( EMT.L3, dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2))
|
||||||
dMoveXtoFinalPosition = true
|
dMoveXtoFinalPosition = true
|
||||||
elseif not bMoveZbeforeX then
|
elseif not bMoveZbeforeX then
|
||||||
EmitMoveDataHead( 1, { X=dXref, Z=MyMaxZ1, B=ParkB1, C=ParkC1, S=Speed})
|
EmitMoveDataHead( 1, { X=dXref, Z=MyMaxZ1, B=ParkB1, C=ParkC1, S=Speed})
|
||||||
else
|
else
|
||||||
EmitMoveDataHead( 1, { X=-LimX1PlRotSaw, Z=MyMaxZ1, B=ParkB1, C=ParkC1, S=Speed})
|
EmitMoveDataHead( 1, { X=-LimX1PlRotSaw, Z=MyMaxZ1, B=ParkB1, C=ParkC1, S=Speed})
|
||||||
dZref = min( dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2), MyMaxZ1)
|
dZref = max( EMT.L3, dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2))
|
||||||
dMoveXtoFinalPosition = true
|
dMoveXtoFinalPosition = true
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -892,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})
|
||||||
|
-- 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})
|
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
|
||||||
@@ -953,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))
|
||||||
@@ -976,15 +1101,23 @@ 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})
|
||||||
|
-- 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})
|
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
|
||||||
-- altrimenti caso standard
|
-- altrimenti caso standard
|
||||||
else
|
else
|
||||||
EmitMoveDataHead( 1, { Z=dZref, S=Speed})
|
EmitMoveDataHead( 1, { Z=dZref, S=Speed})
|
||||||
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
|
||||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||||
|
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||||
end
|
end
|
||||||
-- altrimenti sega a catena
|
-- altrimenti sega a catena
|
||||||
else
|
else
|
||||||
@@ -1027,7 +1160,7 @@ function OnRapid()
|
|||||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||||
local bMoveZbeforeX = false
|
local bMoveZbeforeX = false
|
||||||
local dZref = EMT.L3
|
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)
|
dZref = min( dSafeZ2 + GetZExtra( EMT.HEAD, EMT.R2) - 100, MyMaxZ2)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1042,10 +1175,19 @@ function OnRapid()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
-- 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
|
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, { B=0, S=Speed})
|
||||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
EmitMoveDataHead( 2, { C=EMT.R1, 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})
|
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
|
||||||
@@ -1054,6 +1196,10 @@ function OnRapid()
|
|||||||
EmitMoveDataHead( 2, { Z=dZref, S=Speed})
|
EmitMoveDataHead( 2, { Z=dZref, S=Speed})
|
||||||
EmitMoveDataHead( 2, { B=EMT.R2, S=Speed})
|
EmitMoveDataHead( 2, { B=EMT.R2, S=Speed})
|
||||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||||
|
if bMoveZbeforeX then
|
||||||
|
EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed})
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- altrimenti sega a catena
|
-- altrimenti sega a catena
|
||||||
else
|
else
|
||||||
@@ -1127,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)
|
||||||
@@ -1140,8 +1286,8 @@ function OnRapid()
|
|||||||
EMT.TO_XHOME = nil
|
EMT.TO_XHOME = nil
|
||||||
EMT.L1pp = nil
|
EMT.L1pp = nil
|
||||||
EMT.L3pp = nil
|
EMT.L3pp = nil
|
||||||
PrevR1 = EgtGetAxisHomePos( EgtIf( nHSet == 1, 'C1', 'C2'))
|
PrevR1 = EgtGetAxisHomePos( EgtIf( nHSet == 1 or nHSet == 11, 'C1', 'C2'))
|
||||||
PrevR2 = EgtGetAxisHomePos( EgtIf( nHSet == 1, 'B1', 'B2'))
|
PrevR2 = EgtGetAxisHomePos( EgtIf( nHSet == 1 or nHSet == 11, 'B1', 'B2'))
|
||||||
end
|
end
|
||||||
-- calcolo Movimento Pinze (potrebbe richiedere movimento testa in Home)
|
-- calcolo Movimento Pinze (potrebbe richiedere movimento testa in Home)
|
||||||
for i = 1, #EMT.AUXCMD do
|
for i = 1, #EMT.AUXCMD do
|
||||||
@@ -1150,20 +1296,34 @@ function OnRapid()
|
|||||||
EMT.AUXCMD = {}
|
EMT.AUXCMD = {}
|
||||||
-- se necessario posizionamento in home (sono sicuramente già a Zmax)
|
-- se necessario posizionamento in home (sono sicuramente già a Zmax)
|
||||||
if EMT.TO_XHOME then
|
if EMT.TO_XHOME then
|
||||||
|
-- se devo andare in home, ma lo sono già, non faccio nulla
|
||||||
|
if not EMT.XHOME then
|
||||||
local nHSet = GetHeadSet( EMT.HEAD)
|
local nHSet = GetHeadSet( EMT.HEAD)
|
||||||
local nPrevHSet = GetHeadSet( EMT.PREVHEAD)
|
local nPrevHSet = GetHeadSet( EMT.PREVHEAD)
|
||||||
if EMT.PREVHEAD == 'H12' or EMT.PREVHEAD == 'H22' then
|
-- vado in parcheggio sempre con utensile precedente
|
||||||
if nPrevHSet == 1 then
|
if not HeadIsChainSaw( EMT.PREVHEAD) then
|
||||||
|
if nPrevHSet == 1 or nPrevHSet == 11 then
|
||||||
local HomeX1 = EgtGetAxisHomePos( 'X1')
|
local HomeX1 = EgtGetAxisHomePos( 'X1')
|
||||||
EmitMoveDataHead( 1, { X=-EMT.PREVHOMEX_H1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, EMT.PREVTCPOS_H1)})
|
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')
|
EmitMoveStartHead( 1, 'EA1')
|
||||||
EmitMoveWaitHead( 1)
|
EmitMoveWaitHead( 1)
|
||||||
else
|
else
|
||||||
local HomeX2 = EgtGetAxisHomePos( 'X2')
|
local HomeX2 = EgtGetAxisHomePos( 'X2')
|
||||||
EmitMoveDataHead( 2, { X=-EMT.PREVHOMEX_H2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, EMT.PREVTCPOS_H2)})
|
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')
|
EmitMoveStartHead( 2, 'EA1')
|
||||||
EmitMoveWaitHead( 2)
|
EmitMoveWaitHead( 2)
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
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='50'})
|
||||||
|
EmitMoveStartHead( 2, 'EA1')
|
||||||
|
--EmitMoveWaitHead( 2)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
EMT.TO_XHOME = nil
|
EMT.TO_XHOME = nil
|
||||||
@@ -1233,13 +1393,13 @@ function OnRapid()
|
|||||||
if EMT.HEAD == 'H12' and EMT.L2 < -LimX1PlRotSaw then
|
if EMT.HEAD == 'H12' and EMT.L2 < -LimX1PlRotSaw then
|
||||||
dXref = -LimX1PlRotSaw
|
dXref = -LimX1PlRotSaw
|
||||||
EmitMoveDataHead( 1, { X=dXref, Z=CurrZ1, B=CurrB1, C=CurrC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
EmitMoveDataHead( 1, { X=dXref, Z=CurrZ1, B=CurrB1, C=CurrC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||||
dZref = min( dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2), MyMaxZ1)
|
dZref = max( EMT.L3, dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2))
|
||||||
dMoveXtoFinalPosition = true
|
dMoveXtoFinalPosition = true
|
||||||
elseif not bMoveZbeforeX then
|
elseif not bMoveZbeforeX then
|
||||||
EmitMoveDataHead( 1, { X=dXref, Z=CurrZ1, B=CurrB1, C=CurrC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
EmitMoveDataHead( 1, { X=dXref, Z=CurrZ1, B=CurrB1, C=CurrC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||||
else
|
else
|
||||||
EmitMoveDataHead( 1, { X=CurrX1, Z=CurrZ1, B=CurrB1, C=CurrC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
EmitMoveDataHead( 1, { X=CurrX1, Z=CurrZ1, B=CurrB1, C=CurrC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||||
dZref = min( dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2), MyMaxZ1)
|
dZref = max( EMT.L3, dSafeZ1 + GetZExtra( EMT.HEAD, EMT.R2))
|
||||||
dMoveXtoFinalPosition = true
|
dMoveXtoFinalPosition = true
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1247,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})
|
||||||
|
-- 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})
|
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
|
||||||
@@ -1336,15 +1504,23 @@ 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})
|
||||||
|
-- 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})
|
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
|
||||||
-- altrimenti caso standard
|
-- altrimenti caso standard
|
||||||
else
|
else
|
||||||
EmitMoveDataHead( 1, { Z=dZref, S=Speed})
|
EmitMoveDataHead( 1, { Z=dZref, S=Speed})
|
||||||
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
|
||||||
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
EmitMoveDataHead( 1, { C=EMT.R1, S=Speed})
|
||||||
|
EmitMoveDataHead( 1, { B=EMT.R2, S=Speed})
|
||||||
end
|
end
|
||||||
-- altrimenti sega a catena
|
-- altrimenti sega a catena
|
||||||
else
|
else
|
||||||
@@ -1382,7 +1558,7 @@ function OnRapid()
|
|||||||
|
|
||||||
local bMoveZbeforeX = false
|
local bMoveZbeforeX = false
|
||||||
local dZref = EMT.L3
|
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)
|
dZref = min( dSafeZ2 + GetZExtra( EMT.HEAD, EMT.R2) - 100, MyMaxZ2)
|
||||||
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
|
||||||
@@ -1397,10 +1573,19 @@ function OnRapid()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
-- 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
|
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, { B=0, S=Speed})
|
||||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
EmitMoveDataHead( 2, { C=EMT.R1, 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})
|
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
|
||||||
@@ -1409,6 +1594,10 @@ function OnRapid()
|
|||||||
EmitMoveDataHead( 2, { Z=dZref, S=Speed})
|
EmitMoveDataHead( 2, { Z=dZref, S=Speed})
|
||||||
EmitMoveDataHead( 2, { B=EMT.R2, S=Speed})
|
EmitMoveDataHead( 2, { B=EMT.R2, S=Speed})
|
||||||
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
EmitMoveDataHead( 2, { C=EMT.R1, S=Speed})
|
||||||
|
if bMoveZbeforeX then
|
||||||
|
EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed})
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- altrimenti sega a catena
|
-- altrimenti sega a catena
|
||||||
else
|
else
|
||||||
@@ -1484,9 +1673,16 @@ function OnRapid()
|
|||||||
end
|
end
|
||||||
EMT.REFLOC = 0
|
EMT.REFLOC = 0
|
||||||
EMT.MCHFIRST = false
|
EMT.MCHFIRST = false
|
||||||
|
EMT.PLANEACTIVE = true
|
||||||
EMT.ZMAX = false
|
EMT.ZMAX = false
|
||||||
-- se standard
|
-- se standard
|
||||||
elseif EMT.FLAG == 0 or EMT.FLAG == 1 or EMT.FLAG == 2 then
|
elseif EMT.FLAG == 0 or EMT.FLAG == 1 or EMT.FLAG == 2 then
|
||||||
|
if EMT.ISPROBING then
|
||||||
|
-- emetto movimenti in Zero macchina
|
||||||
|
EmitMoveDataHead( GetHeadSet( EMT.HEAD), { X=-EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, S=Speed})
|
||||||
|
EmitMoveStartHead( GetHeadSet( EMT.HEAD))
|
||||||
|
EmitMoveWaitHead( GetHeadSet( EMT.HEAD))
|
||||||
|
else
|
||||||
local sPostMove = ''
|
local sPostMove = ''
|
||||||
if EMT.MCHFIRST then
|
if EMT.MCHFIRST then
|
||||||
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '['), '%)', ']')
|
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '['), '%)', ']')
|
||||||
@@ -1513,6 +1709,7 @@ function OnRapid()
|
|||||||
EmtOutput( 'M175')
|
EmtOutput( 'M175')
|
||||||
end
|
end
|
||||||
EMT.MCHFIRST = false
|
EMT.MCHFIRST = false
|
||||||
|
EMT.PLANEACTIVE = true
|
||||||
end
|
end
|
||||||
-- se necessario, impostazione riferimento locale
|
-- se necessario, impostazione riferimento locale
|
||||||
if EMT.REFLOC == 0 then
|
if EMT.REFLOC == 0 then
|
||||||
@@ -1546,7 +1743,8 @@ function OnRapid()
|
|||||||
EMT.L2p = nil
|
EMT.L2p = nil
|
||||||
EMT.L3p = nil
|
EMT.L3p = nil
|
||||||
local sDouFlag = EgtIf( EMT.DOU_TYPE, ' EE1', '')
|
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())
|
EmtOutput( 'G142'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..EMT.IPLGLSTR
|
||||||
|
..EgtIf( nHSet~=2 and nHSet~=22, ' EU1', ' EU2')..sDouFlag..' EF'..GetFmaxClamp())
|
||||||
-- forzo successiva emissione assi rotanti
|
-- forzo successiva emissione assi rotanti
|
||||||
EMT.R1p = nil
|
EMT.R1p = nil
|
||||||
EMT.R2p = nil
|
EMT.R2p = nil
|
||||||
@@ -1562,6 +1760,7 @@ function OnRapid()
|
|||||||
if #sPostMove > 0 then
|
if #sPostMove > 0 then
|
||||||
EmtOutput( 'G157 EA2' .. sPostMove)
|
EmtOutput( 'G157 EA2' .. sPostMove)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
-- se altrimenti risalita a Z max a fine lavorazione
|
-- se altrimenti risalita a Z max a fine lavorazione
|
||||||
elseif EMT.FLAG == 3 then
|
elseif EMT.FLAG == 3 then
|
||||||
EMT.REFLOC = nil
|
EMT.REFLOC = nil
|
||||||
@@ -1569,17 +1768,21 @@ function OnRapid()
|
|||||||
MyAdjustLinearAxes()
|
MyAdjustLinearAxes()
|
||||||
EmtAdjustRotaryAxes()
|
EmtAdjustRotaryAxes()
|
||||||
-- se Split o Presplit lascio agganciata solo la pinza Y2 alla fine dei movimenti
|
-- se Split o Presplit lascio agganciata solo la pinza Y2 alla fine dei movimenti
|
||||||
local sNextTool = GetNextTool( EMT.MCHID)
|
local sNextTool = GetNextTool( EMT.MCHID, true)
|
||||||
-- vado in home se è ultimo movimento ed è ultima lavorazione, se sono con motosega e devo cambiare utensile, oppure se ho la lama
|
-- vado in home se è ultimo movimento ed è ultima lavorazione, se sono con motosega e devo cambiare utensile, oppure se ho la lama
|
||||||
local bToXhome = ( IsLastPath( EMT.PATHID) and not sNextTool) or ( EMT.HEAD == 'H23' and EMT.TOOL ~= sNextTool) or ( EMT.HEAD == 'H13' and EMT.TOOL ~= sNextTool) or
|
local bToXhome = ( IsLastPath( EMT.PATHID) and not sNextTool) or ( EMT.HEAD == 'H23' and EMT.TOOL ~= sNextTool) or ( EMT.HEAD == 'H13' and EMT.TOOL ~= sNextTool) or
|
||||||
( EMT.HEAD == 'H12' and EMT.TOOL ~= sNextTool ) or ( EMT.HEAD == 'H22' and EMT.TOOL ~= sNextTool) or EMT.MCHSPLIT
|
( EMT.HEAD == 'H12' and EMT.TOOL ~= sNextTool ) or ( EMT.HEAD == 'H22' and EMT.TOOL ~= sNextTool) or EMT.MCHSPLIT
|
||||||
local CurrL3o = EMT.L3o
|
local CurrL3o = EMT.L3o
|
||||||
EMT.L3o = EMT.L3op
|
EMT.L3o = EMT.L3op
|
||||||
EmitZmax( true, true, bToXhome, EMT.R1p, EMT.R2p, EMT.MCHSPLIT)
|
local bZMax = EmitZmax( true, true, bToXhome, EMT.R1p, EMT.R2p, EMT.MCHSPLIT)
|
||||||
EMT.L3o = CurrL3o
|
EMT.L3o = CurrL3o
|
||||||
-- aggiorno quota finale trave dopo Zmax
|
-- aggiorno quota finale trave dopo Zmax
|
||||||
EMT.L1o = EMT.TPOS
|
EMT.L1o = EMT.TPOS
|
||||||
|
if bZMax then
|
||||||
EMT.ZMAX = true
|
EMT.ZMAX = true
|
||||||
|
ToolPreSelectionSingleHead( EMT.MCHID)
|
||||||
|
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
|
||||||
@@ -1594,6 +1797,30 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnLinear()
|
function OnLinear()
|
||||||
|
-- se tastatore
|
||||||
|
if EMT.ISPROBING then
|
||||||
|
if not EMT.PROBE then
|
||||||
|
local p3FirstPoint = Point3d( EMT.L1, EMT.L2, EMT.L3)
|
||||||
|
local p3SecondPoint = Point3d( EMT.L1p, EMT.L2p, EMT.L3p)
|
||||||
|
local dProbingDist = dist( p3FirstPoint, p3SecondPoint) * 2
|
||||||
|
local vtE = Vector3d( EMT.EXTR)
|
||||||
|
local sFace, ProbePosZ
|
||||||
|
if AreSameVectorApprox( vtE, Y_AX()) then
|
||||||
|
sFace = EgtIf( BD.RIGHT_LOAD, 4, 2)
|
||||||
|
elseif AreSameVectorApprox( vtE, -Y_AX()) then
|
||||||
|
sFace = EgtIf( BD.RIGHT_LOAD, 2, 4)
|
||||||
|
elseif AreSameVectorApprox( vtE, Z_AX()) then
|
||||||
|
sFace = 3
|
||||||
|
else
|
||||||
|
error( "PROBING DIRECTION NOT MANAGED")
|
||||||
|
end
|
||||||
|
local sProbeHead = ' ET' .. GetHeadSet( EMT.HEAD)
|
||||||
|
EmtOutput( 'G145 Z-'.. EgtNumToString( dProbingDist).. ' EF'..sFace..sProbeHead)
|
||||||
|
|
||||||
|
-- tastatura attivata
|
||||||
|
EMT.PROBE = true
|
||||||
|
end
|
||||||
|
else
|
||||||
-- se necessario, impostazione riferimento locale
|
-- se necessario, impostazione riferimento locale
|
||||||
if EMT.REFLOC == 0 then
|
if EMT.REFLOC == 0 then
|
||||||
-- gruppo della testa
|
-- gruppo della testa
|
||||||
@@ -1616,7 +1843,9 @@ function OnLinear()
|
|||||||
EMT.L2p = nil
|
EMT.L2p = nil
|
||||||
EMT.L3p = nil
|
EMT.L3p = nil
|
||||||
local sDouFlag = EgtIf( EMT.DOU_TYPE, ' EE1', '')
|
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())
|
EmtOutput( 'G142'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..EMT.IPLGLSTR
|
||||||
|
..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')
|
||||||
@@ -1673,6 +1902,7 @@ function OnLinear()
|
|||||||
-- aggiorno valori come precedenti
|
-- aggiorno valori come precedenti
|
||||||
EMT.TPOS = EMT.L1o
|
EMT.TPOS = EMT.L1o
|
||||||
EmtUpdatePrev()
|
EmtUpdatePrev()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -1699,7 +1929,9 @@ function OnArc()
|
|||||||
EMT.L2p = nil
|
EMT.L2p = nil
|
||||||
EMT.L3p = nil
|
EMT.L3p = nil
|
||||||
local sDouFlag = EgtIf( EMT.DOU_TYPE, ' EE1', '')
|
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())
|
EmtOutput( 'G142'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..EMT.IPLGLSTR
|
||||||
|
..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')
|
||||||
@@ -1747,28 +1979,6 @@ function OnArc()
|
|||||||
EmtUpdatePrev()
|
EmtUpdatePrev()
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
function CalcDinamicaPinze( dH, dS, dL)
|
|
||||||
local MinTempoAcc = 0.3 -- [s]
|
|
||||||
local MaxTempoAcc = 4.0 -- [s]
|
|
||||||
local KgMtCubo= WoodDensity or 550 -- densità legno [Kg / metro cubo]
|
|
||||||
local Massa = ( dH * dS * dL * KgMtCubo ) / 1e9 -- massa [Kg]
|
|
||||||
local FMaxPinze = EMT.FMAXPINZE -- Feed massima pinze [mm/min]
|
|
||||||
local ForzaAttrito = 350 * 9.8 * 0.2 -- Forza chiusura pinze [Kgf] * g * Coeff_Attrito -> [N]
|
|
||||||
local TempoAcc = ( ( Massa * FMaxPinze) / ( 60 * ForzaAttrito) / 1000)
|
|
||||||
if ( TempoAcc < MinTempoAcc) then TempoAcc = MinTempoAcc end
|
|
||||||
if ( TempoAcc > MaxTempoAcc) then TempoAcc = MaxTempoAcc end
|
|
||||||
local AccMaxPinze = FMaxPinze / ( 60 * MinTempoAcc)
|
|
||||||
local AccPinze = FMaxPinze / ( 60 * TempoAcc)
|
|
||||||
local RidFeed = 100 / Massa * 100
|
|
||||||
if RidFeed > 100 then
|
|
||||||
RidFeed = 100
|
|
||||||
elseif RidFeed < 10 then
|
|
||||||
RidFeed = 10
|
|
||||||
end
|
|
||||||
return AccPinze, AccMaxPinze, RidFeed
|
|
||||||
end
|
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function CalcCharStatusN( sCmd)
|
function CalcCharStatusN( sCmd)
|
||||||
-- aperto
|
-- aperto
|
||||||
@@ -2245,9 +2455,9 @@ function PreparePreRotation( sCmd, nInd)
|
|||||||
MDChar = { Y2=ParkY2, V2=ParkV2, IniStatY2=1, FinStatY2=1, BeamVise=0}
|
MDChar = { Y2=ParkY2, V2=ParkV2, IniStatY2=1, FinStatY2=1, BeamVise=0}
|
||||||
table.insert( EMT.MDCHAR, MDChar)
|
table.insert( EMT.MDCHAR, MDChar)
|
||||||
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 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
|
||||||
@@ -2385,6 +2595,9 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function GetV1ToCloseNum( UseCurrV1)
|
function GetV1ToCloseNum( UseCurrV1)
|
||||||
|
if EMT.MCHPRECUT or EMT.MCHCUT then
|
||||||
|
return false
|
||||||
|
end
|
||||||
--EmtOutput( string.format( 'L1m=%.3f L1M=%.3f', EMT.MAXMIN[1], EMT.MAXMAX[1]))
|
--EmtOutput( string.format( 'L1m=%.3f L1M=%.3f', EMT.MAXMIN[1], EMT.MAXMAX[1]))
|
||||||
--EmtOutput( string.format( 'LB=%.3f LT=%.3f', EMT.LB, EMT.LT))
|
--EmtOutput( string.format( 'LB=%.3f LT=%.3f', EMT.LB, EMT.LT))
|
||||||
local dV1Pos
|
local dV1Pos
|
||||||
@@ -2438,12 +2651,13 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function GetDiffRotAxAtStart( R1, R2)
|
function GetDiffRotAxAtStart( R1, R2)
|
||||||
local HomeR1 = EgtGetAxisHomePos( EgtIf( nHSet == 1, 'C1', 'C2'))
|
local nHSet = GetHeadSet( EMT.HEAD)
|
||||||
|
local HomeR1 = EgtGetAxisHomePos( EgtIf( nHSet == 1 or nHSet == 11, 'C1', 'C2'))
|
||||||
local PrevR1 = EMT.R1p or EMT.R1pp or HomeR1
|
local PrevR1 = EMT.R1p or EMT.R1pp or HomeR1
|
||||||
if not R1 or not PrevR1 or abs( R1 - PrevR1) > 0.1 then
|
if not R1 or not PrevR1 or abs( R1 - PrevR1) > 0.1 then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
local HomeR2 = EgtGetAxisHomePos( EgtIf( nHSet == 1, 'B1', 'B2'))
|
local HomeR2 = EgtGetAxisHomePos( EgtIf( nHSet == 1 or nHSet == 11, 'B1', 'B2'))
|
||||||
local PrevR2 = EMT.R2p or EMT.R2pp or HomeR2
|
local PrevR2 = EMT.R2p or EMT.R2pp or HomeR2
|
||||||
if not R2 or not PrevR2 or abs( R2 - PrevR2) > 0.1 then
|
if not R2 or not PrevR2 or abs( R2 - PrevR2) > 0.1 then
|
||||||
return true
|
return true
|
||||||
@@ -2459,12 +2673,12 @@ function MyAdjustLinearAxes()
|
|||||||
|
|
||||||
if EMT.REFLOC then
|
if EMT.REFLOC then
|
||||||
local vtE
|
local vtE
|
||||||
if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' then
|
if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' or EMT.HEAD == 'H19' then
|
||||||
local dAddLen = EgtIf( EMT.HEAD == 'H12', -SawOffsZ, 0)
|
local dAddLen = EgtIf( EMT.HEAD == 'H12', -SawOffsZ, 0)
|
||||||
local Len = EMT.TLEN + dAddLen + MillOffs
|
local Len = EMT.TLEN + dAddLen + MillOffs
|
||||||
local LenRef = MillOffs
|
local LenRef = MillOffs
|
||||||
vtE = Vector3d( EMT.TDIR) * Len - Z_AX() * LenRef
|
vtE = Vector3d( EMT.TDIR) * Len - Z_AX() * LenRef
|
||||||
elseif EMT.HEAD == 'H21' or EMT.HEAD == 'H22' then
|
elseif EMT.HEAD == 'H21' or EMT.HEAD == 'H22' or EMT.HEAD == 'H29' then
|
||||||
local dAddLen = EgtIf( EMT.HEAD == 'H22', -Saw2OffsZ, 0)
|
local dAddLen = EgtIf( EMT.HEAD == 'H22', -Saw2OffsZ, 0)
|
||||||
local Len = EMT.TLEN + dAddLen + Mill2Offs
|
local Len = EMT.TLEN + dAddLen + Mill2Offs
|
||||||
local LenRef = Mill2Offs
|
local LenRef = Mill2Offs
|
||||||
@@ -2477,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' 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()
|
||||||
@@ -2593,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
|
||||||
|
|
||||||
@@ -2614,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'..
|
||||||
@@ -2686,13 +2908,40 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
|||||||
if bReset then
|
if bReset then
|
||||||
EmitResetMachining()
|
EmitResetMachining()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if EMT.ISPROBING then
|
||||||
|
-- se lavorazione successiva con stessa testa non si va a Z massima
|
||||||
|
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||||
|
local bIsFirstHead = ( nSetHead == 1 or nSetHead == 11)
|
||||||
|
local sToolNameNextProbe
|
||||||
|
local idProbeNextMachining = EgtGetNextActiveOperation( EMT.MCHID)
|
||||||
|
if idProbeNextMachining then
|
||||||
|
EgtSetCurrMachining( idProbeNextMachining)
|
||||||
|
sToolNameNextProbe = EgtGetMachiningParam( MCH_MP.TOOL)
|
||||||
|
EgtSetCurrMachining( EMT.MCHID)
|
||||||
|
end
|
||||||
|
if sToolNameNextProbe and bIsFirstHead and EMT.PREVTOOL_H1 == sToolNameNextProbe then
|
||||||
|
return false
|
||||||
|
elseif sToolNameNextProbe and not bIsFirstHead and EMT.PREVTOOL_H2 == sToolNameNextProbe then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- se tastatura attiva, si disabilita la tastatura
|
||||||
|
-- gestione eventuale tastatura
|
||||||
|
local bStopProbing = EgtGetValInNotes( EMT.MCHUSERNOTES, 'PROBE', 'b') or EgtGetValInNotes( EMT.MCHUSERNOTES, 'END-PROBE', 'b')
|
||||||
|
if EMT.PROBE and bStopProbing then
|
||||||
|
EmtOutput( 'G145 Z-10 EF0')
|
||||||
|
EMT.PROBE = nil
|
||||||
|
end
|
||||||
|
|
||||||
-- gruppo della testa
|
-- gruppo della testa
|
||||||
local nHSet = GetHeadSet( EMT.HEAD)
|
local nHSet = GetHeadSet( EMT.HEAD)
|
||||||
local dXPos = EgtIf( bUsePrevDelta, EMT.L2pp or EMT.L2o, EMT.L2o)
|
local dXPos = EgtIf( bUsePrevDelta, EMT.L2pp or EMT.L2o, EMT.L2o)
|
||||||
-- reset stato di testa in home
|
-- reset stato di testa in home
|
||||||
EMT.XHOME = nil
|
EMT.XHOME = nil
|
||||||
-- se testa 1
|
-- se testa 1
|
||||||
if nHSet == 1 then
|
if nHSet == 1 or nHSet == 11 then
|
||||||
-- posizioni sicure
|
-- posizioni sicure
|
||||||
local dMaxZ1 = EgtGetAxisMax( 'Z1')
|
local dMaxZ1 = EgtGetAxisMax( 'Z1')
|
||||||
local dSafeX1 = EgtGetAxisHomePos( 'X1')
|
local dSafeX1 = EgtGetAxisHomePos( 'X1')
|
||||||
@@ -2709,7 +2958,7 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
|||||||
if not HeadIsChainSaw( EMT.HEAD) then
|
if not HeadIsChainSaw( EMT.HEAD) then
|
||||||
-- eseguo la salita a Z1max (oriento solo se assi rotanti non già a posto)
|
-- 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
|
if abs( dSafeC1 - PrevR1) > 0.1 or abs( dSafeB1 - PrevR2) > 0.1 then
|
||||||
local dZref = dSafeZ1 + GetZExtra( EMT.HEAD, PrevR2)
|
local dZref = dSafeZ1 + GetZExtra( EMT.HEAD, EgtClamp( PrevR2, -90, 90))
|
||||||
if EgtIf( BD.RIGHT_LOAD, -dXPos < -LimX1RotSaw, -dXPos > -LimX1RotSaw) then
|
if EgtIf( BD.RIGHT_LOAD, -dXPos < -LimX1RotSaw, -dXPos > -LimX1RotSaw) then
|
||||||
dZref = dZref - EgtIf( not Mortiser, 100, 370)
|
dZref = dZref - EgtIf( not Mortiser, 100, 370)
|
||||||
end
|
end
|
||||||
@@ -2744,7 +2993,7 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
|||||||
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)
|
||||||
EmitMoveDataHead( 1, { Z=dSafeZ1, B=dSafeB1})
|
EmitMoveDataHead( 1, { Z=dSafeZ1, B=dSafeB1})
|
||||||
if EMT.SB > 650 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})
|
||||||
end
|
end
|
||||||
EmitMoveDataHead( 1, { X=-dSafeX1, C=dSafeC1})
|
EmitMoveDataHead( 1, { X=-dSafeX1, C=dSafeC1})
|
||||||
@@ -2766,9 +3015,7 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
|||||||
local MovH = { Z = EgtIf( dZref > EMT.L3o, dZref, EMT.L3o)}
|
local MovH = { Z = EgtIf( dZref > EMT.L3o, dZref, EMT.L3o)}
|
||||||
MovH.X = -dXPos ; MovH.B = EgtClamp( PrevR2, -90, 90) ; MovH.C = PrevR1 ;
|
MovH.X = -dXPos ; MovH.B = EgtClamp( PrevR2, -90, 90) ; MovH.C = PrevR1 ;
|
||||||
EmitMoveDataHead( 1, MovH)
|
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})
|
EmitMoveDataHead( 1, { Z=dMaxZ1, B=0})
|
||||||
end
|
|
||||||
EmitMoveDataHead( 1, { C=dSafeC1})
|
EmitMoveDataHead( 1, { C=dSafeC1})
|
||||||
EmitMoveDataHead( 1, { B=dSafeB1})
|
EmitMoveDataHead( 1, { B=dSafeB1})
|
||||||
EmitMoveDataHead( 1, { Z=dMaxZ1})
|
EmitMoveDataHead( 1, { Z=dMaxZ1})
|
||||||
@@ -2788,8 +3035,26 @@ 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.SB > 650 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})
|
||||||
end
|
end
|
||||||
EmitMoveDataHead( 1, { X=-dSafeX1, C=dSafeC1})
|
EmitMoveDataHead( 1, { X=-dSafeX1, C=dSafeC1})
|
||||||
@@ -2845,8 +3110,26 @@ 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.SB > 650 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})
|
||||||
end
|
end
|
||||||
EmitMoveDataHead( 2, { X=-dSafeX2, C=dSafeC2})
|
EmitMoveDataHead( 2, { X=-dSafeX2, C=dSafeC2})
|
||||||
@@ -2858,6 +3141,7 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
|||||||
EmitMoveWaitHead( 2)
|
EmitMoveWaitHead( 2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -2887,7 +3171,7 @@ function EmitXhome()
|
|||||||
-- gruppo della testa
|
-- gruppo della testa
|
||||||
local nHSet = GetHeadSet( EMT.HEAD)
|
local nHSet = GetHeadSet( EMT.HEAD)
|
||||||
-- se testa 1
|
-- se testa 1
|
||||||
if nHSet == 1 then
|
if nHSet == 1 or nHSet == 11 then
|
||||||
local dMaxZ1 = EgtGetAxisMax( 'Z1')
|
local dMaxZ1 = EgtGetAxisMax( 'Z1')
|
||||||
local dSafeX1 = EgtGetAxisHomePos( 'X1')
|
local dSafeX1 = EgtGetAxisHomePos( 'X1')
|
||||||
local dSafeZ1 = EgtGetAxisHomePos( 'Z1')
|
local dSafeZ1 = EgtGetAxisHomePos( 'Z1')
|
||||||
@@ -2919,14 +3203,19 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function EmitResetMachining()
|
function EmitResetMachining()
|
||||||
if ( EMT.TOOL ~= GetNextTool( EMT.MCHID) and IsLastPath( EMT.PATHID)) or GetSpecUnloading( EMT.PATHID) or GetFall( EMT.PATHID) then
|
if EMT.PLANEACTIVE and not EMT.ISPROBING then
|
||||||
-- se da MLDE parametro non settato, o settato a true, scrivo il comando arresto mandrino
|
-- se non sono a Z massima e operatore deve entrare in cabina spango sempre
|
||||||
if WriteM05Command == nil or WriteM05Command then
|
if not EMT.ZMAX and ( GetSpecUnloading( EMT.PATHID) or GetFall( EMT.PATHID)) then
|
||||||
|
EmtOutput( 'M05')
|
||||||
|
-- altrimenti spegnimento dipende da parametro
|
||||||
|
elseif ( EMT.TOOL ~= GetNextTool( EMT.MCHID, false) and IsLastPath( EMT.PATHID)) or GetSpecUnloading( EMT.PATHID) or GetFall( EMT.PATHID) then
|
||||||
EmtOutput( 'M05')
|
EmtOutput( 'M05')
|
||||||
end
|
|
||||||
end
|
end
|
||||||
local sOut = 'G157 EA1'
|
local sOut = 'G157 EA1'
|
||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
|
-- piano non più attivo
|
||||||
|
EMT.PLANEACTIVE = false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -2948,17 +3237,27 @@ function EmitParkRoller( dPosT, bSplitCut, bUsePrevDelta)
|
|||||||
local DiffY2 = MyParkY2 - dPosY2
|
local DiffY2 = MyParkY2 - dPosY2
|
||||||
--EmtOutput( string.format( 'PosT=%.3f DiffY1=%.3f DiffY2=%.3f', dPosT, DiffY1, DiffY2))
|
--EmtOutput( string.format( 'PosT=%.3f DiffY1=%.3f DiffY2=%.3f', dPosT, DiffY1, DiffY2))
|
||||||
if bSplitCut then
|
if bSplitCut then
|
||||||
|
local bYNoMove, bVNoMove
|
||||||
if DiffY1 > 0.1 then
|
if DiffY1 > 0.1 then
|
||||||
|
bYNoMove = false
|
||||||
MDChar.Y1 = dPosY1 + DiffY1
|
MDChar.Y1 = dPosY1 + DiffY1
|
||||||
else
|
else
|
||||||
|
bYNoMove = true
|
||||||
MDChar.Y1 = dPosY1
|
MDChar.Y1 = dPosY1
|
||||||
end
|
end
|
||||||
if DiffY2 < -0.1 then
|
if DiffY2 < -0.1 then
|
||||||
|
bVNoMove = false
|
||||||
MDChar.Y2 = dPosY2 + DiffY2
|
MDChar.Y2 = dPosY2 + DiffY2
|
||||||
dPosT = dPosT + DiffY2
|
dPosT = dPosT + DiffY2
|
||||||
else
|
else
|
||||||
|
bVNoMove = true
|
||||||
MDChar.Y2 = dPosY2
|
MDChar.Y2 = dPosY2
|
||||||
end
|
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 + 30
|
||||||
|
MDChar.Y2 = MDChar.Y2 - 30
|
||||||
|
end
|
||||||
elseif DiffY1 > 0.1 and DiffY2 < -0.1 then
|
elseif DiffY1 > 0.1 and DiffY2 < -0.1 then
|
||||||
EmtSetLastError( 1201, 'Error Collision in ParkRoller')
|
EmtSetLastError( 1201, 'Error Collision in ParkRoller')
|
||||||
elseif DiffY1 > 0.1 then
|
elseif DiffY1 > 0.1 then
|
||||||
@@ -3021,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
|
||||||
@@ -3030,8 +3380,20 @@ 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
|
||||||
|
|
||||||
|
if bVerifyPresel then
|
||||||
-- recupero lavorazione successiva
|
-- recupero lavorazione successiva
|
||||||
local nNextMchId = EgtGetNextActiveOperation( nMchId)
|
local nNextMchId = EgtGetNextActiveOperation( nMchId)
|
||||||
while nNextMchId do
|
while nNextMchId do
|
||||||
@@ -3067,7 +3429,7 @@ function PreselectNextDiffHead( nMchId, sHead)
|
|||||||
EmitMoveStartHead( 1)
|
EmitMoveStartHead( 1)
|
||||||
EmitMoveWaitHead( 1)
|
EmitMoveWaitHead( 1)
|
||||||
end
|
end
|
||||||
-- Emetto preselezione (non ammessa per sega a catena H13 e H23)
|
-- Emetto preselezione (non ammessa per sega a catena H13 e H23 e aggregato BlockHaus H17)
|
||||||
if sNextHead == 'H11' then
|
if sNextHead == 'H11' then
|
||||||
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sNextTcPos)})
|
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sNextTcPos)})
|
||||||
EmitMoveStartHead( 1)
|
EmitMoveStartHead( 1)
|
||||||
@@ -3091,6 +3453,7 @@ function PreselectNextDiffHead( nMchId, sHead)
|
|||||||
-- ripristino stato corrente
|
-- ripristino stato corrente
|
||||||
EgtSetCurrMachining( EMT.MCHID)
|
EgtSetCurrMachining( EMT.MCHID)
|
||||||
EgtTdbSetCurrTool( EMT.TOOL)
|
EgtTdbSetCurrTool( EMT.TOOL)
|
||||||
|
end
|
||||||
-- 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
|
||||||
@@ -3146,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})
|
||||||
|
|||||||
+551
-66
File diff suppressed because it is too large
Load Diff
+168
-13
@@ -4,9 +4,74 @@
|
|||||||
require( 'EmtGenerator')
|
require( 'EmtGenerator')
|
||||||
EgtEnableDebug( false)
|
EgtEnableDebug( false)
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
-- *** Generic Machinings ***
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
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)
|
||||||
@@ -72,8 +137,8 @@ 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.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
|
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)
|
||||||
elseif vtTp:getZ() > 0.707 or vtT:getZ() > 0.707 then
|
elseif vtTp:getZ() > 0.707 or vtT:getZ() > 0.707 then
|
||||||
@@ -95,7 +160,7 @@ function OnSpecialGetMaxZ()
|
|||||||
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
||||||
end
|
end
|
||||||
elseif EMC.HEAD == 'H12' and sHead_TC == 'Head1_TC2' then
|
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
|
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)
|
||||||
elseif vtTp:getZ() > 0.707 or vtT:getZ() > 0.707 then
|
elseif vtTp:getZ() > 0.707 or vtT:getZ() > 0.707 then
|
||||||
@@ -124,7 +189,7 @@ function OnSpecialGetMaxZ()
|
|||||||
EMC.MAXZ = ParkZ2 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
EMC.MAXZ = ParkZ2 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
||||||
end
|
end
|
||||||
elseif EMC.HEAD == 'H22' then
|
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
|
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)
|
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
|
elseif vtTp:getZ() > 0.707 or vtT:getZ() > 0.707 then
|
||||||
@@ -173,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()))
|
||||||
@@ -208,6 +273,13 @@ function OnSpecialMoveZup()
|
|||||||
EMC.MODIF = true
|
EMC.MODIF = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
elseif HeadIsChainSaw( EMC.HEAD) then
|
||||||
|
EMC.TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
|
||||||
|
if EMC.TDIR[3] < -0.15 and EMC.L3 > - EMC.TTOTLEN then
|
||||||
|
EMC.L3 = EMC.TTOTLEN * EMC.TDIR[3]
|
||||||
|
-- dichiaro modificato
|
||||||
|
EMC.MODIF = true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -223,7 +295,7 @@ local MIN_BACK_ENG_V = 115 -- ingombro asse Z a sinistra
|
|||||||
local AGG_V = MinDeltaYV -- ingombro rulli pressori + sicurezza
|
local AGG_V = MinDeltaYV -- ingombro rulli pressori + sicurezza
|
||||||
local MIN_CLAMP_5 = 150 -- minima presa con la pinza speciale (pinza 5)
|
local MIN_CLAMP_5 = 150 -- minima presa con la pinza speciale (pinza 5)
|
||||||
local SIC_CLAMP_5 = 50 -- sicurezza testa da pinza speciale
|
local SIC_CLAMP_5 = 50 -- sicurezza testa da pinza speciale
|
||||||
local MAX_BACK_CLAMP_5 = 320 -- massima sporgenza posteriore del pezzo da pinza speciale
|
local MAX_BACK_CLAMP_5 = EgtClamp( MaxBackClamp5 or 320, 200, 380) -- massima sporgenza posteriore del pezzo da pinza speciale
|
||||||
|
|
||||||
----------------------- Variabili -----------------------------------
|
----------------------- Variabili -----------------------------------
|
||||||
local Test = false
|
local Test = false
|
||||||
@@ -654,14 +726,72 @@ 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)
|
||||||
|
|
||||||
-- Inizializzo codice di errore
|
-- Inizializzo codice di errore
|
||||||
EMC.ERR = 0
|
EMC.ERR = 0
|
||||||
|
|
||||||
-- Recupero la posizione della trave e dei carrelli al termine della precedente operazione
|
-- Recupero la precedente operazione
|
||||||
local nPrevOpeId = EgtGetPrevActiveOperation( EMC.MCHID)
|
local nPrevOpeId = EgtGetPrevActiveOperation( EMC.MCHID)
|
||||||
|
|
||||||
|
-- Se esiste lavorazione precedente ed è una tastatura
|
||||||
|
if nPrevOpeId and EgtGetOperationType( nPrevOpeId) == MCH_OY.PROBING then
|
||||||
|
-- se stessa testa e montato già utensile corretto
|
||||||
|
-- recupero valori assi alla fine della lavorazione precedente e all'inizio della corrente
|
||||||
|
local vPrevAxes = EmtGetFinalAxesPos( nPrevOpeId, true)
|
||||||
|
local vCurrAxes = EmtGetInitialAxesPos( EMC.MCHID, true)
|
||||||
|
-- info lavorazione precedente
|
||||||
|
EgtSetCurrMachining( nPrevOpeId)
|
||||||
|
local sPrevTool = EgtGetMachiningParam( MCH_MP.TOOL)
|
||||||
|
local sPrevHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
||||||
|
local nSetHead = GetHeadSet( sPrevHead)
|
||||||
|
local bPrevIsFirstHead = ( nSetHead == 1 or nSetHead == 11)
|
||||||
|
-- info lavorazione corrente
|
||||||
|
EgtSetCurrMachining( EMC.MCHID)
|
||||||
|
local sCurrTool = EgtGetMachiningParam( MCH_MP.TOOL)
|
||||||
|
local sCurrHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
||||||
|
nSetHead = GetHeadSet( sCurrHead)
|
||||||
|
local bCurrIsFirstHead = ( nSetHead == 1 or nSetHead == 11)
|
||||||
|
|
||||||
|
-- se utensile corrente è compatibile (significa che è già stato precaricato) se stessa testa e con stessa configurazioen assi rotanti, annullo risalita
|
||||||
|
if IsToolCompatibleWithProbe( sCurrTool, sPrevTool) and bPrevIsFirstHead == bCurrIsFirstHead and abs( vCurrAxes[4] - vPrevAxes[4]) < 1 and abs( vCurrAxes[5] - vPrevAxes[5]) < 1 then
|
||||||
|
-- in lavorazione precedente elimino eventuale retrazione a Zmax
|
||||||
|
EmtRemoveRise( nPrevOpeId)
|
||||||
|
-- in lavorazione corrente elimino eventuale approccio da Zmax
|
||||||
|
EmtRemoveClimb( EMC.MCHID)
|
||||||
|
-- prendo sempre la Z massima tra le due
|
||||||
|
local vClimbPoint
|
||||||
|
if vCurrAxes[3] - 1.0 < vPrevAxes[3] then
|
||||||
|
vClimbPoint = vCurrAxes
|
||||||
|
vCurrAxes[3] = vPrevAxes[3]
|
||||||
|
elseif vPrevAxes[3] - 1.0 < vCurrAxes[3] then
|
||||||
|
vClimbPoint = vPrevAxes
|
||||||
|
vPrevAxes[3] = vCurrAxes[3]
|
||||||
|
end
|
||||||
|
EmtAddClimb( EMC.MCHID, vClimbPoint, 4, 1, 0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Recupero la posizione della trave e dei carrelli al termine della precedente operazione
|
||||||
-- se precedente operazione non esiste, errore
|
-- se precedente operazione non esiste, errore
|
||||||
if not nPrevOpeId then
|
if not nPrevOpeId then
|
||||||
EMC.ERR = 1
|
EMC.ERR = 1
|
||||||
@@ -761,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
|
||||||
@@ -819,7 +949,6 @@ function OnPostApplyMachining()
|
|||||||
local vAxes = EmtGetAxesPos( nLastEntId)
|
local vAxes = EmtGetAxesPos( nLastEntId)
|
||||||
if #vAxes > 0 then EMC.TPOS = vAxes[1] end
|
if #vAxes > 0 then EMC.TPOS = vAxes[1] end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -1097,6 +1226,17 @@ function SpecialCalcMachiningEncumbrance( nMchId, bPreCut)
|
|||||||
end
|
end
|
||||||
-- Recupero testa
|
-- Recupero testa
|
||||||
local sHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
local sHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
||||||
|
local sToolName = EgtTdbGetCurrToolParam( MCH_TP.NAME)
|
||||||
|
local nSetHead = GetHeadSet( sHead)
|
||||||
|
local bIsFirstHead = ( nSetHead == 1 or nSetHead == 11)
|
||||||
|
|
||||||
|
-- se lavorazione di tastatura, si considera montato utensile di default
|
||||||
|
if HeadIsProbe( sHead) then
|
||||||
|
local sOtherToolName = GetToolNameFromTcPos( EgtIf( bIsFirstHead, DefTcPos1, DefTcPos2))
|
||||||
|
local sOtherHeadTool, _ = GetToolHead( sOtherToolName)
|
||||||
|
EgtLoadTool( sOtherHeadTool, 1, sOtherToolName)
|
||||||
|
end
|
||||||
|
|
||||||
-- Recupero valore assi macchina
|
-- Recupero valore assi macchina
|
||||||
local nSecId = EgtGetNext( EgtGetFirstInGroup( nPathId))
|
local nSecId = EgtGetNext( EgtGetFirstInGroup( nPathId))
|
||||||
local vAxes = EmtGetAxesPos( nSecId)
|
local vAxes = EmtGetAxesPos( nSecId)
|
||||||
@@ -1108,7 +1248,7 @@ function SpecialCalcMachiningEncumbrance( nMchId, bPreCut)
|
|||||||
-- Calcolo dell'ingombro della testa rispetto allo Zero Macchina
|
-- Calcolo dell'ingombro della testa rispetto allo Zero Macchina
|
||||||
local b3Enc
|
local b3Enc
|
||||||
|
|
||||||
if sHead ~= 'H21' and sHead ~= 'H22' and sHead ~= 'H23' then
|
if bIsFirstHead then
|
||||||
EgtSetAxisPos( 'C1', vAxes[4])
|
EgtSetAxisPos( 'C1', vAxes[4])
|
||||||
EgtSetAxisPos( 'B1', vAxes[5])
|
EgtSetAxisPos( 'B1', vAxes[5])
|
||||||
if sHead == 'H13' or sHead == 'H15' then
|
if sHead == 'H13' or sHead == 'H15' then
|
||||||
@@ -1142,6 +1282,7 @@ function SpecialCalcMachiningEncumbrance( nMchId, bPreCut)
|
|||||||
local dDistFront = - ptMax:getX() - LoadT - dHeadFront
|
local dDistFront = - ptMax:getX() - LoadT - dHeadFront
|
||||||
local dDistBack = ptMin:getX() + LoadT + EMC.LB - dHeadBack
|
local dDistBack = ptMin:getX() + LoadT + EMC.LB - dHeadBack
|
||||||
EgtOutLog( ' DistFront = ' .. EgtNumToString( dDistFront, 1) .. ' DistBack = ' .. EgtNumToString( dDistBack, 1), 3)
|
EgtOutLog( ' DistFront = ' .. EgtNumToString( dDistFront, 1) .. ' DistBack = ' .. EgtNumToString( dDistBack, 1), 3)
|
||||||
|
|
||||||
return dDistFront, dDistBack, dRollFront, dRollBack
|
return dDistFront, dDistBack, dRollFront, dRollBack
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1423,7 +1564,14 @@ function SpecCalcSplit( dLenRaw, dMaxLenLeft)
|
|||||||
local vCmd = {}
|
local vCmd = {}
|
||||||
EgtOutLog( ' *[S]', 1)
|
EgtOutLog( ' *[S]', 1)
|
||||||
local bSplit = ( EMC.Y2DELTA ~= nil or EMC.W2DELTA ~= nil)
|
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'))
|
local sType = EgtIf( EMC.Y2DELTA, 'Split', EgtIf( EMC.W2DELTA, 'SpecSplit', 'Fall'))
|
||||||
table.insert( vCmd, { 0, sType})
|
table.insert( vCmd, { 0, sType})
|
||||||
if not bSplit then EnsureZmax( false, vCmd) end
|
if not bSplit then EnsureZmax( false, vCmd) end
|
||||||
@@ -1546,8 +1694,11 @@ function SpecCalcUnload()
|
|||||||
EgtOutLog( ' *[U1]', 1)
|
EgtOutLog( ' *[U1]', 1)
|
||||||
end
|
end
|
||||||
local vCmd = {}
|
local vCmd = {}
|
||||||
|
-- Tipo di scarico
|
||||||
|
local bStdUl = ( not MaxUnloadLen or MaxUnloadLen < 1 or EMC.LB - EMC.HOVM < MaxUnloadLen + 1)
|
||||||
|
|
||||||
-- Commento
|
-- Commento
|
||||||
table.insert( vCmd, { 0, 'Unloading'})
|
table.insert( vCmd, { 0, 'Unloading', EgtIf( bStdUl, 'Unloading', 'Manual Unloading')})
|
||||||
-- posizionamento sicuro teste e rulli (non serve ?)
|
-- posizionamento sicuro teste e rulli (non serve ?)
|
||||||
--table.insert( vCmd, { 4, 0})
|
--table.insert( vCmd, { 4, 0})
|
||||||
-- Se pinza Y chiusa, la apro
|
-- Se pinza Y chiusa, la apro
|
||||||
@@ -1555,11 +1706,15 @@ function SpecCalcUnload()
|
|||||||
table.insert( vCmd, { 11, 0})
|
table.insert( vCmd, { 11, 0})
|
||||||
EMC.CNT = nil
|
EMC.CNT = nil
|
||||||
end
|
end
|
||||||
-- Sposto il pezzo in posizione di scarico
|
-- Se non supero la lunghezza massima di scarico, sposto il pezzo in posizione di scarico
|
||||||
|
if bStdUl then
|
||||||
local dFinT = UnloadT - EMC.LB
|
local dFinT = UnloadT - EMC.LB
|
||||||
local dFinY2 = dFinT + EMC.Y2DELTA
|
local dFinY2 = dFinT + EMC.Y2DELTA
|
||||||
table.insert( vCmd, { 2, 'T', dFinT, 'Y2', dFinY2})
|
table.insert( vCmd, { 2, 'T', dFinT, 'Y2', dFinY2})
|
||||||
EgtOutLog( ' Y2PosF=' .. EgtNumToString( dFinY2), 1)
|
EgtOutLog( ' Y2PosF=' .. EgtNumToString( dFinY2), 1)
|
||||||
|
else
|
||||||
|
table.insert( vCmd, { 1, 'Y2', MaxY2})
|
||||||
|
end
|
||||||
-- apro la morsa
|
-- apro la morsa
|
||||||
table.insert( vCmd, { 12, 0})
|
table.insert( vCmd, { 12, 0})
|
||||||
-- riporto il carrello in home
|
-- riporto il carrello in home
|
||||||
|
|||||||
+129
-1
@@ -1,7 +1,135 @@
|
|||||||
==== Common_ONE-PF Update Log ====
|
==== Common_ONE-PF Update Log ====
|
||||||
|
|
||||||
|
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)
|
||||||
|
- (GEN) Migliorata gestione spegnimento utensile e disattivazione piano
|
||||||
|
- (SIM-GEN) Corretto nome variabile e altre piccole modifiche per Progress
|
||||||
|
|
||||||
|
Versione 2.7h1 (20/08/2025)
|
||||||
|
- (SIM-GEN) Non si chiudono i rulli se tagli o pretagli di testa e coda
|
||||||
|
- (SIM) Corretto movimento pinza 5 in caso di riposizionamento pinza 1
|
||||||
|
- (GEN) Corretta quota assoluta posizione testa trave in caso di pinza 5 e testa rimasta bassa
|
||||||
|
- (GEN) Se ultima lavorazione pezzo precedente ha stesso utensile della prima lavorazione pezzo successivo, la speed resta accesa
|
||||||
|
|
||||||
|
Versione 2.7g4 (23/07/2025)
|
||||||
|
- (SIM-GEN) Aggiunto parametro configurabile da TS3 per massima sporgenza trave in coda per pinza 5. Ticket#2538
|
||||||
|
|
||||||
|
Versione 2.7g3 (22/07/2025)
|
||||||
|
- (SIM) Corretto lettura angolo di presa della motosega
|
||||||
|
|
||||||
|
Versione 2.7g2 (08/07/2025)
|
||||||
|
- (SIM) Corretto movimento a parcheggio sega a catena. Ticket#2517
|
||||||
|
|
||||||
|
Versione 2.7g1 (01/07/2025)
|
||||||
|
- (GEN) Rimossa gestione PROBE inserita per sbaglio
|
||||||
|
- (GEN) Corretto gestione accelerazioni
|
||||||
|
- (SIM-GEN) Aggiunta gestione massima lunghezza scarico
|
||||||
|
|
||||||
|
Versione 2.7f1 (04/06/2025)
|
||||||
|
- (SIM) Aggiunta gestione qualità VMILL da impostazioni macchina. Tolto parametro 'CoeffVM'.
|
||||||
|
- (GEN) Aggiunti parametri FMAXPINZE, MAXACC, MINACC configurabili da TS3. Ticket#2052
|
||||||
|
|
||||||
|
Versione 2.7e1 (28/05/2025)
|
||||||
|
- (SIM-GEN) Alla separazione si spostano i carrelli di 30mm aprendo il taglio. Ticket#2259,Ticket#2328
|
||||||
|
|
||||||
|
Versione 2.7d1 (16/04/2025)
|
||||||
|
- (SIM) Distanza di collisione portata a 3mm, qualità VMILL ridotta a 4mm. Ticket#2395
|
||||||
|
|
||||||
|
Versione 2.7c3 (25/03/2025)
|
||||||
|
- (GEN) Corretto movimento approccio alla lavorazione se utensile lama montata su magazzino 2. Ticket#2361
|
||||||
|
|
||||||
|
Versione 2.7c2 (12/03/2025)
|
||||||
|
- (SIM-GEN) Migliorato calcolo posizione barra dopo split. Tiene in considerazione ingombro lavorazioni pezzo. Ticket#2321
|
||||||
|
- (GEN) Aggiunta commenti HEADER e FOOTER per comunicazione con linea o altre macchine, da parte di Essetre.
|
||||||
|
- (SIm-GEN) Migliorato movimento approccio al pezzo con lama. Allineamento simulazione-generazione che facevano due movimenti leggermente diversi. Ticket#2335
|
||||||
|
|
||||||
|
Versione 2.7c1 (05/03/2025)
|
||||||
|
- (GEN) Corretto movimento in home utensile precedente. Ticket#2324
|
||||||
|
|
||||||
|
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)
|
Versione 2.6j1 (08/10/2024)
|
||||||
-- (SIM-GEN) Corretto primo movimento di approccio al pezzo. Ticket#2093
|
- (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)
|
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
|
- (GEN) Migliorato calcolo chiusura paratia rulli con aggiornamento lunghezza della barra in caso di ultimo taglio e grezzo residuo in coda. Ticket#2017
|
||||||
|
|||||||
+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.6j1', -- versione script
|
VERSION = '3.1f2', -- 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