|
|
|
@@ -824,6 +824,13 @@ end
|
|
|
|
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
|
function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreRotMch)
|
|
|
|
|
-- mi salvo info lavorazione su una lista
|
|
|
|
|
local AuxInfoMach = {}
|
|
|
|
|
AuxInfoMach.bPreSplit = bPreSplit
|
|
|
|
|
AuxInfoMach.bSplitting = bSplitting
|
|
|
|
|
AuxInfoMach.bPreCut = bPreCut
|
|
|
|
|
AuxInfoMach.bCutting = bCutting
|
|
|
|
|
AuxInfoMach.bUnload = bUnload
|
|
|
|
|
|
|
|
|
|
-- Assegno flag di pezzo separato dal resto del grezzo
|
|
|
|
|
SPLIT = IsEndPhase( EMC.PHASE) or IsMid2Phase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE)
|
|
|
|
@@ -921,7 +928,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
|
|
|
|
|
local dPosT = LoadT
|
|
|
|
|
if IsFirstMachiningAfterRotation( EMC.MCHID) then dPosT = dPosT + TurnerOffs end
|
|
|
|
|
local vCmd = SpecCalcLoad( dPosT, dDistFront, max( dDistBack, MinJoin + EgtIf( SPLIT, EMC.TCING, 0), EMC.LB - ( MaxY1 - MinY1) + 6))
|
|
|
|
|
local vCmd2 = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar)
|
|
|
|
|
local vCmd2 = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar, AuxInfoMach)
|
|
|
|
|
if bSplitting and EMC.ERR == 18 then
|
|
|
|
|
table.insert( vCmd, { 22, dRollBack, -dRollFront})
|
|
|
|
|
end
|
|
|
|
@@ -934,7 +941,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
|
|
|
|
|
|
|
|
|
|
-- Se altrimenti carri entrambi diponibili, eseguo calcoli per carrelli
|
|
|
|
|
elseif not IsEndPhase( EMC.PHASE) then
|
|
|
|
|
local vCmd = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar)
|
|
|
|
|
local vCmd = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar, AuxInfoMach)
|
|
|
|
|
-- Se non ci sono spostamenti, confermo i parametri di aggancio e di posizione roller
|
|
|
|
|
if SpecTestOnlyRemarkInCmds( vCmd) then
|
|
|
|
|
table.insert( vCmd, { 21, EgtIf( EMC.Y1DELTA, EMC.Y1DELTA, 0), EgtIf( EMC.Y2DELTA, EMC.Y2DELTA, 0)})
|
|
|
|
@@ -1262,7 +1269,7 @@ function SpecCalcLoad( dPosT, dDistFront, dDistBack)
|
|
|
|
|
end -- SpecAdjustLoad [L]
|
|
|
|
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
|
function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar)
|
|
|
|
|
function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar, AuxInfoMach)
|
|
|
|
|
|
|
|
|
|
local MinFrontJoin = MinJoin + EMC.HCING + EMC.HOVM
|
|
|
|
|
local MyMinOther = MinOther + EgtIf( EMC.CNT == 1, AggLoad, 0)
|
|
|
|
@@ -1301,13 +1308,11 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del
|
|
|
|
|
WorkTab.dV2PosF = -dRollFront
|
|
|
|
|
WorkTab.bV2CloseF = false
|
|
|
|
|
|
|
|
|
|
-- aggiuntivo per non avere problemi con pezzi a caduta
|
|
|
|
|
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 5 * BD.CHAR_EXTRA_DIST then
|
|
|
|
|
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + 4 * BD.CHAR_EXTRA_DIST
|
|
|
|
|
elseif WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 2.5 * BD.CHAR_EXTRA_DIST then
|
|
|
|
|
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + 2 * BD.CHAR_EXTRA_DIST
|
|
|
|
|
elseif WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST then
|
|
|
|
|
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + BD.CHAR_EXTRA_DIST
|
|
|
|
|
-- dopo che si è calcolato il minimo e massimo dell'intervallo, verifico che in testa rimanga almeno il minimo per poter fare passaggio pinze e scaricare
|
|
|
|
|
if AuxInfoMach and ( AuxInfoMach.bSplitting or AuxInfoMach.bCutting) then
|
|
|
|
|
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST and WorkTab.dY1DeltaMaxF > EMC.LT + BD.MINRAW_S + BD.CHAR_EXTRA_DIST then
|
|
|
|
|
WorkTab.dY1DeltaMinF = max( min( EMC.LT + BD.MINRAW_S, WorkTab.dY1DeltaMaxF - 1), WorkTab.dY1DeltaMinF)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- verifico validità intervallo ammesso per Y1
|
|
|
|
@@ -1346,13 +1351,11 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del
|
|
|
|
|
WorkTab.dV2PosF = -dRollFront
|
|
|
|
|
WorkTab.bV2CloseF = false
|
|
|
|
|
|
|
|
|
|
-- aggiuntivo per minimizzare scambi carrelli
|
|
|
|
|
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 5 * BD.CHAR_EXTRA_DIST then
|
|
|
|
|
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + 4 * BD.CHAR_EXTRA_DIST
|
|
|
|
|
elseif WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 2.5 * BD.CHAR_EXTRA_DIST then
|
|
|
|
|
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + 2 * BD.CHAR_EXTRA_DIST
|
|
|
|
|
elseif WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST then
|
|
|
|
|
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + BD.CHAR_EXTRA_DIST
|
|
|
|
|
-- dopo che si è calcolato il minimo e massimo dell'intervallo, verifico che in testa rimanga almeno il minimo per poter fare passaggio pinze e scaricare
|
|
|
|
|
if AuxInfoMach and ( AuxInfoMach.bSplitting or AuxInfoMach.bCutting) then
|
|
|
|
|
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST and WorkTab.dY1DeltaMaxF > EMC.LT + BD.MINRAW_S + BD.CHAR_EXTRA_DIST then
|
|
|
|
|
WorkTab.dY1DeltaMinF = max( min( EMC.LT + BD.MINRAW_S, WorkTab.dY1DeltaMaxF - 1), WorkTab.dY1DeltaMinF)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- verifico validità intervallo ammesso per Y1
|
|
|
|
|