Compare commits
51 Commits
2.6l2_DEV2
...
2.7l1
| Author | SHA1 | Date | |
|---|---|---|---|
| b7f18cf0c0 | |||
| 11f452bac8 | |||
| 5069b4fc4c | |||
| f1e3ff79b4 | |||
| d6b602a59d | |||
| 0493ddfa66 | |||
| 22ef746a36 | |||
| d3ddf9f9c7 | |||
| 97dcda8917 | |||
| 0236d466b3 | |||
| 52e305aa48 | |||
| e3c1ab71fe | |||
| 32e5f54761 | |||
| 04a7f180e8 | |||
| fc8b39d260 | |||
| 0563e0c8ca | |||
| f8983fa6b4 | |||
| 726f04fabd | |||
| 6423ccf1b7 | |||
| 6c3de96111 | |||
| 87438322e9 | |||
| 64ef5eaa83 | |||
| 95e7746eb6 | |||
| 3de0fec055 | |||
| 6bd8510157 | |||
| 5c4fb776a1 | |||
| 61f7013cb2 | |||
| c4ecf572f3 | |||
| ea25a546f1 | |||
| e3f0681e13 | |||
| 44c4d04c69 | |||
| 347270d828 | |||
| a02f606523 | |||
| 23f0376597 | |||
| 168bb88652 | |||
| a899576839 | |||
| 60ad88654d | |||
| 5114ea7da4 | |||
| 098d4cb91d | |||
| 243d0e5866 | |||
| 7fedf117c7 | |||
| 954fab86c4 | |||
| 7384e26b7c | |||
| 4197cc437a | |||
| d592576363 | |||
| c6b492986f | |||
| b574dae2dd | |||
| c578e17bbb | |||
| 7da8dffdae | |||
| 1bb7bb1ce2 | |||
| 06f0b344dd |
@@ -1,6 +1,7 @@
|
||||
/Tools
|
||||
/Machinings
|
||||
/SetUp
|
||||
/Beam/AISetup
|
||||
/Beam/Ts3Data.bak
|
||||
/Beam/CutData.lua
|
||||
/Beam/DrillData.lua
|
||||
|
||||
+9
-4
@@ -6,9 +6,9 @@ EgtOutLog( ' FAST-BeamData started', 1)
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
local BeamData = {
|
||||
RIGHT_LOAD = true, -- flag carico da destra
|
||||
SIMUL_VIEW_DIR = 1, -- direzione di vista predefinita per la simulazione (1=NW, 2=SW, 3=NE, 4=SE)
|
||||
GO_FAST = 0, -- flag abilitazione modalità veloce (0=no, 1=carrelli, 2=anche cambio utensili)
|
||||
RIGHT_LOAD = true, -- flag carico da destra
|
||||
ROT90 = false, -- flag abilitazione rotazione 90 gradi
|
||||
ROT180 = true, -- flag abilitazione rotazione 180 gradi
|
||||
NEWCLAMPING = false, -- flag abilitazione nuovo metodo riposizionamento carrelli
|
||||
@@ -107,6 +107,9 @@ if EgtExistsFile( sData) then
|
||||
BeamData.ADVANCE_TAIL_OFFS = Machine.Offsets.ADVANCE_TAIL_OFFS or BeamData.ADVANCE_TAIL_OFFS
|
||||
BeamData.LEN_VERY_SHORT_PART = Machine.Offsets.LEN_VERY_SHORT_PART or BeamData.LEN_VERY_SHORT_PART
|
||||
BeamData.LEN_SHORT_PART = Machine.Offsets.LEN_SHORT_PART or BeamData.LEN_SHORT_PART
|
||||
BeamData.MAX_DIM_HTCUT_HBEAM = Machine.Offsets.MAX_DIM_HTCUT_HBEAM or BeamData.MAX_DIM_HTCUT_HBEAM
|
||||
BeamData.MAX_HEIGHT2 = Machine.Offsets.MAX_HEIGHT2 or BeamData.MAX_HEIGHT2
|
||||
BeamData.OVM_MID = Machine.Offsets.OVM_MID or BeamData.OVM_MID
|
||||
if Machine.Offsets.PRECUT_HEAD_DISABLE then BeamData.PRECUT_HEAD = ( Machine.Offsets.PRECUT_HEAD_DISABLE == 0) end
|
||||
if Machine.Offsets.PRECUT_TAIL_DISABLE then BeamData.PRECUT_TAIL = ( Machine.Offsets.PRECUT_TAIL_DISABLE == 0) end
|
||||
if Machine.Offsets.MIN_HEIGHT_ADDED_CUTS then BeamData.MIN_HEIGHT_ADDED_CUTS = min( Machine.Offsets.MIN_HEIGHT_ADDED_CUTS, BeamData.MIN_HEIGHT_ADDED_CUTS) end
|
||||
@@ -114,6 +117,8 @@ if EgtExistsFile( sData) then
|
||||
if Machine.Offsets.FASTCLAMPING ~= nil then BeamData.FASTCLAMPING = ( Machine.Offsets.FASTCLAMPING == 1) end
|
||||
if Machine.Offsets.ROT90 ~= nil then BeamData.ROT90 = ( Machine.Offsets.ROT90 == 1) end
|
||||
if Machine.Offsets.ROT180 ~= nil then BeamData.ROT180 = ( Machine.Offsets.ROT180 == 1) end
|
||||
if Machine.Offsets.CUT_SIC then BeamData.CUT_SIC = EgtClamp( Machine.Offsets.CUT_SIC, 15, 50) end
|
||||
|
||||
end
|
||||
if Machine.Trave then
|
||||
BeamData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH
|
||||
@@ -178,10 +183,10 @@ BeamData.GetBlockedAxis = GetBlockedAxis
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function GetChainSawInitAngs( vtN, vtO, nInd)
|
||||
if nInd == 1 then
|
||||
return ''
|
||||
if vtN:getY() > 0 and vtO:getX() > 0 then
|
||||
return 'C=0'
|
||||
else
|
||||
return EgtIf( vtN:getY() > 0, 'C=180', 'C=-180')
|
||||
return ''
|
||||
end
|
||||
end
|
||||
BeamData.GetChainSawInitAngs = GetChainSawInitAngs
|
||||
|
||||
+29
-19
@@ -4,9 +4,11 @@
|
||||
|
||||
[Drill]
|
||||
1=Drill
|
||||
2=Pocket
|
||||
3=AngleDrill
|
||||
4=Predrill
|
||||
2=Drill_AT
|
||||
3=Pocket
|
||||
4=Pocket_AT
|
||||
5=AngleDrill
|
||||
6=Predrill
|
||||
|
||||
[Milling]
|
||||
1=Prof
|
||||
@@ -14,25 +16,33 @@
|
||||
3=Tenon
|
||||
4=DtTenon
|
||||
5=DtMortise
|
||||
6=BirdsMouth
|
||||
7=Chamfer
|
||||
8=Mark
|
||||
9=Text
|
||||
10=Decor01
|
||||
11=Long2Cut
|
||||
12=Long2CutDown
|
||||
13=LongSmallCut
|
||||
14=BHSideMill
|
||||
15=CleanCorner
|
||||
16=ProfTCone
|
||||
17=Long2CutSide
|
||||
18=SmallToolContour
|
||||
19=AntiSplintMillCut
|
||||
6=DtMortise_AT
|
||||
7=BirdsMouth
|
||||
8=Chamfer
|
||||
9=Mark
|
||||
10=Text
|
||||
11=Text_AT
|
||||
12=Decor01
|
||||
13=Long2Cut
|
||||
14=Long2CutDown
|
||||
15=LongSmallCut
|
||||
16=BHSideMill
|
||||
17=CleanCorner
|
||||
18=ProfTCone
|
||||
19=Long2CutSide
|
||||
20=SmallToolContour
|
||||
21=AntiSplintMillCut
|
||||
22=Prof_end
|
||||
23=SideMillAsBlade
|
||||
24=FloatingAggregate
|
||||
|
||||
[Pocketing]
|
||||
1=Pocket
|
||||
2=OpenPocket
|
||||
3=Mortise
|
||||
2=Pocket_AT
|
||||
3=OpenPocket
|
||||
4=OpenPocket_AT
|
||||
5=Mortise
|
||||
6=Mortise_AT
|
||||
|
||||
[Sawing]
|
||||
1=Sawing
|
||||
|
||||
+46
-25
@@ -6,7 +6,7 @@ local INFO_STD_PP = require( 'Version')
|
||||
local BD = require( 'BeamData')
|
||||
|
||||
-- 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 TEST_USE = false
|
||||
|
||||
@@ -27,7 +27,9 @@ function OnStart()
|
||||
--EMT.LINEINC = 1 -- incremento numerazione linee
|
||||
--EMT.Ft = 'F' -- token per feed
|
||||
--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
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -53,6 +55,7 @@ function OnProgramStart()
|
||||
end
|
||||
EmtOutput( sPrefixCommentLine..'('.. CSP_INFO..')')
|
||||
EmtOutput( sPrefixCommentLine..'('.. MACHINE_INFO..')\n')
|
||||
EmtOutput( '(HEADER)')
|
||||
-- Se modalità test, aggiungo linee per muovere tappeto e alzare la testa (in automatico viene fatto dal main residente)
|
||||
if TEST_USE then
|
||||
EmtOutput( 'M28')
|
||||
@@ -104,6 +107,7 @@ function OnProgramEnd()
|
||||
EMT.FALL = nil
|
||||
EMT.RELOAD = nil
|
||||
EMT.RELOAD2 = nil
|
||||
EmtOutput( '(FOOTER)')
|
||||
-- Se modalità test, termino il programma
|
||||
if TEST_USE then
|
||||
EmtOutput( 'M02')
|
||||
@@ -181,16 +185,12 @@ function OnDispositionEnd()
|
||||
local STrave = EMT.ST
|
||||
local HOverM = EMT.HOVM
|
||||
-- calcolo dati pinze
|
||||
local MinAccPinze = 0.3
|
||||
local MaxAccPinze = 4
|
||||
local KgMtCubo= WoodDensity or 550 -- densità legno in Kg / metro cubo
|
||||
local Massa = ( HTrave * STrave * LBarra * KgMtCubo ) / 1000000000
|
||||
local FMaxPinze = EMT.FMAXPINZE
|
||||
local ForzaAtrito = 700 / 2 -- Serve per regolare P32 (700 valore reale pistone)
|
||||
local TempoAcc = ( ( Massa * FMaxPinze) / ( 60 * ForzaAtrito) / 1000)
|
||||
if ( TempoAcc < MinAccPinze) then TempoAcc = MinAccPinze end
|
||||
if ( TempoAcc > MaxAccPinze) then TempoAcc = MaxAccPinze end
|
||||
local AccPinze = FMaxPinze / ( 60 * TempoAcc)
|
||||
local AccPinze = EgtClamp( FMaxPinze / ( 60 * TempoAcc), EMT.MINACC, EMT.MAXACC)
|
||||
local RidFeed = 100 / Massa * 100
|
||||
if ( RidFeed > 100) then RidFeed = 100 end
|
||||
if IdTrave >= 0 then
|
||||
@@ -250,9 +250,9 @@ function OnDispositionEnd()
|
||||
EmtOutput( sOut)
|
||||
-- altrimenti recupero rimanenza
|
||||
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
|
||||
EMT.YDELTA = EMT.YPOS - LoadT
|
||||
EMT.YDELTA = EMT.YPOS - EMT.TPOS
|
||||
EMT.VDELTA = nil
|
||||
end
|
||||
-- eventuale preparazione per rotazione immediata
|
||||
@@ -496,6 +496,7 @@ function OnMachiningEnd()
|
||||
EMT.U_STD = nil
|
||||
EMT.PREVTOOL = EMT.TOOL
|
||||
EMT.PREVHEAD = EMT.HEAD
|
||||
EMT.PREVET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -626,15 +627,32 @@ function OnRapid()
|
||||
end
|
||||
end
|
||||
|
||||
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||
|
||||
local bGoToHome = false
|
||||
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
|
||||
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and sET == EMT.PREVET and ( abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then
|
||||
bGoToHome = true
|
||||
end
|
||||
|
||||
-- ricavo i dati per la lavorazione
|
||||
local sEE = ' EE' .. EgtIf( bZmax, '3', '4')
|
||||
local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3)
|
||||
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
||||
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||
|
||||
-- primo posizionamento
|
||||
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
|
||||
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.FLAG2 == 1 then
|
||||
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||
' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
|
||||
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
|
||||
EmtOutput( sOutPreMove)
|
||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1pp, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
EmtOutput( sOutPreMove)
|
||||
EmtOutput( 'G101 ET1001')
|
||||
EmtOutput( 'G101 ET2001')
|
||||
end
|
||||
@@ -644,18 +662,21 @@ function OnRapid()
|
||||
EmtOutput( '( *** ' .. sOut .. ' *** )')
|
||||
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
|
||||
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.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 sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
|
||||
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
|
||||
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.R1pp, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
EmtOutput( sOutPreMove)
|
||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
EmtOutput( sOutPreMove)
|
||||
end
|
||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||
' B' .. EgtNumToString( EMT.R2, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
EmtOutput( sOutPreMove)
|
||||
EmtOutput( 'G101 ET1001')
|
||||
EmtOutput( 'G101 ET2001')
|
||||
@@ -845,13 +866,13 @@ function OnRapid()
|
||||
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)
|
||||
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..' B=' .. EgtNumToString( dBAxis, 3) ..
|
||||
' C=' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..' B' .. EgtNumToString( dBAxis, 3) ..
|
||||
' C' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
EmtOutput( sOut)
|
||||
EmtOutput( 'G101 ET1001')
|
||||
EmtOutput( 'G101 ET2001')
|
||||
sOut = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. EmtGetAxis( 'L3') ..' B=' .. EgtNumToString( dBAxis, 3) ..
|
||||
' C=' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
sOut = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. EmtGetAxis( 'L3') ..' B' .. EgtNumToString( dBAxis, 3) ..
|
||||
' C' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
EmtOutput( sOut)
|
||||
EmtOutput( 'G101 ET1001')
|
||||
EmtOutput( 'G101 ET2001')
|
||||
@@ -1538,7 +1559,7 @@ function MyAdjustLinearAxes()
|
||||
elseif EMT.HEAD ~= 'H3' then
|
||||
local Len = EMT.TLEN + EgtIf( EMT.HEAD == 'H1', MillOffs, abs( SawOffs))
|
||||
local LenRef = MillOffs
|
||||
vtE = Vector3d( EMT.EXTR) * Len - Z_AX() * LenRef
|
||||
vtE = Vector3d( EMT.TDIR) * Len - Z_AX() * LenRef
|
||||
else
|
||||
local LenAux = ( EMT.TDIST or ChSawLen) + MillOffs
|
||||
local LenRef = MillOffs
|
||||
|
||||
+58
-55
@@ -6,7 +6,7 @@ local INFO_STD_PP = require( 'Version')
|
||||
local BD = require( 'BeamData')
|
||||
|
||||
-- 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 TEST_USE = false
|
||||
|
||||
@@ -27,7 +27,9 @@ function OnStart()
|
||||
--EMT.LINEINC = 1 -- incremento numerazione linee
|
||||
--EMT.Ft = 'F' -- token per feed
|
||||
--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
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -53,6 +55,7 @@ function OnProgramStart()
|
||||
end
|
||||
EmtOutput( sPrefixCommentLine..'('.. CSP_INFO..')')
|
||||
EmtOutput( sPrefixCommentLine..'('.. MACHINE_INFO..')\n')
|
||||
EmtOutput( '(HEADER)')
|
||||
-- Se modalità test, aggiungo linee per muovere tappeto e alzare la testa (in automatico viene fatto dal main residente)
|
||||
if TEST_USE then
|
||||
EmtOutput( 'M28')
|
||||
@@ -108,6 +111,7 @@ function OnProgramEnd()
|
||||
EMT.FALL = nil
|
||||
EMT.RELOAD = nil
|
||||
EMT.RELOAD2 = nil
|
||||
EmtOutput( '(FOOTER)')
|
||||
-- Se modalità test, termino il programma
|
||||
if TEST_USE then
|
||||
EmtOutput( 'M02')
|
||||
@@ -203,9 +207,9 @@ function OnDispositionEnd()
|
||||
local BtlInfoId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or EgtGetCurrMachGroup() or GDB_ID.NULL
|
||||
local nLoad90 = EgtGetInfo( BtlInfoId, 'LOAD90', 'i') or 0
|
||||
-- calcolo dati pinze
|
||||
local AccPinze, AccMaxPinze, RidFeed, TempoAcc = CalcDinamicaPinze( HTrave, STrave, LBarra)
|
||||
local AccPinz1, AccMaxPinz1, RidFeed1, TempoAcc1 = CalcDinamicaPinze( HTrave, STrave, LBarra - LTrave)
|
||||
local AccPinz2, AccMaxPinz2, RidFeed2, TempoAcc2 = CalcDinamicaPinze( HTrave, STrave, LTrave)
|
||||
local AccPinze, AccMaxPinze, RidFeed, TempoAcc = CalcDinamicaPinze_NUM( HTrave, STrave, LBarra)
|
||||
local AccPinz1, AccMaxPinz1, RidFeed1, TempoAcc1 = CalcDinamicaPinze_NUM( HTrave, STrave, LBarra - LTrave)
|
||||
local AccPinz2, AccMaxPinz2, RidFeed2, TempoAcc2 = CalcDinamicaPinze_NUM( HTrave, STrave, LTrave)
|
||||
if IdTrave >= 0 then
|
||||
local sOut = '( SN='..IdTrave..' LBarra='..EmtLenToString( LBarra, 3)..' L='..EmtLenToString( LTrave, 3)..
|
||||
' H='..EmtLenToString( HTrave, 3)..' S='..EmtLenToString( STrave, 3)..' Acc='..EgtNumToString( TempoAcc, 1)..
|
||||
@@ -269,9 +273,9 @@ function OnDispositionEnd()
|
||||
EmtOutput( sOut)
|
||||
-- altrimenti recupero rimanenza
|
||||
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
|
||||
EMT.YDELTA = EMT.YPOS - LoadT
|
||||
EMT.YDELTA = EMT.YPOS - EMT.TPOS
|
||||
EMT.VDELTA = nil
|
||||
end
|
||||
-- eventuale preparazione per rotazione immediata
|
||||
@@ -493,7 +497,7 @@ function OnMachiningEnd()
|
||||
end
|
||||
for i = 1, #EMT.AUXSTR do
|
||||
local sOut = EMT.AUXSTR[i]
|
||||
if EMT.AUXTYPE == 'S' then
|
||||
if EMT.AUXTYPE == 'S' and sOut:find( 'G101 ') then
|
||||
sOut = sOut .. ' EH1'
|
||||
elseif EMT.AUXTYPE == 'U' and not EMT.CHY_ON and not sOut:find( 'ET') then
|
||||
sOut = sOut .. ' ET2'
|
||||
@@ -540,6 +544,7 @@ function OnMachiningEnd()
|
||||
EMT.PREVTOOL = EMT.TOOL
|
||||
EMT.PREVHEAD = EMT.HEAD
|
||||
EMT.PREVR3 = EMT.R3
|
||||
EMT.PREVET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -671,22 +676,12 @@ function OnRapid()
|
||||
end
|
||||
end
|
||||
|
||||
-- primo posizionamento
|
||||
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||
if 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
|
||||
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
|
||||
|
||||
if not EMT.LOAD then
|
||||
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '-'), '%)', '-')
|
||||
EmtOutput( '( *** ' .. sOut .. ' *** )')
|
||||
local bGoToHome = false
|
||||
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
|
||||
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and sET == EMT.PREVET and ( abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then
|
||||
bGoToHome = true
|
||||
end
|
||||
|
||||
-- ricavo i dati per la lavorazione
|
||||
@@ -716,14 +711,44 @@ function OnRapid()
|
||||
sER = sER..EmtLenToString( EMT.TDIAM / 2, 3)
|
||||
end
|
||||
|
||||
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
|
||||
if ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
||||
local sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
|
||||
-- primo posizionamento
|
||||
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.FLAG2 == 1 then
|
||||
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||
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' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
EmtOutput( sOutPreMove)
|
||||
EmtOutput( 'G101 ET1001')
|
||||
EmtOutput( 'G101 ET2001')
|
||||
end
|
||||
|
||||
if not EMT.LOAD then
|
||||
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '-'), '%)', '-')
|
||||
EmtOutput( '( *** ' .. sOut .. ' *** )')
|
||||
end
|
||||
|
||||
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
|
||||
if not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
|
||||
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
|
||||
local sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
|
||||
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.R1pp, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
EmtOutput( sOutPreMove)
|
||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
EmtOutput( sOutPreMove)
|
||||
end
|
||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||
' B' .. EgtNumToString( EMT.R2, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
EmtOutput( sOutPreMove)
|
||||
EmtOutput( 'G101 ET1001')
|
||||
EmtOutput( 'G101 ET2001')
|
||||
@@ -923,13 +948,13 @@ function OnRapid()
|
||||
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)
|
||||
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..' B=' .. EgtNumToString( dBAxis, 3) ..
|
||||
' C=' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..' B' .. EgtNumToString( dBAxis, 3) ..
|
||||
' C' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
EmtOutput( sOut)
|
||||
EmtOutput( 'G101 ET1001')
|
||||
EmtOutput( 'G101 ET2001')
|
||||
sOut = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. EmtGetAxis( 'L3') ..' B=' .. EgtNumToString( dBAxis, 3) ..
|
||||
' C=' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
sOut = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. EmtGetAxis( 'L3') ..' B' .. EgtNumToString( dBAxis, 3) ..
|
||||
' C' .. EgtNumToString( dCAxis, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
EmtOutput( sOut)
|
||||
EmtOutput( 'G101 ET1001')
|
||||
EmtOutput( 'G101 ET2001')
|
||||
@@ -1091,28 +1116,6 @@ function FindNextTool()
|
||||
return sTool, sHead, sTcPos
|
||||
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)
|
||||
-- aperto
|
||||
@@ -1640,7 +1643,7 @@ function MyAdjustLinearAxes()
|
||||
if EMT.HEAD == 'H1' or EMT.HEAD == 'H2' then
|
||||
local Len = EMT.TLEN + EgtIf( EMT.HEAD == 'H1', MillOffs, abs( SawOffs))
|
||||
local LenRef = MillOffs
|
||||
vtE = Vector3d( EMT.EXTR) * Len - Z_AX() * LenRef
|
||||
vtE = Vector3d( EMT.TDIR) * Len - Z_AX() * LenRef
|
||||
elseif EMT.HEAD == 'H3' then
|
||||
local LenAux = ( EMT.TDIST or ChSawLen) + MillOffs
|
||||
local LenRef = MillOffs
|
||||
|
||||
+82
-71
@@ -6,7 +6,7 @@ local INFO_STD_PP = require( 'Version')
|
||||
local BD = require( 'BeamData')
|
||||
|
||||
-- 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 TEST_USE = false
|
||||
|
||||
@@ -21,14 +21,19 @@ function OnStart()
|
||||
EMT.USETO1 = false -- abilitazione uso origine tavola
|
||||
EMT.MODAL = true -- abilitazione emissione modale
|
||||
EMT.INCHES = false -- unità di misura mm/inches
|
||||
EMT.DECNUM = 5 -- numero di decimali dopo la virgola
|
||||
EMT.DECNUM = 4 -- numero di decimali dopo la virgola
|
||||
EMT.DECVERS = 6 -- numero di decimali dopo la virgola per versori
|
||||
EMT.DECRAD = 4 -- numero di decimali dopo la virgola per raggio
|
||||
EMT.DECMACRO = 3 -- numero di decimali dopo la virgola per macro
|
||||
EMT.NUM = false -- abilitazione numerazione linee
|
||||
--EMT.Nt = 'N' -- token per la numerazione di linea
|
||||
--EMT.LINENBR = 0 -- numero di linea
|
||||
--EMT.LINEINC = 1 -- incremento numerazione linee
|
||||
--EMT.Ft = 'F' -- token per feed
|
||||
--EMT.St = 'S' -- token per speed
|
||||
EMT.FMAXPINZE = 154000 -- feed massima pinze
|
||||
--EMT.Nt = 'N' -- token per la numerazione di linea
|
||||
--EMT.LINENBR = 0 -- numero di linea
|
||||
--EMT.LINEINC = 1 -- incremento numerazione linee
|
||||
--EMT.Ft = 'F' -- token per feed
|
||||
--EMT.St = 'S' -- token per speed
|
||||
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
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -51,6 +56,7 @@ function OnProgramStart()
|
||||
end
|
||||
ParkLine( sPrefixCommentLine..'('.. CSP_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)
|
||||
if TEST_USE then
|
||||
@@ -108,6 +114,7 @@ function OnProgramEnd()
|
||||
EMT.FALL = nil
|
||||
EMT.RELOAD = nil
|
||||
EMT.RELOAD2 = nil
|
||||
EmtOutput( '(FOOTER)')
|
||||
-- Termino il programma
|
||||
EmtOutput( 'M02')
|
||||
end
|
||||
@@ -116,8 +123,8 @@ end
|
||||
function OnToolData()
|
||||
-- emissione dati utensili
|
||||
if EMT.HEAD == 'H1' then
|
||||
local sOut = 'M992 P1=' .. EMT.TCPOS:gsub( 'T', '') .. ' P2=' .. EmtLenToString( EMT.TLEN, 3) .. ' P3=' .. EmtLenToString( EMT.TDIAM, 3) ..
|
||||
' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, 3)
|
||||
local sOut = 'M992 P1=' .. EMT.TCPOS:gsub( 'T', '') .. ' P2=' .. EmtLenToString( EMT.TLEN, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( EMT.TDIAM, EMT.DECMACRO) ..
|
||||
' P4=' .. EmtLenToString( EMT.SMAX, EMT.DECMACRO) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, EMT.DECMACRO)
|
||||
ParkLine( sOut)
|
||||
-- cerco posizione di attrezzaggio del primo utensile di lavorazione
|
||||
if EMT.TOOL == EMT.TOOL_1 and EMT.TLEN_1 < LONG_TOOL_MINLEN then
|
||||
@@ -125,14 +132,14 @@ function OnToolData()
|
||||
end
|
||||
-- emissione dati lama
|
||||
elseif EMT.HEAD == 'H2' then
|
||||
local sOut = 'M992 P1=' .. EMT.TCPOS:gsub( 'T', '') .. ' P2=' .. EmtLenToString( EMT.TLEN, 3) .. ' P3=' .. EmtLenToString( EMT.TDIAM, 3) ..
|
||||
' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, 3)
|
||||
local sOut = 'M992 P1=' .. EMT.TCPOS:gsub( 'T', '') .. ' P2=' .. EmtLenToString( EMT.TLEN, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( EMT.TDIAM, EMT.DECMACRO) ..
|
||||
' P4=' .. EmtLenToString( EMT.SMAX, EMT.DECMACRO) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, EMT.DECMACRO)
|
||||
ParkLine( sOut)
|
||||
-- emissione dati sega a catena
|
||||
elseif EMT.HEAD == 'H3' then
|
||||
if EMT.TDIST and abs( EMT.TDIST) < 0.1 then EMT.TDIST = nil end
|
||||
local sData = ' P2=' .. EmtLenToString( ( EMT.TDIST or ChSawLen), 3) .. ' P3=' .. EmtLenToString( EMT.TLEN, 3) ..
|
||||
' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( ( EMT.TDIST or ChSawLen), 3)
|
||||
local sData = ' P2=' .. EmtLenToString( ( EMT.TDIST or ChSawLen), EMT.DECMACRO) .. ' P3=' .. EmtLenToString( EMT.TLEN, EMT.DECMACRO) ..
|
||||
' P4=' .. EmtLenToString( EMT.SMAX, EMT.DECMACRO) .. ' P5=' .. EmtLenToString( ( EMT.TDIST or ChSawLen), EMT.DECMACRO)
|
||||
if EMT.TCPOS == 'T101' then
|
||||
ParkLine( 'M992 P1=101' .. sData)
|
||||
ParkLine( 'M992 P1=102' .. sData)
|
||||
@@ -148,13 +155,13 @@ function OnToolData()
|
||||
elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then
|
||||
local nPos = EgtIf( EMT.HEAD == 'H5', 91, 93)
|
||||
if EMT.EXIT == 2 then nPos = nPos + 1 end
|
||||
local sOut = 'M992 P1=' .. EgtNumToString( nPos, 0) .. ' P2=' .. EmtLenToString( EMT.TLEN, 3) .. ' P3=' .. EmtLenToString( EMT.TDIAM, 3) ..
|
||||
' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, 3)
|
||||
local sOut = 'M992 P1=' .. EgtNumToString( nPos, 0) .. ' P2=' .. EmtLenToString( EMT.TLEN, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( EMT.TDIAM, EMT.DECMACRO) ..
|
||||
' P4=' .. EmtLenToString( EMT.SMAX, EMT.DECMACRO) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, EMT.DECMACRO)
|
||||
ParkLine( sOut)
|
||||
-- emissione dati sega a catena
|
||||
elseif EMT.HEAD == 'H7' then
|
||||
local sOut = 'M992 P1=' .. EMT.TCPOS:gsub( 'T', '') .. ' P2=' .. EmtLenToString( EMT.TLEN, 3) .. ' P3=' .. EmtLenToString( EMT.TDIAM, 3) ..
|
||||
' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, 3)
|
||||
local sOut = 'M992 P1=' .. EMT.TCPOS:gsub( 'T', '') .. ' P2=' .. EmtLenToString( EMT.TLEN, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( EMT.TDIAM, EMT.DECMACRO) ..
|
||||
' P4=' .. EmtLenToString( EMT.SMAX, EMT.DECMACRO) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, EMT.DECMACRO)
|
||||
ParkLine( sOut)
|
||||
-- altro non previsto
|
||||
else
|
||||
@@ -218,14 +225,14 @@ function OnDispositionEnd()
|
||||
local HOverM = EMT.HOVM
|
||||
|
||||
-- calcolo dati pinze
|
||||
local TempAccPinze, TempMinAccPinze, RidFeed = CalcDinamicaPinze( HTrave, STrave, LBarra)
|
||||
local TempAccPinz1, TempMinAccPinz1, RidFeed1 = CalcDinamicaPinze( HTrave, STrave, LBarra - LTrave)
|
||||
local TempAccPinz2, TempMinAccPinz2, RidFeed2 = CalcDinamicaPinze( HTrave, STrave, LTrave)
|
||||
local TempAccPinze, TempMinAccPinze, RidFeed = CalcDinamicaPinze_TPA( HTrave, STrave, LBarra)
|
||||
local TempAccPinz1, TempMinAccPinz1, RidFeed1 = CalcDinamicaPinze_TPA( HTrave, STrave, LBarra - LTrave)
|
||||
local TempAccPinz2, TempMinAccPinz2, RidFeed2 = CalcDinamicaPinze_TPA( HTrave, STrave, LTrave)
|
||||
|
||||
if IdTrave >= 0 then
|
||||
local sPrt = '( *** Part '.. EgtNumToString( IdTrave, 0) ..' ***)'
|
||||
local sOut = '( SN=' .. IdTrave .. ' LBarra=' .. EmtLenToString( LBarra, 3) .. ' L='..EmtLenToString( LTrave, 3) ..
|
||||
' H=' .. EmtLenToString( HTrave, 3) .. ' S=' .. EmtLenToString( STrave, 3) .. ' )'
|
||||
local sOut = '( SN=' .. IdTrave .. ' LBarra=' .. EmtLenToString( LBarra, EMT.DECMACRO) .. ' L='..EmtLenToString( LTrave, EMT.DECMACRO) ..
|
||||
' H=' .. EmtLenToString( HTrave, EMT.DECMACRO) .. ' S=' .. EmtLenToString( STrave, EMT.DECMACRO) .. ' )'
|
||||
EMT.PRODID = EgtGetInfo( BtlInfoId, 'PRODID', 'i') or 0
|
||||
EMT.PATTID = EgtGetInfo( BtlInfoId, 'PATTID', 'i') or 0
|
||||
EMT.CUTID = EgtGetInfo( EMT.IDT, 'CUTID', 'i') or 0
|
||||
@@ -268,9 +275,9 @@ function OnDispositionEnd()
|
||||
' 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)
|
||||
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
|
||||
EMT.YDELTA = EMT.YPOS - LoadT
|
||||
EMT.YDELTA = EMT.YPOS - EMT.TPOS
|
||||
EMT.VDELTA = nil
|
||||
end
|
||||
-- eventuale preparazione per rotazione immediata
|
||||
@@ -651,14 +658,26 @@ function OnRapid()
|
||||
bHeadFirst = false
|
||||
end
|
||||
end
|
||||
|
||||
local bGoToHome = false
|
||||
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
|
||||
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and EMT.TCPOS == EMT.PREVTCPOS and ( abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then
|
||||
bGoToHome = true
|
||||
end
|
||||
|
||||
-- primo posizionamento
|
||||
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 = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, 3) .. ' P3=' .. EmtLenToString( MyZHome, 3) ..
|
||||
' P4=' .. EgtNumToString( EMT.R2pp, 3) .. ' P5=' .. EgtNumToString( EMT.R1pp, 3) ..
|
||||
' P6=' .. EgtNumToString( EMT.PREVTCPOS, 3) .. ' P7=' .. EgtNumToString( EMT.PREVS, 0) ..
|
||||
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) ..
|
||||
' P4=' .. EgtNumToString( EMT.R2pp, 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)
|
||||
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
||||
' P4=' .. EgtNumToString( 0, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1pp, EMT.DECMACRO) ..
|
||||
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||
EmtOutput( sOutPreMove)
|
||||
EmtOutput( 'M101 P1=2')
|
||||
@@ -671,9 +690,23 @@ function OnRapid()
|
||||
end
|
||||
|
||||
-- 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
|
||||
local sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, 3) .. ' P3=' .. EmtLenToString( MyZHome, 3) ..
|
||||
' P4=' .. EgtNumToString( EMT.R2, 3) .. ' P5=' .. EgtNumToString( EMT.R1, 3) ..
|
||||
if not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
|
||||
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) 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.R1pp, EMT.DECMACRO) ..
|
||||
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||
EmtOutput( sOutPreMove)
|
||||
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
||||
' P4=' .. EgtNumToString( 0, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1, EMT.DECMACRO) ..
|
||||
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||
EmtOutput( sOutPreMove)
|
||||
end
|
||||
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
||||
' P4=' .. EgtNumToString( EMT.R2, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1, EMT.DECMACRO) ..
|
||||
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||
EmtOutput( sOutPreMove)
|
||||
@@ -687,8 +720,8 @@ function OnRapid()
|
||||
if EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
|
||||
MyZPos = MyZHome
|
||||
end
|
||||
local sOut = 'M101 P1=1' .. ' P2=' .. EmtLenToString( EMT.L2, 3) .. ' P3=' .. EmtLenToString( MyZPos, 3) ..
|
||||
' P4=' .. EgtNumToString( EMT.R2, 3) .. ' P5=' .. EgtNumToString( EMT.R1, 3) ..
|
||||
local sOut = 'M101 P1=1' .. ' P2=' .. EmtLenToString( EMT.L2, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZPos, 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
|
||||
@@ -738,7 +771,7 @@ function OnRapid()
|
||||
sV = EmtLenToString( ParkV)
|
||||
sB = '2'
|
||||
end
|
||||
sOut = 'M112 P1='..EmtLenToString( EMT.L1, 3)..' P3='..sA..' P4='..sB..' P5=0 P6='..sY..' P7='..sV..' P9='..GetFmaxClamp()
|
||||
sOut = 'M112 P1='..EmtLenToString( EMT.L1, EMT.DECMACRO)..' P3='..sA..' P4='..sB..' P5=0 P6='..sY..' P7='..sV..' P9='..GetFmaxClamp()
|
||||
ParkLine( sOut)
|
||||
EMT.LOAD = false
|
||||
-- emissione prime linee speciali e linee parcheggiate
|
||||
@@ -789,7 +822,7 @@ function OnRapid()
|
||||
sOut = 'M101 P1=3'
|
||||
EmtOutput( sOut)
|
||||
end
|
||||
sOut = 'M112 P1=' .. EmtLenToString( EMT.L1, 3) ..' P3='..sA..' P4='..sB..' P6='..sY..' P7='..sV..' P9=' .. GetFmaxClamp()
|
||||
sOut = 'M112 P1=' .. EmtLenToString( EMT.L1, EMT.DECMACRO) ..' P3='..sA..' P4='..sB..' P6='..sY..' P7='..sV..' P9=' .. GetFmaxClamp()
|
||||
EmtOutput( sOut)
|
||||
if not bHeadFirst then
|
||||
sOut = 'M101 P1=2'
|
||||
@@ -861,15 +894,15 @@ function OnRapid()
|
||||
if EMT.ST > BeamHeightForFixRot and EMT.HEAD == 'H1' and EMT.TOOL ~= EMT.NEXTTOOL and EMT.NEXTHEAD ~= 'H2' then
|
||||
local dBAxis = 90
|
||||
local dCAxis = EgtIf( BD.RIGHT_LOAD, 90, -90)
|
||||
local sOut = 'M101 P1=1' .. ' P2=' .. EmtLenToString( EMT.L2, 3) .. ' P3=' .. EmtLenToString( EMT.L3, 3) ..
|
||||
' P4=' .. EgtNumToString( dBAxis, 3) .. ' P5=' .. EgtNumToString( dCAxis, 3) ..
|
||||
local sOut = 'M101 P1=1' .. ' P2=' .. EmtLenToString( EMT.L2, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( EMT.L3, EMT.DECMACRO) ..
|
||||
' P4=' .. EgtNumToString( dBAxis, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( dCAxis, EMT.DECMACRO) ..
|
||||
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||
' P8=0' .. ' P9=0' .. ' P10=3'
|
||||
EmtOutput( sOut)
|
||||
EmtOutput( 'M101 P1=2')
|
||||
EmtOutput( 'M101 P1=3')
|
||||
sOut = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, 3) .. ' P3=' .. EmtLenToString( EMT.L3, 3) ..
|
||||
' P4=' .. EgtNumToString( dBAxis, 3) .. ' P5=' .. EgtNumToString( dCAxis, 3) ..
|
||||
sOut = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( EMT.L3, EMT.DECMACRO) ..
|
||||
' P4=' .. EgtNumToString( dBAxis, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( dCAxis, EMT.DECMACRO) ..
|
||||
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||
' P8=0' .. ' P9=0' .. ' P10=3'
|
||||
EmtOutput( sOut)
|
||||
@@ -886,8 +919,8 @@ function OnRapid()
|
||||
MyAdjustLinearAxes()
|
||||
EmtAdjustRotaryAxes()
|
||||
EmtResetPrev()
|
||||
local sOut = 'M101 P1=1' .. ' P2=' .. EmtLenToString( EMT.L2, 3) .. ' P3=' .. EmtLenToString( EMT.L3, 3) ..
|
||||
' P4=' .. EgtNumToString( EMT.R2, 3) .. ' P5=' .. EgtNumToString( EMT.R1, 3) ..
|
||||
local sOut = 'M101 P1=1' .. ' P2=' .. EmtLenToString( EMT.L2, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( EMT.L3, 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=3'
|
||||
EmtOutput( sOut)
|
||||
@@ -1007,7 +1040,7 @@ function OnArc()
|
||||
--local sCen = ' ' .. EMT.C1t .. EmtLenToString(EMT.C1,3) ..
|
||||
-- ' ' .. EMT.C2t .. EmtLenToString(EMT.C2,3)
|
||||
-- raggio
|
||||
local sRad = ' ' .. EMT.RRt .. EmtLenToString( EMT.RR, EMT.DECNUM)
|
||||
local sRad = ' ' .. EMT.RRt .. EmtLenToString( EMT.RR, EMT.DECRAD)
|
||||
-- aggiungo feed
|
||||
local sFeed = EmtGetFeed()
|
||||
-- tipo arco
|
||||
@@ -1048,28 +1081,6 @@ function FindNextTool()
|
||||
return sTool, sHead, sTcPos
|
||||
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)
|
||||
-- aperto
|
||||
@@ -1639,7 +1650,7 @@ function MyAdjustLinearAxes()
|
||||
if EMT.HEAD == 'H1' or EMT.HEAD == 'H2' then
|
||||
local Len = EMT.TLEN + EgtIf( EMT.HEAD == 'H1', MillOffs, abs( SawOffs))
|
||||
local LenRef = MillOffs
|
||||
vtE = Vector3d( EMT.EXTR) * Len - Z_AX() * LenRef
|
||||
vtE = Vector3d( EMT.TDIR) * Len - Z_AX() * LenRef
|
||||
elseif EMT.HEAD == 'H3' then
|
||||
local LenAux = ( EMT.TDIST or ChSawLen) + MillOffs
|
||||
local LenRef = MillOffs
|
||||
@@ -1650,13 +1661,13 @@ function MyAdjustLinearAxes()
|
||||
local LenAux = MillOffs + AngTr1Offs
|
||||
local LenRef = MillOffs
|
||||
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
|
||||
local Len = EMT.TLEN + AngTrBHLen
|
||||
local LenAux = MillOffs + AngTrBHOffs
|
||||
local LenRef = MillOffs
|
||||
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
|
||||
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
|
||||
end
|
||||
@@ -1767,9 +1778,9 @@ function CalcInterpPlane()
|
||||
local vtY = EMT.IPLGLFR:getVersY()
|
||||
local vtZ = EMT.IPLGLFR:getVersZ()
|
||||
EMT.IPLGLSTR = ' X0 Y' .. EmtLenToString( xS, EMT.DECNUM) .. ' Z0' ..
|
||||
' A' .. EgtNumToString( - vtX:getY(), 6) .. ' B' .. EgtNumToString( vtX:getX(), 6) .. ' C' .. EgtNumToString( vtX:getZ(), 6) ..
|
||||
' I' .. EgtNumToString( - vtY:getY(), 6) .. ' J' .. EgtNumToString( vtY:getX(), 6) .. ' K' .. EgtNumToString( vtY:getZ(), 6) ..
|
||||
' P' .. EgtNumToString( - vtZ:getY(), 6) .. ' Q' .. EgtNumToString( vtZ:getX(), 6) .. ' R' .. EgtNumToString( vtZ:getZ(), 6)
|
||||
' A' .. EgtNumToString( - vtX:getY(), EMT.DECVERS) .. ' B' .. EgtNumToString( vtX:getX(), EMT.DECVERS) .. ' C' .. EgtNumToString( vtX:getZ(), EMT.DECVERS) ..
|
||||
' I' .. EgtNumToString( - vtY:getY(), EMT.DECVERS) .. ' J' .. EgtNumToString( vtY:getX(), EMT.DECVERS) .. ' K' .. EgtNumToString( vtY:getZ(), EMT.DECVERS) ..
|
||||
' P' .. EgtNumToString( - vtZ:getY(), EMT.DECVERS) .. ' Q' .. EgtNumToString( vtZ:getX(), EMT.DECVERS) .. ' R' .. EgtNumToString( vtZ:getZ(), EMT.DECVERS)
|
||||
EMT.IPLGL = true
|
||||
end
|
||||
|
||||
|
||||
+247
-64
@@ -7,9 +7,6 @@ EgtEnableDebug( false)
|
||||
-- carico librerie
|
||||
local BD = require( 'BeamData')
|
||||
|
||||
LONG_TOOL_MINLEN = 221
|
||||
BIG_TOOL_DIAM = 300
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- *** GENERATION ***
|
||||
---------------------------------------------------------------------
|
||||
@@ -82,6 +79,14 @@ function OnSimulStart()
|
||||
for j = 1, #( vTools or {}) do
|
||||
if vTools[j] ~= '' then
|
||||
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
|
||||
ShowToolInTcPos( vTcPos[i], true)
|
||||
@@ -118,7 +123,8 @@ function OnSimulStart()
|
||||
{ Grp = 'V', Sub = 'COLLISION', Name = 'VOL2'},
|
||||
{ Grp = 'PV', Sub = 'COLLISION', Name = 'VOL'},
|
||||
{ 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)
|
||||
local nMcdNullCnt = 0
|
||||
for i = 1, #McdData do
|
||||
@@ -168,13 +174,13 @@ function OnSimulDispositionStart()
|
||||
-- Determino dimensioni del grezzo
|
||||
local nSolId = EgtGetFirstNameInGroup( EgtGetFirstRawPart() or GDB_ID.NULL, 'RawSolid') or GDB_ID.NULL
|
||||
local b3Sol = EgtGetBBoxGlob( nSolId, GDB_BB.STANDARD)
|
||||
EMT.LB = 0
|
||||
EMT.SB = 0
|
||||
EMT.HB = 0
|
||||
EMT.LT = 0
|
||||
EMT.ST = 0
|
||||
EMT.HT = 0
|
||||
if b3Sol then
|
||||
EMT.LB = b3Sol:getDimX()
|
||||
EMT.SB = b3Sol:getDimY()
|
||||
EMT.HB = b3Sol:getDimZ()
|
||||
EMT.LT = b3Sol:getDimX()
|
||||
EMT.ST = b3Sol:getDimY()
|
||||
EMT.HT = b3Sol:getDimZ()
|
||||
end
|
||||
-- Carico primo utensile sulla testa 1
|
||||
local sTool, nTlen = FindFirstToolOnHead( 'H1')
|
||||
@@ -213,21 +219,26 @@ function OnSimulDispositionStart()
|
||||
end
|
||||
end
|
||||
-- determino la risoluzione dello Zmap
|
||||
local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ()
|
||||
local dTol = 4.71
|
||||
if dArea < CoeffVM * 0.15e6 then
|
||||
dTol = 0.71
|
||||
elseif dArea < CoeffVM * 0.3e6 then
|
||||
dTol = 1.01
|
||||
elseif dArea < CoeffVM * 0.6e6 then
|
||||
dTol = 1.51
|
||||
elseif dArea < CoeffVM * 1.2e6 then
|
||||
dTol = 1.97
|
||||
elseif dArea < CoeffVM * 2.4e6 then
|
||||
dTol = 2.81
|
||||
elseif dArea < CoeffVM * 4.8e6 then
|
||||
dTol = 3.77
|
||||
if EmtGetVMillStep then
|
||||
dTol = EmtGetVMillStep( b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol)
|
||||
else
|
||||
local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ()
|
||||
if dArea < 0.075e6 then
|
||||
dTol = 0.71
|
||||
elseif dArea < 0.15e6 then
|
||||
dTol = 1.01
|
||||
elseif dArea < 0.3e6 then
|
||||
dTol = 1.51
|
||||
elseif dArea < 0.6e6 then
|
||||
dTol = 1.97
|
||||
elseif dArea < 1.2e6 then
|
||||
dTol = 2.81
|
||||
elseif dArea < 2.4e6 then
|
||||
dTol = 3.77
|
||||
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
|
||||
local VMillId = EgtVolZmapBox( nPartRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB)
|
||||
if VMillId then
|
||||
@@ -462,8 +473,10 @@ function OnSimulToolSelect( dPosA)
|
||||
EMT.TOTDIAM = EgtTdbGetCurrToolParam( MCH_TP.TOTDIAM)
|
||||
-- se non è chiamato da altro script (non c'è parametro)
|
||||
if not dPosA then
|
||||
-- se attivo Vmill
|
||||
SetToolForVmill( EMT.TOOL, EMT.HEAD, EMT.EXIT, EMT.VMILL)
|
||||
-- se utensile non flottante, abilito per Vmill
|
||||
if not EMT.TFLOAT then
|
||||
EmtSetToolForVmill( EMT.TOOL, EMT.HEAD, EMT.EXIT, EMT.VMILL)
|
||||
end
|
||||
-- se attivo Collision Check
|
||||
EMT.SAFEDIST = COLL_SAFE_DIST
|
||||
if EMT.COLLOBJ then
|
||||
@@ -516,14 +529,21 @@ function OnSimulToolSelect( dPosA)
|
||||
elseif EMT.HEAD == 'H7' then
|
||||
EgtSetAxisPos( 'C', EgtIf( BD.RIGHT_LOAD, 180, 0))
|
||||
end
|
||||
-- se TC 1
|
||||
if GetTCSet( EMT.TCPOS) == 1 then
|
||||
EgtSetAxisPos( 'B', 90)
|
||||
else
|
||||
if EMT.HEAD ~= 'H3' then
|
||||
EgtSetAxisPos( 'B', -90)
|
||||
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
|
||||
-- breve pausa
|
||||
end -- breve pausa
|
||||
EgtPause( 100)
|
||||
EgtOutText( '')
|
||||
EMT.TOOL_1 = EMT.TOOL
|
||||
@@ -545,24 +565,24 @@ function OnSimulToolDeselect()
|
||||
-- movimento scarico sega a catena
|
||||
if EMT.HEAD == 'H3' then
|
||||
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||
if EMT.HB > BeamHeightForFixRot then
|
||||
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
|
||||
-- raddrizzo asse B prima di ruotare il C
|
||||
SimulMoveAxis( 'B', 0, MCH_SIM_STEP.COLLROT)
|
||||
local dPosA = EgtGetAxisPos( 'A')
|
||||
if abs( dPosA) < 0.1 then
|
||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 180, 0), MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, -180, 0), MCH_SIM_STEP.COLLROT)
|
||||
else
|
||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, 270), MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||
-- movimento scarico rinvio
|
||||
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)
|
||||
-- movimento scarico aggregato BlockHaus
|
||||
elseif EMT.HEAD == 'H7' then
|
||||
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
|
||||
elseif EMT.TOTLEN > LONG_TOOL_MINLEN then
|
||||
-- se su cambio utensile T111
|
||||
@@ -572,7 +592,11 @@ function OnSimulToolDeselect()
|
||||
-- altrimenti posizioni standard rastrelliera
|
||||
else
|
||||
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
||||
if GetTCSet( EMT.TCPOS) == 1 then
|
||||
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
||||
else
|
||||
SimulMoveAxes( 'B', -90, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
-- movimento scarico utensile di grosso diametro (su T111)
|
||||
else
|
||||
@@ -586,18 +610,34 @@ function OnSimulToolDeselect()
|
||||
-- nascondo utensile su testa e lo visualizzo su TcPos
|
||||
EgtSetMode( EgtGetHeadId( EMT.HEAD), GDB_MD.HIDDEN)
|
||||
ShowToolInTcPos( EMT.TCPOS_1, true)
|
||||
|
||||
-- movimento per carico utensile
|
||||
if EMT.NEXTHEAD ~= 'H3' and EMT.NEXTHEAD ~= 'H5' and EMT.NEXTHEAD ~= 'H6' then
|
||||
SimulMoveAxes( 'B', 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
|
||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
|
||||
if EMT.NEXTHEAD == 'H3' then
|
||||
local dPosA = EgtGetAxisPos( 'A')
|
||||
if abs( dPosA) < 0.1 then
|
||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, 270), MCH_SIM_STEP.RAPROT)
|
||||
else
|
||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, -180, 0), MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
else
|
||||
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
|
||||
end
|
||||
end
|
||||
-- se segue lama, carico utensile di default
|
||||
if EMT.NEXTHEAD == 'H2' then
|
||||
local sDefTool = GetDefaultToolName()
|
||||
EgtLoadTool( 'H1', 1, sDefTool)
|
||||
EMT.TOOL_1 = sDefTool
|
||||
EMT.TCPOS_1 = GetToolTcPos( EMT.TOOL_1)
|
||||
-- se TC 1
|
||||
if GetTCSet( EMT.TCPOS_1) == 1 then
|
||||
EgtSetAxisPos( 'B', 90)
|
||||
else
|
||||
EgtSetAxisPos( 'B', -90)
|
||||
end
|
||||
EgtLoadTool( 'H1', 1, sDefTool)
|
||||
-- lo nascondo sul portautensili
|
||||
ShowToolInTcPos( EMT.TCPOS_1, false)
|
||||
end
|
||||
@@ -761,33 +801,84 @@ function OnSimulMoveStart()
|
||||
VerifyVStroke( EMT.A2)
|
||||
-- se inizio lavorazione
|
||||
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( '')
|
||||
EMT.MCHFIRST = false
|
||||
local bZmax = ( EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||
|
||||
-- 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
|
||||
-- se motosega mi muovo a X di sicurezza per ruotare
|
||||
if ( EMT.HEAD == 'H3' or ( bZmax and EMT.TOTLEN > 200)) then
|
||||
if 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' or bGoToHome then
|
||||
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'B', 0, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'B', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
elseif ( bZmax and EMT.TOTLEN > 200) then
|
||||
SimulMoveAxes( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID, 'C', EMT.R1, MCH_SIM_STEP.COLLROT, 'B', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
EMT.POSTROT = nil
|
||||
end
|
||||
-- se aggregato flottante su inizio attacco va compresso
|
||||
if EMT.TFLOAT and not EMT.TFLOAT_CMP and EMT.MOVE == 1 and EgtGetName( EMT.MOVEID) == 'LI' then
|
||||
-- recupero lunghezza
|
||||
local dOffsL = - EgtGetMachiningParam( MCH_MP.OFFSL)
|
||||
-- imposto compressione della parte flottante
|
||||
SetFloatPos( EMT.HEAD, dOffsL)
|
||||
-- imposto dati utensile in posizione compressa
|
||||
EmtSetToolForVmill( EMT.TOOL, EMT.HEAD, EMT.EXIT, EMT.VMILL, 2, -dOffsL)
|
||||
-- dichiaro che è compresso (assegnando Id entità di movimento)
|
||||
EMT.TFLOAT_CMP = EMT.MOVEID
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulMoveEnd()
|
||||
-- se termine di passata con lama
|
||||
if EMT.FLAG == 301 then
|
||||
-- rimozione eventuali sfridi
|
||||
ExecRemoveScraps()
|
||||
end
|
||||
-- se utensile flottante e movimento di compressione
|
||||
if EMT.TFLOAT and EMT.MOVEID == EMT.TFLOAT_CMP then
|
||||
-- verifico ci sia stata collisione tra ghiera flottante (portautensile e pezzo)
|
||||
if not EMT.TFLOAT_TH_COMPR_COLL then
|
||||
local sErr = 'CUTID='..tostring( EMT.CUTID)..'; TASKID='..tostring( EMT.TASKID)..'; Mach='..EMT.MCHNAME..'; Floating Ring not compressed on approach'
|
||||
EmtSetLastError( 1222, sErr)
|
||||
EgtOutLog( 'Error : ' .. sErr, 1)
|
||||
else
|
||||
EgtOutLog( 'Floating Ring compressed on approach (MOVEID='..EgtNumToString( EMT.MOVEID)..')', 1)
|
||||
end
|
||||
EMT.TFLOAT_TH_COMPR_COLL = nil
|
||||
end
|
||||
-- se aggregato flottante su fine uscita va rilasciato
|
||||
if EMT.TFLOAT and EMT.TFLOAT_CMP and EMT.MOVE == 1 and EgtGetName( EMT.MOVEID) == 'LO' and EgtGetName( EgtGetNext( EMT.MOVEID) or GDB_ID.NULL) ~= 'LO' then
|
||||
-- reset compressione della parte flottante
|
||||
SetFloatPos( EMT.HEAD, 0)
|
||||
-- dichiaro che è rilasciato
|
||||
EMT.TFLOAT_CMP = nil
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulCollision()
|
||||
-- se prima collisione della lavorazione, la segnalo
|
||||
if EMT.MCHNAME ~= EMT.LAST_MCHNAME_COLLIDE then
|
||||
-- speciale per utensile flottante (suo holder contro il grezzo)
|
||||
if EMT.TFLOAT and EMT.TFLOAT_CMP and EMT.SIMCOBIND == 1002 and EMT.SIMVMID == EMT.VMILL[1] then
|
||||
if EMT.MOVEID == EMT.TFLOAT_CMP then
|
||||
EMT.TFLOAT_TH_COMPR_COLL = true
|
||||
end
|
||||
return
|
||||
end
|
||||
-- standard
|
||||
local Class = ''
|
||||
if EMT.SIMCOBIND == 1001 then
|
||||
Class = 'T_H1'
|
||||
@@ -854,14 +945,14 @@ function ExecAuxCmd( sCmd)
|
||||
elseif Cmd[1] == '11' then
|
||||
local dPY = MaxOpen
|
||||
if Cmd[2] ~= '0' then
|
||||
dPY = EgtIf( EMT.ROT == -1, EMT.HB, EMT.SB)
|
||||
dPY = EgtIf( EMT.ROT == -1, EMT.HT, EMT.ST)
|
||||
end
|
||||
SimulMoveAxis( 'PY', dPY, MCH_SIM_STEP.RAPID)
|
||||
SetPYLight( Cmd[2] ~= '0')
|
||||
elseif Cmd[1] == '12' then
|
||||
local dPV = MaxOpen
|
||||
if Cmd[2] ~= '0' then
|
||||
dPV = EgtIf( EMT.ROT == -1, EMT.HB, EMT.SB)
|
||||
dPV = EgtIf( EMT.ROT == -1, EMT.HT, EMT.ST)
|
||||
end
|
||||
SimulMoveAxis( 'PV', dPV, MCH_SIM_STEP.RAPID)
|
||||
SetPVLight( Cmd[2] ~= '0')
|
||||
@@ -908,7 +999,7 @@ function ExecRemoveScraps()
|
||||
for i = nPart, 1, -1 do
|
||||
if i ~= nPartMax then
|
||||
local b3Vmill = EgtVolZmapGetPartBBoxGlob( vMillId, i - 1, GDB_BB.STANDARD)
|
||||
if b3Vmill:getDimX() < 1200 then
|
||||
if b3Vmill:getDimX() < 1250 then
|
||||
EgtRemoveVolZmapPart( vMillId, i - 1)
|
||||
end
|
||||
end
|
||||
@@ -928,7 +1019,7 @@ function ExecUnloading()
|
||||
-- li sposto per lasciare spazio al nuovo pezzo
|
||||
local nId = EgtGetFirstInGroup( nVmGrpId)
|
||||
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)
|
||||
end
|
||||
-- creo un nuovo layer e vi inserisco il nuovo pezzo
|
||||
@@ -1129,22 +1220,35 @@ end
|
||||
---------------------------------------------------------------------
|
||||
-- *** ESTIMATION T&L ***
|
||||
---------------------------------------------------------------------
|
||||
local RAPID_X_FEED = 75000 -- mm/min
|
||||
local RAPID_Y_FEED = 100000 -- mm/min
|
||||
local RAPID_Z_FEED = 50000 -- mm/min
|
||||
local RAPID_C_FEED = 15000 -- deg/min
|
||||
local RAPID_B_FEED = 15000 -- deg/min
|
||||
local RAPID_MIN_T = 0.1 -- s
|
||||
local LOAD_T = 2 -- s
|
||||
local CHAR_ONE_MOVE_T = 1 -- s
|
||||
local ROTATION_T = 40 -- s
|
||||
local SPLIT_T = 6 -- s
|
||||
local UNLOAD_T = 4 -- s
|
||||
local FALL_T = 2 -- s
|
||||
local ESTIMATION_RAPID_COEFF = EstimationRapidMultiplier or 1
|
||||
local RAPID_X_FEED = 100000 / ESTIMATION_RAPID_COEFF -- mm/min
|
||||
local RAPID_Y_FEED = 100000 / ESTIMATION_RAPID_COEFF -- mm/min
|
||||
local RAPID_Z_FEED = 100000 / ESTIMATION_RAPID_COEFF -- mm/min
|
||||
local RAPID_C_FEED = 12000 / 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 LOAD_T = 2 * ESTIMATION_RAPID_COEFF -- s
|
||||
local CHAR_ONE_MOVE_T = 1 * ESTIMATION_RAPID_COEFF -- s
|
||||
local ROTATION_T = 40 * ESTIMATION_RAPID_COEFF -- s
|
||||
local SPLIT_T = 6 * ESTIMATION_RAPID_COEFF -- s
|
||||
local UNLOAD_T = 4 * ESTIMATION_RAPID_COEFF -- s
|
||||
local FALL_T = 2 * ESTIMATION_RAPID_COEFF -- s
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnEstimStart()
|
||||
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
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -1230,6 +1334,15 @@ function OnEstimDispositionEnd()
|
||||
EMT.OPEISDISP = false
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnEstimRawMoveData()
|
||||
-- se start del pezzo
|
||||
if IsStartOrRestPhase( EMT.PHASE) then
|
||||
EMT.SPLIT = false
|
||||
end
|
||||
OnRawMoveData()
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnEstimToolSelect()
|
||||
-- reset indice utensile in tabella lunghezze
|
||||
@@ -1286,6 +1399,12 @@ function OnEstimMachiningEnd()
|
||||
EMT.TLE_NAME = nil
|
||||
EMT.TLE_TIME = nil
|
||||
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
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -1416,15 +1535,15 @@ function OnEstimRapid()
|
||||
EMT.MCHEXTLEN = EMT.MCHEXTLEN + dLen
|
||||
-- calcolo tempo
|
||||
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
|
||||
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
|
||||
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
|
||||
local dT4 = abs( dR1) / RAPID_C_FEED * 60
|
||||
local dT4 = abs( dR1) / ( RAPID_C_FEED / 60)
|
||||
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
|
||||
EMT.MCHEXTTIME = EMT.MCHEXTTIME + dTime
|
||||
EgtOutLog( string.format( ' G0 Len=%.0f Rot=%.0f° Time=%.2f', dLen, abs( dR1) + abs( dR2), dTime), 5)
|
||||
@@ -1442,7 +1561,7 @@ function OnEstimLinear()
|
||||
local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3)
|
||||
EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen
|
||||
-- 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
|
||||
EgtOutLog( string.format( ' G1 Len=%.0f Time=%.2f', dLen, dTime), 5)
|
||||
-- aggiorno valori come precedenti
|
||||
@@ -1589,6 +1708,70 @@ function GetParkT()
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function CalcDinamicaPinze_TPA( dH, dS, dL)
|
||||
local MinTempoAcc = EMT.MINACC -- [ms] ~300
|
||||
local MaxTempoAcc = EMT.MAXACC -- [ms] ~4000
|
||||
local KgMtCubo= WoodDensity or 550 -- densità legno [Kg / metro cubo]
|
||||
local Massa = ( dH * dS * dL * KgMtCubo ) / 1e9 -- massa [Kg]
|
||||
local FMaxPinze = EMT.FMAXPINZE -- Feed massima pinze [mm/min]
|
||||
local ForzaAttrito = 350 * 9.8 * 0.2 -- Forza chiusura pinze [Kgf] * g * Coeff_Attrito -> [N]
|
||||
local TempoAcc = EgtClamp( ( Massa * FMaxPinze) / ( 60 * ForzaAttrito), MinTempoAcc, MaxTempoAcc)
|
||||
local RidFeed = 100 / Massa * 100
|
||||
if RidFeed > 100 then
|
||||
RidFeed = 100
|
||||
elseif RidFeed < 10 then
|
||||
RidFeed = 10
|
||||
end
|
||||
return TempoAcc, MinTempoAcc, RidFeed
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function CalcDinamicaPinze_NUM( dH, dS, dL)
|
||||
local KgMtCubo= WoodDensity or 550 -- densità legno [Kg / metro cubo]
|
||||
local Massa = ( dH * dS * dL * KgMtCubo ) / 1e9 -- massa [Kg]
|
||||
local FMaxPinze = EMT.FMAXPINZE -- Feed massima pinze [mm/min]
|
||||
local ForzaAttrito = 350 * 9.8 * 0.2 -- Forza chiusura pinze [Kgf] * g * Coeff_Attrito -> [N]
|
||||
local TempoAcc = ( ( Massa * FMaxPinze) / ( 60 * ForzaAttrito) / 1000)
|
||||
local AccMaxPinze = EMT.MAXACC
|
||||
local AccPinze = EgtClamp( FMaxPinze / ( 60 * TempoAcc), EMT.MINACC, EMT.MAXACC)
|
||||
local RidFeed = 100 / Massa * 100
|
||||
if RidFeed > 100 then
|
||||
RidFeed = 100
|
||||
elseif RidFeed < 10 then
|
||||
RidFeed = 10
|
||||
end
|
||||
return AccPinze, AccMaxPinze, RidFeed, TempoAcc
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function CalcMoveTime( dPathLen, dFeed, bIsSplitted)
|
||||
local dTime
|
||||
local dFeedInSec = dFeed / 60
|
||||
|
||||
if NumericalControl == 'TPA' then
|
||||
local dTempoAcc, _, _ = CalcDinamicaPinze_TPA( EMT.HT, EMT.ST, EgtIf( bIsSplitted, EMT.LT, EMT.LB))
|
||||
dTempoAcc = dTempoAcc / 1000
|
||||
-- se si raggiunge la velocità massima
|
||||
if dPathLen >= dFeedInSec * dTempoAcc then
|
||||
dTime = dTempoAcc * 2 + ( ( dPathLen - dFeedInSec * dTempoAcc) / dFeedInSec)
|
||||
else
|
||||
dTime = 2 * sqrt( (dPathLen * dTempoAcc) / dFeedInSec)
|
||||
end
|
||||
else
|
||||
local dAcc, _, _, _ = CalcDinamicaPinze_NUM( EMT.HT, EMT.ST, EgtIf( bIsSplitted, EMT.LT, EMT.LB))
|
||||
-- Caso 1: dFeed raggiunta
|
||||
if dPathLen >= ( dFeedInSec ^ 2) / dAcc then
|
||||
dTime = ( dFeedInSec / dAcc) + ( dPathLen / dFeedInSec)
|
||||
-- Caso 2: dFeed non raggiunta
|
||||
else
|
||||
dTime = 2 * sqrt( dPathLen / dAcc)
|
||||
end
|
||||
end
|
||||
|
||||
return dTime
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- *** END GENERAL ***
|
||||
---------------------------------------------------------------------
|
||||
|
||||
+51
-8
@@ -7,6 +7,12 @@ EgtEnableDebug( false)
|
||||
-- carico librerie
|
||||
local BD = require( 'BeamData')
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- *** Generic Machinings ***
|
||||
---------------------------------------------------------------------
|
||||
pcall( require, 'EmtGenMachining') -- si fa una require con PCALL perchè la libreria è opzionale
|
||||
|
||||
|
||||
---------------------- OnSpecialMoveZup -----------------------------
|
||||
---------------------------------------------------------------------
|
||||
function OnSpecialMoveZup()
|
||||
@@ -33,9 +39,9 @@ local DeltaTol = DELTA_TOL_S
|
||||
local DELTA_SIC = 1
|
||||
local AGG_LOAD = 50
|
||||
local MIN_JOIN_VV = EgtClamp( MinJoinVV or 75, 60, 150)
|
||||
local MIN_JOIN_SS = EgtClamp( MinJoinSS or 100, 80, 200)
|
||||
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, 200)
|
||||
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
|
||||
@@ -367,7 +373,18 @@ function OnSpecialApplyDisposition()
|
||||
EMC.HOVM = EgtGetInfo( nCurrRawId, 'HOVM', 'd') or 0
|
||||
EMC.HCING = EgtGetInfo( nCurrRawId, 'HCING', 'd') or 0
|
||||
EMC.TCING = EgtGetInfo( nCurrRawId, 'TCING', 'd') or 0
|
||||
|
||||
|
||||
-- correggo area non pinzabile in testa o coda in base alle info sulla lavorazione
|
||||
local sNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
|
||||
local dHCING = tonumber( EgtGetValInNotes( sNotes, 'HCING'))
|
||||
if dHCING then
|
||||
EMC.HCING = max( dHCING, -50)
|
||||
end
|
||||
local dTCING = tonumber( EgtGetValInNotes( sNotes, 'TCING'))
|
||||
if dTCING then
|
||||
EMC.TCING = max( dTCING, -50)
|
||||
end
|
||||
|
||||
-- Devo scaricare il pezzo o il grezzo rimasto
|
||||
-- Posizione trave
|
||||
local dPosT
|
||||
@@ -511,6 +528,17 @@ function OnPostApplyMachining()
|
||||
local bSplitting = ( sNotes:find( 'Split') ~= nil)
|
||||
local bPreCut = ( sNotes:find( 'Precut') ~= nil)
|
||||
local bCutting = ( sNotes:find( 'Cut') ~= nil)
|
||||
|
||||
-- correggo area non pinzabile in testa o coda in base alle info sulla lavorazione
|
||||
local dHCING = tonumber( EgtGetValInNotes( sNotes, 'HCING'))
|
||||
if dHCING then
|
||||
EMC.HCING = max( dHCING, -50)
|
||||
end
|
||||
local dTCING = tonumber( EgtGetValInNotes( sNotes, 'TCING'))
|
||||
if dTCING then
|
||||
EMC.TCING = max( dTCING, -50)
|
||||
end
|
||||
|
||||
local bUnload = IsEndPhase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE)
|
||||
if bPreSplit or bPreCut then
|
||||
EgtSetInfo( EMC.MCHID, 'IS_PRE', '1')
|
||||
@@ -634,6 +662,17 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
|
||||
EMC.HOVM = EgtGetInfo( nCurrRawId, 'HOVM', 'd') or 0
|
||||
EMC.HCING = EgtGetInfo( nCurrRawId, 'HCING', 'd') or 0
|
||||
EMC.TCING = EgtGetInfo( nCurrRawId, 'TCING', 'd') or 0
|
||||
|
||||
-- correggo area non pinzabile in testa o coda in base alle info sulla lavorazione
|
||||
local sNotes = EgtGetMachiningParam( MCH_MP.USERNOTES)
|
||||
local dHCING = tonumber( EgtGetValInNotes( sNotes, 'HCING'))
|
||||
if dHCING then
|
||||
EMC.HCING = max( dHCING, -50)
|
||||
end
|
||||
local dTCING = tonumber( EgtGetValInNotes( sNotes, 'TCING'))
|
||||
if dTCING then
|
||||
EMC.TCING = max( dTCING, -50)
|
||||
end
|
||||
|
||||
-- Calcolo dell'ingombro della lavorazione
|
||||
local dDistFront, dDistBack = SpecialCalcMachiningEncumbrance( EMC.MCHID, bPreCut)
|
||||
@@ -892,7 +931,7 @@ function SpecCalcEncumbrance( vtTool, vtArm, ptMin, ptMax, bSaw, bChain, dTLen,
|
||||
local dHeadBack = 350
|
||||
if bSaw 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
|
||||
dHeadBack = EgtIf( vtArm:getX() < 0, 540, 350)
|
||||
elseif abs( vtTool:getZ()) < 0.26 and abs( vtTool:getX()) < 0.71 then
|
||||
@@ -983,7 +1022,7 @@ function SpecCalcEncumbrance( vtTool, vtArm, ptMin, ptMax, bSaw, bChain, dTLen,
|
||||
local dHeadFront = 350
|
||||
if bSaw 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
|
||||
dHeadFront = EgtIf( vtArm:getX() > 0, 540, 350)
|
||||
elseif abs( vtTool:getZ()) < 0.26 and abs( vtTool:getX()) < 0.71 then
|
||||
@@ -1603,7 +1642,9 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
-- * deve effettivamente spostarsi
|
||||
-- * 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
|
||||
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
|
||||
table.insert( vCmd, { 0, 'Direct-V-Y'})
|
||||
-- se l'altra morsa non era in presa, vado a pinzare il pezzo
|
||||
@@ -1682,7 +1723,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
if abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL then
|
||||
table.insert( vCmd, { 11, 0})
|
||||
dYPosA = max( MyMinY, dTPosI + dYDeltaF)
|
||||
dTPosA = -( dYPosA + dVDeltaF)
|
||||
dTPosA = dYPosA - dYDeltaF
|
||||
dVPosA = dTPosA + dVDeltaF
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
table.insert( vCmd, { 11, CalcCharStatus( 'Y', dYDeltaF)})
|
||||
@@ -1708,7 +1749,9 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
-- * deve effettivamente spostarsi
|
||||
-- * 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
|
||||
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
|
||||
table.insert( vCmd, { 0, 'Direct-Y-V'})
|
||||
-- se l'altra morsa non era in presa, vado a pinzare il pezzo
|
||||
|
||||
+9
-2
@@ -34,8 +34,15 @@ Milling=1
|
||||
Pocketing=1
|
||||
Mortising=1
|
||||
Chiseling=0
|
||||
SawRoughing=0
|
||||
SawFinishing=0
|
||||
GenMachining=0
|
||||
SurfRoughing=1
|
||||
SurfFinishing=1
|
||||
5AxMilling=1
|
||||
|
||||
[5AxMilling]
|
||||
5AxScript1=5AxProject
|
||||
5AxScript2=5AxPocketProject
|
||||
5AxScript3=5AxCylProject
|
||||
|
||||
[Machining]
|
||||
InitScript=InitMach.lua
|
||||
|
||||
+226
-78
@@ -10,10 +10,10 @@
|
||||
require( 'EmtGenerator')
|
||||
EgtEnableDebug( false)
|
||||
|
||||
PP_VER = '2.6l2_DEV2'
|
||||
PP_NVER = '2.6.12.2'
|
||||
MIN_MACH_VER = '2.5k1'
|
||||
MACH_NAME = 'Essetre-FASTrl'
|
||||
PP_VER = '2.7l1'
|
||||
PP_NVER = '2.7.12.1'
|
||||
MIN_MACH_VER = '2.7j1'
|
||||
MACH_NAME = string.match( EgtGetCurrMachineDir(), "[^\\]+$") -- si ricava il nome della macchina dal direttorio
|
||||
|
||||
-- Carico i dati globali
|
||||
local sMachDir = EgtGetCurrMachineDir()
|
||||
@@ -73,10 +73,15 @@ SecondSupport = 0
|
||||
SpecialBH = false
|
||||
MaxUnloadLen = 0
|
||||
BeamHeightForFixRot = 9999 -- per abilitare assegnare 500
|
||||
CoeffVM = 0.5
|
||||
NewTopC = true
|
||||
SafeXRotAxes = -150
|
||||
AggreBlockHaus = false
|
||||
SecondToolChanger = false
|
||||
EstimationRapidMultiplier = 1
|
||||
|
||||
-- costanti dimensioni utensili
|
||||
LONG_TOOL_MINLEN = 221
|
||||
BIG_TOOL_DIAM = 300
|
||||
|
||||
-- leggo e aggiorno con parametri da BeamData
|
||||
if BD then
|
||||
@@ -137,13 +142,23 @@ if EgtExistsFile( sData) then
|
||||
if Machine.Offsets.MIN_JOIN_LS then MinJoinLS = Machine.Offsets.MIN_JOIN_LS end
|
||||
if Machine.Offsets.MIN_JOIN_SL then MinJoinSL = Machine.Offsets.MIN_JOIN_SL end
|
||||
if Machine.Offsets.MIN_JOIN_LL then MinJoinLL = Machine.Offsets.MIN_JOIN_LL end
|
||||
if Machine.Offsets.MAXFEEDPINZE then MaxFeedPinze = Machine.Offsets.MAXFEEDPINZE end
|
||||
if Machine.Offsets.MAXACC then MaxAcc = Machine.Offsets.MAXACC end
|
||||
if Machine.Offsets.MINACC then MinAcc = Machine.Offsets.MINACC end
|
||||
if Machine.Offsets.NEWTOPC then NewTopC = ( Machine.Offsets.NEWTOPC == 1) end
|
||||
if Machine.Offsets.AGGRE_BH then AggreBlockHaus = ( Machine.Offsets.AGGRE_BH == 1) end
|
||||
if Machine.Offsets.SEC_TC then SecondToolChanger = ( Machine.Offsets.SEC_TC == 1) end
|
||||
if Machine.Offsets.COEFF_STIMATEMPI and Machine.Offsets.COEFF_STIMATEMPI > 0 then EstimationRapidMultiplier = Machine.Offsets.COEFF_STIMATEMPI end
|
||||
if Machine.Offsets.MAX_HEIGHT_ROT_B_ABOVE then BeamHeightForFixRot = Machine.Offsets.MAX_HEIGHT_ROT_B_ABOVE end
|
||||
end
|
||||
end
|
||||
end
|
||||
if SpecialBH then SecondSupport = 0 end
|
||||
|
||||
-- compongo i gruppi appartenenti alla base
|
||||
local sBaseAux = {'BASE/SOLID', 'BASE/TC', 'BASE/SIGN', 'BASE/COLLISION'}
|
||||
if SecondToolChanger then table.insert( sBaseAux, 5, 'BASE/TC2') end
|
||||
|
||||
EmtGeneral {
|
||||
File='Essetre-FASTrl.nge',
|
||||
Offset = Vector3d( 0, -1150.16, -1500.0),
|
||||
@@ -157,7 +172,7 @@ EmtGeneral {
|
||||
local BaseId = EmtBase {
|
||||
Name = 'Base',
|
||||
Geo='BASE/GEO',
|
||||
Aux={'BASE/SOLID', 'BASE/TC', 'BASE/SIGN', 'BASE/COLLISION'}}
|
||||
Aux = sBaseAux}
|
||||
local XId = EmtAxis {
|
||||
Name = 'X',
|
||||
Parent = 'Base',
|
||||
@@ -188,7 +203,7 @@ local CId = EmtAxis {
|
||||
Stroke = {MinC, MaxC},
|
||||
Home = 0,
|
||||
Geo = 'C_AXIS/GEO',
|
||||
Aux = {'C_AXIS/SOLID', 'C_AXIS/COLLISION'}}
|
||||
Aux = {'C_AXIS/SOLID', 'C_AXIS/COLLISION', 'C_AXIS/COLLISION2'}}
|
||||
if NewTopC then
|
||||
local vtMove = Vector3d( 65,0,0)
|
||||
local SolidArmId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'SOLID'), 'ARM')
|
||||
@@ -203,9 +218,13 @@ if NewTopC then
|
||||
local CollTopId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'COLLISION'), 'TOP')
|
||||
EgtMove( CollTopId, vtMove, GDB_RT.GLOB)
|
||||
EgtSetName( CollTopId, 'BOX')
|
||||
local RefId = CollTopId + EgtGetInfo( CollTopId, 'Frame', 'i')
|
||||
EgtSetInfo( RefId, 'CollSkip', 'C_TOP')
|
||||
else
|
||||
local CollTopId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'COLLISION'), 'TOP')
|
||||
EgtSetName( CollTopId, 'BOX')
|
||||
local RefId = CollTopId + EgtGetInfo( CollTopId, 'Frame', 'i')
|
||||
EgtSetInfo( RefId, 'CollSkip', 'C_TOP')
|
||||
end
|
||||
EmtAxis {
|
||||
Name = 'B',
|
||||
@@ -308,8 +327,8 @@ if AggreBlockHaus then
|
||||
Parent = 'B',
|
||||
HSet = 'H1',
|
||||
Type = MCH_HT.STD,
|
||||
Pos = Point3d( -AngTrBHLen, 0, -AngTrBHOffs),
|
||||
TDir = X_AX(),
|
||||
Pos = Point3d( AngTrBHLen, 0, -AngTrBHOffs),
|
||||
TDir = -X_AX(),
|
||||
ADir = Z_AX(),
|
||||
Rot1W = 0.2,
|
||||
SolCh = MCH_SCC.ADIR_NEAR,
|
||||
@@ -447,50 +466,140 @@ EmtTcPos {
|
||||
TDir = X_AX(),
|
||||
ADir = Y_AX(),
|
||||
Geo = 'BASE/T10'}
|
||||
EmtTcPos {
|
||||
Name = 'T11',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( -523.8, -88.0, -877.5),
|
||||
TDir = X_AX(),
|
||||
ADir = Y_AX(),
|
||||
Geo = 'BASE/T11'}
|
||||
if not SpecialBH then
|
||||
|
||||
if AggreBlockHaus then
|
||||
EmtTcPos {
|
||||
Name = 'T101',
|
||||
Name = 'T11',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( 510.4, -113.2, -160.8),
|
||||
TDir = -X_AX(),
|
||||
ADir = Z_AX(),
|
||||
Geo = 'BASE/T101'}
|
||||
Pos = Point3d( -678.3, 1.963, -877.5),
|
||||
TDir = -Y_AX(),
|
||||
ADir = X_AX(),
|
||||
Geo = 'BASE/T121',
|
||||
Aux = 'BASE/T121_HS'}
|
||||
else
|
||||
EmtTcPos {
|
||||
Name = 'T101',
|
||||
Name = 'T11',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( 510.4, -113.2, -1160.8),
|
||||
TDir = -X_AX(),
|
||||
ADir = Z_AX(),
|
||||
Geo = 'BASE/T101S'}
|
||||
Pos = Point3d( -523.8, -88.0, -877.5),
|
||||
TDir = X_AX(),
|
||||
ADir = Y_AX(),
|
||||
Geo = 'BASE/T11'}
|
||||
end
|
||||
if SecondSupport == 1 then
|
||||
-- supporto per punta
|
||||
|
||||
-- ToolChanger 2
|
||||
if SecondToolChanger then
|
||||
EmtTcPos {
|
||||
Name = 'T111',
|
||||
Name = 'T21',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( 510.4, -113.2, -329.8),
|
||||
TDir = Z_AX(),
|
||||
ADir = -X_AX(),
|
||||
Geo = 'BASE/T111'}
|
||||
elseif SecondSupport == 2 then
|
||||
-- supporto per mortasatrice
|
||||
Pos = Point3d( 503.2, -88.0, 172.5),
|
||||
TDir = -X_AX(),
|
||||
ADir = -Y_AX(),
|
||||
Geo = 'BASE/T21'}
|
||||
EmtTcPos {
|
||||
Name = 'T22',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( 503.2, -88.0, 67.5),
|
||||
TDir = -X_AX(),
|
||||
ADir = -Y_AX(),
|
||||
Geo = 'BASE/T22'}
|
||||
EmtTcPos {
|
||||
Name = 'T23',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( 503.2, -88.0, -37.5),
|
||||
TDir = -X_AX(),
|
||||
ADir = -Y_AX(),
|
||||
Geo = 'BASE/T23'}
|
||||
EmtTcPos {
|
||||
Name = 'T24',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( 503.2, -88.0, -142.5),
|
||||
TDir = -X_AX(),
|
||||
ADir = -Y_AX(),
|
||||
Geo = 'BASE/T24'}
|
||||
EmtTcPos {
|
||||
Name = 'T25',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( 503.2, -88.0, -247.5),
|
||||
TDir = -X_AX(),
|
||||
ADir = -Y_AX(),
|
||||
Geo = 'BASE/T25'}
|
||||
EmtTcPos {
|
||||
Name = 'T26',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( 503.2, -88.0, -352.5),
|
||||
TDir = -X_AX(),
|
||||
ADir = -Y_AX(),
|
||||
Geo = 'BASE/T26'}
|
||||
EmtTcPos {
|
||||
Name = 'T27',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( 503.2, -88.0, -457.5),
|
||||
TDir = -X_AX(),
|
||||
ADir = -Y_AX(),
|
||||
Geo = 'BASE/T27'}
|
||||
EmtTcPos {
|
||||
Name = 'T28',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( 503.2, -88.0, -562.5),
|
||||
TDir = -X_AX(),
|
||||
ADir = -Y_AX(),
|
||||
Geo = 'BASE/T28'}
|
||||
else
|
||||
if not SpecialBH then
|
||||
EmtTcPos {
|
||||
Name = 'T101',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( 510.4, -113.2, -160.8),
|
||||
TDir = -X_AX(),
|
||||
ADir = Z_AX(),
|
||||
Geo = 'BASE/T101'}
|
||||
end
|
||||
if SecondSupport == 1 then
|
||||
-- supporto per punta
|
||||
EmtTcPos {
|
||||
Name = 'T111',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( 510.4, -113.2, -329.8),
|
||||
TDir = Z_AX(),
|
||||
ADir = -X_AX(),
|
||||
Geo = 'BASE/T111'}
|
||||
elseif SecondSupport == 2 then
|
||||
-- supporto per mortasatrice
|
||||
local TcpSsId = EmtTcPos {
|
||||
Name = 'T111',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( 510.4, -113.2, -430.8),
|
||||
TDir = X_AX(),
|
||||
ADir = Z_AX(),
|
||||
Geo = 'BASE/T111M'}
|
||||
EgtSetInfo( TcpSsId, 'Mortiser', true)
|
||||
end
|
||||
if SpecialBH then
|
||||
EmtTcPos {
|
||||
Name = 'T111',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( 810.4, -113.2, -329.8),
|
||||
TDir = -Y_AX(),
|
||||
ADir = -X_AX(),
|
||||
Geo = 'BASE/T111S'}
|
||||
end
|
||||
end
|
||||
|
||||
-- motosega in caso di magazzino 2 o SpecialBH
|
||||
if SpecialBH or SecondToolChanger then
|
||||
local TcpSsId = EmtTcPos {
|
||||
Name = 'T111',
|
||||
Name = 'T101',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( 510.4, -113.2, -430.8),
|
||||
TDir = X_AX(),
|
||||
Pos = Point3d( 510.4, -113.2, -1160.8),
|
||||
TDir = -X_AX(),
|
||||
ADir = Z_AX(),
|
||||
Geo = 'BASE/T111M'}
|
||||
EgtSetInfo( TcpSsId, 'Mortiser', true)
|
||||
elseif SecondSupport == 3 then
|
||||
Geo = 'BASE/T101S'}
|
||||
-- spostamento in caso di magazzino 2
|
||||
if SecondToolChanger then
|
||||
EgtMove( TcpSsId, Vector3d( 0, 0, 140), GDB_RT.GLOB)
|
||||
end
|
||||
end
|
||||
if SecondSupport == 3 then
|
||||
-- supporto per rinvio angolare
|
||||
local TcpSsId = EmtTcPos {
|
||||
Name = 'T91',
|
||||
@@ -503,26 +612,9 @@ elseif SecondSupport == 3 then
|
||||
ADir = Z_AX(),
|
||||
Geo = 'BASE/T91',
|
||||
Aux = 'BASE/T91_HS'}
|
||||
end
|
||||
if SpecialBH then
|
||||
EmtTcPos {
|
||||
Name = 'T111',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( 810.4, -113.2, -329.8),
|
||||
TDir = -Y_AX(),
|
||||
ADir = -X_AX(),
|
||||
Geo = 'BASE/T111S'}
|
||||
end
|
||||
|
||||
if AggreBlockHaus then
|
||||
EmtTcPos {
|
||||
Name = 'T121',
|
||||
Parent = 'Base',
|
||||
Pos = Point3d( -678.3, 1.963, -877.5),
|
||||
TDir = -Y_AX(),
|
||||
ADir = X_AX(),
|
||||
Geo = 'BASE/T121',
|
||||
Aux = 'BASE/T121_HS'}
|
||||
if SecondToolChanger then
|
||||
EgtMove( TcpSsId, Vector3d( 0, 0, -900), GDB_RT.GLOB)
|
||||
end
|
||||
end
|
||||
|
||||
-- Aggiusto posizioni geometriche
|
||||
@@ -554,24 +646,33 @@ PVLightId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( PVId, 'SOLID') or GD
|
||||
---------------------------------------------------------------------
|
||||
function OnSetHead()
|
||||
-- se testa lama
|
||||
if EMC.HEAD == 'H2' then
|
||||
EmtModifyAxisDirection( 'B', VectorFromRotated( X_AX(), Z_AX(), -SawCOffs))
|
||||
EmtModifyAxisHome( 'C', 0)
|
||||
-- se sega a catena
|
||||
elseif EMC.HEAD == 'H3' then
|
||||
EmtModifyAxisDirection( 'B', X_AX())
|
||||
EmtModifyAxisHome( 'C', 180)
|
||||
local dDist = EgtIf( EMC.DIST and abs( EMC.DIST) > 1, EMC.DIST, ChSawLen)
|
||||
EmtModifyExitPosition( EMC.HEAD, EMC.EXIT, Point3d( 0, 0, -dDist))
|
||||
if not EMC.VER or EMC.VER < '2.5h2' then
|
||||
local vtMove = Point3d( 0, 0, -dDist) - Point3d( EMC.EXITPOS)
|
||||
local ExitId = EgtGetFirstNameInGroup( EgtGetHeadId( EMC.HEAD), 'T'..tostring( EMC.EXIT))
|
||||
EgtMove( ExitId, vtMove)
|
||||
if EMC.HEAD == 'H1' then
|
||||
if EMC.TOTLEN and EMC.TOTLEN < LONG_TOOL_MINLEN then
|
||||
EmtModifyAxisStroke( 'B', {MinB, MaxB})
|
||||
else
|
||||
EmtModifyAxisStroke( 'B', {-140, 140})
|
||||
end
|
||||
-- altrimenti
|
||||
else
|
||||
EmtModifyAxisDirection( 'B', X_AX())
|
||||
EmtModifyAxisHome( 'C', 0)
|
||||
EmtModifyAxisStroke( 'B', {MinB, MaxB})
|
||||
if EMC.HEAD == 'H2' then
|
||||
EmtModifyAxisDirection( 'B', VectorFromRotated( X_AX(), Z_AX(), -SawCOffs))
|
||||
EmtModifyAxisHome( 'C', 0)
|
||||
-- se sega a catena
|
||||
elseif EMC.HEAD == 'H3' then
|
||||
EmtModifyAxisDirection( 'B', X_AX())
|
||||
EmtModifyAxisHome( 'C', 180)
|
||||
local dDist = EgtIf( EMC.DIST and abs( EMC.DIST) > 1, EMC.DIST, ChSawLen)
|
||||
EmtModifyExitPosition( EMC.HEAD, EMC.EXIT, Point3d( 0, 0, -dDist))
|
||||
if not EMC.VER or EMC.VER < '2.5h2' then
|
||||
local vtMove = Point3d( 0, 0, -dDist) - Point3d( EMC.EXITPOS)
|
||||
local ExitId = EgtGetFirstNameInGroup( EgtGetHeadId( EMC.HEAD), 'T'..tostring( EMC.EXIT))
|
||||
EgtMove( ExitId, vtMove)
|
||||
end
|
||||
-- altrimenti
|
||||
else
|
||||
EmtModifyAxisDirection( 'B', X_AX())
|
||||
EmtModifyAxisHome( 'C', 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -613,6 +714,52 @@ function GetPVLight()
|
||||
return ( EgtGetInfo( PVLightId, 'On') == '1')
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
---------------------------- Cambio Utensile ------------------------
|
||||
function GetTCSet( sTcPos)
|
||||
-- TC 1
|
||||
if sTcPos == 'T1' or sTcPos == 'T2' or sTcPos == 'T3' or sTcPos == 'T4' or sTcPos == 'T5' or
|
||||
sTcPos == 'T6' or sTcPos == 'T7' or sTcPos == 'T8' or sTcPos == 'T9' or sTcPos == 'T10' or sTcPos == 'T11' then
|
||||
return 1
|
||||
-- TC 2
|
||||
elseif sTcPos == 'T21' or sTcPos == 'T22' or sTcPos == 'T23' or sTcPos == 'T24' or
|
||||
sTcPos == 'T25' or sTcPos == 'T26' or sTcPos == 'T27' or sTcPos == 'T28' then
|
||||
return 2
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Funzione per impostare la posizione del rinvio flottante
|
||||
function SetFloatPos( sHead, dPos)
|
||||
-- recupero Id testa
|
||||
local nHeadId = EgtGetHeadId( sHead)
|
||||
if not nHeadId then return false end
|
||||
-- se ci sono entita' flottanti nel ToolHolder
|
||||
local nRefId = EgtGetFirstNameInGroup( nHeadId, '_T1')
|
||||
local vtTool = EgtFR( nRefId, GDB_ID.ROOT):getVersZ()
|
||||
local nObjId = EgtGetFirstGroupInGroup( EgtGetFirstNameInGroup( nHeadId, 'T1'))
|
||||
local FloatEntities = EgtGetInfoInGroup( nObjId, 'Float')
|
||||
if FloatEntities and #FloatEntities > 0 then
|
||||
-- il porta-utensile flottante non puo' comprimersi piu' di 10mm
|
||||
if dPos > 10 then
|
||||
local sErr = 'Floating Ring compressed more than 10mm'
|
||||
EmtSetLastError( 1222, sErr)
|
||||
EgtOutLog( 'Error : ' .. sErr, 1)
|
||||
end
|
||||
local dFloat = EgtGetInfo( FloatEntities[1], 'Float', 'd')
|
||||
if abs( dPos - dFloat) > 10 * GEO.EPS_SMALL then
|
||||
local vtMove = ( dPos - dFloat) * vtTool
|
||||
-- sposto tutte le entita' flottanti
|
||||
for i = 1, #FloatEntities do
|
||||
EgtMove( FloatEntities[i], vtMove, GDB_RT.GLOB)
|
||||
EgtSetInfo( FloatEntities[i], 'Float', dPos)
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Funzione per resettare tutte le attivazioni della macchina
|
||||
function OnResetMachine()
|
||||
@@ -620,6 +767,7 @@ function OnResetMachine()
|
||||
EmtUnlinkAllFixturesFromGroups()
|
||||
SetPYLight( false)
|
||||
SetPVLight( false)
|
||||
SetFloatPos( 'H1', 0)
|
||||
-- nascondo Vmill
|
||||
local nRawId = EgtGetFirstRawPart()
|
||||
while nRawId do
|
||||
|
||||
Binary file not shown.
+28
-20
@@ -7,21 +7,22 @@
|
||||
[Sawing]
|
||||
|
||||
[Milling]
|
||||
0=d,MaxElev,0
|
||||
0=l,MaxElev,0
|
||||
1=d,OutRaw,0
|
||||
2=d,SideElev,0
|
||||
2=l,SideElev,0
|
||||
3=d,TrimExt,0
|
||||
4=sr,VtFaceUse,0,0,0
|
||||
4=s,VtFaceUse,0,0,0
|
||||
5=s,EdgesFaceUse,0
|
||||
|
||||
[Pocketing]
|
||||
0=d,MaxElev,0
|
||||
0=l,MaxElev,0
|
||||
1=b,Open,0
|
||||
2=d,OpenMinSave,0
|
||||
2=d,OpenMinSafe,0
|
||||
3=d,OpenOutRaw,0
|
||||
4=d,MaxOptSize,0
|
||||
4=l,MaxOptSize,0
|
||||
|
||||
[Mortising]
|
||||
0=d,MaxElev,0
|
||||
0=l,MaxElev,0
|
||||
|
||||
[Chiseling]
|
||||
|
||||
@@ -30,21 +31,28 @@
|
||||
[SawFinishing]
|
||||
|
||||
[GenMachining]
|
||||
0=l,LinTol,0.1
|
||||
1=l,MaxLen,2
|
||||
2=s,Type,ZigZag
|
||||
3=d,SideAng,90
|
||||
4=l,Step,10
|
||||
5=l,OffsProj,0
|
||||
6=l,LiTang,0
|
||||
7=l,LiOrth,0
|
||||
8=l,LiElev,0
|
||||
9=l,LoTang,0
|
||||
10=l,LoOrth,0
|
||||
11=l,LoElev,0
|
||||
12=b,DirFromGuide,1
|
||||
|
||||
[SurfRoughing]
|
||||
0=l,MaxElev,1000
|
||||
1=b,PlaneZ,0
|
||||
|
||||
[SurfFinishing]
|
||||
0=b,SkipMaxDown,1
|
||||
|
||||
[5AxMilling]
|
||||
0=l,LinTol,0.01
|
||||
1=l,MaxLen,10
|
||||
2=s,Type,ZigZag
|
||||
3=d,SideAng,90
|
||||
4=l,Step,10
|
||||
5=d,AngIni,-90
|
||||
6=d,AngFin,90
|
||||
7=l,LiTang,0
|
||||
8=l,LiOrth,0
|
||||
9=l,LiElev,0
|
||||
10=l,LoTang,0
|
||||
11=l,LoOrth,0
|
||||
12=l,LoElev,0
|
||||
13=b,DirFromGuide,0
|
||||
14=b,SurfAvoid,0
|
||||
|
||||
|
||||
+31
-16
@@ -1,4 +1,4 @@
|
||||
-- Gestione attrezzaggio per Essetre-FAST - 2020/04/26
|
||||
-- Gestione attrezzaggio per Essetre-FAST - 2022/06/16
|
||||
|
||||
-- Intestazioni
|
||||
require( 'EgtBase')
|
||||
@@ -24,9 +24,7 @@ local INVALIDPOS = ""
|
||||
local POS = "Pos"
|
||||
|
||||
-- Geom Set
|
||||
local GS = {}
|
||||
|
||||
local bAggreBlockHaus = ( EgtGetHeadId( 'H7') ~= nil)
|
||||
local GS = {{"H1", "H7"}}
|
||||
|
||||
-- Configurazione posizioni
|
||||
local PositionTable={{Pos = "Pos1", TcPos = "T1", Head = "H1", Group = "G1"},
|
||||
@@ -39,23 +37,40 @@ local PositionTable={{Pos = "Pos1", TcPos = "T1", Head = "H1", Group = "G1"},
|
||||
{Pos = "Pos8", TcPos = "T8", Head = "H1", Group = "G1"},
|
||||
{Pos = "Pos9", TcPos = "T9", Head = "H1", Group = "G1"},
|
||||
{Pos = "Pos10", TcPos = "T10", Head = "H1", Group = "G1"},
|
||||
{Pos = "Pos11", TcPos = EgtIf( bAggreBlockHaus, "T121", "T11"), Head = EgtIf( bAggreBlockHaus, "H7", "H1"), Group = "G1"},
|
||||
{Pos = "Pos11", TcPos = "T11", Head = "H1", Group = "G1"},
|
||||
{Pos = "Pos12", TcPos = "T42", Head = "H2", Group = "G1"},
|
||||
{Pos = "Pos13", TcPos = "T101", Head = "H3", Group = "G2"}}
|
||||
local SecSuppId = EgtGetTcPosId( 'T111')
|
||||
if SecSuppId then
|
||||
local bMortiser = EgtGetInfo( SecSuppId, 'Mortiser', 'b')
|
||||
if bMortiser then
|
||||
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T111", Head = "H3", Group = "G2"})
|
||||
else
|
||||
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T111", Head = "H1", Group = "G2"})
|
||||
|
||||
local IsTC2Active = ( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'TC2') ~= nil)
|
||||
if IsTC2Active then
|
||||
local PositionTableTC2={{Pos = "Pos14", TcPos = "T21", Head = "H1", Group = "G3"},
|
||||
{Pos = "Pos15", TcPos = "T22", Head = "H1", Group = "G3"},
|
||||
{Pos = "Pos16", TcPos = "T23", Head = "H1", Group = "G3"},
|
||||
{Pos = "Pos17", TcPos = "T24", Head = "H1", Group = "G3"},
|
||||
{Pos = "Pos18", TcPos = "T25", Head = "H1", Group = "G3"},
|
||||
{Pos = "Pos19", TcPos = "T26", Head = "H1", Group = "G3"},
|
||||
{Pos = "Pos20", TcPos = "T27", Head = "H1", Group = "G3"},
|
||||
{Pos = "Pos21", TcPos = "T28", Head = "H1", Group = "G3"}}
|
||||
if EgtGetHeadId( 'H5') then
|
||||
table.insert( PositionTableTC2, {Pos = "Pos22", TcPos = "T91", Head = "H5", Group = "G2"})
|
||||
end
|
||||
EgtJoinTables( PositionTable, PositionTableTC2)
|
||||
else
|
||||
local SecSuppId = EgtGetTcPosId( 'T111')
|
||||
if SecSuppId then
|
||||
local bMortiser = EgtGetInfo( SecSuppId, 'Mortiser', 'b')
|
||||
if bMortiser then
|
||||
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T111", Head = "H3", Group = "G2"})
|
||||
else
|
||||
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T111", Head = "H1", Group = "G2"})
|
||||
end
|
||||
end
|
||||
if EgtGetHeadId( 'H5') then
|
||||
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T91", Head = "H5", Group = "G2"})
|
||||
end
|
||||
end
|
||||
if EgtGetHeadId( 'H5') then
|
||||
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T91", Head = "H5", Group = "G2"})
|
||||
end
|
||||
|
||||
local UsePositionHead = true
|
||||
local UsePositionHead = false
|
||||
|
||||
local function IsInGeomSet( ToolHead, PosHead)
|
||||
for GsIndex = 1, #GS do
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
+18
-16
@@ -6,36 +6,38 @@
|
||||
|
||||
[DRILL_STD]
|
||||
0=th,TH,
|
||||
1=d,STEP
|
||||
2=s,DOUBLE
|
||||
1=l,STEP
|
||||
2=tl,DOUBLE
|
||||
|
||||
[SAW_STD]
|
||||
0=th,TH,
|
||||
1=d,STEP
|
||||
2=d,SIDESTEP
|
||||
1=l,STEP
|
||||
2=l,SIDESTEP
|
||||
3=b,LONGCUT
|
||||
|
||||
[SAW_FLAT]
|
||||
0=th,TH,
|
||||
1=d,STEP
|
||||
2=d,SIDESTEP
|
||||
1=l,STEP
|
||||
2=l,SIDESTEP
|
||||
3=b,LONGCUT
|
||||
|
||||
[MILL_STD]
|
||||
0=th,TH,
|
||||
1=d,STEP
|
||||
2=d,SIDESTEP
|
||||
3=d,SIDEDEPTH
|
||||
4=s,DOUBLE
|
||||
1=l,STEP
|
||||
2=l,SIDESTEP
|
||||
3=l,SIDEDEPTH
|
||||
4=tl,DOUBLE
|
||||
5=lr,TOOL_OVERHANG
|
||||
|
||||
[MILL_NOTIP]
|
||||
0=th,TH,
|
||||
1=d,STEP
|
||||
2=d,SIDESTEP
|
||||
3=d,SIDEDEPTH
|
||||
4=s,DOUBLE
|
||||
1=l,STEP
|
||||
2=l,SIDESTEP
|
||||
3=l,SIDEDEPTH
|
||||
4=tl,DOUBLE
|
||||
5=lr,TOOL_OVERHANG
|
||||
|
||||
[MORTISE_STD]
|
||||
0=b,MORTISE
|
||||
1=d,STEP
|
||||
2=d,SIDESTEP
|
||||
1=l,STEP
|
||||
2=l,SIDESTEP
|
||||
|
||||
+68
-1
@@ -1,7 +1,74 @@
|
||||
==== Common_FAST Update Log ====
|
||||
|
||||
Versione 2.6-- (--/--/2024)
|
||||
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) 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
|
||||
- (GEN) Per controllo TPA, modifica al numero di decimali.
|
||||
- (SIM) Aggiunta gestione per ToolHolder flottante
|
||||
|
||||
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
|
||||
|
||||
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.
|
||||
- (SIM) Aggiunta gestione qualità VMILL da impostazioni macchina
|
||||
|
||||
Versione 2.7a1 (07/01/2025)
|
||||
- (MLDE-SIM-GEN) Nuovo aggregato 90° (H7) per fresa tipo BlockHaus. Ticket#2142
|
||||
- (SIM-GEN) Aumentati limiti massimi di pinzaggio minimo
|
||||
|
||||
Versione 2.6l1 (02/12/2024)
|
||||
- (SIM) Corretto movimento VMILL durante scarico pezzo piccolo a caduta
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
local InfoCommon_STD_PP = {
|
||||
NAME = 'Common_FAST', -- nome script PP standard
|
||||
VERSION = '2.6--', -- versione script
|
||||
VERSION = '2.7l1', -- versione script
|
||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user