using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; using Tango.BL.Entities; using Tango.Core; using Tango.PMR.Diagnostics; using Tango.PPC.Common; using Tango.Settings; namespace Tango.PPC.UI.Models { public class MachineOverviewModel : ExtendedObject { public static double DryerAirMaxValue = 120.0; public MachineOverviewItem DryerZone3 { get; set; } public MachineOverviewItem DryerAir { get; set; } public MachineOverviewItem Tunnel { get; set; } public MachineOverviewItem PumpsPressure { get; set; } public MachineOverviewItem Lubricant { get; set; } private PPCSettings _settings; /// /// Gets the main PPC settings. /// public PPCSettings Settings { get { if (_settings == null) { _settings = SettingsManager.Default.GetOrCreate(); } return _settings; } private set { _settings = value; } } public MachineOverviewModel() { DryerZone3 = new MachineOverviewItem(); DryerAir = new MachineOverviewItem(); DryerAir.MaxValue = DryerAirMaxValue; Tunnel = new MachineOverviewItem(); PumpsPressure = new MachineOverviewItem(); PumpsPressure.MaxValue = 6; Lubricant = new MachineOverviewItem(); Lubricant.MaxValue = 100; Lubricant.Value = 100; } public void Update(StartDiagnosticsResponse diagnostics, Rml rml, ProcessParametersTable processParameters) { //Dryer Zone 3 var dryerZone3State = diagnostics.HeatersStates.FirstOrDefault(x => x.HeaterType == HeaterType.EDryerHeater3); UpdateHeaterItem(DryerZone3, dryerZone3State); //Dryer Air var dryerAirState = diagnostics.Monitors.EuSpare1.FirstOrDefault(); UpdateDryerAirItem(dryerAirState); //diagnostics.HeatersStates.FirstOrDefault(x => x.HeaterType == HeaterType.DryerAirHeater); //Tunnel var tunnelState = diagnostics.HeatersStates.FirstOrDefault(x => x.HeaterType == HeaterType.ETunnelHeater); UpdateHeaterItem(Tunnel, tunnelState); //Pumps Pressure //EuDispenser1Pressure List EuDispensersPressure = new List(); var EuDispenser1PressureValue = diagnostics.Monitors.EuDispenser1Pressure.FirstOrDefault(); EuDispensersPressure.Add(EuDispenser1PressureValue); var EuDispenser2PressureValue = diagnostics.Monitors.EuDispenser2Pressure.FirstOrDefault(); EuDispensersPressure.Add(EuDispenser2PressureValue); var EuDispenser3PressureValue = diagnostics.Monitors.EuDispenser3Pressure.FirstOrDefault(); EuDispensersPressure.Add(EuDispenser3PressureValue); var EuDispenser4PressureValue = diagnostics.Monitors.EuDispenser4Pressure.FirstOrDefault(); EuDispensersPressure.Add(EuDispenser4PressureValue); var EuDispenser5PressureValue = diagnostics.Monitors.EuDispenser5Pressure.FirstOrDefault(); EuDispensersPressure.Add(EuDispenser5PressureValue); var EuDispenser6PressureValue = diagnostics.Monitors.EuDispenser6Pressure.FirstOrDefault(); EuDispensersPressure.Add(EuDispenser6PressureValue); var EuDispenser7PressureValue = diagnostics.Monitors.EuDispenser7Pressure.FirstOrDefault(); EuDispensersPressure.Add(EuDispenser7PressureValue); var EuDispenser8PressureValue = diagnostics.Monitors.EuDispenser8Pressure.FirstOrDefault(); EuDispensersPressure.Add(EuDispenser8PressureValue); var pumpsPressuerValue = EuDispensersPressure.Max();// diagnostics.Monitors.EuInkLinesPressure.SelectMany(x => x.Data).Max(); UpdatePumpsPressureItem(pumpsPressuerValue); //Lubricant var lubricantValue = diagnostics.Monitors.EuLubricantCurrent.FirstOrDefault(); UpdateLubricantItem( rml, lubricantValue); } private void UpdateHeaterItem(MachineOverviewItem item, HeaterState state) { if (state != null) { if (state.IsRampingUp && (state.SetPoint != 0 && (state.CurrentValue <= (state.SetPoint - 10)))) { item.Status = "Heating Up"; item.Color = Colors.Orange; item.DisplayValue = $"{state.CurrentValue.ToString("N1")}"; item.DisplayMaxValue = $"/{state.SetPoint}"; item.MaxValue = state.SetPoint; item.Value = state.CurrentValue; } else if (state.SetPoint == 0 || (state.CurrentValue >= (state.SetPoint - 10) && state.CurrentValue <= (state.SetPoint + 10))) { item.Status = "Operational"; item.Color = Colors.Green; item.DisplayValue = $" {state.SetPoint}"; item.DisplayMaxValue = ""; if(state.SetPoint == 0 && state.CurrentValue == 0) { item.MaxValue = 10; } else { item.MaxValue = state.SetPoint; } item.Value = state.CurrentValue; } else if (!state.IsRampingUp && (state.CurrentValue < (state.SetPoint - 10) || state.CurrentValue > (state.SetPoint + 10))) { item.Status = "Over-temperature"; item.Color = Colors.Red; item.DisplayValue = $"{state.CurrentValue.ToString("N1")}"; item.DisplayMaxValue = $"/{state.SetPoint}"; item.MaxValue = state.SetPoint; item.Value = state.CurrentValue > state.SetPoint? state.SetPoint : state.CurrentValue; } else { item.Color = Colors.Gray; item.MaxValue = 100; item.Value = 0; item.DisplayMaxValue = ""; } } } private void UpdateDryerAirItem(double currentvalue) { if (currentvalue < DryerAirMaxValue) { DryerAir.Status = "Heating Up"; DryerAir.Color = Colors.Orange; DryerAir.DisplayValue = currentvalue.ToString("N1"); } else if (currentvalue >= DryerAirMaxValue) { DryerAir.Status = "Operational"; DryerAir.Color = Colors.Green; DryerAir.DisplayValue = currentvalue.ToString("N1"); } DryerAir.Value = currentvalue; } private void UpdatePumpsPressureItem(double maxValue) { if (maxValue > 6) { PumpsPressure.Status = "Overpressure"; PumpsPressure.Color = Colors.Red; PumpsPressure.DisplayValue = maxValue.ToString("N1"); } else { PumpsPressure.Status = "Operational"; PumpsPressure.Color = Colors.Green; PumpsPressure.DisplayValue = maxValue.ToString("N1"); } PumpsPressure.Value = maxValue; } private void UpdateLubricantItem(Rml rml, double lubricantValue) { if (rml != null) { var rmlLubrication = Settings.LubricationLevels.FirstOrDefault(x => x.RmlGuid == rml.Guid); if (( rml.Lubricant == false) || (rmlLubrication != null && rmlLubrication.LubricationLevel == Common.Lubrication.LubricationLevel.No)) { Lubricant.Status = "NotActive"; Lubricant.DisplayValue = "None"; Lubricant.Color = Colors.Gray; return; } Lubricant.Status = "Active"; Lubricant.DisplayValue = lubricantValue.ToString("N1"); Lubricant.Color = Colors.Green; return; } else { Lubricant.Status = "NotActive"; Lubricant.DisplayValue = "None"; Lubricant.Color = Colors.Gray; } } } }