private static bool LiesKonfig(string path) { List <Tuple <Verarbeitungsschritt, int> > ListeFähigkeitenMitDauer; Console.WriteLine("Fertigungsabteilung: Einlesen gestartet!"); var lines = File.ReadLines(path); foreach (var line in lines) { if (firstLine) { firstLine = false; continue; } // einfach nur die Kopfzeile überspringen var strings = line.Split(';'); var name = strings[0]; ListeFähigkeitenMitDauer = new List <Tuple <Verarbeitungsschritt, int> >(); for (int i = 1; i < strings.Length; i++) { var s = strings[i].Split(':'); ListeFähigkeitenMitDauer.Add( new Tuple <Verarbeitungsschritt, int>( (Verarbeitungsschritt)Enum.Parse(typeof(Verarbeitungsschritt), s[0]), Int32.Parse(s.Length > 1 ? s[1] : "0") ) ); } if (ListeFähigkeitenMitDauer.Any(x => x.Item1 == Verarbeitungsschritt.INITIALISIEREN)) { // erstelle Eingangslager EingangsLager lager = new EingangsLager(name, ListeFähigkeitenMitDauer); lager.InitialisiereTeile("..//..//..//Teile.csv"); produktionseinrichtungen.Add(lager); continue; } if (ListeFähigkeitenMitDauer.Any(x => x.Item1 == Verarbeitungsschritt.EINLAGERN)) { // erstelle Ausgangslager AusgangsLager lager = new AusgangsLager(name, ListeFähigkeitenMitDauer); produktionseinrichtungen.Add(lager); continue; } //TODO: abfrage ist unlogisch (geht aber) if (ListeFähigkeitenMitDauer.Any(x => (x.Item1 != Verarbeitungsschritt.EINLAGERN) && (x.Item1 != Verarbeitungsschritt.INITIALISIEREN))) { //erstelle Fertigungsinsel Fertigungsinsel fertigungsinsel = new Fertigungsinsel(name, ListeFähigkeitenMitDauer); produktionseinrichtungen.Add(fertigungsinsel); continue; } } return(true); }
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"); }