-- Strategia: STR0014 -- Descrizione -- Incisione con fresa -- Feature tipo Mark ------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------- -- carico librerie local BeamLib = require( 'BeamLib') local BeamData = require( 'BeamDataNew') local MachiningLib = require( 'MachiningLib') local FeatureLib = require( 'FeatureLib') local ID = require( 'Identity') -- Tabella per definizione modulo local STR0014 = {} local Strategy = {} ------------------------------------------------------------------------------------------------------------- local function GetSCC( Machining) local nSCC if TOOLS[Machining.nToolIndex].SetupInfo.bToolOnAggregate then nSCC = MCH_SCC.ADIR_NEAR elseif TOOLS[Machining.nToolIndex].SetupInfo.nBlockedSCC then nSCC = TOOLS[Machining.nToolIndex].SetupInfo.nBlockedSCC elseif Machining.vtToolDirection:getY() <= 0 then nSCC = MCH_SCC.ADIR_YM else nSCC = MCH_SCC.ADIR_YP end return nSCC end ------------------------------------------------------------------------------------------------------------- -- TODO rimuovere il calcolo MRR dove non serve, è fatto tutto alla fine. function STR0014.Make( bAddMachining, Proc, Part, CustomParameters) -- carico parametri de default e li aggiorno con quelli passati dal chiamante (potrebbero non essere congruenti) local StrategyLib = {} StrategyLib.Config = STRATEGIES_CONFIG[CustomParameters.sStrategyId] Strategy.sName = StrategyLib.Config.sStrategyId Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( Proc, Part, CustomParameters, StrategyLib.Config) Strategy.Machining = MachiningLib.InitMachiningParameters( MCH_MY.MILLING) Strategy.Result = {} Strategy.Result.dTimeToMachine = 0 local bAreAllMachiningsAdded = true local ToolSearchParameters = {} ToolSearchParameters.dElevation = 0 ToolSearchParameters.vtToolDirection = Proc.FeatureInfo.vtExtr if Strategy.Parameters.sMarkStrategy == 'AUTO' then ToolSearchParameters.AvailableToolList = MachiningLib.GetAvailableToolList( Proc, Strategy.Parameters.sMillingList, 'Milling') ToolSearchParameters.sMillShape = EgtIf( ID.IsMarking( Proc), 'VMILL', 'PEN') Strategy.Machining.ToolInfo = {} Strategy.Machining.ToolInfo = MachiningLib.FindMill( Proc, ToolSearchParameters) -- se utensile non trovato, si cerca altro tipo di utensile compatibile per questi tipi di lavorazione if not Strategy.Machining.ToolInfo.nToolIndex then ToolSearchParameters.sMillShape = EgtIf( ID.IsMarking( Proc), 'PEN', 'VMILL') Strategy.Machining.ToolInfo = {} Strategy.Machining.ToolInfo = MachiningLib.FindMill( Proc, ToolSearchParameters) end else if Strategy.Parameters.sMarkStrategy == 'PEN_FORCED' then ToolSearchParameters.sMillShape = 'PEN' elseif Strategy.Parameters.sMarkStrategy == 'VMILL_FORCED' then ToolSearchParameters.sMillShape = 'VMILL' end Strategy.Machining.ToolInfo = {} Strategy.Machining.ToolInfo = MachiningLib.FindMill( Proc, ToolSearchParameters) end if Strategy.Machining.ToolInfo.nToolIndex then Strategy.Result.sStatus = 'Completed' Strategy.Result.dCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100) local Parameters = { nToolIndex = Strategy.Machining.ToolInfo.nToolIndex} Strategy.Result.dMRR = MachiningLib.GetToolMRR( Parameters) Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'MILL') else Strategy.Result = FeatureLib.GetStrategyResultNotApplicable() end if Strategy.Result.sStatus ~= 'Not-Applicable' then if bAddMachining then -- potrebbero esserci altre geometrie, si prepara già struttura con cloni Strategy.AuxiliaryData = {} Strategy.AuxiliaryData.Clones = {} Strategy.AuxiliaryData.Clones[1] = {} Strategy.AuxiliaryData.Clones[1].Geometry = {{ Proc.id, -1}} Strategy.Machining.Geometry = {{ Proc.id, -1}} Strategy.Machining.nToolIndex = Strategy.Machining.ToolInfo.nToolIndex Strategy.Machining.vtToolDirection = Proc.FeatureInfo.vtExtr Strategy.Machining.nSCC = GetSCC( Strategy.Machining) Strategy.Machining.nType = MCH_MY.MILLING Strategy.Machining.sDepth = EgtClamp( Strategy.Parameters.dMachiningDepth, -1, TOOLS[Strategy.Machining.nToolIndex].dMaxMaterial) Strategy.Machining.nWorkside = MCH_MILL_WS.CENTER -- LeadIn / LeadOut Strategy.Machining.LeadIn = {} Strategy.Machining.LeadOut = {} Strategy.Machining.LeadIn.nType = MCH_MILL_LI.NONE Strategy.Machining.LeadOut.nType = MCH_MILL_LI.NONE -- se è una penna, si limita la lavorazione per evitare di partire fuori dal grezzo if ToolSearchParameters.sMillShape == 'PEN' then Strategy.Machining.LeadIn.dStartAddLength = -20 Strategy.Machining.LeadOut.dEndAddLength = -20 end -- TODO gestire meglio -- se utensile montato su aggregato flottante if TOOLS[Strategy.Machining.nToolIndex].bToolOnFloatingTH then Strategy.Machining.dMaxElev = Strategy.Parameters.dMachiningDepth Strategy.Machining.dLongitudinalOffset = -5 end -- stessi parametri cambia solo al geometria for i = 1, #Proc.FeatureInfo.AdditionalGeometries do local AuxId = Proc.id + Proc.FeatureInfo.AdditionalGeometries[i] Strategy.AuxiliaryData.Clones[i+1] = {} Strategy.AuxiliaryData.Clones[i+1].Geometry = {{ AuxId, -1}} end bAreAllMachiningsAdded = MachiningLib.AddMachinings( Proc, Strategy.Machining, Strategy.AuxiliaryData) end else bAreAllMachiningsAdded = false end return bAreAllMachiningsAdded, Strategy.Result end ------------------------------------------------------------------------------------------------------------- return STR0014