From 1f358ce1e1dc96812825bf32eba3ff9284387610 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Mon, 21 Jul 2025 13:09:49 +0200 Subject: [PATCH] Migliorata gestione movimenti speciali in caso di motosega --- Common_FAST.NUM.mlpe | 20 ++++++++++++-------- Common_FAST.NUM_PLUS.mlpe | 19 ++++++++++++------- Common_FAST.TPA.mlpe | 13 ++++++++----- Common_FAST.mlpe | 6 ++++-- 4 files changed, 36 insertions(+), 22 deletions(-) diff --git a/Common_FAST.NUM.mlpe b/Common_FAST.NUM.mlpe index f24d531..126d684 100644 --- a/Common_FAST.NUM.mlpe +++ b/Common_FAST.NUM.mlpe @@ -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,9 +627,11 @@ 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 ( abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then + 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 @@ -654,21 +657,22 @@ function OnRapid() 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 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 sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4') - local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) .. + 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) - local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) .. + 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) - local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) .. + 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') diff --git a/Common_FAST.NUM_PLUS.mlpe b/Common_FAST.NUM_PLUS.mlpe index 8f9d62d..a245c20 100644 --- a/Common_FAST.NUM_PLUS.mlpe +++ b/Common_FAST.NUM_PLUS.mlpe @@ -544,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 --------------------------------------------------------------------- @@ -675,9 +676,11 @@ 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 ( abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then + 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 @@ -726,20 +729,22 @@ 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 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) .. + 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) - local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) .. + 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) - local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) .. + 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') diff --git a/Common_FAST.TPA.mlpe b/Common_FAST.TPA.mlpe index 45ec899..c6aafe7 100644 --- a/Common_FAST.TPA.mlpe +++ b/Common_FAST.TPA.mlpe @@ -661,7 +661,7 @@ function OnRapid() local bGoToHome = false -- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio - if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and ( abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then + 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 @@ -687,16 +687,19 @@ function OnRapid() -- 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 sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) .. + 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) .. + 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) + 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) .. diff --git a/Common_FAST.mlpe b/Common_FAST.mlpe index 957048e..bb9357c 100644 --- a/Common_FAST.mlpe +++ b/Common_FAST.mlpe @@ -788,7 +788,7 @@ function OnSimulMoveStart() local bGoToHome = false -- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio - if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and ( abs( EMT.R2p - EMT.R2) > 25 or abs( EMT.R1p - EMT.R1) > 25) then + 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 @@ -798,11 +798,13 @@ function OnSimulMoveStart() -- 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 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 ( bZmax and EMT.TOTLEN > 200)) then + if EMT.HEAD == 'H3' and 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 ( EMT.HEAD == 'H3' or ( 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