Rivisitazione condizioni per scambio diretto
This commit is contained in:
+236
-150
@@ -1165,7 +1165,11 @@ function SpecCalcCarriages( dDistFront, dDistBack, bFixedDelta, bFixedPos)
|
||||
local dPosT = EMC.TPOS
|
||||
local dYDelta = EMC.YDELTA
|
||||
local dVDelta = EMC.VDELTA
|
||||
local dNewPosT = GetMachiningStartingPoint( EMC.PATHID)
|
||||
local dNewPosT
|
||||
-- se sono già settati, non calcolo posizione finale
|
||||
if not EMC.YDELTANEXT and not EMC.VDELTANEXT then
|
||||
dNewPosT = GetMachiningStartingPoint( EMC.PATHID)
|
||||
end
|
||||
local dNewYDelta = nil
|
||||
local dNewVDelta = nil
|
||||
|
||||
@@ -1198,6 +1202,10 @@ function SpecCalcCarriages( dDistFront, dDistBack, bFixedDelta, bFixedPos)
|
||||
|
||||
local vCmd = {}
|
||||
SpecAdjustCarriages( vCmd, dPosT, dYDelta, dVDelta, dNewPosT, dNewYDelta, dNewVDelta, bFixedDelta, bFixedPos)
|
||||
-- reset contatore
|
||||
EMC.CNT = nil
|
||||
|
||||
SpecOutputCNT()
|
||||
return vCmd
|
||||
|
||||
end
|
||||
@@ -1389,6 +1397,11 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
dVDeltaF = dYDeltaF - ( MinY - MaxV)
|
||||
end
|
||||
|
||||
-- se non c'è posizione finale, è lo scarico
|
||||
if not dTPosF then
|
||||
dTPosF = MaxV - dVDeltaF
|
||||
end
|
||||
|
||||
-- verifico che le morse non sono in posizione
|
||||
if abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL or abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL then
|
||||
if #vCmd == 0 then
|
||||
@@ -1396,98 +1409,83 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
-- risalita testa a Zmax
|
||||
local bZmaxOk = EnsureZmax( bZmaxOk, vCmd)
|
||||
end
|
||||
|
||||
-- ricavo posizione delle morse nelle corse
|
||||
local dYPosI = max( MinY, dTPosI + dYDeltaI)
|
||||
local dVPosI = min( MaxV, dTPosI + dVDeltaI)
|
||||
|
||||
-- calcolo delta spostamento trave
|
||||
local dDeltaBeam = dTPosI - dTPosF -- se positivo, la trave si sposta dal carico allo scarico
|
||||
|
||||
local dBeamMove = 0
|
||||
|
||||
-- scambio diretto
|
||||
if ( ( dYDeltaI - dVDeltaF) >= MinY - MaxV + DELTA_SIC and dDeltaBeam > 0) or ( ( dVDeltaI - dYDeltaF) >= MinY - MaxV + DELTA_SIC and dDeltaBeam < 0) then
|
||||
local bCloseY, bCloseV
|
||||
-- se sono entrambe in presa sul pezzo
|
||||
if EMC.YDELTA and EMC.VDELTA then
|
||||
-- se da scarico a carico
|
||||
if dVDeltaF - dVDeltaI > dYDeltaF - dYDeltaI then
|
||||
table.insert( vCmd, { 0, 'Direct - V to position first'})
|
||||
table.insert( vCmd, { 12, 0})
|
||||
-- suddivido il movimento su entrambe le morse
|
||||
local nTotMove = ( dVDeltaF - dVDeltaI) ;
|
||||
dTPosA = dTPosI - nTotMove
|
||||
dVPosA = dTPosA + dVDeltaF
|
||||
dYPosA = dTPosA + dYDeltaI
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
table.insert( vCmd, { 12, 1})
|
||||
-- scambio diretto. V può andare in posizione direttamente.
|
||||
if ( dYDeltaI - dVDeltaF) >= MinY - MaxV + DELTA_SIC and ( dVDeltaF - dVDeltaI > MinV - dVPosI + dYPosI - MaxY and dVDeltaF - dVDeltaI < dVPosI - MinV + dYPosI - MinY) then
|
||||
|
||||
-- se l'altra morsa non era in presa, vado a pinzare il pezzo
|
||||
if not EMC.YDELTA then
|
||||
dYPosA = MinY
|
||||
dTPosA = MinY + dYDeltaI
|
||||
dVPosA = dTPosA + dVDeltaI
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
dTPosI = dTPosA
|
||||
dVPosI = dVPosA
|
||||
table.insert( vCmd, { 11, 1})
|
||||
end
|
||||
-- se spostando morsa diretto esco dalle corse, calcolo di quanto devo muovere la trave (cioè l'altra morsa) come minimo
|
||||
-- se non era ingagiata, vado al suo minimo
|
||||
if not EMC.VDELTA then
|
||||
dBeamMove = -( MaxV - dVDeltaF - dTPosI)
|
||||
-- se spostamento verso lo scarico
|
||||
elseif ( dVPosI + ( dVDeltaF - dVDeltaI)) < MinV then
|
||||
dBeamMove = dVPosI + ( dVDeltaF - dVDeltaI) - MinV
|
||||
-- se spostamento verso il carico
|
||||
elseif ( dVPosI + ( dVDeltaF - dVDeltaI)) > MaxV then
|
||||
dBeamMove = dVPosI + ( dVDeltaF - dVDeltaI) - MaxV
|
||||
end
|
||||
|
||||
table.insert( vCmd, { 12, 0})
|
||||
|
||||
dTPosA = dTPosI - dBeamMove
|
||||
dYPosA = dTPosA + dYDeltaI
|
||||
dVPosA = dTPosA + dVDeltaF
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
|
||||
-- la morsa allo scarico è adesso in posizione
|
||||
dVDeltaI = dVDeltaF
|
||||
dTPosI = dTPosA
|
||||
|
||||
-- blocco la morsa
|
||||
table.insert( vCmd, { 12, 1})
|
||||
|
||||
-- imposto i nuovi parametri di aggancio
|
||||
if EMC.YDELTANEXT and EMC.VDELTANEXT then
|
||||
-- porto assi alla loro posizione finale
|
||||
if abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL then
|
||||
table.insert( vCmd, { 11, 0})
|
||||
bCloseY = true
|
||||
else
|
||||
table.insert( vCmd, { 0, 'Direct - Y to position first'})
|
||||
table.insert( vCmd, { 11, 0})
|
||||
-- suddivido il movimento su entrambe le morse
|
||||
local nTotMove = ( dYDeltaF - dYDeltaI) ;
|
||||
dTPosA = dTPosI - nTotMove
|
||||
dVPosA = dTPosA + dVDeltaI
|
||||
dYPosA = dTPosA + dYDeltaF
|
||||
dTPosA = dTPosF
|
||||
dYPosA = dTPosF + dYDeltaF
|
||||
dVPosA = dTPosF + dVDeltaF
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
table.insert( vCmd, { 11, 1})
|
||||
table.insert( vCmd, { 12, 0})
|
||||
bCloseV = true
|
||||
-- la morsa al carico è adesso in posizione
|
||||
dYDeltaI = dYDeltaF
|
||||
end
|
||||
-- se pinza al carico in presa
|
||||
elseif EMC.YDELTA then
|
||||
table.insert( vCmd, { 0, 'Direct - V to position first'})
|
||||
table.insert( vCmd, { 12, 0})
|
||||
|
||||
dTPosA = MaxV - dVDeltaF
|
||||
dVPosA = MaxV
|
||||
dYPosA = dTPosA + dYDeltaI
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
table.insert( vCmd, { 12, 1})
|
||||
table.insert( vCmd, { 11, 0})
|
||||
bCloseY = true
|
||||
-- se pinza allo scarico in presa
|
||||
else
|
||||
table.insert( vCmd, { 0, 'Direct - Y to position first'})
|
||||
table.insert( vCmd, { 11, 0})
|
||||
|
||||
dTPosA = MinY - dVDeltaF
|
||||
dVPosA = dTPosA + dYDeltaI
|
||||
dYPosA = MinY
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
table.insert( vCmd, { 11, 1})
|
||||
table.insert( vCmd, { 12, 0})
|
||||
bCloseV = true
|
||||
end
|
||||
|
||||
-- se entrambi in presa
|
||||
if EMC.YDELTANEXT and EMC.VDELTANEXT then
|
||||
dTPosA = dTPosF
|
||||
dYPosA = dTPosF + dYDeltaF
|
||||
dVPosA = dTPosF + dVDeltaF
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
if bCloseY then table.insert( vCmd, { 11, 1}) end
|
||||
if bCloseV then table.insert( vCmd, { 12, 1}) end
|
||||
table.insert( vCmd, { 21, dYDeltaF, dVDeltaF})
|
||||
-- sposto il carrello Y in posizione
|
||||
elseif EMC.YDELTANEXT then
|
||||
-- vado in posizione e sposto il carrello V in parcheggio
|
||||
dYPosA = MinY
|
||||
dTPosA = MinY - dYDeltaF
|
||||
dVPosA = dTPosA + dVDeltaF
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
if bCloseY then table.insert( vCmd, { 11, 1}) end
|
||||
if abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL then
|
||||
table.insert( vCmd, { 11, 0})
|
||||
dYPosA = dTPosI + dYDeltaF
|
||||
table.insert( vCmd, { 1, 'Y', dYPosA})
|
||||
table.insert( vCmd, { 11, 1})
|
||||
-- la morsa al carico è adesso in posizione
|
||||
dYDeltaI = dYDeltaF
|
||||
end
|
||||
table.insert( vCmd, { 12, 0})
|
||||
-- sposto il carrello V in parcheggio
|
||||
table.insert( vCmd, { 1, 'V', ParkV})
|
||||
table.insert( vCmd, { 21, dYDeltaF, 0})
|
||||
-- sposto il carrello Y in posizione
|
||||
else
|
||||
dVPosA = MaxV
|
||||
dTPosA = MaxV - dVDeltaF
|
||||
dYPosA = - ( dTPosA + dYDeltaF)
|
||||
-- vado in posizione e sposto il carrello Y in parcheggio
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
if bCloseV then table.insert( vCmd, { 12, 1}) end
|
||||
table.insert( vCmd, { 11, 0})
|
||||
-- sposto il carrello Y in parcheggio
|
||||
table.insert( vCmd, { 1, 'Y', ParkY})
|
||||
table.insert( vCmd, { 21, 0, dVDeltaF})
|
||||
end
|
||||
@@ -1495,9 +1493,85 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
-- movimento terminato
|
||||
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
||||
|
||||
-- scambio diretto. Y può andare in posizione direttamente
|
||||
elseif ( dYDeltaF - dVDeltaI) >= MinY - MaxV + DELTA_SIC and ( dYDeltaF - dYDeltaI > MinV - dVPosI + dYPosI - MaxY and dYDeltaF - dYDeltaI < dVPosI - MinV + dYPosI - MinY ) then
|
||||
|
||||
-- se l'altra morsa non era in presa, vado a pinzare il pezzo
|
||||
if not EMC.VDELTA then
|
||||
dVPosA = MaxV
|
||||
dTPosA = MaxV - dVDeltaI
|
||||
dYPosA = dTPosA + dYDeltaI
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
dTPosI = dTPosA
|
||||
dYPosI = dYPosA
|
||||
table.insert( vCmd, { 12, 1})
|
||||
end
|
||||
|
||||
-- se spostando morsa diretto esco dalle corse, calcolo di quanto devo muovere la trave (cioè l'altra morsa) come minimo
|
||||
-- se non era ingagiata, vado al suo minimo
|
||||
if not EMC.YDELTA then
|
||||
dBeamMove = - ( dYDeltaF - MinY + dTPosI)
|
||||
-- se spostamento verso lo scarico
|
||||
elseif ( dYPosI + ( dYDeltaF - dYDeltaI)) < MinY then
|
||||
dBeamMove = dYPosI + ( dYDeltaF - dYDeltaI) - MinY
|
||||
-- se spostamento verso il carico
|
||||
elseif ( dYPosI + ( dYDeltaF - dYDeltaI)) > MaxY then
|
||||
dBeamMove = dYPosI + ( dYDeltaF - dYDeltaI) - MaxY
|
||||
end
|
||||
|
||||
|
||||
table.insert( vCmd, { 11, 0})
|
||||
|
||||
dTPosA = dTPosI + dBeamMove
|
||||
dYPosA = dTPosA + dYDeltaF
|
||||
dVPosA = dTPosA + dVDeltaI
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
|
||||
-- la morsa allo scarico è adesso in posizione
|
||||
dYDeltaI = dYDeltaF
|
||||
dTPosI = dTPosA
|
||||
|
||||
-- blocco la morsa
|
||||
table.insert( vCmd, { 11, 1})
|
||||
|
||||
-- imposto i nuovi parametri di aggancio
|
||||
if EMC.YDELTANEXT and EMC.VDELTANEXT then
|
||||
if abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL then
|
||||
table.insert( vCmd, { 12, 0})
|
||||
dTPosA = dTPosF
|
||||
dYPosA = dTPosF + dYDeltaF
|
||||
dVPosA = dTPosF + dVDeltaF
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
table.insert( vCmd, { 12, 1})
|
||||
-- la morsa al carico è adesso in posizione
|
||||
dVDeltaI = dVDeltaF
|
||||
end
|
||||
table.insert( vCmd, { 21, dYDeltaF, dVDeltaF})
|
||||
elseif EMC.VDELTANEXT then
|
||||
if abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL then
|
||||
table.insert( vCmd, { 12, 0})
|
||||
dVPosA = dTPosI + dVDeltaF
|
||||
table.insert( vCmd, { 1, 'V', dVPosA})
|
||||
table.insert( vCmd, { 12, 1})
|
||||
-- la morsa al carico è adesso in posizione
|
||||
dVDeltaI = dVDeltaF
|
||||
end
|
||||
table.insert( vCmd, { 11, 0})
|
||||
-- sposto il carrello Y in parcheggio
|
||||
table.insert( vCmd, { 1, 'Y', ParkY})
|
||||
table.insert( vCmd, { 21, 0, dVDeltaF})
|
||||
else
|
||||
table.insert( vCmd, { 12, 0})
|
||||
-- sposto il carrello V in parcheggio
|
||||
table.insert( vCmd, { 1, 'V', ParkV})
|
||||
table.insert( vCmd, { 21, dYDeltaF, 0})
|
||||
end
|
||||
-- movimento terminato
|
||||
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
||||
|
||||
-- se devo recuperare corsa con passo del pellegrino
|
||||
else
|
||||
local bForceMoveY = false
|
||||
local bForceMoveY, bForceMoveV
|
||||
-- compatto al centro
|
||||
if not EMC.YDELTA then
|
||||
table.insert( vCmd, { 0, 'Compact Y'})
|
||||
@@ -1507,8 +1581,9 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
dYPosA = MinY
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
table.insert( vCmd, { 11, 1})
|
||||
EMC.YDELTA = true
|
||||
dYDeltaI = dVDeltaI - MaxV + MinY
|
||||
EMC.YDELTA = dYDeltaI
|
||||
bForceMoveV = true
|
||||
dTPosI = dTPosA
|
||||
end
|
||||
if not EMC.VDELTA then
|
||||
@@ -1519,9 +1594,9 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
dYPosA = MinY
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
table.insert( vCmd, { 12, 1})
|
||||
EMC.VDELTA = true
|
||||
bForceMoveY = true
|
||||
dVDeltaI = dYDeltaI + MaxV - MinY
|
||||
EMC.VDELTA = dVDeltaI
|
||||
bForceMoveY = true
|
||||
dTPosI = dTPosA
|
||||
end
|
||||
|
||||
@@ -1530,7 +1605,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
|
||||
-- a questo punto entrambe le pinze sono in presa sul pezzo. Il trascinatore si decide in base alla direzione di movimento trave
|
||||
-- trascino con morsa allo scarico
|
||||
if dDeltaBeam > 0 or bForceMoveY then
|
||||
if bForceMoveY or ( dDeltaBeam > 0 and not bForceMoveV) then
|
||||
-- apro morsa al carico
|
||||
table.insert( vCmd, { 11, 0})
|
||||
-- devo recuperare più del doppio delle corse
|
||||
@@ -1544,8 +1619,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
table.insert( vCmd, { 11, 1})
|
||||
table.insert( vCmd, { 12, 0})
|
||||
dTPosI = dTPosA
|
||||
EMC.YDELTA = true
|
||||
EMC.VDELTA = false
|
||||
EMC.YDELTA = dYDeltaI
|
||||
EMC.VDELTA = nil
|
||||
-- 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
|
||||
@@ -1554,64 +1629,62 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
dYDeltaI = dYDeltaF
|
||||
dVPosA = MinV
|
||||
dTPosA = dTPosI - MaxV + MinV
|
||||
dYPosA = - ( dYDeltaF + dTPosA)
|
||||
dYPosA = dYDeltaF + dTPosA
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
table.insert( vCmd, { 11, 1})
|
||||
table.insert( vCmd, { 12, 0})
|
||||
dTPosI = dTPosA
|
||||
EMC.YDELTA = true
|
||||
EMC.VDELTA = false
|
||||
EMC.YDELTA = dYDeltaI
|
||||
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
|
||||
else
|
||||
-- suddivido il movimento su entrambe le morse
|
||||
local nTotMove = ( dYDeltaF - dYDeltaI) / 2 ;
|
||||
local dTotMove = ( dYDeltaF - dYDeltaI) / 2
|
||||
|
||||
dYPosA = dTPosI + dYDeltaI + nTotMove
|
||||
dVPosA = dTPosI + dVDeltaI - nTotMove
|
||||
dTPosA = dTPosI - nTotMove
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
table.insert( vCmd, { 11, 1})
|
||||
table.insert( vCmd, { 12, 0})
|
||||
if abs( dTotMove) > 10 * GEO.EPS_SMALL then
|
||||
dYPosA = dTPosI + dYDeltaI + dTotMove
|
||||
dVPosA = dTPosI + dVDeltaI - dTotMove
|
||||
dTPosA = dTPosI - dTotMove
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
table.insert( vCmd, { 11, 1})
|
||||
table.insert( vCmd, { 12, 0})
|
||||
|
||||
-- aggiorno nuova posizione della morsa al carico dopo riposizionamento
|
||||
dYDeltaI = dYDeltaF ;
|
||||
-- aggiorno nuova posizione della morsa al carico dopo riposizionamento
|
||||
dYDeltaI = dYDeltaF ;
|
||||
|
||||
if not EMC.VDELTANEXT then
|
||||
dTPosA = dTPosF
|
||||
dYPosA = dTPosF + dYDeltaF
|
||||
dVPosA = ParkV
|
||||
elseif EMC.YDELTANEXT then
|
||||
dTPosA = dTPosF
|
||||
dYPosA = dTPosF + dYDeltaF
|
||||
dVPosA = dTPosF + dVDeltaF
|
||||
else
|
||||
dYPosA = MinY
|
||||
dTPosA = MinY - dYDeltaF
|
||||
dVPosA = dTPosA + dVDeltaF
|
||||
if not EMC.VDELTANEXT then
|
||||
dTPosA = dTPosF
|
||||
dYPosA = dTPosF + dYDeltaF
|
||||
dVPosA = ParkV
|
||||
elseif EMC.YDELTANEXT then
|
||||
dTPosA = dTPosF
|
||||
dYPosA = dTPosF + dYDeltaF
|
||||
dVPosA = dTPosF + dVDeltaF
|
||||
else
|
||||
dYPosA = MinY
|
||||
dTPosA = MinY - dYDeltaF
|
||||
dVPosA = dTPosA + dVDeltaF
|
||||
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
|
||||
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
|
||||
|
||||
-- sistemo apertura morse
|
||||
if EMC.VDELTANEXT then
|
||||
table.insert( vCmd, { 12, 1})
|
||||
end
|
||||
if not EMC.YDELTANEXT then
|
||||
table.insert( vCmd, { 11, 0})
|
||||
-- sposto il carrello Y in parcheggio
|
||||
table.insert( vCmd, { 1, 'Y', ParkY})
|
||||
end
|
||||
-- imposto i nuovi parametri di aggancio
|
||||
if EMC.YDELTANEXT and EMC.VDELTANEXT then
|
||||
table.insert( vCmd, { 12, 1})
|
||||
table.insert( vCmd, { 21, dYDeltaF, dVDeltaF})
|
||||
elseif EMC.YDELTANEXT then
|
||||
table.insert( vCmd, { 21, dYDeltaF, 0})
|
||||
else
|
||||
table.insert( vCmd, { 12, 1})
|
||||
table.insert( vCmd, { 11, 0})
|
||||
-- sposto il carrello Y in parcheggio
|
||||
table.insert( vCmd, { 1, 'Y', ParkY})
|
||||
table.insert( vCmd, { 21, 0, dVDeltaF})
|
||||
end
|
||||
|
||||
@@ -1631,54 +1704,61 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
table.insert( vCmd, { 12, 1})
|
||||
table.insert( vCmd, { 11, 0})
|
||||
dTPosI = dTPosA
|
||||
EMC.YDELTA = false
|
||||
EMC.VDELTA = true
|
||||
EMC.YDELTA = nil
|
||||
EMC.VDELTA = dVDeltaI
|
||||
-- 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) > - MinV - MaxV then
|
||||
-- aggiorno nuova posizione della morsa al carico dopo riposizionamento
|
||||
local dTotMove = MaxY - dTPosI - dYDeltaI
|
||||
dVDeltaI = dVDeltaF
|
||||
dYPosA = MaxY
|
||||
dTPosA = dTPosI + MaxY - MinY
|
||||
dTPosA = dTPosI + dTotMove
|
||||
dVPosA = dVDeltaF + dTPosA
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
table.insert( vCmd, { 12, 1})
|
||||
table.insert( vCmd, { 11, 0})
|
||||
dTPosI = dTPosA
|
||||
EMC.YDELTA = false
|
||||
EMC.VDELTA = true
|
||||
EMC.YDELTA = nil
|
||||
EMC.VDELTA = dVDeltaI
|
||||
-- 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
|
||||
else
|
||||
-- suddivido il movimento su entrambe le morse
|
||||
local nTotMove = ( dVDeltaI - dVDeltaF) / 2 ;
|
||||
local dTotMove = ( dVDeltaI - dVDeltaF) / 2
|
||||
|
||||
dYPosA = dTPosI + dYDeltaI + nTotMove
|
||||
dVPosA = dTPosI + dVDeltaI - nTotMove
|
||||
dTPosA = dTPosI + nTotMove
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
table.insert( vCmd, { 12, 1})
|
||||
table.insert( vCmd, { 11, 0})
|
||||
if abs( dTotMove) > 10 * GEO.EPS_SMALL then
|
||||
dYPosA = dTPosI + dYDeltaI + dTotMove
|
||||
dVPosA = dTPosI + dVDeltaI - dTotMove
|
||||
dTPosA = dTPosI + dTotMove
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
table.insert( vCmd, { 12, 1})
|
||||
table.insert( vCmd, { 11, 0})
|
||||
|
||||
-- aggiorno nuova posizione della morsa al carico dopo riposizionamento
|
||||
dVDeltaI = dVDeltaF ;
|
||||
-- aggiorno nuova posizione della morsa al carico dopo riposizionamento
|
||||
dVDeltaI = dVDeltaF ;
|
||||
|
||||
if EMC.VDELTANEXT then
|
||||
dTPosA = dTPosF
|
||||
dYPosA = dTPosF + dYDeltaF
|
||||
dVPosA = dTPosF + dVDeltaF
|
||||
else
|
||||
dVPosA = MaxV
|
||||
dTPosA = MaxV - dVDeltaF
|
||||
dYPosA = - dTPosA - dYDeltaF
|
||||
if not EMC.YDELTANEXT then
|
||||
dTPosA = dTPosF
|
||||
dVPosA = dTPosF + dVDeltaF
|
||||
dYPosA = ParkY
|
||||
elseif EMC.VDELTANEXT then
|
||||
dTPosA = dTPosF
|
||||
dYPosA = dTPosF + dYDeltaF
|
||||
dVPosA = dTPosF + dVDeltaF
|
||||
else
|
||||
dVPosA = MaxV
|
||||
dTPosA = MaxV - dVDeltaF
|
||||
dYPosA = - dTPosA - 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
|
||||
dYDeltaI = 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
|
||||
dYDeltaI = dYDeltaF
|
||||
|
||||
-- sistemo apertura morse
|
||||
if EMC.YDELTANEXT then
|
||||
@@ -1689,10 +1769,16 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
-- sposto il carrello Y in parcheggio
|
||||
table.insert( vCmd, { 1, 'V', ParkV})
|
||||
end
|
||||
|
||||
-- imposto i nuovi parametri di aggancio
|
||||
if EMC.YDELTANEXT and EMC.VDELTANEXT then
|
||||
table.insert( vCmd, { 11, 1})
|
||||
table.insert( vCmd, { 21, dYDeltaF, dVDeltaF})
|
||||
elseif EMC.YDELTANEXT then
|
||||
table.insert( vCmd, { 11, 1})
|
||||
-- sposto il carrello Y in parcheggio
|
||||
table.insert( vCmd, { 12, 0})
|
||||
table.insert( vCmd, { 1, 'V', ParkV})
|
||||
table.insert( vCmd, { 21, dYDeltaF, 0})
|
||||
else
|
||||
table.insert( vCmd, { 21, 0, dVDeltaF})
|
||||
|
||||
Reference in New Issue
Block a user