|
|
|
@@ -638,13 +638,15 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
|
|
|
|
|
-- Calcolo dell'ingombro della lavorazione
|
|
|
|
|
local dDistFront, dDistBack = SpecialCalcMachiningEncumbrance( EMC.MCHID, bPreCut)
|
|
|
|
|
if not dDistFront or not dDistBack then return end
|
|
|
|
|
local dMaxLenLeft = 0
|
|
|
|
|
if bPreSplit or bSplitting then
|
|
|
|
|
local dDistF = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1)
|
|
|
|
|
local dDistF, dDistB, dMaxLF = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1)
|
|
|
|
|
dDistFront = min( dDistFront, dDistF)
|
|
|
|
|
local dNextHOVM = EgtGetInfo( EgtGetNextRawPart( nCurrRawId) or GDB_ID.NULL, 'HOVM', 'd') or 0
|
|
|
|
|
local dBackOther = b3Tot:getDimX() - b3Raw:getDimX() - MinOther - dNextHOVM
|
|
|
|
|
EgtOutLog( 'DistBack='..EgtNumToString( dDistBack)..' OtherBack='..EgtNumToString( dBackOther), 3)
|
|
|
|
|
dDistBack = min( dDistBack, dBackOther)
|
|
|
|
|
if bSplitting then dMaxLenLeft = dMaxLF end
|
|
|
|
|
elseif bPreCut or bCutting then
|
|
|
|
|
local dDistF = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1)
|
|
|
|
|
dDistFront = min( dDistFront, dDistF)
|
|
|
|
@@ -709,8 +711,9 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
-- eseguo la separazione ( standard o di pezzo ruotato)
|
|
|
|
|
EgtOutLog( 'MaxLenLeft=' .. EgtNumToString( dMaxLenLeft, 1), 1)
|
|
|
|
|
if not IsMid2Phase( EMC.PHASE + 1) then
|
|
|
|
|
vCmd = SpecCalcSplit( b3Raw:getDimX())
|
|
|
|
|
vCmd = SpecCalcSplit( b3Raw:getDimX(), dMaxLenLeft)
|
|
|
|
|
else
|
|
|
|
|
vCmd = SpecCalcSplitRot( b3Raw:getDimX())
|
|
|
|
|
end
|
|
|
|
@@ -823,6 +826,7 @@ function SpecialCalcPhaseEncumbrance( nPhase)
|
|
|
|
|
-- Deve essere la fase finale di lavorazione di un pezzo (già staccato dal resto della trave)
|
|
|
|
|
local dDistFront = EMC.LB
|
|
|
|
|
local dDistBack = EMC.LB
|
|
|
|
|
local dMaxLenLeft = 0
|
|
|
|
|
-- Salvo lavorazione e utensile correnti, per ripristinarli alla fine
|
|
|
|
|
local nOrigMchId = EgtGetCurrMachining()
|
|
|
|
|
local sOrigTool = EgtTdbGetCurrToolParam( MCH_TP.NAME)
|
|
|
|
@@ -847,6 +851,9 @@ function SpecialCalcPhaseEncumbrance( nPhase)
|
|
|
|
|
if dDistF and dDistB then
|
|
|
|
|
dDistFront = min( dDistFront, dDistF)
|
|
|
|
|
dDistBack = min( dDistBack, dDistB)
|
|
|
|
|
local dMaxLenL = EMC.LR - dDistF
|
|
|
|
|
EgtOutLog( ' MaxLenLeft = ' .. EgtNumToString( dMaxLenL, 1), 3)
|
|
|
|
|
dMaxLenLeft = max( dMaxLenLeft, dMaxLenL)
|
|
|
|
|
end
|
|
|
|
|
nMchId = EgtGetNextActiveOperation( nMchId)
|
|
|
|
|
end
|
|
|
|
@@ -855,7 +862,7 @@ function SpecialCalcPhaseEncumbrance( nPhase)
|
|
|
|
|
if sOrigTool then EgtTdbSetCurrTool( sOrigTool) end
|
|
|
|
|
if sOrigTool and sOrigHead and nOrigExit then EgtSetCalcTool( sOrigTool, sOrigHead, nOrigExit) end
|
|
|
|
|
-- Restituisco gli ingombri trovati
|
|
|
|
|
return dDistFront, dDistBack
|
|
|
|
|
return dDistFront, dDistBack, dMaxLenLeft
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
@@ -1028,9 +1035,9 @@ function SpecCalcEncumbrance( vtTool, vtArm, ptMin, ptMax, bSaw, bChain, dTLen,
|
|
|
|
|
elseif ( vtTool:getX() > 0.5) then
|
|
|
|
|
dHeadFront = 450
|
|
|
|
|
end
|
|
|
|
|
if vtTool:getX() > 0.25 then
|
|
|
|
|
if vtTool:getX() > 0.25 then
|
|
|
|
|
dHeadFront = dHeadFront + max( dTLen - 130, 0) * vtTool:getX()
|
|
|
|
|
elseif vtTool:getX() > 0 then
|
|
|
|
|
elseif vtTool:getX() > 0 then
|
|
|
|
|
dHeadFront = dHeadFront + ( dTLen + 180) * vtTool:getX()
|
|
|
|
|
end
|
|
|
|
|
if vtTool:getX() < -0.866 then
|
|
|
|
@@ -1042,7 +1049,7 @@ function SpecCalcEncumbrance( vtTool, vtArm, ptMin, ptMax, bSaw, bChain, dTLen,
|
|
|
|
|
if vtArm:getX() > 0.259 then
|
|
|
|
|
dHeadFront = 510
|
|
|
|
|
else
|
|
|
|
|
dHeadFront = EgtIf( vtTool:getZ() > 0.966, 160, 280)
|
|
|
|
|
dHeadFront = EgtIf( vtTool:getZ() > 0.966, 170, 280)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
-- per fresature longitudinali con utensile di fianco
|
|
|
|
@@ -1214,6 +1221,9 @@ function SpecCalcCarriages( dDistFront, dDistBack, bFixedDelta, bFixedPos)
|
|
|
|
|
end
|
|
|
|
|
local dDistBackEff = min( dDistBack, EMC.LB - MyMinOther - EMC.HCING - EMC.HOVM)
|
|
|
|
|
|
|
|
|
|
-- se primo scambio
|
|
|
|
|
local MyMinY = EgtIf( EMC.CNT == 1, MinY + AGG_LOAD, MinY)
|
|
|
|
|
|
|
|
|
|
EgtOutLog( ' Dist/Min : Back=' .. EgtNumToString( dDistBackEff, 1) .. '/' .. EgtNumToString( MinBackJoin, 1) ..
|
|
|
|
|
' Front=' .. EgtNumToString( dDistFrontEff, 1) .. '/' .. EgtNumToString( MinFrontJoin, 1) ..
|
|
|
|
|
' Fixed : Delta=' .. EgtIf( bFixedDelta, 'T', 'F') .. ' Pos=' .. EgtIf( bFixedPos, 'T', 'F'), 3)
|
|
|
|
@@ -1233,7 +1243,7 @@ function SpecCalcCarriages( dDistFront, dDistBack, bFixedDelta, bFixedPos)
|
|
|
|
|
if dDistFrontEff < MinFrontJoin and dDistBackEff > MinBackJoin - GEO.EPS_SMALL then
|
|
|
|
|
-- se Y non era in presa, mi ricalcolo la posizione
|
|
|
|
|
if not dYDelta then
|
|
|
|
|
dYDelta = dVDelta + ( MinY - MaxV)
|
|
|
|
|
dYDelta = dVDelta + ( MyMinY - MaxV)
|
|
|
|
|
end
|
|
|
|
|
dNewYDelta = EMC.LB - dDistBackEff
|
|
|
|
|
-- verifico se posso lasciare la morsa in posizione
|
|
|
|
@@ -1250,11 +1260,11 @@ function SpecCalcCarriages( dDistFront, dDistBack, bFixedDelta, bFixedPos)
|
|
|
|
|
elseif dDistBackEff > MinBackJoin - GEO.EPS_SMALL and dDistFrontEff > MinFrontJoin - GEO.EPS_SMALL then
|
|
|
|
|
-- se Y non era in presa, mi ricalcolo la posizione
|
|
|
|
|
if not dYDelta then
|
|
|
|
|
dYDelta = dVDelta + ( MinY - MaxV)
|
|
|
|
|
dYDelta = dVDelta + ( MyMinY - MaxV)
|
|
|
|
|
end
|
|
|
|
|
-- se V non era in presa, mi ricalcolo la posizione
|
|
|
|
|
if not dVDelta then
|
|
|
|
|
dVDelta = dYDelta - ( MinY - MaxV)
|
|
|
|
|
dVDelta = dYDelta - ( MyMinY - MaxV)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
dNewYDelta = EMC.LB - dDistBackEff
|
|
|
|
@@ -1284,12 +1294,17 @@ function SpecCalcCarriages( dDistFront, dDistBack, bFixedDelta, bFixedPos)
|
|
|
|
|
elseif dDistBackEff < MinBackJoin and dDistFrontEff > MinFrontJoin - GEO.EPS_SMALL then
|
|
|
|
|
-- se V non era in presa, mi ricalcolo la posizione
|
|
|
|
|
if not dVDelta then
|
|
|
|
|
dVDelta = dYDelta - ( MinY - MaxV)
|
|
|
|
|
dVDelta = dYDelta - ( MyMinY - MaxV)
|
|
|
|
|
end
|
|
|
|
|
dNewVDelta = dDistFrontEff
|
|
|
|
|
-- verifico se posso lasciare la morsa in posizione
|
|
|
|
|
local dVDeltaTol = GetDeltaTol( dNewVDelta, EMC.TCING, EMC.HCING, EMC.HOVM, 'V', bFixedDelta)
|
|
|
|
|
local bVDeltaS = ( dNewVDelta > dVDelta + dVDeltaTol or dNewVDelta < dVDelta - DELTA_SIC)
|
|
|
|
|
local bVDeltaS
|
|
|
|
|
if EMC.YDELTA == nil and EMC.YDELTANEXT == nil then
|
|
|
|
|
bVDeltaS = (( dNewVDelta > dVDelta + dVDeltaTol and not bFixedPos) or dNewVDelta < dVDelta - DELTA_SIC)
|
|
|
|
|
else
|
|
|
|
|
bVDeltaS = ( dNewVDelta > dVDelta + dVDeltaTol or dNewVDelta < dVDelta - DELTA_SIC)
|
|
|
|
|
end
|
|
|
|
|
-- reimposto i delta finali in caso di spostamenti richiesti significativi, tenuto conto delle tolleranze
|
|
|
|
|
if bVDeltaS then
|
|
|
|
|
dNewVDelta = dNewVDelta - dVDeltaTol/2
|
|
|
|
@@ -1321,10 +1336,17 @@ function SpecCalcCarriages( dDistFront, dDistBack, bFixedDelta, bFixedPos)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
|
function SpecCalcSplit( dLenRaw)
|
|
|
|
|
function SpecCalcSplit( dLenRaw, dMaxLenLeft)
|
|
|
|
|
local vCmd = {}
|
|
|
|
|
EgtOutLog( ' *[S]', 1)
|
|
|
|
|
table.insert( vCmd, { 0, EgtIf( EMC.VDELTA, 'Split', 'Fall')})
|
|
|
|
|
local bSplit = ( EMC.VDELTA ~= nil)
|
|
|
|
|
local ParkT = LoadT
|
|
|
|
|
if bSplit then
|
|
|
|
|
if dMaxLenLeft + 100 > LoadT then
|
|
|
|
|
ParkT = dMaxLenLeft + 300
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
table.insert( vCmd, { 0, EgtIf( bSplit, 'Split', 'Fall')})
|
|
|
|
|
-- determino i grezzi da agganciare al carrello Y (sono quelli presenti nella fase successiva dispari)
|
|
|
|
|
local nNextOddPhase = GetNextStartOrRestPhase( EMC.PHASE)
|
|
|
|
|
local nRawId = EgtGetFirstRawPart()
|
|
|
|
@@ -1336,20 +1358,26 @@ function SpecCalcSplit( dLenRaw)
|
|
|
|
|
end
|
|
|
|
|
-- riporto il carrello Y al carico con il resto della trave
|
|
|
|
|
local dLDelta = EMC.YDELTA - dLenRaw
|
|
|
|
|
table.insert( vCmd, { 1, 'Y', LoadT + dLDelta})
|
|
|
|
|
table.insert( vCmd, { 1, 'Y', ParkT + dLDelta})
|
|
|
|
|
table.insert( vCmd, { 21, 0, EMC.VDELTA or 0})
|
|
|
|
|
-- imposto subito Y non più attaccato al trave in lavoro
|
|
|
|
|
EMC.YDELTA = nil
|
|
|
|
|
-- salvo posizione carrello Y in disposizione del pezzo dopo split
|
|
|
|
|
local PostDispId = EgtGetPhaseDisposition( EMC.PHASE + 1)
|
|
|
|
|
if PostDispId then
|
|
|
|
|
EgtSetInfo( PostDispId, 'YPOS', LoadT + dLDelta)
|
|
|
|
|
if not bSplit then
|
|
|
|
|
EgtSetInfo( PostDispId, 'TPOS', ParkT)
|
|
|
|
|
else
|
|
|
|
|
EgtRemoveInfo( PostDispId, 'TPOS')
|
|
|
|
|
EgtSetInfo( PostDispId, 'TPARK', ParkT)
|
|
|
|
|
end
|
|
|
|
|
EgtSetInfo( PostDispId, 'YPOS', ParkT + dLDelta)
|
|
|
|
|
end
|
|
|
|
|
-- salvo posizione grezzo rimasto e posizione carrello Y nella disposizione iniziale del pezzo succ (prossima fase dispari)
|
|
|
|
|
local NextDispId = EgtGetPhaseDisposition( nNextOddPhase)
|
|
|
|
|
if NextDispId then
|
|
|
|
|
EgtSetInfo( NextDispId, 'TPOS', LoadT)
|
|
|
|
|
EgtSetInfo( NextDispId, 'YPOS', LoadT + dLDelta)
|
|
|
|
|
EgtSetInfo( NextDispId, 'TPOS', ParkT)
|
|
|
|
|
EgtSetInfo( NextDispId, 'YPOS', ParkT + dLDelta)
|
|
|
|
|
end
|
|
|
|
|
return vCmd
|
|
|
|
|
end
|
|
|
|
@@ -1489,6 +1517,17 @@ function SpecCalcPreRot()
|
|
|
|
|
return vCmd
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
|
local function CalcCharStatus( sType, dDelta)
|
|
|
|
|
-- se per carrello Y
|
|
|
|
|
if sType == 'Y' then
|
|
|
|
|
return EgtIf( EMC.LB - dDelta < LenToPress, 1, 2)
|
|
|
|
|
-- altrimenti per carrello V
|
|
|
|
|
else
|
|
|
|
|
return EgtIf( dDelta < LenToPress, 1, 2)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
|
function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
|
|
|
|
local dYPosA, dVPosA, dTPosA
|
|
|
|
@@ -1525,6 +1564,14 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|
|
|
|
local bZmaxOk = EnsureZmax( bZmaxOk, vCmd)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- ribadisco pinzaggio
|
|
|
|
|
if EMC.YDELTA then
|
|
|
|
|
table.insert( vCmd, { 11, 1})
|
|
|
|
|
end
|
|
|
|
|
if EMC.VDELTA then
|
|
|
|
|
table.insert( vCmd, { 12, 1})
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- reset contatore primo riposizionamento con compensazione lettura laser
|
|
|
|
|
EMC.CNT = nil
|
|
|
|
|
|
|
|
|
@@ -1556,7 +1603,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|
|
|
|
-- * deve effettivamente spostarsi
|
|
|
|
|
-- * non si arriva da gestione passo del pellegrino
|
|
|
|
|
-- * se riesce a raggiungere la posizione con le corse a disposizione per come sono posizionate le morse attualmente
|
|
|
|
|
if ( dYDeltaI - dVDeltaF) >= MyMinY - MaxV and abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL and not EMC.PILGRIMSTEP and
|
|
|
|
|
if ( dYDeltaI - dVDeltaF) + 10 * GEO.EPS_SMALL >= MyMinY - MaxV and abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL and not EMC.PILGRIMSTEP and
|
|
|
|
|
( dVDeltaF - dVDeltaI > MinV - dVPosI + MyMinY - dYPosI) then
|
|
|
|
|
table.insert( vCmd, { 0, 'Direct-V-Y'})
|
|
|
|
|
-- se l'altra morsa non era in presa, vado a pinzare il pezzo
|
|
|
|
@@ -1615,7 +1662,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|
|
|
|
dTPosI = dTPosA
|
|
|
|
|
|
|
|
|
|
-- blocco la morsa
|
|
|
|
|
table.insert( vCmd, { 12, 1})
|
|
|
|
|
table.insert( vCmd, { 12, CalcCharStatus( 'V', dVDeltaF)})
|
|
|
|
|
|
|
|
|
|
-- imposto i nuovi parametri di aggancio
|
|
|
|
|
if EMC.YDELTANEXT and EMC.VDELTANEXT then
|
|
|
|
@@ -1626,7 +1673,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|
|
|
|
dYPosA = dTPosF + dYDeltaF
|
|
|
|
|
dVPosA = dTPosF + dVDeltaF
|
|
|
|
|
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
|
|
|
|
table.insert( vCmd, { 11, 1})
|
|
|
|
|
table.insert( vCmd, { 11, CalcCharStatus( 'Y', dYDeltaF)})
|
|
|
|
|
-- la morsa al carico è adesso in posizione
|
|
|
|
|
dYDeltaI = dYDeltaF
|
|
|
|
|
end
|
|
|
|
@@ -1638,7 +1685,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|
|
|
|
dTPosA = -( dYPosA + dVDeltaF)
|
|
|
|
|
dVPosA = dTPosA + dVDeltaF
|
|
|
|
|
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
|
|
|
|
table.insert( vCmd, { 11, 1})
|
|
|
|
|
table.insert( vCmd, { 11, CalcCharStatus( 'Y', dYDeltaF)})
|
|
|
|
|
-- la morsa al carico è adesso in posizione
|
|
|
|
|
dYDeltaI = dYDeltaF
|
|
|
|
|
end
|
|
|
|
@@ -1661,7 +1708,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|
|
|
|
-- * deve effettivamente spostarsi
|
|
|
|
|
-- * non si arriva da gestione passo del pellegrino
|
|
|
|
|
-- * se riesce a raggiungere la posizione con le corse a disposizione per come sono posizionate le morse attualmente
|
|
|
|
|
elseif ( dYDeltaF - dVDeltaI) >= MyMinY - MaxV and abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL and not EMC.PILGRIMSTEP and
|
|
|
|
|
elseif ( dYDeltaF - dVDeltaI) + 10 * GEO.EPS_SMALL >= MyMinY - MaxV and abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL and not EMC.PILGRIMSTEP and
|
|
|
|
|
( dYDeltaF - dYDeltaI < MaxY - dYPosI + MaxV - dVPosI) then
|
|
|
|
|
table.insert( vCmd, { 0, 'Direct-Y-V'})
|
|
|
|
|
-- se l'altra morsa non era in presa, vado a pinzare il pezzo
|
|
|
|
@@ -1723,7 +1770,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|
|
|
|
dTPosI = dTPosA
|
|
|
|
|
|
|
|
|
|
-- blocco la morsa
|
|
|
|
|
table.insert( vCmd, { 11, 1})
|
|
|
|
|
table.insert( vCmd, { 11, CalcCharStatus( 'Y', dYDeltaF)})
|
|
|
|
|
|
|
|
|
|
-- imposto i nuovi parametri di aggancio
|
|
|
|
|
if EMC.YDELTANEXT and EMC.VDELTANEXT then
|
|
|
|
@@ -1733,7 +1780,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|
|
|
|
dYPosA = dTPosF + dYDeltaF
|
|
|
|
|
dVPosA = dTPosF + dVDeltaF
|
|
|
|
|
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
|
|
|
|
table.insert( vCmd, { 12, 1})
|
|
|
|
|
table.insert( vCmd, { 12, CalcCharStatus( 'V', dVDeltaF)})
|
|
|
|
|
-- la morsa al carico è adesso in posizione
|
|
|
|
|
dVDeltaI = dVDeltaF
|
|
|
|
|
end
|
|
|
|
@@ -1745,7 +1792,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|
|
|
|
dTPosA = dVPosA - dVDeltaF
|
|
|
|
|
dYPosA = dTPosA + dYDeltaF
|
|
|
|
|
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
|
|
|
|
table.insert( vCmd, { 12, 1})
|
|
|
|
|
table.insert( vCmd, { 12, CalcCharStatus( 'V', dVDeltaF)})
|
|
|
|
|
-- la morsa al carico è adesso in posizione
|
|
|
|
|
dVDeltaI = dVDeltaF
|
|
|
|
|
end
|
|
|
|
@@ -1858,7 +1905,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|
|
|
|
dTPosA = dTPosI - dVPosI + MinV
|
|
|
|
|
dYPosA = dYDeltaF + dTPosA
|
|
|
|
|
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
|
|
|
|
table.insert( vCmd, { 11, 1})
|
|
|
|
|
table.insert( vCmd, { 11, CalcCharStatus( 'Y', dYDeltaF)})
|
|
|
|
|
table.insert( vCmd, { 12, 0})
|
|
|
|
|
dTPosI = dTPosA
|
|
|
|
|
EMC.YDELTA = dYDeltaF
|
|
|
|
@@ -1875,7 +1922,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|
|
|
|
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, { 11, CalcCharStatus( 'Y', dYDeltaF)})
|
|
|
|
|
table.insert( vCmd, { 12, 0})
|
|
|
|
|
|
|
|
|
|
-- aggiorno nuova posizione della morsa al carico dopo riposizionamento
|
|
|
|
@@ -1903,12 +1950,12 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|
|
|
|
|
|
|
|
|
-- imposto i nuovi parametri di aggancio
|
|
|
|
|
if EMC.YDELTANEXT and EMC.VDELTANEXT then
|
|
|
|
|
table.insert( vCmd, { 12, 1})
|
|
|
|
|
table.insert( vCmd, { 12, CalcCharStatus( 'V', dVDeltaF)})
|
|
|
|
|
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, { 12, CalcCharStatus( 'V', dVDeltaF)})
|
|
|
|
|
table.insert( vCmd, { 11, 0})
|
|
|
|
|
-- sposto il carrello Y in parcheggio
|
|
|
|
|
table.insert( vCmd, { 1, 'Y', ParkY})
|
|
|
|
@@ -1964,7 +2011,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|
|
|
|
dTPosA = dTPosI + ( MaxY - dYPosI)
|
|
|
|
|
dVPosA = dVDeltaF + dTPosA
|
|
|
|
|
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
|
|
|
|
table.insert( vCmd, { 12, 1})
|
|
|
|
|
table.insert( vCmd, { 12, CalcCharStatus( 'V', dVDeltaF)})
|
|
|
|
|
table.insert( vCmd, { 11, 0})
|
|
|
|
|
dTPosI = dTPosA
|
|
|
|
|
EMC.YDELTA = dYDeltaI
|
|
|
|
@@ -1981,7 +2028,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|
|
|
|
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, { 12, CalcCharStatus( 'V', dVDeltaF)})
|
|
|
|
|
table.insert( vCmd, { 11, 0})
|
|
|
|
|
|
|
|
|
|
-- aggiorno nuova posizione della morsa allo scarico dopo riposizionamento
|
|
|
|
@@ -2007,22 +2054,12 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
|
|
|
|
dYDeltaI = dYDeltaF
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- sistemo apertura morse
|
|
|
|
|
if EMC.YDELTANEXT then
|
|
|
|
|
table.insert( vCmd, { 11, 1})
|
|
|
|
|
end
|
|
|
|
|
if not EMC.VDELTANEXT then
|
|
|
|
|
table.insert( vCmd, { 12, 0})
|
|
|
|
|
-- 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, { 11, CalcCharStatus( 'Y', dYDeltaF)})
|
|
|
|
|
table.insert( vCmd, { 21, dYDeltaF, dVDeltaF})
|
|
|
|
|
elseif EMC.YDELTANEXT then
|
|
|
|
|
table.insert( vCmd, { 11, 1})
|
|
|
|
|
table.insert( vCmd, { 11, CalcCharStatus( 'Y', dYDeltaF)})
|
|
|
|
|
-- sposto il carrello Y in parcheggio
|
|
|
|
|
table.insert( vCmd, { 12, 0})
|
|
|
|
|
table.insert( vCmd, { 1, 'V', ParkV})
|
|
|
|
@@ -2277,17 +2314,6 @@ function SpecAdjustCarriagesOLD( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, d
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
|
local function CalcCharStatus( sType, dDelta)
|
|
|
|
|
-- se per carrello Y
|
|
|
|
|
if sType == 'Y' then
|
|
|
|
|
return EgtIf( EMC.LB - dDelta < LenToPress, 1, 2)
|
|
|
|
|
-- altrimenti per carrello V
|
|
|
|
|
else
|
|
|
|
|
return EgtIf( dDelta < LenToPress, 1, 2)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
|
local function GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistN, sSide)
|
|
|
|
|
local dRecTotn = min( dDistN, dCorsaYfc+ dCorsaVfc) -- recupero possibile al netto di dCorsa..TrA)
|
|
|
|
|