예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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);
            }
        }