Compare commits

...

2 Commits

Author SHA1 Message Date
andrea.villa e162d3ab29 - Corretto problema climb con piano già attivato, in realtà è un movimento standard
- Prima versione movimenti in doppio
2026-06-18 08:24:30 +02:00
andrea.villa 28e1024e83 - Corretto limiti preseelzione altra testa
- Se lavorazione in doppio aggiunto ultimo punto prima di cominciare accoppiamento teste
- aggiunta gestione forature e svuotature in doppio NT
2026-06-17 08:47:34 +02:00
4 changed files with 210 additions and 104 deletions
+160 -81
View File
@@ -422,6 +422,14 @@ function OnToolSelect()
if MCH_TP.DIST then EMT.TDIST = EgtTdbGetCurrToolParam( MCH_TP.DIST) end
if EMT.TDIST and abs( EMT.TDIST) < 0.1 then EMT.TDIST = nil end
EMT.TUSERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES)
-- gruppo della testa
local nHSet = GetHeadSet( EMT.HEAD)
if nHSet == 1 and EMT.PRESEL_H1 then
EMT.PRESEL_H1 = nil
elseif nHSet == 2 and EMT.PRESEL_H2 then
EMT.PRESEL_H2 = nil
end
end
end
@@ -818,6 +826,10 @@ function OnRapid()
local bSplitMach = ( EMT.MCHUSERNOTES:find( 'Split', 1, true) ~= nil)
local sPostMove = ''
local sHeadToMoveFirst = EgtGetInfo( EMT.MOVEID, 'HeadToMoveFirst', 's') or false
local bFirstMoveOnlyH1 = sHeadToMoveFirst and sHeadToMoveFirst == 'H1'
local bFirstMoveOnlyH2 = sHeadToMoveFirst and sHeadToMoveFirst == 'H2'
-- tutte le teste devono passare dalla gestione nuovi link, altrimenti errore
if not IsNewLinkHead( EMT.HEAD) then
EmtSetLastError( 1211, "UNEXPECTED ERROR on links")
@@ -965,18 +977,41 @@ function OnRapid()
EMT.START_PRESEL = nil
end
-- se la testa 1 deve andare per prima in posizione, start e attesa movimento
if bFirstMoveOnlyH2 then
if EMT.APPROACH.DBLCLIMBS and #EMT.APPROACH.DBLCLIMBS > 0 then
EmitMoveDataHead( 2, { X=-EMT.APPROACH.DBLCLIMBS[1].L2, Z=EMT.APPROACH.DBLCLIMBS[1].L3, C=EMT.APPROACH.DBLCLIMBS[1].R1, B=EMT.APPROACH.DBLCLIMBS[1].R2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
EmitMoveStartHead( 2)
EmitMoveWaitHead( 2)
-- si rimuove il primo movimento
table.remove( EMT.APPROACH.DBLCLIMBS, 1)
end
end
local dTRad, dTLen = GetToolRadLen()
EmitMoveDataHead( nHSet, { X=EMT.L2, Z=EMT.L3, B=EMT.R2, C=EMT.R1, TRad=dTRad, TLen=dTLen, S=CalcRealSpeed( EMT.S)})
-- se la testa 1 deve andare per prima in posizione, start e attesa movimento
if bFirstMoveOnlyH1 then
EmitMoveStartHead( 1)
EmitMoveWaitHead( 1)
end
end
end
EMT.MCHFIRST = false
-- movimento standard CLIMB
elseif EMT.FLAG == 2 then
MyAdjustLinearAxes()
EmtAdjustRotaryAxes()
local dTRad, dTLen = GetToolRadLen()
EmitMoveDataHead( nHSet, { X=EMT.L2, Z=EMT.L3, C=EMT.R1, B=EMT.R2, TRad=dTRad, TLen=dTLen, S=CalcRealSpeed( EMT.S)})
-- se non ho ancora impostato il piano movimenti in assoluto
if not EMT.PLANEACTIVE then
MyAdjustLinearAxes()
EmtAdjustRotaryAxes()
local dTRad, dTLen = GetToolRadLen()
EmitMoveDataHead( nHSet, { X=EMT.L2, Z=EMT.L3, C=EMT.R1, B=EMT.R2, TRad=dTRad, TLen=dTLen, S=CalcRealSpeed( EMT.S)})
-- altrimenti è un rapido standard
else
bStdMachRapid = true
end
-- movimento standard RISE
elseif EMT.FLAG == 3 then
EMT.REFLOC = nil
@@ -996,11 +1031,13 @@ function OnRapid()
EmitMoveStartHead( nHSet)
-- se lavorazione in doppio
if nHSet == 1 and EMT.DOU_TYPE == 2 then
for i = 1, #EMT.APPROACH.DBLRISES do
EmitMoveDataHead( 2, { X=-EMT.APPROACH.DBLRISES[i].L2, Z=EMT.APPROACH.DBLRISES[i].L3, C=EMT.APPROACH.DBLRISES[i].R1, B=EMT.APPROACH.DBLRISES[i].R2})
if EMT.APPROACH.DBLRISES and #EMT.APPROACH.DBLRISES > 0 then
for i = 1, #EMT.APPROACH.DBLRISES do
EmitMoveDataHead( 2, { X=-EMT.APPROACH.DBLRISES[i].L2, Z=EMT.APPROACH.DBLRISES[i].L3, C=EMT.APPROACH.DBLRISES[i].R1, B=EMT.APPROACH.DBLRISES[i].R2, TPos=EMT.DOU_TPOS})
end
EmitMoveStartHead( 2)
EmitMoveWaitHead( 2)
end
EmitMoveStartHead( 2)
EmitMoveWaitHead( 2)
end
EmitMoveWaitHead( nHSet)
EMT.ZMAX = true
@@ -1022,11 +1059,13 @@ function OnRapid()
EmitMoveStartHead( nHSet)
-- se lavorazione in doppio
if nHSet == 1 and EMT.DOU_TYPE == 2 then
for i = 1, #EMT.APPROACH.DBLCLIMBS do
EmitMoveDataHead( 2, { X=-EMT.APPROACH.DBLCLIMBS[i].L2, Z=EMT.APPROACH.DBLCLIMBS[i].L3, C=EMT.APPROACH.DBLCLIMBS[i].R1, B=EMT.APPROACH.DBLCLIMBS[i].R2})
if EMT.APPROACH.DBLCLIMBS and #EMT.APPROACH.DBLCLIMBS > 0 then
for i = 1, #EMT.APPROACH.DBLCLIMBS do
EmitMoveDataHead( 2, { X=-EMT.APPROACH.DBLCLIMBS[i].L2, Z=EMT.APPROACH.DBLCLIMBS[i].L3, C=EMT.APPROACH.DBLCLIMBS[i].R1, B=EMT.APPROACH.DBLCLIMBS[i].R2, TPos=EMT.DOU_TPOS, S=EMT.DOU_SPEED})
end
EmitMoveStartHead( 2)
EmitMoveWaitHead( 2)
end
EmitMoveStartHead( 2)
EmitMoveWaitHead( 2)
-- altrimenti preselezione su altra testa
else
PreselectNextDiffHead( EMT.MCHID, EMT.HEAD)
@@ -1258,18 +1297,13 @@ function OnLinear()
MyAdjustLinearAxes()
EmtAdjustRotaryAxes()
-- se lavorazione in doppio e fondo foro, inverto movimento punta doppia
if EMT.MCHTYPE == MCH_MY.DRILLING and not EMT.DBLHEADPARA and EMT.DOU_TYPE == 2 and EMT.FLAG == 105 then
-- se lavorazione in doppio, da questo movimento bisogna passare ad accoppiamento in parallelo
if not EMT.DBLHEADPARA and EMT.DOU_TYPE == 2 and
( ( EMT.MCHTYPE == MCH_MY.DRILLING and EMT.FLAG == 105) or ( EMT.MCHTYPE == MCH_MY.POCKETING and EMT.FLAG == 405))then
EmtOutput( "G157 EE-1")
EMT.DBLHEADPARA = true
end
-- se lavorazione in doppio e fondo foro, muovo punta 2 e poi ripristino movimento standard punta doppia
if EMT.DBLHEADPARA and EMT.FLAG == 104 then
EmtOutput( "G157 EE1")
EMT.DBLHEADPARA = nil
end
-- valori degli assi
local sL1, bL1 = EmtGetAxis( 'L1')
local sL2, bL2 = EmtGetAxis( 'L2')
@@ -1289,6 +1323,13 @@ function OnLinear()
-- emetto linea
EmtOutput( "G1"..sSlowDown..sAxes..sFeed)
-- se testa accoppiata in parallelo, in uscita si disaccoppia per tornare ad accoppiamento speculare
if EMT.DBLHEADPARA and
( ( EMT.MCHTYPE == MCH_MY.DRILLING and EMT.FLAG == 104) or ( EMT.MCHTYPE == MCH_MY.POCKETING and EMT.FLAG == 404)) then
EmtOutput( "G157 EE1")
EMT.DBLHEADPARA = nil
end
-- aggiorno valori come precedenti
EMT.TPOS = EMT.L1o
EmtUpdatePrev()
@@ -1341,6 +1382,13 @@ function OnArc()
MyAdjustLinearAxes()
EmtAdjustRotaryAxes()
-- se lavorazione in doppio, da questo movimento bisogna passare ad accoppiamento in parallelo
if not EMT.DBLHEADPARA and EMT.DOU_TYPE == 2 and
( ( EMT.MCHTYPE == MCH_MY.DRILLING and EMT.FLAG == 105) or ( EMT.MCHTYPE == MCH_MY.POCKETING and EMT.FLAG == 405))then
EmtOutput( "G157 EE-1")
EMT.DBLHEADPARA = true
end
-- valori degli assi
local sAxes = EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..
EmtGetAxis('R1')..EmtGetAxis('R2')
@@ -2491,82 +2539,113 @@ function PreselectNextDiffHead( nMchId, sHead)
-- gruppo della testa
local nHSet = GetHeadSet( sHead)
local bVerifyPresel = true
if not EMT.LOAD then
-- se lavorazione con testa 1 e sotto al limite massimo di preselezione della testa 2, allora non si fa preselezione
if nHSet == 1 and Limit_T1_Presel_T2 and EMT.MAXMIN[2] < Limit_T1_Presel_T2 then
bVerifyPresel = false
-- se lavorazione con testa 1 e sopra al limite minimo di preselezione della testa 1, allora non si fa preselezione
elseif nHSet == 2 and Limit_T2_Presel_T1 and EMT.MAXMIN[2] > Limit_T2_Presel_T1 then
bVerifyPresel = false
end
end
-- flag preselezione eseguita
local bPresel = false
-- recupero lavorazione successiva
local nNextMchId = EgtGetNextActiveOperation( nMchId)
while nNextMchId do
if EgtGetOperationType( nNextMchId) ~= MCH_OY.DISP then
if EgtSetCurrMachining( nNextMchId) then
local sNextTool = EgtGetMachiningParam( MCH_MP.TOOL)
if EgtTdbSetCurrTool( sNextTool) then
local sNextHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
local nNextHSet = GetHeadSet( sNextHead)
if nNextHSet ~= nHSet then
break
if bVerifyPresel then
-- recupero lavorazione successiva
local nNextMchId = EgtGetNextActiveOperation( nMchId)
while nNextMchId do
if EgtGetOperationType( nNextMchId) ~= MCH_OY.DISP then
if EgtSetCurrMachining( nNextMchId) then
local sNextTool = EgtGetMachiningParam( MCH_MP.TOOL)
if EgtTdbSetCurrTool( sNextTool) then
local sNextHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
local nNextHSet = GetHeadSet( sNextHead)
if nNextHSet ~= nHSet then
break
end
end
end
end
nNextMchId = EgtGetNextActiveOperation( nNextMchId)
end
-- se esiste ed appartiene a gruppo diverso
if nNextMchId and EgtSetCurrMachining( nNextMchId) then
local sNextTool = EgtGetMachiningParam( MCH_MP.TOOL)
if EgtTdbSetCurrTool( sNextTool) then
local sNextHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
local nNextHSet = GetHeadSet( sNextHead)
if nNextHSet ~= nHSet then
local sNextTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS)
-- se testa attuale da caricare è sega a catena, mando l'altra prima in HomeX (per evitare possibili collisioni) e poi lancio preselezione
if sHead == 'H13' and nHSet ~= GetHeadSet( EMT.PREVHEAD_H1) then
EmitMoveDataHead( 2, { X=-ParkX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, EMT.PREVTCPOS_H2)})
EmitMoveStartHead( 2)
EmitMoveWaitHead( 2)
elseif sHead == 'H23' and nHSet ~= GetHeadSet( EMT.PREVHEAD_H2) then
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, EMT.PREVTCPOS_H1)})
EmitMoveStartHead( 1)
EmitMoveWaitHead( 1)
end
-- Emetto preselezione (non ammessa per sega a catena H13 e H23 e aggregato BlockHaus H17)
if sNextHead == 'H11' then
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sNextTcPos)})
EmitMoveStartHead( 1)
bPresel = true
elseif sNextHead == 'H12' then
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sNextTcPos)})
EmitMoveStartHead( 1)
bPresel = true
elseif sNextHead == 'H21' then
EmitMoveDataHead( 2, { X=-ParkX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, sNextTcPos)})
EmitMoveStartHead( 2)
bPresel = true
elseif sNextHead == 'H22' then
EmitMoveDataHead( 2, { X=-ParkX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, sNextTcPos)})
EmitMoveStartHead( 2)
bPresel = true
end
end
end
end
nNextMchId = EgtGetNextActiveOperation( nNextMchId)
-- ripristino stato corrente
EgtSetCurrMachining( EMT.MCHID)
EgtTdbSetCurrTool( EMT.TOOL)
end
-- se esiste ed appartiene a gruppo diverso
if nNextMchId and EgtSetCurrMachining( nNextMchId) then
local sNextTool = EgtGetMachiningParam( MCH_MP.TOOL)
if EgtTdbSetCurrTool( sNextTool) then
local sNextHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
local nNextHSet = GetHeadSet( sNextHead)
if nNextHSet ~= nHSet then
local sNextTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS)
-- se testa attuale da caricare è sega a catena, mando l'altra prima in HomeX (per evitare possibili collisioni) e poi lancio preselezione
if sHead == 'H13' and nHSet ~= GetHeadSet( EMT.PREVHEAD_H1) then
-- se non eseguita preselezione
if not bPresel then
-- se era stato preselezionato un utensile e adesso non posso preselezionare, attendo la testa
if EMT.PRESEL_H2 then
EmitMoveWaitHead( 2)
EMT.PRESEL_H2 = nil
elseif EMT.PRESEL_H1 then
EmitMoveWaitHead( 1)
EMT.PRESEL_H1 = nil
-- se non era stato preselezionato nulla
else
-- mi assicuro che l'altra testa sia in parcheggio
if nHSet == 1 then
-- non può essere la sega a catena
if EMT.PREVHEAD_H2 ~= 'H23' then
EmitMoveDataHead( 2, { X=-ParkX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, EMT.PREVTCPOS_H2)})
EmitMoveStartHead( 2)
EmitMoveWaitHead( 2)
elseif sHead == 'H23' and nHSet ~= GetHeadSet( EMT.PREVHEAD_H2) then
end
else
-- non può essere la sega a catena
if EMT.PREVHEAD_H1 ~= 'H13' and EMT.PREVHEAD_H1 ~= 'H15' then
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, EMT.PREVTCPOS_H1)})
EmitMoveStartHead( 1)
EmitMoveWaitHead( 1)
end
-- Emetto preselezione (non ammessa per sega a catena H13 e H23 e aggregato BlockHaus H17)
if sNextHead == 'H11' then
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sNextTcPos)})
EmitMoveStartHead( 1)
bPresel = true
elseif sNextHead == 'H12' then
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sNextTcPos)})
EmitMoveStartHead( 1)
bPresel = true
elseif sNextHead == 'H21' then
EmitMoveDataHead( 2, { X=-ParkX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, sNextTcPos)})
EmitMoveStartHead( 2)
bPresel = true
elseif sNextHead == 'H22' then
EmitMoveDataHead( 2, { X=-ParkX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, sNextTcPos)})
EmitMoveStartHead( 2)
bPresel = true
end
end
end
end
-- ripristino stato corrente
EgtSetCurrMachining( EMT.MCHID)
EgtTdbSetCurrTool( EMT.TOOL)
-- se non eseguita preselezione
if not bPresel then
-- mi assicuro che l'altra testa sia in parcheggio
else
if nHSet == 1 then
-- non può essere la sega a catena
if EMT.PREVHEAD_H2 ~= 'H23' then
EmitMoveDataHead( 2, { X=-ParkX2, Z=MaxZ2, B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, EMT.PREVTCPOS_H2)})
EmitMoveStartHead( 2)
end
else
-- non può essere la sega a catena
if EMT.PREVHEAD_H1 ~= 'H13' and EMT.PREVHEAD_H1 ~= 'H15' then
EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, EMT.PREVTCPOS_H1)})
EmitMoveStartHead( 1)
end
EMT.PRESEL_H2 = true
elseif nHSet == 1 then
EMT.PRESEL_H2 = true
end
end
end
+31 -17
View File
@@ -853,6 +853,7 @@ function OnSimulMoveStart()
local bStdClimb = ( EMT.FLAG2 ~= 2 and EMT.FLAG == 2)
local bStdRise = ( EMT.FLAG2 ~= 2 and EMT.FLAG == 3)
local bStdMachRapid = ( EMT.FLAG2 == 0 and ( EMT.FLAG == 0 or EMT.FLAG == 1))
local sHeadToMoveFirst = EgtGetInfo( EMT.MOVEID, 'HeadToMoveFirst', 's')
-- se primo rapido della lavorazione è un movimento standard, allora questo è l'ultimo climb
if bStdMachRapid and EMT.MCHFIRST then
@@ -1018,26 +1019,41 @@ function OnSimulMoveStart()
-- movimento di approccio o retrazione
else
-- incremento indice approccio
EMT.INDEX_APPROACH_MOVE = EMT.INDEX_APPROACH_MOVE + 1
-- se non esiste movimento sulla testa due, significa che gli approcci della testa 1 sono in maggior numero
if ( EMT.APPROACH.DBLCLIMBS[EMT.INDEX_APPROACH_MOVE] and EMT.IS_CLIMB) or ( EMT.APPROACH.DBLRISES[EMT.INDEX_APPROACH_MOVE] and EMT.IS_RISE) then
EMT.AuxAxes = 4 + 4
EMT.A5n = 'X2'
EMT.A6n = 'Z2'
EMT.A7n = 'C2'
EMT.A8n = 'B2'
local bFirstMoveOnlyH1 = sHeadToMoveFirst and sHeadToMoveFirst == 'H1'
local bFirstMoveOnlyH2 = sHeadToMoveFirst and sHeadToMoveFirst == 'H2'
-- se bisogna muovere prima la testa 1, il movimento della testa 2 non si esegue adesso
if not bFirstMoveOnlyH1 then
-- incremento indice approccio
EMT.INDEX_APPROACH_MOVE = EMT.INDEX_APPROACH_MOVE + 1
-- se non esiste movimento sulla testa due, significa che gli approcci della testa 1 sono in maggior numero
if ( EMT.APPROACH.DBLCLIMBS[EMT.INDEX_APPROACH_MOVE] and EMT.IS_CLIMB) or ( EMT.APPROACH.DBLRISES[EMT.INDEX_APPROACH_MOVE] and EMT.IS_RISE) then
EMT.AuxAxes = 4 + 4
EMT.A5n = 'X2'
EMT.A6n = 'Z2'
EMT.A7n = 'C2'
EMT.A8n = 'B2'
if EMT.IS_CLIMB then
if EMT.IS_CLIMB then
EMT.A5 = EMT.APPROACH.DBLCLIMBS[EMT.INDEX_APPROACH_MOVE].L2
EMT.A6 = EMT.APPROACH.DBLCLIMBS[EMT.INDEX_APPROACH_MOVE].L3
EMT.A7 = EMT.APPROACH.DBLCLIMBS[EMT.INDEX_APPROACH_MOVE].R1
EMT.A8 = EMT.APPROACH.DBLCLIMBS[EMT.INDEX_APPROACH_MOVE].R2
elseif EMT.IS_RISE then
EMT.A5 = EMT.APPROACH.DBLRISES[EMT.INDEX_APPROACH_MOVE].L2
EMT.A6 = EMT.APPROACH.DBLRISES[EMT.INDEX_APPROACH_MOVE].L3
EMT.A7 = EMT.APPROACH.DBLRISES[EMT.INDEX_APPROACH_MOVE].R1
EMT.A8 = EMT.APPROACH.DBLRISES[EMT.INDEX_APPROACH_MOVE].R2
end
end
-- se bisogna muovere prima la testa 2, si esegue subito il primo movimento della testa, priam di muovere la testa 1
elseif bFirstMoveOnlyH2 then
if #EMT.APPROACH.DBLCLIMBS > 0 then
EMT.INDEX_APPROACH_MOVE = EMT.INDEX_APPROACH_MOVE + 1
EMT.A5 = EMT.APPROACH.DBLCLIMBS[EMT.INDEX_APPROACH_MOVE].L2
EMT.A6 = EMT.APPROACH.DBLCLIMBS[EMT.INDEX_APPROACH_MOVE].L3
EMT.A7 = EMT.APPROACH.DBLCLIMBS[EMT.INDEX_APPROACH_MOVE].R1
EMT.A8 = EMT.APPROACH.DBLCLIMBS[EMT.INDEX_APPROACH_MOVE].R2
elseif EMT.IS_RISE then
EMT.A5 = EMT.APPROACH.DBLRISES[EMT.INDEX_APPROACH_MOVE].L2
EMT.A6 = EMT.APPROACH.DBLRISES[EMT.INDEX_APPROACH_MOVE].L3
EMT.A7 = EMT.APPROACH.DBLRISES[EMT.INDEX_APPROACH_MOVE].R1
EMT.A8 = EMT.APPROACH.DBLRISES[EMT.INDEX_APPROACH_MOVE].R2
SimulMoveAxes( 'X2', EMT.A5, MCH_SIM_STEP.RAPID, 'Z2', EMT.A6, MCH_SIM_STEP.RAPID, 'C2', EMT.A7, MCH_SIM_STEP.COLLROT, 'B2', EMT.A8, MCH_SIM_STEP.COLLROT)
end
end
end
@@ -1069,8 +1085,6 @@ function OnSimulMoveStart()
end
end
if EMT.DOU_TYPE then
-- se testa 2 ha più movimenti della testa 1, eseguo tutti i movimenti della testa due che mancano
if bLastClimb or bUniqueClimb then
+18 -5
View File
@@ -125,9 +125,14 @@ function OnSpecialLink()
if EMC.HEAD == 'H11' then
-- se inizio lavorazione con prelievo utensile
if EMC.LINKTYPE == 1 then
-- se lavorazione in doppio e altra ha collegamento diretto, si muove prima l'altra
local sHeadToMoveFirst = ''
if EMC.OTHERLINKTYPE == 3 then
sHeadToMoveFirst = 'HeadToMoveFirst=H2;'
end
-- approccio
EmtRemoveClimb( EMC.NEXTMCHID, EMC.NEXTMAIN)
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1p, EMC.R2p}, 30, 2, 2, 'FirstClimb=1;')
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1p, EMC.R2p}, 30, 2, 2, 'FirstClimb=1;'..sHeadToMoveFirst)
-- se asse B resta girato verso home e C resta vicino alla home
if abs( EMC.R2 - EMC.R2p) < 90 and abs( EMC.R1 - EMC.R1p) < 5 then
; -- discesa diretta
@@ -176,10 +181,12 @@ function OnSpecialLink()
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, MaxZ1, EMC.R1, 0}, 30, 2, 2, 'FirstClimb=1;')
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3, EMC.R1, EMC.R2}, 30, 2, 2, 'LastClimb=1;')
else
-- GESTIONE PER DOPPIO
-- se altra testa arriva da home, devo per forza avere un CLIMB, creo il punto
if EMC.OTHERLINKTYPE == 1 then
EmtRemoveClimb( EMC.NEXTMCHID, EMC.NEXTMAIN)
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, vInitAxLink, 30, 2, 2, 'UniqueClimb=1;')
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, vInitAxLink, 30, 2, 2, 'FirstClimb=1;HeadToMoveFirst=H1;')
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3, EMC.R1, EMC.R2}, 30, 2, 2, 'LastClimb=1;')
-- se altra testa deve andare in home, devo per forza avere un RISE, creo il punto
elseif EMC.OTHERLINKTYPE == 2 then
EmtRemoveRise( EMC.PREVMCHID, EMC.PREVMAIN)
@@ -199,9 +206,12 @@ function OnSpecialLink()
EmtRemoveClimb( EMC.NEXTMCHID, EMC.NEXTMAIN)
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2p, EMC.L3p, EMC.R1p, EMC.R2p}, 30, 2, 2, 'FirstClimb=1;')
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1p, EMC.R2p}, 30, 2, 2)
-- se assi cambiano di molto
if abs( EMC.R1 - EMC.R1p) > 10 or abs( EMC.R2 - EMC.R2p) > 90 then
-- se asse B cambia di molto
if abs( 0 - EMC.R2p) > 1 then
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1p, 0}, 30, 2, 2)
end
-- se assi cambiano di molto
if abs( EMC.R1 - EMC.R1p) > 10 then
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1, 0}, 30, 2, 2)
end
@@ -216,7 +226,10 @@ function OnSpecialLink()
EmtRemoveRise( EMC.PREVMCHID, EMC.PREVMAIN)
if abs( EMC.R1 - EMC.R1p) > 1 or abs( EMC.R2 - EMC.R2p) > 1 then
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'FirstRise=1;')
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1, 0}, 30, 3, 2)
-- se assi cambiano di molto
if abs( EMC.R1 - EMC.R1p) > 10 then
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1, 0}, 30, 3, 2)
end
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1, EMC.R2}, 30, 3, 2)
else
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1p, EMC.R2p}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'FirstRise=1;')
+1 -1
View File
@@ -32,7 +32,7 @@
require( 'EmtGenerator')
EgtEnableDebug( false)
PP_VER = '3.1f1_CR3'
PP_VER = '3.1f1_CR4'
PP_NVER = '3.1.6.1'
MIN_MACH_VER = '2.5k1'
MACH_NAME = EgtGetCurrMachineName()