예제 #1
0
        private static tabBediener SuchBediener(ScannerOptionen Optionen, ScannerText ScText)
        {
            var bed = Optionen.DbScann.tabBedienerSet.FirstOrDefault(f => f.MatchCode == ScText.ScannerKoerper);

            if (bed != null)
            {
                return(bed);
            }

            ScText.FehlerAusgabe("Bediener mit Matchcode", ScText.ScannerKoerper, "nicht vorhanden!");
            var msg = $"Bediener mit Matchcode {ScText.ScannerKoerper} nicht vorhanden.";

            Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Verbose);
            return(null);
        }
예제 #2
0
        static void Main()
        {
            Logger.SetLogWriter(new LogWriterFactory().Create());
            ExceptionPolicy.SetExceptionManager(new ExceptionPolicyFactory().CreateManager(), false);

            var pr         = Properties.Settings.Default;
            var scOptionen = new ScannerOptionen()
            {
                VorgabeStandort     = pr.Standort,
                DbVerbindungsString = pr.DatenbankVerbindungsString,

                CradleIpAdresse     = pr.CradleIpAdresse,
                CradlePortNummer    = pr.CradlePortNummer,
                CradleTextAnmeldung = pr.CradleTextAnmeldung,

                EvgPfadProduktionsListe      = pr.EvgPfadProduktionsListe,
                EvgDateiProduktionsAuftrag   = pr.EvgDateiProduktionsAuftrag,
                ProgressPfadProduktionsListe = pr.ProgressPfadProduktionsListe,
            };

            try
            {
                scOptionen.InitScanner();
            }
            catch (Exception ex)
            {
                ExceptionPolicy.HandleException(ex, "Policy");
                throw;
            }

#if DEBUG
            var scanner = new ScannerProgramm(scOptionen);
            var task    = new Task((scTask) =>
            {
                (scTask as ScannerProgramm).Start();;
            }, scanner, TaskCreationOptions.LongRunning);
            task.Start();

            Console.WriteLine("Scanner Gestartet");
            Console.ReadKey();
            scanner.Close();
#else
            var ServiceToRun = new ServiceBase[] { new JgMaschineServiceScanner(scOptionen) };
            ServiceBase.Run(ServiceToRun);
#endif
        }
예제 #3
0
 public JgMaschineServiceScanner(ScannerOptionen ScannOptionen)
 {
     _ScannProgramm = new ScannerProgramm(ScannOptionen);
 }
예제 #4
0
        private static void ProgrammeEintragen(ScannerOptionen Optionen, tabMaschine Maschine, ScannerText e)
        {
            string msg       = "";
            var    reparatur = Maschine.eAktivReparatur;

            if (e.VorgangProgramm == VorgangProgram.REPA_ENDE)
            {
                if (reparatur == null)
                {
                    e.FehlerAusgabe(" ", "Kein Vorgang", "angemeldet !");
                }
                else
                {
                    e.SendeText("Vorgang beendet", " ", $"> {reparatur.Vorgang.ToString().ToUpper()} <", " ", Maschine.MaschinenName);

                    reparatur.VorgangEnde    = DateTime.Now;
                    Maschine.eAktivReparatur = null;

                    foreach (var anmledungReparatur in reparatur.sAnmeldungen.Where(w => w.IstAktiv).ToList())
                    {
                        anmledungReparatur.Abmeldung = reparatur.VorgangEnde;
                    }

                    msg = $"Reparatur {reparatur.Vorgang} an Maschine {Maschine.MaschinenName} beendet.";
                    Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Information);
                };
            }
            else // Anmeldung einer Reparatur
            {
                if (reparatur != null)
                {
                    e.FehlerAusgabe(" ", $"> {reparatur.Vorgang.ToString().ToUpper()} <", "bereits angemeldet !");
                }
                else
                {
                    reparatur = new tabReparatur()
                    {
                        Id            = Guid.NewGuid(),
                        VorgangBeginn = DateTime.Now,
                        fMaschine     = Maschine.Id,
                    };

                    switch (e.VorgangProgramm)
                    {
                    case VorgangProgram.REPASTART: reparatur.Vorgang = EnumReperaturVorgang.Reparatur; break;

                    case VorgangProgram.WARTSTART: reparatur.Vorgang = EnumReperaturVorgang.Wartung; break;

                    case VorgangProgram.COILSTART: reparatur.Vorgang = EnumReperaturVorgang.Coilwechsel; break;
                    }

                    var anzCoils = " ";
                    if (e.VorgangProgramm == VorgangProgram.COILSTART)
                    {
                        reparatur.CoilwechselAnzahl = Convert.ToByte(e.ScannerKoerper);
                        anzCoils = $"Anzahl {reparatur.CoilwechselAnzahl}";
                    }
                    e.SendeText("Beginn Vorgang", " ", $"> {reparatur.Vorgang.ToString().ToUpper()} <", anzCoils, Maschine.MaschinenName);

                    Maschine.eAktivReparatur = reparatur;

                    foreach (var anmeldungen in Maschine.AktiveAnmeldungen)
                    {
                        var anmeldungReparatur = new tabAnmeldungReparatur()
                        {
                            Id         = Guid.NewGuid(),
                            Anmeldung  = reparatur.VorgangBeginn,
                            fBediener  = anmeldungen.fBediener,
                            fReparatur = reparatur.Id,
                        };
                        Optionen.DbScann.tabAnmeldungReparaturSet.Add(anmeldungReparatur);
                    }

                    msg = $"Reparatur {reparatur.Vorgang} an Maschine {Maschine.MaschinenName} gestartet.";
                    Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Information);
                }
            }
        }
