From 28e1024e83c8f11623c52f68ce154683e4bb666f Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Wed, 17 Jun 2026 08:47:34 +0200 Subject: [PATCH] - 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 --- Common_ONE-PF.NUM.mlpe | 191 +++++++++++++++++++++++++---------------- Common_ONE-PF.mlse | 3 +- 2 files changed, 120 insertions(+), 74 deletions(-) diff --git a/Common_ONE-PF.NUM.mlpe b/Common_ONE-PF.NUM.mlpe index ca3599b..e34c05d 100644 --- a/Common_ONE-PF.NUM.mlpe +++ b/Common_ONE-PF.NUM.mlpe @@ -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 @@ -996,11 +1004,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 +1032,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,14 +1270,16 @@ 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 + -- 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 @@ -2491,82 +2505,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 diff --git a/Common_ONE-PF.mlse b/Common_ONE-PF.mlse index 2516116..bde5838 100644 --- a/Common_ONE-PF.mlse +++ b/Common_ONE-PF.mlse @@ -179,7 +179,8 @@ function OnSpecialLink() -- 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;') + 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)