add doepke to the main function

This commit is contained in:
atef 2025-06-11 16:00:11 +02:00
parent d02fc6fdc8
commit 5e00714313
1 changed files with 33 additions and 15 deletions

View File

@ -27,10 +27,12 @@ using InnovEnergy.Lib.Devices.Trumpf.TruConvertAc;
using InnovEnergy.Lib.Devices.Trumpf.TruConvertAc.DataTypes;
using InnovEnergy.Lib.Devices.Trumpf.TruConvertDc;
using InnovEnergy.Lib.Devices.Trumpf.TruConvertDc.Control;
using InnovEnergy.Lib.Devices.Doepke;
using InnovEnergy.Lib.Protocols.Modbus.Channels;
using InnovEnergy.Lib.Units;
using InnovEnergy.Lib.Utils;
using InnovEnergy.App.SodiStoreMax.DataTypes;
using InnovEnergy.Lib.Devices.Doepke;
using Newtonsoft.Json;
using static InnovEnergy.App.SodiStoreMax.AggregationService.Aggregator;
using static InnovEnergy.App.SodiStoreMax.MiddlewareClasses.MiddlewareAgent;
@ -59,6 +61,8 @@ internal static class Program
private static readonly Channel PvOnAcIsland;
private static readonly Channel RelaysChannel;
private static readonly Channel BatteriesChannel;
private static readonly Channel DoepkeChannel;
//
private static Boolean _curtailFlag = false;
@ -91,7 +95,8 @@ internal static class Program
PvOnAcIsland = CreateChannel(d.PvOnAcIsland);
RelaysChannel = CreateChannel(d.RelaysIp);
BatteriesChannel = CreateChannel(d.BatteryIp);
DoepkeChannel = CreateChannel(d.DoepkeIp);
BatteryNodes = config
.Devices
.BatteryNodes
@ -143,6 +148,8 @@ internal static class Program
var pvOnDcDevice = new AmptDevices(PvOnDc);
var pvOnAcGridDevice = new AmptDevices(PvOnAcGrid);
var pvOnAcIslandDevice = new AmptDevices(PvOnAcIsland);
var doepkeDevice = new DoepkeDevice(DoepkeChannel);
#if Amax
var saliMaxRelaysDevice = new RelaysDeviceAmax(RelaysChannel);
@ -164,6 +171,7 @@ internal static class Program
var battery = batteryDevices.Read();
var pvOnAcGrid = pvOnAcGridDevice.Read();
var pvOnAcIsland = pvOnAcIslandDevice.Read();
var doepek = doepkeDevice.Read();
var gridBusToIslandBus = Topology.CalculateGridBusToIslandBusPower(pvOnAcIsland, loadOnAcIsland, acDc);
@ -195,6 +203,7 @@ internal static class Program
LoadOnAcGrid = gridBusLoad,
LoadOnAcIsland = loadOnAcIsland,
LoadOnDc = dcLoad,
Doepke = doepek,
StateMachine = StateMachine.Default,
EssControl = EssControl.Default,
Log = new SystemLog { SalimaxAlarmState = SalimaxAlarmState.Green, Message = null, SalimaxAlarms = null, SalimaxWarnings = null}, //TODO: Put real stuff
@ -236,20 +245,21 @@ internal static class Program
Watchdog.NotifyAlive();
var record = ReadStatus();
SendSalimaxStateAlarm(GetSalimaxStateAlarm(record), record); // to improve
record.ControlConstants();
record.ControlSystemState();
record.AcDc.SystemControl.ApplyAcDcDefaultSettings();
record.DcDc.SystemControl.ApplyDcDcDefaultSettings();
/* Console.WriteLine(" Fails Counter = " + _failsCounter);
Console.WriteLine(" Fails Counter = " + _failsCounter);
// Retries Control
if (record.StateMachine.State is not (28 or 23) )
/* if (record.StateMachine.State is not (28 or 23) )
{
// add a case 1 > RCD fail
// add a case 2 > overload
if (_failsCounter > 60) // 2 min
{
Console.WriteLine(" Fails retries reached threshold");
@ -261,9 +271,9 @@ internal static class Program
else
{
_failsCounter = 0;
}*/
}
//record.ControlPvPower(record.Config.CurtailP, record.Config.PvInstalledPower);
*/
var essControl = record.ControlEss().WriteLine();
record.EssControl = essControl;
@ -364,7 +374,7 @@ internal static class Program
Description = alarmCondition
});
}
alarmList.AddRange(record.AcDc.Alarms
.Select(alarm => new AlarmOrWarning
{ Date = DateTime.Now.ToString("yyyy-MM-dd"),
@ -443,9 +453,6 @@ internal static class Program
if (r.Battery != null)
{
r.Battery.HighestCellVoltage.WriteLine(" HighestCellVoltage");
r.Battery.LowestCellVoltage.WriteLine(" LowestCellVoltage");
// Deligreen upper current limitation dynCCL
if ( dcCount != 0 && r.Battery.MonomerHighVoltageAlarm )
{
@ -458,7 +465,7 @@ internal static class Program
}
// Deligreen lower current limitation dynDCL
if ( dcCount != 0 && r.Battery.MonomerLowVoltageAlarm ) // this 10 comparison need to be checked
if ( dcCount != 0 && r.Battery.MonomerLowVoltageAlarm )
{
maxBatteryDischargingCurrentLivebyDcDc = 10.0 / dcCount ; // Max discharging current is 10 A * Number of batteries
Console.WriteLine("dynDCL Active: Max disCharging current for one Battery is "+ maxBatteryDischargingCurrentLivebyDcDc * dcCount); // multiply by dcCount for display purpose
@ -468,12 +475,15 @@ internal static class Program
maxBatteryDischargingCurrentLivebyDcDc = devicesConfig.DcDc.MaxBatteryDischargingCurrent/r.Battery.Devices.Count;
}
maxBatteryChargingCurrentLiveByDcDc *= r.Battery.AvailableChBatteries; // Adapt the current to the number of available battery
maxBatteryDischargingCurrentLivebyDcDc *= r.Battery.AvailableDischBatteries; // Adapt the current to the number of available battery
maxBatteryChargingCurrentLiveByDcDc = 5 + (maxBatteryChargingCurrentLiveByDcDc * r.Battery.AvailableChBatteries); // Adapt the current to the number of available battery
maxBatteryDischargingCurrentLivebyDcDc = 5 + (maxBatteryDischargingCurrentLivebyDcDc * r.Battery.AvailableDischBatteries); // Adapt the current to the number of available battery
(r.Battery?.AvailableChBatteries)?.WriteLine(" Available Charging Batteries");
(r.Battery?.AvailableDischBatteries)?.WriteLine(" Available Discharging Batteries");
(r.Battery?.ChargeModeBatteries)?.WriteLine(" Batteries on charge mode");
(r.Battery?.DischargeModeBatteries)?.WriteLine(" Batteries on discharge mode");
maxBatteryChargingCurrentLiveByDcDc.WriteLine(" maxBatteryChargingCurrentLive by DcDC");
maxBatteryDischargingCurrentLivebyDcDc.WriteLine(" maxBatteryDischargingCurrentLive by DcDc");
@ -601,7 +611,7 @@ internal static class Program
Console.WriteLine(" ****************** ");
}
// why this is not in Controller?
// why is not in Controller?
private static void DistributePower(StatusRecord record, EssControl essControl)
{
var nInverters = record.AcDc.Devices.Count;
@ -938,5 +948,13 @@ internal static class Program
{
status.Config.DayAndTimeForAdditionalCalibration = config.CalibrationChargeDate;
}
if (config.CalibrationDischargeState == CalibrationDischargeType.RepetitivelyEvery)
{
status.Config.DownDayAndTimeForRepetitiveCalibration = config.CalibrationDischargeDate;
}
else if (config.CalibrationDischargeState == CalibrationDischargeType.AdditionallyOnce)
{
status.Config.DownDayAndTimeForAdditionalCalibration = config.CalibrationDischargeDate;
}
}
}