예제 #1
0
        public Verarbeitungsschritt TransferiereSchrittInHistorie(Produktionseinrichtung bearbeitetIn)
        {
            // packe erstes element aus rezept in historie
            Verarbeitungsschritt schritt = _Rezept[0];
            Tuple <Verarbeitungsschritt, string> historienEintrag = new Tuple <Verarbeitungsschritt, string>(_Rezept[0], bearbeitetIn.GetName());

            _Historie.Add(historienEintrag);
            // entferne aus rezept
            _Rezept.RemoveAt(0);
            return(schritt);
        }
        public void Start()
        {
            // TODO: schaue ob alle Verarbeitungsschritte in FIs behandelt werden können

            DateTime nächsterSchritt = DateTime.Now;

            while (!IstFertig())
            {
                if (DateTime.Now >= nächsterSchritt.AddSeconds(1 / 4.0))
                {
                    nächsterSchritt = DateTime.Now;

                    Produktionseinrichtung prodEinr = GetAbholbereiteProduktionseinrichtung();
                    // wenn es eine abholbereite produktionseinrichtung gibt
                    if (prodEinr != null)
                    {
                        // hole teil
                        if (prodEinr is EingangsLager)
                        {
                            _AktuellesTeil = ((EingangsLager)prodEinr).TeilAusgeben();
                        }
                        else if (prodEinr is Fertigungsinsel)
                        {
                            _AktuellesTeil = ((Fertigungsinsel)prodEinr).TeilZurueckgeben();
                            //    _aktue
                        }
                        Console.WriteLine(_AktuellesTeil.GetSeriennummer() + " < " + prodEinr.GetName());

                        if (_AktuellesTeil.SelbstTestTeil())
                        {
                            Console.WriteLine(_AktuellesTeil.GetSeriennummer() + " > LagerAus");
                            FindeAusgangsLager().TeilFuerDenVersandEmpfangen(_AktuellesTeil);
                        }
                        else
                        {
                            Fertigungsinsel insel = GetSchnellsteFertigungsinsel();
                            // wenn es keine FI gibt die das teil verarbeiten kann
                            if (insel == null)
                            {
                                Console.WriteLine(_AktuellesTeil.GetSeriennummer() + " > LagerEin");
                                findeEingangsLager().TeilZwischenlagern(_AktuellesTeil);
                            }
                            else
                            {
                                Console.WriteLine(_AktuellesTeil.GetSeriennummer() + " > " + insel.GetName());
                                insel.TeilEntgegennehmen(_AktuellesTeil);
                            }
                        }
                    }
                }
            }
            Console.WriteLine("Robbie ist fertig. " + FindeAusgangsLager().GetBestand().Count + " Teile im Ausgangslager");
        }