예제 #5
0
        private static void BedienerAnmelden(ScannerOptionen Optionen, tabMaschine Maschine, ScannerText ScText)
        {
            string msg = "";

            var matchCode          = ScText.ScannerKoerper;
            var anmeldungVorhanden = Maschine.AktiveAnmeldungen.FirstOrDefault(f => f.eBediener.MatchCode == matchCode);

            if ((ScText.VorgangProgramm == VorgangProgram.ANMELDUNG) && (anmeldungVorhanden != null))
            {
                ScText.FehlerAusgabe("Sie sind bereits an", Maschine.MaschinenName, "angemeldet !");
                return;
            }

            var bediener = anmeldungVorhanden?.eBediener;

            if (anmeldungVorhanden == null)
            {
                bediener = SuchBediener(Optionen, ScText);
                if (bediener == null)
                {
                    return;
                }
                anmeldungVorhanden = bediener.eAktivAnmeldung;
            }

            // Wenn Bediener an anderer Maschine angemeldet -> abmelden
            if (anmeldungVorhanden != null)
            {
                // Kontrolle, ob an anderer Maschine eine Reparatur läuft
                if (anmeldungVorhanden.eMaschine.eAktivReparatur != null)
                {
                    var anmeldungReparatur = anmeldungVorhanden.eMaschine.eAktivReparatur.sAnmeldungen.FirstOrDefault(f => f.IstAktiv && (f.fBediener == bediener.Id));
                    if (anmeldungReparatur != null)
                    {
                        anmeldungReparatur.Abmeldung = DateTime.Now;
                    }
                }

                anmeldungVorhanden.Abmeldung                 = DateTime.Now;
                anmeldungVorhanden.ManuelleAbmeldung         = false;
                anmeldungVorhanden.eBediener.eAktivAnmeldung = null;
            }

            if (ScText.VorgangProgramm == VorgangProgram.ABMELDUNG)
            {
                if (anmeldungVorhanden == null)
                {
                    ScText.FehlerAusgabe("Sie sind an keiner", "Maschine", "angemeldet !");
                    return;
                }

                ScText.SendeText(" - Abmeldung -", anmeldungVorhanden.eBediener.Name, anmeldungVorhanden.eMaschine.MaschinenName);
                msg = $"Bediener {anmeldungVorhanden.eBediener.Name} an Maschine {anmeldungVorhanden.eMaschine.MaschinenName} abgemeldet.";
                Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Information);
            }
            else // Anmeldung an Maschine
            {
                ScText.SendeText(" ", "- A N M E L D U N G -", " ", bediener.Name, Maschine.MaschinenName);

                var anmeldungNeu = new tabAnmeldungMaschine()
                {
                    Id                = Guid.NewGuid(),
                    Anmeldung         = DateTime.Now,
                    fBediener         = bediener.Id,
                    fMaschine         = Maschine.Id,
                    ManuelleAnmeldung = false,
                    ManuelleAbmeldung = false,
                };
                Optionen.DbScann.tabAnmeldungMaschineSet.Add(anmeldungNeu);
                bediener.fAktivAnmeldung = anmeldungNeu.Id;

                // Wenn eine Reparatur läuft, an dieser anmelden

                if (Maschine.eAktivReparatur != null)
                {
                    var anmeldungReparatur = new tabAnmeldungReparatur()
                    {
                        Id         = Guid.NewGuid(),
                        Anmeldung  = DateTime.Now,
                        fBediener  = bediener.Id,
                        fReparatur = (Guid)Maschine.fAktivReparatur,
                    };
                    Optionen.DbScann.tabAnmeldungReparaturSet.Add(anmeldungReparatur);
                }

                msg = $"Bediener {bediener.Name} an Maschine {Maschine.MaschinenName} angemeldet.";
                Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Verbose);
            }
        }
예제 #6
0
 public ScannerProgramm(ScannerOptionen Optionen)
 {
     _Opt = Optionen;
 }
