64 lines
4.3 KiB
C#
64 lines
4.3 KiB
C#
using InnovEnergy.Lib.Units;
|
|
|
|
namespace InnovEnergy.Lib.Devices.BatteryDeligreen;
|
|
|
|
public class BatteryDeligreenRecords
|
|
{
|
|
public required Current Current { get; init; }
|
|
public required Voltage Voltage { get; init; }
|
|
public required Percent Soc { get; init; }
|
|
public required Double Soh { get; init; }
|
|
public required Percent CurrentMinSoc { get; init; }
|
|
public required Temperature TemperatureCell1 { get; init; }
|
|
public required Double Power { get; init; }
|
|
public required Voltage LowestCellVoltage { get; init; }
|
|
public required Voltage HighestCellVoltage { get; init; }
|
|
public required Boolean MonomerHighVoltageAlarm { get; init; }
|
|
public required Boolean MonomerLowVoltageAlarm { get; init; }
|
|
public required Boolean ChargeSwitchState { get; init; }
|
|
public required Boolean DischargeSwitchState { get; init; }
|
|
public required Int32 AvailableDischBatteries { get; init; }
|
|
public required Int32 AvailableChBatteries { get; init; }
|
|
public required Boolean Eoc { get; init; } // End of Charge
|
|
public required Boolean Eod { get; init; } // End of Discharge
|
|
|
|
|
|
|
|
// public required Temperature TemperatureCell2 { get; init; }
|
|
// public required Temperature TemperatureCell3 { get; init; }
|
|
// public required Temperature TemperatureCell4 { get; init; }
|
|
// to continue other temperature
|
|
|
|
public required IReadOnlyList<BatteryDeligreenRecord> Devices { get; init; }
|
|
|
|
public static BatteryDeligreenRecords? FromBatteries(IReadOnlyList<BatteryDeligreenRecord>? records)
|
|
{
|
|
if (records is null || records.Count == 0)
|
|
{
|
|
Console.WriteLine("FromBatteries: either record is null or empty");
|
|
return null;
|
|
}
|
|
|
|
return new BatteryDeligreenRecords
|
|
{
|
|
Devices = records,
|
|
Soc = records.Average(r => r.BatteryDeligreenDataRecord.Soc.Value),
|
|
Soh = records.Average(r => r.BatteryDeligreenDataRecord.Soh),
|
|
CurrentMinSoc = records.Min(r => r.BatteryDeligreenDataRecord.Soc.Value),
|
|
TemperatureCell1 = records.Average(b => b.BatteryDeligreenDataRecord.TemperaturesList.CellTemperature1),
|
|
Current = records.Sum(r =>r.BatteryDeligreenDataRecord.BusCurrent),
|
|
Voltage = records.Average(r =>r.BatteryDeligreenDataRecord.BusVoltage),
|
|
Power = records.Sum(r => r.BatteryDeligreenDataRecord.Power),
|
|
LowestCellVoltage = records.Min(r => r.BatteryDeligreenDataRecord.CellVoltage.Min()),
|
|
HighestCellVoltage = records.Max(r => r.BatteryDeligreenDataRecord.CellVoltage.Max()),
|
|
MonomerHighVoltageAlarm = records.Any(r => r.BatteryDeligreenAlarmRecord.AlarmEvent2.MonomerHighVoltageAlarm),
|
|
MonomerLowVoltageAlarm = records.Any(r => r.BatteryDeligreenAlarmRecord.AlarmEvent2.MonomerLowVoltageAlarm),
|
|
ChargeSwitchState = records.All(r => r.BatteryDeligreenAlarmRecord.OnOffState.ChargeSwitchState),
|
|
DischargeSwitchState = records.All(r => r.BatteryDeligreenAlarmRecord.OnOffState.DischargeSwitchState),
|
|
AvailableDischBatteries = records.Select(r => r.BatteryDeligreenAlarmRecord.OnOffState.DischargeSwitchState ? 1 : 0).Sum(),
|
|
AvailableChBatteries = records.Select(r => r.BatteryDeligreenAlarmRecord.OnOffState.ChargeSwitchState ? 1 : 0).Sum(),
|
|
Eoc = records.All(r => r.BatteryDeligreenAlarmRecord.AlarmEvent2.MonomerOvervoltageProtection),
|
|
Eod = records.All(r => r.BatteryDeligreenAlarmRecord.AlarmEvent2.MonomerUnderVoltageProtection),
|
|
};
|
|
}
|
|
} |