Completata funzione applicazione lavorazione in fase appropriata. MANCA prerotazione

This commit is contained in:
andrea.villa
2024-11-06 10:11:40 +01:00
parent 2b9113347a
commit 91c883b87c
2 changed files with 51 additions and 25 deletions
+47 -23
View File
@@ -1046,7 +1046,7 @@ local function GetProcessingListFromCombination( BestCombination)
local vProc = {}
local bSomeFeatureDown = false
local bSomeFeatureSide = false
local nStartPosition = BestCombination.nIndexRotation
local nInitialPosition = BestCombination.nIndexRotation
-- aggiungo processing da fare in fase ribaltata
if #BestCombination.Rot180 > 0 then
@@ -1073,7 +1073,7 @@ local function GetProcessingListFromCombination( BestCombination)
end
end
return vProc, nStartPosition, bSomeFeatureDown, bSomeFeatureSide
return vProc, nInitialPosition, bSomeFeatureDown, bSomeFeatureSide
end
-------------------------------------------------------------------------------------------------------------
@@ -1177,9 +1177,9 @@ local function WriteCombinationLog( CombinationsList, BestCombination)
EgtOutLog( sLogLine)
end
EgtOutLog( '----------------------------------------')
EgtOutLog( ' BEST ROTATION : ' .. BestCombination.sBitIndexCombination .. ' (' .. BestCombination.nUnloadPos .. ')')
EgtOutLog( '---------------------------------------------------------------------------')
EgtOutLog( ' BEST ROTATION : ' .. BestCombination.sBitIndexCombination .. ' (' .. BestCombination.nUnloadPos .. ')')
EgtOutLog( '---------------------------')
end
-------------------------------------------------------------------------------------------------------------
@@ -1252,9 +1252,9 @@ local function GetBestResultFromCombinationsMatrix( ProcessingsOnPart)
SingleCombination.nComplete = SingleCombination.nComplete + EgtIf( Data.bComplete, 1, 0)
SingleCombination.nNotComplete = SingleCombination.nNotComplete + EgtIf( Data.bNotComplete, 1, 0)
SingleCombination.nNotExecute = SingleCombination.nNotExecute + EgtIf( Data.bNotExecute, 1, 0)
SingleCombination.nIndexRotation = Data.nIndexRotation
SingleCombination.nIndexRotation = nUnloadPos
else
SingleCombination.nIndexRotation = SingleCombination.nNotExecute + 1
SingleCombination.nNotExecute = SingleCombination.nNotExecute + 1
end
end
-- aggiungo rotazioni
@@ -1276,9 +1276,9 @@ local function GetBestResultFromCombinationsMatrix( ProcessingsOnPart)
WriteCombinationLog( CombinationsList, BestCombination)
end
local vFinalProc, nStartPosition, bSomeFeatureDown, bSomeFeatureSide = GetProcessingListFromCombination( BestCombination)
local vFinalProc, nInitialPosition, bSomeFeatureDown, bSomeFeatureSide = GetProcessingListFromCombination( BestCombination)
return vFinalProc, nStartPosition, bSomeFeatureDown, bSomeFeatureSide
return vFinalProc, nInitialPosition, bSomeFeatureDown, bSomeFeatureSide
end
-------------------------------------------------------------------------------------------------------------
@@ -1320,7 +1320,7 @@ function BeamExec.ProcessMachinings( PROCESSINGS, PARTS)
PROCESSINGS[nPart].Rotation[dRotIndex] = GetBestStrategy( PROCESSINGS[nPart].Rotation[dRotIndex])
end
-- si calcola la combinazione di lavorazione migliore
local vProc, nStartPosition, bSomeFeatureDown, bSomeFeatureSide = GetBestResultFromCombinationsMatrix( PROCESSINGS[nPart])
local vProc, nInitialPosition, bSomeFeatureDown, bSomeFeatureSide = GetBestResultFromCombinationsMatrix( PROCESSINGS[nPart])
-- debug
if EgtGetDebugLevel() >= 1 then
@@ -1336,10 +1336,9 @@ function BeamExec.ProcessMachinings( PROCESSINGS, PARTS)
-- TODO riordinare lavorazioni ottimizzando cambio utensile/spezzone ecc..., mantenendo dipendenze definite prima
-- ordino le lavorazioni
-- MACHININGS = OrderMachining( MACHININGS, PARTS[nPart])
-- ruoto il pezzo in caso di cambio di fase finale
-- TODO se la posizioen di partenza cambia, devo ruotare il pezzo
-- TODO se la posizione di partenza cambia, devo ruotare il pezzo!
-- aggiungo la fase, se non è la prima
if nOrd == 1 then
@@ -1347,6 +1346,10 @@ function BeamExec.ProcessMachinings( PROCESSINGS, PARTS)
else
BeamLib.AddPhaseWithRawParts( PARTS[nPart].idRaw, BeamData.ptOriXR, BeamData.dPosXR, 0)
end
local bAreAllMachiningApplyOk
local sErr
local bSplitAlreadyExecuted = false
local bSplitExecutedOnRot = false
local nPhase = EgtGetCurrPhase()
local nDispId = EgtGetPhaseDisposition( nPhase)
EgtSetInfo( nDispId, 'TYPE', 'START')
@@ -1363,16 +1366,26 @@ function BeamExec.ProcessMachinings( PROCESSINGS, PARTS)
nRId = EgtGetNextRawPart( nRId)
end
EgtSetInfo( nDispId, 'ROT', -2)
MachiningLib.AddOperations( MACHININGS, PARTS[nPart], 'DOWN')
bAreAllMachiningApplyOk, sErr, bSplitExecutedOnRot = MachiningLib.AddOperations( MACHININGS, PARTS[nPart], 'DOWN')
bSplitAlreadyExecuted = bSplitAlreadyExecuted or bSplitExecutedOnRot
end
-- se c'è almeno una lavorazione in posizionamento con trave ribaltata
if bSomeFeatureSide then
-- TODO se bSomeFeatureDown = true, allora devo creare altra fase. Altrimenti già creata da prima
-- devo sapere se c'è stata separazione, perchè devo scrivere MID o MID2, ritorno info da MachiningLib.AddOperations?
-- se ci sono state lavorazioni in rotazione precedente devo creare altra fase. Altrimenti già creata da prima
if bSomeFeatureDown then
BeamLib.AddPhaseWithRawParts( PARTS[nPart].idRaw, BeamData.ptOriXR, BeamData.dPosXR, 0)
nPhase = EgtGetCurrPhase()
nDispId = EgtGetPhaseDisposition( nPhase)
EgtSetInfo( nDispId, 'ORD', nOrd)
-- se c'è già stata seoparazione
if bSplitAlreadyExecuted then
EgtSetInfo( nDispId, 'TYPE', 'MID2')
else
EgtSetInfo( nDispId, 'TYPE', 'MID')
end
end
-- vettore movimento grezzi per rotazione di 90deg
-- TODO rivedere i calcoli. Non son sicuro che serve il bPreMove
local dDeltaYZ = EgtGetRawPartBBox( PARTS[nPart].idRaw):getDimY() - EgtGetRawPartBBox( PARTS[nPart].idRaw):getDimZ()
local vtMove = Vector3d( 0, dDeltaYZ / 2 * EgtIf( BeamData.RIGHT_LOAD, -1, 1), dDeltaYZ / 2)
local bPreMove = dDeltaYZ < 0
@@ -1385,12 +1398,23 @@ function BeamExec.ProcessMachinings( PROCESSINGS, PARTS)
nRId = EgtGetNextRawPart( nRId)
end
EgtSetInfo( nDispId, 'ROT', -1)
MachiningLib.AddOperations( MACHININGS, PARTS[nPart], 'SIDE')
bAreAllMachiningApplyOk, sErr, bSplitExecutedOnRot = MachiningLib.AddOperations( MACHININGS, PARTS[nPart], 'SIDE')
bSplitAlreadyExecuted = bSplitAlreadyExecuted or bSplitExecutedOnRot
end
-- se ci sono state lavorazioni in rotazione precedente devo creare altra fase. Altrimenti già creata da prima
if bSomeFeatureDown or bSomeFeatureSide then
BeamLib.AddPhaseWithRawParts( PARTS[nPart].idRaw, BeamData.ptOriXR, BeamData.dPosXR, 0)
nPhase = EgtGetCurrPhase()
nDispId = EgtGetPhaseDisposition( nPhase)
EgtSetInfo( nDispId, 'ORD', nOrd)
-- se c'è già stata seoparazione
if bSplitAlreadyExecuted then
EgtSetInfo( nDispId, 'TYPE', 'END2')
else
EgtSetInfo( nDispId, 'TYPE', 'MID')
end
end
-- TODO se bSomeFeatureDown or bSomeFeatureSide = true, allora devo creare altra fase. Altrimenti già creata da prima
-- devo sapere se c'è stata separazione, perchè devo scrivere END o END2, ritorno info da MachiningLib.AddOperations?
BeamLib.AddPhaseWithRawParts( PARTS[nPart].idRaw, BeamData.ptOriXR, BeamData.dPosXR, 0)
-- aggiunta lavorazioni in ultima fase
MachiningLib.AddOperations( MACHININGS, PARTS[nPart], 'STD')