diff --git a/Common_FAST.mlse b/Common_FAST.mlse index 9ffde1d..4458830 100644 --- a/Common_FAST.mlse +++ b/Common_FAST.mlse @@ -1097,16 +1097,24 @@ function SpecCalcLoad( dPosT, dDistFront, dDistBack) local dNewVDelta = nil local dNewY = dPosT + TurnerOffs + dNewYDelta local vCmd = {} - EgtOutLog( ' *[L]', 1) - -- [L-1] - if dNewY - MaxY > 0 then - dNewYDelta = min( EMC.LB - MinJoin + AGG_LOAD, MaxY - dPosT - TurnerOffs) - EgtOutLog( ' *[L1]', 1) - end --[L-2] - if EMC.LB - dNewYDelta < MinJoin then - dNewYDelta = min( EMC.LB - MinJoin + AGG_LOAD, MaxY - dPosT - TurnerOffs) - EgtOutLog( ' *[L2]', 1) + + -- se flag attivo, vado a pinzare al massimo della corsa + if BD.FASTCLAMPING then + EgtOutLog( ' *[L]', 1) + -- [L-1] + if dNewY - MaxY > 0 then + dNewYDelta = min( EMC.LB - MinJoin + AGG_LOAD, MaxY - dPosT - TurnerOffs) + EgtOutLog( ' *[L1]', 1) + end --[L-2] + if EMC.LB - dNewYDelta < MinJoin then + dNewYDelta = min( EMC.LB - MinJoin + AGG_LOAD, MaxY - dPosT - TurnerOffs) + EgtOutLog( ' *[L2]', 1) + end + else + -- si pinza sempre a 1000mm massimo + dNewYDelta = min( dNewYDelta, 1000) end + -- Commento table.insert( vCmd, { 0, 'Loading'}) -- risalita testa a Zmax @@ -1511,9 +1519,23 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF local bZmaxOk = EnsureZmax( bZmaxOk, vCmd) end + -- reset contatore primo riposizionamento con compensazione lettura laser + EMC.CNT = nil + -- ricavo posizione delle morse nelle corse local dYPosI = max( MyMinY, dTPosI + dYDeltaI) local dVPosI = min( MaxV, dTPosI + dVDeltaI) + -- calcolo eventuale massimo riposizionamento con passo del pellegrino. Al primo step si calcolano posizioni attuali delle morse + local dMaxMovePilgrimStepDoubleClamp, dMaxMovePilgrimStepSingleClampY, dMaxMovePilgrimStepSingleClampV + if not EMC.PILGRIMSTEP then + dMaxMovePilgrimStepDoubleClamp = MaxY - dYPosI - MinV + dVPosI + dMaxMovePilgrimStepSingleClampY = MaxY - dYPosI + dMaxMovePilgrimStepSingleClampV = - MinV + dVPosI + else + dMaxMovePilgrimStepDoubleClamp = MaxY - MinY - MinV + MaxV + dMaxMovePilgrimStepSingleClampY = MaxY - MinY + dMaxMovePilgrimStepSingleClampV = - MinV + MaxV + end -- calcolo delta spostamento trave local dDeltaBeam = dTPosI - dTPosF -- se positivo, la trave si sposta dal carico allo scarico @@ -1701,6 +1723,11 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF dYDeltaI = dVDeltaI - MaxV + MyMinY EMC.YDELTA = dYDeltaI dTPosI = dTPosA + dYPosI = dYPosA + dVPosI = dVPosA + dMaxMovePilgrimStepDoubleClamp = MaxY - MinY - MinV + MaxV + dMaxMovePilgrimStepSingleClampY = MaxY - MinY + dMaxMovePilgrimStepSingleClampV = - MinV + MaxV end if not EMC.VDELTA then table.insert( vCmd, { 0, 'Compact V'}) @@ -1713,6 +1740,11 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF dVDeltaI = dYDeltaI + MaxV - MyMinY EMC.VDELTA = dVDeltaI dTPosI = dTPosA + dYPosI = dYPosA + dVPosI = dVPosA + dMaxMovePilgrimStepDoubleClamp = MaxY - MinY - MinV + MaxV + dMaxMovePilgrimStepSingleClampY = MaxY - MinY + dMaxMovePilgrimStepSingleClampV = - MinV + MaxV end -- aggiorno delta mancante @@ -1723,12 +1755,12 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF if dDeltaBeam > 0 then -- apro morsa al carico table.insert( vCmd, { 11, 0}) - -- devo recuperare più del doppio delle corse - if abs( dYDeltaI - dYDeltaF) > ( MaxY - MyMinY + MaxV - MinV) then + -- devo recuperare più delle corse disponiobili di entrambi i carrelli + if abs( dYDeltaI - dYDeltaF) > dMaxMovePilgrimStepDoubleClamp then -- calcolo nuova posizione della morsa al carico dopo riposizionamento dYPosA = MaxY dVPosA = MinV - dTPosA = dTPosI - MaxV + MinV + dTPosA = dTPosI - dVPosI + MinV table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA}) table.insert( vCmd, { 11, 1}) table.insert( vCmd, { 12, 0}) @@ -1740,7 +1772,7 @@ 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) > MaxY - MyMinY then + elseif abs( dYDeltaI - dYDeltaF) > dMaxMovePilgrimStepSingleClampY then -- aggiorno nuova posizione della morsa al carico dopo riposizionamento dYDeltaI = dYDeltaF dVPosA = MinV @@ -1809,11 +1841,12 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF -- apro morsa allo scarico table.insert( vCmd, { 12, 0}) -- devo recuperare più del doppio delle corse - if abs( dVDeltaI - dVDeltaF) > ( MaxY - MyMinY + MaxV - MinV) then + local dMaxMoveFirst + if abs( dVDeltaI - dVDeltaF) > dMaxMovePilgrimStepDoubleClamp then -- calcolo nuova posizione della morsa al carico dopo riposizionamento dYPosA = MaxY dVPosA = MinV - dTPosA = dTPosI + ( MaxY - MyMinY) + dTPosA = dTPosI + ( MaxY - dYPosI) table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA}) table.insert( vCmd, { 12, 1}) table.insert( vCmd, { 11, 0}) @@ -1825,7 +1858,7 @@ 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) > MaxV - MinV then + elseif abs( dVDeltaI - dVDeltaF) > dMaxMovePilgrimStepSingleClampV then -- aggiorno nuova posizione della morsa al carico dopo riposizionamento local dTotMove = MaxY - dTPosI - dYDeltaI dVDeltaI = dVDeltaF @@ -1902,8 +1935,6 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF end end end - -- reset contatore primo riposizionamento con compensazione lettura laser - EMC.CNT = nil end end