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); } }
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; } } }