Implement CurrentLimiter and spare power mode
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using TestApp.Configuration;
|
||||
using TestApp.Driver;
|
||||
|
||||
@@ -9,8 +10,7 @@ namespace TestApp
|
||||
private static ConfigurationManager _ConfigurationManager;
|
||||
private static IChargerDriver? _Driver;
|
||||
private static EnergyManager _EnergyManager;
|
||||
private static ProcessVariable _ProcessVariable;
|
||||
private static PidController _PidController;
|
||||
private static CurrentLimitter _CurrentLimitter;
|
||||
|
||||
|
||||
static async Task Main(string[] args)
|
||||
@@ -26,17 +26,24 @@ namespace TestApp
|
||||
}
|
||||
|
||||
_EnergyManager = await EnergyManager.Create();
|
||||
_CurrentLimitter = new CurrentLimitter(_ConfigurationManager, _EnergyManager);
|
||||
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
{
|
||||
// TODO I1, I2, I3 von Wallbox mit I1-3 von Zähler per Kombinatorik max vom Haus ausrechnen
|
||||
// newLoadingCurrent = maxSicherung - maxHaus
|
||||
var measurement = _EnergyManager.GetValue(_ProcessVariable);
|
||||
var newLoadingCurrent = _PidController.Update(measurement);
|
||||
//if (newLoadingCurrent < 6) { newLoadingCurrent = 0; }
|
||||
_Driver?.SetLoadingCurrent(newLoadingCurrent);
|
||||
if (_Driver is null) {
|
||||
Thread.Sleep(1000);
|
||||
continue;
|
||||
}
|
||||
|
||||
var newCurrent = double.MaxValue;
|
||||
if (_ConfigurationManager.Settings.Mode == 2) {
|
||||
newCurrent = GetMode2LoadingCurrent();
|
||||
}
|
||||
|
||||
newCurrent = _CurrentLimitter.GetLimitedCurrent(_Driver, newCurrent);
|
||||
_Driver?.SetLoadingCurrent(newCurrent);
|
||||
} catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Error in main loop: {ex.Message}");
|
||||
@@ -45,10 +52,26 @@ namespace TestApp
|
||||
}
|
||||
}
|
||||
|
||||
private static double GetMode2LoadingCurrent()
|
||||
{
|
||||
var minNegativePower = _ConfigurationManager.Settings.MinNegativePower ?? Settings.DEFAULT_MIN_NEGATIVE_POWER;
|
||||
|
||||
var negativePower = _EnergyManager.GetValue(EMVariable.ActivePowerNegative);
|
||||
|
||||
if (negativePower < minNegativePower) { return 0; }
|
||||
|
||||
var sparePower = negativePower - minNegativePower;
|
||||
|
||||
var i1 = sparePower / _EnergyManager.GetValue(EMVariable.VoltageL1);
|
||||
var i2 = sparePower / _EnergyManager.GetValue(EMVariable.VoltageL2);
|
||||
var i3 = sparePower / _EnergyManager.GetValue(EMVariable.VoltageL3);
|
||||
|
||||
return Math.Min(Math.Min(i1, i2), i3);
|
||||
}
|
||||
|
||||
private static void OnSettingsChanged(object? sender, Settings settings)
|
||||
{
|
||||
UpdateDriverSettings(settings);
|
||||
UpdateControllerSettings(settings);
|
||||
}
|
||||
|
||||
private static void UpdateDriverSettings(Settings settings) {
|
||||
@@ -84,35 +107,5 @@ namespace TestApp
|
||||
_Driver.Port = settings.ChargerPort ?? Settings.DEFAULT_CHARGER_PORT;
|
||||
}
|
||||
|
||||
private static void UpdateControllerSettings(Settings settings)
|
||||
{
|
||||
var allModeSettings = settings.ModeSettings ?? Array.Empty<ModeSettings>();
|
||||
if (!allModeSettings.Any()) {
|
||||
allModeSettings = new ModeSettings[]{
|
||||
new ModeSettings() {
|
||||
ProcessVariable = ProcessVariable.ActivePowerPositive,
|
||||
SetPoint = 0,
|
||||
PositivePid = new PidSetting(),
|
||||
NegativePid = new PidSetting(),
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
var mode = settings.Mode;
|
||||
if (mode < 0) { mode = 0; }
|
||||
if (mode >= allModeSettings.Length) { mode = allModeSettings.Length - 1; }
|
||||
|
||||
var modeSetting = allModeSettings[mode];
|
||||
|
||||
if (_ProcessVariable != modeSetting.ProcessVariable)
|
||||
{
|
||||
_PidController = new PidController();
|
||||
_ProcessVariable = modeSetting.ProcessVariable;
|
||||
}
|
||||
|
||||
_PidController.SetPoint = modeSetting.SetPoint;
|
||||
_PidController.PositiveSettings = modeSetting.PositivePid ?? new PidSetting();
|
||||
_PidController.NegativeSettings = modeSetting.NegativePid ?? new PidSetting();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user