Nuova gestione qualità lavorazione unificata
This commit is contained in:
@@ -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
|
||||
|
||||
+53
-38
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user