diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 59c7c58..787c046 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -135,8 +135,6 @@ function BeamExec.GetToolsFromDB() if not Tool.SetupInfo.dMaxMatDecrease then Tool.SetupInfo.dMaxMatDecrease = 0 end - -- TODO sostituire la qualità numerica con una stringa?? - Tool.nQuality = 1 Tool.sUUID = EgtTdbGetCurrToolParam( MCH_TP.UUID) Tool.sUserNotes = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES) Tool.dMaxDepth = EgtTdbGetCurrToolMaxDepth() or Tool.dMaxMaterial @@ -166,14 +164,12 @@ function BeamExec.GetToolsFromDB() Tool.dSideStep = max( EgtGetValInNotes( Tool.sUserNotes, 'SIDESTEP', 'd') or floor( Tool.dDiameter / 3), 1) -- se non settato nell'utensile, considero un terzo del diametro, almeno 1mm Tool.bIsPen = abs( Tool.dSpeed) < 5 Tool.dPerformanceIndex = ( Tool.dDiameter * Tool.dMaxMaterial) / Tool.dLength - Tool.nQuality = 4 -- recupero parametri propri delle lame elseif sToolFamily == 'SAWBLADE' then Tool.bIsUsedForLongCut = EgtGetValInNotes( Tool.sUserNotes, 'LONGCUT') == 1 or false -- false come valore di default Tool.dStep = EgtGetValInNotes( Tool.sUserNotes, 'STEP', 'd') or Tool.dThickness -- se non settato nell'utensile, considero lo spessore lama Tool.dSideStep = EgtGetValInNotes( Tool.sUserNotes, 'SIDESTEP', 'd') or Tool.dMaxMaterial -- se non settato nell'utensile, considero il massimo materiale Tool.dPerformanceIndex = 1 / ( Tool.dDiameter * Tool.dLength) - Tool.nQuality = 5 -- recupero parametri propri delle motoseghe elseif sToolFamily == 'MORTISE' then Tool.dDistance = EgtTdbGetCurrToolParam( MCH_TP.DIST) or 90 -- 90mm dimensione standard aggregato catena @@ -184,14 +180,12 @@ function BeamExec.GetToolsFromDB() Tool.dCornerRadius = EgtTdbGetCurrToolParam( MCH_TP.CORNRAD) Tool.dWidth = Tool.dDiameter Tool.dPerformanceIndex = 1 / Tool.dLength - Tool.nQuality = 2 end -- drillbit else Tool.dStep = EgtGetValInNotes( Tool.sUserNotes, 'STEP', 'd') or ( Tool.dMaxMaterial / 3) -- se non settato nell'utensile, considero un terzo del tagliente Tool.dSideStep = Tool.dDiameter -- si utilizza SOLO per i calcoli del MRR Tool.dPerformanceIndex = Tool.dDiameter / Tool.dLength - Tool.nQuality = 4 end -- se tutti i dati necessari sono disponibili, inserisco utensile nella lista globale degli utensili disponibili diff --git a/LuaLibs/FeatureLib.lua b/LuaLibs/FeatureLib.lua index ba5725a..10ea6ae 100644 --- a/LuaLibs/FeatureLib.lua +++ b/LuaLibs/FeatureLib.lua @@ -573,49 +573,64 @@ function FeatureLib.GetFeatureCompletionIndex( dCompletionPercentage) end ------------------------------------------------------------------------------------------------------------- --- TODO funzione da rivedere. Se è fatto di fresa con antischeggia deve avere qualità massima, o comunque più alta di fresa normale --- funzione che restituisce qualità della lavorazione in base agli utensili utilizzati -function FeatureLib.GetFeatureQuality( sTypeTools) - local nQuality = 5 - local TypeTools = EgtSplitString( sTypeTools) - - -- indice in base a utensile - for i=1, #TypeTools do - if TypeTools[i] == 'Blade' or TypeTools[i] == 'Drill' then - nQuality = min( nQuality, 5) - elseif TypeTools[i] == 'Mill' then - nQuality = min( nQuality, 4) - elseif TypeTools[i] == 'Chainsaw' then - nQuality = min( nQuality, 2) - else - nQuality = min( nQuality, 1) - end - end - -- se si utilizzano più utensili si perde in qualità - if #TypeTools > 1 then - nQuality = max( nQuality - 1, 0.5) - end - - return nQuality -end - -------------------------------------------------------------------------------------------------------------- -function FeatureLib.GetStrategyQuality( Machinings) +function FeatureLib.GetStrategyQuality( Parameter) local nQuality = 0 - local dQualityNumerator = 0 - local dQualityDenominator = 0 - for i = 1, #Machinings do - local Machining = Machinings[i] - local dWeightedQuality = TOOLS[Machining.nToolIndex].nQuality * Machining.dLengthToMachine - if Machining.bIsApplicable then - dQualityNumerator = dQualityNumerator + dWeightedQuality - dQualityDenominator = dQualityDenominator + Machining.dLengthToMachine + -- se viene passata una tabella, si calcola media pesata di tutte le lavorazioni + if type( Parameter) == "table" then + local Machinings = Parameter + local dQualityNumerator = 0 + local dQualityDenominator = 0 + for i = 1, #Machinings do + local Machining = Machinings[i] + local dWeightedQuality = FeatureLib.GetStrategyQuality( TOOLS[Machining.nToolIndex].sFamily) * Machining.dLengthToMachine + if Machining.bIsApplicable then + dQualityNumerator = dQualityNumerator + dWeightedQuality + dQualityDenominator = dQualityDenominator + Machining.dLengthToMachine + end end + nQuality = dQualityNumerator / dQualityDenominator + -- se viene passato un tag, si ritorna direttamente il voto + elseif type( Parameter) == "string" then + local sMachiningTag = Parameter + -- #### STATI DI LAVORAZIONE AGGREGATI #### -- + -- FINE = lavorazione eccellente, non dovrebbero esscerci scheggiature + if sMachiningTag == 'FINE' then + nQuality = 5 + -- STD = lavorazione accettabile, potrebbe avere scheggiature minime + elseif sMachiningTag == 'STD' then + nQuality = 3 + -- SEMI = lavorato accettabile, la lavorazione potrebbe avere scheggiature minime, mancano piccoli dettagli alla lavorazione + elseif sMachiningTag == 'SEMI' then + nQuality = 2.5 + -- ROUGH = + elseif sMachiningTag == 'ROUGH' then + nQuality = 1 + -- #### UTENSILI DI LAVORAZIONE UTILIZZATI #### -- + elseif sMachiningTag == 'SAWBLADE' then + nQuality = 5 + elseif sMachiningTag == 'DRILLBIT' then + nQuality = 4 + elseif sMachiningTag == 'MILL' then + nQuality = 3 + elseif sMachiningTag == 'MORTISE' then + nQuality = 1 + -- #### STATI DI LAVORAZIONE DETTAGLIATI #### -- + elseif sMachiningTag == 'DrillBothSide' or sMachiningTag == 'DrillBlind' then + nQuality = 5 + elseif sMachiningTag == 'MillPlusBladeAS' then + nQuality = 4.5 + elseif sMachiningTag == 'ChainPlusBladeAS' or sMachiningTag == 'MillPlusMillAS' then + nQuality = 4 + elseif sMachiningTag == 'DrillOneSide' then + nQuality = 3 + else + nQuality = 0 + end + else + nQuality = 0 end - nQuality = dQualityNumerator / dQualityDenominator - return nQuality end diff --git a/Strategies/Standard/HEADCUT/HEADCUT.lua b/Strategies/Standard/HEADCUT/HEADCUT.lua index f0e5802..7a65ae0 100644 --- a/Strategies/Standard/HEADCUT/HEADCUT.lua +++ b/Strategies/Standard/HEADCUT/HEADCUT.lua @@ -166,7 +166,7 @@ local function GetSplitStrategy( Proc, Part) -- TODO considerare di tagliare con il massimo materiale possibile per non salire troppo in Z (macchine tipo PF), oppure non scendere troppo (tipo Kairos) -- BladeSideSingle (taglio di lama singolo di fianco) if Machining[1].bIsApplicable and ( dMaxMatBladeSideSingle - BeamData.CUT_EXTRA) > Part.dWidth + 10 * GEO.EPS_SMALL then - Strategy.Result.nQuality = TOOLS[Machining[1].ToolInfo.nToolIndex].nQuality + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'SAWBLADE') Machining.sTypeMachining = 'BladeSideSingle' Machining[2].bIsApplicable = false Machining[3].bIsApplicable = false @@ -175,7 +175,7 @@ local function GetSplitStrategy( Proc, Part) -- TODO considerare di tagliare con il massimo materiale possibile per non salire troppo in Z (macchine tipo PF), oppure non scendere troppo (tipo Kairos) -- BladeSideDouble (taglio di lama doppio di fianco) elseif Machining[1].bIsApplicable and ( dMaxMatBladeSideDouble - BeamData.CUT_EXTRA) > Part.dWidth + 10 * GEO.EPS_SMALL then - Strategy.Result.nQuality = TOOLS[Machining[1].ToolInfo.nToolIndex].nQuality + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'SAWBLADE') Strategy.Result.dMRR = Strategy.Result.dMRR/2 Machining.sTypeMachining = 'BladeSideDouble' Machining[2].bIsApplicable = false @@ -184,7 +184,7 @@ local function GetSplitStrategy( Proc, Part) return Machining -- BladeHorizontalSingle (taglio di lama singolo orizzontale) elseif Machining[1].bIsApplicable and ( dMaxMatBladeHorizontalSingle - BeamData.CUT_EXTRA) > Part.dHeight + 10 * GEO.EPS_SMALL then - Strategy.Result.nQuality = TOOLS[Machining[1].ToolInfo.nToolIndex].nQuality + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'SAWBLADE') Machining.sTypeMachining = 'BladeHorizontalSingle' Machining[2].bIsApplicable = false Machining[3].bIsApplicable = false @@ -193,7 +193,7 @@ local function GetSplitStrategy( Proc, Part) -- BladeHorizontalDouble (taglio di lama doppio orizzontale) elseif Machining[1].bIsApplicable and Machining[2].bIsApplicable and ( dMaxMatBladeHorizontalSingle + dMaxMatBladeHorizontalDouble - BeamData.CUT_EXTRA) > Part.dHeight + 10 * GEO.EPS_SMALL then - Strategy.Result.nQuality = 0.5 * TOOLS[Machining[1].ToolInfo.nToolIndex].nQuality + 0.5 * TOOLS[Machining[2].ToolInfo.nToolIndex].nQuality + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'SAWBLADE') Strategy.Result.dMRR = Strategy.Result.dMRR/2 Machining.sTypeMachining = 'BladeHorizontalDouble' Machining[1].ToolInfo.dMaxMatBladeFromTop = dMaxMatBladeHorizontalSingle diff --git a/Strategies/Standard/STR0001/STR0001.lua b/Strategies/Standard/STR0001/STR0001.lua index 36944cd..119472e 100644 --- a/Strategies/Standard/STR0001/STR0001.lua +++ b/Strategies/Standard/STR0001/STR0001.lua @@ -268,7 +268,11 @@ local function GetTenonMachiningResult( Proc, Result) TotalResult.sStatus = Result.Milling.sStatus TotalResult.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100) TotalResult.dMRR = ( Result.Milling.dMRR + Result.Cutting.dMRR) / 2 - TotalResult.nQuality = FeatureLib.GetFeatureQuality( EgtIf( Strategy.Machining.bCuttingWithMill, 'Mill,Mill', 'Mill,Blade')) + if Strategy.Machining.nMillingPathsNeeded > Strategy.Parameters.nMaxMillingPaths then + TotalResult.nQuality = FeatureLib.GetStrategyQuality( 'STD') + else + TotalResult.nQuality = FeatureLib.GetStrategyQuality( 'FINE') + end TotalResult.nFeatureRotationIndex = GetFeatureRotationIndex( Proc) TotalResult.dTimeToMachine = Result.Milling.dTimeToMachine + Result.Cutting.dTimeToMachine TotalResult.sInfo = '' @@ -277,7 +281,7 @@ local function GetTenonMachiningResult( Proc, Result) TotalResult.sStatus = 'Not-Completed' TotalResult.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 50) TotalResult.dMRR = Result.Cutting.dMRR - TotalResult.nQuality = FeatureLib.GetFeatureQuality( EgtIf( Strategy.Machining.bCuttingWithMill, 'Mill', 'Blade')) + TotalResult.nQuality = FeatureLib.GetStrategyQuality( 'FINE') TotalResult.sInfo = 'Tenon not completed' TotalResult.dTimeToMachine = Result.Cutting.dTimeToMachine -- strategia non applicabile, manca il taglio di lama sulla lunghezza del tenone diff --git a/Strategies/Standard/STR0002/STR0002.lua b/Strategies/Standard/STR0002/STR0002.lua index cec5465..b955df0 100644 --- a/Strategies/Standard/STR0002/STR0002.lua +++ b/Strategies/Standard/STR0002/STR0002.lua @@ -100,7 +100,6 @@ local function CalcMachinedPercentage( Proc, Machining) end ------------------------------------------------------------------------------------------------------------- --- TODO vedere se sostituire GetFeatureQuality con valore da utensile; MillOnAggregate che qualità ha? da gestire in info utensile -- TODO va gestita meglio la decisione delle facce da lavorare local function GetBestPocketingStrategy( Proc) -- imposto parametri di ricerca utensile in base a topologia @@ -109,7 +108,7 @@ local function GetBestPocketingStrategy( Proc) local ToolSearchParameters = {} ToolSearchParameters.sMillShape = 'STANDARD' Machining.sTypeMachining = 'None' -- Bottom-Side1-Side2\ Bottom-Side1\ Bottom-Side2\ Side1-Side2\ Bottom\ Side1 \ Side2 \ None - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Mill') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'STD') -- caso speciale Tunnel che non ha faccia bottom if Proc.Topology.sName == 'Tunnel-4-Through' then @@ -165,10 +164,6 @@ local function GetBestPocketingStrategy( Proc) Milling.ToolInfo = {} Milling.ToolInfo = MachiningLib.FindMill( Proc, ToolSearchParameters) if Milling.ToolInfo.nToolIndex then - -- se utensile scelto è su aggregato, ricalcolo la qualità - if TOOLS[Milling.ToolInfo.nToolIndex].SetupInfo.bToolOnAggregate then - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'MillOnAggregate') - end Milling.bIsApplicable = true local ParametersMRR = {} ParametersMRR.nToolIndex = Milling.ToolInfo.nToolIndex @@ -328,7 +323,7 @@ local function GetBestPocketingStrategy( Proc) Strategy.Result.sStatus = 'Completed' end Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100) - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'RadiusOnCornerLeft') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'SEMI') Strategy.Result.dMRR = Machining[3].dMRR if Proc.MainFaces.TunnelAddedFaces then Machining[3].ToolInfo.dResidualDepth = -( Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Faces[1].dElevation + BeamData.MILL_OVERLAP) @@ -349,7 +344,7 @@ local function GetBestPocketingStrategy( Proc) Strategy.Result.sStatus = 'Completed' end Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100) - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'RadiusOnCornerLeft') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'SEMI') Strategy.Result.dMRR = Machining[4].dMRR if Proc.MainFaces.TunnelAddedFaces then Machining[4].ToolInfo.dResidualDepth = -( Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Faces[1].dElevation + BeamData.MILL_OVERLAP) @@ -375,7 +370,7 @@ local function GetBestPocketingStrategy( Proc) Machining[3].ToolInfo.dResidualDepth = Machining[3].ToolInfo.dResidualDepth - Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Faces[1].dElevation + dExtraMachDepth Machining[4].ToolInfo.dResidualDepth = Machining[4].ToolInfo.dResidualDepth - Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Faces[1].dElevation + dExtraMachDepth Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100) - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'RadiusOnCornerLeft') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'SEMI') Strategy.Result.dMRR = ( Machining[3].dMRR + Machining[4].dMRR) / 2 Machining[1].bIsApplicable = false Machining[2].bIsApplicable = false diff --git a/Strategies/Standard/STR0006/STR0006.lua b/Strategies/Standard/STR0006/STR0006.lua index ffe0817..017540f 100644 --- a/Strategies/Standard/STR0006/STR0006.lua +++ b/Strategies/Standard/STR0006/STR0006.lua @@ -227,7 +227,7 @@ local function GetTenonMachiningResult( Proc, Result) TotalResult.sStatus = Result.Milling.sStatus TotalResult.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100) TotalResult.dMRR = ( Result.Milling.dMRR + Result.Cutting.dMRR) / 2 - TotalResult.nQuality = FeatureLib.GetFeatureQuality( EgtIf( Strategy.Machining.bCuttingWithMill, 'Mill,Mill', 'Mill,Blade')) + TotalResult.nQuality = FeatureLib.GetStrategyQuality( EgtIf( Strategy.Machining.bCuttingWithMill, 'STD', 'FINE')) TotalResult.nFeatureRotationIndex = GetFeatureRotationIndex( Proc) TotalResult.dTimeToMachine = Result.Milling.dTimeToMachine + Result.Cutting.dTimeToMachine TotalResult.sInfo = '' @@ -236,7 +236,7 @@ local function GetTenonMachiningResult( Proc, Result) TotalResult.sStatus = 'Not-Completed' TotalResult.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 50) TotalResult.dMRR = Result.Cutting.dMRR - TotalResult.nQuality = FeatureLib.GetFeatureQuality( EgtIf( Strategy.Machining.bCuttingWithMill, 'Mill', 'Blade')) + TotalResult.nQuality = FeatureLib.GetStrategyQuality( EgtIf( Strategy.Machining.bCuttingWithMill, 'MILL', 'SAWBLADE')) TotalResult.sInfo = 'Tenon not completed' TotalResult.dTimeToMachine = Result.Cutting.dTimeToMachine -- strategia non applicabile, manca il taglio di lama sulla lunghezza del tenone diff --git a/Strategies/Standard/STR0007/STR0007.lua b/Strategies/Standard/STR0007/STR0007.lua index d3df9c1..de01aa8 100644 --- a/Strategies/Standard/STR0007/STR0007.lua +++ b/Strategies/Standard/STR0007/STR0007.lua @@ -160,7 +160,7 @@ function GetMortiseMachiningResult( Proc, Result) TotalResult.sStatus = Result.Milling.sStatus TotalResult.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100) TotalResult.dMRR = ( Result.Milling.dMRR + Result.Cutting.dMRR) / 2 - TotalResult.nQuality = FeatureLib.GetFeatureQuality( EgtIf( Strategy.Machining.bCuttingWithMill, 'Mill,Mill', 'Mill,Blade')) + TotalResult.nQuality = FeatureLib.GetStrategyQuality( EgtIf( Strategy.Machining.bCuttingWithMill, 'STD', 'FINE')) TotalResult.nFeatureRotationIndex = GetFeatureRotationIndex( Proc) TotalResult.sInfo = '' -- lavorazione mortasa completa @@ -168,7 +168,7 @@ function GetMortiseMachiningResult( Proc, Result) TotalResult.sStatus = Result.Milling.sStatus TotalResult.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100) TotalResult.dMRR = Result.Milling.dMRR - TotalResult.nQuality = FeatureLib.GetFeatureQuality( 'Mill') + TotalResult.nQuality = FeatureLib.GetStrategyQuality( 'MILL') TotalResult.nFeatureRotationIndex = GetFeatureRotationIndex( Proc) TotalResult.sInfo = '' -- lavorazione incompleta @@ -176,7 +176,7 @@ function GetMortiseMachiningResult( Proc, Result) TotalResult.sStatus = 'Not-Completed' TotalResult.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 50) TotalResult.dMRR = Result.Cutting.dMRR - TotalResult.nQuality = FeatureLib.GetFeatureQuality( EgtIf( Strategy.Machining.bCuttingWithMill, 'Mill', 'Blade')) + TotalResult.nQuality = FeatureLib.GetStrategyQuality( EgtIf( Strategy.Machining.bCuttingWithMill, 'MILL', 'SAWBLADE')) TotalResult.sInfo = 'Mortise not completed' -- strategia non applicabile, manca il taglio di lama sulla lunghezza del Mortise else diff --git a/Strategies/Standard/STR0008/STR0008.lua b/Strategies/Standard/STR0008/STR0008.lua index 5b69c8d..ccd0fe5 100644 --- a/Strategies/Standard/STR0008/STR0008.lua +++ b/Strategies/Standard/STR0008/STR0008.lua @@ -36,7 +36,7 @@ local function GetBestPocketingStrategy( Proc, Part) local ToolSearchParameters = {} Machining.sTypeMachining = 'None' -- Bottom\ Side1\ Side2\ Side1-Side2\ None - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Mill') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'MILL') -- in caso sia una mortasa frontale, bisogna lavorare il taglio if Proc.FeatureInfo.bIsFrontMortise then diff --git a/Strategies/Standard/STR0009/STR0009.lua b/Strategies/Standard/STR0009/STR0009.lua index cd6b301..af49681 100644 --- a/Strategies/Standard/STR0009/STR0009.lua +++ b/Strategies/Standard/STR0009/STR0009.lua @@ -156,7 +156,7 @@ local function GetArcStrategy( Proc, Part) Strategy.Result.sStatus = 'Completed' Strategy.Result.nCompletionIndex = 5 Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo or Machining[2].ToolInfo) - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Mill') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'MILL') Strategy.Result.sInfo = '' return Machining diff --git a/Strategies/Standard/STR0011/STR0011.lua b/Strategies/Standard/STR0011/STR0011.lua index db36277..6baeb6c 100644 --- a/Strategies/Standard/STR0011/STR0011.lua +++ b/Strategies/Standard/STR0011/STR0011.lua @@ -65,7 +65,7 @@ local function GetDrillingStrategy( Proc, Part) Strategy.Result.sStatus = 'Completed' Strategy.Result.nCompletionIndex = 5 Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo or Machining[2].ToolInfo) - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Drill') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( EgtIf( bDouble, 'DrillBothSide', 'DrillOneSide')) Strategy.Result.sInfo = '' else Strategy.Result.sStatus = 'Not-Completed' @@ -74,7 +74,7 @@ local function GetDrillingStrategy( Proc, Part) Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dMachinedPrercentage) Strategy.Result.sInfo = 'Drill not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo or Machining[2].ToolInfo) - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Drill') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( EgtIf( bDouble, 'DrillBothSide', 'DrillOneSide')) end end -- se lavorazione verticale @@ -125,7 +125,7 @@ local function GetDrillingStrategy( Proc, Part) Strategy.Result.nCompletionIndex = 5 Strategy.Result.sInfo = '' Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Drill') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'DrillBothSide') -- se utensile 1 esegue completamente elseif Drilling.ToolInfo.nToolIndex and Drilling.ToolInfo.dResidualDepth < 10 * GEO.EPS_SMALL and @@ -139,7 +139,7 @@ local function GetDrillingStrategy( Proc, Part) Strategy.Result.sStatus = 'Completed' Strategy.Result.nCompletionIndex = 5 Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Drill') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'DrillOneSide') Strategy.Result.sInfo = '' -- se utensile 2 esegue completamente elseif Drilling2.ToolInfo.nToolIndex and Drilling2.ToolInfo.dResidualDepth < 10 * GEO.EPS_SMALL and @@ -154,7 +154,7 @@ local function GetDrillingStrategy( Proc, Part) Strategy.Result.sStatus = 'Completed' Strategy.Result.nCompletionIndex = 5 Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Drill') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'DrillOneSide') Strategy.Result.sInfo = '' -- se possono lavorare entrambi elseif Drilling.ToolInfo.nToolIndex and Drilling2.ToolInfo.nToolIndex then @@ -183,7 +183,7 @@ local function GetDrillingStrategy( Proc, Part) end -- voto Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Drill') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'DrillBothSide') -- se utensile 1 non completo elseif Drilling.ToolInfo.nToolIndex and ( Strategy.Parameters.sDrillingMode ~= 'FORCE_TWO' or Proc.FeatureInfo.bIsDrillOpen) then Drilling.sDepth = Proc.FeatureInfo.dDrillLen - Drilling.ToolInfo.dResidualDepth @@ -199,7 +199,7 @@ local function GetDrillingStrategy( Proc, Part) Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dMachinedPrercentage) Strategy.Result.sInfo = 'Drill not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Drill') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'DrillOneSide') -- se utensile 2 non completo elseif Drilling2.ToolInfo.nToolIndex and Strategy.Parameters.sDrillingMode ~= 'FORCE_TWO' then Drilling2.sDepth = Proc.FeatureInfo.dDrillLen - Drilling2.ToolInfo.dResidualDepth @@ -216,7 +216,7 @@ local function GetDrillingStrategy( Proc, Part) Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dMachinedPrercentage) Strategy.Result.sInfo = 'Drill not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo) - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Drill') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'DrillOneSide') else local sMessage -- se non sono state trovate punte diff --git a/Strategies/Standard/STR0013/STR0013.lua b/Strategies/Standard/STR0013/STR0013.lua index b72b7af..37d9971 100644 --- a/Strategies/Standard/STR0013/STR0013.lua +++ b/Strategies/Standard/STR0013/STR0013.lua @@ -131,13 +131,13 @@ local function GetDrillingWithMillStrategy( Proc, Part) Strategy.Result.sStatus = 'Completed' Strategy.Result.nCompletionIndex = 5 Strategy.Result.sInfo = '' - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Mill') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'MILL') else Strategy.Result.sStatus = 'Not-Completed' local dResidualPrercentage = 100 * ( dResidual / Proc.FeatureInfo.dDrillLen) Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100 - dResidualPrercentage) Strategy.Result.sInfo = 'Machining not complete, left ' .. tostring( ceil( dResidualPrercentage)) .. '%' - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Mill') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'MILL') end -- se son state trovate frese compatibili else diff --git a/Strategies/Standard/STR0014/STR0014.lua b/Strategies/Standard/STR0014/STR0014.lua index 0321aa8..e50dcaf 100644 --- a/Strategies/Standard/STR0014/STR0014.lua +++ b/Strategies/Standard/STR0014/STR0014.lua @@ -77,7 +77,7 @@ function STR0014.Make( bAddMachining, Proc, Part, CustomParameters) Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100) local Parameters = { nToolIndex = Strategy.Machining.ToolInfo.nToolIndex} Strategy.Result.dMRR = MachiningLib.GetToolMRR( Parameters) - Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Mill') + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'MILL') else Strategy.Result = FeatureLib.GetStrategyResultNotApplicable() end diff --git a/Strategies/Standard/STR0015/STR0015.lua b/Strategies/Standard/STR0015/STR0015.lua index a9e0bb0..3447196 100644 --- a/Strategies/Standard/STR0015/STR0015.lua +++ b/Strategies/Standard/STR0015/STR0015.lua @@ -274,7 +274,7 @@ local function GetArcStrategy( Proc, Part) Result.sStatus = 'Completed' Result.nCompletionIndex = 5 Result.dMRR = 1 - Result.nQuality = FeatureLib.GetFeatureQuality( 'Mill') + Result.nQuality = FeatureLib.GetStrategyQuality( 'MILL') Result.sInfo = '' return Machining, Result @@ -287,7 +287,7 @@ local function GetFeatureResult() Result.sStatus = 'Completed' Result.nCompletionIndex = 5 Result.dMRR = 1 - Result.nQuality = FeatureLib.GetFeatureQuality( 'Mill') + Result.nQuality = FeatureLib.GetStrategyQuality( 'MILL') Result.sInfo = '' return Result diff --git a/Strategies/Standard/TAILCUT/TAILCUT.lua b/Strategies/Standard/TAILCUT/TAILCUT.lua index b00c7f7..85feb08 100644 --- a/Strategies/Standard/TAILCUT/TAILCUT.lua +++ b/Strategies/Standard/TAILCUT/TAILCUT.lua @@ -6,6 +6,7 @@ -- carico librerie local BeamLib = require( 'BeamLib') local BeamData = require( 'BeamData') +local FeatureLib = require( 'FeatureLib') local MachiningLib = require( 'MachiningLib') local SPLITCUT = require( 'SPLITCUT') -- strategie di base @@ -51,7 +52,7 @@ function TAILCUT.Make( bAddMachining, Proc, Part, CustomParameters) Strategy.Result.nCompletionIndex = 5 Strategy.Result.dMRR = 1 -- TODO di quale utensile si deve impostare la qualità qui? - Strategy.Result.nQuality = 5 + Strategy.Result.nQuality = FeatureLib.GetStrategyQuality( 'SAWBLADE') Strategy.Result.sInfo = 'Split not possible' end end diff --git a/StrategyLibs/SPLITCUT.lua b/StrategyLibs/SPLITCUT.lua index 5d63537..2f26793 100644 --- a/StrategyLibs/SPLITCUT.lua +++ b/StrategyLibs/SPLITCUT.lua @@ -125,7 +125,7 @@ function SPLITCUT.GetStrategy( Proc, Part, OptionalParameters) -- TODO considerare di tagliare con il massimo materiale possibile per non salire troppo in Z (macchine tipo PF), oppure non scendere troppo (tipo Kairos) -- BladeSideSingle (taglio di lama singolo di fianco) if Machining[1].bIsApplicable and ( dMaxMatBladeSideSingle - BeamData.CUT_EXTRA) > Part.dWidth + 10 * GEO.EPS_SMALL then - Result.nQuality = TOOLS[Machining[1].ToolInfo.nToolIndex].nQuality + Result.nQuality = FeatureLib.GetStrategyQuality( 'SAWBLADE') Machining.sTypeMachining = 'BladeSideSingle' Machining[2].bIsApplicable = false Machining[3].bIsApplicable = false @@ -134,7 +134,7 @@ function SPLITCUT.GetStrategy( Proc, Part, OptionalParameters) -- TODO considerare di tagliare con il massimo materiale possibile per non salire troppo in Z (macchine tipo PF), oppure non scendere troppo (tipo Kairos) -- BladeSideDouble (taglio di lama doppio di fianco) elseif Machining[1].bIsApplicable and ( dMaxMatBladeSideDouble - BeamData.CUT_EXTRA) > Part.dWidth + 10 * GEO.EPS_SMALL then - Result.nQuality = TOOLS[Machining[1].ToolInfo.nToolIndex].nQuality + Result.nQuality = FeatureLib.GetStrategyQuality( 'SAWBLADE') Result.dMRR = Result.dMRR/2 Machining.sTypeMachining = 'BladeSideDouble' Machining[2].bIsApplicable = false @@ -143,7 +143,7 @@ function SPLITCUT.GetStrategy( Proc, Part, OptionalParameters) return Machining, Result -- BladeHorizontalSingle (taglio di lama singolo orizzontale) elseif Machining[1].bIsApplicable and ( dMaxMatBladeHorizontalSingle - BeamData.CUT_EXTRA) > Part.dHeight + 10 * GEO.EPS_SMALL then - Result.nQuality = TOOLS[Machining[1].ToolInfo.nToolIndex].nQuality + Result.nQuality = FeatureLib.GetStrategyQuality( 'SAWBLADE') Machining.sTypeMachining = 'BladeHorizontalSingle' Machining[2].bIsApplicable = false Machining[3].bIsApplicable = false @@ -152,7 +152,7 @@ function SPLITCUT.GetStrategy( Proc, Part, OptionalParameters) -- BladeHorizontalDouble (taglio di lama doppio orizzontale) elseif Machining[1].bIsApplicable and Machining[2].bIsApplicable and ( dMaxMatBladeHorizontalSingle + dMaxMatBladeHorizontalDouble - BeamData.CUT_EXTRA) > Part.dHeight + 10 * GEO.EPS_SMALL then - Result.nQuality = 0.5 * TOOLS[Machining[1].ToolInfo.nToolIndex].nQuality + 0.5 * TOOLS[Machining[2].ToolInfo.nToolIndex].nQuality + Result.nQuality = FeatureLib.GetStrategyQuality( 'SAWBLADE') Result.dMRR = Result.dMRR/2 Machining.sTypeMachining = 'BladeHorizontalDouble' Machining[1].ToolInfo.dMaxMatBladeFromTop = dMaxMatBladeHorizontalSingle