Nuova gestione qualità lavorazione unificata

This commit is contained in:
andrea.villa
2025-09-15 14:42:29 +02:00
parent 0290547a93
commit e1bce72db5
15 changed files with 93 additions and 84 deletions
-6
View File
@@ -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
View File
@@ -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
+4 -4
View File
@@ -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
+6 -2
View File
@@ -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
+4 -9
View File
@@ -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
+2 -2
View File
@@ -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
+3 -3
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+8 -8
View File
@@ -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
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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
+2 -1
View File
@@ -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
+4 -4
View File
@@ -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