예제 #1
0
        internal override void SendeDatenZurMaschine(string BvBsCode)
        {
            Task.Factory.StartNew((SendDaten) =>
            {
                var md = (DatenTaskMaschine)SendDaten;

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

                try
                {
                    File.WriteAllText(datProdListe, md.BvbsString);
                }
                catch (Exception f)
                {
                    JgLog.Set(this, $"Fehler beim schreiben der EVG Produktionsliste!\nDatei: {datProdListe}.\nGrund: {f.Message}", JgLog.LogArt.Warnung);
                }

                // Produktionsauftrag schreiben

                var datProtAuftrag = string.Format(@"\\{0}\{1}", md.Maschine.MaschineIp, md.DateiProduktionsAuftrag);
                try
                {
                    File.WriteAllText(datProtAuftrag, datAuftrag);
                }
                catch (Exception f)
                {
                    JgLog.Set(this, $"Fehler beim schreiben des EVG Produktionsauftrages!\nDatei: {datProtAuftrag}.\nGrund: {f.Message}", JgLog.LogArt.Warnung);
                }
            }, _DatenTask);
        }
예제 #2
0
        private string[] MeldungBeenden(JgMaschineStamm Maschine)
        {
            if (Maschine.MeldMeldung == null)
            {
                return(null);
            }

            var progText = "Reparatur";

            switch (Maschine.MeldMeldung.Meldung)
            {
            case ScannerMeldung.COILSTART:
                progText = "Coilwechsel";
                break;

            case ScannerMeldung.WARTSTART:
                progText = "Wartung";
                break;
            }

            var meldung = Maschine.MeldMeldung.Abmeldung();

            Maschine.MeldMeldung = null;
            JgLog.Set(Maschine, $"Meldung {progText} beendet!", JgLog.LogArt.Info);
            _JgOpt.QueueSend($"Meldung {progText} beendet", Maschine, meldung);

            return(new string[] { "", progText, "beendet" });
        }
예제 #3
0
        public static void LoadStatusMaschineLocal(JgMaschineStamm Maschine, string PfadAusgabe)
        {
            if (Maschine != null)
            {
                var datAusgabe = GetDateiName(PfadAusgabe, Maschine.Id);

                try
                {
                    var erg = Helper.XmlDateiInObjekt <JgMaschinenStatus>(datAusgabe);

                    if (erg != null)
                    {
                        Maschine.AktivBauteil    = erg.AktivBauteil;
                        Maschine.ListeBauteile   = erg.ListeBauteile;
                        Maschine.MeldBediener    = erg.MeldBediener;
                        Maschine.MeldListeHelfer = erg.MeldListeHelfer;
                        Maschine.MeldMeldung     = erg.MeldMeldung;
                    }
                }
                catch (Exception ex)
                {
                    JgLog.Set(null, $"Fehler Reader Program 'Load' Maschinenstatus für Datei {datAusgabe} ausgelöst\nGrund: {ex.Message}", JgLog.LogArt.Info);
                }
            }
        }
예제 #4
0
        public byte[] GetStatusAsXmlByte()
        {
            if (_Maschine != null)
            {
                var lhelfer = MeldListeHelfer.Select(s => s.Id).ToList();

                var erg = new JgMaschinenStatusMeldungen()
                {
                    IdBediener     = MeldBediener?.Id,
                    IdMeldung      = MeldMeldung?.Id,
                    IdAktivBauteil = AktivBauteil?.Id,
                    IdListeHelfer  = new List <Guid>(lhelfer),
                    Information    = _Maschine.Information
                };

                try
                {
                    return(Helper.ObjectInXmlDatenByte <JgMaschinenStatusMeldungen>(erg));
                }
                catch (Exception ex)
                {
                    JgLog.Set(null, $"Fehler Reader Load Maschinenstatus ausgelöst.\nGrund: {ex.Message}", JgLog.LogArt.Info);
                }
            }

            return(null);
        }
예제 #5
0
        private void MaschineBvbsEintragen(JgScannerAusgabe ScanAusgabe, JgMaschineStamm Maschine)
        {
            if (Maschine.AktivBauteil != null)
            {
                var bauteilFertig = Maschine.AktivBauteil.IdBauteilJgData == ScanAusgabe.ScannKoerper;
                BauteilBeendet(ScanAusgabe, Maschine);
                if (bauteilFertig)
                {
                    return;
                }
            }

            BvbsDaten btNeu = null;

            try
            {
                btNeu = new BvbsDaten(ScanAusgabe.BvbsString, true);
            }
            catch (Exception f)
            {
                JgLog.Set(Maschine, $"Bvbs Code konnte icht gelesen Werden.\nGrund: {f.Message}", JgLog.LogArt.Info);
                ScanAusgabe.Set(false, true, "Fehler im BVBS", "Code");
                return;
            }

            //todo: Aktives Bausteil von String in eindeutige Id aus JgData umwandeln

            var btId = ScanAusgabe.ScannKoerper.Replace("\n", string.Empty).Replace("\r", string.Empty);

            if (Maschine.ListeBauteile.Any(a => a.IdJgData == btId))
            {
                ScanAusgabe.Set(true, true, "Bauteil wurde", "bereits", "erstellt !");
            }
            else
            {
                Maschine.AktivBauteil = new JgBauteil
                {
                    IdMaschine   = Maschine.Id,
                    IdBediener   = Maschine.MeldBediener.IdBediener,
                    AnzahlHelfer = Maschine.MeldListeHelfer.Count,

                    IdBauteilJgData = btId,

                    AnzahlTeile     = btNeu.Anzahl ?? 0,
                    GewichtInKg     = btNeu.Gewicht ?? 0,
                    DuchmesserInMm  = btNeu.Durchmesser ?? 0,
                    LaengeInCm      = btNeu.Laenge ?? 0,
                    AnzahlBiegungen = btNeu.ListeGeometrie.Count() - 1
                };

                JgLog.Set(Maschine, $"Bauteil {Maschine.AktivBauteil.Id} registriert.", JgLog.LogArt.Unbedeutend);
                _JgOpt.QueueSend($"BT {Maschine.AktivBauteil.Id}", Maschine.AktivBauteil);
                ScanAusgabe.Set(true, false, "Bauteil in", "Maschine", "registriert");
            }
        }
