From 2221224e9afa65f53e5928f10768e5656d0dbc59 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Fri, 20 Mar 2026 10:48:11 +0100 Subject: [PATCH] Miglioramento del posizionamento pinze con FASTCLAMPING attivo --- Common_FAST.mlse | 72 +++++++++++++++++++++++++++++++++++------------- UpdateLog.txt | 4 +++ Version.lua | 2 +- 3 files changed, 58 insertions(+), 20 deletions(-) diff --git a/Common_FAST.mlse b/Common_FAST.mlse index 83ab267..07b8048 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), ( MaxV - dVPosI)) + 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,20 @@ 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 +1962,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 allo scarico dopo riposizionamento - dVDeltaI = dVDeltaF + EMC.YDELTA = EMC.YDELTANEXT + EMC.VDELTA = EMC.VDELTANEXT end -- imposto i nuovi parametri di aggancio @@ -1989,17 +2022,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 = 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)}) 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 +2069,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 diff --git a/UpdateLog.txt b/UpdateLog.txt index 80bca24..55352fe 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,5 +1,9 @@ ==== Common_FAST Update Log ==== +Versione 3.1-- (--/--/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. + 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..97828fb 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.1--', -- versione script MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel }