diff --git a/Common_ONE-PF.NUM.mlpe b/Common_ONE-PF.NUM.mlpe index f9af5fd..828e941 100644 --- a/Common_ONE-PF.NUM.mlpe +++ b/Common_ONE-PF.NUM.mlpe @@ -826,6 +826,12 @@ function OnRapid() -- gruppo della testa local nHSet = GetHeadSet( EMT.HEAD) + -- se ultimo movimento era LastClimb, su questo punto si attiva il piano + if EMT.PREVLASTCLIMB or ( bStdMachRapid and EMT.MCHFIRST) then + EMT.PREVLASTCLIMB = nil + EMT.LAST_APPROACH_RAPID = true + end + -- se primo movimento della lavorazione, gestione speciale if EMT.MCHFIRST then -- se carico trave @@ -970,7 +976,6 @@ function OnRapid() end end - EMT.MCHFIRST = false -- movimento standard CLIMB elseif EMT.FLAG == 2 then MyAdjustLinearAxes() @@ -997,7 +1002,7 @@ function OnRapid() -- 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}) + 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}) end EmitMoveStartHead( 2) EmitMoveWaitHead( 2) @@ -1015,7 +1020,17 @@ function OnRapid() end -- se ultimo, oppure unico, movimento in discesa sul pezzo, attivo piano generico. Se già attivo siginifica che è seconda lavorazione compatibile - if not EMT.PLANEACTIVE and ( bLastClimb or bUniqueClimb or bStdClimb) then + if not EMT.PLANEACTIVE and ( EMT.LAST_APPROACH_RAPID or bLastClimb or bUniqueClimb) then + -- si scrive ultimo punto prima di attivare il piano solo in caso sia un rapido calcolato da CAM5, altrimenti siamo già sul punto + if not ( bLastClimb or bUniqueClimb) and not EMT.MCHFIRST 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)}) + end + + EMT.LAST_APPROACH_RAPID = nil + bStdMachRapid = false EMT.ZMAX = false -- movimenti testa -- scrittura comando start movimenti testa @@ -1023,7 +1038,7 @@ function OnRapid() -- 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}) + 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}) end EmitMoveStartHead( 2) EmitMoveWaitHead( 2) @@ -1208,6 +1223,15 @@ function OnRapid() EMT.TPOS = EMT.L1o EmtUpdatePrev() + EMT.MCHFIRST = false + -- se si è attivato il piano, disattivo che è stato climb ultimo movimento + if EMT.PLANEACTIVE then + EMT.PREVLASTCLIMB = nil + -- se è ultimo movimento di climb, si salva per scrivere il piano in movimento successivo + elseif bStdClimb then + EMT.PREVLASTCLIMB = true + end + -- si salva posizione assi rotanti EMT.R1prec = EMT.R1 EMT.R2prec = EMT.R2 @@ -1258,7 +1282,7 @@ function OnLinear() MyAdjustLinearAxes() EmtAdjustRotaryAxes() - -- se lavorazione in doppio e fondo foro, inverto movimento punta doppia + -- 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 EmtOutput( "G157 EE-1") EMT.DBLHEADPARA = true 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..2516116 100644 --- a/Common_ONE-PF.mlse +++ b/Common_ONE-PF.mlse @@ -175,6 +175,16 @@ 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, 'UniqueClimb=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 +240,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 +425,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 +3169,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/Essetre-ONE.mlde b/Essetre-ONE.mlde index 4ddb758..c46c9c1 100644 --- a/Essetre-ONE.mlde +++ b/Essetre-ONE.mlde @@ -32,7 +32,7 @@ require( 'EmtGenerator') EgtEnableDebug( false) -PP_VER = '3.1f1_CR1' +PP_VER = '3.1f1_CR2' PP_NVER = '3.1.6.1' MIN_MACH_VER = '2.5k1' MACH_NAME = EgtGetCurrMachineName()