Compare commits

..

No commits in common. "73880f0737dfae1dc3dcd432ec370f5dbed3138d" and "57b7a7198419a7de64aa855fbce50cf77b710e86" have entirely different histories.

4 changed files with 54 additions and 26 deletions

View File

@ -114,8 +114,36 @@ 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*/
EssModeControl(statusrecord,EssMode.LoadPriority); // this should moved to config file
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);
statusrecord.ApplyDefaultSettings();
@ -154,7 +182,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
@ -173,7 +201,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);
}
@ -231,7 +259,7 @@ public static class Program
Warnings = warningList
};
return returnedStatus;
return returnedStatus;
}
private static Int32 GetInstallationId(String s3Bucket)
@ -274,7 +302,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
@ -284,7 +312,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;*/
}
@ -326,13 +354,13 @@ public static class Program
private static async Task SaveModbusTcpFile(StatusRecord status)
{
var modbusData = new Dictionary<String, UInt16>();
const Double protcolNumber = 1.1;
var protcolNumber = 2.0;
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);
@ -360,7 +388,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
};

View File

@ -26,6 +26,7 @@ public partial class WITGrowatRecord
public Int32 MeterPower => _MeterPower;
public ActivePower GridMeterPower => _GridPower;
public Int32 BatteryPower1
{
get => _BatteryPower1;
@ -55,7 +56,7 @@ public partial class WITGrowatRecord
public DcPower Pv1InpuPower => _Pv1InpuPower;
// ********************************** Holding Registers (Control) *************************************************************
/*
// public UInt16 DeviceModel => _DeviceModel;
public UInt32 RatedPower
{
@ -92,24 +93,23 @@ 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<BatteryRecord> Batteries => new List<BatteryRecord>
@ -255,7 +255,7 @@ public partial class WITGrowatRecord
AccumulatedDischargeEnergy = _AccumulatedDishargeEnergy1,
BatteryAmbientTemperature = _BatteryAmbientTemperature1
}
},
/*
new BatteryRecord
{

View File

@ -129,7 +129,7 @@ public partial class WITGrowatRecord
/****************************** Holding registers ****************************/
// [HoldingRegister(30000)] private UInt16 _DeviceModel;
[HoldingRegister<UInt32>(30016, Scale = 0.1)] private UInt32 _RatedPower;
/* [HoldingRegister<UInt32>(30016, Scale = 0.1)] private UInt32 _RatedPower;
[HoldingRegister<UInt32>(30018, Scale = 0.1)] private UInt32 _MaxActivePower;
[HoldingRegister<UInt32>(30028, Scale = 0.1)] private UInt32 _PvInputMaxPower;
[HoldingRegister(30030)] private UInt16 _BatteryType;

View File

@ -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;
}