Esempio n. 1
0
        private void CommandExecuter(Azione a, Stazioni s, Compact compact = null)
        {
            foreach (var c in a.Comandi)
            {
                #region Good
                if (c.Azione == AzioneTabella.Good && c.Pinza == Pinza.Pinza_1 && c.Parametro == ParametriTabella.None)
                {
                    Scheda scheda = _schede.FirstOrDefault(i =>
                                                           i.PosizioniUtilizzate.Last().Stazione == Stazioni.Pinza &&
                                                           i.PosizioniUtilizzate.Last().Posizione == PosizioneSchedaForRobot.Posizione_1);
                    if (scheda == null)
                    {
                        Console.WriteLine("Nessuna scheda da deposiatre nella postazione di scarico, su pinza 1");
                        return;
                    }

                    _robot.WriteCommand(Azioni.Deposito, Pinza.Pinza_1, Stazioni.Scarico, PosizioneSchedaForRobot.Posizione_1);
                    _schede.Remove(scheda);
                    continue;
                }

                if (c.Azione == AzioneTabella.Good && c.Pinza == Pinza.Pinza_2 && c.Parametro == ParametriTabella.None)
                {
                    Scheda scheda = _schede.FirstOrDefault(i =>
                                                           i.PosizioniUtilizzate.Last().Stazione == Stazioni.Pinza &&
                                                           i.PosizioniUtilizzate.Last().Posizione == PosizioneSchedaForRobot.Posizione_2);
                    if (scheda == null)
                    {
                        Console.WriteLine("Nessuna scheda da deposiatre nella postazione di scarico, su pinza 1");
                        return;
                    }

                    _robot.WriteCommand(Azioni.Deposito, Pinza.Pinza_2, Stazioni.Scarico, PosizioneSchedaForRobot.Posizione_1);
                    _schede.Remove(scheda);

                    continue;
                }
                #endregion

                #region Pick Pinza 1

                if (c.Azione == AzioneTabella.Pick && c.Pinza == Pinza.Pinza_1 && c.Parametro == ParametriTabella.G)
                {
                    //Pick di un pezzo buono da compact
#warning check if compact is opened
                    //throw new NotImplementedException("Check if compact is opened");
                    int slot = compact.GiveMeTheFirstGoodToPick();
                    if (slot == -1)
                    {
                        Console.WriteLine("La compact non ha nessun pezzo risultato buono");
                        return;
                    }
                    _robot.WriteCommand(Azioni.Prelievo, Pinza.Pinza_1, compact.StazioneCompact, (PosizioneSchedaForRobot)slot);
                    compact.ReleaseSlot(slot);
                    _schede.FirstOrDefault(i =>
                                           i.PosizioniUtilizzate.Last().Stazione == compact.StazioneCompact &&
                                           i.PosizioniUtilizzate.Last().Posizione == (PosizioneSchedaForRobot)slot)
                    .PosizioniUtilizzate.Add(new PosizioneScheda
                    {
                        Stazione  = Stazioni.Pinza,
                        Posizione = PosizioneSchedaForRobot.Posizione_1
                    });
                    continue;
                }

                if (c.Azione == AzioneTabella.Pick && c.Pinza == Pinza.Pinza_1 && c.Parametro == ParametriTabella.In)
                {
                    if (compact.GiveMeTheFirstEmptySlot() == -1)
                    {
                        Console.WriteLine("Attenzione, nessuno slot della compact è vuoto");
                        return;
                    }

                    //Lettura da plc per sapere dove devo andare a prendere la scheda
                    int pos = 1;//<-Lettura da PLC
                    _robot.WriteCommand(Azioni.Prelievo, Pinza.Pinza_1, Stazioni.Carico, (PosizioneSchedaForRobot)pos);
                    Scheda nuova = new Scheda(new PosizioneScheda
                    {
                        Stazione  = Stazioni.Carico,
                        Posizione = (PosizioneSchedaForRobot)pos
                    });

                    nuova.AddPosition(new PosizioneScheda
                    {
                        Stazione  = Stazioni.Pinza,
                        Posizione = PosizioneSchedaForRobot.Posizione_1
                    });
                    _schede.Add(nuova);
                    continue;
                }

                if (c.Azione == AzioneTabella.Pick && c.Pinza == Pinza.Pinza_1 && c.Parametro == ParametriTabella.R)
                {
                    continue;
                }

                if (c.Azione == AzioneTabella.Pick && c.Pinza == Pinza.Pinza_1 && c.Parametro == ParametriTabella.W)
                {
                    continue;
                }

                #endregion

                #region Pick Pinza 2

                if (c.Azione == AzioneTabella.Pick && c.Pinza == Pinza.Pinza_2 && c.Parametro == ParametriTabella.G)
                {
                    //Pick di un pezzo buono da compact
#warning check if compact is opened
                    //throw new NotImplementedException("Check if compact is opened");
                    int slot = compact.GiveMeTheFirstGoodToPick();
                    if (slot == -1)
                    {
                        Console.WriteLine("La compact non ha nessun pezzo risultato buono");
                        return;
                    }
                    _robot.WriteCommand(Azioni.Prelievo, Pinza.Pinza_2, compact.StazioneCompact, (PosizioneSchedaForRobot)slot);
                    compact.ReleaseSlot(slot);
                    _schede.FirstOrDefault(i =>
                                           i.PosizioniUtilizzate.Last().Stazione == compact.StazioneCompact &&
                                           i.PosizioniUtilizzate.Last().Posizione == (PosizioneSchedaForRobot)slot)
                    .PosizioniUtilizzate.Add(new PosizioneScheda
                    {
                        Stazione  = Stazioni.Pinza,
                        Posizione = PosizioneSchedaForRobot.Posizione_2
                    });
                    continue;
                }

                if (c.Azione == AzioneTabella.Pick && c.Pinza == Pinza.Pinza_2 && c.Parametro == ParametriTabella.In)
                {
                    if (compact.GiveMeTheFirstEmptySlot() == -1)
                    {
                        Console.WriteLine("Attenzione, nessuno slot della compact è vuoto");
                        return;
                    }

                    //Lettura da plc per sapere dove devo andare a prendere la scheda
                    int pos = 2;//<-Lettura da PLC
                    _robot.WriteCommand(Azioni.Prelievo, Pinza.Pinza_2, Stazioni.Carico, (PosizioneSchedaForRobot)pos);
                    Scheda nuova = new Scheda(new PosizioneScheda
                    {
                        Stazione  = Stazioni.Carico,
                        Posizione = (PosizioneSchedaForRobot)pos
                    });

                    nuova.AddPosition(new PosizioneScheda
                    {
                        Stazione  = Stazioni.Pinza,
                        Posizione = PosizioneSchedaForRobot.Posizione_2
                    });
                    _schede.Add(nuova);
                    continue;
                }

                if (c.Azione == AzioneTabella.Pick && c.Pinza == Pinza.Pinza_2 && c.Parametro == ParametriTabella.R)
                {
                    continue;
                }

                if (c.Azione == AzioneTabella.Pick && c.Pinza == Pinza.Pinza_2 && c.Parametro == ParametriTabella.W)
                {
                    continue;
                }

                #endregion

                #region Place

                if (c.Azione == AzioneTabella.Place && c.Pinza == Pinza.Pinza_1 && c.Parametro == ParametriTabella.None)
                {
                    //check se ci sono schede sulla pinza 1
                    if (_schede.FirstOrDefault(i =>
                                               i.PosizioniUtilizzate.Last().Stazione == Stazioni.Pinza &&
                                               i.PosizioniUtilizzate.Last().Posizione == PosizioneSchedaForRobot.Posizione_1)
                        == null)
                    {
                        Console.WriteLine("Attenzione, Non sono presenti schede da posizionare sulla pinza 1");
                        return;
                    }


                    int slot = compact.GiveMeTheFirstEmptySlot();
                    _robot.WriteCommand(Azioni.Deposito, Pinza.Pinza_1, s, (PosizioneSchedaForRobot)slot);

                    //informare la posizione della compact che è occupata
                    compact.AddToEmptySlot(slot);
                    //informare la scheda della sua nuova posizione

                    Scheda scheda = _schede.FirstOrDefault(
                        i => i.PosizioniUtilizzate.Last().Stazione == Stazioni.Pinza &&
                        i.PosizioniUtilizzate.Last().Posizione == PosizioneSchedaForRobot.Posizione_1);

                    scheda.PosizioniUtilizzate.Add(new PosizioneScheda()
                    {
                        Stazione  = compact.StazioneCompact,
                        Posizione = (PosizioneSchedaForRobot)slot
                    });
                    continue;
                }

                if (c.Azione == AzioneTabella.Place && c.Pinza == Pinza.Pinza_2 && c.Parametro == ParametriTabella.None)
                {
                    //check se ci sono schede sulla pinza 2
                    if (_schede.FirstOrDefault(i =>
                                               i.PosizioniUtilizzate.Last().Stazione == Stazioni.Pinza &&
                                               i.PosizioniUtilizzate.Last().Posizione == PosizioneSchedaForRobot.Posizione_2)
                        == null)
                    {
                        Console.WriteLine("Attenzione, Non sono presenti schede da posizionare sulla pinza 2");
                        return;
                    }

                    int slot = compact.GiveMeTheFirstEmptySlot();
                    _robot.WriteCommand(Azioni.Deposito, Pinza.Pinza_2, s, (PosizioneSchedaForRobot)slot);

                    //informare la posizione della compact che è occupata
                    compact.AddToEmptySlot(slot);
                    //informare la scheda della sua nuova posizione

                    Scheda scheda = _schede.FirstOrDefault(
                        i => i.PosizioniUtilizzate.Last().Stazione == Stazioni.Pinza &&
                        i.PosizioniUtilizzate.Last().Posizione == PosizioneSchedaForRobot.Posizione_2);

                    scheda.PosizioniUtilizzate.Add(new PosizioneScheda()
                    {
                        Stazione  = compact.StazioneCompact,
                        Posizione = (PosizioneSchedaForRobot)slot
                    });
                    continue;
                }

                #endregion

                #region Waste
                if (c.Azione == AzioneTabella.Waste && c.Pinza == Pinza.Pinza_1 && c.Parametro == ParametriTabella.None)
                {
                    continue;
                }

                if (c.Azione == AzioneTabella.Waste && c.Pinza == Pinza.Pinza_2 && c.Parametro == ParametriTabella.None)
                {
                    continue;
                }
                #endregion
            }
        }
