51 lines
3.0 KiB
C#
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
|
|
};
|
|
}
|
|
} |