Change the max charge batteries limit when we are in heating mode
This commit is contained in:
parent
a10193592f
commit
e6f1263e4b
|
@ -1,14 +1,16 @@
|
|||
using InnovEnergy.App.SaliMax.Ess;
|
||||
using InnovEnergy.App.SaliMax.SaliMaxRelays;
|
||||
using InnovEnergy.Lib.Devices.Battery48TL;
|
||||
using InnovEnergy.Lib.Devices.Trumpf.TruConvertAc;
|
||||
using InnovEnergy.Lib.Devices.Trumpf.TruConvertAc.DataTypes;
|
||||
using InnovEnergy.Lib.Devices.Trumpf.TruConvertDc;
|
||||
using InnovEnergy.Lib.Utils;
|
||||
using static InnovEnergy.Lib.Devices.Trumpf.SystemControl.DataTypes.GridType;
|
||||
|
||||
namespace InnovEnergy.App.SaliMax.System;
|
||||
|
||||
public static class Controller
|
||||
{
|
||||
private static Boolean _intermediateState;
|
||||
private static Int32 GetSystemState(this StatusRecord r)
|
||||
{
|
||||
var relays = r.Relays;
|
||||
|
@ -17,18 +19,43 @@ public static class Controller
|
|||
return 101; // Message = "Panic: relay device is not available!",
|
||||
|
||||
var acDcs = r.AcDc;
|
||||
// var dcDcs = r.DcDc;
|
||||
|
||||
if (acDcs.NotAvailable())
|
||||
return 102;
|
||||
|
||||
var k4 = acDcs.AllDisabled() ? 0
|
||||
: acDcs.AllGridTied() ? 1
|
||||
: acDcs.AllIsland() ? 2
|
||||
var i = 0;
|
||||
|
||||
foreach (var s in acDcs.Devices)
|
||||
{
|
||||
i++;
|
||||
s.Control.PowerStageEnable.WriteLine(" Inverter "+ i + ": Power Stage");
|
||||
String.Join(Environment.NewLine + i, s.Status.Alarms).LogInfo();
|
||||
}
|
||||
|
||||
var allDisabled = acDcs.AllDisabled();
|
||||
var allGridTied = acDcs.AllGridTied();
|
||||
var allIsland = acDcs.AllIsland();
|
||||
|
||||
|
||||
var k4 = allDisabled ? 0
|
||||
: allGridTied ? 1
|
||||
: allIsland ? 2
|
||||
: 4;
|
||||
|
||||
if (k4 == 4)
|
||||
return 103; //Message = "Panic: ACDCs have unequal grid types",
|
||||
//if (!acDcs.AllTheSame())
|
||||
//{
|
||||
// k4 = 4;
|
||||
// "Panic: ACDCs have unequal power stage".LogError();
|
||||
//}
|
||||
|
||||
// we need to check for dcdc unequal power stage
|
||||
|
||||
if (k4 == 4)
|
||||
{
|
||||
return 103; //Message = "Panic: ACDCs have unequal grid types or power stage",
|
||||
}
|
||||
|
||||
var nInverters = r.AcDc.Devices.Count;
|
||||
|
||||
var k1 = relays.K1GridBusIsConnectedToGrid ? 1 : 0;
|
||||
|
@ -54,7 +81,6 @@ public static class Controller
|
|||
4 => State4(s),
|
||||
6 => State6(s),
|
||||
9 => State9(s),
|
||||
//10 => State10(s),
|
||||
12 => State12(s),
|
||||
13 => State13(s),
|
||||
15 => State15(s),
|
||||
|
@ -75,35 +101,45 @@ public static class Controller
|
|||
{
|
||||
return acDcs.SystemControl == null || acDcs.Devices.Count == 0;
|
||||
}
|
||||
|
||||
private static Boolean NotAvailable(this DcDcDevicesRecord dcDcs)
|
||||
{
|
||||
return dcDcs.SystemControl == null || dcDcs.Devices.Count == 0;
|
||||
}
|
||||
|
||||
|
||||
private static Boolean NotAvailable(this Battery48TlRecords batteries)
|
||||
{
|
||||
return batteries.Devices.Count <= 0;
|
||||
}
|
||||
|
||||
private static Boolean State1(StatusRecord s)
|
||||
{
|
||||
s.StateMachine.Message = "Inverters are off. Switching to Island Mode.";
|
||||
s.StateMachine.Message = "Ac/Dc are off. Switching to Island Mode.";
|
||||
|
||||
if (!_intermediateState)
|
||||
{
|
||||
s.DcDc.Disable();
|
||||
s.AcDc.Disable();
|
||||
s.AcDc.EnableIslandMode();
|
||||
s.Relays.DisconnectIslandBusFromGrid();
|
||||
_intermediateState = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
_intermediateState = false;
|
||||
State1Intermediate(s);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
// => Intermediate State
|
||||
}
|
||||
|
||||
private static void State1Intermediate(StatusRecord s)
|
||||
{
|
||||
s.StateMachine.Message = "Intermediate State 1 ";
|
||||
|
||||
s.DcDc.Enable();
|
||||
s.AcDc.Enable();
|
||||
s.AcDc.EnableIslandMode();
|
||||
s.Relays.DisconnectIslandBusFromGrid();
|
||||
|
||||
return false;
|
||||
|
||||
// => 17
|
||||
}
|
||||
|
||||
|
||||
private static Boolean State2(StatusRecord s)
|
||||
{
|
||||
s.StateMachine.Message = "Inverters are disconnected from Island Bus. Switching to GridTie Mode. C";
|
||||
s.StateMachine.Message = "Ac/Dc are disconnected from Island Bus. Switching to GridTie Mode. C";
|
||||
|
||||
s.DcDc.Disable();
|
||||
s.AcDc.Disable();
|
||||
|
@ -112,12 +148,12 @@ public static class Controller
|
|||
|
||||
return false;
|
||||
|
||||
// => 10
|
||||
// => 4
|
||||
}
|
||||
|
||||
private static Boolean State4(StatusRecord s)
|
||||
{
|
||||
s.StateMachine.Message = "Turning on Inverters";
|
||||
s.StateMachine.Message = "Turning on Ac/Dc";
|
||||
|
||||
s.DcDc.Enable();
|
||||
s.AcDc.Enable();
|
||||
|
@ -132,7 +168,7 @@ public static class Controller
|
|||
|
||||
private static Boolean State6(StatusRecord s)
|
||||
{
|
||||
s.StateMachine.Message = "Inverters are off. Waiting for them to disconnect from Island Bus.";
|
||||
s.StateMachine.Message = "Ac/Dc are off. Waiting for them to disconnect from Island Bus.";
|
||||
|
||||
s.DcDc.Disable();
|
||||
s.AcDc.Disable();
|
||||
|
@ -148,7 +184,7 @@ public static class Controller
|
|||
private static Boolean State9(StatusRecord s)
|
||||
{
|
||||
|
||||
s.StateMachine.Message = "Inverters have disconnected from Island Bus. Turning them off.";
|
||||
s.StateMachine.Message = "Ac/Dc have disconnected from Island Bus. Turning them off.";
|
||||
|
||||
s.DcDc.Disable(); // TODO: leave enabled?
|
||||
s.AcDc.Disable();
|
||||
|
@ -179,7 +215,7 @@ public static class Controller
|
|||
|
||||
private static Boolean State12(StatusRecord s)
|
||||
{
|
||||
s.StateMachine.Message = "Waiting for Inverters to connect to Island Bus";
|
||||
s.StateMachine.Message = "Waiting for Ac/Dc to connect to Island Bus";
|
||||
|
||||
s.DcDc.Enable();
|
||||
s.AcDc.Enable();
|
||||
|
@ -195,7 +231,7 @@ public static class Controller
|
|||
|
||||
private static Boolean State13(StatusRecord s)
|
||||
{
|
||||
s.StateMachine.Message = "Disconnected from AcIn (K2), awaiting inverters to disconnect from AcOut (K3)";
|
||||
s.StateMachine.Message = "Disconnected from AcIn (K2), awaiting Ac/Dc to disconnect from AcOut (K3)";
|
||||
|
||||
s.DcDc.Enable();
|
||||
s.AcDc.Enable();
|
||||
|
@ -223,20 +259,12 @@ public static class Controller
|
|||
|
||||
private static Boolean State16(StatusRecord s)
|
||||
{
|
||||
// return new
|
||||
// (
|
||||
// " Inverter is in grid-tie\n Waiting for K1AcInIsConnectedToGrid to open to leave it",
|
||||
// AcPowerStageEnable: true,
|
||||
// DcPowerStageEnable: true,
|
||||
// GridType.GridTied400V50Hz,
|
||||
// HighActivePinState.Closed
|
||||
// );
|
||||
|
||||
s.StateMachine.Message = "ESS";
|
||||
|
||||
s.DcDc.Enable();
|
||||
s.AcDc.Enable();
|
||||
s.AcDc.EnableGridTieMode();
|
||||
s.EnableDcLinkGridTie();
|
||||
s.Relays.ConnectIslandBusToGrid();
|
||||
|
||||
return true;
|
||||
|
@ -247,7 +275,7 @@ public static class Controller
|
|||
|
||||
private static Boolean State17(StatusRecord s)
|
||||
{
|
||||
s.StateMachine.Message = "Inverters are in Island Mode. Waiting for them to connect to AcIn.";
|
||||
s.StateMachine.Message = "Ac/Dc are in Island Mode. Waiting for them to connect to AcIn.";
|
||||
|
||||
s.DcDc.Enable();
|
||||
s.AcDc.Enable();
|
||||
|
@ -287,31 +315,14 @@ public static class Controller
|
|||
s.DcDc.Enable();
|
||||
s.AcDc.Enable();
|
||||
s.AcDc.EnableIslandMode();
|
||||
s.EnableDcLinkIslandMode();
|
||||
s.Relays.DisconnectIslandBusFromGrid();
|
||||
|
||||
return false;
|
||||
|
||||
// => 22
|
||||
}
|
||||
|
||||
private static Boolean State22(StatusRecord s)
|
||||
{
|
||||
s.StateMachine.Message = "Grid became available (K1). Turning off inverters.";
|
||||
|
||||
s.DcDc.Disable();
|
||||
s.AcDc.Disable();
|
||||
s.AcDc.EnableIslandMode();
|
||||
s.Relays.DisconnectIslandBusFromGrid();
|
||||
|
||||
return false;
|
||||
|
||||
// => 6
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private static Boolean State101(StatusRecord s)
|
||||
{
|
||||
s.StateMachine.Message = "Relay device is not available";
|
||||
|
@ -327,15 +338,15 @@ public static class Controller
|
|||
|
||||
private static Boolean State103(StatusRecord s)
|
||||
{
|
||||
s.StateMachine.Message = "Panic: ACDCs have unequal grid types";
|
||||
s.StateMachine.Message = "Panic: ACDCs have unequal grid types or PowerStage";
|
||||
return s.EnableSafeDefaults();
|
||||
}
|
||||
|
||||
private static Boolean State104(StatusRecord s)
|
||||
{
|
||||
s.StateMachine.Message = "Panic: DCDCs not available";
|
||||
return s.EnableSafeDefaults();
|
||||
}
|
||||
// private static Boolean State104(StatusRecord s)
|
||||
// {
|
||||
// s.StateMachine.Message = "Panic: DCDCs not available";
|
||||
// return s.EnableSafeDefaults();
|
||||
// }
|
||||
|
||||
|
||||
private static Boolean UnknownState(StatusRecord s)
|
||||
|
@ -352,6 +363,14 @@ public static class Controller
|
|||
return acDcs.Devices.All(d => !d.Control.PowerStageEnable);
|
||||
}
|
||||
|
||||
private static Boolean AllTheSame(this AcDcDevicesRecord acDcs)
|
||||
{
|
||||
return acDcs.Devices
|
||||
.Select(d => d.Control.PowerStageEnable)
|
||||
.Distinct()
|
||||
.Count() == 1;
|
||||
}
|
||||
|
||||
private static Boolean AllGridTied(this AcDcDevicesRecord acDcs)
|
||||
{
|
||||
return acDcs.Devices.All(d => d.Status.ActiveGridType is GridTied380V60Hz)
|
||||
|
@ -381,9 +400,9 @@ public static class Controller
|
|||
|
||||
private static void Disable(this DcDcDevicesRecord dcDc)
|
||||
{
|
||||
dcDc.Devices
|
||||
.Select(d => d.Control)
|
||||
.ForAll(c => c.PowerStageEnable = false);
|
||||
// dcDc.Devices
|
||||
// .Select(d => d.Control)
|
||||
// .ForAll(c => c.PowerStageEnable = false);
|
||||
}
|
||||
|
||||
private static void Enable(this AcDcDevicesRecord acDc)
|
||||
|
@ -393,7 +412,6 @@ public static class Controller
|
|||
.ForAll(c => c.PowerStageEnable = true);
|
||||
}
|
||||
|
||||
|
||||
private static void Enable(this DcDcDevicesRecord dcDc)
|
||||
{
|
||||
dcDc.Devices
|
||||
|
@ -401,6 +419,18 @@ public static class Controller
|
|||
.ForAll(c => c.PowerStageEnable = true);
|
||||
}
|
||||
|
||||
// private static void Enable(this DcDcDevicesRecord dcDc, AcDcDevicesRecord acDc)
|
||||
// {
|
||||
// var enableDc = acDc
|
||||
// .Devices
|
||||
// .Select(ac => ac.Status.InverterState.Current)
|
||||
// .All(s => s > InverterState.DcLinkChargeDischargeTest );
|
||||
//
|
||||
// dcDc.Devices
|
||||
// .Select(d => d.Control)
|
||||
// .ForAll(c => c.PowerStageEnable = enableDc);
|
||||
// }
|
||||
|
||||
|
||||
|
||||
private static void EnableGridTieMode(this AcDcDevicesRecord acDc)
|
||||
|
@ -417,7 +447,33 @@ public static class Controller
|
|||
.Select(d => d.Control)
|
||||
.ForAll(c => c.Ac.GridType = Island400V50Hz); // TODO: config grid type
|
||||
}
|
||||
|
||||
private static void EnableDcLinkIslandMode(this StatusRecord s)
|
||||
{
|
||||
// Dc Link Windows on AcDc +- 60
|
||||
s.Config.ReferenceDcLinkVoltageFromAcDc = 750;
|
||||
s.Config.MinDcLinkVoltageFromAcDc = 690;
|
||||
s.Config.MaxDcLinkVoltageFromAcDc = 810;
|
||||
|
||||
// Dc Link Windows on DcDc +-55
|
||||
s.Config.ReferenceDcLinkVoltageFromDc = 750;
|
||||
s.Config.UpperDcLinkVoltageFromDc = 55;
|
||||
s.Config.LowerDcLinkVoltageFromDc = 55;
|
||||
}
|
||||
|
||||
private static void EnableDcLinkGridTie(this StatusRecord s)
|
||||
{
|
||||
// Dc Link Windows on DcDc +-55
|
||||
|
||||
s.Config.ReferenceDcLinkVoltageFromAcDc = 750;
|
||||
s.Config.MinDcLinkVoltageFromAcDc = 720;
|
||||
s.Config.MaxDcLinkVoltageFromAcDc = 780;
|
||||
|
||||
s.Config.ReferenceDcLinkVoltageFromDc = 750;
|
||||
s.Config.UpperDcLinkVoltageFromDc = 20;
|
||||
s.Config.LowerDcLinkVoltageFromDc = 20;
|
||||
}
|
||||
|
||||
private static void DisconnectIslandBusFromGrid(this RelaysRecord? relays)
|
||||
{
|
||||
if (relays is not null)
|
||||
|
@ -433,15 +489,15 @@ public static class Controller
|
|||
|
||||
private static Boolean EnableSafeDefaults(this StatusRecord s)
|
||||
{
|
||||
s.DcDc.Disable();
|
||||
// s.DcDc.Disable();
|
||||
s.AcDc.Disable();
|
||||
s.AcDc.EnableGridTieMode();
|
||||
s.Relays.DisconnectIslandBusFromGrid();
|
||||
// s.AcDc.EnableGridTieMode();
|
||||
// s.Relays.DisconnectIslandBusFromGrid();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static DcDcDevicesRecord ResetAlarms(this DcDcDevicesRecord dcDcStatus)
|
||||
public static DcDcDevicesRecord ResetAlarms(this DcDcDevicesRecord dcDcStatus)
|
||||
{
|
||||
var sc = dcDcStatus.SystemControl;
|
||||
|
||||
|
@ -454,7 +510,7 @@ public static class Controller
|
|||
return dcDcStatus;
|
||||
}
|
||||
|
||||
private static AcDcDevicesRecord ResetAlarms(this AcDcDevicesRecord acDcStatus)
|
||||
public static AcDcDevicesRecord ResetAlarms(this AcDcDevicesRecord acDcStatus)
|
||||
{
|
||||
var sc = acDcStatus.SystemControl;
|
||||
|
||||
|
|
Loading…
Reference in New Issue