예제 #6
0
        // Programme zum Datenverarbeitung der Sacannerdaten **************************************************************

        private void BauteilBeendet(JgScannerAusgabe ScanAusgabe, JgMaschineStamm Maschine)
        {
            var meldung = new JgMeldung()
            {
                Id         = Maschine.AktivBauteil.Id,
                IdBediener = Maschine.AktivBauteil.IdBediener,
                Meldung    = ScannerMeldung.BAUT_ENDE,
                Aenderung  = DateTime.Now
            };

            Maschine.ListeBauteile.Add(new JgBauteilFertig(meldung.Id, Maschine.AktivBauteil.IdBauteilJgData));
            Maschine.AktivBauteil = null;

            JgLog.Set(Maschine, $"Bauteilt: {meldung.Id} erledigt", JgLog.LogArt.Unbedeutend);
            _JgOpt.QueueSend($"Bauteil {ScanAusgabe.ScannKoerper} fertig", Maschine, meldung);
            ScanAusgabe.Set(false, false, "", "Bauteil", "fertig!");
        }
예제 #7
0
        internal override void SendeDatenZurMaschine(string BvBsCode)
        {
            _DatenTask.BvbsString = BvBsCode;

            Task.Factory.StartNew((SendDaten) =>
            {
                var md    = (DatenTaskMaschine)SendDaten;
                var datei = string.Format(@"\\{0}\{1}\{2}", md.Maschine.MaschineIp, md.PfadProduktionsListe, "Auftrag.txt");

                try
                {
                    File.WriteAllText(datei, BvBsCode, Encoding.UTF8);
                }
                catch (Exception ex)
                {
                    JgLog.Set(this, $"Fehler beim schreiben der Progress Produktionsliste!\nDatei: {datei}.\nGrund: {ex.Message}", JgLog.LogArt.Fehler);
                }
            }, BvBsCode);
        }
예제 #8
0
        public void SaveStatusMaschineLocal()
        {
            if (_Maschine != null)
            {
                Task.Factory.StartNew((Opt) =>
                {
                    var optUeberg = (OptUebergabe)Opt;

                    try
                    {
                        Helper.ObjektInXmlDatei <JgMaschinenStatus>(optUeberg.StatusMaschine, optUeberg.DateiAusgabe);
                    }
                    catch (Exception ex)
                    {
                        JgLog.Set(null, $"Fehler Writer Save Maschinenstatus ausgelöst.\nGrund: {ex.Message}", JgLog.LogArt.Info);
                    }
                }, new OptUebergabe()
                {
                    StatusMaschine = this, DateiAusgabe = _DateiAusgabe
                });
            }
        }
예제 #9
0
 public void DatenZurMaschine(string BvBsCode)
 {
     JgLog.Set(this, $"Sende Daten an {this.MaschineName}", JgLog.LogArt.Info);
     SendeDatenZurMaschine(BvBsCode);
 }
예제 #10
0
 internal override void SendeDatenZurMaschine(string BvBsCode)
 {
     JgLog.Set(this, $"Daten registriert.", JgLog.LogArt.Info);
 }
예제 #11
0
        internal override void SendeDatenZurMaschine(string BvBsCode)
        {
            if (this.MaschinePort == 0)
            {
                JgLog.Set(this, $"Bei Maschine wurde keine Portnummer eingetragen!", JgLog.LogArt.Krittisch);
            }
            else
            {
                _DatenTask.BvbsString = BvBsCode;

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

                    try
                    {
                        using (var client = new TcpClient(md.Maschine.MaschineIp, md.Maschine.MaschinePort))
                        {
                            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);
                                JgLog.Set(this, $"Rückantwort von Maschine {md.Maschine.MaschineName}: {empfangen}", JgLog.LogArt.Unbedeutend);

                                #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 beim warten auf Antwort von Maschine ! {f.Message}", f);
                            }

                            client.Close();
                            JgLog.Set(this, $"Verbindung abgeschlossen.", JgLog.LogArt.Unbedeutend);
                        }
                    }
                    catch (Exception f)
                    {
                        JgLog.Set(this, $"Fehler beim senden der Bvbs Daten an die Maschine.\nDaten: {md.BvbsString}\nGrund: {f.Message}", JgLog.LogArt.Warnung);
                    }
                }, _DatenTask);
            }
        }