Esempio n. 2
0
        public Ciclo(Robot robot)
        {
            _robot     = robot;
            _compact_1 = new Compact(Stazioni.Compact_1);
            _compact_2 = new Compact(Stazioni.Compact_2);

            #region Comando tutto vuoto stazione test 1
            TabellaComandi.Add(new Azione
            {
                Comment = "Postazione test completamente vuota." +
                          "Verranno prese 4 schede dalla stazione di carico, e posate all interno della macchina di test.",
                Key     = new int[] { 0, 0, 0 },
                Comandi = new List <TableCommand>()
                {
                    new TableCommand()
                    {
                        Azione    = AzioneTabella.Pick,
                        Pinza     = Pinza.Pinza_1,
                        Parametro = ParametriTabella.In
                    },
                    new TableCommand()
                    {
                        Azione    = AzioneTabella.Pick,
                        Pinza     = Pinza.Pinza_2,
                        Parametro = ParametriTabella.In
                    },
                    new TableCommand()
                    {
                        Azione    = AzioneTabella.Place,
                        Pinza     = Pinza.Pinza_1,
                        Parametro = ParametriTabella.None
                    },
                    new TableCommand()
                    {
                        Azione    = AzioneTabella.Place,
                        Pinza     = Pinza.Pinza_2,
                        Parametro = ParametriTabella.None
                    },
                    new TableCommand()
                    {
                        Azione    = AzioneTabella.Pick,
                        Pinza     = Pinza.Pinza_1,
                        Parametro = ParametriTabella.In
                    },
                    new TableCommand()
                    {
                        Azione    = AzioneTabella.Pick,
                        Pinza     = Pinza.Pinza_2,
                        Parametro = ParametriTabella.In
                    },
                    new TableCommand()
                    {
                        Azione    = AzioneTabella.Place,
                        Pinza     = Pinza.Pinza_1,
                        Parametro = ParametriTabella.None
                    },
                    new TableCommand()
                    {
                        Azione    = AzioneTabella.Place,
                        Pinza     = Pinza.Pinza_2,
                        Parametro = ParametriTabella.None
                    },
                }
            });
            TabellaComandi.Add(new Azione
            {
                Comment = "La macchina di test ha completato il suo lavoro, e restituisce un informazione di 'Tutti Ok'," +
                          "ovvero tutte le schede possono essere prese e depositate nella zona di scarico Good.",
                Key     = new int[] { 4, 0, 0 },
                Comandi = new List <TableCommand>()
                {
                    new TableCommand()
                    {
                        Azione    = AzioneTabella.Pick,
                        Pinza     = Pinza.Pinza_1,
                        Parametro = ParametriTabella.G
                    },
                    new TableCommand()
                    {
                        Azione    = AzioneTabella.Pick,
                        Pinza     = Pinza.Pinza_2,
                        Parametro = ParametriTabella.G
                    },
                    new TableCommand()
                    {
                        Azione    = AzioneTabella.Good,
                        Pinza     = Pinza.Pinza_1,
                        Parametro = ParametriTabella.None
                    },
                    new TableCommand()
                    {
                        Azione    = AzioneTabella.Good,
                        Pinza     = Pinza.Pinza_2,
                        Parametro = ParametriTabella.None
                    },
                    new TableCommand()
                    {
                        Azione    = AzioneTabella.Pick,
                        Pinza     = Pinza.Pinza_1,
                        Parametro = ParametriTabella.G
                    },
                    new TableCommand()
                    {
                        Azione    = AzioneTabella.Pick,
                        Pinza     = Pinza.Pinza_2,
                        Parametro = ParametriTabella.G
                    },
                    new TableCommand()
                    {
                        Azione    = AzioneTabella.Good,
                        Pinza     = Pinza.Pinza_1,
                        Parametro = ParametriTabella.None
                    },
                    new TableCommand()
                    {
                        Azione    = AzioneTabella.Good,
                        Pinza     = Pinza.Pinza_2,
                        Parametro = ParametriTabella.None
                    },
                }
            });
            #endregion
            XmlSerialize();
        }