예제 #7
0
        private static void Bf2dEintragen(ScannerOptionen Optionen, tabMaschine Maschine, ScannerText ScText)
        {
            string             msg   = "";
            BvbsDatenaustausch btNeu = null;

            try
            {
                btNeu = new BvbsDatenaustausch(ScText.ScannerVorgangScan + ScText.ScannerKoerper, false);
            }
            catch (Exception f)
            {
                ScText.FehlerAusgabe("BVBS Code konnte nicht", "gelesen werden !");
                msg = $"Bvbs Code konnte icht gelesen Werden.\nGrund: {f.Message}";
                Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Warning);
                return;
            }

            if (Maschine.eAktivBauteil != null)
            {
                var letztesBt = Maschine.eAktivBauteil;
                letztesBt.DatumEnde = DateTime.Now;

                if (btNeu.BvbsString == letztesBt.BvbsCode)
                {
                    msg = $"BauteilMaschine: {Maschine.MaschinenName}\nProject: {btNeu.ProjektNummer} erledigt";
                    Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Verbose);

                    ScText.SendeText(" ", " - Bauteil erledigt -");
                    Maschine.eAktivBauteil = null;

                    return;
                }
            }

            if (ScText.VorgangScan == VorgangScanner.BF2D)
            {
                DatenAnMaschineSenden(Optionen, Maschine, btNeu.BvbsString);
            }

            var btInDatenBank = Optionen.DbScann.tabBauteilSet.FirstOrDefault(f => ((f.fMaschine == Maschine.Id) && (f.BvbsCode == btNeu.BvbsString)));

            if (btInDatenBank != null)
            {
                msg = $"Bauteil an Maschine {Maschine.MaschinenName} bereits am {btInDatenBank.DatumStart.ToString("dd.MM.yy HH:mm")} gefertigt.";
                Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Verbose);

                ScText.FehlerAusgabe("Bauteil bereits am", btInDatenBank.DatumStart.ToString("dd.MM.yy HH:mm"), "gefertigt.");
            }
            else
            {
                ScText.SendeText(" ", "- Bauteil OK -");

                var bvbs = new BvbsDatenaustausch(btNeu.BvbsString, false);

                var btNeuErstellt = new tabBauteil()
                {
                    Id         = Guid.NewGuid(),
                    DatumStart = DateTime.Now,

                    eMaschine = Maschine,

                    BvbsCode  = btNeu.BvbsString,
                    BvbsDaten = bvbs,

                    BtGewicht = StahlGewichte.GetGewichtKg((int)btNeu.Durchmesser, (int)btNeu.Laenge),

                    IstHandeingabe  = false,
                    IstVorfertigung = Maschine.IstStangenschneider && ((byte)btNeu.ListeGeometrie.Count == 0),

                    AnzahlBediener = (byte)Maschine.AktiveAnmeldungen.Count(),
                };

                foreach (var bed in Maschine.AktiveAnmeldungen)
                {
                    btNeuErstellt.sBediener.Add(bed.eBediener);
                }

                Maschine.eAktivBauteil = btNeuErstellt;

                msg = $"BT erstellt. Maschine: {Maschine.MaschinenName}\n  Project: {btNeu.ProjektNummer} Anzahl: {btNeu.Anzahl} Gewicht: {btNeuErstellt.BtGewicht}";
                Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Verbose);
            }
        }
