diff --git a/csharp/App/SaliMax/src/Ess/Controller.cs b/csharp/App/SaliMax/src/Ess/Controller.cs index 84e858fcc..833baa4ba 100644 --- a/csharp/App/SaliMax/src/Ess/Controller.cs +++ b/csharp/App/SaliMax/src/Ess/Controller.cs @@ -106,7 +106,7 @@ public static class Controller private static EssControl LimitDischargePower(this EssControl control, StatusRecord s) { - var maxBatteryDischargeDelta = s.Battery?.Devices.Where(b => b.ConnectedToDcBus).Sum(b => b.MaxDischargePower) ?? 0; + var maxBatteryDischargeDelta = s.Battery?.Devices.Where(b => b.IoStatus.ConnectedToDcBus).Sum(b => b.MaxDischargePower) ?? 0; var keepMinSocLimitDelta = s.ControlBatteryPower(s.HoldMinSocPower()); return control @@ -114,10 +114,6 @@ public static class Controller .LimitDischargePower(keepMinSocLimitDelta , EssLimit.DischargeLimitedByMinSoc); } - - - - private static Double ComputePowerDelta(this StatusRecord s, EssMode mode) { var chargePower = s.AcDc.Devices.Sum(d => d.Status.Nominal.Power.Value); @@ -233,7 +229,7 @@ public static class Controller private static Boolean CheckNextCalibrationTime(DateTime nextCalibrationTime) { var currentDateAndTime = DateTime.Now; - Console.WriteLine(" next 10 am is: " + nextCalibrationTime); + Console.WriteLine(" next 9 am is: " + nextCalibrationTime); Console.WriteLine(" currentDateAndTime: " + currentDateAndTime); // Check if the current time is greater than or equal to the original nextCalibrationTime @@ -250,7 +246,7 @@ public static class Controller // Calculate the next 10 AM within the same day var nextCalibrationTime = new DateTime(currentDateAndTime.Year, currentDateAndTime.Month, currentDateAndTime.Day, 9, 0, 0); // next 9am - // If the current time is already past 10 AM, move to the next day + // If the current time is already past 9 AM, move to the next day if (currentDateAndTime.Hour >= 9) { nextCalibrationTime = nextCalibrationTime.AddDays(1); diff --git a/csharp/App/SaliMax/src/Program.cs b/csharp/App/SaliMax/src/Program.cs index 608fd6cec..1a8cc19eb 100644 --- a/csharp/App/SaliMax/src/Program.cs +++ b/csharp/App/SaliMax/src/Program.cs @@ -464,7 +464,7 @@ internal static class Program { var numberOfBatteries = configFile.Devices.BatteryNodes.Length; var dischargingCurrentByBattery = configFile.MaxBatteryDischargingCurrent / numberOfBatteries; - var numberOfConnectedBatteries = r.Battery.Devices.Where(d => d.ConnectedToDcBus).ToList().Count; + var numberOfConnectedBatteries = r.Battery.Devices.Where(d => d.IoStatus.ConnectedToDcBus).ToList().Count; maxBatteryDischargingCurrentLive = dischargingCurrentByBattery * numberOfConnectedBatteries; } diff --git a/csharp/Lib/Devices/Battery48TL/Battery48TlRecord.Api.cs b/csharp/Lib/Devices/Battery48TL/Battery48TlRecord.Api.cs index 616500969..b3ac0e9f3 100644 --- a/csharp/Lib/Devices/Battery48TL/Battery48TlRecord.Api.cs +++ b/csharp/Lib/Devices/Battery48TL/Battery48TlRecord.Api.cs @@ -16,26 +16,21 @@ public partial class Battery48TlRecord public Leds_ Leds => new Leds_(this); public Temperatures_ Temperatures => new Temperatures_(this); public StringActive_ BatteryStrings => new StringActive_(this); + public IoStatus_ IoStatus => new IoStatus_(this); - public Boolean ConnectedToDcBus => (_IoStates & 1) == 0; - public Boolean AlarmOutActive => (_IoStates & 2) == 0; - public Boolean InternalFanActive => (_IoStates & 4) == 1; - public Boolean VoltMeasurementAllowed => (_IoStates & 8) == 1; - public Boolean AuxRelayBus => (_IoStates & 16) == 0; - public Boolean RemoteStateActive => (_IoStates & 32) == 1; - public Boolean RiscActive => (_IoStates & 64) == 1; public Boolean Eoc => Leds is { Green: On, Amber: Off, Blue : Off }; + public UInt16 IoStates => _IoStates; - public String SerialNumber => $"{_SerialNum1:X4}{_SerialNum2:X4}{_SerialNum3:X4}{_SerialNum4:X4}".TrimEnd('0'); + public String SerialNumber => $"{_SerialNum1:X4}{_SerialNum2:X4}{_SerialNum3:X4}{_SerialNum4:X4}".TrimEnd('0'); + + public String FwVersion => _FwVersion.ToString("X4"); + public Strings Warnings => ParseWarnings().OrderBy(w => w).ToList(); + public Strings Alarms => ParseAlarms() .OrderBy(w => w).ToList(); - public String FwVersion => _FwVersion.ToString("X4"); - public Strings Warnings => ParseWarnings().OrderBy(w => w).ToList(); - public Strings Alarms => ParseAlarms() .OrderBy(w => w).ToList(); - - public Percent Soc => _Soc; - public Double SOCAh => _SOCAh; + public Percent Soc => _Soc; + public Double SOCAh => _SOCAh; public Current BusCurrent => _BusCurrent; //public UInt16 BusCurrentHex => _BusCurrentHex; @@ -75,6 +70,20 @@ public partial class Battery48TlRecord private Battery48TlRecord Self { get; } } + public readonly struct IoStatus_ + { + public Boolean ConnectedToDcBus => ((Self._IoStates >> 0) & 1) == 0; + public Boolean AlarmOutActive => ((Self._IoStates >> 1) & 1) == 0; + public Boolean InternalFanActive => ((Self._IoStates >> 2) & 1) == 1; + public Boolean VoltMeasurementAllowed => ((Self._IoStates >> 3) & 1) == 1; + public Boolean AuxRelayBus => ((Self._IoStates >> 4) & 1) == 0; + public Boolean RemoteStateActive => ((Self._IoStates >> 5) & 1) == 1; + public Boolean RiscActive => ((Self._IoStates >> 6) & 1) == 1; + + internal IoStatus_(Battery48TlRecord self) => Self = self; + private Battery48TlRecord Self { get; } + } + public readonly struct Temperatures_ { public Boolean Heating => (Self._IoStates & 64) != 0;