예제 #12
0
        internal override void EinlesenZeitenAusMaschine()
        {
            var pfadStart = @"\\" + this.MaschineIp + @"\" + "Muss noch eingessellt werden";

            if (!Directory.Exists(pfadStart))
            {
                JgLog.Set(this, "Pad zum Auslesen der Daten nicht gefunden", JgLog.LogArt.Fehler);
            }
            else
            {
                // alle relevante Dateien aus Verzeichnissen laden -> Stammverzeichnis ...\EVG\Eingabe\Monit\(Jahr)\(HahrMonat)\....

                var heute             = DateTime.Now.Date;
                var durchlauf         = this.ListeBauteile.Min(m => m.Erstellt);
                var dateienAuswertung = new List <string>();

                while (durchlauf <= heute)
                {
                    var dirMonatJahr = string.Format(@"{0}\{1}\{1}{2}", pfadStart, durchlauf.Year, durchlauf.Month.ToString("D2"));
                    dateienAuswertung.AddRange(Directory.EnumerateFiles(dirMonatJahr, "F_*.mon").ToList());
                    durchlauf.AddMonths(1);
                }
                ;

                //var merkeLetzteDatum = Maschine.eProtokoll.LetzteDateiDatum;
                //var merkeLetzteZeile = Maschine.eProtokoll.LetzteZeile;
                //var merkeZeileBauteil = 0;

                //foreach (var datei in dateienAuswertung)
                //{
                //    var datum = Helper.DatumAusYyyyMMdd(Path.GetFileName(datei).Substring(2));

                //    if (datum < Maschine.eProtokoll.LetzteDateiDatum)
                //        continue;

                //    var lZeilen = StringListenLaden(datei);

                //    if (datum > Maschine.eProtokoll.LetzteDateiDatum)
                //        Maschine.eProtokoll.LetzteDateiDatum = datum;

                //    ErgebnisAbfrage ergNeu = null;
                //    var zeileStart = 0;

                //    if (datum == merkeLetzteDatum)
                //        zeileStart = merkeLetzteZeile;

                //    for (int zeile = zeileStart; zeile < lZeilen.Length; zeile++)
                //    {
                //        if (lZeilen[zeile][7] == 'A')
                //        {
                //            merkeZeileBauteil = zeile;
                //            ergNeu = new ErgebnisAbfrage() { Start = GetDatum(datum, lZeilen[zeile]) };
                //            _Ergebnisse.Add(ergNeu);

                //            var felder = lZeilen[zeile].Split(new char[] { ';' }, StringSplitOptions.None);
                //            try
                //            {
                //                ergNeu.Schluessel = felder[4];
                //            }
                //            catch (Exception f)
                //            {
                //                var msg = $"Fehler beim konvertieren der Id {felder[4]} in Zeile: {zeile}.\nGrund: {f.Message}";
                //                throw new Exception(msg);
                //            }
                //        }
                //        else if ((ergNeu != null) && (lZeilen[zeile][7] == 'D'))
                //            ergNeu.Dauer = (DateTime)ergNeu.Start - GetDatum(datum, lZeilen[zeile]);
                //    }

                //    if (datum == Maschine.eProtokoll.LetzteDateiDatum)
                //        Maschine.eProtokoll.LetzteZeile = merkeZeileBauteil;
                //}

                //ErgebnissInDatenbank(Maschine, _Ergebnisse);
            }
        }