예제 #8
0
        // Programme zum Datenverarbeitung der Sacannerdaten **************************************************************

        private static void DatenAnMaschineSenden(ScannerOptionen Optionen, tabMaschine Maschine, string BfbsString)
        {
            if ((Maschine.MaschinenArt == EnumMaschinenArt.Handbiegung) || (string.IsNullOrWhiteSpace(Maschine.MaschineAdresse)))
            {
                return;
            }

            string msg = "";

            switch (Maschine.MaschinenArt)
            {
            case EnumMaschinenArt.Schnell:

                if (Maschine.MaschinePortnummer == null)
                {
                    msg = $"Bei Maschine: {Maschine.MaschinenName} wurde keine Portnummer eingetragen!";
                    Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Warning);
                    return;
                }

                Task.Factory.StartNew((SendDaten) =>
                {
                    var md = (DatenAnMaschine)SendDaten;

                    try
                    {
                        msg = $"Verbindung mit: {md.Maschine.MaschinenName} Port: {md.Maschine.MaschinePortnummer}.";
                        Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Verbose);

                        using (var client = new TcpClient(md.Maschine.MaschineAdresse, (int)md.Maschine.MaschinePortnummer))
                        {
                            client.NoDelay        = true;
                            client.SendTimeout    = 1000;
                            client.ReceiveTimeout = 1000;

                            var nwStr  = client.GetStream();
                            var buffer = Encoding.ASCII.GetBytes(md.BvbsString + Convert.ToChar(13) + Convert.ToChar(10));
                            nwStr.Write(buffer, 0, buffer.Length);

                            // Auf Antwort von Maschine warten

                            try
                            {
                                buffer = new byte[client.ReceiveBufferSize];

                                int anzEmpfang = nwStr.Read(buffer, 0, (int)client.ReceiveBufferSize);

                                var empfangen = Encoding.ASCII.GetString(buffer, 0, anzEmpfang);
                                msg           = $"Rückantwort von Maschine {md.Maschine.MaschinenName}: {empfangen}";
                                Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Verbose);

                                #region Antwort der Maschine auf Fehler prüfen

                                if ((empfangen.Length >= 3) && (empfangen[0] == Convert.ToChar(15)))
                                {
                                    var dat = JgMaschineLib.Helper.StartVerzeichnis() + @"FehlerCode\JgMaschineFehlerSchnell.txt";
                                    if (!File.Exists(dat))
                                    {
                                        msg = $"Fehlerdatei: {dat} für Maschine 'Schnell' existiert nicht.";
                                        Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Warning);
                                    }
                                    else
                                    {
                                        try
                                        {
                                            string nummer = empfangen.Substring(1, 2);

                                            var zeilen = File.ReadAllLines(dat);
                                            foreach (var zeile in zeilen)
                                            {
                                                if (zeile.Substring(0, 2) == nummer)
                                                {
                                                    msg = $"Fehlermeldung von Maschine {md.Maschine.MaschinenName} ist {zeile}!";
                                                    Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Verbose);
                                                    break;
                                                }
                                            }
                                        }
                                        catch (Exception f)
                                        {
                                            msg = $"Fehler beim auslesen der Fehlerdatei Firma Schnell.\nGrund: {f.Message}";
                                            Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Information);
                                        }
                                    }
                                }

                                #endregion
                            }
                            catch (Exception f)
                            {
                                throw new Exception($"Fehler bei warten auf Antwort von Maschine ! {f.Message}", f);
                            }

                            client.Close();

                            msg = $"Verbindung mit: {md.Maschine.MaschinenName} abgeschlossen.";
                            Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Verbose);
                        }
                    }
                    catch (Exception f)
                    {
                        msg = $"Fehler beim senden der Bvbs Daten an die Maschine: {Maschine.MaschinenName}\nDaten: {md.BvbsString}\nGrund: {f.Message}";
                        Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Error);
                    }
                }, new DatenAnMaschine()
                {
                    Optionen = Optionen, Maschine = Maschine, BvbsString = BfbsString
                });

                break;

            case EnumMaschinenArt.Evg:

                Task.Factory.StartNew((SendDaten) =>
                {
                    var md = (DatenAnMaschine)SendDaten;

                    var datAuftrag   = "Auftrag1.txt";
                    var datProdListe = string.Format(@"\\{0}\{1}\{2}", md.Maschine.MaschineAdresse, md.Optionen.EvgPfadProduktionsListe, datAuftrag);

                    // Produktionsliste schreiben

                    try
                    {
                        File.WriteAllText(datProdListe, md.BvbsString);
                    }
                    catch (Exception f)
                    {
                        msg = $"Fehler beim schreiben der EVG Produktionsliste in die Maschine {md.Maschine.MaschinenName}!\nDatei: {datProdListe}.\nGrund: {f.Message}";
                        Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Warning);
                    }

                    // Produktionsauftrag schreiben

                    var datProtAuftrag = string.Format(@"\\{0}\{1}", md.Maschine.MaschineAdresse, md.Optionen.EvgDateiProduktionsAuftrag);
                    try
                    {
                        File.WriteAllText(datProtAuftrag, datAuftrag);
                    }
                    catch (Exception f)
                    {
                        msg = $"Fehler beim schreiben des EVG Produktionsauftrages in die Maschine {md.Maschine.MaschinenName}!\nDatei: {datProtAuftrag}.\nGrund: {f.Message}";
                        Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Warning);
                    }
                }, new { Optionen, Maschine, BfbsString });

                break;

            case EnumMaschinenArt.Progress:

                Task.Factory.StartNew((SendDaten) =>
                {
                    var md    = (DatenAnMaschine)SendDaten;
                    var datei = string.Format(@"\\{0}\{1}\{2}", md.Maschine.MaschineAdresse, md.Optionen.ProgressPfadProduktionsListe, "Auftrag.txt");

                    // Produktionsliste schreiben
                    try
                    {
                        File.WriteAllText(datei, md.BvbsString, Encoding.UTF8);
                    }
                    catch (Exception f)
                    {
                        msg = $"Fehler beim schreiben der Progress Produktionsliste Maschine: {Maschine.MaschinenName} \nDatei: {datei}.\nGrund: {f.Source}";
                        Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Warning);
                    }
                }, new { Optionen, Maschine, BfbsString });

                break;
            }
        }