From c0030d7795e6036c15772e87ee8bd2ab6fc5c1b1 Mon Sep 17 00:00:00 2001 From: atef Date: Mon, 1 Sep 2025 14:52:52 +0200 Subject: [PATCH] update and uncomment the needed file --- csharp/App/GrowattCommunication/Program.cs | 46 ++++--------------- .../WITGrowatt4-15K/WITGrowatRecord.Api.cs | 30 ++++++------ .../WITGrowatt4-15K/WITGrowatRecord.Modbus.cs | 2 +- .../Protocols/Modbus/Slaves/ModbusDevice.cs | 2 +- 4 files changed, 26 insertions(+), 54 deletions(-) diff --git a/csharp/App/GrowattCommunication/Program.cs b/csharp/App/GrowattCommunication/Program.cs index 6ef2e9a30..2814a6e64 100644 --- a/csharp/App/GrowattCommunication/Program.cs +++ b/csharp/App/GrowattCommunication/Program.cs @@ -114,36 +114,8 @@ public static class Program await DataLogging(statusrecord, timestamp); // save a csv file locally await SaveModbusTcpFile(statusrecord); // save the json file for modbuscTCP - /* statusrecord.AcDcGrowatt.RemotePowerControl.WriteLine(" = RemotePowerControl"); - - statusrecord.AcDcGrowatt.EnableCommand.WriteLine(" = EnableCommand"); - statusrecord.AcDcGrowatt.ControlPermession.WriteLine(" ControlPermession");*/ - statusrecord.AcDcGrowatt.GridMeterPower.WriteLine(" GridMeterPower"); - statusrecord.AcDcGrowatt.InverterActivePower.WriteLine(" InverterActivePower"); - statusrecord.AcDcGrowatt.PhaseACurrent.WriteLine(" PhaseACurrent "); //30409 we set power here - statusrecord.AcDcGrowatt.GridAbLineVoltage.WriteLine(" GridAbLineVoltage "); //30409 we set power here - // statusrecord.AcDcGrowatt.RemotePowerControlChargeDuration.WriteLine(" = RemotePowerControlChargeDuration"); - statusrecord.AcDcGrowatt.Batteries[0].Soc.WriteLine(" SOC"); - statusrecord.AcDcGrowatt.Batteries[0].Power.WriteLine(" Battery Power"); - statusrecord.AcDcGrowatt.Batteries[0].Current.WriteLine(" Battery Current"); - statusrecord.AcDcGrowatt.Batteries[0].Voltage.WriteLine(" Battery Voltage"); - /* statusrecord.AcDcGrowatt.BatteryMaxChargePower.WriteLine(" BatteryMaxChargePower "); //30409 we set power here - statusrecord.AcDcGrowatt.BatteryMaxDischargePower.WriteLine(" BatteryMaxDischargePower "); //30409 we set power here*/ - statusrecord.AcDcGrowatt.SystemOperatingMode.WriteLine(" = SystemOperatingMode"); - statusrecord.AcDcGrowatt.BatteryOperatingMode.WriteLine(" = BatteryOperatingMode"); - statusrecord.AcDcGrowatt.OperatingPriority.WriteLine(" = OperatingPriority"); // 30408 this the duration - - statusrecord.AcDcGrowatt.FaultMainCode.WriteLine(" = FaultMainCode"); // 30408 this the duration - statusrecord.AcDcGrowatt.FaultSubCode.WriteLine(" = FaultSubCode"); // 30408 this the duration - statusrecord.AcDcGrowatt.WarningMainCode.WriteLine(" = WarningMainCode"); // 30408 this the duration - statusrecord.AcDcGrowatt.WarningSubCode.WriteLine(" = WarningSubCode"); // 30408 this the duration - - var stopTime = DateTime.Now; - Console.WriteLine(stopTime.ToString("HH:mm:ss.fff")); - Console.WriteLine("***************************** Finish Battery Data *********************************************"); - - EssModeControl(statusrecord,EssMode.LoadPriority); + EssModeControl(statusrecord,EssMode.LoadPriority); // this should moved to config file statusrecord.ApplyDefaultSettings(); @@ -182,7 +154,7 @@ public static class Program switch (mode) { case EssMode.Off: - return "no mode";/* + return "no mode"; case EssMode.GridPriority: statusrecord.AcDcGrowatt.RemotePowerControl = true; statusrecord.AcDcGrowatt.RemotePowerControlChargeDuration = 0; // 30408 this the duration @@ -201,7 +173,7 @@ public static class Program return "Battery priority mode active"; case EssMode.LoadPriority: statusrecord.AcDcGrowatt.RemotePowerControl = false; - return "Load priority mode active";*/ + return "Load priority mode active"; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); } @@ -259,7 +231,7 @@ public static class Program Warnings = warningList }; - return returnedStatus; + return returnedStatus; } private static Int32 GetInstallationId(String s3Bucket) @@ -302,7 +274,7 @@ public static class Program { if (st is null) return; - /* + st.AcDcGrowatt.BatteryMaxChargeCurrent = st.Config.MaximumChargingCurrent; st.AcDcGrowatt.BatteryMaxdischargeCurrent = st.Config.MaximumDischargingCurrent; st.AcDcGrowatt.EmsCommunicationFailureTime = 20; // 20 sec @@ -312,7 +284,7 @@ public static class Program st.AcDcGrowatt.BatteryChargeCutoffVoltage = 100; //st.Config.BatteryChargeCutoffVoltage; st.AcDcGrowatt.BatteryDischargeCutoffVoltage = 20; //st.Config.BatteryDischargeCutoffVoltage; st.AcDcGrowatt.BatteryMaxChargeCurrent = 200; //st.Config.BatteryChargeCutoffVoltage; - st.AcDcGrowatt.BatteryMaxdischargeCurrent = 200; //st.Config.BatteryChargeCutoffVoltage;*/ + st.AcDcGrowatt.BatteryMaxdischargeCurrent = 200; //st.Config.BatteryChargeCutoffVoltage; } @@ -354,13 +326,13 @@ public static class Program private static async Task SaveModbusTcpFile(StatusRecord status) { var modbusData = new Dictionary(); - var protcolNumber = 2.0; + const Double protcolNumber = 1.1; var pv1Power = status.AcDcGrowatt.Pv1Current * status.AcDcGrowatt.Pv1Voltage; var pv2Power = status.AcDcGrowatt.Pv2Current * status.AcDcGrowatt.Pv2Voltage; // SYSTEM DATA var result1 = ConvertToModbusRegisters((protcolNumber * 10), "UInt16", 30000); // this to be updated to modbusTCP version - // var result2 = ConvertToModbusRegisters(status.AcDcGrowatt.SystemDateTime.ToUnixTime(), "UInt32", 30001); + var result2 = ConvertToModbusRegisters(status.AcDcGrowatt.SystemDateTime.ToUnixTime(), "UInt32", 30001); var result3 = ConvertToModbusRegisters(status.AcDcGrowatt.SystemOperatingMode, "UInt16", 30003); var result17 = ConvertToModbusRegisters(status.AcDcGrowatt.OperatingPriority, "UInt16", 30004); @@ -388,7 +360,7 @@ public static class Program // Merge all results into one dictionary var allResults = new[] { - result1,/* result2, */result3, result17, result4, result5, result6, result7, result8, + result1,result2, result3, result17, result4, result5, result6, result7, result8, result9, result10, result11, result12, result13, result14, result15, result16, result18, result19 }; diff --git a/csharp/Lib/Devices/WITGrowatt4-15K/WITGrowatRecord.Api.cs b/csharp/Lib/Devices/WITGrowatt4-15K/WITGrowatRecord.Api.cs index 7eccc2f0e..3044c6876 100644 --- a/csharp/Lib/Devices/WITGrowatt4-15K/WITGrowatRecord.Api.cs +++ b/csharp/Lib/Devices/WITGrowatt4-15K/WITGrowatRecord.Api.cs @@ -26,7 +26,6 @@ public partial class WITGrowatRecord public Int32 MeterPower => _MeterPower; public ActivePower GridMeterPower => _GridPower; - public Int32 BatteryPower1 { get => _BatteryPower1; @@ -56,7 +55,7 @@ public partial class WITGrowatRecord public DcPower Pv1InpuPower => _Pv1InpuPower; // ********************************** Holding Registers (Control) ************************************************************* - /* + // public UInt16 DeviceModel => _DeviceModel; public UInt32 RatedPower { @@ -93,23 +92,24 @@ public partial class WITGrowatRecord { get => _EnableCommand; set => _EnableCommand = value; - } + } + + public DateTime SystemDateTime + { + get + { + var systemTime1 = _SystemTime1 + 2000; // We add 2000 years to fit a correct epoch time + return new DateTime(systemTime1, _SystemTime2, _SystemTime3, _SystemTime4, _SystemTime5, + _SystemTime6); + } + } - public DateTime SystemDateTime - { - get - { - var systemTime1 = _SystemTime1 + 2000; // We add 2000 years to fit a correct epoch time - return new DateTime(systemTime1, _SystemTime2, _SystemTime3, _SystemTime4, _SystemTime5, - _SystemTime6); - } - /* public Boolean EnableSyn { get => _EnableSyn ; set => _EnableSyn = value; }*/ - /* + public Percent ActivePowerPercentDerating { get => _ActivePowerPercentDerating; @@ -234,7 +234,7 @@ public partial class WITGrowatRecord set => _BatteryMaxdischargeCurrent = (UInt16) value; } - */ + public IReadOnlyList Batteries => new List @@ -255,7 +255,7 @@ public partial class WITGrowatRecord AccumulatedDischargeEnergy = _AccumulatedDishargeEnergy1, BatteryAmbientTemperature = _BatteryAmbientTemperature1 - }, + } /* new BatteryRecord { diff --git a/csharp/Lib/Devices/WITGrowatt4-15K/WITGrowatRecord.Modbus.cs b/csharp/Lib/Devices/WITGrowatt4-15K/WITGrowatRecord.Modbus.cs index 9fd685ab6..cef4b9ff3 100644 --- a/csharp/Lib/Devices/WITGrowatt4-15K/WITGrowatRecord.Modbus.cs +++ b/csharp/Lib/Devices/WITGrowatt4-15K/WITGrowatRecord.Modbus.cs @@ -129,7 +129,7 @@ public partial class WITGrowatRecord /****************************** Holding registers ****************************/ // [HoldingRegister(30000)] private UInt16 _DeviceModel; - /* [HoldingRegister(30016, Scale = 0.1)] private UInt32 _RatedPower; + [HoldingRegister(30016, Scale = 0.1)] private UInt32 _RatedPower; [HoldingRegister(30018, Scale = 0.1)] private UInt32 _MaxActivePower; [HoldingRegister(30028, Scale = 0.1)] private UInt32 _PvInputMaxPower; [HoldingRegister(30030)] private UInt16 _BatteryType; diff --git a/csharp/Lib/Protocols/Modbus/Slaves/ModbusDevice.cs b/csharp/Lib/Protocols/Modbus/Slaves/ModbusDevice.cs index 7cf505f02..d626f0e9b 100644 --- a/csharp/Lib/Protocols/Modbus/Slaves/ModbusDevice.cs +++ b/csharp/Lib/Protocols/Modbus/Slaves/ModbusDevice.cs @@ -41,7 +41,7 @@ public class ModbusDevice<[DynamicallyAccessedMembers(All)] R> where R : notnull foreach (var batch in _Batches) { batch.Read(record); - //Thread.Sleep(50); // this added mainly for Growatt reading + Thread.Sleep(50); // this added mainly for Growatt reading } return record; }