Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 052f6aa18e | |||
| d4376dfa8e | |||
| f25d90518d | |||
| 5ff538314a | |||
| db91129c66 | |||
| 8f124af521 | |||
| fbd5f170de | |||
| 00fffeb388 | |||
| 0f6e9b9899 | |||
| b06d6d4afe | |||
| 36efe11298 | |||
| 5447eca3c3 | |||
| f5dc0ec3f2 | |||
| a8a708697d | |||
| 7806f539b5 | |||
| 2f0ee75abf | |||
| f515dd0312 | |||
| 6a530927c9 | |||
| 1f358ce1e1 | |||
| e5442d976a | |||
| bb190b1643 | |||
| 8adfbaf24b | |||
| 55f5710f7c | |||
| 1ee84c6cf8 | |||
| 44ea5b2a2c | |||
| 3c82040b21 | |||
| 42ab289444 |
+36
-18
@@ -27,7 +27,9 @@ 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 = 154000 -- feed massima pinze
|
EMT.FMAXPINZE = EgtClamp( MaxFeedPinze or 154000, 20000, 160000) -- feed massima pinze
|
||||||
|
EMT.MAXACC = MaxAcc or ( EMT.FMAXPINZE / ( 60 * 0.3)) -- accelerazione massima pinze
|
||||||
|
EMT.MINACC = MinAcc or ( EMT.FMAXPINZE / ( 60 * 4)) -- accelerazione minima pinze
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -183,16 +185,12 @@ function OnDispositionEnd()
|
|||||||
local STrave = EMT.ST
|
local STrave = EMT.ST
|
||||||
local HOverM = EMT.HOVM
|
local HOverM = EMT.HOVM
|
||||||
-- calcolo dati pinze
|
-- calcolo dati pinze
|
||||||
local MinAccPinze = 0.3
|
|
||||||
local MaxAccPinze = 4
|
|
||||||
local KgMtCubo= WoodDensity or 550 -- densità legno in Kg / metro cubo
|
local KgMtCubo= WoodDensity or 550 -- densità legno in Kg / metro cubo
|
||||||
local Massa = ( HTrave * STrave * LBarra * KgMtCubo ) / 1000000000
|
local Massa = ( HTrave * STrave * LBarra * KgMtCubo ) / 1000000000
|
||||||
local FMaxPinze = EMT.FMAXPINZE
|
local FMaxPinze = EMT.FMAXPINZE
|
||||||
local ForzaAtrito = 700 / 2 -- Serve per regolare P32 (700 valore reale pistone)
|
local ForzaAtrito = 700 / 2 -- Serve per regolare P32 (700 valore reale pistone)
|
||||||
local TempoAcc = ( ( Massa * FMaxPinze) / ( 60 * ForzaAtrito) / 1000)
|
local TempoAcc = ( ( Massa * FMaxPinze) / ( 60 * ForzaAtrito) / 1000)
|
||||||
if ( TempoAcc < MinAccPinze) then TempoAcc = MinAccPinze end
|
local AccPinze = EgtClamp( FMaxPinze / ( 60 * TempoAcc), EMT.MINACC, EMT.MAXACC)
|
||||||
if ( TempoAcc > MaxAccPinze) then TempoAcc = MaxAccPinze end
|
|
||||||
local AccPinze = FMaxPinze / ( 60 * TempoAcc)
|
|
||||||
local RidFeed = 100 / Massa * 100
|
local RidFeed = 100 / Massa * 100
|
||||||
if ( RidFeed > 100) then RidFeed = 100 end
|
if ( RidFeed > 100) then RidFeed = 100 end
|
||||||
if IdTrave >= 0 then
|
if IdTrave >= 0 then
|
||||||
@@ -498,6 +496,7 @@ function OnMachiningEnd()
|
|||||||
EMT.U_STD = nil
|
EMT.U_STD = nil
|
||||||
EMT.PREVTOOL = EMT.TOOL
|
EMT.PREVTOOL = EMT.TOOL
|
||||||
EMT.PREVHEAD = EMT.HEAD
|
EMT.PREVHEAD = EMT.HEAD
|
||||||
|
EMT.PREVET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -628,15 +627,32 @@ function OnRapid()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||||
|
|
||||||
|
local bGoToHome = false
|
||||||
|
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
|
||||||
|
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and sET == EMT.PREVET and ( abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then
|
||||||
|
bGoToHome = true
|
||||||
|
end
|
||||||
|
|
||||||
|
-- ricavo i dati per la lavorazione
|
||||||
|
local sEE = ' EE' .. EgtIf( bZmax, '3', '4')
|
||||||
|
local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3)
|
||||||
|
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
||||||
|
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||||
|
|
||||||
-- primo posizionamento
|
-- primo posizionamento
|
||||||
local MyZHome = EgtGetAxisHomePos( 'Z')
|
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||||
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||||
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||||
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.FLAG2 == 1 then
|
||||||
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
|
' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
|
||||||
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
|
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
|
||||||
EmtOutput( sOutPreMove)
|
EmtOutput( sOutPreMove)
|
||||||
|
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1pp, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
EmtOutput( 'G101 ET1001')
|
EmtOutput( 'G101 ET1001')
|
||||||
EmtOutput( 'G101 ET2001')
|
EmtOutput( 'G101 ET2001')
|
||||||
end
|
end
|
||||||
@@ -646,19 +662,21 @@ function OnRapid()
|
|||||||
EmtOutput( '( *** ' .. sOut .. ' *** )')
|
EmtOutput( '( *** ' .. sOut .. ' *** )')
|
||||||
end
|
end
|
||||||
|
|
||||||
-- ricavo i dati per la lavorazione
|
|
||||||
local sEE = ' EE' .. EgtIf( bZmax, '3', '4')
|
|
||||||
local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3)
|
|
||||||
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
|
||||||
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
|
||||||
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
|
||||||
|
|
||||||
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
||||||
if not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
|
if not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
|
||||||
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350)) and EMT.FLAG2 == 1 then
|
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
|
||||||
local sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
|
local sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
|
||||||
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
local sOutPreMove
|
||||||
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
|
if EMT.HEAD == 'H3' and bGoToHome then
|
||||||
|
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1pp, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
end
|
||||||
|
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EgtNumToString( EMT.R2, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
EmtOutput( sOutPreMove)
|
EmtOutput( sOutPreMove)
|
||||||
EmtOutput( 'G101 ET1001')
|
EmtOutput( 'G101 ET1001')
|
||||||
EmtOutput( 'G101 ET2001')
|
EmtOutput( 'G101 ET2001')
|
||||||
|
|||||||
+45
-45
@@ -27,7 +27,9 @@ 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 = 154000 -- feed massima pinze
|
EMT.FMAXPINZE = EgtClamp( MaxFeedPinze or 154000, 20000, 160000) -- feed massima pinze
|
||||||
|
EMT.MAXACC = MaxAcc or ( EMT.FMAXPINZE / ( 60 * 0.3)) -- accelerazione massima pinze
|
||||||
|
EMT.MINACC = MinAcc or ( EMT.FMAXPINZE / ( 60 * 4)) -- accelerazione minima pinze
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -205,9 +207,9 @@ function OnDispositionEnd()
|
|||||||
local BtlInfoId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or EgtGetCurrMachGroup() or GDB_ID.NULL
|
local BtlInfoId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or EgtGetCurrMachGroup() or GDB_ID.NULL
|
||||||
local nLoad90 = EgtGetInfo( BtlInfoId, 'LOAD90', 'i') or 0
|
local nLoad90 = EgtGetInfo( BtlInfoId, 'LOAD90', 'i') or 0
|
||||||
-- calcolo dati pinze
|
-- calcolo dati pinze
|
||||||
local AccPinze, AccMaxPinze, RidFeed, TempoAcc = CalcDinamicaPinze( HTrave, STrave, LBarra)
|
local AccPinze, AccMaxPinze, RidFeed, TempoAcc = CalcDinamicaPinze_NUM( HTrave, STrave, LBarra)
|
||||||
local AccPinz1, AccMaxPinz1, RidFeed1, TempoAcc1 = CalcDinamicaPinze( HTrave, STrave, LBarra - LTrave)
|
local AccPinz1, AccMaxPinz1, RidFeed1, TempoAcc1 = CalcDinamicaPinze_NUM( HTrave, STrave, LBarra - LTrave)
|
||||||
local AccPinz2, AccMaxPinz2, RidFeed2, TempoAcc2 = CalcDinamicaPinze( HTrave, STrave, LTrave)
|
local AccPinz2, AccMaxPinz2, RidFeed2, TempoAcc2 = CalcDinamicaPinze_NUM( HTrave, STrave, LTrave)
|
||||||
if IdTrave >= 0 then
|
if IdTrave >= 0 then
|
||||||
local sOut = '( SN='..IdTrave..' LBarra='..EmtLenToString( LBarra, 3)..' L='..EmtLenToString( LTrave, 3)..
|
local sOut = '( SN='..IdTrave..' LBarra='..EmtLenToString( LBarra, 3)..' L='..EmtLenToString( LTrave, 3)..
|
||||||
' H='..EmtLenToString( HTrave, 3)..' S='..EmtLenToString( STrave, 3)..' Acc='..EgtNumToString( TempoAcc, 1)..
|
' H='..EmtLenToString( HTrave, 3)..' S='..EmtLenToString( STrave, 3)..' Acc='..EgtNumToString( TempoAcc, 1)..
|
||||||
@@ -542,6 +544,7 @@ function OnMachiningEnd()
|
|||||||
EMT.PREVTOOL = EMT.TOOL
|
EMT.PREVTOOL = EMT.TOOL
|
||||||
EMT.PREVHEAD = EMT.HEAD
|
EMT.PREVHEAD = EMT.HEAD
|
||||||
EMT.PREVR3 = EMT.R3
|
EMT.PREVR3 = EMT.R3
|
||||||
|
EMT.PREVET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -673,22 +676,12 @@ function OnRapid()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- primo posizionamento
|
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||||
local MyZHome = EgtGetAxisHomePos( 'Z')
|
|
||||||
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
|
||||||
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
|
||||||
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
|
||||||
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
|
||||||
' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
|
|
||||||
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
|
|
||||||
EmtOutput( sOutPreMove)
|
|
||||||
EmtOutput( 'G101 ET1001')
|
|
||||||
EmtOutput( 'G101 ET2001')
|
|
||||||
end
|
|
||||||
|
|
||||||
if not EMT.LOAD then
|
local bGoToHome = false
|
||||||
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '-'), '%)', '-')
|
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
|
||||||
EmtOutput( '( *** ' .. sOut .. ' *** )')
|
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and sET == EMT.PREVET and ( abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then
|
||||||
|
bGoToHome = true
|
||||||
end
|
end
|
||||||
|
|
||||||
-- ricavo i dati per la lavorazione
|
-- ricavo i dati per la lavorazione
|
||||||
@@ -718,15 +711,44 @@ function OnRapid()
|
|||||||
sER = sER..EmtLenToString( EMT.TDIAM / 2, 3)
|
sER = sER..EmtLenToString( EMT.TDIAM / 2, 3)
|
||||||
end
|
end
|
||||||
|
|
||||||
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
|
||||||
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||||
|
|
||||||
|
-- primo posizionamento
|
||||||
|
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||||
|
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||||
|
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||||
|
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.FLAG2 == 1 then
|
||||||
|
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
|
||||||
|
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
EmtOutput( 'G101 ET1001')
|
||||||
|
EmtOutput( 'G101 ET2001')
|
||||||
|
end
|
||||||
|
|
||||||
|
if not EMT.LOAD then
|
||||||
|
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '-'), '%)', '-')
|
||||||
|
EmtOutput( '( *** ' .. sOut .. ' *** )')
|
||||||
|
end
|
||||||
|
|
||||||
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
||||||
if not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
|
if not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
|
||||||
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350)) and EMT.FLAG2 == 1 then
|
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
|
||||||
local sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
|
local sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
|
||||||
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
local sOutPreMove
|
||||||
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
|
if EMT.HEAD == 'H3' and bGoToHome then
|
||||||
|
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1pp, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
end
|
||||||
|
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
|
' B' .. EgtNumToString( EMT.R2, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
EmtOutput( sOutPreMove)
|
EmtOutput( sOutPreMove)
|
||||||
EmtOutput( 'G101 ET1001')
|
EmtOutput( 'G101 ET1001')
|
||||||
EmtOutput( 'G101 ET2001')
|
EmtOutput( 'G101 ET2001')
|
||||||
@@ -1094,28 +1116,6 @@ function FindNextTool()
|
|||||||
return sTool, sHead, sTcPos
|
return sTool, sHead, sTcPos
|
||||||
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, TempoAcc
|
|
||||||
end
|
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function CalcCharStatus( sCmd, bSkipPress)
|
function CalcCharStatus( sCmd, bSkipPress)
|
||||||
-- aperto
|
-- aperto
|
||||||
|
|||||||
+34
-29
@@ -31,7 +31,9 @@ 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 = 154000 -- feed massima pinze
|
EMT.FMAXPINZE = EgtClamp( MaxFeedPinze or 154000, 20000, 160000) -- feed massima pinze
|
||||||
|
EMT.MAXACC = MaxAcc or 4000 -- accelerazione massima pinze. In realtà è il tempo in millisecondi, quindi MAXACC corrisponde al tempo massimo per raggiungere la velocità desiderata
|
||||||
|
EMT.MINACC = MinAcc or 300 -- accelerazione minima pinze. In realtà è il tempo in millisecondi, quindi MINACC corrisponde al tempo massimo per raggiungere la velocità desiderata
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -223,9 +225,9 @@ function OnDispositionEnd()
|
|||||||
local HOverM = EMT.HOVM
|
local HOverM = EMT.HOVM
|
||||||
|
|
||||||
-- calcolo dati pinze
|
-- calcolo dati pinze
|
||||||
local TempAccPinze, TempMinAccPinze, RidFeed = CalcDinamicaPinze( HTrave, STrave, LBarra)
|
local TempAccPinze, TempMinAccPinze, RidFeed = CalcDinamicaPinze_TPA( HTrave, STrave, LBarra)
|
||||||
local TempAccPinz1, TempMinAccPinz1, RidFeed1 = CalcDinamicaPinze( HTrave, STrave, LBarra - LTrave)
|
local TempAccPinz1, TempMinAccPinz1, RidFeed1 = CalcDinamicaPinze_TPA( HTrave, STrave, LBarra - LTrave)
|
||||||
local TempAccPinz2, TempMinAccPinz2, RidFeed2 = CalcDinamicaPinze( HTrave, STrave, LTrave)
|
local TempAccPinz2, TempMinAccPinz2, RidFeed2 = CalcDinamicaPinze_TPA( HTrave, STrave, LTrave)
|
||||||
|
|
||||||
if IdTrave >= 0 then
|
if IdTrave >= 0 then
|
||||||
local sPrt = '( *** Part '.. EgtNumToString( IdTrave, 0) ..' ***)'
|
local sPrt = '( *** Part '.. EgtNumToString( IdTrave, 0) ..' ***)'
|
||||||
@@ -656,16 +658,28 @@ function OnRapid()
|
|||||||
bHeadFirst = false
|
bHeadFirst = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local bGoToHome = false
|
||||||
|
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
|
||||||
|
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and EMT.TCPOS == EMT.PREVTCPOS and ( abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then
|
||||||
|
bGoToHome = true
|
||||||
|
end
|
||||||
|
|
||||||
-- primo posizionamento
|
-- primo posizionamento
|
||||||
local MyZHome = EgtGetAxisHomePos( 'Z')
|
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||||
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||||
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||||
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.FLAG2 == 1 then
|
||||||
local sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
local sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
||||||
' P4=' .. EgtNumToString( EMT.R2pp, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1pp, EMT.DECMACRO) ..
|
' P4=' .. EgtNumToString( EMT.R2pp, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1pp, EMT.DECMACRO) ..
|
||||||
' P6=' .. EgtNumToString( EMT.PREVTCPOS, EMT.DECMACRO) .. ' P7=' .. EgtNumToString( EMT.PREVS, 0) ..
|
' P6=' .. EgtNumToString( EMT.PREVTCPOS, EMT.DECMACRO) .. ' P7=' .. EgtNumToString( EMT.PREVS, 0) ..
|
||||||
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||||
EmtOutput( sOutPreMove)
|
EmtOutput( sOutPreMove)
|
||||||
|
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
||||||
|
' P4=' .. EgtNumToString( 0, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1pp, EMT.DECMACRO) ..
|
||||||
|
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||||
|
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
EmtOutput( 'M101 P1=2')
|
EmtOutput( 'M101 P1=2')
|
||||||
EmtOutput( 'M101 P1=3')
|
EmtOutput( 'M101 P1=3')
|
||||||
end
|
end
|
||||||
@@ -677,8 +691,21 @@ function OnRapid()
|
|||||||
|
|
||||||
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
||||||
if not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
|
if not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
|
||||||
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350)) and EMT.FLAG2 == 1 then
|
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
|
||||||
local sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
local sOutPreMove
|
||||||
|
if EMT.HEAD == 'H3' and bGoToHome then
|
||||||
|
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
||||||
|
' P4=' .. EgtNumToString( 0, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1pp, EMT.DECMACRO) ..
|
||||||
|
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||||
|
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
||||||
|
' P4=' .. EgtNumToString( 0, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1, EMT.DECMACRO) ..
|
||||||
|
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||||
|
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
end
|
||||||
|
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
||||||
' P4=' .. EgtNumToString( EMT.R2, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1, EMT.DECMACRO) ..
|
' P4=' .. EgtNumToString( EMT.R2, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1, EMT.DECMACRO) ..
|
||||||
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||||
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||||
@@ -1054,28 +1081,6 @@ function FindNextTool()
|
|||||||
return sTool, sHead, sTcPos
|
return sTool, sHead, sTcPos
|
||||||
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 TempoAcc * 1000, MinTempoAcc * 1000, RidFeed
|
|
||||||
end
|
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function CalcCharStatus( sCmd, bSkipPress)
|
function CalcCharStatus( sCmd, bSkipPress)
|
||||||
-- aperto
|
-- aperto
|
||||||
|
|||||||
+136
-26
@@ -7,9 +7,6 @@ EgtEnableDebug( false)
|
|||||||
-- carico librerie
|
-- carico librerie
|
||||||
local BD = require( 'BeamData')
|
local BD = require( 'BeamData')
|
||||||
|
|
||||||
LONG_TOOL_MINLEN = 221
|
|
||||||
BIG_TOOL_DIAM = 300
|
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- *** GENERATION ***
|
-- *** GENERATION ***
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -118,7 +115,8 @@ function OnSimulStart()
|
|||||||
{ Grp = 'V', Sub = 'COLLISION', Name = 'VOL2'},
|
{ Grp = 'V', Sub = 'COLLISION', Name = 'VOL2'},
|
||||||
{ Grp = 'PV', Sub = 'COLLISION', Name = 'VOL'},
|
{ Grp = 'PV', Sub = 'COLLISION', Name = 'VOL'},
|
||||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'SIDE1'},
|
{ Grp = 'Base', Sub = 'COLLISION', Name = 'SIDE1'},
|
||||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'SIDE2'}}
|
{ Grp = 'Base', Sub = 'COLLISION', Name = 'SIDE2'},
|
||||||
|
{ Grp = 'C', Sub = 'COLLISION2', Name = 'C_TOP'}}
|
||||||
EgtOutLog( 'MCODET Objects :', 4)
|
EgtOutLog( 'MCODET Objects :', 4)
|
||||||
local nMcdNullCnt = 0
|
local nMcdNullCnt = 0
|
||||||
for i = 1, #McdData do
|
for i = 1, #McdData do
|
||||||
@@ -168,13 +166,13 @@ function OnSimulDispositionStart()
|
|||||||
-- Determino dimensioni del grezzo
|
-- Determino dimensioni del grezzo
|
||||||
local nSolId = EgtGetFirstNameInGroup( EgtGetFirstRawPart() or GDB_ID.NULL, 'RawSolid') or GDB_ID.NULL
|
local nSolId = EgtGetFirstNameInGroup( EgtGetFirstRawPart() or GDB_ID.NULL, 'RawSolid') or GDB_ID.NULL
|
||||||
local b3Sol = EgtGetBBoxGlob( nSolId, GDB_BB.STANDARD)
|
local b3Sol = EgtGetBBoxGlob( nSolId, GDB_BB.STANDARD)
|
||||||
EMT.LB = 0
|
EMT.LT = 0
|
||||||
EMT.SB = 0
|
EMT.ST = 0
|
||||||
EMT.HB = 0
|
EMT.HT = 0
|
||||||
if b3Sol then
|
if b3Sol then
|
||||||
EMT.LB = b3Sol:getDimX()
|
EMT.LT = b3Sol:getDimX()
|
||||||
EMT.SB = b3Sol:getDimY()
|
EMT.ST = b3Sol:getDimY()
|
||||||
EMT.HB = b3Sol:getDimZ()
|
EMT.HT = b3Sol:getDimZ()
|
||||||
end
|
end
|
||||||
-- Carico primo utensile sulla testa 1
|
-- Carico primo utensile sulla testa 1
|
||||||
local sTool, nTlen = FindFirstToolOnHead( 'H1')
|
local sTool, nTlen = FindFirstToolOnHead( 'H1')
|
||||||
@@ -558,14 +556,14 @@ function OnSimulToolDeselect()
|
|||||||
-- movimento scarico sega a catena
|
-- movimento scarico sega a catena
|
||||||
if EMT.HEAD == 'H3' then
|
if EMT.HEAD == 'H3' then
|
||||||
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||||
if EMT.HB > BeamHeightForFixRot then
|
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
|
||||||
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
|
-- raddrizzo asse B prima di ruotare il C
|
||||||
end
|
SimulMoveAxis( 'B', 0, MCH_SIM_STEP.COLLROT)
|
||||||
local dPosA = EgtGetAxisPos( 'A')
|
local dPosA = EgtGetAxisPos( 'A')
|
||||||
if abs( dPosA) < 0.1 then
|
if abs( dPosA) < 0.1 then
|
||||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 180, 0), MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, -180, 0), MCH_SIM_STEP.COLLROT)
|
||||||
else
|
else
|
||||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, 270), MCH_SIM_STEP.COLLROT)
|
||||||
end
|
end
|
||||||
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||||
-- movimento scarico rinvio
|
-- movimento scarico rinvio
|
||||||
@@ -608,7 +606,16 @@ function OnSimulToolDeselect()
|
|||||||
if EMT.NEXTHEAD ~= 'H3' and EMT.NEXTHEAD ~= 'H5' and EMT.NEXTHEAD ~= 'H6' then
|
if EMT.NEXTHEAD ~= 'H3' and EMT.NEXTHEAD ~= 'H5' and EMT.NEXTHEAD ~= 'H6' then
|
||||||
SimulMoveAxes( 'B', EgtIf( GetTCSet( EMT.TCPOS) == 1, 90, -90), MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
|
SimulMoveAxes( 'B', EgtIf( GetTCSet( EMT.TCPOS) == 1, 90, -90), MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
|
||||||
else
|
else
|
||||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
|
if EMT.NEXTHEAD == 'H3' then
|
||||||
|
local dPosA = EgtGetAxisPos( 'A')
|
||||||
|
if abs( dPosA) < 0.1 then
|
||||||
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, 270), MCH_SIM_STEP.RAPROT)
|
||||||
|
else
|
||||||
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, -180, 0), MCH_SIM_STEP.COLLROT)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- se segue lama, carico utensile di default
|
-- se segue lama, carico utensile di default
|
||||||
if EMT.NEXTHEAD == 'H2' then
|
if EMT.NEXTHEAD == 'H2' then
|
||||||
@@ -785,13 +792,25 @@ function OnSimulMoveStart()
|
|||||||
VerifyVStroke( EMT.A2)
|
VerifyVStroke( EMT.A2)
|
||||||
-- se inizio lavorazione
|
-- se inizio lavorazione
|
||||||
if EMT.MCHFIRST then
|
if EMT.MCHFIRST then
|
||||||
|
|
||||||
|
local bGoToHome = false
|
||||||
|
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
|
||||||
|
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and EMT.TOOL == EMT.PREVTOOL and abs( EMT.R3p - EMT.R3) < 100 * GEO.EPS_SMALL and ( abs( EMT.R2p - EMT.R2) > 25 or abs( EMT.R1p - EMT.R1) > 25) then
|
||||||
|
bGoToHome = true
|
||||||
|
end
|
||||||
|
|
||||||
EgtOutText( '')
|
EgtOutText( '')
|
||||||
EMT.MCHFIRST = false
|
EMT.MCHFIRST = false
|
||||||
local bZmax = ( EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
local bZmax = ( EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||||
-- con pezzi alti aggiorno gli assi rotanti prima di muovermi sopra il pezzo
|
-- con pezzi alti aggiorno gli assi rotanti prima di muovermi sopra il pezzo
|
||||||
if not EMT.LOAD and EMT.MOVE == 0 and ( EMT.HB > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TOTLEN > 350)) and EMT.FLAG2 == 1 then
|
if not EMT.LOAD and EMT.MOVE == 0 and ( EMT.HEAD == 'H3' or ( EMT.HEAD == 'H1' and EMT.TOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
|
||||||
-- se motosega mi muovo a X di sicurezza per ruotare
|
-- se motosega mi muovo a X di sicurezza per ruotare, prima si raddrizza B e poi C in posizione
|
||||||
if ( EMT.HEAD == 'H3' or ( bZmax and EMT.TOTLEN > 200)) then
|
if EMT.HEAD == 'H3' or bGoToHome then
|
||||||
|
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
|
||||||
|
SimulMoveAxis( 'B', 0, MCH_SIM_STEP.COLLROT)
|
||||||
|
SimulMoveAxis( 'C', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||||
|
SimulMoveAxis( 'B', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
|
elseif ( bZmax and EMT.TOTLEN > 200) then
|
||||||
SimulMoveAxes( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID, 'C', EMT.R1, MCH_SIM_STEP.COLLROT, 'B', EMT.R2, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID, 'C', EMT.R1, MCH_SIM_STEP.COLLROT, 'B', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -916,14 +935,14 @@ function ExecAuxCmd( sCmd)
|
|||||||
elseif Cmd[1] == '11' then
|
elseif Cmd[1] == '11' then
|
||||||
local dPY = MaxOpen
|
local dPY = MaxOpen
|
||||||
if Cmd[2] ~= '0' then
|
if Cmd[2] ~= '0' then
|
||||||
dPY = EgtIf( EMT.ROT == -1, EMT.HB, EMT.SB)
|
dPY = EgtIf( EMT.ROT == -1, EMT.HT, EMT.ST)
|
||||||
end
|
end
|
||||||
SimulMoveAxis( 'PY', dPY, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'PY', dPY, MCH_SIM_STEP.RAPID)
|
||||||
SetPYLight( Cmd[2] ~= '0')
|
SetPYLight( Cmd[2] ~= '0')
|
||||||
elseif Cmd[1] == '12' then
|
elseif Cmd[1] == '12' then
|
||||||
local dPV = MaxOpen
|
local dPV = MaxOpen
|
||||||
if Cmd[2] ~= '0' then
|
if Cmd[2] ~= '0' then
|
||||||
dPV = EgtIf( EMT.ROT == -1, EMT.HB, EMT.SB)
|
dPV = EgtIf( EMT.ROT == -1, EMT.HT, EMT.ST)
|
||||||
end
|
end
|
||||||
SimulMoveAxis( 'PV', dPV, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'PV', dPV, MCH_SIM_STEP.RAPID)
|
||||||
SetPVLight( Cmd[2] ~= '0')
|
SetPVLight( Cmd[2] ~= '0')
|
||||||
@@ -990,7 +1009,7 @@ function ExecUnloading()
|
|||||||
-- li sposto per lasciare spazio al nuovo pezzo
|
-- li sposto per lasciare spazio al nuovo pezzo
|
||||||
local nId = EgtGetFirstInGroup( nVmGrpId)
|
local nId = EgtGetFirstInGroup( nVmGrpId)
|
||||||
while nId do
|
while nId do
|
||||||
EgtMove( nId, Vector3d( 0, EgtIf( BD.RIGHT_LOAD, ( EMT.SB + 50.0), -( EMT.SB + 50.0)), 0), GDB_RT.GLOB)
|
EgtMove( nId, Vector3d( 0, EgtIf( BD.RIGHT_LOAD, ( EMT.ST + 50.0), -( EMT.ST + 50.0)), 0), GDB_RT.GLOB)
|
||||||
nId = EgtGetNext( nId)
|
nId = EgtGetNext( nId)
|
||||||
end
|
end
|
||||||
-- creo un nuovo layer e vi inserisco il nuovo pezzo
|
-- creo un nuovo layer e vi inserisco il nuovo pezzo
|
||||||
@@ -1208,6 +1227,18 @@ local FALL_T = 2 * ESTIMATION_RAPID_COEFF -- s
|
|||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnEstimStart()
|
function OnEstimStart()
|
||||||
EMT.INCHES = not EgtUiUnitsAreMM() -- unità di misura mm/inches
|
EMT.INCHES = not EgtUiUnitsAreMM() -- unità di misura mm/inches
|
||||||
|
|
||||||
|
-- TPA
|
||||||
|
if NumericalControl == 'TPA' then
|
||||||
|
EMT.FMAXPINZE = EgtClamp( MaxFeedPinze or 154000, 20000, 160000) -- feed massima pinze
|
||||||
|
EMT.MAXACC = MaxAcc or 4000 -- accelerazione massima pinze. In realtà è il tempo in millisecondi, quindi MAXACC corrisponde al tempo massimo per raggiungere la velocità desiderata
|
||||||
|
EMT.MINACC = MinAcc or 300 -- accelerazione minima pinze. In realtà è il tempo in millisecondi, quindi MINACC corrisponde al tempo massimo per raggiungere la velocità desiderata
|
||||||
|
-- NUM_PLUS e NUM
|
||||||
|
else
|
||||||
|
EMT.FMAXPINZE = EgtClamp( MaxFeedPinze or 154000, 20000, 160000) -- feed massima pinze
|
||||||
|
EMT.MAXACC = MaxAcc or ( EMT.FMAXPINZE / ( 60 * 0.3)) -- accelerazione massima pinze
|
||||||
|
EMT.MINACC = MinAcc or ( EMT.FMAXPINZE / ( 60 * 4)) -- accelerazione minima pinze
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -1293,6 +1324,15 @@ function OnEstimDispositionEnd()
|
|||||||
EMT.OPEISDISP = false
|
EMT.OPEISDISP = false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function OnEstimRawMoveData()
|
||||||
|
-- se start del pezzo
|
||||||
|
if IsStartOrRestPhase( EMT.PHASE) then
|
||||||
|
EMT.SPLIT = false
|
||||||
|
end
|
||||||
|
OnRawMoveData()
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function OnEstimToolSelect()
|
function OnEstimToolSelect()
|
||||||
-- reset indice utensile in tabella lunghezze
|
-- reset indice utensile in tabella lunghezze
|
||||||
@@ -1349,6 +1389,12 @@ function OnEstimMachiningEnd()
|
|||||||
EMT.TLE_NAME = nil
|
EMT.TLE_NAME = nil
|
||||||
EMT.TLE_TIME = nil
|
EMT.TLE_TIME = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
|
||||||
|
EMT.MCHSPLIT = ( EMT.MCHUSERNOTES:find( 'Split;', 1, true) ~= nil)
|
||||||
|
if EMT.MCHSPLIT then
|
||||||
|
EMT.SPLIT = true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -1479,11 +1525,11 @@ function OnEstimRapid()
|
|||||||
EMT.MCHEXTLEN = EMT.MCHEXTLEN + dLen
|
EMT.MCHEXTLEN = EMT.MCHEXTLEN + dLen
|
||||||
-- calcolo tempo
|
-- calcolo tempo
|
||||||
local dTime = RAPID_MIN_T
|
local dTime = RAPID_MIN_T
|
||||||
local dT1 = abs( dL1) / RAPID_X_FEED * 60
|
local dT1 = CalcMoveTime( abs( dL1), RAPID_X_FEED, EMT.SPLIT)
|
||||||
if dT1 > dTime then dTime = dT1 end
|
if dT1 > dTime then dTime = dT1 end
|
||||||
local dT2 = abs( dL2) / RAPID_Y_FEED * 60
|
local dT2 = CalcMoveTime( abs( dL2), EMT.FMAXPINZE, EMT.SPLIT)
|
||||||
if dT2 > dTime then dTime = dT2 end
|
if dT2 > dTime then dTime = dT2 end
|
||||||
local dT3 = abs( dL3) / RAPID_Z_FEED * 60
|
local dT3 = CalcMoveTime( abs( dL3), RAPID_Z_FEED, EMT.SPLIT)
|
||||||
if dT3 > dTime then dTime = dT3 end
|
if dT3 > dTime then dTime = dT3 end
|
||||||
local dT4 = abs( dR1) / RAPID_C_FEED * 60
|
local dT4 = abs( dR1) / RAPID_C_FEED * 60
|
||||||
if dT4 > dTime then dTime = dT4 end
|
if dT4 > dTime then dTime = dT4 end
|
||||||
@@ -1505,7 +1551,7 @@ function OnEstimLinear()
|
|||||||
local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3)
|
local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3)
|
||||||
EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen
|
EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen
|
||||||
-- calcolo tempo
|
-- calcolo tempo
|
||||||
local dTime = dLen / EMT.F * 60
|
local dTime = CalcMoveTime( dLen, EMT.F, EMT.SPLIT)
|
||||||
EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime
|
EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime
|
||||||
EgtOutLog( string.format( ' G1 Len=%.0f Time=%.2f', dLen, dTime), 5)
|
EgtOutLog( string.format( ' G1 Len=%.0f Time=%.2f', dLen, dTime), 5)
|
||||||
-- aggiorno valori come precedenti
|
-- aggiorno valori come precedenti
|
||||||
@@ -1652,6 +1698,70 @@ function GetParkT()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function CalcDinamicaPinze_TPA( dH, dS, dL)
|
||||||
|
local MinTempoAcc = EMT.MINACC -- [ms] ~300
|
||||||
|
local MaxTempoAcc = EMT.MAXACC -- [ms] ~4000
|
||||||
|
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 = EgtClamp( ( Massa * FMaxPinze) / ( 60 * ForzaAttrito), MinTempoAcc, MaxTempoAcc)
|
||||||
|
local RidFeed = 100 / Massa * 100
|
||||||
|
if RidFeed > 100 then
|
||||||
|
RidFeed = 100
|
||||||
|
elseif RidFeed < 10 then
|
||||||
|
RidFeed = 10
|
||||||
|
end
|
||||||
|
return TempoAcc, MinTempoAcc, RidFeed
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function CalcDinamicaPinze_NUM( dH, dS, dL)
|
||||||
|
local KgMtCubo= WoodDensity or 550 -- densità legno [Kg / metro cubo]
|
||||||
|
local Massa = ( dH * dS * dL * KgMtCubo ) / 1e9 -- massa [Kg]
|
||||||
|
local FMaxPinze = EMT.FMAXPINZE -- Feed massima pinze [mm/min]
|
||||||
|
local ForzaAttrito = 350 * 9.8 * 0.2 -- Forza chiusura pinze [Kgf] * g * Coeff_Attrito -> [N]
|
||||||
|
local TempoAcc = ( ( Massa * FMaxPinze) / ( 60 * ForzaAttrito) / 1000)
|
||||||
|
local AccMaxPinze = EMT.MAXACC
|
||||||
|
local AccPinze = EgtClamp( FMaxPinze / ( 60 * TempoAcc), EMT.MINACC, EMT.MAXACC)
|
||||||
|
local RidFeed = 100 / Massa * 100
|
||||||
|
if RidFeed > 100 then
|
||||||
|
RidFeed = 100
|
||||||
|
elseif RidFeed < 10 then
|
||||||
|
RidFeed = 10
|
||||||
|
end
|
||||||
|
return AccPinze, AccMaxPinze, RidFeed, TempoAcc
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function CalcMoveTime( dPathLen, dFeed, bIsSplitted)
|
||||||
|
local dTime
|
||||||
|
local dFeedInSec = dFeed / 60
|
||||||
|
|
||||||
|
if NumericalControl == 'TPA' then
|
||||||
|
local dTempoAcc, _, _ = CalcDinamicaPinze_TPA( EMT.HT, EMT.ST, EgtIf( bIsSplitted, EMT.LT, EMT.LB))
|
||||||
|
dTempoAcc = dTempoAcc / 1000
|
||||||
|
-- se si raggiunge la velocità massima
|
||||||
|
if dPathLen >= dFeedInSec * dTempoAcc then
|
||||||
|
dTime = dTempoAcc * 2 + ( ( dPathLen - dFeedInSec * dTempoAcc) / dFeedInSec)
|
||||||
|
else
|
||||||
|
dTime = 2 * sqrt( (dPathLen * dTempoAcc) / dFeedInSec)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
local dAcc, _, _, _ = CalcDinamicaPinze_NUM( EMT.HT, EMT.ST, EgtIf( bIsSplitted, EMT.LT, EMT.LB))
|
||||||
|
-- Caso 1: dFeed raggiunta
|
||||||
|
if dPathLen >= ( dFeedInSec ^ 2) / dAcc then
|
||||||
|
dTime = ( dFeedInSec / dAcc) + ( dPathLen / dFeedInSec)
|
||||||
|
-- Caso 2: dFeed non raggiunta
|
||||||
|
else
|
||||||
|
dTime = 2 * sqrt( dPathLen / dAcc)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return dTime
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- *** END GENERAL ***
|
-- *** END GENERAL ***
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|||||||
+6
-2
@@ -1642,7 +1642,9 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
-- * deve effettivamente spostarsi
|
-- * deve effettivamente spostarsi
|
||||||
-- * non si arriva da gestione passo del pellegrino
|
-- * non si arriva da gestione passo del pellegrino
|
||||||
-- * se riesce a raggiungere la posizione con le corse a disposizione per come sono posizionate le morse attualmente
|
-- * se riesce a raggiungere la posizione con le corse a disposizione per come sono posizionate le morse attualmente
|
||||||
if ( dYDeltaI - dVDeltaF) + 10 * GEO.EPS_SMALL >= MyMinY - MaxV and abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL and not EMC.PILGRIMSTEP and
|
if ( dYDeltaI - dVDeltaF) + 10 * GEO.EPS_SMALL >= MyMinY - MaxV and
|
||||||
|
( abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL or not EMC.VDELTA) and
|
||||||
|
not EMC.PILGRIMSTEP and
|
||||||
( dVDeltaF - dVDeltaI > MinV - dVPosI + MyMinY - dYPosI) then
|
( dVDeltaF - dVDeltaI > MinV - dVPosI + MyMinY - dYPosI) then
|
||||||
table.insert( vCmd, { 0, 'Direct-V-Y'})
|
table.insert( vCmd, { 0, 'Direct-V-Y'})
|
||||||
-- se l'altra morsa non era in presa, vado a pinzare il pezzo
|
-- se l'altra morsa non era in presa, vado a pinzare il pezzo
|
||||||
@@ -1747,7 +1749,9 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
-- * deve effettivamente spostarsi
|
-- * deve effettivamente spostarsi
|
||||||
-- * non si arriva da gestione passo del pellegrino
|
-- * non si arriva da gestione passo del pellegrino
|
||||||
-- * se riesce a raggiungere la posizione con le corse a disposizione per come sono posizionate le morse attualmente
|
-- * se riesce a raggiungere la posizione con le corse a disposizione per come sono posizionate le morse attualmente
|
||||||
elseif ( dYDeltaF - dVDeltaI) + 10 * GEO.EPS_SMALL >= MyMinY - MaxV and abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL and not EMC.PILGRIMSTEP and
|
elseif ( dYDeltaF - dVDeltaI) + 10 * GEO.EPS_SMALL >= MyMinY - MaxV and
|
||||||
|
( abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL or not EMC.YDELTA) and
|
||||||
|
not EMC.PILGRIMSTEP and
|
||||||
( dYDeltaF - dYDeltaI < MaxY - dYPosI + MaxV - dVPosI) then
|
( dYDeltaF - dYDeltaI < MaxY - dYPosI + MaxV - dVPosI) then
|
||||||
table.insert( vCmd, { 0, 'Direct-Y-V'})
|
table.insert( vCmd, { 0, 'Direct-Y-V'})
|
||||||
-- se l'altra morsa non era in presa, vado a pinzare il pezzo
|
-- se l'altra morsa non era in presa, vado a pinzare il pezzo
|
||||||
|
|||||||
@@ -1,5 +1,29 @@
|
|||||||
==== Common_FAST Update Log ====
|
==== Common_FAST Update Log ====
|
||||||
|
|
||||||
|
Versione 2.7k1 (10/11/2025)
|
||||||
|
- (GEN) Corretto set variabili info utensile prima del movimento in home in caso di pezzi alti per NUM/NUM_PLUS.
|
||||||
|
|
||||||
|
Versione 2.7j2 (08/10/2025)
|
||||||
|
- (SIM-GEN) Quando si scarica motosega, si raddrizza prima l'asse B e poi si muove il C. Ora sempre e non solo se pezzo alto.
|
||||||
|
|
||||||
|
Versione 2.7j1 (06/10/2025)
|
||||||
|
- (SIM-GEN) Quando si scarica motosega, si raddrizza prima l'asse B e poi si muove il C.
|
||||||
|
- (MLDE-SIM) Controllo collisione tra utensile e TOP testa C. Serve CAM5 2.7j1
|
||||||
|
|
||||||
|
Versione 2.7i3 (23/09/2025)
|
||||||
|
- (MLDE-ALL) Spostate costanti dimensioni utensili in MLDE.
|
||||||
|
|
||||||
|
Versione 2.7i2 (17/09/2025)
|
||||||
|
- (EST) Stima tempi considerando accelerazioni
|
||||||
|
- (SIM) Prelievo e deposito motosega con gli angoli comunicati da Essetre
|
||||||
|
|
||||||
|
Versione 2.7i1 (08/09/2025)
|
||||||
|
- (SIM-GEN) Se lavorazione precedente e successiva con motosega e si cambiano assi rotanti, vado in parcheggio per ruotare. Ticket#1844
|
||||||
|
- (SIM-GEN) Per NEWCLAMPING, corretto un caso di riposizionemento allo scarico dove la pinza V poteva andare in posizione direttamente, ma cercava di fare passo pellegrino. Ticket#2572
|
||||||
|
|
||||||
|
Versione 2.7g1 (01/07/2025)
|
||||||
|
- (GEN) Aggiunti parametri FMAXPINZE, MAXACC, MINACC configurabili da TS3. Ticket#2052
|
||||||
|
|
||||||
Versione 2.7f3 (26/06/2025)
|
Versione 2.7f3 (26/06/2025)
|
||||||
- (SIM-GEN) Aggiunti 10mm di sicurezza in caso di primo pinzaggio per stare oltre tolleranza riqualifica laser di 50mm. Ticket#2504
|
- (SIM-GEN) Aggiunti 10mm di sicurezza in caso di primo pinzaggio per stare oltre tolleranza riqualifica laser di 50mm. Ticket#2504
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
local InfoCommon_STD_PP = {
|
local InfoCommon_STD_PP = {
|
||||||
NAME = 'Common_FAST', -- nome script PP standard
|
NAME = 'Common_FAST', -- nome script PP standard
|
||||||
VERSION = '2.7f3', -- versione script
|
VERSION = '2.7k1', -- versione script
|
||||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user