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