/// <summary> /// Creo Programma per lavorazioni di foratura. /// Raccoglie dati per creare macro specifiche. /// Per allargatura foro nella barenatura e lamatura faccio programma ad hoc /// </summary> /// <param name="programPhase"></param> /// <param name="operazione"></param> protected override void CreateSpecificProgram(ProgramOperation programPhase, Operazione operazione) { if (operazione.OperationType == LavorazioniEnumOperazioni.AllargaturaBareno) { ElaborateAllargaturaBareno(programPhase, operazione); return; } var preference = Singleton.Preference.GetPreference(Singleton.Instance.MeasureUnit); var distanzaSicurezza = preference.DistanzaSicurezzaCicliForatura; var macro = new MacroForaturaAzione(programPhase) { PuntiForatura = GetDrillPointList(), SicurezzaZ = SicurezzaZ, StartZ = InizioZ, TipologiaLavorazione = operazione.OperationType, CodiceR = InizioZ + distanzaSicurezza, }; macro.ParametriTaglio = new ParametroVelocita(); ParametroVelocita parametroVelocita; if (programPhase.FeedDictionary.TryGetValue(MoveType.Work, out parametroVelocita)) { macro.ParametriTaglio = parametroVelocita; } /* * il punto r è la distanza fra z di sicurezza e z iniziale, - distanza di avvicinamento.. tipo 2mm */ // macro) switch (operazione.OperationType) { case LavorazioniEnumOperazioni.ForaturaAlesatore: { var alesatura = operazione.Lavorazione as IAlesatoreAble; if (alesatura == null) { throw new NullReferenceException(); } macro.EndZ = InizioZ - alesatura.ProfonditaAlesatore; } break; case LavorazioniEnumOperazioni.ForaturaBareno: { var opMaschiatura = operazione.Lavorazione as IBarenoAble; if (opMaschiatura == null) { throw new NullReferenceException(); } macro.EndZ = InizioZ - opMaschiatura.ProfonditaBareno; } break; case LavorazioniEnumOperazioni.ForaturaLamatore: { var opMaschiatura = operazione.Lavorazione as ILamaturaAble; if (opMaschiatura == null) { throw new NullReferenceException(); } macro.EndZ = InizioZ - opMaschiatura.ProfonditaLamatura; macro.Sosta = 500; } break; case LavorazioniEnumOperazioni.ForaturaMaschiaturaDx: { var opMaschiatura = operazione.Lavorazione as IMaschiaturaAble; if (opMaschiatura == null) { throw new NullReferenceException(); } macro.Sosta = 500; macro.EndZ = InizioZ - opMaschiatura.ProfonditaMaschiatura; } break; case LavorazioniEnumOperazioni.ForaturaCentrino: { var opCentrinable = operazione.Lavorazione as ICentrinoAble; if (opCentrinable == null) { throw new NullReferenceException(); } macro.EndZ = InizioZ - ProfonditaCentrino; } break; case LavorazioniEnumOperazioni.ForaturaSmusso: { var opSvasatura = operazione.Lavorazione as ISvasaturaAble; if (opSvasatura == null) { throw new NullReferenceException(); } macro.EndZ = InizioZ - ProfonditaSvasatura; macro.Sosta = 500; } break; case LavorazioniEnumOperazioni.ForaturaPunta: { var opForatura = operazione.Lavorazione as IForaturaAble; if (opForatura == null) { throw new NullReferenceException(); } macro.ModalitaForatura = ModalitaForatura; macro.EndZ = InizioZ - ProfonditaForatura; /* Qui mi serve step, il parametro deve essere parametro punta, * Nel caso non lo fosse non scoppia niente. */ var parametro = operazione.GetParametro <ParametroPunta>(); if (parametro != null) { macro.Step = parametro.Step; } } break; } /* * Ora devo " sviluppare" l'azione macro per avere un'anteprima corretta e un corretto tempo macchina.. */ var move = new MoveActionCollection(); var pntList = macro.PuntiForatura; foreach (var point2D in pntList) { move.AddLinearMove(MoveType.Rapid, AxisAbilited.Xy, point2D.X, point2D.Y, null); move.AddLinearMove(MoveType.Rapid, AxisAbilited.Z, null, null, macro.SicurezzaZ); ElaborateCycle(move, macro); /* * fare r del ciclo. */ move.AddLinearMove(MoveType.SecureRapidFeed, AxisAbilited.Z, null, null, macro.SicurezzaZ); } macro.MoveActionCollection = move; foreach (var variable in macro.MoveActionCollection) { programPhase.SettaValoreAvanzamento(variable); } }
protected override void CreateSpecificProgram(ProgramOperation programPhase, Operazione operazione) { var parametro = operazione.GetParametro <ParametroFresaSpianare>(); if (parametro == null) { throw new NullReferenceException(); } var larghezzaPassata = parametro.GetLarghezzaPassata(); var profPassata = parametro.GetProfonditaPassata(); var diaFresa = parametro.DiametroMinimoFresa; diaFresa -= parametro.GetRaggioInserto() * 2; var diaIngombroFresa = parametro.DiametroIngombroFresa; var sovraMetallo = Sovrametallo - SovrametalloPerFinitura; var ottimizza = false; // per ora non lo lascio modificare da utente var passataMinimaPercentuale = 20.0d; // -- ,, valori sballati potrebbero causare bug non previsti var moveCollection = new MoveActionCollection(); var centerPoint = GetCenterPoint(); switch ((LavorazioniEnumOperazioni)operazione.OperationType) { case LavorazioniEnumOperazioni.FresaturaSpianaturaSgrossatura: { var zLavoro = LivelloZ + SovrametalloPerFinitura; switch (ModoSgrossatura) { case SpiantaturaMetodologia.Tradizionale: { OneDirectionFaceMilling(moveCollection, centerPoint.X, centerPoint.Y, Larghezza, Altezza, larghezzaPassata, diaFresa, diaIngombroFresa, sovraMetallo, profPassata, zLavoro, SicurezzaZ, ExtraCorsa); } break; case SpiantaturaMetodologia.Spirale: { SpiralFaceMillingV2(moveCollection, centerPoint.X, centerPoint.Y, Larghezza, Altezza, larghezzaPassata, diaFresa, diaIngombroFresa, sovraMetallo, profPassata, zLavoro, SicurezzaZ, ExtraCorsa, ottimizza, passataMinimaPercentuale); } break; } } break; case LavorazioniEnumOperazioni.FresaturaSpianaturaFinitura: { switch (ModoFinitura) { case SpiantaturaMetodologia.Tradizionale: { OneDirectionFaceMilling(moveCollection, centerPoint.X, centerPoint.Y, Larghezza, Altezza, larghezzaPassata, diaFresa, diaIngombroFresa, SovrametalloPerFinitura, profPassata, LivelloZ, SicurezzaZ, ExtraCorsa ); } break; case SpiantaturaMetodologia.Spirale: { // richiamo stesso procedimento , metto solo profondita == sovrametallo // magari fare spiarale singolo in un metodo e richiamarla con sgrossatura più volte SpiralFaceMillingV2(moveCollection, centerPoint.X, centerPoint.Y, Larghezza, Altezza, larghezzaPassata, diaFresa, diaIngombroFresa, SovrametalloPerFinitura, profPassata, LivelloZ, SicurezzaZ, ExtraCorsa, ottimizza, passataMinimaPercentuale); } break; } } break; } var mm = base.GetFinalProgram(moveCollection); foreach (var variable in mm) { programPhase.AggiungiAzioneMovimento(variable); } }
protected override void CreateSpecificProgram(ProgramOperation programPhase, Operazione operazione) { var dia = operazione.Utensile as IDiametrable; if (dia == null) { return; } var diaTool = dia.Diametro; var moveCollection = new MoveActionCollection(); switch (operazione.OperationType) { case LavorazioniEnumOperazioni.Sgrossatura: { var par = operazione.GetParametro <ParametroFresaCandela>(); if (par == null) { throw new NullReferenceException(); } var profPassat = par.GetProfonditaPassata(); var larghPassat = par.GetLarghezzaPassata(); ProcessRoughLineMilling(moveCollection, PuntoInizialeX, PuntoInizialeY, OrientationAngle, Lunghezza, Sovrametallo, ProfonditaLavorazione, profPassat, larghPassat, par.DiametroFresa, SicurezzaZ, ExtraCorsa, InizioLavorazioneZ); } break; case LavorazioniEnumOperazioni.Finitura: { var par = operazione.GetParametro <ParametroFresaCandela>(); if (par == null) { throw new NullReferenceException(); } var profPassat = par.GetProfonditaPassata(); var larghPassat = par.GetLarghezzaPassata(); /* * Per finitura assumo sovrametallo minore della larghezza passata */ var compensationType = 0; if (FinishWithCompensation) { compensationType = 2; } ProcessRoughLineMilling(moveCollection, PuntoInizialeX, PuntoInizialeY, OrientationAngle, Lunghezza, larghPassat, ProfonditaLavorazione, profPassat, larghPassat, par.DiametroFresa, SicurezzaZ, ExtraCorsa, InizioLavorazioneZ, compensationType); } break; case LavorazioniEnumOperazioni.Smussatura: { var profPassat = ProfonditaFresaSmussatura; var larghPassat = diaTool / 2; /* * Per finitura assumo sovrametallo minore della larghezza passata */ ProcessRoughLineMilling(moveCollection, PuntoInizialeX, PuntoInizialeY, OrientationAngle, Lunghezza, larghPassat, ProfonditaFresaSmussatura, profPassat, larghPassat, diaTool, SicurezzaZ, ExtraCorsa, InizioLavorazioneZ); //ProcessChamferSideLineMilling(moveCollection, PuntoInizialeX, PuntoInizialeY, OrientationAngle, Lunghezza, Sovrametallo, ProfonditaFresaSmussatura, diaTool, SicurezzaZ, ExtraCorsa, InizioLavorazioneZ); } break; default: throw new NotImplementedException(); } var mm = base.GetFinalProgram(moveCollection); foreach (var variable in mm) { programPhase.AggiungiAzioneMovimento(variable); } }