From 948df5b05690e43e1e23b6ec8330b01c13e9ee86 Mon Sep 17 00:00:00 2001 From: "daniele.nicoli" Date: Thu, 26 Mar 2026 15:35:54 +0100 Subject: [PATCH 1/3] Aggiunta funzione calcolo Home C per ChainSaw da valore A. Funziona con Common post 26/03/2026. Ticket#2866 --- Essetre-FAST.mlde | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Essetre-FAST.mlde b/Essetre-FAST.mlde index 7de5358..8366c66 100644 --- a/Essetre-FAST.mlde +++ b/Essetre-FAST.mlde @@ -70,6 +70,8 @@ SawOffs = -242.68 SawBOffs = 0 SawCOffs = 0 ChSawLen = 90.0 +ParkCSawC = -90 -- Parcheggio sega a catena A90 +ParkCSaw0C = 0 -- Parcheggio sega a catena A0 AngTr1Offs = 170 AngTr1Len = 150 AngTrBHOffs = 154.5 @@ -725,6 +727,18 @@ function OnSetHead() end end +--------------------------------------------------------------------- +-- Funzione che calcola l'angolo Home di C per la sega a catena dal valore dell'asse virtuale +function GetChainSawCHomeFromVirtualAxis( dPosA) + -- se A=0 -> T111 -> HomeC = 0 + if abs( dPosA) < 0.1 then + return EgtIf( BD.RIGHT_LOAD, 180, ParkCSaw0C) + -- altrimenti A=90 -> T114 -> HomeC = -90 + else + return EgtIf( BD.RIGHT_LOAD, 90, ParkCSawC) + end +end + --------------------------------------------------------------------- -- Funzione per impostare spia stato morsa carrello Y function SetPYLight( bClosed) From f4f94827d5dd5a89fec36eb1a6cdd9c35c079b9b Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Fri, 27 Mar 2026 14:43:32 +0100 Subject: [PATCH 2/3] Modifiche a funzione riposizionemanto carrelli --- Common_FAST.mlse | 72 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 54 insertions(+), 18 deletions(-) diff --git a/Common_FAST.mlse b/Common_FAST.mlse index 83ab267..49c1640 100644 --- a/Common_FAST.mlse +++ b/Common_FAST.mlse @@ -1536,9 +1536,12 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF dTPosF = MaxV - dVDeltaF end + -- se il pinzaggio deve essere invertito forzo entrata nei riposizionamenti + -- altrimenti posizioni iniziali e finali sono coincidenti dato che la pinza non in presa viene posizionata alla distanza minima a quella in presa + local bInvertClamping = not EMC.PILGRIMSTEP and EMC.YDELTA ~= EMC.YDELTANEXT and EMC.VDELTA ~= EMC.VDELTANEXT -- verifico che le morse non sono in posizione - if abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL or abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL or - EMC.YDELTA ~= EMC.YDELTANEXT or EMC.VDELTA ~= EMC.VDELTANEXT then + if ( abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL or abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL or bInvertClamping) and + ( EMC.YDELTA ~= EMC.YDELTANEXT or EMC.VDELTA ~= EMC.VDELTANEXT) then if #vCmd == 0 then table.insert( vCmd, { 0, 'Clamp repositioning'}) -- risalita testa a Zmax @@ -1610,6 +1613,18 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF -- se spostamento verso il carico elseif ( dVPosI + ( dVDeltaF - dVDeltaI)) > MaxV then dBeamMove = dVPosI + ( dVDeltaF - dVDeltaI) - MaxV + -- se è FASTCLAMPING attivo, si suddivide il movimento + elseif BD.FASTCLAMPING then + -- se la trave si sposta dal carico verso lo scarico + if dTPosI - dTPosF > 0 then + dBeamMove = min( -( dTPosF - dTPosI), -( MyMinY - dYPosI), -( dVDeltaI - dVDeltaF)) + else + dBeamMove = max( -( dTPosF - dTPosI), -( MyMinY - dYPosI)) + end + dBeamMove = dBeamMove / 2 + -- altrimenti la trave resta ferma e la pinza 1 va in presa (si limita lo scivolamento del pezzo) + else + ; end -- se serve un grande spostamento e si sta pinzando poco. Y trascinatore pinza poco e V si sposta per prima per recuperare @@ -1684,6 +1699,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF -- movimento terminato dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF + EMC.YDELTA = EMC.YDELTANEXT + EMC.VDELTA = EMC.VDELTANEXT -- SECONDO CASO -> SCAMBIO DIRETTO : Y IN POSIZIONE FINALE -- Y può andare in posizione direttamente se : @@ -1720,6 +1737,18 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF -- se spostamento verso il carico elseif ( dYPosI + ( dYDeltaF - dYDeltaI)) > MaxY then dBeamMove = -( dYPosI + ( dYDeltaF - dYDeltaI) - MaxY) + -- se è FASTCLAMPING attivo, si suddivide il movimento + elseif BD.FASTCLAMPING then + -- se la trave si sposta dal carico verso lo scarico + if dTPosI - dTPosF > 0 then + dBeamMove = max( ( dTPosF - dTPosI), ( MinV - dVPosI), ( dYDeltaI - dYDeltaF)) + else + dBeamMove = min( ( dTPosF - dTPosI), ( dVPosI - MaxV)) + end + dBeamMove = dBeamMove / 2 + -- altrimenti la trave resta ferma e la pinza 1 va in presa (si limita lo scivolamento del pezzo) + else + ; end -- se serve un grande spostamento e si sta pinzando poco. V trascinatore pinza poco e Y si sposta per prima per recuperare @@ -1793,6 +1822,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF end -- movimento terminato dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF + EMC.YDELTA = EMC.YDELTANEXT + EMC.VDELTA = EMC.VDELTANEXT -- TERZO CASO -> PASSO DEL PELLEGRINO -- non è possibile fare scambio diretto. @@ -1841,6 +1872,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF dDeltaBeam = dTPosI - dTPosF -- a questo punto entrambe le pinze sono in presa sul pezzo. + -- trave si muove dal carico allo scarico -- Il trascinatore si decide in base alla direzione di movimento trave -- trascino con morsa allo scarico. Obiettivo mandare Y in posizione per prima if dDeltaBeam > 0 then @@ -1883,18 +1915,21 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF -- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos) -- recupero una corsa massima e l'altra solo di quello che serve - elseif abs( dYDeltaI - dYDeltaF) > dMaxMovePilgrimStepSingleClampY then + elseif abs( dYDeltaI - dYDeltaF) > dMaxMovePilgrimStepSingleClampV then + -- suddivido il movimento su entrambe le morse + local dTotMove = ( dYDeltaF - dYDeltaI) / 2 -- morsa Y arriva in posizione finale - dYDeltaI = dYDeltaF - dVPosA = MinV - dTPosA = dTPosI - dVPosI + MinV + + dVPosA = MaxV - dTotMove + dTPosA = dTPosI - dVPosI + MaxV - dTotMove dYPosA = dYDeltaF + dTPosA table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA}) table.insert( vCmd, { 11, CalcCharStatus( 'Y', dYDeltaF)}) table.insert( vCmd, { 12, 0}) + dYDeltaI = dYDeltaF dTPosI = dTPosA EMC.YDELTA = dYDeltaF - EMC.VDELTA = dVDeltaI + EMC.VDELTA = nil -- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos) -- non serve recuperare al massimo della corsa, suddivido movimento in due @@ -1928,9 +1963,9 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF end table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA}) dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF + EMC.YDELTA = EMC.YDELTANEXT + EMC.VDELTA = EMC.VDELTANEXT - -- aggiorno nuova posizione della morsa allo scarico dopo riposizionamento - dVDeltaI = dVDeltaF end -- imposto i nuovi parametri di aggancio @@ -1989,17 +2024,19 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF -- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos) -- recupero una corsa massima e l'altra solo di quello che serve - elseif abs( dVDeltaI - dVDeltaF) > dMaxMovePilgrimStepSingleClampV then - -- aggiorno nuova posizione della morsa al carico dopo riposizionamento - dVDeltaI = dVDeltaF - dYPosA = MaxY - dTPosA = dTPosI + ( MaxY - dYPosI) + elseif abs( dVDeltaI - dVDeltaF) > dMaxMovePilgrimStepSingleClampY then + -- suddivido il movimento su entrambe le morse + local dTotMove = ( dVDeltaI - dVDeltaF) / 2 + -- morsa V arriva in posizione finale + dYPosA = MaxY + dTotMove + dTPosA = dTPosI + ( MaxY - dYPosI) + dTotMove dVPosA = dVDeltaF + dTPosA table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA}) table.insert( vCmd, { 12, CalcCharStatus( 'V', dVDeltaF)}) table.insert( vCmd, { 11, 0}) + dVDeltaI = dVDeltaF dTPosI = dTPosA - EMC.YDELTA = dYDeltaI + EMC.YDELTA = nil EMC.VDELTA = dVDeltaF -- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos) @@ -2034,9 +2071,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF end table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA}) dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF - - -- aggiorno nuova posizione della morsa al carico dopo riposizionamento - dYDeltaI = dYDeltaF + EMC.YDELTA = EMC.YDELTANEXT + EMC.VDELTA = EMC.VDELTANEXT end -- imposto i nuovi parametri di aggancio From 89e2c495d1b2e196a4389252bc24fd9d36e5ebb9 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Fri, 27 Mar 2026 15:24:34 +0100 Subject: [PATCH 3/3] Allineamento con common ver. 3.1c1 Cambio versione per rilascio a cliente --- Common_FAST.NUM.mlpe | 4 ++++ Common_FAST.NUM_PLUS.mlpe | 4 ++++ Common_FAST.TPA.mlpe | 6 ++++++ Common_FAST.mlpe | 14 ++++++++++---- Common_FAST.mlse | 8 +++----- Essetre-FAST.mlde | 4 ++-- UpdateLog.txt | 5 +++++ Version.lua | 2 +- 8 files changed, 35 insertions(+), 12 deletions(-) diff --git a/Common_FAST.NUM.mlpe b/Common_FAST.NUM.mlpe index 527278f..d060715 100644 --- a/Common_FAST.NUM.mlpe +++ b/Common_FAST.NUM.mlpe @@ -674,6 +674,10 @@ function OnRapid() 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) + elseif EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then + 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) 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 diff --git a/Common_FAST.NUM_PLUS.mlpe b/Common_FAST.NUM_PLUS.mlpe index ec08765..ee07262 100644 --- a/Common_FAST.NUM_PLUS.mlpe +++ b/Common_FAST.NUM_PLUS.mlpe @@ -746,6 +746,10 @@ function OnRapid() 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) + elseif EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then + 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) 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 diff --git a/Common_FAST.TPA.mlpe b/Common_FAST.TPA.mlpe index a6dfd81..2d59882 100644 --- a/Common_FAST.TPA.mlpe +++ b/Common_FAST.TPA.mlpe @@ -704,6 +704,12 @@ function OnRapid() ' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) .. ' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4') EmtOutput( sOutPreMove) + elseif EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then + 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) 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) .. diff --git a/Common_FAST.mlpe b/Common_FAST.mlpe index ba44c79..019e57c 100644 --- a/Common_FAST.mlpe +++ b/Common_FAST.mlpe @@ -553,8 +553,7 @@ function OnSimulToolSelect( dPosA) end EgtSetCurrMachining( NextMchId) -- recupero il valore dell'asse virtuale bloccato A - local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) - dPosA = tonumber( sVal:sub( 3)) + dPosA = GetCurrChainSawingVirtualAxis() else -- imposto visualizzazione EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD) @@ -721,8 +720,7 @@ function OnSimulMachiningStart() -- se lavorazione attuale e precedente con sega a catena con angolo A diverso, devo scaricare e ricaricare if EMT.HEAD == 'H3' and EMT.HEAD == EMT.PREVHEAD then local dPrevA = EgtGetAxisPos( 'A') - local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) - local dPosA = tonumber( sVal:sub( 3)) + local dPosA = GetCurrChainSawingVirtualAxis() if abs( dPosA - dPrevA) > 1 then OnSimulToolDeselect() EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.ON) @@ -1911,6 +1909,14 @@ function GetParkT() end end +--------------------------------------------------------------------- +function GetCurrChainSawingVirtualAxis() + -- recupero il valore dell'asse virtuale bloccato A + local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) or 'A=0' + local dPosA = tonumber( sVal:sub( 3)) or 0 + return dPosA +end + --------------------------------------------------------------------- function CalcDinamicaPinze_TPA( dH, dS, dL) local MinTempoAcc = EMT.MINACC -- [ms] ~300 diff --git a/Common_FAST.mlse b/Common_FAST.mlse index 49c1640..07b8048 100644 --- a/Common_FAST.mlse +++ b/Common_FAST.mlse @@ -1743,7 +1743,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF if dTPosI - dTPosF > 0 then dBeamMove = max( ( dTPosF - dTPosI), ( MinV - dVPosI), ( dYDeltaI - dYDeltaF)) else - dBeamMove = min( ( dTPosF - dTPosI), ( dVPosI - MaxV)) + dBeamMove = min( ( dTPosF - dTPosI), ( MaxV - dVPosI)) end dBeamMove = dBeamMove / 2 -- altrimenti la trave resta ferma e la pinza 1 va in presa (si limita lo scivolamento del pezzo) @@ -1919,7 +1919,6 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF -- suddivido il movimento su entrambe le morse local dTotMove = ( dYDeltaF - dYDeltaI) / 2 -- morsa Y arriva in posizione finale - dVPosA = MaxV - dTotMove dTPosA = dTPosI - dVPosI + MaxV - dTotMove dYPosA = dYDeltaF + dTPosA @@ -1965,7 +1964,6 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF EMC.YDELTA = EMC.YDELTANEXT EMC.VDELTA = EMC.VDELTANEXT - end -- imposto i nuovi parametri di aggancio @@ -2028,8 +2026,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF -- suddivido il movimento su entrambe le morse local dTotMove = ( dVDeltaI - dVDeltaF) / 2 -- morsa V arriva in posizione finale - dYPosA = MaxY + dTotMove - dTPosA = dTPosI + ( MaxY - dYPosI) + dTotMove + dYPosA = MinY + dTotMove + dTPosA = dTPosI + ( MinY - dYPosI) + dTotMove dVPosA = dVDeltaF + dTPosA table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA}) table.insert( vCmd, { 12, CalcCharStatus( 'V', dVDeltaF)}) diff --git a/Essetre-FAST.mlde b/Essetre-FAST.mlde index 8366c66..5e988cd 100644 --- a/Essetre-FAST.mlde +++ b/Essetre-FAST.mlde @@ -24,8 +24,8 @@ require( 'EmtGenerator') EgtEnableDebug( false) -PP_VER = '3.1c2' -PP_NVER = '3.1.3.2' +PP_VER = '3.1c3' +PP_NVER = '3.1.3.3' MIN_MACH_VER = '2.7j1' MACH_NAME = EgtGetCurrMachineName() diff --git a/UpdateLog.txt b/UpdateLog.txt index 80bca24..8032595 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,5 +1,10 @@ ==== Common_FAST Update Log ==== +Versione 3.1c1 (27/03/2026) +- (SIM-GEN) FASTCLAMPING = true : si suddivide il movimento metà tirando e metà spingendo con altra pinza. Così si aumenta la velocità. +- FASTCLAMPING = false : una pinza resta ferma e si fa il movimento tutto con una pinza. Così si limita lo scivolamento del pezzo. +- (GEN) In caso di motosega prelevata, si ruota in home. Ticket#2866 + Versione 3.1a2 (26/01/2026) - (GEN) Nella G101 il parametro EE era sempre a 4 perchè la variabile veniva settata dopo. Ticket#2796 diff --git a/Version.lua b/Version.lua index be28bc0..9f2c6b3 100644 --- a/Version.lua +++ b/Version.lua @@ -3,7 +3,7 @@ local InfoCommon_STD_PP = { NAME = 'Common_FAST', -- nome script PP standard - VERSION = '3.1a2', -- versione script + VERSION = '3.1c1', -- versione script MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel }