diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 5659031..ad58295 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -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') diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 45fcd2d..5276615 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -353,6 +353,7 @@ function MachiningLib.AddOperations( vProc, Part, sRotation) local nErr local sErr = '' local bAreAllMachiningApplyOk = true + local bSplitExecuted = false -- parametri generali lavorazione local MachiningParameters = { @@ -534,6 +535,7 @@ function MachiningLib.AddOperations( vProc, Part, sRotation) -- TODO è giusto inserire queste info alla fine della lavorazione? oppure conviene creare un record in MACHININGS apposito per la disposizione? -- se era taglio di separazione, aggiungo nuova fase if MACHININGS[i].AuxiliaryData.bAddNewPhase then + bSplitExecuted = true BeamLib.AddPhaseWithRawParts( MACHININGS[i].Proc.idRaw, BeamData.ptOriXR, BeamData.dPosXR, BeamData.RAW_OFFSET) -- se grezzo successivo senza pezzi e finale, va tolto local nNextRawId = EgtGetNextRawPart( MACHININGS[i].Proc.idRaw) @@ -555,12 +557,12 @@ function MachiningLib.AddOperations( vProc, Part, sRotation) EgtSetInfo( nDispId, 'ORD', MACHININGS[i].Proc.nIndexPartInParts) end else - return false, 'UNEXPECTED ERROR: Error on creating machining' + return false, 'UNEXPECTED ERROR: Error on creating machining', bSplitExecuted end end end end - return bAreAllMachiningApplyOk, sErr + return bAreAllMachiningApplyOk, sErr, bSplitExecuted end -------------------------------------------------------------------------------------------------------------