Compare commits
100 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 211b59c79b | |||
| f8464fa0de | |||
| 7a6bdaf637 | |||
| 73881f4042 | |||
| 92ab99cde9 | |||
| 4496302ec3 | |||
| c85df70b61 | |||
| a8f142e8d7 | |||
| 9bebdcc4e7 | |||
| f8436a983a | |||
| d7e870cf1e | |||
| 82f0eab4ae | |||
| 04ab01cba8 | |||
| 536352b802 | |||
| 1484fb761b | |||
| 660209bdea | |||
| 3867f7b7ed | |||
| bc2388dd43 | |||
| 86d9b2ec3d | |||
| 2221224e9a | |||
| 0b7fefd0fd | |||
| 51e2180b15 | |||
| ee7087b003 | |||
| be993f47df | |||
| 2522967e95 | |||
| 40e049dbb5 | |||
| 270039d7e3 | |||
| 9241a53f97 | |||
| ff984c30b4 | |||
| 001fd45f0c | |||
| 24e73d886d | |||
| f3e7254b48 | |||
| 3cf27288f3 | |||
| fce0068d45 | |||
| 07a261bfce | |||
| b0a7be8454 | |||
| 18cf79bb82 | |||
| 4986b48e31 | |||
| 523c5a99ce | |||
| db68ad1a90 | |||
| 9259b6e633 | |||
| 0c2387c901 | |||
| 24ea5db4f5 | |||
| fb3d203f77 | |||
| 9fab4f9330 | |||
| f1faaa1eda | |||
| c9469ee7e2 | |||
| 108c6d2d8e | |||
| 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 | |||
| e6ab77e59a | |||
| 958b5bbc3a | |||
| f223006bc7 | |||
| 659aa80001 | |||
| 6db40176a2 | |||
| 0fa80629f6 | |||
| 9eb362d312 | |||
| 912bf4f072 | |||
| 717a03a549 | |||
| 1a68f3e543 | |||
| d5165571da | |||
| e2a5b11cfa | |||
| bd80cd5500 | |||
| 9bb3b85930 | |||
| 4c7380986c | |||
| 837a607ceb | |||
| d6f6b91bbb | |||
| 8a35315165 | |||
| 98156b21eb | |||
| 2bfb1b4b27 | |||
| bf0c9460c6 | |||
| a721fda298 | |||
| 47516ad370 | |||
| 09f5c56ac9 | |||
| 9da3bb88e1 |
+67
-34
@@ -6,7 +6,7 @@ local INFO_STD_PP = require( 'Version')
|
|||||||
local BD = require( 'BeamData')
|
local BD = require( 'BeamData')
|
||||||
|
|
||||||
-- Variabili di modulo
|
-- Variabili di modulo
|
||||||
local CSP_INFO = INFO_STD_PP.NAME..' ver.'..INFO_STD_PP.VERSION..' by EgalWare s.r.l.'
|
local CSP_INFO = INFO_STD_PP.NAME..'_'..NumericalControl..' ver.'..INFO_STD_PP.VERSION..' by EgalWare s.r.l.'
|
||||||
local MACHINE_INFO = MACH_NAME..' ver.'..PP_VER
|
local MACHINE_INFO = MACH_NAME..' ver.'..PP_VER
|
||||||
local TEST_USE = false
|
local TEST_USE = false
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -53,6 +55,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
|
||||||
EmtOutput( 'M28')
|
EmtOutput( 'M28')
|
||||||
@@ -104,6 +107,7 @@ function OnProgramEnd()
|
|||||||
EMT.FALL = nil
|
EMT.FALL = 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')
|
||||||
@@ -181,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
|
||||||
@@ -250,9 +250,9 @@ function OnDispositionEnd()
|
|||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
-- altrimenti recupero rimanenza
|
-- altrimenti recupero rimanenza
|
||||||
else
|
else
|
||||||
EmtOutput( 'G112 EC1'..' Y'..EmtLenToString( LoadT, 3).. ' EY'..EmtLenToString( EMT.YPOS, 3)..' EV'..EmtLenToString( ParkV, 3) ..' EF'..GetFmaxClamp())
|
EmtOutput( 'G112 EC1'..' Y'..EmtLenToString( EMT.TPOS, 3).. ' EY'..EmtLenToString( EMT.YPOS, 3)..' EV'..EmtLenToString( ParkV, 3) ..' EF'..GetFmaxClamp())
|
||||||
-- aggiorno dati aggancio carrelli alla trave
|
-- aggiorno dati aggancio carrelli alla trave
|
||||||
EMT.YDELTA = EMT.YPOS - LoadT
|
EMT.YDELTA = EMT.YPOS - EMT.TPOS
|
||||||
EMT.VDELTA = nil
|
EMT.VDELTA = nil
|
||||||
end
|
end
|
||||||
-- eventuale preparazione per rotazione immediata
|
-- eventuale preparazione per rotazione immediata
|
||||||
@@ -496,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
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -509,6 +510,7 @@ function OnPathStart()
|
|||||||
-- salvo precedenti rotanti
|
-- salvo precedenti rotanti
|
||||||
EMT.R1pp = EMT.R1p
|
EMT.R1pp = EMT.R1p
|
||||||
EMT.R2pp = EMT.R2p
|
EMT.R2pp = EMT.R2p
|
||||||
|
EMT.R3pp = EMT.R3p
|
||||||
|
|
||||||
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
||||||
EmtResetPrev()
|
EmtResetPrev()
|
||||||
@@ -608,6 +610,9 @@ function OnRapid()
|
|||||||
MyBackupAxes()
|
MyBackupAxes()
|
||||||
-- se primo movimento della lavorazione, gestione speciale
|
-- se primo movimento della lavorazione, gestione speciale
|
||||||
if EMT.MCHFIRST and not EMT.OPEISDISP then
|
if EMT.MCHFIRST and not EMT.OPEISDISP then
|
||||||
|
-- primo posizionamento
|
||||||
|
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||||
|
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||||
-- decido se muovere prima testa o carrelli (standard prima testa)
|
-- decido se muovere prima testa o carrelli (standard prima testa)
|
||||||
local bHeadFirst = true
|
local bHeadFirst = true
|
||||||
local sLateG101
|
local sLateG101
|
||||||
@@ -626,15 +631,31 @@ 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)
|
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 or 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)
|
||||||
|
|
||||||
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||||
if 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
|
||||||
|
-- se ho ancora motosega, si setta già asse C, altrimenti asse C per andare in home
|
||||||
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' .. EmtLenToString( 0, 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 ET1001')
|
||||||
EmtOutput( 'G101 ET2001')
|
EmtOutput( 'G101 ET2001')
|
||||||
end
|
end
|
||||||
@@ -644,18 +665,27 @@ 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 ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
if EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then
|
||||||
local sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
|
|
||||||
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
|
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
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( 'G101 ET1001')
|
||||||
|
EmtOutput( 'G101 ET2001')
|
||||||
|
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
||||||
|
elseif 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) or bGoToHome) and EMT.FLAG2 == 1 then
|
||||||
|
local sOutPreMove
|
||||||
|
if EMT.HEAD == 'H3' and bGoToHome then
|
||||||
|
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')
|
||||||
@@ -845,13 +875,13 @@ function OnRapid()
|
|||||||
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 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 sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||||
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||||
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..' B=' .. EgtNumToString( dBAxis, 3) ..
|
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..' B' .. EgtNumToString( dBAxis, 3) ..
|
||||||
' C=' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
' C' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
EmtOutput( 'G101 ET1001')
|
EmtOutput( 'G101 ET1001')
|
||||||
EmtOutput( 'G101 ET2001')
|
EmtOutput( 'G101 ET2001')
|
||||||
sOut = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. EmtGetAxis( 'L3') ..' B=' .. EgtNumToString( dBAxis, 3) ..
|
sOut = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. EmtGetAxis( 'L3') ..' B' .. EgtNumToString( dBAxis, 3) ..
|
||||||
' C=' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
' C' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
EmtOutput( 'G101 ET1001')
|
EmtOutput( 'G101 ET1001')
|
||||||
EmtOutput( 'G101 ET2001')
|
EmtOutput( 'G101 ET2001')
|
||||||
@@ -1318,7 +1348,7 @@ function PrepareUnload( sCmd)
|
|||||||
table.insert( EMT.AUXCMD, sMsg)
|
table.insert( EMT.AUXCMD, sMsg)
|
||||||
if Cmd[2] == 'V' then
|
if Cmd[2] == 'V' then
|
||||||
-- se non è ultima fase c'è una barra sulla pinza Y (1)
|
-- se non è ultima fase c'è una barra sulla pinza Y (1)
|
||||||
local sEE = EgtIf( EMT.PHASE == EgtGetPhaseCount(), '0', '1')
|
local sEE = EgtIf( EMT.PHASE == EgtGetPhaseCount() or IsEnd2Phase( EMT.PHASE), '0', '1')
|
||||||
local sOut = 'G111 '..Cmd[2]..Cmd[3]..' EC141 ED83 EE'..sEE..' EF'..GetFmaxClamp()
|
local sOut = 'G111 '..Cmd[2]..Cmd[3]..' EC141 ED83 EE'..sEE..' EF'..GetFmaxClamp()
|
||||||
table.insert( EMT.AUXSTR, sOut)
|
table.insert( EMT.AUXSTR, sOut)
|
||||||
end
|
end
|
||||||
@@ -1327,7 +1357,7 @@ function PrepareUnload( sCmd)
|
|||||||
table.insert( EMT.AUXCMD, sMsg)
|
table.insert( EMT.AUXCMD, sMsg)
|
||||||
if Cmd[4] == 'V' then
|
if Cmd[4] == 'V' then
|
||||||
-- se non è ultima fase c'è una barra sulla pinza Y (1)
|
-- se non è ultima fase c'è una barra sulla pinza Y (1)
|
||||||
local sEAB = EgtIf( EMT.PHASE == EgtGetPhaseCount(), '111', '112')
|
local sEAB = EgtIf( EMT.PHASE == EgtGetPhaseCount() or IsEnd2Phase( EMT.PHASE), '111', '112')
|
||||||
local sOut = 'G111 '..Cmd[4]..Cmd[5]..' EA'..sEAB..' EB'..sEAB..' EC142 ED141 EE2 EF'..GetFmaxClamp()
|
local sOut = 'G111 '..Cmd[4]..Cmd[5]..' EA'..sEAB..' EB'..sEAB..' EC142 ED141 EE2 EF'..GetFmaxClamp()
|
||||||
table.insert( EMT.AUXSTR, sOut)
|
table.insert( EMT.AUXSTR, sOut)
|
||||||
EMT.U_STD = true
|
EMT.U_STD = true
|
||||||
@@ -1487,10 +1517,13 @@ function PreparePostRotation( sCmd)
|
|||||||
elseif nVDelta > 0 then
|
elseif nVDelta > 0 then
|
||||||
EMT.YDELTA = nil
|
EMT.YDELTA = nil
|
||||||
EMT.VDELTA = nVDelta
|
EMT.VDELTA = nVDelta
|
||||||
end
|
end
|
||||||
local sYLoad = ' Y'..EmtLenToString( LoadT)
|
local sYLoad = ' Y'..EmtLenToString( LoadT)
|
||||||
local sOut = 'G111'..sYLoad..' EA76'..EMT.SB..' EE0 EF'..EmtLenToString( EMT.FMAXPINZE,0)..' ET1'
|
local sOut = 'G111'..sYLoad..' EA76'..EMT.SB..' EE0 EF'..EmtLenToString( EMT.FMAXPINZE,0)..' ET1'
|
||||||
table.insert( EMT.AUXSTR, sOut)
|
table.insert( EMT.AUXSTR, sOut)
|
||||||
|
-- setto parametri di pinzaggio reali
|
||||||
|
EMT.SA = ' EA110'
|
||||||
|
EMT.SE = ' EE1'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1538,7 +1571,7 @@ function MyAdjustLinearAxes()
|
|||||||
elseif EMT.HEAD ~= 'H3' then
|
elseif EMT.HEAD ~= 'H3' then
|
||||||
local Len = EMT.TLEN + EgtIf( EMT.HEAD == 'H1', MillOffs, abs( SawOffs))
|
local Len = EMT.TLEN + EgtIf( EMT.HEAD == 'H1', MillOffs, abs( SawOffs))
|
||||||
local LenRef = MillOffs
|
local LenRef = MillOffs
|
||||||
vtE = Vector3d( EMT.EXTR) * Len - Z_AX() * LenRef
|
vtE = Vector3d( EMT.TDIR) * Len - Z_AX() * LenRef
|
||||||
else
|
else
|
||||||
local LenAux = ( EMT.TDIST or ChSawLen) + MillOffs
|
local LenAux = ( EMT.TDIST or ChSawLen) + MillOffs
|
||||||
local LenRef = MillOffs
|
local LenRef = MillOffs
|
||||||
|
|||||||
+75
-60
@@ -6,7 +6,7 @@ local INFO_STD_PP = require( 'Version')
|
|||||||
local BD = require( 'BeamData')
|
local BD = require( 'BeamData')
|
||||||
|
|
||||||
-- Variabili di modulo
|
-- Variabili di modulo
|
||||||
local CSP_INFO = INFO_STD_PP.NAME..' ver.'..INFO_STD_PP.VERSION..' by EgalWare s.r.l.'
|
local CSP_INFO = INFO_STD_PP.NAME..'_'..NumericalControl..' ver.'..INFO_STD_PP.VERSION..' by EgalWare s.r.l.'
|
||||||
local MACHINE_INFO = MACH_NAME..' ver.'..PP_VER
|
local MACHINE_INFO = MACH_NAME..' ver.'..PP_VER
|
||||||
local TEST_USE = false
|
local TEST_USE = false
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -53,6 +55,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
|
||||||
EmtOutput( 'M28')
|
EmtOutput( 'M28')
|
||||||
@@ -108,6 +111,7 @@ function OnProgramEnd()
|
|||||||
EMT.FALL = nil
|
EMT.FALL = 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')
|
||||||
@@ -203,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)..
|
||||||
@@ -269,9 +273,9 @@ function OnDispositionEnd()
|
|||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
-- altrimenti recupero rimanenza
|
-- altrimenti recupero rimanenza
|
||||||
else
|
else
|
||||||
EmtOutput( 'G112 EC1'..' Y'..EmtLenToString( LoadT, 3).. ' EY'..EmtLenToString( EMT.YPOS, 3)..' EV'..EmtLenToString( ParkV, 3) ..' EF'..GetFmaxClamp())
|
EmtOutput( 'G112 EC1'..' Y'..EmtLenToString( EMT.TPOS, 3).. ' EY'..EmtLenToString( EMT.YPOS, 3)..' EV'..EmtLenToString( ParkV, 3) ..' EF'..GetFmaxClamp())
|
||||||
-- aggiorno dati aggancio carrelli alla trave
|
-- aggiorno dati aggancio carrelli alla trave
|
||||||
EMT.YDELTA = EMT.YPOS - LoadT
|
EMT.YDELTA = EMT.YPOS - EMT.TPOS
|
||||||
EMT.VDELTA = nil
|
EMT.VDELTA = nil
|
||||||
end
|
end
|
||||||
-- eventuale preparazione per rotazione immediata
|
-- eventuale preparazione per rotazione immediata
|
||||||
@@ -540,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
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -553,6 +558,7 @@ function OnPathStart()
|
|||||||
-- salvo precedenti rotanti
|
-- salvo precedenti rotanti
|
||||||
EMT.R1pp = EMT.R1p
|
EMT.R1pp = EMT.R1p
|
||||||
EMT.R2pp = EMT.R2p
|
EMT.R2pp = EMT.R2p
|
||||||
|
EMT.R3pp = EMT.R3p
|
||||||
|
|
||||||
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
||||||
EmtResetPrev()
|
EmtResetPrev()
|
||||||
@@ -652,6 +658,9 @@ function OnRapid()
|
|||||||
MyBackupAxes()
|
MyBackupAxes()
|
||||||
-- se primo movimento della lavorazione, gestione speciale
|
-- se primo movimento della lavorazione, gestione speciale
|
||||||
if EMT.MCHFIRST and not EMT.OPEISDISP then
|
if EMT.MCHFIRST and not EMT.OPEISDISP then
|
||||||
|
-- primo posizionamento
|
||||||
|
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||||
|
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||||
-- decido se muovere prima testa o carrelli (standard prima testa)
|
-- decido se muovere prima testa o carrelli (standard prima testa)
|
||||||
local bHeadFirst = true
|
local bHeadFirst = true
|
||||||
local sLateG101
|
local sLateG101
|
||||||
@@ -671,22 +680,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 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 or 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
|
||||||
@@ -716,14 +715,49 @@ 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)
|
||||||
|
|
||||||
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||||
if ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.FLAG2 == 1 then
|
||||||
local sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
|
-- se ho ancora motosega, si setta già asse C, altrimenti asse C per andare in home
|
||||||
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||||
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
|
' 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' .. EmtLenToString( 0, 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 sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '-'), '%)', '-')
|
||||||
|
EmtOutput( '( *** ' .. sOut .. ' *** )')
|
||||||
|
end
|
||||||
|
|
||||||
|
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
||||||
|
if EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then
|
||||||
|
local 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)
|
||||||
|
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( 'G101 ET1001')
|
||||||
|
EmtOutput( 'G101 ET2001')
|
||||||
|
-- ruoto in zona sicura prima di approcciare la lavorazione
|
||||||
|
elseif 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) or bGoToHome) and EMT.FLAG2 == 1 then
|
||||||
|
local sOutPreMove
|
||||||
|
if EMT.HEAD == 'H3' and bGoToHome then
|
||||||
|
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')
|
||||||
@@ -923,13 +957,13 @@ function OnRapid()
|
|||||||
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 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 sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||||
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||||
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..' B=' .. EgtNumToString( dBAxis, 3) ..
|
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..' B' .. EgtNumToString( dBAxis, 3) ..
|
||||||
' C=' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
' C' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
EmtOutput( 'G101 ET1001')
|
EmtOutput( 'G101 ET1001')
|
||||||
EmtOutput( 'G101 ET2001')
|
EmtOutput( 'G101 ET2001')
|
||||||
sOut = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. EmtGetAxis( 'L3') ..' B=' .. EgtNumToString( dBAxis, 3) ..
|
sOut = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. EmtGetAxis( 'L3') ..' B' .. EgtNumToString( dBAxis, 3) ..
|
||||||
' C=' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
' C' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
EmtOutput( 'G101 ET1001')
|
EmtOutput( 'G101 ET1001')
|
||||||
EmtOutput( 'G101 ET2001')
|
EmtOutput( 'G101 ET2001')
|
||||||
@@ -1091,28 +1125,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
|
||||||
@@ -1423,7 +1435,7 @@ function PrepareUnload( sCmd)
|
|||||||
table.insert( EMT.AUXCMD, sMsg)
|
table.insert( EMT.AUXCMD, sMsg)
|
||||||
if Cmd[2] == 'V' then
|
if Cmd[2] == 'V' then
|
||||||
-- se non è ultima fase c'è una barra sulla pinza Y (1)
|
-- se non è ultima fase c'è una barra sulla pinza Y (1)
|
||||||
local sEE = EgtIf( EMT.PHASE == EgtGetPhaseCount(), '0', '1')
|
local sEE = EgtIf( EMT.PHASE == EgtGetPhaseCount() or IsEnd2Phase( EMT.PHASE), '0', '1')
|
||||||
local sOut = 'G111 '..Cmd[2]..Cmd[3]..' EC141 ED83 EE'..sEE..' EF'..GetFmaxClamp()
|
local sOut = 'G111 '..Cmd[2]..Cmd[3]..' EC141 ED83 EE'..sEE..' EF'..GetFmaxClamp()
|
||||||
table.insert( EMT.AUXSTR, sOut)
|
table.insert( EMT.AUXSTR, sOut)
|
||||||
end
|
end
|
||||||
@@ -1432,7 +1444,7 @@ function PrepareUnload( sCmd)
|
|||||||
table.insert( EMT.AUXCMD, sMsg)
|
table.insert( EMT.AUXCMD, sMsg)
|
||||||
if Cmd[4] == 'V' then
|
if Cmd[4] == 'V' then
|
||||||
-- se non è ultima fase c'è una barra sulla pinza Y (1)
|
-- se non è ultima fase c'è una barra sulla pinza Y (1)
|
||||||
local sEAB = EgtIf( EMT.PHASE == EgtGetPhaseCount(), '111', '112')
|
local sEAB = EgtIf( EMT.PHASE == EgtGetPhaseCount() or IsEnd2Phase( EMT.PHASE), '111', '112')
|
||||||
local sOut = 'G111 '..Cmd[4]..Cmd[5]..' EA'..sEAB..' EB'..sEAB..' EC142 ED141 EE2 EF'..GetFmaxClamp()
|
local sOut = 'G111 '..Cmd[4]..Cmd[5]..' EA'..sEAB..' EB'..sEAB..' EC142 ED141 EE2 EF'..GetFmaxClamp()
|
||||||
table.insert( EMT.AUXSTR, sOut)
|
table.insert( EMT.AUXSTR, sOut)
|
||||||
EMT.U_STD = true
|
EMT.U_STD = true
|
||||||
@@ -1592,10 +1604,13 @@ function PreparePostRotation( sCmd)
|
|||||||
elseif nVDelta > 0 then
|
elseif nVDelta > 0 then
|
||||||
EMT.YDELTA = nil
|
EMT.YDELTA = nil
|
||||||
EMT.VDELTA = nVDelta
|
EMT.VDELTA = nVDelta
|
||||||
end
|
end
|
||||||
local sYLoad = ' Y'..EmtLenToString( LoadT)
|
local sYLoad = ' Y'..EmtLenToString( LoadT)
|
||||||
local sOut = 'G111'..sYLoad..' EA76'..EMT.SB..' EE0 EF'..EmtLenToString( EMT.FMAXPINZE,0)..' ET1'
|
local sOut = 'G111'..sYLoad..' EA76'..EMT.SB..' EE0 EF'..EmtLenToString( EMT.FMAXPINZE,0)..' ET1'
|
||||||
table.insert( EMT.AUXSTR, sOut)
|
table.insert( EMT.AUXSTR, sOut)
|
||||||
|
-- setto parametri di pinzaggio reali
|
||||||
|
EMT.SA = ' EA110'
|
||||||
|
EMT.SE = ' EE1'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1640,7 +1655,7 @@ function MyAdjustLinearAxes()
|
|||||||
if EMT.HEAD == 'H1' or EMT.HEAD == 'H2' then
|
if EMT.HEAD == 'H1' or EMT.HEAD == 'H2' then
|
||||||
local Len = EMT.TLEN + EgtIf( EMT.HEAD == 'H1', MillOffs, abs( SawOffs))
|
local Len = EMT.TLEN + EgtIf( EMT.HEAD == 'H1', MillOffs, abs( SawOffs))
|
||||||
local LenRef = MillOffs
|
local LenRef = MillOffs
|
||||||
vtE = Vector3d( EMT.EXTR) * Len - Z_AX() * LenRef
|
vtE = Vector3d( EMT.TDIR) * Len - Z_AX() * LenRef
|
||||||
elseif EMT.HEAD == 'H3' then
|
elseif EMT.HEAD == 'H3' then
|
||||||
local LenAux = ( EMT.TDIST or ChSawLen) + MillOffs
|
local LenAux = ( EMT.TDIST or ChSawLen) + MillOffs
|
||||||
local LenRef = MillOffs
|
local LenRef = MillOffs
|
||||||
|
|||||||
+73
-40
@@ -6,7 +6,7 @@ local INFO_STD_PP = require( 'Version')
|
|||||||
local BD = require( 'BeamData')
|
local BD = require( 'BeamData')
|
||||||
|
|
||||||
-- Variabili di modulo
|
-- Variabili di modulo
|
||||||
local CSP_INFO = INFO_STD_PP.NAME..' ver.'..INFO_STD_PP.VERSION..' by EgalWare s.r.l.'
|
local CSP_INFO = INFO_STD_PP.NAME..'_'..NumericalControl..' ver.'..INFO_STD_PP.VERSION..' by EgalWare s.r.l.'
|
||||||
local MACHINE_INFO = MACH_NAME..' ver.'..PP_VER
|
local MACHINE_INFO = MACH_NAME..' ver.'..PP_VER
|
||||||
local TEST_USE = false
|
local TEST_USE = false
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -54,6 +56,7 @@ function OnProgramStart()
|
|||||||
end
|
end
|
||||||
ParkLine( sPrefixCommentLine..'('.. CSP_INFO..')')
|
ParkLine( sPrefixCommentLine..'('.. CSP_INFO..')')
|
||||||
ParkLine( sPrefixCommentLine..'('.. MACHINE_INFO..')')
|
ParkLine( sPrefixCommentLine..'('.. MACHINE_INFO..')')
|
||||||
|
ParkLine( '(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
|
||||||
@@ -111,6 +114,7 @@ function OnProgramEnd()
|
|||||||
EMT.FALL = nil
|
EMT.FALL = nil
|
||||||
EMT.RELOAD = nil
|
EMT.RELOAD = nil
|
||||||
EMT.RELOAD2 = nil
|
EMT.RELOAD2 = nil
|
||||||
|
EmtOutput( '(FOOTER)')
|
||||||
-- Termino il programma
|
-- Termino il programma
|
||||||
EmtOutput( 'M02')
|
EmtOutput( 'M02')
|
||||||
end
|
end
|
||||||
@@ -221,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) ..' ***)'
|
||||||
@@ -271,9 +275,9 @@ function OnDispositionEnd()
|
|||||||
' P4=' .. EmtLenToString( HOverM, 2) .. ' P5=' .. tostring( nLoad90) .. ' P6=' .. EmtLenToString( EgtIf( IdTrave >= 0, LTrave, LBarra), 2) ..
|
' P4=' .. EmtLenToString( HOverM, 2) .. ' P5=' .. tostring( nLoad90) .. ' P6=' .. EmtLenToString( EgtIf( IdTrave >= 0, LTrave, LBarra), 2) ..
|
||||||
' P7=' .. EgtNumToString( TempAccPinze, 2) .. ' P8=' .. EgtNumToString( TempAccPinz2, 2) .. ' P9=' .. EgtNumToString( TempAccPinz1, 2)
|
' P7=' .. EgtNumToString( TempAccPinze, 2) .. ' P8=' .. EgtNumToString( TempAccPinz2, 2) .. ' P9=' .. EgtNumToString( TempAccPinz1, 2)
|
||||||
EmtOutput( sOut)
|
EmtOutput( sOut)
|
||||||
EmtOutput( 'M112'..' P1='..EmtLenToString( LoadT, 3).. ' P5=1 P6='..EmtLenToString( EMT.YPOS, 3)..' P7='..EmtLenToString( ParkV, 3) ..' P9='..GetFmaxClamp())
|
EmtOutput( 'M112'..' P1='..EmtLenToString( EMT.TPOS, 3).. ' P5=1 P6='..EmtLenToString( EMT.YPOS, 3)..' P7='..EmtLenToString( ParkV, 3) ..' P9='..GetFmaxClamp())
|
||||||
-- aggiorno dati aggancio carrelli alla trave
|
-- aggiorno dati aggancio carrelli alla trave
|
||||||
EMT.YDELTA = EMT.YPOS - LoadT
|
EMT.YDELTA = EMT.YPOS - EMT.TPOS
|
||||||
EMT.VDELTA = nil
|
EMT.VDELTA = nil
|
||||||
end
|
end
|
||||||
-- eventuale preparazione per rotazione immediata
|
-- eventuale preparazione per rotazione immediata
|
||||||
@@ -521,6 +525,9 @@ function OnMachiningEnd()
|
|||||||
EMT.PREVTOOL = EMT.TOOL
|
EMT.PREVTOOL = EMT.TOOL
|
||||||
EMT.PREVHEAD = EMT.HEAD
|
EMT.PREVHEAD = EMT.HEAD
|
||||||
EMT.PREVS = EMT.S
|
EMT.PREVS = EMT.S
|
||||||
|
-- salvo posizione
|
||||||
|
EMT.PREVTCPOS = AdjustTcPos( false)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -535,6 +542,7 @@ function OnPathStart()
|
|||||||
-- salvo precedenti rotanti
|
-- salvo precedenti rotanti
|
||||||
EMT.R1pp = EMT.R1p
|
EMT.R1pp = EMT.R1p
|
||||||
EMT.R2pp = EMT.R2p
|
EMT.R2pp = EMT.R2p
|
||||||
|
EMT.R3pp = EMT.R3p
|
||||||
|
|
||||||
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
|
||||||
EmtResetPrev()
|
EmtResetPrev()
|
||||||
@@ -654,16 +662,30 @@ function OnRapid()
|
|||||||
bHeadFirst = false
|
bHeadFirst = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local sTcPosReal = AdjustTcPos( false)
|
||||||
|
|
||||||
|
local bGoToHome = false
|
||||||
|
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
|
||||||
|
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and ( sTcPosReal ~= EMT.PREVTCPOS or 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 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=' .. EgtNumToString( EMT.PREVTCPOS, EMT.DECMACRO) .. ' P7=' .. EgtNumToString( EMT.PREVS, 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
|
||||||
@@ -674,8 +696,40 @@ function OnRapid()
|
|||||||
end
|
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 ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
if EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' 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( 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')
|
||||||
|
if EMT.LOAD then
|
||||||
|
ParkLine( sOutPreMove)
|
||||||
|
else
|
||||||
|
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) ..
|
||||||
|
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||||
|
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||||
|
if EMT.LOAD then
|
||||||
|
ParkLine( sOutPreMove)
|
||||||
|
ParkLine( 'M101 P1=2')
|
||||||
|
ParkLine( 'M101 P1=3')
|
||||||
|
else
|
||||||
|
EmtOutput( sOutPreMove)
|
||||||
|
EmtOutput( 'M101 P1=2')
|
||||||
|
EmtOutput( 'M101 P1=3')
|
||||||
|
end
|
||||||
|
elseif 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) or bGoToHome) and EMT.FLAG2 == 1 then
|
||||||
|
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.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')
|
||||||
@@ -1051,28 +1105,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
|
||||||
@@ -1594,10 +1626,13 @@ function PreparePostRotation( sCmd)
|
|||||||
elseif nVDelta > 0 then
|
elseif nVDelta > 0 then
|
||||||
EMT.YDELTA = nil
|
EMT.YDELTA = nil
|
||||||
EMT.VDELTA = nVDelta
|
EMT.VDELTA = nVDelta
|
||||||
end
|
end
|
||||||
local sYLoad = ' P2='..EmtLenToString( LoadT)
|
local sYLoad = ' P2='..EmtLenToString( LoadT)
|
||||||
local sOut = 'M111 P1=11'..sYLoad..' P4=76'..EMT.SB..' P8=0 P9='..GetFmaxClamp()
|
local sOut = 'M111 P1=11'..sYLoad..' P4=76'..EMT.SB..' P8=0 P9='..GetFmaxClamp()
|
||||||
table.insert( EMT.AUXSTR, sOut)
|
table.insert( EMT.AUXSTR, sOut)
|
||||||
|
-- setto parametri di pinzaggio reali
|
||||||
|
EMT.SA = ' P4=110'
|
||||||
|
EMT.SE = ' P8=1'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1642,7 +1677,7 @@ function MyAdjustLinearAxes()
|
|||||||
if EMT.HEAD == 'H1' or EMT.HEAD == 'H2' then
|
if EMT.HEAD == 'H1' or EMT.HEAD == 'H2' then
|
||||||
local Len = EMT.TLEN + EgtIf( EMT.HEAD == 'H1', MillOffs, abs( SawOffs))
|
local Len = EMT.TLEN + EgtIf( EMT.HEAD == 'H1', MillOffs, abs( SawOffs))
|
||||||
local LenRef = MillOffs
|
local LenRef = MillOffs
|
||||||
vtE = Vector3d( EMT.EXTR) * Len - Z_AX() * LenRef
|
vtE = Vector3d( EMT.TDIR) * Len - Z_AX() * LenRef
|
||||||
elseif EMT.HEAD == 'H3' then
|
elseif EMT.HEAD == 'H3' then
|
||||||
local LenAux = ( EMT.TDIST or ChSawLen) + MillOffs
|
local LenAux = ( EMT.TDIST or ChSawLen) + MillOffs
|
||||||
local LenRef = MillOffs
|
local LenRef = MillOffs
|
||||||
@@ -1653,13 +1688,13 @@ function MyAdjustLinearAxes()
|
|||||||
local LenAux = MillOffs + AngTr1Offs
|
local LenAux = MillOffs + AngTr1Offs
|
||||||
local LenRef = MillOffs
|
local LenRef = MillOffs
|
||||||
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2)
|
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2)
|
||||||
vtE = Vector3d( EMT.EXTR) * Len + vtAux * LenAux - Z_AX() * LenRef
|
vtE = Vector3d( EMT.TDIR) * Len + vtAux * LenAux - Z_AX() * LenRef
|
||||||
elseif EMT.HEAD == 'H7' then
|
elseif EMT.HEAD == 'H7' then
|
||||||
local Len = EMT.TLEN + AngTrBHLen
|
local Len = EMT.TLEN + AngTrBHLen
|
||||||
local LenAux = MillOffs + AngTrBHOffs
|
local LenAux = MillOffs + AngTrBHOffs
|
||||||
local LenRef = MillOffs
|
local LenRef = MillOffs
|
||||||
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2)
|
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2)
|
||||||
vtE = Vector3d( EMT.EXTR) * Len + vtAux * LenAux - Z_AX() * LenRef
|
vtE = Vector3d( EMT.TDIR) * Len + vtAux * LenAux - Z_AX() * LenRef
|
||||||
else
|
else
|
||||||
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
|
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
|
||||||
end
|
end
|
||||||
@@ -1746,8 +1781,6 @@ function AdjustTcPos( bLen3)
|
|||||||
sPos = '0' .. sPos
|
sPos = '0' .. sPos
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- salvo posizione
|
|
||||||
EMT.PREVTCPOS = sPos
|
|
||||||
return sPos
|
return sPos
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
+391
-69
@@ -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 ***
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -82,6 +79,14 @@ function OnSimulStart()
|
|||||||
for j = 1, #( vTools or {}) do
|
for j = 1, #( vTools or {}) do
|
||||||
if vTools[j] ~= '' then
|
if vTools[j] ~= '' then
|
||||||
EgtLoadTool( vTcPos[i], j, vTools[j])
|
EgtLoadTool( vTcPos[i], j, vTools[j])
|
||||||
|
-- Aggiunto controllo lunghezza lama minima * 0.9 per ricavare la tolleranza del VMILL
|
||||||
|
if EgtTdbSetCurrTool(vTools[j]) then -- set utensile corrente
|
||||||
|
if EgtTdbGetCurrToolParam( MCH_TP.TYPE) == MCH_TY.SAW_STD or EgtTdbGetCurrToolParam( MCH_TP.TYPE) == MCH_TY.SAW_FLAT then -- controllo tipo utensile sega
|
||||||
|
local dCurrSawLen = EgtTdbGetCurrToolParam( MCH_TP.LEN) * 0.9
|
||||||
|
-- se non definito o minore del valore precedente aggiorna la tolleranza
|
||||||
|
EMT.VMILLTOL = EgtIf( not EMT.VMILLTOL or dCurrSawLen < EMT.VMILLTOL, dCurrSawLen, EMT.VMILLTOL)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
ShowToolInTcPos( vTcPos[i], true)
|
ShowToolInTcPos( vTcPos[i], true)
|
||||||
@@ -118,7 +123,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
|
||||||
@@ -142,6 +148,30 @@ function OnSimulStart()
|
|||||||
end
|
end
|
||||||
-- Preparo lista collisioni vuota
|
-- Preparo lista collisioni vuota
|
||||||
EMT.COLLIDE = {}
|
EMT.COLLIDE = {}
|
||||||
|
|
||||||
|
-- si crea gruppo temporaneo appoggio controllo clamping
|
||||||
|
CLAMP_CHECK_GROUP = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'CLAMP_CHECK')
|
||||||
|
CLAMP_CHECK_INTERS = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'CLAMP_INTERS')
|
||||||
|
|
||||||
|
if CLAMP_CHECK_GROUP then
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_GROUP)
|
||||||
|
else
|
||||||
|
local frClampCheckGroup = Frame3d( ORIG(), GDB_FR.FRONT)
|
||||||
|
CLAMP_CHECK_GROUP = EgtGroup( GDB_ID.ROOT, frClampCheckGroup)
|
||||||
|
EgtSetName( CLAMP_CHECK_GROUP, 'CLAMP_CHECK')
|
||||||
|
EgtSetLevel( CLAMP_CHECK_GROUP, GDB_LV.TEMP)
|
||||||
|
EgtSetStatus( CLAMP_CHECK_GROUP, GDB_ST.OFF)
|
||||||
|
end
|
||||||
|
|
||||||
|
if CLAMP_CHECK_INTERS then
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_INTERS)
|
||||||
|
else
|
||||||
|
CLAMP_CHECK_INTERS = EgtGroup( GDB_ID.ROOT)
|
||||||
|
EgtSetName( CLAMP_CHECK_INTERS, 'CLAMP_INTERS')
|
||||||
|
EgtSetLevel( CLAMP_CHECK_INTERS, GDB_LV.TEMP)
|
||||||
|
EgtSetStatus( CLAMP_CHECK_INTERS, GDB_ST.OFF)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -168,13 +198,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')
|
||||||
@@ -215,7 +245,7 @@ function OnSimulDispositionStart()
|
|||||||
-- determino la risoluzione dello Zmap
|
-- determino la risoluzione dello Zmap
|
||||||
local dTol = 4.71
|
local dTol = 4.71
|
||||||
if EmtGetVMillStep then
|
if EmtGetVMillStep then
|
||||||
dTol = EmtGetVMillStep( b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), 4.71)
|
dTol = EmtGetVMillStep( b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol)
|
||||||
else
|
else
|
||||||
local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ()
|
local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ()
|
||||||
if dArea < 0.075e6 then
|
if dArea < 0.075e6 then
|
||||||
@@ -232,6 +262,7 @@ function OnSimulDispositionStart()
|
|||||||
dTol = 3.77
|
dTol = 3.77
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
dTol = min( dTol, EMT.VMILLTOL or dTol) -- imposto dTol al valore minore tra quello per volume e quello per spessore lama
|
||||||
-- creo lo Zmap
|
-- creo lo Zmap
|
||||||
local VMillId = EgtVolZmapBox( nPartRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB)
|
local VMillId = EgtVolZmapBox( nPartRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB)
|
||||||
if VMillId then
|
if VMillId then
|
||||||
@@ -289,18 +320,24 @@ function OnSimulDispositionStart()
|
|||||||
local nOrd = GetPhaseOrd( EMT.PHASE)
|
local nOrd = GetPhaseOrd( EMT.PHASE)
|
||||||
local nScrapOrd = GetPhaseOrd( EgtGetPhaseCount()) + 1
|
local nScrapOrd = GetPhaseOrd( EgtGetPhaseCount()) + 1
|
||||||
local b3Raw = BBox3d()
|
local b3Raw = BBox3d()
|
||||||
|
local b3Bar = BBox3d()
|
||||||
|
local b3Part = BBox3d()
|
||||||
local nPartRawId, nScrapRawId
|
local nPartRawId, nScrapRawId
|
||||||
local nRawId = EgtGetFirstRawPart()
|
local nRawId = EgtGetFirstRawPart()
|
||||||
while nRawId do
|
while nRawId do
|
||||||
local nNextRawId = EgtGetNextRawPart( nRawId)
|
local nNextRawId = EgtGetNextRawPart( nRawId)
|
||||||
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
||||||
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
||||||
|
local b3Tmp = EgtGetRawPartBBox( nRawId)
|
||||||
|
b3Bar:Add( b3Tmp)
|
||||||
local nRawOrd = EgtGetInfo( nRawId, 'ORD', 'i')
|
local nRawOrd = EgtGetInfo( nRawId, 'ORD', 'i')
|
||||||
if nRawOrd == nOrd then
|
if nRawOrd == nOrd then
|
||||||
b3Raw = EgtGetRawPartBBox( nRawId)
|
--b3Raw = EgtGetRawPartBBox( nRawId)
|
||||||
|
b3Raw:Add( b3Tmp)
|
||||||
|
b3Part:Add( b3Tmp)
|
||||||
nPartRawId = nRawId
|
nPartRawId = nRawId
|
||||||
elseif nRawOrd == nOrd + 1 and nRawOrd == nScrapOrd then
|
elseif nRawOrd == nOrd + 1 and nRawOrd == nScrapOrd then
|
||||||
local b3Tmp = EgtGetRawPartBBox( nRawId) or BBox3d()
|
--local b3Tmp = EgtGetRawPartBBox( nRawId) or BBox3d()
|
||||||
b3Raw:Add( b3Tmp)
|
b3Raw:Add( b3Tmp)
|
||||||
nScrapRawId = nRawId
|
nScrapRawId = nRawId
|
||||||
end
|
end
|
||||||
@@ -314,6 +351,9 @@ function OnSimulDispositionStart()
|
|||||||
else
|
else
|
||||||
EMT.SCRAP = nil
|
EMT.SCRAP = nil
|
||||||
end
|
end
|
||||||
|
EMT.LB = b3Bar:getDimX()
|
||||||
|
EMT.LR = b3Raw:getDimX()
|
||||||
|
EMT.LT = b3Part:getDimX()
|
||||||
-- recupero CutId del pezzo in lavorazione
|
-- recupero CutId del pezzo in lavorazione
|
||||||
EMT.CUTID = EgtGetInfo( EgtGetFirstPartInRawPart( nPartRawId or GDB_ID.NULL) or GDB_ID.NULL, 'CUTID', 'i') or 0
|
EMT.CUTID = EgtGetInfo( EgtGetFirstPartInRawPart( nPartRawId or GDB_ID.NULL) or GDB_ID.NULL, 'CUTID', 'i') or 0
|
||||||
EMT.YSPEC = nil
|
EMT.YSPEC = nil
|
||||||
@@ -385,6 +425,7 @@ function OnSimulDispositionStart()
|
|||||||
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
||||||
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd then
|
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd then
|
||||||
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
||||||
|
b3Bar = EgtGetRawPartBBox( nRawId)
|
||||||
else
|
else
|
||||||
EgtMove( nRawId, vtMove, GDB_RT.GLOB)
|
EgtMove( nRawId, vtMove, GDB_RT.GLOB)
|
||||||
EgtSetStatus( nRawId, GDB_ST.OFF)
|
EgtSetStatus( nRawId, GDB_ST.OFF)
|
||||||
@@ -392,6 +433,8 @@ function OnSimulDispositionStart()
|
|||||||
end
|
end
|
||||||
nRawId = nNextRawId
|
nRawId = nNextRawId
|
||||||
end
|
end
|
||||||
|
EMT.LB = b3Bar:getDimX()
|
||||||
|
|
||||||
-- altrimenti fase finale, aggancio primo grezzo alla tavola e gli altri in posizione carico al carro Y
|
-- altrimenti fase finale, aggancio primo grezzo alla tavola e gli altri in posizione carico al carro Y
|
||||||
else
|
else
|
||||||
-- verifico posizione di carico
|
-- verifico posizione di carico
|
||||||
@@ -409,12 +452,14 @@ function OnSimulDispositionStart()
|
|||||||
nRawId = EgtGetNextRawPart( nRawId)
|
nRawId = EgtGetNextRawPart( nRawId)
|
||||||
end
|
end
|
||||||
-- eseguo
|
-- eseguo
|
||||||
|
local b3Bar = BBox3d()
|
||||||
nRawId = EgtGetFirstRawPart()
|
nRawId = EgtGetFirstRawPart()
|
||||||
while nRawId do
|
while nRawId do
|
||||||
local nNextRawId = EgtGetNextRawPart( nRawId)
|
local nNextRawId = EgtGetNextRawPart( nRawId)
|
||||||
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
||||||
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd then
|
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd then
|
||||||
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
||||||
|
b3Bar = EgtGetRawPartBBox( nRawId)
|
||||||
else
|
else
|
||||||
EgtMove( nRawId, vtMove, GDB_RT.GLOB)
|
EgtMove( nRawId, vtMove, GDB_RT.GLOB)
|
||||||
EmtLinkRawPartToGroup( nRawId, 'Y')
|
EmtLinkRawPartToGroup( nRawId, 'Y')
|
||||||
@@ -422,6 +467,7 @@ function OnSimulDispositionStart()
|
|||||||
end
|
end
|
||||||
nRawId = nNextRawId
|
nRawId = nNextRawId
|
||||||
end
|
end
|
||||||
|
EMT.LB = b3Bar:getDimX()
|
||||||
end
|
end
|
||||||
-- Indicazione angolo rotazione pezzo
|
-- Indicazione angolo rotazione pezzo
|
||||||
EMT.ROT = EgtGetInfo( EMT.DISPID, 'ROT', 'i') or 0
|
EMT.ROT = EgtGetInfo( EMT.DISPID, 'ROT', 'i') or 0
|
||||||
@@ -453,6 +499,7 @@ function OnSimulDispositionEnd()
|
|||||||
EMT.POSTROT = true
|
EMT.POSTROT = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
EMT.SPLIT = false
|
||||||
EMT.OPEISDISP = false
|
EMT.OPEISDISP = false
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -506,29 +553,20 @@ function OnSimulToolSelect( dPosA)
|
|||||||
end
|
end
|
||||||
EgtSetCurrMachining( NextMchId)
|
EgtSetCurrMachining( NextMchId)
|
||||||
-- recupero il valore dell'asse virtuale bloccato A
|
-- recupero il valore dell'asse virtuale bloccato A
|
||||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
dPosA = GetCurrChainSawingVirtualAxis()
|
||||||
dPosA = tonumber( sVal:sub( 3))
|
|
||||||
else
|
else
|
||||||
-- imposto visualizzazione
|
-- imposto visualizzazione
|
||||||
EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD)
|
EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD)
|
||||||
end
|
end
|
||||||
-- imposto il valore di A
|
-- imposto il valore di A
|
||||||
EgtSetAxisPos( 'A', dPosA)
|
EgtSetAxisPos( 'A', dPosA)
|
||||||
if abs( dPosA) < 0.1 then
|
local dHomeC = GetChainSawCHomeFromVirtualAxis( dPosA)
|
||||||
EgtSetAxisPos( 'C', EgtIf( BD.RIGHT_LOAD, 180, 0))
|
EgtSetAxisPos( 'C', dHomeC)
|
||||||
end
|
|
||||||
EgtSetAxisPos( 'B', 0)
|
EgtSetAxisPos( 'B', 0)
|
||||||
-- se aggregato per fresa tipo blockhaus
|
-- se aggregato per fresa tipo blockhaus
|
||||||
elseif EMT.HEAD == 'H7' then
|
elseif EMT.HEAD == 'H7' then
|
||||||
EgtSetAxisPos( 'C', EgtIf( BD.RIGHT_LOAD, 180, 0))
|
EgtSetAxisPos( 'C', EgtIf( BD.RIGHT_LOAD, 180, 0))
|
||||||
end
|
end
|
||||||
-- se punta lunga
|
|
||||||
if EMT.TOTLEN > LONG_TOOL_MINLEN then
|
|
||||||
-- se su cambio utensile T111
|
|
||||||
if EMT.TCPOS == 'T111' then
|
|
||||||
EgtSetAxisPos( 'B', 0)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- se TC 1
|
-- se TC 1
|
||||||
if GetTCSet( EMT.TCPOS) == 1 then
|
if GetTCSet( EMT.TCPOS) == 1 then
|
||||||
EgtSetAxisPos( 'B', 90)
|
EgtSetAxisPos( 'B', 90)
|
||||||
@@ -537,7 +575,13 @@ function OnSimulToolSelect( dPosA)
|
|||||||
EgtSetAxisPos( 'B', -90)
|
EgtSetAxisPos( 'B', -90)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- breve pausa
|
-- se punta lunga
|
||||||
|
if EMT.TOTLEN > LONG_TOOL_MINLEN then
|
||||||
|
-- se su cambio utensile T111
|
||||||
|
if EMT.TCPOS == 'T111' then
|
||||||
|
EgtSetAxisPos( 'B', 0)
|
||||||
|
end
|
||||||
|
end -- breve pausa
|
||||||
EgtPause( 100)
|
EgtPause( 100)
|
||||||
EgtOutText( '')
|
EgtOutText( '')
|
||||||
EMT.TOOL_1 = EMT.TOOL
|
EMT.TOOL_1 = EMT.TOOL
|
||||||
@@ -559,24 +603,19 @@ 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')
|
SimulMoveAxis( 'C', 0, MCH_SIM_STEP.COLLROT)
|
||||||
if abs( dPosA) < 0.1 then
|
|
||||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 180, 0), MCH_SIM_STEP.COLLROT)
|
|
||||||
else
|
|
||||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
|
||||||
end
|
|
||||||
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||||
-- movimento scarico rinvio
|
-- movimento scarico rinvio
|
||||||
elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then
|
elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then
|
||||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
||||||
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||||
-- movimento scarico aggregato BlockHaus
|
-- movimento scarico aggregato BlockHaus
|
||||||
elseif EMT.HEAD == 'H7' then
|
elseif EMT.HEAD == 'H7' then
|
||||||
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||||
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
||||||
-- movimento scarico punta lunga su T111
|
-- movimento scarico punta lunga su T111
|
||||||
elseif EMT.TOTLEN > LONG_TOOL_MINLEN then
|
elseif EMT.TOTLEN > LONG_TOOL_MINLEN then
|
||||||
-- se su cambio utensile T111
|
-- se su cambio utensile T111
|
||||||
@@ -587,9 +626,9 @@ function OnSimulToolDeselect()
|
|||||||
else
|
else
|
||||||
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||||
if GetTCSet( EMT.TCPOS) == 1 then
|
if GetTCSet( EMT.TCPOS) == 1 then
|
||||||
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
||||||
else
|
else
|
||||||
SimulMoveAxes( 'B', -90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
SimulMoveAxes( 'B', -90, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- movimento scarico utensile di grosso diametro (su T111)
|
-- movimento scarico utensile di grosso diametro (su T111)
|
||||||
@@ -609,7 +648,11 @@ 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
|
||||||
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', 0, MCH_SIM_STEP.RAPROT)
|
||||||
|
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
|
||||||
@@ -666,8 +709,7 @@ function OnSimulMachiningStart()
|
|||||||
-- se lavorazione attuale e precedente con sega a catena con angolo A diverso, devo scaricare e ricaricare
|
-- se lavorazione attuale e precedente con sega a catena con angolo A diverso, devo scaricare e ricaricare
|
||||||
if EMT.HEAD == 'H3' and EMT.HEAD == EMT.PREVHEAD then
|
if EMT.HEAD == 'H3' and EMT.HEAD == EMT.PREVHEAD then
|
||||||
local dPrevA = EgtGetAxisPos( 'A')
|
local dPrevA = EgtGetAxisPos( 'A')
|
||||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
local dPosA = GetCurrChainSawingVirtualAxis()
|
||||||
local dPosA = tonumber( sVal:sub( 3))
|
|
||||||
if abs( dPosA - dPrevA) > 1 then
|
if abs( dPosA - dPrevA) > 1 then
|
||||||
OnSimulToolDeselect()
|
OnSimulToolDeselect()
|
||||||
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.ON)
|
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.ON)
|
||||||
@@ -699,6 +741,7 @@ function OnSimulMachiningEnd()
|
|||||||
EMT.UNLOADING = false
|
EMT.UNLOADING = false
|
||||||
EMT.FALL = false
|
EMT.FALL = false
|
||||||
end
|
end
|
||||||
|
EMT.SPLIT = nil
|
||||||
EMT.PREVHEAD = EMT.HEAD
|
EMT.PREVHEAD = EMT.HEAD
|
||||||
EMT.PREVTOOL = EMT.TOOL
|
EMT.PREVTOOL = EMT.TOOL
|
||||||
EMT.PREVEXIT = EMT.EXIT
|
EMT.PREVEXIT = EMT.EXIT
|
||||||
@@ -786,13 +829,31 @@ 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 and EMT.FLAG2 == 1 then
|
if EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then
|
||||||
-- se motosega mi muovo a X di sicurezza per ruotare
|
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
|
||||||
if ( EMT.HEAD == 'H3' or ( bZmax and EMT.TOTLEN > 200)) then
|
SimulMoveAxis( 'B', 0, MCH_SIM_STEP.COLLROT)
|
||||||
|
SimulMoveAxis( 'C', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||||
|
SimulMoveAxis( 'B', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||||
|
elseif not EMT.LOAD and EMT.MOVE == 0 and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TOTLEN > 200)) and
|
||||||
|
( EMT.HT > BeamHeightForFixRot 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, prima si raddrizza B e poi C in posizione
|
||||||
|
if EMT.HEAD == 'H3' and 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
|
||||||
@@ -874,6 +935,8 @@ function ExecAuxCmd( sCmd)
|
|||||||
if Cmd[1] == '0' then
|
if Cmd[1] == '0' then
|
||||||
if Cmd[2] == 'Unloading' then
|
if Cmd[2] == 'Unloading' then
|
||||||
EMT.UNLOADING = true
|
EMT.UNLOADING = true
|
||||||
|
elseif Cmd[2] == 'Split' then
|
||||||
|
EMT.SPLIT = true
|
||||||
elseif Cmd[2] == 'Fall' then
|
elseif Cmd[2] == 'Fall' then
|
||||||
EMT.FALL = true
|
EMT.FALL = true
|
||||||
end
|
end
|
||||||
@@ -915,19 +978,9 @@ function ExecAuxCmd( sCmd)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif Cmd[1] == '11' then
|
elseif Cmd[1] == '11' then
|
||||||
local dPY = MaxOpen
|
ExecMovePY( Cmd[2] ~= '0')
|
||||||
if Cmd[2] ~= '0' then
|
|
||||||
dPY = EgtIf( EMT.ROT == -1, EMT.HB, EMT.SB)
|
|
||||||
end
|
|
||||||
SimulMoveAxis( 'PY', dPY, MCH_SIM_STEP.RAPID)
|
|
||||||
SetPYLight( Cmd[2] ~= '0')
|
|
||||||
elseif Cmd[1] == '12' then
|
elseif Cmd[1] == '12' then
|
||||||
local dPV = MaxOpen
|
ExecMovePV( Cmd[2] ~= '0')
|
||||||
if Cmd[2] ~= '0' then
|
|
||||||
dPV = EgtIf( EMT.ROT == -1, EMT.HB, EMT.SB)
|
|
||||||
end
|
|
||||||
SimulMoveAxis( 'PV', dPV, MCH_SIM_STEP.RAPID)
|
|
||||||
SetPVLight( Cmd[2] ~= '0')
|
|
||||||
elseif Cmd[1] == '21' then
|
elseif Cmd[1] == '21' then
|
||||||
local nYDelta = tonumber( Cmd[2])
|
local nYDelta = tonumber( Cmd[2])
|
||||||
local nVDelta = tonumber( Cmd[3])
|
local nVDelta = tonumber( Cmd[3])
|
||||||
@@ -971,7 +1024,7 @@ function ExecRemoveScraps()
|
|||||||
for i = nPart, 1, -1 do
|
for i = nPart, 1, -1 do
|
||||||
if i ~= nPartMax then
|
if i ~= nPartMax then
|
||||||
local b3Vmill = EgtVolZmapGetPartBBoxGlob( vMillId, i - 1, GDB_BB.STANDARD)
|
local b3Vmill = EgtVolZmapGetPartBBoxGlob( vMillId, i - 1, GDB_BB.STANDARD)
|
||||||
if b3Vmill:getDimX() < 1200 then
|
if b3Vmill:getDimX() < 1250 then
|
||||||
EgtRemoveVolZmapPart( vMillId, i - 1)
|
EgtRemoveVolZmapPart( vMillId, i - 1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -991,7 +1044,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
|
||||||
@@ -1036,6 +1089,176 @@ function ExecUnloading()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function CheckClamping( sClampName)
|
||||||
|
|
||||||
|
local nClampId = EgtGetAxisId( sClampName) or GDB_ID.NULL
|
||||||
|
local nClampPathId = EgtGetFirstInGroup( EgtGetFirstNameInGroup( nClampId, 'CLAMP_CHECK') or GDB_ID.NULL)
|
||||||
|
local b3ClampingArea = EgtGetBBoxGlob( nClampPathId or GDB_ID.NULL, GDB_BB.STANDARD)
|
||||||
|
-- se non trovo percorso area di clamping, esco subito
|
||||||
|
if not nClampPathId or not EMT.VMILL or not ClampingCoeffMin then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local function GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth)
|
||||||
|
local vCurveListId = {}
|
||||||
|
local vtIntersPlane
|
||||||
|
-- piano di interpolazione
|
||||||
|
if sIntersPlane == 'X' then
|
||||||
|
vtIntersPlane = X_AX()
|
||||||
|
elseif sIntersPlane == 'Y' then
|
||||||
|
vtIntersPlane = Y_AX()
|
||||||
|
elseif sIntersPlane == 'Z' then
|
||||||
|
vtIntersPlane = Z_AX()
|
||||||
|
end
|
||||||
|
|
||||||
|
for i = 1, #EMT.VMILL do
|
||||||
|
local b3VMill = EgtGetBBoxGlob( EMT.VMILL[i], GDB_BB.EXACT)
|
||||||
|
local ptPosIntersPlane
|
||||||
|
if sPosIntersPlane == 'MIN' then
|
||||||
|
ptPosIntersPlane = b3VMill:getMin() + dDepth * vtIntersPlane
|
||||||
|
elseif sPosIntersPlane == 'MAX' then
|
||||||
|
ptPosIntersPlane = b3VMill:getMax() - dDepth * vtIntersPlane
|
||||||
|
end
|
||||||
|
local nLoopId, nLoopCnt = EgtPlaneVolZmapInters( ptPosIntersPlane, vtIntersPlane, EMT.VMILL[i], CLAMP_CHECK_INTERS, GDB_RT.GLOB)
|
||||||
|
vCurveListId = EgtTableAdd( vCurveListId, nLoopId, nLoopCnt)
|
||||||
|
end
|
||||||
|
|
||||||
|
return vCurveListId
|
||||||
|
end
|
||||||
|
|
||||||
|
local function CalculateIntersectionArea( sPosIntersPlane, sIntersPlane, dDepth)
|
||||||
|
-- test piano frontale
|
||||||
|
local vCurveListId = GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth)
|
||||||
|
-- si copia curva intersezione e curva pinza in gruppo di confronto
|
||||||
|
local nFlatSurfId, nFlatSurfCnt = EgtSurfFlatRegion( CLAMP_CHECK_GROUP, vCurveListId)
|
||||||
|
local vFlatSurfId = EgtTableFill( nFlatSurfId, nFlatSurfCnt) or {}
|
||||||
|
local nClampSurfId = EgtSurfFlatRegion( CLAMP_CHECK_GROUP, nClampPathId)
|
||||||
|
|
||||||
|
local dTotalArea = 0
|
||||||
|
local dTotalXLenght = 0
|
||||||
|
for i = 1, #vFlatSurfId do
|
||||||
|
local nTempSurfId = vFlatSurfId[i]
|
||||||
|
EgtSurfFrIntersect( nTempSurfId, nClampSurfId)
|
||||||
|
if nTempSurfId then
|
||||||
|
dTotalArea = dTotalArea + ceil( EgtSurfArea( nTempSurfId) or 0)
|
||||||
|
local b3BoxIntersectionBox = EgtGetBBoxGlob( nTempSurfId, GDB_BB.STANDARD)
|
||||||
|
if b3BoxIntersectionBox then
|
||||||
|
dTotalXLenght = dTotalXLenght + ceil( b3BoxIntersectionBox:getDimX()) -- somma lunghezze (x) delle aree pinzate
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return dTotalArea, dTotalXLenght
|
||||||
|
end
|
||||||
|
|
||||||
|
-- minima area considerata per un corretto pinzaggio
|
||||||
|
DistZClampToTable = DistZClampToTable or 0
|
||||||
|
--local MinJoin = BD.GetMinJoin( EMT.ST, EMT.HT, EgtIf( EMT.SPLIT, EMT.LT, EMT.LB))
|
||||||
|
UpdateMinJoinDeltaTol( EMT.ST, EMT.HT, EgtIf( EMT.SPLIT, EMT.LT, EMT.LB))
|
||||||
|
local MinZClamping = min( b3ClampingArea:getDimZ() + DistZClampToTable, EMT.HT) - DistZClampToTable
|
||||||
|
local dMinClamping = ( MinJoin * MinZClamping)
|
||||||
|
-- si moltiplica per un coefficiente minimo sotto al quale si da l'errore di pinzaggio
|
||||||
|
ClampingCoeffMin = EgtClamp( ClampingCoeffMin, 0.01, 1)
|
||||||
|
if MinZClamping > 116 then
|
||||||
|
dMinClamping = MinJoin * 116 + ( pow( MinJoin, 2) / 2)
|
||||||
|
if MinJoin > 280 then
|
||||||
|
dMinClamping = MinJoin * 116 + ( pow( 280, 2) / 2) + ( pow( MinJoin - 280, 2))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local dMinClampingAreaWarn = dMinClamping * ClampingCoeffMin
|
||||||
|
local dMinClampingAreaErr = dMinClamping * ( ClampingCoeffMin / 3)
|
||||||
|
|
||||||
|
local bError = true
|
||||||
|
local sWrn, sErr
|
||||||
|
local bWriteWarnMessage = false
|
||||||
|
local bWriteErrMessage = false
|
||||||
|
-- controllo faccia frontale
|
||||||
|
local dArea, dXClampedLenght = CalculateIntersectionArea( 'MIN', 'Y', 3)
|
||||||
|
-- ERRORE: pinza troppo poco (meno di 1/3 del minimo richiesto)
|
||||||
|
if dArea and dArea < dMinClampingAreaErr then
|
||||||
|
-- solo se pinza almeno 1cm2, e la somma della lunghezza pinzata è maggiore della lunghezza minima pinzabile da Warning e non errore
|
||||||
|
if dXClampedLenght >= MinJoin * ClampingCoeffMin and dArea > 1000 then
|
||||||
|
bError = false
|
||||||
|
end
|
||||||
|
-- pinzaggio non fattibile, errore
|
||||||
|
if bError then
|
||||||
|
sErr = 'ERROR CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
||||||
|
bWriteErrMessage = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- WARNING: pinza meno del minimo richiesto
|
||||||
|
if dArea and dArea < dMinClampingAreaWarn and not bWriteErrMessage then
|
||||||
|
sWrn = 'WARNING CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
||||||
|
bWriteWarnMessage = true
|
||||||
|
end
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_GROUP)
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_INTERS)
|
||||||
|
|
||||||
|
-- controllo altro lato solo se non sono già in errore
|
||||||
|
if not bWriteErrMessage then
|
||||||
|
-- controllo faccia posteriore
|
||||||
|
dArea, dXClampedLenght = CalculateIntersectionArea( 'MAX', 'Y', 3)
|
||||||
|
-- ERRORE: pinza troppo poco (meno di 1/3 del minimo richiesto)
|
||||||
|
if dArea and dArea < dMinClampingAreaErr then
|
||||||
|
-- solo se pinza almeno 1cm2, e la somma della lunghezza pinzata è maggiore della lunghezza minima pinzabile da Warning e non errore
|
||||||
|
if dXClampedLenght >= MinJoin * ClampingCoeffMin and dArea > 1000 then
|
||||||
|
bError = false
|
||||||
|
end
|
||||||
|
-- pinzaggio non fattibile, errore
|
||||||
|
if bError then
|
||||||
|
sErr = 'ERROR CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
||||||
|
bWriteErrMessage = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- WARNING: pinza meno del minimo richiesto
|
||||||
|
if dArea and dArea < dMinClampingAreaWarn and not bWriteWarnMessage and not bWriteErrMessage then
|
||||||
|
sWrn = 'WARNING CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
||||||
|
bWriteWarnMessage = true
|
||||||
|
end
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_GROUP)
|
||||||
|
EgtEmptyGroup( CLAMP_CHECK_INTERS)
|
||||||
|
end
|
||||||
|
|
||||||
|
if bWriteErrMessage then
|
||||||
|
EmtSetLastError( 1213, sErr, EgtGetEnableUI())
|
||||||
|
EgtOutBox( sErr, 'CLAMPING', 'ERROR', 'OK')
|
||||||
|
EmtSetSimulPause()
|
||||||
|
elseif bWriteWarnMessage then
|
||||||
|
EgtOutLog( sWrn)
|
||||||
|
EgtOutBox( sWrn, 'CLAMPING', 'WARNING', 'OK')
|
||||||
|
EmtSetSimulPause()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function ExecMovePY( bClose)
|
||||||
|
--SimulMoveAxes( 'PY', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
||||||
|
local dPY = MaxOpen
|
||||||
|
if bClose then
|
||||||
|
dPY = EgtIf( EMT.ROT == -1, EMT.HT, EMT.ST)
|
||||||
|
end
|
||||||
|
SimulMoveAxis( 'PY', dPY, MCH_SIM_STEP.RAPID)
|
||||||
|
SetPYLight( bClose)
|
||||||
|
if bClose then
|
||||||
|
CheckClamping( 'PY')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function ExecMovePV( bClose)
|
||||||
|
--EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
||||||
|
local dPV = MaxOpen
|
||||||
|
if bClose then
|
||||||
|
dPV = EgtIf( EMT.ROT == -1, EMT.HT, EMT.ST)
|
||||||
|
end
|
||||||
|
SimulMoveAxis( 'PV', dPV, MCH_SIM_STEP.RAPID)
|
||||||
|
SetPVLight( bClose)
|
||||||
|
if bClose then
|
||||||
|
CheckClamping( 'PV')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function VerifyYSlide( sName1, dVal1, sName2, dVal2)
|
function VerifyYSlide( sName1, dVal1, sName2, dVal2)
|
||||||
-- Se movimento trave agganciata con carrello Y
|
-- Se movimento trave agganciata con carrello Y
|
||||||
@@ -1193,11 +1416,11 @@ end
|
|||||||
-- *** ESTIMATION T&L ***
|
-- *** ESTIMATION T&L ***
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
local ESTIMATION_RAPID_COEFF = EstimationRapidMultiplier or 1
|
local ESTIMATION_RAPID_COEFF = EstimationRapidMultiplier or 1
|
||||||
local RAPID_X_FEED = 75000 / ESTIMATION_RAPID_COEFF -- mm/min
|
local RAPID_X_FEED = 100000 / ESTIMATION_RAPID_COEFF -- mm/min
|
||||||
local RAPID_Y_FEED = 100000 / ESTIMATION_RAPID_COEFF -- mm/min
|
local RAPID_Y_FEED = 100000 / ESTIMATION_RAPID_COEFF -- mm/min
|
||||||
local RAPID_Z_FEED = 50000 / ESTIMATION_RAPID_COEFF -- mm/min
|
local RAPID_Z_FEED = 100000 / ESTIMATION_RAPID_COEFF -- mm/min
|
||||||
local RAPID_C_FEED = 15000 / ESTIMATION_RAPID_COEFF -- deg/min
|
local RAPID_C_FEED = 12000 / ESTIMATION_RAPID_COEFF -- deg/min
|
||||||
local RAPID_B_FEED = 15000 / ESTIMATION_RAPID_COEFF -- deg/min
|
local RAPID_B_FEED = 12000 / ESTIMATION_RAPID_COEFF -- deg/min
|
||||||
local RAPID_MIN_T = 0.1 * ESTIMATION_RAPID_COEFF -- s
|
local RAPID_MIN_T = 0.1 * ESTIMATION_RAPID_COEFF -- s
|
||||||
local LOAD_T = 2 * ESTIMATION_RAPID_COEFF -- s
|
local LOAD_T = 2 * ESTIMATION_RAPID_COEFF -- s
|
||||||
local CHAR_ONE_MOVE_T = 1 * ESTIMATION_RAPID_COEFF -- s
|
local CHAR_ONE_MOVE_T = 1 * ESTIMATION_RAPID_COEFF -- s
|
||||||
@@ -1209,6 +1432,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
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -1294,6 +1529,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
|
||||||
@@ -1350,6 +1594,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
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -1480,15 +1730,15 @@ 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), EMT.FMAXPINZE, 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 = abs( dL2) / ( RAPID_X_FEED / 60) -- CalcMoveTime( abs( dL2), RAPID_X_FEED, 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 = abs( dL3) / ( RAPID_Z_FEED * 60) -- 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
|
||||||
local dT5 = abs( dR2) / RAPID_B_FEED * 60
|
local dT5 = abs( dR2) / ( RAPID_B_FEED / 60)
|
||||||
if dT5 > dTime then dTime = dT5 end
|
if dT5 > dTime then dTime = dT5 end
|
||||||
EMT.MCHEXTTIME = EMT.MCHEXTTIME + dTime
|
EMT.MCHEXTTIME = EMT.MCHEXTTIME + dTime
|
||||||
EgtOutLog( string.format( ' G0 Len=%.0f Rot=%.0f° Time=%.2f', dLen, abs( dR1) + abs( dR2), dTime), 5)
|
EgtOutLog( string.format( ' G0 Len=%.0f Rot=%.0f° Time=%.2f', dLen, abs( dR1) + abs( dR2), dTime), 5)
|
||||||
@@ -1506,7 +1756,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 = dLen / ( EMT.F / 60) -- 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
|
||||||
@@ -1653,6 +1903,78 @@ function GetParkT()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
function GetCurrChainSawingVirtualAxis()
|
||||||
|
-- recupero il valore dell'asse virtuale bloccato A
|
||||||
|
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) or 'A=0'
|
||||||
|
local dPosA = tonumber( sVal:sub( 3)) or 0
|
||||||
|
return dPosA
|
||||||
|
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 ***
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|||||||
+67
-87
@@ -31,20 +31,9 @@ end
|
|||||||
|
|
||||||
---------- OnSpecialApplyDisposition & OnPostApplyMachining ---------
|
---------- OnSpecialApplyDisposition & OnPostApplyMachining ---------
|
||||||
----------------------- Costanti ------------------------------------
|
----------------------- Costanti ------------------------------------
|
||||||
local DELTA_TOL_V = 110
|
|
||||||
local DELTA_TOL_S = 210
|
|
||||||
local DELTA_TOL_L = 410
|
|
||||||
local DELTA_TOL_FIXED = 50
|
local DELTA_TOL_FIXED = 50
|
||||||
local DeltaTol = DELTA_TOL_S
|
|
||||||
local DELTA_SIC = 1
|
local DELTA_SIC = 1
|
||||||
local AGG_LOAD = 50
|
local AGG_LOAD = 50
|
||||||
local MIN_JOIN_VV = EgtClamp( MinJoinVV or 75, 60, 150)
|
|
||||||
local MIN_JOIN_SS = EgtClamp( MinJoinSS or 100, 80, 275)
|
|
||||||
local MIN_JOIN_LS = EgtClamp( MinJoinLS or 290, 250, 400)
|
|
||||||
local MIN_JOIN_SL = EgtClamp( MinJoinSL or 100, 80, 400)
|
|
||||||
local MIN_JOIN_LL = EgtClamp( MinJoinLL or 400, 300, 600)
|
|
||||||
local MinJoin = MIN_JOIN_SS
|
|
||||||
local MinOther = abs( MinY) + abs( MaxV) + MinJoin
|
|
||||||
|
|
||||||
----------------------- Variabili -----------------------------------
|
----------------------- Variabili -----------------------------------
|
||||||
local Test = false
|
local Test = false
|
||||||
@@ -153,53 +142,6 @@ local function IsFirstMachiningAfterRotation( nMchId)
|
|||||||
return ( nRot ~= nPrevRot)
|
return ( nRot ~= nPrevRot)
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
local function UpdateMinJoinDeltaTol()
|
|
||||||
local L_SMALL = 800
|
|
||||||
local H_V = 90
|
|
||||||
local H_S = 200
|
|
||||||
local H_L = 400
|
|
||||||
local W_V = 90
|
|
||||||
local W_S = 150
|
|
||||||
local W_L = 250
|
|
||||||
if EMC.SB <= W_V and EMC.HB <= H_V then
|
|
||||||
MinJoin = MIN_JOIN_VV
|
|
||||||
DeltaTol = DELTA_TOL_V
|
|
||||||
elseif EMC.LB <= L_SMALL then
|
|
||||||
MinJoin = MIN_JOIN_SS
|
|
||||||
DeltaTol = DELTA_TOL_S
|
|
||||||
else
|
|
||||||
local dMinJoinS
|
|
||||||
local dMinJoinL
|
|
||||||
if EMC.SB <= W_S then
|
|
||||||
dMinJoinS = MIN_JOIN_SS
|
|
||||||
dMinJoinL = MIN_JOIN_LS
|
|
||||||
elseif EMC.SB <= W_L then
|
|
||||||
local Coeff = ( EMC.SB - W_S) / ( W_L - W_S)
|
|
||||||
dMinJoinS = ( 1 - Coeff) * MIN_JOIN_SS + Coeff * MIN_JOIN_SL
|
|
||||||
dMinJoinL = ( 1 - Coeff) * MIN_JOIN_LS + Coeff * MIN_JOIN_LL
|
|
||||||
else
|
|
||||||
dMinJoinS = MIN_JOIN_SL
|
|
||||||
dMinJoinL = MIN_JOIN_LL
|
|
||||||
end
|
|
||||||
if EMC.HB <= H_S then
|
|
||||||
MinJoin = dMinJoinS
|
|
||||||
DeltaTol = DELTA_TOL_S
|
|
||||||
elseif EMC.HB <= H_L then
|
|
||||||
local Coeff = ( EMC.HB - H_S) / ( H_L - H_S)
|
|
||||||
MinJoin = ( 1 - Coeff) * dMinJoinS + Coeff * dMinJoinL
|
|
||||||
DeltaTol = ( 1 - Coeff) * DELTA_TOL_S + Coeff * DELTA_TOL_L
|
|
||||||
else
|
|
||||||
MinJoin = dMinJoinL
|
|
||||||
DeltaTol = DELTA_TOL_L
|
|
||||||
end
|
|
||||||
if EMC.SB < W_V then
|
|
||||||
DeltaTol = DELTA_TOL_V
|
|
||||||
end
|
|
||||||
end
|
|
||||||
MinOther = abs( MinY) + abs( MaxV) + MinJoin
|
|
||||||
end
|
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
local function GetCUTID()
|
local function GetCUTID()
|
||||||
-- recupero CUTID del pezzo in lavoro
|
-- recupero CUTID del pezzo in lavoro
|
||||||
@@ -367,7 +309,7 @@ function OnSpecialApplyDisposition()
|
|||||||
EMC.ZMIN = b3Raw:getMin():getZ()
|
EMC.ZMIN = b3Raw:getMin():getZ()
|
||||||
|
|
||||||
-- Aggiorno limiti di presa e tolleranza
|
-- Aggiorno limiti di presa e tolleranza
|
||||||
UpdateMinJoinDeltaTol()
|
UpdateMinJoinDeltaTol( EMC.SB, EMC.HB, EMC.LB)
|
||||||
|
|
||||||
-- Assegno sovramateriale di testa e ingombro tagli di testa e di coda
|
-- Assegno sovramateriale di testa e ingombro tagli di testa e di coda
|
||||||
EMC.HOVM = EgtGetInfo( nCurrRawId, 'HOVM', 'd') or 0
|
EMC.HOVM = EgtGetInfo( nCurrRawId, 'HOVM', 'd') or 0
|
||||||
@@ -656,7 +598,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
|
|||||||
EMC.ZMIN = b3Raw:getMin():getZ()
|
EMC.ZMIN = b3Raw:getMin():getZ()
|
||||||
|
|
||||||
-- Aggiorno limiti di presa e tolleranza
|
-- Aggiorno limiti di presa e tolleranza
|
||||||
UpdateMinJoinDeltaTol()
|
UpdateMinJoinDeltaTol( EMC.SB, EMC.HB, EMC.LB)
|
||||||
|
|
||||||
-- Recupero sovramateriale di testa e ingombro tagli di testa e di coda
|
-- Recupero sovramateriale di testa e ingombro tagli di testa e di coda
|
||||||
EMC.HOVM = EgtGetInfo( nCurrRawId, 'HOVM', 'd') or 0
|
EMC.HOVM = EgtGetInfo( nCurrRawId, 'HOVM', 'd') or 0
|
||||||
@@ -931,7 +873,7 @@ function SpecCalcEncumbrance( vtTool, vtArm, ptMin, ptMax, bSaw, bChain, dTLen,
|
|||||||
local dHeadBack = 350
|
local dHeadBack = 350
|
||||||
if bSaw then
|
if bSaw then
|
||||||
if vtTool:getX() > 0 and abs( vtTool:getY()) < 0.088 and abs( vtTool:getZ()) < 0.088 then
|
if vtTool:getX() > 0 and abs( vtTool:getY()) < 0.088 and abs( vtTool:getZ()) < 0.088 then
|
||||||
dHeadBack = 50 + 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX())
|
dHeadBack = 50 + 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX()) + EgtIf( EMC.CNT == 1, 10, 0)
|
||||||
elseif abs( vtTool:getZ()) < 0.26 and abs( vtTool:getX()) < 0.35 then
|
elseif abs( vtTool:getZ()) < 0.26 and abs( vtTool:getX()) < 0.35 then
|
||||||
dHeadBack = EgtIf( vtArm:getX() < 0, 540, 350)
|
dHeadBack = EgtIf( vtArm:getX() < 0, 540, 350)
|
||||||
elseif abs( vtTool:getZ()) < 0.26 and abs( vtTool:getX()) < 0.71 then
|
elseif abs( vtTool:getZ()) < 0.26 and abs( vtTool:getX()) < 0.71 then
|
||||||
@@ -1022,7 +964,7 @@ function SpecCalcEncumbrance( vtTool, vtArm, ptMin, ptMax, bSaw, bChain, dTLen,
|
|||||||
local dHeadFront = 350
|
local dHeadFront = 350
|
||||||
if bSaw then
|
if bSaw then
|
||||||
if vtTool:getX() < 0 and abs( vtTool:getY()) < 0.088 and abs( vtTool:getZ()) < 0.088 then
|
if vtTool:getX() < 0 and abs( vtTool:getY()) < 0.088 and abs( vtTool:getZ()) < 0.088 then
|
||||||
dHeadFront = 50 + 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX())
|
dHeadFront = 50 + 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX()) + EgtIf( EMC.CNT == 1, 10, 0)
|
||||||
elseif abs( vtTool:getZ()) < 0.26 and abs( vtTool:getX()) < 0.35 then
|
elseif abs( vtTool:getZ()) < 0.26 and abs( vtTool:getX()) < 0.35 then
|
||||||
dHeadFront = EgtIf( vtArm:getX() > 0, 540, 350)
|
dHeadFront = EgtIf( vtArm:getX() > 0, 540, 350)
|
||||||
elseif abs( vtTool:getZ()) < 0.26 and abs( vtTool:getX()) < 0.71 then
|
elseif abs( vtTool:getZ()) < 0.26 and abs( vtTool:getX()) < 0.71 then
|
||||||
@@ -1594,9 +1536,12 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
dTPosF = MaxV - dVDeltaF
|
dTPosF = MaxV - dVDeltaF
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- se il pinzaggio deve essere invertito forzo entrata nei riposizionamenti
|
||||||
|
-- altrimenti posizioni iniziali e finali sono coincidenti dato che la pinza non in presa viene posizionata alla distanza minima a quella in presa
|
||||||
|
local bInvertClamping = not EMC.PILGRIMSTEP and EMC.YDELTA ~= EMC.YDELTANEXT and EMC.VDELTA ~= EMC.VDELTANEXT
|
||||||
-- verifico che le morse non sono in posizione
|
-- verifico che le morse non sono in posizione
|
||||||
if abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL or abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL or
|
if ( abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL or abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL or bInvertClamping) and
|
||||||
EMC.YDELTA ~= EMC.YDELTANEXT or EMC.VDELTA ~= EMC.VDELTANEXT then
|
( EMC.YDELTA ~= EMC.YDELTANEXT or EMC.VDELTA ~= EMC.VDELTANEXT) then
|
||||||
if #vCmd == 0 then
|
if #vCmd == 0 then
|
||||||
table.insert( vCmd, { 0, 'Clamp repositioning'})
|
table.insert( vCmd, { 0, 'Clamp repositioning'})
|
||||||
-- risalita testa a Zmax
|
-- risalita testa a Zmax
|
||||||
@@ -1627,8 +1572,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
dMaxMovePilgrimStepSingleClampY = MaxY - dYPosI
|
dMaxMovePilgrimStepSingleClampY = MaxY - dYPosI
|
||||||
dMaxMovePilgrimStepSingleClampV = - MinV + dVPosI
|
dMaxMovePilgrimStepSingleClampV = - MinV + dVPosI
|
||||||
else
|
else
|
||||||
dMaxMovePilgrimStepDoubleClamp = MaxY - MinY - MinV + MaxV
|
dMaxMovePilgrimStepDoubleClamp = MaxY - MyMinY - MinV + MaxV
|
||||||
dMaxMovePilgrimStepSingleClampY = MaxY - MinY
|
dMaxMovePilgrimStepSingleClampY = MaxY - MyMinY
|
||||||
dMaxMovePilgrimStepSingleClampV = - MinV + MaxV
|
dMaxMovePilgrimStepSingleClampV = - MinV + MaxV
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1642,7 +1587,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
|
||||||
@@ -1666,6 +1613,18 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
-- se spostamento verso il carico
|
-- se spostamento verso il carico
|
||||||
elseif ( dVPosI + ( dVDeltaF - dVDeltaI)) > MaxV then
|
elseif ( dVPosI + ( dVDeltaF - dVDeltaI)) > MaxV then
|
||||||
dBeamMove = dVPosI + ( dVDeltaF - dVDeltaI) - MaxV
|
dBeamMove = dVPosI + ( dVDeltaF - dVDeltaI) - MaxV
|
||||||
|
-- se è FASTCLAMPING attivo, si suddivide il movimento
|
||||||
|
elseif BD.FASTCLAMPING then
|
||||||
|
-- se la trave si sposta dal carico verso lo scarico
|
||||||
|
if dTPosI - dTPosF > 0 then
|
||||||
|
dBeamMove = min( -( dTPosF - dTPosI), -( MyMinY - dYPosI), -( dVDeltaI - dVDeltaF))
|
||||||
|
else
|
||||||
|
dBeamMove = max( -( dTPosF - dTPosI), -( MyMinY - dYPosI))
|
||||||
|
end
|
||||||
|
dBeamMove = dBeamMove / 2
|
||||||
|
-- altrimenti la trave resta ferma e la pinza 1 va in presa (si limita lo scivolamento del pezzo)
|
||||||
|
else
|
||||||
|
;
|
||||||
end
|
end
|
||||||
|
|
||||||
-- se serve un grande spostamento e si sta pinzando poco. Y trascinatore pinza poco e V si sposta per prima per recuperare
|
-- se serve un grande spostamento e si sta pinzando poco. Y trascinatore pinza poco e V si sposta per prima per recuperare
|
||||||
@@ -1740,6 +1699,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
|
|
||||||
-- movimento terminato
|
-- movimento terminato
|
||||||
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
||||||
|
EMC.YDELTA = EMC.YDELTANEXT
|
||||||
|
EMC.VDELTA = EMC.VDELTANEXT
|
||||||
|
|
||||||
-- SECONDO CASO -> SCAMBIO DIRETTO : Y IN POSIZIONE FINALE
|
-- SECONDO CASO -> SCAMBIO DIRETTO : Y IN POSIZIONE FINALE
|
||||||
-- Y può andare in posizione direttamente se :
|
-- Y può andare in posizione direttamente se :
|
||||||
@@ -1747,7 +1708,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
|
||||||
@@ -1774,6 +1737,18 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
-- se spostamento verso il carico
|
-- se spostamento verso il carico
|
||||||
elseif ( dYPosI + ( dYDeltaF - dYDeltaI)) > MaxY then
|
elseif ( dYPosI + ( dYDeltaF - dYDeltaI)) > MaxY then
|
||||||
dBeamMove = -( dYPosI + ( dYDeltaF - dYDeltaI) - MaxY)
|
dBeamMove = -( dYPosI + ( dYDeltaF - dYDeltaI) - MaxY)
|
||||||
|
-- se è FASTCLAMPING attivo, si suddivide il movimento
|
||||||
|
elseif BD.FASTCLAMPING then
|
||||||
|
-- se la trave si sposta dal carico verso lo scarico
|
||||||
|
if dTPosI - dTPosF > 0 then
|
||||||
|
dBeamMove = max( ( dTPosF - dTPosI), ( MinV - dVPosI), ( dYDeltaI - dYDeltaF))
|
||||||
|
else
|
||||||
|
dBeamMove = min( ( dTPosF - dTPosI), ( MaxV - dVPosI))
|
||||||
|
end
|
||||||
|
dBeamMove = dBeamMove / 2
|
||||||
|
-- altrimenti la trave resta ferma e la pinza 1 va in presa (si limita lo scivolamento del pezzo)
|
||||||
|
else
|
||||||
|
;
|
||||||
end
|
end
|
||||||
|
|
||||||
-- se serve un grande spostamento e si sta pinzando poco. V trascinatore pinza poco e Y si sposta per prima per recuperare
|
-- se serve un grande spostamento e si sta pinzando poco. V trascinatore pinza poco e Y si sposta per prima per recuperare
|
||||||
@@ -1847,6 +1822,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
end
|
end
|
||||||
-- movimento terminato
|
-- movimento terminato
|
||||||
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
||||||
|
EMC.YDELTA = EMC.YDELTANEXT
|
||||||
|
EMC.VDELTA = EMC.VDELTANEXT
|
||||||
|
|
||||||
-- TERZO CASO -> PASSO DEL PELLEGRINO
|
-- TERZO CASO -> PASSO DEL PELLEGRINO
|
||||||
-- non è possibile fare scambio diretto.
|
-- non è possibile fare scambio diretto.
|
||||||
@@ -1886,8 +1863,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
dTPosI = dTPosA
|
dTPosI = dTPosA
|
||||||
dYPosI = dYPosA
|
dYPosI = dYPosA
|
||||||
dVPosI = dVPosA
|
dVPosI = dVPosA
|
||||||
dMaxMovePilgrimStepDoubleClamp = MaxY - MinY - MinV + MaxV
|
dMaxMovePilgrimStepDoubleClamp = MaxY - MyMinY - MinV + MaxV
|
||||||
dMaxMovePilgrimStepSingleClampY = MaxY - MinY
|
dMaxMovePilgrimStepSingleClampY = MaxY - MyMinY
|
||||||
dMaxMovePilgrimStepSingleClampV = - MinV + MaxV
|
dMaxMovePilgrimStepSingleClampV = - MinV + MaxV
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1895,6 +1872,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
dDeltaBeam = dTPosI - dTPosF
|
dDeltaBeam = dTPosI - dTPosF
|
||||||
|
|
||||||
-- a questo punto entrambe le pinze sono in presa sul pezzo.
|
-- a questo punto entrambe le pinze sono in presa sul pezzo.
|
||||||
|
-- trave si muove dal carico allo scarico
|
||||||
-- Il trascinatore si decide in base alla direzione di movimento trave
|
-- Il trascinatore si decide in base alla direzione di movimento trave
|
||||||
-- trascino con morsa allo scarico. Obiettivo mandare Y in posizione per prima
|
-- trascino con morsa allo scarico. Obiettivo mandare Y in posizione per prima
|
||||||
if dDeltaBeam > 0 then
|
if dDeltaBeam > 0 then
|
||||||
@@ -1937,18 +1915,20 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
||||||
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
||||||
-- recupero una corsa massima e l'altra solo di quello che serve
|
-- recupero una corsa massima e l'altra solo di quello che serve
|
||||||
elseif abs( dYDeltaI - dYDeltaF) > dMaxMovePilgrimStepSingleClampY then
|
elseif abs( dYDeltaI - dYDeltaF) > dMaxMovePilgrimStepSingleClampV then
|
||||||
|
-- suddivido il movimento su entrambe le morse
|
||||||
|
local dTotMove = ( ( dYDeltaF + dVDeltaF) / 2 + ( dYDeltaI + dVDeltaI) / 2) / 2
|
||||||
-- morsa Y arriva in posizione finale
|
-- morsa Y arriva in posizione finale
|
||||||
dYDeltaI = dYDeltaF
|
dVPosA = EgtClamp( MaxV - dTotMove, MaxV, MinV)
|
||||||
dVPosA = MinV
|
dTPosA = dTPosI - dVPosI + dVPosA
|
||||||
dTPosA = dTPosI - dVPosI + MinV
|
|
||||||
dYPosA = dYDeltaF + dTPosA
|
dYPosA = dYDeltaF + dTPosA
|
||||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||||
table.insert( vCmd, { 11, CalcCharStatus( 'Y', dYDeltaF)})
|
table.insert( vCmd, { 11, CalcCharStatus( 'Y', dYDeltaF)})
|
||||||
table.insert( vCmd, { 12, 0})
|
table.insert( vCmd, { 12, 0})
|
||||||
|
dYDeltaI = dYDeltaF
|
||||||
dTPosI = dTPosA
|
dTPosI = dTPosA
|
||||||
EMC.YDELTA = dYDeltaF
|
EMC.YDELTA = dYDeltaF
|
||||||
EMC.VDELTA = dVDeltaI
|
EMC.VDELTA = nil
|
||||||
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
||||||
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
||||||
-- non serve recuperare al massimo della corsa, suddivido movimento in due
|
-- non serve recuperare al massimo della corsa, suddivido movimento in due
|
||||||
@@ -1982,9 +1962,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
end
|
end
|
||||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||||
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
||||||
|
EMC.YDELTA = EMC.YDELTANEXT
|
||||||
-- aggiorno nuova posizione della morsa allo scarico dopo riposizionamento
|
EMC.VDELTA = EMC.VDELTANEXT
|
||||||
dVDeltaI = dVDeltaF
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- imposto i nuovi parametri di aggancio
|
-- imposto i nuovi parametri di aggancio
|
||||||
@@ -2043,17 +2022,19 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
||||||
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
||||||
-- recupero una corsa massima e l'altra solo di quello che serve
|
-- recupero una corsa massima e l'altra solo di quello che serve
|
||||||
elseif abs( dVDeltaI - dVDeltaF) > dMaxMovePilgrimStepSingleClampV then
|
elseif abs( dVDeltaI - dVDeltaF) > dMaxMovePilgrimStepSingleClampY then
|
||||||
-- aggiorno nuova posizione della morsa al carico dopo riposizionamento
|
-- suddivido il movimento su entrambe le morse
|
||||||
dVDeltaI = dVDeltaF
|
local dTotMove = ( ( dYDeltaF + dVDeltaF) / 2 + ( dYDeltaI + dVDeltaI) / 2) / 2
|
||||||
dYPosA = MaxY
|
-- morsa V arriva in posizione finale
|
||||||
dTPosA = dTPosI + ( MaxY - dYPosI)
|
dYPosA = EgtClamp( MinY + dTotMove, MinY, MaxY)
|
||||||
|
dTPosA = dTPosI - dYPosI + dYPosA
|
||||||
dVPosA = dVDeltaF + dTPosA
|
dVPosA = dVDeltaF + dTPosA
|
||||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||||
table.insert( vCmd, { 12, CalcCharStatus( 'V', dVDeltaF)})
|
table.insert( vCmd, { 12, CalcCharStatus( 'V', dVDeltaF)})
|
||||||
table.insert( vCmd, { 11, 0})
|
table.insert( vCmd, { 11, 0})
|
||||||
|
dVDeltaI = dVDeltaF
|
||||||
dTPosI = dTPosA
|
dTPosI = dTPosA
|
||||||
EMC.YDELTA = dYDeltaI
|
EMC.YDELTA = nil
|
||||||
EMC.VDELTA = dVDeltaF
|
EMC.VDELTA = dVDeltaF
|
||||||
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
||||||
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
||||||
@@ -2088,9 +2069,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|||||||
end
|
end
|
||||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||||
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
||||||
|
EMC.YDELTA = EMC.YDELTANEXT
|
||||||
-- aggiorno nuova posizione della morsa al carico dopo riposizionamento
|
EMC.VDELTA = EMC.VDELTANEXT
|
||||||
dYDeltaI = dYDeltaF
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- imposto i nuovi parametri di aggancio
|
-- imposto i nuovi parametri di aggancio
|
||||||
|
|||||||
+87
-4
@@ -1,20 +1,103 @@
|
|||||||
==== Common_FAST Update Log ====
|
==== Common_FAST Update Log ====
|
||||||
|
|
||||||
Versione 2.7b1 (20/02/2024)
|
Versione 3.1d2 (22/04/2026)
|
||||||
|
- (GEN) Corretta generazione del PreparePostRotation (in tutti i CN) ora salva lo stato della pinza per lo spostamento successivo. Ticket#2933
|
||||||
|
- (SIM-GEN) Corretto pinzaggio in caso di passo del pellegrino con recupero completo di una sola pinza
|
||||||
|
|
||||||
|
Versione 3.1d1 (14/04/2026)
|
||||||
|
- (SIM-GEN) Aggiorna lo step totale del PilgrimStep e lo step Y con il valore di MyMinY, di modo che tenga conto del AGG_LOAD quando c'è. Ticket#2919
|
||||||
|
- (GEN) Per NUM, si lascia aperta la pinza di carico in caso di END2. TPA era già corretto. Ticket#2869
|
||||||
|
|
||||||
|
Versione 3.1c2 (30/03/2026)
|
||||||
|
- (SIM-GEN) Corretti moviemnti con motosega. Ora si ruota la C con B sempre a zero, anche alla posizione X di sicurezza. Ticket#2866
|
||||||
|
|
||||||
|
Versione 3.1c1 (27/03/2026)
|
||||||
|
- (SIM-GEN) FASTCLAMPING = true : si suddivide il movimento metà tirando e metà spingendo con altra pinza. Così si aumenta la velocità.
|
||||||
|
- FASTCLAMPING = false : una pinza resta ferma e si fa il movimento tutto con una pinza. Così si limita lo scivolamento del pezzo.
|
||||||
|
- (GEN) In caso di motosega prelevata, si ruota in home. Ticket#2866
|
||||||
|
|
||||||
|
Versione 3.1a2 (26/01/2026)
|
||||||
|
- (GEN) Nella G101 il parametro EE era sempre a 4 perchè la variabile veniva settata dopo. Ticket#2796
|
||||||
|
|
||||||
|
Versione 3.1a1 (08/01/2026)
|
||||||
|
- (SIM) Ottimizzata scrittura funzione ClampCheck post aggiornamento dll
|
||||||
|
- (SIM) Corretto problema della funzione OnSimulDispositionStart in caso di fase finale.
|
||||||
|
- (MLDE-SIM-GEN) Variabile DeltaTol deve essere spostata in MLDE
|
||||||
|
|
||||||
|
Versione 2.7l3 (22/12/2025)
|
||||||
|
- (SIM) Eliminata MinJoin, utilizzata al suo posto funzione già esistente UpdateMinJoin nell'mlde
|
||||||
|
- (SIM) Modificata formula calcolo Area minima
|
||||||
|
|
||||||
|
Versione 2.7l2 (18/12/2025)
|
||||||
|
- (SIM) Aggiunta funzione CheckClamping
|
||||||
|
|
||||||
|
Versione 2.7l1 (10/12/2025)
|
||||||
|
- (SIM) Aggiornata risoluzione VMillTol in funzione dello spessore lama
|
||||||
|
- (EST) Modifiche a calcolo stima tempi, da verificare.
|
||||||
|
- (SIM) Corretto movimento in simulazione che non rispettava movimento generato.
|
||||||
|
- (GEN) Con controllo NUM/NUM_PLUS nella scrittura della coordinata tolto il simbolo '='
|
||||||
|
- (SIM) Aggiunto controllo C in base a carico Dx o Sx durante il cambio utensile
|
||||||
|
|
||||||
|
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)
|
||||||
|
- (SIM-GEN) Aggiunti 10mm di sicurezza in caso di primo pinzaggio per stare oltre tolleranza riqualifica laser di 50mm. Ticket#2504
|
||||||
|
|
||||||
|
Versione 2.7f2 (19/06/2025)
|
||||||
|
- (GEN) Se in separazione il pezzo è andato più lontano della posizione standard, viene riletta. Ticket#2498
|
||||||
|
|
||||||
|
Versione 2.7f1 (18/06/2025)
|
||||||
|
- (SIM-GEN) Se utensile più lungo di 350mm, si va in posizione sicurezza come per la motosega. Ticket#2438
|
||||||
|
|
||||||
|
Versione 2.7e1 (26/05/2025)
|
||||||
|
- (SIM) Aumentata dimensione massima per la quale si rimuove uno scarto dal VMILL. Ticket#1438
|
||||||
|
- (SIM) In simulazione, corretto selezione utensile per punte lunghe. Ticket#2438
|
||||||
|
|
||||||
|
Versione 2.7d1 (14/04/2025)
|
||||||
|
- (GEN) Corretto movimento iniziale in caso di motosega, si controlla solo se non è il carico. Ticket#2385
|
||||||
|
|
||||||
|
Versione 2.7c1 (26/03/2025)
|
||||||
|
- (GEN) All'inizio del codice ISO si scrive nel commento anche il controllo numerico utilizzato per la generazione.
|
||||||
|
- (GEN) Aggiunta commenti HEADER e FOOTER per comunicazione con linea o altre macchine, da parte di Essetre.
|
||||||
|
- (GEN) In MyAdjustLinearAxes si utilizza TDIR per calcolarsi gli offset per compatibilità con lavorazioni a 5 assi.
|
||||||
|
|
||||||
|
Versione 2.7b1 (20/02/2025)
|
||||||
- (SIM-GEN) Aggiunta possibilità di settare HCING/TCING nelle note di ogni singola lavorazione per gestire parte non pinzabile del pezzo. Funziona solo con nuovo pinzaggio.
|
- (SIM-GEN) Aggiunta possibilità di settare HCING/TCING nelle note di ogni singola lavorazione per gestire parte non pinzabile del pezzo. Funziona solo con nuovo pinzaggio.
|
||||||
- (SIM-GEN) Piccola correzione calcolo posizione carrelli con nuova strategia di pinzaggio.
|
- (SIM-GEN) Piccola correzione calcolo posizione carrelli con nuova strategia di pinzaggio.
|
||||||
- (SIM-GEN) Caricamento libreria EmtGenMachining. Si fa una require con PCALL perchè la libreria è opzionale e non è detto che ci sia. In installazione CAM5 dalla 2.7a1
|
- (SIM-GEN) Caricamento libreria EmtGenMachining. Si fa una require con PCALL perchè la libreria è opzionale e non è detto che ci sia. In installazione CAM5 dalla 2.7a1
|
||||||
- (GEN) Per controllo TPA, modifica al numero di decimali.
|
- (GEN) Per controllo TPA, modifica al numero di decimali.
|
||||||
- (SIM) Aggiunta gestione per ToolHolder flottante
|
- (SIM) Aggiunta gestione per ToolHolder flottante
|
||||||
|
|
||||||
Versione 2.7a3 (08/01/2024)
|
Versione 2.7a3 (08/01/2025)
|
||||||
- (GEN) Dopo separazione, in NUM_PLUS, si srive EH1 solo se macro G101, perchè altrimenti non è prevista. Ticket#2239
|
- (GEN) Dopo separazione, in NUM_PLUS, si srive EH1 solo se macro G101, perchè altrimenti non è prevista. Ticket#2239
|
||||||
|
|
||||||
Versione 2.7a2 (08/01/2024)
|
Versione 2.7a2 (08/01/2025)
|
||||||
- (MLDE-SIM) Aggiunta gestione FACOLTATIVA 'EstimationRapidMultiplier' in MLDE per regolare il tempo stimato. Se non presente in MLDE, default 1.
|
- (MLDE-SIM) Aggiunta gestione FACOLTATIVA 'EstimationRapidMultiplier' in MLDE per regolare il tempo stimato. Se non presente in MLDE, default 1.
|
||||||
- (SIM) Aggiunta gestione qualità VMILL da impostazioni macchina
|
- (SIM) Aggiunta gestione qualità VMILL da impostazioni macchina
|
||||||
|
|
||||||
Versione 2.7a1 (07/01/2024)
|
Versione 2.7a1 (07/01/2025)
|
||||||
- (MLDE-SIM-GEN) Nuovo aggregato 90° (H7) per fresa tipo BlockHaus. Ticket#2142
|
- (MLDE-SIM-GEN) Nuovo aggregato 90° (H7) per fresa tipo BlockHaus. Ticket#2142
|
||||||
- (SIM-GEN) Aumentati limiti massimi di pinzaggio minimo
|
- (SIM-GEN) Aumentati limiti massimi di pinzaggio minimo
|
||||||
|
|
||||||
|
|||||||
+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.7b1', -- versione script
|
VERSION = '3.1d2', -- 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