예제 #13
0
        static void Main(string[] args)
        {
            Logger.SetLogWriter(new LogWriterFactory().Create());
            ExceptionPolicy.SetExceptionManager(new ExceptionPolicyFactory().CreateManager(), false);
            // Bsp.: ExceptionPolicy.HandleException(ex, "Policy");

            Console.WriteLine("Scanner Gestartet");
            JgLog.Set(null, "Programm wird gestartet!", JgLog.LogArt.Info);

            var pr = Properties.Settings.Default;

            var jgOpt = new JgOptionen()
            {
                IdStandort = pr.IdStandort,
            };

            // Bediener und Maschine local laden, danach mit Server abgeleichen

            var init = new JgInit(jgOpt);

            init.BedienerLocalLaden();
            init.MaschinenLocalLaden();

            try
            {
                using (var dienst = new ServiceRef.WcfServiceClient())
                {
                    var tt = dienst.WcfTest("OK?");

                    if (tt == "OK?")
                    {
                        JgLog.Set(null, "Verbindung Server OK!", JgLog.LogArt.Info);

                        if (init.BedienerVonServer(dienst))
                        {
                            init.BedienerLocalSpeichern();
                        }

                        if (init.MaschinenVonServer(dienst))
                        {
                            init.MaschinenLocalSpeichern();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionPolicy.HandleException(ex, "Policy");
            }

            // Status Maschinen laden, wenn vorhanden

            foreach (var maStatus in jgOpt.ListeMaschinen.Values)
            {
                JgMaschinenStatus.LoadStatusMaschineLocal(maStatus, jgOpt.PfadDaten);
            }

            // Optionen für jedes Craddel laden

            var listeCraddleOpt = new List <JgOptionenCraddle>();

            for (int i = 0; i < 5; i++)
            {
                var s    = Properties.Settings.Default["Craddel_" + i.ToString()].ToString();
                var crad = new JgOptionenCraddle(jgOpt);
                Helper.PropStringInOnjekt <JgOptionenCraddle>(crad, s);
                if (crad.CraddleIpAdresse != "")
                {
                    listeCraddleOpt.Add(crad);
                }
            }

#if DEBUG
            var lTaskMaschine = new List <JgScannerMaschinen>();

            foreach (var crad in listeCraddleOpt)
            {
                var sm = new JgScannerMaschinen();
                sm.TaskScannerMaschineStarten(crad);
                lTaskMaschine.Add(sm);
            }

            var datenZumServer = new JgDatenZumServer(jgOpt);
            datenZumServer.DatenabgleichStarten();

            Console.WriteLine("Fertig");
            Console.ReadKey();
#else
            var ServiceToRun = new ServiceBase[] { new JgMaschineServiceScanner(scOptionen) };
            ServiceBase.Run(ServiceToRun);
#endif
        }
예제 #14
0
        private void MaschineMeldungEintragen(JgScannerAusgabe ScanAusgabe, JgMaschineStamm Maschine)
        {
            // *** Unterprogramm Bendigung von Coilwechsel, Wartung und Reparatur mit "Rep_Ende"

            switch (ScanAusgabe.Meldung)
            {
            case ScannerMeldung.COILSTART:
                if (Maschine?.MeldMeldung?.Meldung == ScannerMeldung.COILSTART)
                {
                    ScanAusgabe.Set(false, true, "Coilwechsle bereits", "begonnen");
                }
                else
                {
                    MeldungBeenden(Maschine);
                    Maschine.MeldMeldung = new JgMeldung(Maschine.MeldBediener.IdBediener, ScannerMeldung.COILSTART);

                    try
                    {
                        Maschine.MeldMeldung.Anzahl = Convert.ToInt32(ScanAusgabe.ScannKoerper);
                    }
                    catch { }

                    JgLog.Set(Maschine, $"Start Coilwechsel. Anzahl: {Maschine.MeldMeldung.Anzahl ?? 0}", JgLog.LogArt.Info);
                    ScanAusgabe.Set(false, false, "", "Coilwechsel", "gestartet");
                    _JgOpt.QueueSend($"Start Coilwechsel", Maschine, Maschine.MeldMeldung);
                }
                break;

            case ScannerMeldung.REPASTART:
                if (Maschine?.MeldMeldung?.Meldung == ScannerMeldung.REPASTART)
                {
                    ScanAusgabe.Set(false, true, "Reparatur bereits", "begonnen");
                }
                else
                {
                    MeldungBeenden(Maschine);
                    Maschine.MeldMeldung = new JgMeldung(Maschine.MeldBediener.IdBediener, ScannerMeldung.REPASTART);

                    JgLog.Set(Maschine, "Start Reparatur.", JgLog.LogArt.Info);
                    ScanAusgabe.Set(false, false, "", "Reparatur", "gestartet");
                    _JgOpt.QueueSend($"Start Reparatur", Maschine, Maschine.MeldMeldung);
                }
                break;

            case ScannerMeldung.WARTSTART:
                if (Maschine?.MeldMeldung?.Meldung == ScannerMeldung.WARTSTART)
                {
                    ScanAusgabe.Set(false, true, "Wartung bereits", "begonnen");
                }
                else
                {
                    MeldungBeenden(Maschine);
                    Maschine.MeldMeldung = new JgMeldung(Maschine.MeldBediener.IdBediener, ScannerMeldung.WARTSTART);

                    JgLog.Set(Maschine, $"Start Wartung.", JgLog.LogArt.Info);
                    ScanAusgabe.Set(false, false, "", "Wartung", "gestartet");
                    _JgOpt.QueueSend($"Start Wartung", Maschine, Maschine.MeldMeldung);
                }
                break;

            case ScannerMeldung.REPA_ENDE:
                if (Maschine.MeldMeldung == null)
                {
                    ScanAusgabe.Set(false, true, "", "Keine Meldung", "registriert");
                }
                else
                {
                    ScanAusgabe.Set(false, false, MeldungBeenden(Maschine));
                }
                break;
            }
        }
예제 #15
0
        private void MaschineAnmeldungEintragen(JgScannerAusgabe ScanAusgabe, JgMaschineStamm Maschine)
        {
            var bediener = _JgOpt.JgOpt.ListeBediener.FirstOrDefault(f => (f.Value.NummerAusweis == ScanAusgabe.ScannKoerper)).Value;

            if (bediener == null)
            {
                JgLog.Set(Maschine, $"Bediener ({ScanAusgabe.ScannKoerper}) nicht in Datenbank !", JgLog.LogArt.Info);
                ScanAusgabe.Set(false, true, "Bediener", ScanAusgabe.ScannKoerper, "nicht regisitriert");
            }
            else
            {
                if ((ScanAusgabe.Meldung == ScannerMeldung.ANMELDUNG) && (Maschine.MeldBediener != null))
                {
                    if (bediener.Id == Maschine.MeldBediener.IdBediener)
                    {
                        ScanAusgabe.Set(false, true, "Bediener", bediener.BedienerName, "bereits angemeldet!");
                        return;
                    }
                    else if (Maschine.MeldListeHelfer.Any(f => f.IdBediener == bediener.Id))
                    {
                        ScanAusgabe.Set(false, true, "Helfer", bediener.BedienerName, "bereits angemeldet!");
                        return;
                    }
                }

                // In allen Maschinen nach einer Anmeldung suchen und abmelden

                var abmeldungBediener = false;
                var abmeldungHelfer   = false;

                foreach (var maAbmeldung in _JgOpt.JgOpt.ListeMaschinen.Values)
                {
                    // Wenn Bediener auf einer Maschine angemeldet ist

                    if (maAbmeldung?.MeldBediener?.IdBediener == bediener.Id)
                    {
                        abmeldungBediener = true;

                        var msg     = $"Bediener {bediener.BedienerName} abgemeldet";
                        var meldung = maAbmeldung.MeldBediener.Abmeldung();
                        maAbmeldung.MeldBediener = null;

                        _JgOpt.QueueSend(msg, maAbmeldung, meldung);
                        JgLog.Set(Maschine, msg, JgLog.LogArt.Unbedeutend);

                        // Bei Bedienerabmeldung auch alle Helfer abmelden

                        foreach (var meldHelfer in maAbmeldung.MeldListeHelfer)
                        {
                            // Wenn Helfer in Liste Bediener vorhanden
                            if (_JgOpt.JgOpt.ListeBediener.ContainsKey(meldHelfer.IdBediener))
                            {
                                meldHelfer.Abmeldung();
                                msg = $"Helfer {_JgOpt.JgOpt.ListeBediener[meldHelfer.IdBediener].BedienerName} abgemeldet!";
                                _JgOpt.QueueSend(msg, maAbmeldung, meldHelfer);
                                JgLog.Set(Maschine, msg, JgLog.LogArt.Unbedeutend);
                            }
                        }

                        Maschine.MeldListeHelfer.Clear();
                    }
                    else
                    {
                        // Ob in einer Helferliste eingetragen

                        var lHelfer = maAbmeldung.MeldListeHelfer.Where(w => w.IdBediener == bediener.Id).ToList();

                        foreach (var meldHelfer in lHelfer)
                        {
                            abmeldungHelfer = true;

                            if (_JgOpt.JgOpt.ListeBediener.ContainsKey(meldHelfer.IdBediener))
                            {
                                var meldung = meldHelfer.Abmeldung();
                                maAbmeldung.MeldListeHelfer.Remove(meldHelfer);
                                _JgOpt.QueueSend($"Helfer {_JgOpt.JgOpt.ListeBediener[meldHelfer.IdBediener]} abgemeldet", maAbmeldung, meldung);
                                JgLog.Set(Maschine, $"Helfer {_JgOpt.JgOpt.ListeBediener[meldHelfer.IdBediener].BedienerName} abgemeldet!", JgLog.LogArt.Unbedeutend);
                            }
                        }
                    }
                }

                if (ScanAusgabe.Meldung == ScannerMeldung.ABMELDUNG)
                {
                    if (abmeldungBediener)
                    {
                        ScanAusgabe.Set(false, false, "", "Bediener", bediener.BedienerName, "abgemeldet!");
                    }
                    else if (abmeldungHelfer)
                    {
                        ScanAusgabe.Set(false, false, "", "Helfer", bediener.BedienerName, "abgemeldet!");
                    }
                    else
                    {
                        ScanAusgabe.Set(false, true, "Keine Anmeldung", bediener.BedienerName, "registriert!");
                    }
                }
                else   // Anmeldung eintragen
                {
                    if (Maschine.MeldBediener == null)
                    {
                        Maschine.MeldBediener = new JgMeldung(bediener.Id, ScannerMeldung.ANMELDUNG);

                        _JgOpt.QueueSend($"Bediener {bediener.BedienerName} angemeldet", Maschine, Maschine.MeldBediener);
                        ScanAusgabe.Set(false, false, "", "Bediener", bediener.BedienerName, "angemeldet!");
                        JgLog.Set(Maschine, $"Bediener {bediener.BedienerName} angemeldet!", JgLog.LogArt.Unbedeutend);
                    }
                    else // Wenn ein Bediener angemeldet, wird ein Helfer angemeldet
                    {
                        var meld = new JgMeldung(bediener.Id, ScannerMeldung.ANMELDUNG);
                        Maschine.MeldListeHelfer.Add(meld);

                        _JgOpt.QueueSend($"Helfer {bediener.BedienerName} angemeldet", Maschine, meld);
                        ScanAusgabe.Set(false, false, "", "Helfer", bediener.BedienerName, "angemeldet!");
                        JgLog.Set(Maschine, $"Helfer {bediener.BedienerName} angemeldet!", JgLog.LogArt.Unbedeutend);
                    }
                }
            }
        }
예제 #16
0
        public JgScannerAusgabe TextEmpfangen(string TextEmpfangen)
        {
            var scanAusgabe = new JgScannerAusgabe(TextEmpfangen);

            if (scanAusgabe.ScannerKennung == null)
            {
                JgLog.Set(null, $"Sannernummer {TextEmpfangen} zu klein", JgLog.LogArt.Fehler);
            }
            else
            {
                var maschine = _JgOpt.JgOpt.ListeMaschinen.FirstOrDefault(f => f.Value.NummerScanner == scanAusgabe.ScannerKennung).Value;
                if (maschine == null)
                {
                    JgLog.Set(null, $"Maschine mit Scannernummer {scanAusgabe.ScannerKennung} nicht gefunden", JgLog.LogArt.Fehler);
                    scanAusgabe.Set(false, true, "Maschine nicht", "gefunden");
                }
                else if ((scanAusgabe.TextEmpfangen.Length == 16) && (scanAusgabe.TextEmpfangen[13] == 'S'))
                {
                    JgLog.Set(maschine, $"Schalter getrückt: {scanAusgabe.ScannKoerper}", JgLog.LogArt.Info);
                    scanAusgabe.Set(false, false, $"Schalter {scanAusgabe.ScannKoerper}", "gedrückt");
                }
                else if (scanAusgabe.TextEmpfangen.Length < 17)
                {
                    JgLog.Set(maschine, $"Scanner {scanAusgabe.TextEmpfangen}. Text zu kurz.", JgLog.LogArt.Fehler);
                    scanAusgabe.Set(false, true, $"Text zu kurz");
                }
                else
                {
                    if (scanAusgabe.VorgangScan != ScannerVorgang.FEHLER)
                    {
                        switch (scanAusgabe.VorgangScan)
                        {
                        case ScannerVorgang.BF2D:
                        case ScannerVorgang.TEST: scanAusgabe.Meldung = ScannerMeldung.TES_____T; break;

                        case ScannerVorgang.SCHALTER: scanAusgabe.Meldung = ScannerMeldung.SCHALTE_R; break;

                        case ScannerVorgang.MITA:
                            if (TextEmpfangen[17] == '0')
                            {
                                scanAusgabe.Meldung = ScannerMeldung.ANMELDUNG;
                            }
                            else
                            {
                                scanAusgabe.Meldung = ScannerMeldung.ABMELDUNG;
                            }
                            break;

                        case ScannerVorgang.PROG:
                            var scanProgrammText = (scanAusgabe.TextEmpfangen.Length < 26) ? null : scanAusgabe.TextEmpfangen.Substring(17, 9);
                            Enum.TryParse <ScannerMeldung>(scanProgrammText, true, out scanAusgabe.Meldung);
                            break;
                        }

                        if ((scanAusgabe.VorgangScan != ScannerVorgang.MITA) && (maschine.MeldBediener == null))
                        {
                            JgLog.Set(maschine, "Kein Bediener angemeldet.", JgLog.LogArt.Info);
                            scanAusgabe.Set(false, true, "", "Kein Bediener", "angemeldet !");
                        }
                        else
                        {
                            try
                            {
                                scanAusgabe.ScannerMitDisplay = maschine.ScannerMitDisplay;

                                switch (scanAusgabe.VorgangScan)
                                {
                                case ScannerVorgang.BF3D:
                                case ScannerVorgang.BF2D:
                                    scanAusgabe.BvbsString = scanAusgabe.VorgangScan.ToString() + scanAusgabe.ScannKoerper;
                                    MaschineBvbsEintragen(scanAusgabe, maschine);
                                    if (scanAusgabe.MeldungAnMaschine)
                                    {
                                        maschine.SendeDatenZurMaschine(scanAusgabe.BvbsString);
                                    }
                                    break;

                                case ScannerVorgang.MITA:
                                    MaschineAnmeldungEintragen(scanAusgabe, maschine);
                                    break;

                                case ScannerVorgang.PROG:
                                    MaschineMeldungEintragen(scanAusgabe, maschine);
                                    break;
                                }
                            }
                            catch (Exception ex)
                            {
                                ExceptionPolicy.HandleException(ex, "Policy");
                                throw new Exception("Felhler in ScannerAusgabe", ex);
                            }
                        }
                    }
                }
            }

            return(scanAusgabe);
        }
예제 #17
0
        public void TaskScannerMaschineStarten(JgOptionenCraddle CraddelOptionen)
        {
            var ctScannerMaschine = CraddelOptionen.JgOpt.CraddelTokensSource.Token;

            TaskScannerMaschine = new Task((optCraddel) =>
            {
                var optCrad        = (JgOptionenCraddle)optCraddel;
                var auswertScanner = new JgScannerAuswertung(optCrad);

                var msg                 = "";
                TcpClient client        = null;
                NetworkStream netStream = null;

                while (true)
                {
                    JgLog.Set(null, $"Verbindungsaufbau {optCrad.Info}", JgLog.LogArt.Info);

                    if (!Helper.IstPingOk(optCrad.CraddleIpAdresse, out msg))
                    {
                        JgLog.Set(null, $"Ping Fehler {optCrad.Info}\nGrund: {msg}", JgLog.LogArt.Info);
                        Thread.Sleep(20000);
                        continue;
                    }

                    try
                    {
                        client = new TcpClient(optCrad.CraddleIpAdresse, optCrad.CraddlePort);
                    }
                    catch (Exception ex)
                    {
                        JgLog.Set(null, $"Fehler Verbindungsaufbau {optCrad.Info}\nGrund: {ex.Message}", JgLog.LogArt.Info);
                        Thread.Sleep(30000);
                        continue;
                    }

                    JgLog.Set(null, $"Verbindung Ok {optCrad.Info}", JgLog.LogArt.Info);
                    netStream = client.GetStream();

                    while (true)
                    {
                        var ctsScanner = new CancellationTokenSource();
                        var ctPing     = ctsScanner.Token;

                        // Wenn dieser Task eher als Scanner beendet wird, liegt ein Verbindungsfehler vor;

                        var taskKontrolle = Task.Factory.StartNew((CraddelIpAdresse) =>
                        {
                            var ipCraddle = (string)CraddelIpAdresse;

                            while (true)
                            {
                                if (ctPing.IsCancellationRequested)
                                {
                                    break;
                                }
                                Thread.Sleep(30000);
                                if (ctPing.IsCancellationRequested)
                                {
                                    break;
                                }

                                if (!Helper.IstPingOk(ipCraddle, out msg))
                                {
                                    break;
                                }

                                JgLog.Set(null, $"Ping {ipCraddle} Ok.", JgLog.LogArt.Unbedeutend);
                            }
                        }, optCrad.CraddleIpAdresse, ctPing);

                        var ctScanner = ctsScanner.Token;

                        var taskScannen = Task.Factory.StartNew <string>((nStream) =>
                        {
                            var nStr = (NetworkStream)netStream;

                            byte[] bufferEmpfang = new byte[4096];
                            int anzZeichen       = 0;

                            try
                            {
                                anzZeichen = nStr.Read(bufferEmpfang, 0, bufferEmpfang.Length);
                            }
                            catch (Exception ex)
                            {
                                if (!ctScanner.IsCancellationRequested)
                                {
                                    var letzteZeichen = Encoding.ASCII.GetString(bufferEmpfang, 0, anzZeichen);
                                    JgLog.Set(null, $"Fehler Datenempfang {optCrad.Info}!\nLetzter Text: {letzteZeichen}\nGrund: {ex.Message}", JgLog.LogArt.Warnung);
                                    return(optCrad.TextBeiFehler);
                                }
                            }

                            return(Encoding.ASCII.GetString(bufferEmpfang, 0, anzZeichen));
                        }, netStream, ctScanner);

                        Task.WaitAny(new Task[] { taskKontrolle, taskScannen });
                        ctsScanner.Cancel();

                        if (taskScannen.IsCompleted)
                        {
                            var textEmpfangen = taskScannen.Result;

                            if (textEmpfangen == optCrad.TextBeiFehler)
                            {
                                JgLog.Set(null, $"{optCrad.Info} -> Fehlertext angesprochen.", JgLog.LogArt.Warnung);
                            }
                            else if (textEmpfangen.Length == 1)
                            {
                                JgLog.Set(null, $"{optCrad.Info} -> Ein Zeichen Empfangen: {Convert.ToByte(textEmpfangen[0])}", JgLog.LogArt.Warnung);
                            }
                            else if (textEmpfangen.Length < 1)
                            {
                                JgLog.Set(null, $"{optCrad.Info} -> Leeres Zeichen Empfangen!", JgLog.LogArt.Warnung);
                            }
                            else
                            {
                                if (textEmpfangen.Contains(optCrad.TextVerbinungOk))
                                {
                                    JgLog.Set(null, $"Verbindung Craddle OK ! {textEmpfangen}", JgLog.LogArt.Info);
                                }
                                else
                                {
                                    var ergScanner = auswertScanner.TextEmpfangen(taskScannen.Result);
                                    netStream.Write(ergScanner.AusgabeAufCraddle, 0, ergScanner.AusgabeAufCraddle.Length);
                                }
                                continue;
                            }
                        }
                        try
                        {
                            JgLog.Set(null, $"Abbruch {optCrad.Info}!", JgLog.LogArt.Warnung);

                            if (client != null)
                            {
                                if (client.Connected)
                                {
                                    client.Close();
                                }
                                client.Dispose();
                            }
                            client = null;
                            if (netStream != null)
                            {
                                netStream.Close();
                                netStream.Dispose();
                            }
                            netStream = null;
                        }
                        catch { };

                        break;
                    }
                }
            }, CraddelOptionen, ctScannerMaschine, TaskCreationOptions.LongRunning);

            TaskScannerMaschine.Start();
        }
예제 #18
0
        public void DatenabgleichStarten()
        {
            var ctDatenabfrage = _JgOpt.CraddelTokensSource.Token;
            var task           = new Task((JgOptionenSenden) =>
            {
                var optSenden = (JgOptionen)JgOptionenSenden;

                while (true)
                {
                    var queue = new MessageQueue(optSenden.PathQueue, QueueAccessMode.Receive)
                    {
                        Formatter = new XmlMessageFormatter(new Type[] { typeof(ServiceRef.JgWcfMeldung), typeof(ServiceRef.JgWcfBauteil) })
                    };

                    while (true)
                    {
                        try
                        {
                            MessageQueueTransaction myTransaction = null;

                            try
                            {
                                using (var verb = new ServiceRef.WcfServiceClient())
                                {
                                    while (true)
                                    {
                                        object sendObj = null;
                                        myTransaction  = new MessageQueueTransaction();

                                        try
                                        {
                                            myTransaction.Begin();
                                            var erg = queue.Receive(new TimeSpan(0, 10, 0), myTransaction);
                                            sendObj = erg.Body;
                                        }
                                        catch (MessageQueueException ex)
                                        {
                                            myTransaction.Abort();

                                            if (ex.MessageQueueErrorCode != MessageQueueErrorCode.IOTimeout)
                                            {
                                                throw new Exception($"Fehler lesen Meldung aus MessageQueue!", ex);
                                            }
                                        }

                                        // Wenn nach 10 Minute keine Aktion vorhanden ist, wird die Verbindung für 10 Minuten
                                        // geschlossen und danach wieder neu gestartet.

                                        if (sendObj == null)
                                        {
                                            JgLog.Set(null, $"Verbindung wird wegen Inaktivität für 10 Minuten geschlossen !", JgLog.LogArt.Info);
                                            //todo Verbindungsauszeit eintragen
                                            Thread.Sleep(new TimeSpan(0, 10, 0));
                                        }
                                        else
                                        {
                                            if (sendObj is ServiceRef.JgWcfMeldung wcfMeldung)
                                            {
                                                var maschine = JgInit.GetMaschine(optSenden.ListeMaschinen, wcfMeldung.IdMaschine);
                                                var maStatus = new JgMaschinenStatus(maschine, optSenden.PfadDaten);
                                                maStatus.SaveStatusMaschineLocal();

                                                var antwortServer = verb.SendeMeldung(wcfMeldung, maStatus.GetStatusAsXmlByte());

                                                if (antwortServer.Substring(0, 2) == "OK")
                                                {
                                                    myTransaction.Commit();
                                                    if (antwortServer.Length > 2)
                                                    {
                                                        JgLog.Set(null, antwortServer.Substring(2), JgLog.LogArt.Fehler);
                                                    }
                                                    else
                                                    {
                                                        JgLog.Set(null, $"Wcf Meldung {wcfMeldung.Meldung} mit Id {wcfMeldung.Id} gesendet", JgLog.LogArt.Info);
                                                    }
                                                }
                                                else
                                                {
                                                    myTransaction.Abort();
                                                    JgLog.Set(null, $"Wpf 'Meldung' Fehler durch Server!\nGrund: {antwortServer}", JgLog.LogArt.Fehler);
                                                }
                                            }
                                            else if (sendObj is ServiceRef.JgWcfBauteil wcfBauteil)
                                            {
                                                var maschine = JgInit.GetMaschine(optSenden.ListeMaschinen, wcfBauteil.IdMaschine);
                                                var maStatus = new JgMaschinenStatus(maschine, optSenden.PfadDaten);
                                                maStatus.SaveStatusMaschineLocal();

                                                var antwortServer = verb.SendeBauteil(wcfBauteil, maStatus.GetStatusAsXmlByte());

                                                if (antwortServer.Substring(0, 2) == "OK")
                                                {
                                                    myTransaction.Commit();
                                                    if (antwortServer.Length > 2)
                                                    {
                                                        JgLog.Set(null, antwortServer.Substring(2), JgLog.LogArt.Fehler);
                                                    }
                                                    else
                                                    {
                                                        JgLog.Set(null, $"Wcf Bauteil mit Id {wcfBauteil.Id} gesendet", JgLog.LogArt.Info);
                                                    }
                                                }
                                                else
                                                {
                                                    myTransaction.Abort();
                                                    JgLog.Set(null, $"Wpf 'Bauteil' Fehler durch Server!\nGrund: {antwortServer}", JgLog.LogArt.Fehler);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            catch (TimeoutException ex)
                            {
                                if (myTransaction != null)
                                {
                                    myTransaction.Abort();
                                }

                                throw new TimeoutException("Wpf Zeitüberschreitung", ex);
                            }
                            catch (FaultException faultEx)
                            {
                                if (myTransaction != null)
                                {
                                    myTransaction.Abort();
                                }
                                switch (faultEx.Code.Name)
                                {
                                case "InternalServiceFault":
                                    JgLog.Set(null, faultEx.Message, JgLog.LogArt.Info);
                                    Thread.Sleep(10000);
                                    break;

                                default:
                                    var msg = (faultEx.Code.SubCode == null) ? "" : " -> Subcode: " + faultEx.Code.SubCode.Name;
                                    msg     = $"WCF Faultexeption -> {faultEx.Code.Name} Message: {faultEx.Message} {msg}";
                                    JgLog.Set(null, msg, JgLog.LogArt.Info);
                                    throw new Exception(msg, faultEx);
                                }
                            }
                            catch (CommunicationException ex)
                            {
                                if (myTransaction != null)
                                {
                                    myTransaction.Abort();
                                }

                                JgLog.Set(null, $"Verbindung zum Server konnte nicht aufgebaut werden !\nGrund: {ex.Message}", JgLog.LogArt.Warnung);
                                Thread.Sleep(10000);
                            }
                            catch (Exception ex)
                            {
                                if (myTransaction != null)
                                {
                                    myTransaction.Abort();
                                }
                                throw new Exception("WCF - Unbekannter Fehler", ex);
                            }
                        }
                        catch (Exception ex)
                        {
                            ExceptionPolicy.HandleException(ex, "Policy");
                            Thread.Sleep(10000);
                            break;
                        }
                    }
                }
            }, _JgOpt, ctDatenabfrage, TaskCreationOptions.LongRunning);

            task.Start();
        }