update the limit charge powerand limit discharge power
This commit is contained in:
parent
ab051a88d1
commit
8be31b4e0c
|
|
@ -30,7 +30,7 @@ public static class Controller
|
||||||
|
|
||||||
public static EssControl ControlEss(this StatusRecord s)
|
public static EssControl ControlEss(this StatusRecord s)
|
||||||
{
|
{
|
||||||
var mode = s.SelectControlMode().WriteLine();
|
var mode = s.SelectControlMode();
|
||||||
|
|
||||||
if (mode is EssMode.Off) // to test on prototype
|
if (mode is EssMode.Off) // to test on prototype
|
||||||
{
|
{
|
||||||
|
|
@ -88,7 +88,7 @@ public static class Controller
|
||||||
var nInverters = acDcs.Count;
|
var nInverters = acDcs.Count;
|
||||||
|
|
||||||
if (nInverters < 2)
|
if (nInverters < 2)
|
||||||
return control; // current loop cannot happen
|
return control; // the current loop cannot happen
|
||||||
|
|
||||||
var nominalPower = acDcs.Average(d => d.Status.Nominal.Power);
|
var nominalPower = acDcs.Average(d => d.Status.Nominal.Power);
|
||||||
var maxStep = nominalPower / 25; //TODO magic number to config
|
var maxStep = nominalPower / 25; //TODO magic number to config
|
||||||
|
|
@ -121,19 +121,28 @@ public static class Controller
|
||||||
private static EssControl LimitChargePower(this EssControl control, StatusRecord s)
|
private static EssControl LimitChargePower(this EssControl control, StatusRecord s)
|
||||||
{
|
{
|
||||||
//var maxInverterChargePower = s.ControlInverterPower(s.Config.MaxInverterPower);
|
//var maxInverterChargePower = s.ControlInverterPower(s.Config.MaxInverterPower);
|
||||||
var maxBatteryChargePower = s.MaxBatteryChargePower();
|
// var maxBatteryChargePower = s.MaxBatteryChargePower(MaxChargePower);
|
||||||
|
s.Battery.Devices.Count.WriteLine(" Number of batteries");
|
||||||
|
|
||||||
|
var maxBatteryChargePower = s.Battery.Devices.Count * MaxChargePower;
|
||||||
maxBatteryChargePower.WriteLine(" Max Battery Charge Power");
|
maxBatteryChargePower.WriteLine(" Max Battery Charge Power");
|
||||||
|
|
||||||
|
|
||||||
|
if (control.Mode == EssMode.ReachMinSoc)
|
||||||
|
{
|
||||||
|
maxBatteryChargePower = s.MaxBatteryChargePower(MaxChargePower/4); // 0.25 C
|
||||||
|
maxBatteryChargePower.WriteLine(" A power limit applied while ReachMinSoc");
|
||||||
|
return control
|
||||||
|
.LimitChargePower(maxBatteryChargePower, EssLimit.ChargeLimitedByBatteryPower);
|
||||||
|
}
|
||||||
return control
|
return control
|
||||||
//.LimitChargePower(, EssLimit.ChargeLimitedByInverterPower)
|
.LimitChargePower(maxBatteryChargePower, EssLimit.ChargeLimitedByBatteryPower);
|
||||||
.LimitChargePower(maxBatteryChargePower, EssLimit.ChargeLimitedByBatteryPower);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static EssControl LimitDischargePower(this EssControl control, StatusRecord s)
|
private static EssControl LimitDischargePower(this EssControl control, StatusRecord s)
|
||||||
{
|
{
|
||||||
var maxBatteryDischargeDelta = s.Battery?.Devices.Count * MaxDischargePower ?? 0;
|
var maxBatteryDischargeDelta = s.MaxBatteryDischargePower(MaxDischargePower);
|
||||||
var keepMinSocLimitDelta = s.ControlBatteryPower(s.HoldMinSocPower());
|
var keepMinSocLimitDelta = s.ControlBatteryPower(s.HoldMinSocPower());
|
||||||
maxBatteryDischargeDelta.WriteLine(" Max Battery Discharge Power");
|
|
||||||
|
|
||||||
if (control.Mode == EssMode.DownwardsCalibrationCharge )
|
if (control.Mode == EssMode.DownwardsCalibrationCharge )
|
||||||
{
|
{
|
||||||
|
|
@ -148,7 +157,9 @@ public static class Controller
|
||||||
private static Double ComputePowerDelta(this StatusRecord s, EssMode mode)
|
private static Double ComputePowerDelta(this StatusRecord s, EssMode mode)
|
||||||
{
|
{
|
||||||
var chargePower = s.AcDc.Devices.Sum(d => d.Status.Nominal.Power.Value);
|
var chargePower = s.AcDc.Devices.Sum(d => d.Status.Nominal.Power.Value);
|
||||||
var batteryDischargePower = s.Battery?.Devices.Count * MaxDischargePower ?? 0 ;
|
var batteryDischargePower = s.MaxBatteryDischargePower(MaxDischargePower) ;
|
||||||
|
|
||||||
|
chargePower.WriteLine(" charge power for Upwards");
|
||||||
|
|
||||||
return mode switch
|
return mode switch
|
||||||
{
|
{
|
||||||
|
|
@ -163,18 +174,14 @@ public static class Controller
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Double MaxBatteryChargePower(this StatusRecord s)
|
private static Double MaxBatteryChargePower(this StatusRecord s, Double chargePower)
|
||||||
{
|
{
|
||||||
// This introduces a limit when we don't have communication with batteries,
|
return (s.Battery?.ChargeModeBatteries ?? 0) * chargePower; // to be tested. maybe used available charge switch batteries
|
||||||
// Otherwise the limit will be 0, and the batteries will be not heated
|
}
|
||||||
|
|
||||||
var batteries = s.GetBatteries();
|
private static Double MaxBatteryDischargePower(this StatusRecord s, Double dischargePower)
|
||||||
|
{
|
||||||
var maxChargePower = batteries.Count == 0
|
return (s.Battery?.DischargeModeBatteries ?? 0) * dischargePower; // to be tested. maybe used available discharge switch batteries
|
||||||
? 0
|
|
||||||
: batteries.Count * MaxChargePower;
|
|
||||||
|
|
||||||
return maxChargePower;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Double CurrentPowerSetPoint(this StatusRecord s)
|
private static Double CurrentPowerSetPoint(this StatusRecord s)
|
||||||
|
|
@ -216,9 +223,6 @@ public static class Controller
|
||||||
(calibrationChargeForced == CalibrationChargeType.AdditionallyOnce && additionalCalibrationRequired) ||
|
(calibrationChargeForced == CalibrationChargeType.AdditionallyOnce && additionalCalibrationRequired) ||
|
||||||
(calibrationChargeForced == CalibrationChargeType.RepetitivelyEvery && repetitiveCalibrationRequired);
|
(calibrationChargeForced == CalibrationChargeType.RepetitivelyEvery && repetitiveCalibrationRequired);
|
||||||
|
|
||||||
Console.WriteLine("Next Repetitive calibration charge date is "+ statusRecord.Config.DayAndTimeForRepetitiveCalibration);
|
|
||||||
Console.WriteLine("Next Additional calibration charge date is "+ statusRecord.Config.DayAndTimeForAdditionalCalibration);
|
|
||||||
|
|
||||||
if (statusRecord.Battery is not null)
|
if (statusRecord.Battery is not null)
|
||||||
{
|
{
|
||||||
if (calibrationChargeForced == CalibrationChargeType.AdditionallyOnce && statusRecord.Battery.Eoc )
|
if (calibrationChargeForced == CalibrationChargeType.AdditionallyOnce && statusRecord.Battery.Eoc )
|
||||||
|
|
@ -246,9 +250,6 @@ public static class Controller
|
||||||
(calibrationDischargeForced == CalibrationDischargeType.AdditionallyOnce && additionalCalibrationRequired) ||
|
(calibrationDischargeForced == CalibrationDischargeType.AdditionallyOnce && additionalCalibrationRequired) ||
|
||||||
(calibrationDischargeForced == CalibrationDischargeType.RepetitivelyEvery && repetitiveCalibrationRequired);
|
(calibrationDischargeForced == CalibrationDischargeType.RepetitivelyEvery && repetitiveCalibrationRequired);
|
||||||
|
|
||||||
Console.WriteLine("Next Repetitive calibration charge date is "+ statusRecord.Config.DownDayAndTimeForRepetitiveCalibration);
|
|
||||||
Console.WriteLine("Next Additional calibration charge date is "+ statusRecord.Config.DownDayAndTimeForAdditionalCalibration);
|
|
||||||
|
|
||||||
if (statusRecord.Battery is not null)
|
if (statusRecord.Battery is not null)
|
||||||
{
|
{
|
||||||
if (calibrationDischargeForced == CalibrationDischargeType.AdditionallyOnce && statusRecord.Battery.Eod )
|
if (calibrationDischargeForced == CalibrationDischargeType.AdditionallyOnce && statusRecord.Battery.Eod )
|
||||||
|
|
@ -258,8 +259,8 @@ public static class Controller
|
||||||
}
|
}
|
||||||
else if (calibrationDischargeForced == CalibrationDischargeType.RepetitivelyEvery && statusRecord.Battery.Eod && _hasRepetitiveCalibrationDischargeChecked)
|
else if (calibrationDischargeForced == CalibrationDischargeType.RepetitivelyEvery && statusRecord.Battery.Eod && _hasRepetitiveCalibrationDischargeChecked)
|
||||||
{
|
{
|
||||||
statusRecord.Config.DownDayAndTimeForRepetitiveCalibration = statusRecord.Config.DownDayAndTimeForRepetitiveCalibration.AddDays(7);
|
statusRecord.Config.DownDayAndTimeForRepetitiveCalibration = statusRecord.Config.DownDayAndTimeForRepetitiveCalibration.AddDays(28); // this changed to one month, 28 to keep the calibration always on sunday
|
||||||
_hasRepetitiveCalibrationDischargeChecked = false;
|
_hasRepetitiveCalibrationDischargeChecked = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue