diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 1a7261e..e521a70 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -861,6 +861,11 @@ local function GetIndexBestStrategyFromComparison( AvailableStrategies, nIndex1, ( AvailableStrategies[nIndex2].Result.sStatus == 'Not-Completed' and AvailableStrategies[nIndex1].Result.sStatus == 'Not-Applicable') then dChosenIndex = nIndex2 else + -- TODO gestire parametri scelta strategia + -- 1) tempo + -- 2) qualità + -- 3) prima strategia nell'ordine tra quelle disponibili + -- se le due strategie hanno stesso stato e sono entrambe applicabili (quindi entrambe complete o entrambe non-complete) if AvailableStrategies[nIndex1].Result.sStatus ~= 'Not-Applicable' and AvailableStrategies[nIndex2].Result.sStatus ~= 'Not-Applicable' and AvailableStrategies[nIndex1].Result.sStatus == AvailableStrategies[nIndex2].Result.sStatus then diff --git a/LuaLibs/FeatureLib.lua b/LuaLibs/FeatureLib.lua index 373fb83..7ae3995 100644 --- a/LuaLibs/FeatureLib.lua +++ b/LuaLibs/FeatureLib.lua @@ -357,6 +357,7 @@ function FeatureLib.GetTenonData( Proc) dMaxDist = 2 * ( b3Ten:getRadius() - b3TenonAux:getRadius()) end + FeatureExtraInfo.dTenonPathLength = EgtCurveLength( idAux) FeatureExtraInfo.dTenonLength = dTenH FeatureExtraInfo.dTenonMaxDist = dMaxDist FeatureExtraInfo.vtTenonN = vtN diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 79336d7..6b5215a 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -1224,6 +1224,9 @@ function MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machining, Part) Machining.CloneStepsRadial = {} Machining.CloneStepsRadial.nCount = 1 end + if not Machining.Steps.nCount then + Machining.Steps.nCount = 1 + end -- stima tempi di lavorazione per i diversi tratti local dTimeToMachineLeadIn = Machining.LeadIn.dTotalEstimatedDistance / dToolStartFeed local dTimeToMachineLeadOut = Machining.LeadOut.dTotalEstimatedDistance / dToolEndFeed @@ -1258,7 +1261,7 @@ function MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machining, Part) -- TODO le chiamate alla pocketing vanno unificate e uniformate local ProcTm = FeatureLib.GetProcFromTrimesh( Machining.Geometry[1][1], Part) local dDepthToMachine = min( ProcTm.Faces[Machining.Geometry[1][2] + 1].dElevation, ( Machining.dMaxElev or ProcTm.Faces[Machining.Geometry[1][2] + 1].dElevation)) - ( max( 0, Machining.dResidualDepth or 0)) - local nSteps = ceil( ( dDepthToMachine - 50 * GEO.EPS_SMALL) / TOOLS[Machining.nToolIndex].dStep) + local nSteps = max( ceil( ( dDepthToMachine - 50 * GEO.EPS_SMALL) / TOOLS[Machining.nToolIndex].dStep), 1) local nAddGroupId = BeamLib.GetAddGroup( Part.id) -- TODO in futuro creare flatregion (se ci fossero isole il calcolo del percorso non sarebbe corretto) local idFaceContour = EgtExtractSurfTmFacetLoops( ProcTm.id, Machining.Geometry[1][2], nAddGroupId) diff --git a/Strategies/Standard/STR0001/STR0001.lua b/Strategies/Standard/STR0001/STR0001.lua index 55b8e0c..aaab70e 100644 --- a/Strategies/Standard/STR0001/STR0001.lua +++ b/Strategies/Standard/STR0001/STR0001.lua @@ -18,9 +18,9 @@ local Strategy = {} ------------------------------------------------------------------------------------------------------------- local function GetTenonStrategy( Proc, Part) local Machining = {} - Machining.Milling = {} - Machining.Cutting = {} - Machining.Pocketing = {} + Machining.Milling = MachiningLib.InitMachiningParameters( MCH_MY.MILLING) + Machining.Cutting = MachiningLib.InitMachiningParameters( MCH_MY.MILLING) + Machining.Pocketing = MachiningLib.InitMachiningParameters( MCH_MY.POCKETING) local Result = {} Result.Milling = {} Result.Cutting = {} @@ -80,7 +80,25 @@ local function GetTenonStrategy( Proc, Part) local ParametersMRR = {} ParametersMRR.nToolIndex = Machining.Cutting.ToolInfo.nToolIndex Result.Cutting.dMRR = MachiningLib.GetToolMRR( ParametersMRR) - Result.Cutting.sStatus = 'Completed' + Machining.Cutting.sStatus = 'Completed' + Machining.Cutting.Steps = {} + Machining.Cutting.LeadIn = {} + Machining.Cutting.nType = MCH_MY.POCKETING + Machining.Cutting.nSubType = MCH_POCK_SUB.SPIRALIN + Machining.Cutting.LeadIn.nType = MCH_POCK_LI.ZIGZAG + Machining.Cutting.Steps.dStep = TOOLS[Machining.Cutting.ToolInfo.nToolIndex].dStep + Machining.Cutting.Steps.dSideStep = TOOLS[Machining.Cutting.ToolInfo.nToolIndex].dSideStep + Machining.Cutting.nToolIndex = Machining.Cutting.ToolInfo.nToolIndex + Machining.Cutting.LeadIn.dTangentDistance = TOOLS[Machining.Cutting.ToolInfo.nToolIndex].dDiameter/2 + Machining.Cutting.LeadIn.dElevation = TOOLS[Machining.Cutting.ToolInfo.nToolIndex].dDiameter/2 + Machining.Cutting.sDepth = 0 + Machining.Cutting.Geometry = {{ Strategy.idTenonCutPlane, 0}} + Machining.Cutting.vtToolDirection = Proc.FeatureInfo.vtTenonN + if Proc.AffectedFaces.bLeft and Strategy.bCanMoveAfterSplit then + Machining.Cutting.sStage = 'AfterTail' + end + -- tempo di svuotatura + Result.Cutting.dTimeToMachine = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machining.Cutting, Part) end end @@ -101,6 +119,56 @@ local function GetTenonStrategy( Proc, Part) -- l'utensile a coda di rondine deve per forza riuscire a lavorare tutto, altrimenti errore if Machining.Milling.ToolInfo.dResidualDepth < 10 * GEO.EPS_SMALL then Result.Milling.sStatus = 'Completed' + -- aggiungo geometria e imposto tutti i dati + Machining.Milling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} + Machining.Milling.nToolIndex = Machining.Milling.ToolInfo.nToolIndex + Machining.Milling.nType = MCH_MY.MILLING + Machining.Milling.vtToolDirection = Proc.FeatureInfo.vtTenonN + Machining.Milling.sDepth = min( -Machining.Milling.ToolInfo.dResidualDepth, 0) + + -- LeadIn / LeadOut + Machining.Milling.LeadIn = {} + Machining.Milling.LeadOut = {} + Machining.Milling.LeadIn.nType = MCH_MILL_LI.TANGENT + Machining.Milling.LeadOut.nType = MCH_MILL_LI.TANGENT + Machining.Milling.LeadIn.dTangentDistance = TOOLS[Machining.Milling.ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC + Machining.Milling.LeadIn.dPerpDistance = TOOLS[Machining.Milling.ToolInfo.nToolIndex].dSideStep + Machining.Milling.LeadOut.dTangentDistance = TOOLS[Machining.Milling.ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC + Machining.Milling.LeadOut.dPerpDistance = TOOLS[Machining.Milling.ToolInfo.nToolIndex].dSideStep + Machining.Milling.dLengthToMachine = Proc.FeatureInfo.dTenonPathLength + + if Proc.AffectedFaces.bLeft and Strategy.bCanMoveAfterSplit then + Machining.Milling.sStage = 'AfterTail' + end + + -- sistemo il lato e la direzione di lavoro + Machining.Milling.bInvert = EgtIf( TOOLS[Machining.Milling.ToolInfo.nToolIndex].bIsCCW, false, true) + Machining.Milling.nWorkside = EgtIf( TOOLS[Machining.Milling.ToolInfo.nToolIndex].bIsCCW, MCH_MILL_WS.RIGHT, MCH_MILL_WS.LEFT) + + Machining.Milling.sUserNotes = EgtSetVal( 'MaxElev', EgtNumToString( Proc.FeatureInfo.dTenonLength, 1)) .. ';' + + -- TODO calcolare SCC + + -- passate con sovramateriale + Machining.nMillingPathsNeeded = ceil( Proc.FeatureInfo.dTenonMaxDist / TOOLS[Machining.Milling.ToolInfo.nToolIndex].dSideStep) + Machining.Milling.AuxiliaryData = {} + Machining.Milling.AuxiliaryData.Clones = {} + for i = Machining.nMillingPathsNeeded, 1, -1 do + -- il primo è il passaggio più esterno + local nIndexClones = Machining.nMillingPathsNeeded - i + 1 + -- suddivido step in base al numero passate da fare + local dRealSideStep = floor( Proc.FeatureInfo.dTenonMaxDist / Machining.nMillingPathsNeeded) + -- cambia solo sovrmateriale radiale + Machining.Milling.AuxiliaryData.Clones[nIndexClones] = {} + -- ultima passata con sovramateriale impostato + if i == 1 then + Machining.Milling.AuxiliaryData.Clones[nIndexClones].dRadialOffset = Strategy.Parameters.dOverMatOnRadius + else + Machining.Milling.AuxiliaryData.Clones[nIndexClones].dRadialOffset = ( i - 1) * dRealSideStep + end + end + -- tempo di svuotatura + Result.Milling.dTimeToMachine = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machining.Milling, Part) else Machining.Milling.bIsApplicable = false end @@ -109,7 +177,6 @@ local function GetTenonStrategy( Proc, Part) -- === ricerca utensile di svuotatura (se richiesto e se è andata a buon fine la coda di rondine) === if Machining.Milling.bIsApplicable then - Machining.nMillingPathsNeeded = ceil( Proc.FeatureInfo.dTenonMaxDist / TOOLS[Machining.Milling.ToolInfo.nToolIndex].dSideStep) if Machining.nMillingPathsNeeded <= Strategy.Parameters.nMaxMillingPaths then Machining.Pocketing.bNotNeeded = true Machining.Pocketing.dMRR = Machining.Milling.dMRR @@ -143,7 +210,7 @@ local function GetTenonStrategy( Proc, Part) end end end - + return Machining, Result end @@ -186,6 +253,7 @@ local function GetTenonMachiningResult( Proc, Result) TotalResult.dMRR = ( Result.Milling.dMRR + Result.Cutting.dMRR) / 2 TotalResult.nQuality = FeatureLib.GetFeatureQuality( EgtIf( Strategy.Machining.bCuttingWithMill, 'Mill,Mill', 'Mill,Blade')) TotalResult.nFeatureRotationIndex = GetFeatureRotationIndex( Proc) + TotalResult.dTimeToMachine = Result.Milling.dTimeToMachine + Result.Cutting.dTimeToMachine TotalResult.sInfo = '' -- lavorazione incompleta elseif Strategy.Machining.Cutting.bIsApplicable then @@ -194,6 +262,7 @@ local function GetTenonMachiningResult( Proc, Result) TotalResult.dMRR = Result.Cutting.dMRR TotalResult.nQuality = FeatureLib.GetFeatureQuality( EgtIf( Strategy.Machining.bCuttingWithMill, 'Mill', 'Blade')) TotalResult.sInfo = 'Tenon not completed' + TotalResult.dTimeToMachine = Result.Cutting.dTimeToMachine -- strategia non applicabile, manca il taglio di lama sulla lunghezza del tenone else TotalResult = FeatureLib.GetStrategyResultNotApplicable( 'Error on Tenon cutting') @@ -210,6 +279,7 @@ function STR0001.Make( bAddMachining, Proc, Part, CustomParameters) Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( Proc, CustomParameters, StrategyLib.Config) Strategy.Machining = {} Strategy.Result = {} + Strategy.Result.dTimeToMachine = 0 local bAreAllMachiningsAdded = true local Results = {} @@ -236,26 +306,8 @@ function STR0001.Make( bAddMachining, Proc, Part, CustomParameters) if bAddMachining and Strategy.Result.sStatus ~= 'Not-Applicable' then -- taglio in lunghezza sul tenone if Strategy.Machining.Cutting.bIsApplicable then - OptionalParameters = {} - -- se cutting da fare come svuotatura if Strategy.Machining.bCuttingWithMill then - Strategy.Machining.Cutting.Steps = {} - Strategy.Machining.Cutting.LeadIn = {} - Strategy.Machining.Cutting.nType = MCH_MY.POCKETING - Strategy.Machining.Cutting.nSubType = MCH_POCK_SUB.SPIRALIN - Strategy.Machining.Cutting.LeadIn.nType = MCH_POCK_LI.ZIGZAG - Strategy.Machining.Cutting.Steps.dStep = TOOLS[Strategy.Machining.Cutting.ToolInfo.nToolIndex].dStep - Strategy.Machining.Cutting.Steps.dSideStep = TOOLS[Strategy.Machining.Cutting.ToolInfo.nToolIndex].dSideStep - Strategy.Machining.Cutting.nToolIndex = Strategy.Machining.Cutting.ToolInfo.nToolIndex - Strategy.Machining.Cutting.LeadIn.dTangentDistance = TOOLS[Strategy.Machining.Cutting.ToolInfo.nToolIndex].dDiameter/2 - Strategy.Machining.Cutting.LeadIn.dElevation = TOOLS[Strategy.Machining.Cutting.ToolInfo.nToolIndex].dDiameter/2 - Strategy.Machining.Cutting.sDepth = 0 - Strategy.Machining.Cutting.Geometry = {{ Strategy.idTenonCutPlane, 0}} - Strategy.Machining.Cutting.vtToolDirection = Proc.FeatureInfo.vtTenonN - if Proc.AffectedFaces.bLeft and Strategy.bCanMoveAfterSplit then - Strategy.Machining.Cutting.sStage = 'AfterTail' - end bAreAllMachiningsAdded = MachiningLib.AddMachinings( Proc, Strategy.Machining.Cutting) -- taglio di lama @@ -276,60 +328,13 @@ function STR0001.Make( bAddMachining, Proc, Part, CustomParameters) -- passaggio sul profilo if Strategy.Machining.Milling.bIsApplicable then - local AuxiliaryData = {} -- se molti passaggi richiesti, si fa svuotatura -- TODO in attesa delle svuotature, si fanno passaggi senza limiti sul numero massimo. Poi togliere il FALSE nella condizione. if false and Strategy.Machining.nMillingPathsNeeded > Strategy.Parameters.nMaxMillingPaths then -- TODO. SERVONO NUOVE SVUOTATURE!!!! else - -- aggiungo geometria - Strategy.Machining.Milling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} - Strategy.Machining.Milling.nToolIndex = Strategy.Machining.Milling.ToolInfo.nToolIndex - Strategy.Machining.Milling.nType = MCH_MY.MILLING - Strategy.Machining.Milling.vtToolDirection = Proc.FeatureInfo.vtTenonN - Strategy.Machining.Milling.sDepth = min( -Strategy.Machining.Milling.ToolInfo.dResidualDepth, 0) - - -- LeadIn / LeadOut - Strategy.Machining.Milling.LeadIn = {} - Strategy.Machining.Milling.LeadOut = {} - Strategy.Machining.Milling.LeadIn.nType = MCH_MILL_LI.TANGENT - Strategy.Machining.Milling.LeadOut.nType = MCH_MILL_LI.TANGENT - Strategy.Machining.Milling.LeadIn.dTangentDistance = TOOLS[Strategy.Machining.Milling.ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC - Strategy.Machining.Milling.LeadIn.dPerpDistance = TOOLS[Strategy.Machining.Milling.ToolInfo.nToolIndex].dSideStep - Strategy.Machining.Milling.LeadOut.dTangentDistance = TOOLS[Strategy.Machining.Milling.ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC - Strategy.Machining.Milling.LeadOut.dPerpDistance = TOOLS[Strategy.Machining.Milling.ToolInfo.nToolIndex].dSideStep - - if Proc.AffectedFaces.bLeft and Strategy.bCanMoveAfterSplit then - Strategy.Machining.Milling.sStage = 'AfterTail' - end - - -- sistemo il lato e la direzione di lavoro - Strategy.Machining.Milling.bInvert = EgtIf( TOOLS[Strategy.Machining.Milling.ToolInfo.nToolIndex].bIsCCW, false, true) - Strategy.Machining.Milling.nWorkside = EgtIf( TOOLS[Strategy.Machining.Milling.ToolInfo.nToolIndex].bIsCCW, MCH_MILL_WS.RIGHT, MCH_MILL_WS.LEFT) - - Strategy.Machining.Milling.sUserNotes = EgtSetVal( 'MaxElev', EgtNumToString( Proc.FeatureInfo.dTenonLength, 1)) .. ';' - - -- TODO calcolare SCC - - -- passate con sovramateriale - AuxiliaryData.Clones = {} - for i = Strategy.Machining.nMillingPathsNeeded, 1, -1 do - -- il primo è il passaggio più esterno - local nIndexClones = Strategy.Machining.nMillingPathsNeeded - i + 1 - -- suddivido step in base al numero passate da fare - local dRealSideStep = floor( Proc.FeatureInfo.dTenonMaxDist / Strategy.Machining.nMillingPathsNeeded) - -- cambia solo sovrmateriale radiale - AuxiliaryData.Clones[nIndexClones] = {} - -- ultima passata con sovramateriale impostato - if i == 1 then - AuxiliaryData.Clones[nIndexClones].dRadialOffset = Strategy.Parameters.dOverMatOnRadius - else - AuxiliaryData.Clones[nIndexClones].dRadialOffset = ( i - 1) * dRealSideStep - end - end - -- aggiunge lavorazione - bAreAllMachiningsAdded = MachiningLib.AddMachinings( Proc, Strategy.Machining.Milling, AuxiliaryData) + bAreAllMachiningsAdded = MachiningLib.AddMachinings( Proc, Strategy.Machining.Milling, Strategy.Machining.Milling.AuxiliaryData) end end end diff --git a/Strategies/Standard/STR0006/STR0006.lua b/Strategies/Standard/STR0006/STR0006.lua index 091f676..607e3a1 100644 --- a/Strategies/Standard/STR0006/STR0006.lua +++ b/Strategies/Standard/STR0006/STR0006.lua @@ -18,8 +18,8 @@ local Strategy = {} ------------------------------------------------------------------------------------------------------------- local function GetTenonStrategy( Proc, Part) local Machining = {} - Machining.Milling = {} - Machining.Cutting = {} + Machining.Milling = MachiningLib.InitMachiningParameters( MCH_MY.MILLING) + Machining.Cutting = MachiningLib.InitMachiningParameters( MCH_MY.MILLING) local Result = {} Result.Milling = {} Result.Cutting = {} @@ -96,6 +96,69 @@ local function GetTenonStrategy( Proc, Part) Result.Milling.sStatus = 'Not-Completed' Result.Milling.sInfo = 'Tenon not complete, left ' .. ceil( Machining.Milling.ToolInfo.dResidualDepth) .. 'mm' end + -- aggiungo geometria + Machining.Milling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} + Machining.Milling.nToolIndex = Machining.Milling.ToolInfo.nToolIndex + Machining.Milling.nType = MCH_MY.MILLING + Machining.Milling.vtToolDirection = Proc.FeatureInfo.vtTenonN + Machining.Milling.sDepth = min( -Machining.Milling.ToolInfo.dResidualDepth, 0) + Machining.Milling.dStartSafetyLength = BeamData.COLL_SIC + Machining.Milling.Steps = {} + -- se servono passate con sovramateriale e lunghezza tenone entro il massimo materiale, si annulla lo step + if Machining.nMillingPathsNeeded > 1 and Proc.FeatureInfo.dTenonLength < TOOLS[Machining.Milling.ToolInfo.nToolIndex].dMaxMaterial - BeamData.COLL_SIC then + Machining.Milling.Steps.dStep = 0 + else + Machining.Milling.Steps.dStep = TOOLS[Machining.Milling.ToolInfo.nToolIndex].dStep + end + Machining.Milling.Steps.nStepType = MCH_MILL_ST.ONEWAY + + -- LeadIn / LeadOut + Machining.Milling.LeadIn = {} + Machining.Milling.LeadOut = {} + Machining.Milling.LeadIn.nType = MCH_MILL_LI.TANGENT + Machining.Milling.LeadOut.nType = MCH_MILL_LI.TANGENT + Machining.Milling.LeadIn.dTangentDistance = TOOLS[Machining.Milling.ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC + Machining.Milling.LeadIn.dPerpDistance = TOOLS[Machining.Milling.ToolInfo.nToolIndex].dSideStep + Machining.Milling.LeadOut.dTangentDistance = TOOLS[Machining.Milling.ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC + Machining.Milling.LeadOut.dPerpDistance = TOOLS[Machining.Milling.ToolInfo.nToolIndex].dSideStep + Machining.Milling.dLengthToMachine = Proc.FeatureInfo.dTenonPathLength + + if Proc.AffectedFaces.bLeft and Strategy.bCanMoveAfterSplit then + Machining.Milling.sStage = 'AfterTail' + end + + -- sistemo il lato e la direzione di lavoro + Machining.Milling.bInvert = EgtIf( TOOLS[Machining.Milling.ToolInfo.nToolIndex].bIsCCW, false, true) + Machining.Milling.nWorkside = EgtIf( TOOLS[Machining.Milling.ToolInfo.nToolIndex].bIsCCW, MCH_MILL_WS.RIGHT, MCH_MILL_WS.LEFT) + + Machining.Milling.sUserNotes = EgtSetVal( 'MaxElev', EgtNumToString( Proc.FeatureInfo.dTenonLength, 1)) .. ';' + + -- SCC : si tiene il motore sempre più verso l'esterno + if Proc.AffectedFaces.bLeft then + Machining.Milling.nSCC = MCH_SCC.ADIR_XM + else + Machining.Milling.nSCC = MCH_SCC.ADIR_XP + end + + -- passate con sovramateriale + Machining.Milling.AuxiliaryData = {} + Machining.Milling.AuxiliaryData.Clones = {} + for i = Machining.nMillingPathsNeeded, 1, -1 do + -- il primo è il passaggio più esterno + local nIndexClones = Machining.nMillingPathsNeeded - i + 1 + -- suddivido step in base al numero passate da fare + local dRealSideStep = floor( Proc.FeatureInfo.dTenonMaxDist / Machining.nMillingPathsNeeded) + -- cambia solo sovrmateriale radiale + Machining.Milling.AuxiliaryData.Clones[nIndexClones] = {} + -- ultima passata con sovramateriale impostato + if i == 1 then + Machining.Milling.AuxiliaryData.Clones[nIndexClones].dRadialOffset = Strategy.Parameters.dOverMatOnRadius + else + Machining.Milling.AuxiliaryData.Clones[nIndexClones].dRadialOffset = ( i - 1) * dRealSideStep + end + end + -- tempo di svuotatura + Result.Milling.dTimeToMachine = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machining.Milling, Part) end end @@ -104,6 +167,24 @@ local function GetTenonStrategy( Proc, Part) Machining.Cutting.bIsApplicable = true Machining.Cutting.ToolInfo = Machining.Milling.ToolInfo Result.Cutting.dMRR = Result.Milling.dMRR + Machining.Cutting.Steps = {} + Machining.Cutting.LeadIn = {} + Machining.Cutting.nType = MCH_MY.POCKETING + Machining.Cutting.nSubType = MCH_POCK_SUB.SPIRALIN + Machining.Cutting.LeadIn.nType = MCH_POCK_LI.ZIGZAG + Machining.Cutting.Steps.dStep = TOOLS[Machining.Cutting.ToolInfo.nToolIndex].dStep + Machining.Cutting.Steps.dSideStep = TOOLS[Machining.Cutting.ToolInfo.nToolIndex].dSideStep + Machining.Cutting.nToolIndex = Machining.Cutting.ToolInfo.nToolIndex + Machining.Cutting.LeadIn.dTangentDistance = TOOLS[Machining.Cutting.ToolInfo.nToolIndex].dDiameter/2 + Machining.Cutting.LeadIn.dElevation = TOOLS[Machining.Cutting.ToolInfo.nToolIndex].dDiameter/2 + Machining.Cutting.sDepth = 0 + Machining.Cutting.Geometry = {{ Strategy.idTenonCutPlane, 0}} + Machining.Cutting.vtToolDirection = Proc.FeatureInfo.vtTenonN + if Proc.AffectedFaces.bLeft and Strategy.bCanMoveAfterSplit then + Machining.Cutting.sStage = 'AfterTail' + end + -- tempo di svuotatura + Result.Cutting.dTimeToMachine = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machining.Cutting, Part) end end return Machining, Result @@ -147,6 +228,7 @@ local function GetTenonMachiningResult( Proc, Result) TotalResult.dMRR = ( Result.Milling.dMRR + Result.Cutting.dMRR) / 2 TotalResult.nQuality = FeatureLib.GetFeatureQuality( EgtIf( Strategy.Machining.bCuttingWithMill, 'Mill,Mill', 'Mill,Blade')) TotalResult.nFeatureRotationIndex = GetFeatureRotationIndex( Proc) + TotalResult.dTimeToMachine = Result.Milling.dTimeToMachine + Result.Cutting.dTimeToMachine TotalResult.sInfo = '' -- lavorazione incompleta elseif Strategy.Machining.Cutting.bIsApplicable then @@ -155,6 +237,7 @@ local function GetTenonMachiningResult( Proc, Result) TotalResult.dMRR = Result.Cutting.dMRR TotalResult.nQuality = FeatureLib.GetFeatureQuality( EgtIf( Strategy.Machining.bCuttingWithMill, 'Mill', 'Blade')) TotalResult.sInfo = 'Tenon not completed' + TotalResult.dTimeToMachine = Result.Cutting.dTimeToMachine -- strategia non applicabile, manca il taglio di lama sulla lunghezza del tenone else TotalResult = FeatureLib.GetStrategyResultNotApplicable( 'Error on Tenon cutting') @@ -201,22 +284,6 @@ function STR0006.Make( bAddMachining, Proc, Part, CustomParameters) -- se cutting da fare come svuotatura if Strategy.Machining.bCuttingWithMill then - Strategy.Machining.Cutting.Steps = {} - Strategy.Machining.Cutting.LeadIn = {} - Strategy.Machining.Cutting.nType = MCH_MY.POCKETING - Strategy.Machining.Cutting.nSubType = MCH_POCK_SUB.SPIRALIN - Strategy.Machining.Cutting.LeadIn.nType = MCH_POCK_LI.ZIGZAG - Strategy.Machining.Cutting.Steps.dStep = TOOLS[Strategy.Machining.Cutting.ToolInfo.nToolIndex].dStep - Strategy.Machining.Cutting.Steps.dSideStep = TOOLS[Strategy.Machining.Cutting.ToolInfo.nToolIndex].dSideStep - Strategy.Machining.Cutting.nToolIndex = Strategy.Machining.Cutting.ToolInfo.nToolIndex - Strategy.Machining.Cutting.LeadIn.dTangentDistance = TOOLS[Strategy.Machining.Cutting.ToolInfo.nToolIndex].dDiameter/2 - Strategy.Machining.Cutting.LeadIn.dElevation = TOOLS[Strategy.Machining.Cutting.ToolInfo.nToolIndex].dDiameter/2 - Strategy.Machining.Cutting.sDepth = 0 - Strategy.Machining.Cutting.Geometry = {{ Strategy.idTenonCutPlane, 0}} - Strategy.Machining.Cutting.vtToolDirection = Proc.FeatureInfo.vtTenonN - if Proc.AffectedFaces.bLeft and Strategy.bCanMoveAfterSplit then - Strategy.Machining.Cutting.sStage = 'AfterTail' - end bAreAllMachiningsAdded = MachiningLib.AddMachinings( Proc, Strategy.Machining.Cutting) -- taglio di lama @@ -237,27 +304,11 @@ function STR0006.Make( bAddMachining, Proc, Part, CustomParameters) -- passaggio sul profilo if Strategy.Machining.Milling.bIsApplicable then - local AuxiliaryData = {} -- se molti passaggi richiesti, si fa svuotatura -- TODO in attesa delle svuotature, si fanno passaggi senza limiti sul numero massimo. Poi togliere il FALSE nella condizione. if false and Strategy.Machining.nMillingPathsNeeded > Strategy.Parameters.nMaxMillingPaths then -- TODO. SERVONO NUOVE SVUOTATURE!!!! else - -- aggiungo geometria - Strategy.Machining.Milling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}} - Strategy.Machining.Milling.nToolIndex = Strategy.Machining.Milling.ToolInfo.nToolIndex - Strategy.Machining.Milling.nType = MCH_MY.MILLING - Strategy.Machining.Milling.vtToolDirection = Proc.FeatureInfo.vtTenonN - Strategy.Machining.Milling.sDepth = min( -Strategy.Machining.Milling.ToolInfo.dResidualDepth, 0) - Strategy.Machining.Milling.dStartSafetyLength = BeamData.COLL_SIC - Strategy.Machining.Milling.Steps = {} - -- se servono passate con sovramateriale e lunghezza tenone entro il massimo materiale, si annulla lo step - if Strategy.Machining.nMillingPathsNeeded > 1 and Proc.FeatureInfo.dTenonLength < TOOLS[Strategy.Machining.Milling.ToolInfo.nToolIndex].dMaxMaterial - BeamData.COLL_SIC then - Strategy.Machining.Milling.Steps.dStep = 0 - else - Strategy.Machining.Milling.Steps.dStep = TOOLS[Strategy.Machining.Milling.ToolInfo.nToolIndex].dStep - end - Strategy.Machining.Milling.Steps.nStepType = MCH_MILL_ST.ONEWAY local nNearSide -- +3 = Z+, -3 = Z- local bShortPart = ( Part.b3Part:getDimX() < BeamData.LEN_SHORT_PART) @@ -276,52 +327,9 @@ function STR0006.Make( bAddMachining, Proc, Part, CustomParameters) end BeamLib.PutStartNearestToEdge( Proc.FeatureInfo.idAddAuxGeom, Part.b3Raw, Proc.FeatureInfo.dTenonMaxDist, nNearSide) - -- LeadIn / LeadOut - Strategy.Machining.Milling.LeadIn = {} - Strategy.Machining.Milling.LeadOut = {} - Strategy.Machining.Milling.LeadIn.nType = MCH_MILL_LI.TANGENT - Strategy.Machining.Milling.LeadOut.nType = MCH_MILL_LI.TANGENT - Strategy.Machining.Milling.LeadIn.dTangentDistance = TOOLS[Strategy.Machining.Milling.ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC - Strategy.Machining.Milling.LeadIn.dPerpDistance = TOOLS[Strategy.Machining.Milling.ToolInfo.nToolIndex].dSideStep - Strategy.Machining.Milling.LeadOut.dTangentDistance = TOOLS[Strategy.Machining.Milling.ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC - Strategy.Machining.Milling.LeadOut.dPerpDistance = TOOLS[Strategy.Machining.Milling.ToolInfo.nToolIndex].dSideStep - - if Proc.AffectedFaces.bLeft and Strategy.bCanMoveAfterSplit then - Strategy.Machining.Milling.sStage = 'AfterTail' - end - - -- sistemo il lato e la direzione di lavoro - Strategy.Machining.Milling.bInvert = EgtIf( TOOLS[Strategy.Machining.Milling.ToolInfo.nToolIndex].bIsCCW, false, true) - Strategy.Machining.Milling.nWorkside = EgtIf( TOOLS[Strategy.Machining.Milling.ToolInfo.nToolIndex].bIsCCW, MCH_MILL_WS.RIGHT, MCH_MILL_WS.LEFT) - - Strategy.Machining.Milling.sUserNotes = EgtSetVal( 'MaxElev', EgtNumToString( Proc.FeatureInfo.dTenonLength, 1)) .. ';' - - -- SCC : si tiene il motore sempre più verso l'esterno - if Proc.AffectedFaces.bLeft then - Strategy.Machining.Milling.nSCC = MCH_SCC.ADIR_XM - else - Strategy.Machining.Milling.nSCC = MCH_SCC.ADIR_XP - end - - -- passate con sovramateriale - AuxiliaryData.Clones = {} - for i = Strategy.Machining.nMillingPathsNeeded, 1, -1 do - -- il primo è il passaggio più esterno - local nIndexClones = Strategy.Machining.nMillingPathsNeeded - i + 1 - -- suddivido step in base al numero passate da fare - local dRealSideStep = floor( Proc.FeatureInfo.dTenonMaxDist / Strategy.Machining.nMillingPathsNeeded) - -- cambia solo sovrmateriale radiale - AuxiliaryData.Clones[nIndexClones] = {} - -- ultima passata con sovramateriale impostato - if i == 1 then - AuxiliaryData.Clones[nIndexClones].dRadialOffset = Strategy.Parameters.dOverMatOnRadius - else - AuxiliaryData.Clones[nIndexClones].dRadialOffset = ( i - 1) * dRealSideStep - end - end -- aggiunge lavorazione - bAreAllMachiningsAdded = MachiningLib.AddMachinings( Proc, Strategy.Machining.Milling, AuxiliaryData) + bAreAllMachiningsAdded = MachiningLib.AddMachinings( Proc, Strategy.Machining.Milling, Strategy.Machining.Milling.AuxiliaryData) end end end