public void Disconnect()
        {
            if (_client.IsConnected)
            {
                _client.Close();
                ConnectionState = ConnectionStates.Offline;

                LogMessegeRaportareAjustaj.WriteMessegeToLogFile("S-a executat deconectare PLC" + _nume);
                //MessageBox.Show("S-a deconectat PLC" + _nume);
            }
        }
Exemple #2
0
        void ProgramBackground()
        {
            try
            {
                DateTime timpStartProgram         = DateTime.Now;
                DateTime timpStartRandamentActual = DateTime.Now;

                // Initializare variabile PLC-uri
                PLCViewModel rullatriceVechePlc = new PLCViewModel(new PLCService(CpuType.S7300, "172.16.4.167", 0, 2, "Rullatrice Project Man",
                                                                                  "A2.0", "A2.1", "A2.2", "A2.3", "A2.4", "A2.5", "A2.6"));
                PLCViewModel rullatriceLandgrafPLC = new PLCViewModel(new PLCService(CpuType.S7400, "172.16.4.72", 0, 2, "Rullatrice Landgraf",
                                                                                     "A35.4", "A35.5", "A35.6", "A35.7", "A36.0", "A36.6", "A36.7"));
                PLCViewModel elindPLC = new PLCViewModel(new PLCService(CpuType.S7300, "172.16.4.5", 0, 2, "Elind",
                                                                        "A47.6", "A47.0", "A47.1", "A47.2", "A47.3", "A47.4", "A47.5"));
                PLCViewModel pelatriceLandgrafPLC = new PLCViewModel(new PLCService(CpuType.S7300, "192.168.1.1", 0, 2, "Pellatrice Landgraf",
                                                                                    "A22.6", "A23.0", "A23.1", "A23.4", "A23.5", "A23.6", "A23.7"));
                PLCViewModel presaValdoraPLC = new PLCViewModel(new PLCService(CpuType.S71500, "172.16.4.195", 0, 2, "Presa Valdora",
                                                                               "A3.0", "A3.1", "A3.2", "A3.3", "A3.4", "A3.5", "A3.6"));

                // Creare lista defecte pentru PLC-uri
                CreareListaDefecte CLDrullatriceVechePlc    = new CreareListaDefecte(rullatriceVechePlc);
                CreareListaDefecte CLDrullatriceLandgrafPLC = new CreareListaDefecte(rullatriceLandgrafPLC);
                CreareListaDefecte CLDelindPLC             = new CreareListaDefecte(elindPLC);
                CreareListaDefecte CLDpelatriceLandgrafPLC = new CreareListaDefecte(pelatriceLandgrafPLC);
                CreareListaDefecte CLDpresaValdoraPLC      = new CreareListaDefecte(presaValdoraPLC);

                CreareRaportZilnic raportZilnic = new CreareRaportZilnic(CLDrullatriceVechePlc.listaDefecte,
                                                                         CLDrullatriceLandgrafPLC.listaDefecte, CLDelindPLC.listaDefecte,
                                                                         CLDpelatriceLandgrafPLC.listaDefecte, CLDpresaValdoraPLC.listaDefecte);

                try
                {
                    while (executieProgram)
                    {
                        // Refresh citire variabile PLC
                        rullatriceVechePlc._plc.RefreshValues();
                        rullatriceLandgrafPLC._plc.RefreshValues();
                        elindPLC._plc.RefreshValues();
                        pelatriceLandgrafPLC._plc.RefreshValues();
                        presaValdoraPLC._plc.RefreshValues();

                        // Adaugare defect lista defecte
                        CLDrullatriceVechePlc.AdaugareDefectListaDefecte();
                        CLDrullatriceLandgrafPLC.AdaugareDefectListaDefecte();
                        CLDelindPLC.AdaugareDefectListaDefecte();
                        CLDpelatriceLandgrafPLC.AdaugareDefectListaDefecte();
                        CLDpresaValdoraPLC.AdaugareDefectListaDefecte();

                        // Resetare ora start randament actual
                        if (DateTime.Now.ToString("HH:mm:ss") == oraRaport) // setare ora pentru raport
                        {
                            timpStartRandamentActual = DateTime.Now;
                            //MessageBox.Show("S-a resetat ora randament actual: " + timpStartRandamentActual.ToString("HH:mm:ss"));
                        }
                        // Creare raport la ora setata
                        // [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]
                        raportZilnic.CreareRaportZilnicListaDefecteUtilaje(oraRaport, adreseMailDeTrimis,
                                                                           delayDefectRaport, timpStartProgram.ToString("dd/MM/yyyy HH:mm"));

                        // Calcul si afisare randament realizat la ora raport
                        if (DateTime.Now.AddSeconds(-30).ToString("HH:mm:ss") == oraRaport)
                        {
                            // Afisare randament realizat
                            this.Dispatcher.Invoke(() =>
                            {
                                rullatriceVecheRandamentRealizat.Text = raportZilnic.GetRandamentRealizat(raportZilnic.GetnumeFisierRullatriceVeche).Item1;
                            });
                            // Afisare randament realizat
                            this.Dispatcher.Invoke(() =>
                            {
                                rullatriceLandgrafRandamentRealizat.Text = raportZilnic.GetRandamentRealizat(raportZilnic.GetnumeFisierRullatriceLandgraf).Item1;
                            });
                            // Afisare randament realizat
                            this.Dispatcher.Invoke(() =>
                            {
                                elindRandamentRealizat.Text = raportZilnic.GetRandamentRealizat(raportZilnic.GetnumeFisierElind).Item1;
                            });
                            // Afisare randament realizat
                            this.Dispatcher.Invoke(() =>
                            {
                                pellatriceLandgrafRandamentRealizat.Text = raportZilnic.GetRandamentRealizat(raportZilnic.GetnumeFisierPellatrice).Item1;
                            });
                            // Afisare randament realizat
                            this.Dispatcher.Invoke(() =>
                            {
                                presaValdoraRandamentRealizat.Text = raportZilnic.GetRandamentRealizat(raportZilnic.GetnumeFisierPresaValdora).Item1;
                            });

                            // Afisare grafic stationari
                            this.Dispatcher.Invoke(() =>
                            {
                                ((ColumnSeries)rullatriceVecheChart.Series[0]).ItemsSource = raportZilnic.GetRandamentRealizat(raportZilnic.GetnumeFisierRullatriceVeche).Item2;
                            });
                            // Afisare grafic stationari
                            this.Dispatcher.Invoke(() =>
                            {
                                ((ColumnSeries)rullatriceLandgrafChart.Series[0]).ItemsSource = raportZilnic.GetRandamentRealizat(raportZilnic.GetnumeFisierRullatriceLandgraf).Item2;
                            });
                            // Afisare grafic stationari
                            this.Dispatcher.Invoke(() =>
                            {
                                ((ColumnSeries)elindChart.Series[0]).ItemsSource = raportZilnic.GetRandamentRealizat(raportZilnic.GetnumeFisierElind).Item2;
                            });
                            // Afisare grafic stationari
                            this.Dispatcher.Invoke(() =>
                            {
                                ((ColumnSeries)pellatriceChart.Series[0]).ItemsSource = raportZilnic.GetRandamentRealizat(raportZilnic.GetnumeFisierPellatrice).Item2;
                            });
                            // Afisare grafic stationari
                            this.Dispatcher.Invoke(() =>
                            {
                                ((ColumnSeries)presaValdoraChart.Series[0]).ItemsSource = raportZilnic.GetRandamentRealizat(raportZilnic.GetnumeFisierPresaValdora).Item2;
                            });
                        }

                        this.Dispatcher.Invoke(() =>
                        {
                            DataDeAfisat.Text = DateTime.Now.ToString("hh:mm:ss");
                        });

                        /*
                         * Grafica Rullatrice Veche
                         */
                        // Afisare text functionare rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            rullatriceVecheText.Text = rullatriceVechePlc.GetTextFunctionare();
                        });

                        // Afisare Background text functionare rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            rullatriceVecheTextBackground.Background = rullatriceVechePlc.GetTextBackground();
                        });

                        // Afisare Background grid rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            rullatriceVecheGridBackground.Background = rullatriceVechePlc.GetGridBackground();
                        });

                        // Afisare stare conexiune rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            rullatriceVecheStareConexiune.Text = rullatriceVechePlc.GetStareConexiune();
                        });

                        // Afisare scan time rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            rullatriceVecheScanTime.Text = rullatriceVechePlc.GetScanTimeText();
                        });

                        // Afisare randament actual
                        this.Dispatcher.Invoke(() =>
                        {
                            rullatriceVecheRandamanetActual.Text = raportZilnic.GetRandamentActual(raportZilnic.listaDefecteRullatriceVechePLC, timpStartRandamentActual);
                        });



                        /*
                         * Grafica Rullatrice Landgraf
                         */
                        // Afisare text functionare rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            rullatriceLandgrafText.Text = rullatriceLandgrafPLC.GetTextFunctionare();
                        });

                        // Afisare Background text functionare rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            rullatriceLandgrafTextBackgound.Background = rullatriceLandgrafPLC.GetTextBackground();
                        });

                        // Afisare Background grid rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            rullatriceLandgrafGridBackground.Background = rullatriceLandgrafPLC.GetGridBackground();
                        });

                        // Afisare stare conexiune rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            rullatriceLandgrafStareConexiune.Text = rullatriceLandgrafPLC.GetStareConexiune();
                        });

                        // Afisare scan time rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            rullatriceLandgrafScanTime.Text = rullatriceLandgrafPLC.GetScanTimeText();
                        });

                        // Afisare randament actual
                        this.Dispatcher.Invoke(() =>
                        {
                            rullatriceLandgrafRandamentActual.Text = raportZilnic.GetRandamentActual(raportZilnic.listaDefecteRullatriceLandgrafPLC, timpStartRandamentActual);
                        });

                        /*
                         * Grafica Elind
                         */
                        // Afisare text functionare rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            elindText.Text = elindPLC.GetTextFunctionare();
                        });

                        // Afisare Background text functionare rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            elindTextBackground.Background = elindPLC.GetTextBackground();
                        });

                        // Afisare Background grid rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            elindGridBackgound.Background = elindPLC.GetGridBackground();
                        });

                        // Afisare stare conexiune rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            elindStareConexiune.Text = elindPLC.GetStareConexiune();
                        });

                        // Afisare scan time rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            elindScanTime.Text = elindPLC.GetScanTimeText();
                        });

                        // Afisare randament actual
                        this.Dispatcher.Invoke(() =>
                        {
                            elindRandamentActual.Text = raportZilnic.GetRandamentActual(raportZilnic.listaDefecteElindPLC, timpStartRandamentActual);
                        });


                        /*
                         * Grafica Pellatrice Landgraf
                         */
                        // Afisare text functionare rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            pellatriceLandgrafText.Text = pelatriceLandgrafPLC.GetTextFunctionare();
                        });

                        // Afisare Background text functionare rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            pellatriceLandgrafTextBackground.Background = pelatriceLandgrafPLC.GetTextBackground();
                        });

                        // Afisare Background grid rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            pellatriceLandgrafGridBackground.Background = pelatriceLandgrafPLC.GetGridBackground();
                        });

                        // Afisare stare conexiune rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            pellatriceLandgrafStareConexiune.Text = pelatriceLandgrafPLC.GetStareConexiune();
                        });

                        // Afisare scan time rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            pellatriceLandgrafScanTime.Text = pelatriceLandgrafPLC.GetScanTimeText();
                        });

                        // Afisare randament actual
                        this.Dispatcher.Invoke(() =>
                        {
                            pellatriceLandgrafRandamentActual.Text = raportZilnic.GetRandamentActual(raportZilnic.listaDefectePelatriceLandgrafPLC, timpStartRandamentActual);
                        });

                        /*
                         * Grafica Presa Valdora
                         */
                        // Afisare text functionare rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            presaValdoraText.Text = presaValdoraPLC.GetTextFunctionare();
                        });

                        // Afisare Background text functionare rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            presaValdoraTextBackground.Background = presaValdoraPLC.GetTextBackground();
                        });

                        // Afisare Background grid rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            presaValdoraGridBackground.Background = presaValdoraPLC.GetGridBackground();
                        });

                        // Afisare stare conexiune rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            presaValdoraStareConexiune.Text = presaValdoraPLC.GetStareConexiune();
                        });

                        // Afisare scan time rullatrice veche
                        this.Dispatcher.Invoke(() =>
                        {
                            presaValdoraScanTime.Text = presaValdoraPLC.GetScanTimeText();
                        });

                        // Afisare randament actual
                        this.Dispatcher.Invoke(() =>
                        {
                            presaValdoraRandamentActual.Text = raportZilnic.GetRandamentActual(raportZilnic.listaDefectePresaValdoraPLC, timpStartRandamentActual);
                        });

                        Thread.Sleep(400);
                    }


                    rullatriceVechePlc._plc.Disconnect();
                    rullatriceLandgrafPLC._plc.Disconnect();
                    elindPLC._plc.Disconnect();
                    pelatriceLandgrafPLC._plc.Disconnect();
                    presaValdoraPLC._plc.Disconnect();
                }
                catch (Exception ex)
                {
                    LogMessegeRaportareAjustaj.WriteMessegeToLogFile(ex.Message.ToString());
                    LogMessegeRaportareAjustaj.WriteMessegeToLogFile("eroare la ultimul catch " +
                                                                     "din program inainte de finally");
                    /*throw*/
                    ;
                }
                finally
                {
                    rullatriceVechePlc._plc.Disconnect();
                    rullatriceLandgrafPLC._plc.Disconnect();
                    elindPLC._plc.Disconnect();
                    pelatriceLandgrafPLC._plc.Disconnect();
                    presaValdoraPLC._plc.Disconnect();
                    CreareRaportZilnic.TrimitereRaportMail("*****@*****.**",
                                                           LogMessegeRaportareAjustaj.GetLogFilePath(), "LogFileStationariAjustaj");
                }
            }
            catch (Exception ex)
            {
                LogMessegeRaportareAjustaj.WriteMessegeToLogFile(ex.Message.ToString());
                LogMessegeRaportareAjustaj.WriteMessegeToLogFile("eroare la ultimul catch " +
                                                                 "din program dupa de finally");
                //MessageBox.Show(ex.Message);
            }
        }
        public void RefreshValues()
        {
            DateTime startScanTime = DateTime.Now;

            if (ConnectionState == ConnectionStates.Online)
            {
                lock (_locker)
                {
                    try
                    {
                        var _cancelTasks = new CancellationTokenSource();
                        var performTaskCitireVariabile = Task.Run(() =>
                        {
                            NumePlc           = _nume;
                            Oprire1           = Convert.ToBoolean(_client.Read(_oprire1));           // BreakDown in Progress [1 = BreakDown]
                            Oprire2           = Convert.ToBoolean(_client.Read(_oprire2));           // Second Break Down In Progress [1 = Second Break Down]
                            DefMecanic        = Convert.ToBoolean(_client.Read(_defMecanic));        // Mechanical Cause
                            DefElectric       = Convert.ToBoolean(_client.Read(_defElectric));       // Electrical Cause
                            OprireProgramata  = Convert.ToBoolean(_client.Read(_oprireProgramata));  // Programmed Cause
                            OprireTehnologica = Convert.ToBoolean(_client.Read(_oprireTehnologica)); // Technological Cause
                            LipsaPodMaterial  = Convert.ToBoolean(_client.Read(_lipsaPodMaterial));  // No Creane/ No Material Cause

                            if (Oprire1)
                            {
                                if (DefMecanic)
                                {
                                    MotivStationare = "Defect mecanic";
                                }
                                else if (DefElectric)
                                {
                                    MotivStationare = "Defect electric";
                                }
                                else if (OprireProgramata)
                                {
                                    MotivStationare = "Oprire programata";
                                }
                                else if (OprireTehnologica)
                                {
                                    MotivStationare = "Oprire tehnologica";
                                }
                                else if (LipsaPodMaterial)
                                {
                                    MotivStationare = "Lipsa pod rulant / Lipsa material";
                                }
                                else
                                {
                                    MotivStationare = "Nu s-a apasat cauza";
                                }
                            }
                            else
                            {
                                MotivStationare = "Functioneaza";
                            }
                        }, _cancelTasks.Token);
                        if (!performTaskCitireVariabile.Wait(TimeSpan.FromSeconds(2)))
                        {
                            _cancelTasks.Cancel();                                                            // Asteapta Task sa fie complet in 2 sec
                        }
                    }
                    catch (AggregateException e)
                    {
                        ConnectionState = ConnectionStates.Offline;
                        //Console.WriteLine("AggregateException");
                        foreach (var v in e.InnerExceptions)
                        {
                            Console.WriteLine(e.Message + " " + v.Message);
                        }
                        LogMessegeRaportareAjustaj.WriteMessegeToLogFile("Eroare citire variabile plc, cancel Task" + e.Message);
                        LogMessegeRaportareAjustaj.WriteMessegeToLogFile("eroare refresh Plc: " +
                                                                         _nume + " dupa catch eroare PlcException");
                    }
                    catch (OperationCanceledException Ex)
                    {
                        ConnectionState = ConnectionStates.Offline;
                        //Console.WriteLine(Ex.ToString());
                        //Console.WriteLine("OperationCanceledException in Task {0}: The operation was cancelled.",
                        //                    t2.Id);
                        LogMessegeRaportareAjustaj.WriteMessegeToLogFile("Eroare citire variabile plc, cancel Task" + Ex.Message);
                        LogMessegeRaportareAjustaj.WriteMessegeToLogFile("eroare refresh Plc: " +
                                                                         _nume + " dupa catch eroare PlcException");
                    }
                    catch (PlcException err)
                    {
                        ConnectionState = ConnectionStates.Offline;
                        LogMessegeRaportareAjustaj.WriteMessegeToLogFile(err.ErrorCode.ToString());
                        LogMessegeRaportareAjustaj.WriteMessegeToLogFile("eroare PlcException " +
                                                                         "la refresh Plc" + _nume);
                    }
                    catch (Exception ex)
                    {
                        ConnectionState = ConnectionStates.Offline;
                        LogMessegeRaportareAjustaj.WriteMessegeToLogFile(ex.Message.ToString());
                        LogMessegeRaportareAjustaj.WriteMessegeToLogFile("eroare refresh Plc: " +
                                                                         _nume + " dupa catch eroare PlcException");
                        //throw;
                    }
                }
            }
            ScanTime = DateTime.Now - startScanTime;

            // Verificam interval citire variabile daca este mai mare de 900ms, si mai incercam sa reconectam daca is revine
            if (ScanTime.TotalMilliseconds > 1900)
            {
                ConnectionState = ConnectionStates.Offline;
                Disconnect();
                MotivStationare = "Plc deconectat";
            }

            // Verificam daca este offline, incercam sa ne reconectam
            if (ConnectionState == ConnectionStates.Offline)
            {
                if (DateTime.Now.ToString("ss") == "20")
                {
                    Connect();
                }
            }
            //MessageBox.Show("Oprire 1: "+ Oprire1 +
            //    "\nOprire 2: " + Oprire2 +
            //    "\nDefect Mcanic: " + DefMecanic +
            //    "\nDefect Electric: " + DefElectric +
            //    "\nOprire programata: " + OprireProgramata +
            //    "\nOprire tehnologica: " + OprireTehnologica +
            //    "\nLipsa pod/ material: " + LipsaPodMaterial);
        }
        public void Connect()
        {
            if (ConnectionState != ConnectionStates.Online)
            {
                try
                {
                    ConnectionState = ConnectionStates.Connecting;
                    var _cancelTasks = new CancellationTokenSource();
                    var performTaskCheckAvailability = Task.Run(() =>
                    {
                        if (_client.IsAvailable)
                        {
                            _client.Open();
                        }
                    }, _cancelTasks.Token);
                    if (!performTaskCheckAvailability.Wait(TimeSpan.FromSeconds(0.5)))
                    {
                        _cancelTasks.Cancel();                                                                // Asteapta Task sa fie complet in 1 sec
                    }
                    bool result = false;
                    var  performTaskCitireVariabile = Task.Run(() =>
                    {
                        result = _client.IsConnected;
                    }, _cancelTasks.Token);
                    if (!performTaskCitireVariabile.Wait(TimeSpan.FromSeconds(1)))
                    {
                        _cancelTasks.Cancel();                                                            // Asteapta Task sa fie complet in 1 sec
                    }
                    if (result)
                    {
                        ConnectionState = ConnectionStates.Online;
                        LogMessegeRaportareAjustaj.WriteMessegeToLogFile("S-a conectat PLC " + _nume);
                    }
                    else
                    {
                        //Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "\t Connection error: nu a reusit conectarea");
                        ConnectionState = ConnectionStates.Offline;
                    }

                    //MessageBox.Show("S-a conectat PLC " +_nume);
                }
                catch (AggregateException e)
                {
                    ConnectionState = ConnectionStates.Offline;
                    //Console.WriteLine("AggregateException");
                    foreach (var v in e.InnerExceptions)
                    {
                        Console.WriteLine(e.Message + " " + v.Message);
                    }
                    LogMessegeRaportareAjustaj.WriteMessegeToLogFile("Eroare citire variabile plc, cancel Task" + e.Message);
                    LogMessegeRaportareAjustaj.WriteMessegeToLogFile("eroare conectare Plc: " +
                                                                     _nume + " dupa catch eroare PlcException");
                }
                catch (OperationCanceledException Ex)
                {
                    ConnectionState = ConnectionStates.Offline;
                    //Console.WriteLine(Ex.ToString());
                    //Console.WriteLine("OperationCanceledException in Task {0}: The operation was cancelled.",
                    //                    t2.Id);
                    LogMessegeRaportareAjustaj.WriteMessegeToLogFile("Eroare citire variabile plc, cancel Task" + Ex.Message);
                    LogMessegeRaportareAjustaj.WriteMessegeToLogFile("eroare conectare Plc: " +
                                                                     _nume + " dupa catch eroare PlcException");
                }
                catch (PlcException err)
                {
                    ConnectionState = ConnectionStates.Offline;
                    LogMessegeRaportareAjustaj.WriteMessegeToLogFile(err.ErrorCode.ToString());
                    LogMessegeRaportareAjustaj.WriteMessegeToLogFile("eroare PlcException " +
                                                                     "la conectare Plc" + _nume);
                }
                catch (Exception ex)
                {
                    ConnectionState = ConnectionStates.Offline;
                    LogMessegeRaportareAjustaj.WriteMessegeToLogFile(ex.Message.ToString());
                    LogMessegeRaportareAjustaj.WriteMessegeToLogFile("eroare conectare Plc: " +
                                                                     _nume + " dupa catch eroare PlcException");
                    //throw;
                }
            }
        }