From e60f1913cb387bf59bc3c103ffb889c39fcef34b Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Wed, 17 Jun 2026 08:53:14 +0200 Subject: [PATCH] - Gestione lavorazioni in doppio - Preselezione utensile gestibile da parametri TS3 - Gestione Drilling e Pocketing NT --- Common_ONE-PF.NUM.mlpe | 223 ++++++++++++++++++++++------------------- Common_ONE-PF.mlpe | 15 ++- Common_ONE-PF.mlse | 17 +++- UpdateLog.txt | 3 + 4 files changed, 149 insertions(+), 109 deletions(-) diff --git a/Common_ONE-PF.NUM.mlpe b/Common_ONE-PF.NUM.mlpe index d337448..e34c05d 100644 --- a/Common_ONE-PF.NUM.mlpe +++ b/Common_ONE-PF.NUM.mlpe @@ -326,7 +326,6 @@ function OnDispositionEnd() if IsRestPhase( EMT.PHASE + 1) then EmitMoveWaitChars( 2) else - -- EmitMoveWaitChars( 2, TEST_USE) -- posticipo attesa fine scarico alla lavorazione successiva EMT.LASTOPEISUNLOAD = true end @@ -423,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 @@ -697,9 +704,7 @@ end --------------------------------------------------------------------- function OnPathEnd() - if not EMT.ZMAX then - -- EmitResetMachining( true) - end + -- salvo dati precedenti EMT.L2pp = EMT.L2o @@ -865,9 +870,10 @@ function OnRapid() EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3)) else -- controllo se ci sono spostamenti dei carrelli programmati - local bChangeCarriageClamping = CheckChangeCarriageClamping() + local bChangeCarriageClamping = GetMovesInAuxCmd( EMT.AUXCMD) + local bRotAxChanged = ( abs( EMT.R1prec - EMT.R1) > GEO.EPS_SMALL or abs( EMT.R2prec - EMT.R2) > GEO.EPS_SMALL) -- se non ci sono riposizionamenti dei carrelli, se stesso utensile, e c'è ancora piano attivo dalla lavorazione precedente, allora questo è un climb - if not bChangeCarriageClamping and EMT.TOOL == EMT.PREVTOOL and EMT.PLANEACTIVE and ( abs( EMT.R1prec - EMT.R1) < GEO.EPS_SMALL and abs( EMT.R2prec - EMT.R2) < GEO.EPS_SMALL) then + if EMT.PLANEACTIVE and EMT.TOOL == EMT.PREVTOOL and not bChangeCarriageClamping and not bRotAxChanged then -- dichiaro finita lavorazione precedente local sOut = 'G157 EA1' EmtOutput( sOut) @@ -998,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 @@ -1024,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) @@ -1260,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 @@ -1380,28 +1392,6 @@ function CalcCharStatusN( sCmd) end end ---------------------------------------------------------------------- --- controlla se nella tabella AUX sono presenti dei movimenti dei carrelli -function CheckChangeCarriageClamping() - local ChangeCarriagesParam = { - '1', -- movimento singolo carro - '2', -- movimento carro e trave - '3', -- movimento 2 carri e trave - '4', -- risalita a Z max - '11', -- comando pinza 1 - '12' -- comando pinza 2 - } - for i=1, #EMT.AUXCMD do - local Cmd = EgtSplitString( EMT.AUXCMD[i]) - for j=1, #ChangeCarriagesParam do - if Cmd[1] == ChangeCarriagesParam[j] then - return true - end - end - end - return false -end - --------------------------------------------------------------------- function PrepareLoad( sCmd, nInd, bStart) local Cmd = EgtSplitString( sCmd) @@ -2515,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.mlpe b/Common_ONE-PF.mlpe index 076c36f..3132730 100644 --- a/Common_ONE-PF.mlpe +++ b/Common_ONE-PF.mlpe @@ -843,10 +843,15 @@ end function OnSimulMoveStart() -- tipo di movimento + local bFirstClimb = EgtGetInfo( EMT.MOVEID, 'FirstClimb', 'b') local bLastClimb = EgtGetInfo( EMT.MOVEID, 'LastClimb', 'b') + local bFirstRise = EgtGetInfo( EMT.MOVEID, 'FirstRise', 'b') + local bLastRise = EgtGetInfo( EMT.MOVEID, 'LastRise', 'b') local bUniqueClimb = EgtGetInfo( EMT.MOVEID, 'UniqueClimb', 'b') + local bUniqueRise = EgtGetInfo( EMT.MOVEID, 'UniqueRise', 'b') -- se il link non arriva dalla OnSpecial, non ha nessuna nota 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)) -- se primo rapido della lavorazione è un movimento standard, allora questo è l'ultimo climb @@ -974,11 +979,11 @@ function OnSimulMoveStart() -- se lavorazione in doppio if EMT.DOU_TYPE then - if EgtGetInfo( EMT.MOVEID, 'FirstClimb', 'b') or EgtGetInfo( EMT.MOVEID, 'UniqueClimb', 'b') then + if bFirstClimb or bUniqueClimb or bStdClimb then EMT.IS_CLIMB = true EMT.IS_RISE = false EMT.INDEX_APPROACH_MOVE = 0 - elseif EgtGetInfo( EMT.MOVEID, 'FirstRise', 'b') or EgtGetInfo( EMT.MOVEID, 'UniqueRise', 'b') then + elseif bFirstRise or bUniqueRise or bStdRise then EMT.IS_CLIMB = false EMT.IS_RISE = true EMT.INDEX_APPROACH_MOVE = 0 @@ -1002,7 +1007,7 @@ function OnSimulMoveStart() if EMT.DOU_TYPE == 2 then -- controllo minima distanza tra utensili di X1 e X2 local dDeltaX1X2 = EMT.L2 - EMT.A5 - Head2Y - local dDistToolX1X2 = -dDeltaX1X2 - MillOffs - EMT.TTOTLEN - Mill2Offs - EMT.DOU_TTOTLEN + local dDistToolX1X2 = dDeltaX1X2 - MillOffs - EMT.TTOTLEN - Mill2Offs - EMT.DOU_TTOTLEN if dDistToolX1X2 < MinDistToolX1X2 and EMT.MCHNAME ~= EMT.DOUBLECOLLMACH then EMT.DOUBLECOLLMACH = EMT.MCHNAME local sErr = 'X1 X2 tools in collision (distance=' .. EgtNumToString( dDistToolX1X2, 1) .. ')' @@ -1068,7 +1073,7 @@ function OnSimulMoveStart() if EMT.DOU_TYPE then -- se testa 2 ha più movimenti della testa 1, eseguo tutti i movimenti della testa due che mancano - if EgtGetInfo( EMT.MOVEID, 'LastClimb', 'b') or EgtGetInfo( EMT.MOVEID, 'UniqueClimb', 'b') then + if bLastClimb or bUniqueClimb then if #EMT.APPROACH.DBLCLIMBS > #EMT.APPROACH.CLIMBS then while EMT.INDEX_APPROACH_MOVE < #EMT.APPROACH.DBLCLIMBS do EMT.INDEX_APPROACH_MOVE = EMT.INDEX_APPROACH_MOVE + 1 @@ -1079,7 +1084,7 @@ function OnSimulMoveStart() 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 - elseif EgtGetInfo( EMT.MOVEID, 'LastRise', 'b') or EgtGetInfo( EMT.MOVEID, 'UniqueRise', 'b') then + elseif bLastRise or bUniqueRise then if #EMT.APPROACH.DBLRISES > #EMT.APPROACH.RISES then while EMT.INDEX_APPROACH_MOVE < #EMT.APPROACH.DBLRISES do EMT.INDEX_APPROACH_MOVE = EMT.INDEX_APPROACH_MOVE + 1 diff --git a/Common_ONE-PF.mlse b/Common_ONE-PF.mlse index c1990a7..bde5838 100644 --- a/Common_ONE-PF.mlse +++ b/Common_ONE-PF.mlse @@ -175,6 +175,17 @@ function OnSpecialLink() EmtRemoveClimb( EMC.NEXTMCHID, EMC.NEXTMAIN) 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 + -- 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, '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) + EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, vFinalAxLink, 30, 3, 2, 'UniqueRise=1;') + end end end @@ -230,7 +241,7 @@ function OnSpecialLink() -- retrazione EmtRemoveRise( EMC.PREVMCHID, EMC.PREVMAIN) if abs( EMC.R2) > 91 then - EmtAddRise( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1p, EMC.L2p, ParkZ1, EMC.R1p, EgtClamp( EMC.R2, -90, 90)}, 30, 2, 2, EgtIf( bSplit, 'Split=1;', '')..'FirstRise=1;') + EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, ParkZ1, EMC.R1p, EgtClamp( EMC.R2p, -90, 90)}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'FirstRise=1;') EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, MaxZ1Blade, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'LastRise=1;') else EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, MaxZ1Blade, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'UniqueRise=1;') @@ -415,7 +426,7 @@ function OnSpecialLink() -- retrazione EmtRemoveRise( EMC.PREVMCHID, EMC.PREVMAIN) if abs( EMC.R2) > 91 then - EmtAddRise( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1p, EMC.L2p, ParkZ1, EMC.R1p, EgtClamp( EMC.R2, -90, 90)}, 30, 2, 2, EgtIf( bSplit, 'Split=1;', '')..'FirstRise=1;') + EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, ParkZ1, EMC.R1p, EgtClamp( EMC.R2p, -90, 90)}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'FirstRise=1;') EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, MaxZ1Blade, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'LastRise=1;') else EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, MaxZ1Blade, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'UniqueRise=1;') @@ -3159,7 +3170,7 @@ function SpecOutputCmds( vCmd, bEnd) local sInfo = '23,'..EgtNumToString( Cmd[2],3) EgtSetInfo( EMC.PATHID, sKey, sInfo) EMC.W2DELTA = Cmd[2] - -- riporta trave in zona carico dopo una fase start partita con un riposizionam,ento + -- riporta trave in zona carico dopo una fase start partita con un riposizionamento elseif Cmd[1] == 24 then local sInfo = '24,'..Cmd[2]..','..EgtNumToString( Cmd[3],3)..','..Cmd[4]..','..EgtNumToString( Cmd[5],3)..EgtIf( Cmd[6], ',*', '') EgtSetInfo( EMC.PATHID, sKey, sInfo) diff --git a/UpdateLog.txt b/UpdateLog.txt index 9936641..797665d 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -2,6 +2,9 @@ Versione 3.1-- (--/--/2026) - (ALL) Prima versione con gestione nuovi link (no tastatore) +- Gestione lavorazioni in doppio +- Preselezione utensile gestibile da parametri TS3 +- Gestione Drilling e Pocketing NT Versione 3.1f2 (05/06/2026) - (MLDE-GEN) Aggiunti parametri di limite asse X per decidere se fare preselezione su altra testa. Serve modifica MLDE