Add ControlPvPower function.
This commit is contained in:
parent
85b248dc6f
commit
91da191874
|
@ -1,3 +1,6 @@
|
||||||
|
#undef Amax
|
||||||
|
#undef GridLimit
|
||||||
|
|
||||||
using System.Reactive.Linq;
|
using System.Reactive.Linq;
|
||||||
using System.Reactive.Threading.Tasks;
|
using System.Reactive.Threading.Tasks;
|
||||||
using Flurl.Http;
|
using Flurl.Http;
|
||||||
|
@ -21,6 +24,8 @@ using InnovEnergy.Lib.Units;
|
||||||
using InnovEnergy.Lib.Utils;
|
using InnovEnergy.Lib.Utils;
|
||||||
using InnovEnergy.App.SaliMax.AggregationService;
|
using InnovEnergy.App.SaliMax.AggregationService;
|
||||||
using InnovEnergy.App.SaliMax.DataTypes;
|
using InnovEnergy.App.SaliMax.DataTypes;
|
||||||
|
using static InnovEnergy.App.SaliMax.AggregationService.Aggregator;
|
||||||
|
using static InnovEnergy.App.SaliMax.MiddlewareClasses.MiddlewareAgent;
|
||||||
using static InnovEnergy.Lib.Devices.Trumpf.SystemControl.DataTypes.SystemConfig;
|
using static InnovEnergy.Lib.Devices.Trumpf.SystemControl.DataTypes.SystemConfig;
|
||||||
using DeviceState = InnovEnergy.App.SaliMax.Devices.DeviceState;
|
using DeviceState = InnovEnergy.App.SaliMax.Devices.DeviceState;
|
||||||
|
|
||||||
|
@ -80,9 +85,16 @@ internal static class Program
|
||||||
public static async Task Main(String[] args)
|
public static async Task Main(String[] args)
|
||||||
{
|
{
|
||||||
//Do not await
|
//Do not await
|
||||||
Aggregator.HourlyDataAggregationManager().ContinueWith(t => t.Exception.WriteLine(), TaskContinuationOptions.OnlyOnFaulted).SupressAwaitWarning();
|
HourlyDataAggregationManager()
|
||||||
Aggregator.DailyDataAggregationManager().ContinueWith(t => t.Exception.WriteLine(), TaskContinuationOptions.OnlyOnFaulted).SupressAwaitWarning();
|
.ContinueWith(t=>t.Exception.WriteLine(), TaskContinuationOptions.OnlyOnFaulted)
|
||||||
MiddlewareAgent.InitializeCommunicationToMiddleware();
|
.SupressAwaitWarning();
|
||||||
|
|
||||||
|
DailyDataAggregationManager()
|
||||||
|
.ContinueWith(t=>t.Exception.WriteLine(), TaskContinuationOptions.OnlyOnFaulted)
|
||||||
|
.SupressAwaitWarning();
|
||||||
|
|
||||||
|
InitializeCommunicationToMiddleware();
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -142,8 +154,8 @@ internal static class Program
|
||||||
? new DcPowerDevice { Power = 0 }
|
? new DcPowerDevice { Power = 0 }
|
||||||
: Topology.CalculateDcLoad(acDc, pvOnDc, dcDc);
|
: Topology.CalculateDcLoad(acDc, pvOnDc, dcDc);
|
||||||
|
|
||||||
var acDcToDcLink = devices.LoadOnDc.DeviceState == DeviceState.Disabled
|
var acDcToDcLink = devices.LoadOnDc.DeviceState == DeviceState.Disabled ?
|
||||||
? Topology.CalculateAcDcToDcLink(pvOnDc, dcDc, acDc)
|
Topology.CalculateAcDcToDcLink(pvOnDc, dcDc, acDc)
|
||||||
: new DcPowerDevice{ Power = acDc.Dc.Power};
|
: new DcPowerDevice{ Power = acDc.Dc.Power};
|
||||||
|
|
||||||
return new StatusRecord
|
return new StatusRecord
|
||||||
|
@ -235,7 +247,7 @@ internal static class Program
|
||||||
// ReSharper disable once FunctionNeverReturns
|
// ReSharper disable once FunctionNeverReturns
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SendSalimaxStateAlarm(StatusMessage currentSalimaxState, StatusRecord record)
|
private static void SendSalimaxStateAlarm(StatusMessage currentSalimaxState, StatusRecord record)
|
||||||
{
|
{
|
||||||
var s3Bucket = Config.Load().S3?.Bucket;
|
var s3Bucket = Config.Load().S3?.Bucket;
|
||||||
|
|
||||||
|
@ -268,7 +280,7 @@ internal static class Program
|
||||||
}
|
}
|
||||||
|
|
||||||
//If there is an available message from the RabbitMQ Broker, apply the configuration file
|
//If there is an available message from the RabbitMQ Broker, apply the configuration file
|
||||||
Configuration? config = MiddlewareAgent.SetConfigurationFile();
|
Configuration? config = SetConfigurationFile();
|
||||||
if (config != null)
|
if (config != null)
|
||||||
{
|
{
|
||||||
record.ApplyConfigFile(config);
|
record.ApplyConfigFile(config);
|
||||||
|
@ -324,18 +336,19 @@ internal static class Program
|
||||||
|
|
||||||
foreach (var battery in record.Battery.Devices)
|
foreach (var battery in record.Battery.Devices)
|
||||||
{
|
{
|
||||||
i++;
|
|
||||||
foreach (var alarm in battery.Alarms)
|
foreach (var alarm in battery.Alarms)
|
||||||
{
|
{
|
||||||
alarmList.Add(new AlarmOrWarning
|
alarmList.Add(new AlarmOrWarning
|
||||||
{
|
{
|
||||||
Date = DateTime.Now.ToString("yyyy-MM-dd"),
|
Date = DateTime.Now.ToString("yyyy-MM-dd"),
|
||||||
Time = DateTime.Now.ToString("HH:mm:ss"),
|
Time = DateTime.Now.ToString("HH:mm:ss"),
|
||||||
CreatedBy = "Battery" + i,
|
CreatedBy = "Battery node" + record.Config.Devices.BatteryNodes[i],
|
||||||
Description = alarm
|
Description = alarm
|
||||||
});
|
});
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var warning in record.AcDc.Warnings)
|
foreach (var warning in record.AcDc.Warnings)
|
||||||
|
@ -441,6 +454,23 @@ internal static class Program
|
||||||
r.AcDc.ResetAlarms();
|
r.AcDc.ResetAlarms();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This is will be used for
|
||||||
|
private static void ControlPvPower(this StatusRecord r, Int16 exportLimit = 100)
|
||||||
|
{
|
||||||
|
var inverters = r.AcDc.Devices;
|
||||||
|
var dcDevices = r.DcDc.Devices;
|
||||||
|
var configFile = r.Config;
|
||||||
|
|
||||||
|
var devicesConfig = configFile.GridTie;
|
||||||
|
|
||||||
|
inverters.ForEach(d => d.Control.Dc.MaxVoltage = devicesConfig.AcDc.MaxDcLinkVoltage);
|
||||||
|
inverters.ForEach(d => d.Control.Dc.MinVoltage = devicesConfig.AcDc.MinDcLinkVoltage);
|
||||||
|
inverters.ForEach(d => d.Control.Dc.ReferenceVoltage = devicesConfig.AcDc.ReferenceDcLinkVoltage);
|
||||||
|
|
||||||
|
dcDevices.ForEach(d => d.Control.DroopControl.UpperVoltage = devicesConfig.DcDc.UpperDcLinkVoltage);
|
||||||
|
dcDevices.ForEach(d => d.Control.DroopControl.LowerVoltage = devicesConfig.DcDc.LowerDcLinkVoltage);
|
||||||
|
dcDevices.ForEach(d => d.Control.DroopControl.ReferenceVoltage = devicesConfig.DcDc.ReferenceDcLinkVoltage);
|
||||||
|
}
|
||||||
|
|
||||||
// why this is not in Controller?
|
// why this is not in Controller?
|
||||||
private static void DistributePower(StatusRecord record, EssControl essControl)
|
private static void DistributePower(StatusRecord record, EssControl essControl)
|
||||||
|
@ -484,6 +514,7 @@ internal static class Program
|
||||||
|
|
||||||
private static void ApplyDcDcDefaultSettings(this SystemControlRegisters? sc)
|
private static void ApplyDcDcDefaultSettings(this SystemControlRegisters? sc)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (sc is null)
|
if (sc is null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -498,6 +529,7 @@ internal static class Program
|
||||||
sc.UseSlaveIdForAddressing = true;
|
sc.UseSlaveIdForAddressing = true;
|
||||||
sc.SlaveErrorHandling = SlaveErrorHandling.Relaxed;
|
sc.SlaveErrorHandling = SlaveErrorHandling.Relaxed;
|
||||||
sc.SubSlaveErrorHandling = SubSlaveErrorHandling.Off;
|
sc.SubSlaveErrorHandling = SubSlaveErrorHandling.Off;
|
||||||
|
|
||||||
sc.ResetAlarmsAndWarnings = true;
|
sc.ResetAlarmsAndWarnings = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -531,4 +563,5 @@ internal static class Program
|
||||||
status.Config.GridSetPoint = config.GridSetPoint * 1000; // converted from kW to W
|
status.Config.GridSetPoint = config.GridSetPoint * 1000; // converted from kW to W
|
||||||
status.Config.ForceCalibrationCharge = config.ForceCalibrationCharge;
|
status.Config.ForceCalibrationCharge = config.ForceCalibrationCharge;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue