Innovenergy_trunk/csharp/App/SaliMax/src/Controller/AvgBatteriesStatus.cs

51 lines
3.0 KiB
C#

using InnovEnergy.Lib.Devices.Battery48TL;
namespace InnovEnergy.App.SaliMax.Controller;
public class AvgBatteriesStatus
{
public Decimal Soc { get; set; }
public Decimal Current { get; set; }
public Decimal Voltage { get; set; }
public Decimal Power { get; set; }
public Decimal BusVoltage { get; set; }
public Decimal BatteryTemperature { get; set; }
public IReadOnlyList<String> Warnings { get; set; }
public IReadOnlyList<String> Alarms { get; set; }
public Boolean HeaterOn { get; set; }
public Boolean EocReached { get; set; }
public Boolean BatteryCold { get; set; }
public Decimal MaxChargingPower { get; set; }
public Decimal MaxDischargingPower { get; set; }
public static AvgBatteriesStatus ReadBatteriesStatus(IReadOnlyList<Battery48TLStatus> batteriesStatus)
{
var soc = batteriesStatus.Any() ? batteriesStatus.Average(b => b.Soc) : 0;
var current = batteriesStatus.Select(b => b.Dc.Current).Aggregate(0m,(a, b) => a + b);
var voltage = batteriesStatus.Any() ? batteriesStatus.Average(b => b.Dc.Voltage) : 0;
var power = batteriesStatus.Select(b => b.Dc.Power).Aggregate(0m,(a, b) => a + b);
var busVoltage = batteriesStatus.Any() ? batteriesStatus.Average(b => b.BusVoltage): 0;
var batteryTemperature = batteriesStatus.Any() ? batteriesStatus.Average(b => b.Temperature): 0;
var heaterOn = batteriesStatus.Any() && batteriesStatus.Select(b => b.HeaterOn).Aggregate((a, b) => a | b);
var eocReached = batteriesStatus.All(b => b.EocReached);
var batteryCold = batteriesStatus.Any(b => b.BatteryCold);
var maxChargingPower = batteriesStatus.Select(b => b.MaxChargingPower).Aggregate(0m, (a, b) => a + b);
var maxDischargingPower = batteriesStatus.Select(b => b.MaxDischargingPower).Aggregate(0m, (a, b) => a + b);
return new AvgBatteriesStatus
{
Soc = soc,
Current = current,
Voltage = voltage,
Power = power,
BusVoltage = busVoltage,
BatteryTemperature = batteryTemperature,
HeaterOn = heaterOn,
EocReached = eocReached,
BatteryCold = batteryCold,
MaxChargingPower = maxChargingPower,
MaxDischargingPower = maxDischargingPower
};
}
}