Update alll project with Writable flag.
This commit is contained in:
parent
9691e3aa80
commit
b424643213
|
|
@ -109,27 +109,26 @@ public static class Program
|
||||||
// the order matter of the next three lines
|
// the order matter of the next three lines
|
||||||
var statusrecord = ReadStatus();
|
var statusrecord = ReadStatus();
|
||||||
|
|
||||||
// SendSalimaxStateAlarm(GetSodiHomeStateAlarm(statusrecord),statusrecord);
|
SendSalimaxStateAlarm(GetSodiHomeStateAlarm(statusrecord),statusrecord);
|
||||||
|
|
||||||
await DataLogging(statusrecord, timestamp); // save a csv file locally
|
await DataLogging(statusrecord, timestamp); // save a csv file locally
|
||||||
await SaveModbusTcpFile(statusrecord); // save the json file for modbuscTCP
|
await SaveModbusTcpFile(statusrecord); // save the json file for modbuscTCP
|
||||||
|
|
||||||
statusrecord.AcDcGrowatt.RemotePowerControl.WriteLine(" = RemotePowerControl");
|
/* statusrecord.AcDcGrowatt.RemotePowerControl.WriteLine(" = RemotePowerControl");
|
||||||
|
|
||||||
statusrecord.AcDcGrowatt.EnableCommand.WriteLine(" = EnableCommand");
|
statusrecord.AcDcGrowatt.EnableCommand.WriteLine(" = EnableCommand");
|
||||||
statusrecord.AcDcGrowatt.ControlPermession.WriteLine(" ControlPermession");
|
statusrecord.AcDcGrowatt.ControlPermession.WriteLine(" ControlPermession");*/
|
||||||
statusrecord.AcDcGrowatt.GridMeterPower.WriteLine(" GridMeterPower");
|
statusrecord.AcDcGrowatt.GridMeterPower.WriteLine(" GridMeterPower");
|
||||||
statusrecord.AcDcGrowatt.InverterActivePower.WriteLine(" InverterActivePower");
|
statusrecord.AcDcGrowatt.InverterActivePower.WriteLine(" InverterActivePower");
|
||||||
statusrecord.AcDcGrowatt.BatteryPower1.WriteLine(" BatteryPower1"); // 30408 this the duration
|
|
||||||
statusrecord.AcDcGrowatt.PhaseACurrent.WriteLine(" PhaseACurrent "); //30409 we set power here
|
statusrecord.AcDcGrowatt.PhaseACurrent.WriteLine(" PhaseACurrent "); //30409 we set power here
|
||||||
statusrecord.AcDcGrowatt.GridAbLineVoltage.WriteLine(" GridAbLineVoltage "); //30409 we set power here
|
statusrecord.AcDcGrowatt.GridAbLineVoltage.WriteLine(" GridAbLineVoltage "); //30409 we set power here
|
||||||
statusrecord.AcDcGrowatt.RemotePowerControlChargeDuration.WriteLine(" = RemotePowerControlChargeDuration");
|
// statusrecord.AcDcGrowatt.RemotePowerControlChargeDuration.WriteLine(" = RemotePowerControlChargeDuration");
|
||||||
statusrecord.AcDcGrowatt.Batteries[0].Soc.WriteLine(" SOC");
|
statusrecord.AcDcGrowatt.Batteries[0].Soc.WriteLine(" SOC");
|
||||||
statusrecord.AcDcGrowatt.Batteries[0].Power.WriteLine(" Battery Power");
|
statusrecord.AcDcGrowatt.Batteries[0].Power.WriteLine(" Battery Power");
|
||||||
statusrecord.AcDcGrowatt.Batteries[0].Current.WriteLine(" Battery Current");
|
statusrecord.AcDcGrowatt.Batteries[0].Current.WriteLine(" Battery Current");
|
||||||
statusrecord.AcDcGrowatt.Batteries[0].Voltage.WriteLine(" Battery Voltage");
|
statusrecord.AcDcGrowatt.Batteries[0].Voltage.WriteLine(" Battery Voltage");
|
||||||
statusrecord.AcDcGrowatt.BatteryMaxChargePower.WriteLine(" BatteryMaxChargePower "); //30409 we set power here
|
/* statusrecord.AcDcGrowatt.BatteryMaxChargePower.WriteLine(" BatteryMaxChargePower "); //30409 we set power here
|
||||||
statusrecord.AcDcGrowatt.BatteryMaxDischargePower.WriteLine(" BatteryMaxDischargePower "); //30409 we set power here
|
statusrecord.AcDcGrowatt.BatteryMaxDischargePower.WriteLine(" BatteryMaxDischargePower "); //30409 we set power here*/
|
||||||
|
|
||||||
statusrecord.AcDcGrowatt.SystemOperatingMode.WriteLine(" = SystemOperatingMode");
|
statusrecord.AcDcGrowatt.SystemOperatingMode.WriteLine(" = SystemOperatingMode");
|
||||||
statusrecord.AcDcGrowatt.BatteryOperatingMode.WriteLine(" = BatteryOperatingMode");
|
statusrecord.AcDcGrowatt.BatteryOperatingMode.WriteLine(" = BatteryOperatingMode");
|
||||||
|
|
@ -143,8 +142,6 @@ public static class Program
|
||||||
var stopTime = DateTime.Now;
|
var stopTime = DateTime.Now;
|
||||||
Console.WriteLine(stopTime.ToString("HH:mm:ss.fff"));
|
Console.WriteLine(stopTime.ToString("HH:mm:ss.fff"));
|
||||||
Console.WriteLine("***************************** Finish Battery Data *********************************************");
|
Console.WriteLine("***************************** Finish Battery Data *********************************************");
|
||||||
statusrecord.AcDcGrowatt.ChargeCutoffSoc = 100;
|
|
||||||
statusrecord.AcDcGrowatt.DischargeCutoffSoc = 20;
|
|
||||||
|
|
||||||
EssModeControl(statusrecord,EssMode.LoadPriority);
|
EssModeControl(statusrecord,EssMode.LoadPriority);
|
||||||
|
|
||||||
|
|
@ -185,7 +182,7 @@ public static class Program
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
case EssMode.Off:
|
case EssMode.Off:
|
||||||
return "no mode";
|
return "no mode";/*
|
||||||
case EssMode.GridPriority:
|
case EssMode.GridPriority:
|
||||||
statusrecord.AcDcGrowatt.RemotePowerControl = true;
|
statusrecord.AcDcGrowatt.RemotePowerControl = true;
|
||||||
statusrecord.AcDcGrowatt.RemotePowerControlChargeDuration = 0; // 30408 this the duration
|
statusrecord.AcDcGrowatt.RemotePowerControlChargeDuration = 0; // 30408 this the duration
|
||||||
|
|
@ -204,7 +201,7 @@ public static class Program
|
||||||
return "Battery priority mode active";
|
return "Battery priority mode active";
|
||||||
case EssMode.LoadPriority:
|
case EssMode.LoadPriority:
|
||||||
statusrecord.AcDcGrowatt.RemotePowerControl = false;
|
statusrecord.AcDcGrowatt.RemotePowerControl = false;
|
||||||
return "Load priority mode active";
|
return "Load priority mode active";*/
|
||||||
default:
|
default:
|
||||||
throw new ArgumentOutOfRangeException(nameof(mode), mode, null);
|
throw new ArgumentOutOfRangeException(nameof(mode), mode, null);
|
||||||
}
|
}
|
||||||
|
|
@ -305,15 +302,17 @@ public static class Program
|
||||||
{
|
{
|
||||||
if (st is null)
|
if (st is null)
|
||||||
return;
|
return;
|
||||||
|
/*
|
||||||
|
st.AcDcGrowatt.BatteryMaxChargeCurrent = st.Config.MaximumChargingCurrent;
|
||||||
|
st.AcDcGrowatt.BatteryMaxdischargeCurrent = st.Config.MaximumDischargingCurrent;
|
||||||
st.AcDcGrowatt.EmsCommunicationFailureTime = 20; // 20 sec
|
st.AcDcGrowatt.EmsCommunicationFailureTime = 20; // 20 sec
|
||||||
st.AcDcGrowatt.EnableEmsCommunicationFailureTime = false;
|
st.AcDcGrowatt.EnableEmsCommunicationFailureTime = false;
|
||||||
st.AcDcGrowatt.EnableCommand = false;
|
st.AcDcGrowatt.EnableCommand = true;
|
||||||
st.AcDcGrowatt.ControlPermession = false;
|
st.AcDcGrowatt.ControlPermession = true;
|
||||||
st.AcDcGrowatt.BatteryChargeCutoffVoltage = 100; //st.Config.BatteryChargeCutoffVoltage;
|
st.AcDcGrowatt.BatteryChargeCutoffVoltage = 100; //st.Config.BatteryChargeCutoffVoltage;
|
||||||
st.AcDcGrowatt.BatteryDischargeCutoffVoltage = 20; //st.Config.BatteryDischargeCutoffVoltage;
|
st.AcDcGrowatt.BatteryDischargeCutoffVoltage = 20; //st.Config.BatteryDischargeCutoffVoltage;
|
||||||
st.AcDcGrowatt.BatteryMaxChargeCurrent = 150; //st.Config.BatteryChargeCutoffVoltage;
|
st.AcDcGrowatt.BatteryMaxChargeCurrent = 200; //st.Config.BatteryChargeCutoffVoltage;
|
||||||
st.AcDcGrowatt.BatteryMaxdischargeCurrent = 150; //st.Config.BatteryChargeCutoffVoltage;
|
st.AcDcGrowatt.BatteryMaxdischargeCurrent = 200; //st.Config.BatteryChargeCutoffVoltage;*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -355,17 +354,20 @@ public static class Program
|
||||||
private static async Task SaveModbusTcpFile(StatusRecord status)
|
private static async Task SaveModbusTcpFile(StatusRecord status)
|
||||||
{
|
{
|
||||||
var modbusData = new Dictionary<String, UInt16>();
|
var modbusData = new Dictionary<String, UInt16>();
|
||||||
|
var protcolNumber = 2.0;
|
||||||
|
var pv1Power = status.AcDcGrowatt.Pv1Current * status.AcDcGrowatt.Pv1Voltage;
|
||||||
|
var pv2Power = status.AcDcGrowatt.Pv2Current * status.AcDcGrowatt.Pv2Voltage;
|
||||||
|
|
||||||
Console.WriteLine(new DateTimeOffset(status.AcDcGrowatt.SystemDateTime).ToUnixTimeSeconds() + " This Growatt time");
|
|
||||||
// SYSTEM DATA
|
// SYSTEM DATA
|
||||||
var result1 = ConvertToModbusRegisters((status.AcDcGrowatt.VppProtocolVerNumber * 10), "UInt16", 30001);
|
var result1 = ConvertToModbusRegisters((protcolNumber * 10), "UInt16", 30000); // this to be updated to modbusTCP version
|
||||||
var result2 = ConvertToModbusRegisters(status.AcDcGrowatt.SystemDateTime.ToUnixTime(), "UInt32", 30002);
|
// var result2 = ConvertToModbusRegisters(status.AcDcGrowatt.SystemDateTime.ToUnixTime(), "UInt32", 30001);
|
||||||
var result3 = ConvertToModbusRegisters(status.AcDcGrowatt.SystemOperatingMode, "Int16", 30004);
|
var result3 = ConvertToModbusRegisters(status.AcDcGrowatt.SystemOperatingMode, "UInt16", 30003);
|
||||||
|
var result17 = ConvertToModbusRegisters(status.AcDcGrowatt.OperatingPriority, "UInt16", 30004);
|
||||||
|
|
||||||
// BATTERY SUMMARY (assuming single battery [0])
|
// BATTERY SUMMARY (assuming single battery [0]) // this to be improved
|
||||||
var battery = status.AcDcGrowatt.BatteriesRecords!.Batteries[0];
|
var battery = status.AcDcGrowatt.BatteriesRecords!.Batteries[0];
|
||||||
|
|
||||||
var result4 = ConvertToModbusRegisters((status.AcDcGrowatt.BatteriesRecords!.Batteries.Count ), "UInt16", 31000);
|
var result4 = ConvertToModbusRegisters((status.AcDcGrowatt.BatteriesRecords!.Batteries.Count ), "UInt16", 30099);
|
||||||
var result5 = ConvertToModbusRegisters((battery.Power.Value * 10), "Int32", 31001);
|
var result5 = ConvertToModbusRegisters((battery.Power.Value * 10), "Int32", 31001);
|
||||||
var result6 = ConvertToModbusRegisters((battery.DailyChargeEnergy.Value * 10), "UInt32", 31003);
|
var result6 = ConvertToModbusRegisters((battery.DailyChargeEnergy.Value * 10), "UInt32", 31003);
|
||||||
var result7 = ConvertToModbusRegisters((battery.AccumulatedChargeEnergy.Value * 10), "UInt32", 31005);
|
var result7 = ConvertToModbusRegisters((battery.AccumulatedChargeEnergy.Value * 10), "UInt32", 31005);
|
||||||
|
|
@ -377,15 +379,17 @@ public static class Program
|
||||||
var result12 = ConvertToModbusRegisters((battery.Voltage.Value * 10), "Int16", 31015);
|
var result12 = ConvertToModbusRegisters((battery.Voltage.Value * 10), "Int16", 31015);
|
||||||
var result13 = ConvertToModbusRegisters((battery.Current.Value * 10), "Int32", 31016);
|
var result13 = ConvertToModbusRegisters((battery.Current.Value * 10), "Int32", 31016);
|
||||||
var result14 = ConvertToModbusRegisters((battery.Soc.Value * 100), "UInt16", 31018);
|
var result14 = ConvertToModbusRegisters((battery.Soc.Value * 100), "UInt16", 31018);
|
||||||
var result15 = ConvertToModbusRegisters((status.AcDcGrowatt.BatteriesRecords!.AverageSoh * 100), "UInt16", 31019);
|
var result15 = ConvertToModbusRegisters((status.AcDcGrowatt.BatteriesRecords!.AverageSoh * 100), "UInt16", 31020);
|
||||||
var result16 = ConvertToModbusRegisters((battery.BatteryAmbientTemperature.Value * 100), "UInt16", 31021);
|
var result16 = ConvertToModbusRegisters((battery.BatteryAmbientTemperature.Value * 100), "UInt16", 31021);
|
||||||
|
var result18 = ConvertToModbusRegisters(((pv1Power + pv2Power) * 10), "UInt32", 31999);
|
||||||
|
var result19 = ConvertToModbusRegisters((status.AcDcGrowatt.GridMeterPower.Value * 10), "Int32", 32999);
|
||||||
|
|
||||||
|
|
||||||
// Merge all results into one dictionary
|
// Merge all results into one dictionary
|
||||||
var allResults = new[]
|
var allResults = new[]
|
||||||
{
|
{
|
||||||
result1, result2, result3, result4, result5, result6, result7, result8,
|
result1,/* result2, */result3, result17, result4, result5, result6, result7, result8,
|
||||||
result9, result10, result11, result12, result13, result14, result15, result16
|
result9, result10, result11, result12, result13, result14, result15, result16, result18, result19
|
||||||
};
|
};
|
||||||
|
|
||||||
foreach (var result in allResults)
|
foreach (var result in allResults)
|
||||||
|
|
@ -397,7 +401,7 @@ public static class Program
|
||||||
}
|
}
|
||||||
// Write to JSON
|
// Write to JSON
|
||||||
var json = JsonSerializer.Serialize(modbusData, new JsonSerializerOptions { WriteIndented = true });
|
var json = JsonSerializer.Serialize(modbusData, new JsonSerializerOptions { WriteIndented = true });
|
||||||
await File.WriteAllTextAsync("/home/inesco/ModbusTCP/modbus_tcp_data.json", json);
|
await File.WriteAllTextAsync("/home/inesco/SodiStoreHome/ModbusTCP/modbus_tcp_data.json", json);
|
||||||
|
|
||||||
//Console.WriteLine("JSON file written successfully.");
|
//Console.WriteLine("JSON file written successfully.");
|
||||||
//Console.WriteLine(json);
|
//Console.WriteLine(json);
|
||||||
|
|
@ -578,7 +582,7 @@ public static class Program
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Heartbit()
|
private static void Heartbit()
|
||||||
{
|
{ /*
|
||||||
var s3Bucket = Config.Load().S3?.Bucket;
|
var s3Bucket = Config.Load().S3?.Bucket;
|
||||||
var tryParse = int.TryParse(s3Bucket?.Split("-")[0], out var installationId);
|
var tryParse = int.TryParse(s3Bucket?.Split("-")[0], out var installationId);
|
||||||
|
|
||||||
|
|
@ -593,7 +597,7 @@ public static class Program
|
||||||
};
|
};
|
||||||
if (s3Bucket != null)
|
if (s3Bucket != null)
|
||||||
RabbitMqManager.InformMiddleware(returnedStatus);
|
RabbitMqManager.InformMiddleware(returnedStatus);
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task SaveToLocalCompressedFallback(Byte[] compressedData, String fileNameWithoutExtension)
|
private static async Task SaveToLocalCompressedFallback(Byte[] compressedData, String fileNameWithoutExtension)
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ tunnel "Trumpf DCDC (http) " 10.0.3.1 80 8002
|
||||||
tunnel "Ext Emu Meter (http) " 10.0.4.1 80 8003
|
tunnel "Ext Emu Meter (http) " 10.0.4.1 80 8003
|
||||||
tunnel "Int Emu Meter (http) " 10.0.4.2 80 8004
|
tunnel "Int Emu Meter (http) " 10.0.4.2 80 8004
|
||||||
tunnel "AMPT (http) " 10.0.5.1 8080 8005
|
tunnel "AMPT (http) " 10.0.5.1 8080 8005
|
||||||
|
tunnel "AMPT (http) " 10.0.5.2 8080 8006
|
||||||
|
|
||||||
tunnel "Trumpf Inverter (modbus)" 10.0.2.1 502 5001
|
tunnel "Trumpf Inverter (modbus)" 10.0.2.1 502 5001
|
||||||
tunnel "Trumpf DCDC (modbus) " 10.0.3.1 502 5002
|
tunnel "Trumpf DCDC (modbus) " 10.0.3.1 502 5002
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ internal static class Program
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
private const String SwVersionNumber =" V1.33.120625 beta";
|
private const String SwVersionNumber =" V1.34.210825 beta";
|
||||||
private static Boolean _curtailFlag = false;
|
private static Boolean _curtailFlag = false;
|
||||||
private const String VpnServerIp = "10.2.0.11";
|
private const String VpnServerIp = "10.2.0.11";
|
||||||
private static Boolean _subscribedToQueue = false;
|
private static Boolean _subscribedToQueue = false;
|
||||||
|
|
@ -492,7 +492,7 @@ internal static class Program
|
||||||
maxBatteryDischargingCurrentLivebyDcDc = 0;
|
maxBatteryDischargingCurrentLivebyDcDc = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This random value 5 is applied when the current is limited to 0. This will create an oscillation between discharging and charging
|
// This random value 5 is applied when the current is limited to 0. The 0 limitations will create an oscillation between discharging and charging
|
||||||
if (maxBatteryChargingCurrentLiveByDcDc == 0)
|
if (maxBatteryChargingCurrentLiveByDcDc == 0)
|
||||||
{
|
{
|
||||||
maxBatteryChargingCurrentLiveByDcDc = 5 / dcCount;
|
maxBatteryChargingCurrentLiveByDcDc = 5 / dcCount;
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ tunnel() {
|
||||||
until nc -vz 127.0.0.1 $lPort 2> /dev/null
|
until nc -vz 127.0.0.1 $lPort 2> /dev/null
|
||||||
do
|
do
|
||||||
echo -n .
|
echo -n .
|
||||||
sleep 0.3
|
sleep 0.5
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "ok"
|
echo "ok"
|
||||||
|
|
@ -28,14 +28,6 @@ tunnel "Ext Emu Meter (http) " 10.0.4.1 80 8003
|
||||||
tunnel "Int Emu Meter (http) " 10.0.4.2 80 8004
|
tunnel "Int Emu Meter (http) " 10.0.4.2 80 8004
|
||||||
tunnel "AMPT (http) " 10.0.5.1 8080 8005
|
tunnel "AMPT (http) " 10.0.5.1 8080 8005
|
||||||
|
|
||||||
tunnel "Trumpf Inverter (modbus)" 10.0.2.1 502 5001
|
|
||||||
tunnel "Trumpf DCDC (modbus) " 10.0.3.1 502 5002
|
|
||||||
tunnel "Ext Emu Meter (modbus) " 10.0.4.1 502 5003
|
|
||||||
tunnel "Int Emu Meter " 10.0.4.2 502 5004
|
|
||||||
tunnel "AMPT (modbus) " 10.0.5.1 502 5005
|
|
||||||
tunnel "Adam " 10.0.1.1 502 5006 #for AMAX is 10.0.1.3
|
|
||||||
tunnel "Batteries " 127.0.0.1 6855 5007
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "press any key to close the tunnels ..."
|
echo "press any key to close the tunnels ..."
|
||||||
read -r -n 1 -s
|
read -r -n 1 -s
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,9 @@ namespace InnovEnergy.Lib.Devices.AMPT;
|
||||||
[OneBasedAddressing]
|
[OneBasedAddressing]
|
||||||
public record CommunicationUnitRegisters
|
public record CommunicationUnitRegisters
|
||||||
{
|
{
|
||||||
[HoldingRegister<Int16>(73)] public Int16 CurrentScaleFactor { get; private set; }
|
[HoldingRegister<Int16>(73, writable: true)] public Int16 CurrentScaleFactor { get; private set; }
|
||||||
[HoldingRegister<Int16>(74)] public Int16 VoltageScaleFactor { get; private set; }
|
[HoldingRegister<Int16>(74, writable: true)] public Int16 VoltageScaleFactor { get; private set; }
|
||||||
[HoldingRegister<Int16>(76)] public Int16 EnergyScaleFactor { get; private set; }
|
[HoldingRegister<Int16>(76, writable: true)] public Int16 EnergyScaleFactor { get; private set; }
|
||||||
|
|
||||||
[HoldingRegister(78)] public UInt16 NumberOfStringOptimizers { get; private set; }
|
[HoldingRegister(78, writable: true)] public UInt16 NumberOfStringOptimizers { get; private set; }
|
||||||
}
|
}
|
||||||
|
|
@ -11,16 +11,16 @@ namespace InnovEnergy.Lib.Devices.AMPT;
|
||||||
[OneBasedAddressing][BigEndian]
|
[OneBasedAddressing][BigEndian]
|
||||||
public record StringOptimizerRegisters
|
public record StringOptimizerRegisters
|
||||||
{
|
{
|
||||||
[HoldingRegister<UInt32>(88) ] public UInt32 Timestamp { get; private set; }
|
[HoldingRegister<UInt32>(88, writable: true) ] public UInt32 Timestamp { get; private set; }
|
||||||
|
|
||||||
[HoldingRegister<Int16> (90, Scale = .001)] public Double Current { get; private set; }
|
[HoldingRegister<Int16> (90, writable: true, Scale = .001)] public Double Current { get; private set; }
|
||||||
[HoldingRegister<UInt32>(91, Scale = .001)] public Double Voltage { get; private set; }
|
[HoldingRegister<UInt32>(91, writable: true, Scale = .001)] public Double Voltage { get; private set; }
|
||||||
|
|
||||||
[HoldingRegister<UInt32>(93, Scale = .001)] public Double String1Voltage { get; private set; }
|
[HoldingRegister<UInt32>(93, writable: true, Scale = .001)] public Double String1Voltage { get; private set; }
|
||||||
[HoldingRegister<UInt32>(95, Scale = .001)] public Double String2Voltage { get; private set; }
|
[HoldingRegister<UInt32>(95, writable: true, Scale = .001)] public Double String2Voltage { get; private set; }
|
||||||
|
|
||||||
[HoldingRegister<UInt32>(97, Scale = .001)] public Double ProductionToday { get; private set; } //scale 0.001 because we want a Kwh instead of Wh
|
[HoldingRegister<UInt32>(97, writable: true, Scale = .001)] public Double ProductionToday { get; private set; } //scale 0.001 because we want a Kwh instead of Wh
|
||||||
|
|
||||||
[HoldingRegister<Int16>(99, Scale = .001)] public Double String1Current { get; private set; }
|
[HoldingRegister<Int16>(99, writable: true, Scale = .001)] public Double String1Current { get; private set; }
|
||||||
[HoldingRegister<Int16>(100, Scale = .001)] public Double String2Current { get; private set; }
|
[HoldingRegister<Int16>(100, writable: true, Scale = .001)] public Double String2Current { get; private set; }
|
||||||
}
|
}
|
||||||
|
|
@ -46,24 +46,22 @@ public class Adam6360DRegisters
|
||||||
[Coil(93)] public Boolean Do4Pulse { get; set; }
|
[Coil(93)] public Boolean Do4Pulse { get; set; }
|
||||||
[Coil(94)] public Boolean Do5Pulse { get; set; }
|
[Coil(94)] public Boolean Do5Pulse { get; set; }
|
||||||
|
|
||||||
[HoldingRegister(121)] public UInt16 PulseOut0LowTime { get; set; }
|
[HoldingRegister(121, writable: true)] public UInt16 PulseOut0LowTime { get; set; }
|
||||||
[HoldingRegister(122)] public UInt16 PulseOut1LowTime { get; set; }
|
[HoldingRegister(122, writable: true)] public UInt16 PulseOut1LowTime { get; set; }
|
||||||
[HoldingRegister(123)] public UInt16 PulseOut2LowTime { get; set; }
|
[HoldingRegister(123, writable: true)] public UInt16 PulseOut2LowTime { get; set; }
|
||||||
[HoldingRegister(124)] public UInt16 PulseOut3LowTime { get; set; }
|
[HoldingRegister(124, writable: true)] public UInt16 PulseOut3LowTime { get; set; }
|
||||||
[HoldingRegister(125)] public UInt16 PulseOut4LowTime { get; set; }
|
[HoldingRegister(125, writable: true)] public UInt16 PulseOut4LowTime { get; set; }
|
||||||
[HoldingRegister(126)] public UInt16 PulseOut5LowTime { get; set; }
|
[HoldingRegister(126, writable: true)] public UInt16 PulseOut5LowTime { get; set; }
|
||||||
|
[HoldingRegister(127, writable: true)] public UInt16 PulseOut0HighTime { get; set; }
|
||||||
[HoldingRegister(127)] public UInt16 PulseOut0HighTime { get; set; }
|
[HoldingRegister(128, writable: true)] public UInt16 PulseOut1HighTime { get; set; }
|
||||||
[HoldingRegister(128)] public UInt16 PulseOut1HighTime { get; set; }
|
[HoldingRegister(129, writable: true)] public UInt16 PulseOut2HighTime { get; set; }
|
||||||
[HoldingRegister(129)] public UInt16 PulseOut2HighTime { get; set; }
|
[HoldingRegister(130, writable: true)] public UInt16 PulseOut3HighTime { get; set; }
|
||||||
[HoldingRegister(130)] public UInt16 PulseOut3HighTime { get; set; }
|
[HoldingRegister(131, writable: true)] public UInt16 PulseOut4HighTime { get; set; }
|
||||||
[HoldingRegister(131)] public UInt16 PulseOut4HighTime { get; set; }
|
[HoldingRegister(132, writable: true)] public UInt16 PulseOut5HighTime { get; set; }
|
||||||
[HoldingRegister(132)] public UInt16 PulseOut5HighTime { get; set; }
|
[HoldingRegister(145, writable: true)] public UInt16 DigitalOutput0Mode { get; set; }
|
||||||
|
[HoldingRegister(146, writable: true)] public UInt16 DigitalOutput1Mode { get; set; }
|
||||||
[HoldingRegister(145)] public UInt16 DigitalOutput0Mode { get; set; }
|
[HoldingRegister(147, writable: true)] public UInt16 DigitalOutput2Mode { get; set; }
|
||||||
[HoldingRegister(146)] public UInt16 DigitalOutput1Mode { get; set; }
|
[HoldingRegister(148, writable: true)] public UInt16 DigitalOutput3Mode { get; set; }
|
||||||
[HoldingRegister(147)] public UInt16 DigitalOutput2Mode { get; set; }
|
[HoldingRegister(149, writable: true)] public UInt16 DigitalOutput4Mode { get; set; }
|
||||||
[HoldingRegister(148)] public UInt16 DigitalOutput3Mode { get; set; }
|
[HoldingRegister(150, writable: true)] public UInt16 DigitalOutput5Mode { get; set; }
|
||||||
[HoldingRegister(149)] public UInt16 DigitalOutput4Mode { get; set; }
|
|
||||||
[HoldingRegister(150)] public UInt16 DigitalOutput5Mode { get; set; }
|
|
||||||
}
|
}
|
||||||
|
|
@ -16,28 +16,28 @@ public class DoepkeRegisters
|
||||||
[InputRegister(9)] public UInt16 CurrentStatusAlarmsA { get; private set; } // See bit coding* (0 = OK, 1 = Alarm)
|
[InputRegister(9)] public UInt16 CurrentStatusAlarmsA { get; private set; } // See bit coding* (0 = OK, 1 = Alarm)
|
||||||
[InputRegister(10)] public UInt16 CurrentStatusAlarmsB { get; private set; } // See bit coding* (0 = OK, 1 = Alarm)
|
[InputRegister(10)] public UInt16 CurrentStatusAlarmsB { get; private set; } // See bit coding* (0 = OK, 1 = Alarm)
|
||||||
|
|
||||||
[HoldingRegister(15)] public UInt16 FirmwareVersion { get; set; } // x0.01 => Example: 123 = Version 1.23
|
[HoldingRegister(15, writable: true)] public UInt16 FirmwareVersion { get; set; } // x0.01 => Example: 123 = Version 1.23
|
||||||
[HoldingRegister(16)] public UInt16 AlarmThresholdA1 { get; set; } // absolute value
|
[HoldingRegister(16, writable: true)] public UInt16 AlarmThresholdA1 { get; set; } // absolute value
|
||||||
[HoldingRegister(17)] public UInt16 AlarmThresholdA2 { get; set; } // absolute value
|
[HoldingRegister(17, writable: true)] public UInt16 AlarmThresholdA2 { get; set; } // absolute value
|
||||||
[HoldingRegister(18)] public UInt16 AlarmThresholdA3 { get; set; } // absolute value
|
[HoldingRegister(18, writable: true)] public UInt16 AlarmThresholdA3 { get; set; } // absolute value
|
||||||
[HoldingRegister(19)] public UInt16 AlarmThresholdA4 { get; set; } // absolute value
|
[HoldingRegister(19, writable: true)] public UInt16 AlarmThresholdA4 { get; set; } // absolute value
|
||||||
[HoldingRegister(20)] public UInt16 AlarmThresholdA5 { get; set; } // absolute value
|
[HoldingRegister(20, writable: true)] public UInt16 AlarmThresholdA5 { get; set; } // absolute value
|
||||||
[HoldingRegister(21)] public UInt16 AlarmThresholdA6 { get; set; } // absolute value
|
[HoldingRegister(21, writable: true)] public UInt16 AlarmThresholdA6 { get; set; } // absolute value
|
||||||
[HoldingRegister(22)] public UInt16 AlarmThresholdA7 { get; set; } // absolute value
|
[HoldingRegister(22, writable: true)] public UInt16 AlarmThresholdA7 { get; set; } // absolute value
|
||||||
[HoldingRegister(23)] public UInt16 AlarmThresholdA8 { get; set; } // absolute value
|
[HoldingRegister(23, writable: true)] public UInt16 AlarmThresholdA8 { get; set; } // absolute value
|
||||||
[HoldingRegister(24)] public UInt16 ActivationOfAlarmsA { get; set; } // See bit coding* (0=Inactive, 1=Active)
|
[HoldingRegister(24, writable: true)] public UInt16 ActivationOfAlarmsA { get; set; } // See bit coding* (0=Inactive, 1=Active)
|
||||||
[HoldingRegister(25)] public UInt16 AlarmThresholdB1 { get; set; } // absolute value
|
[HoldingRegister(25, writable: true)] public UInt16 AlarmThresholdB1 { get; set; } // absolute value
|
||||||
[HoldingRegister(26)] public UInt16 AlarmThresholdB2 { get; set; } // absolute value
|
[HoldingRegister(26, writable: true)] public UInt16 AlarmThresholdB2 { get; set; } // absolute value
|
||||||
[HoldingRegister(27)] public UInt16 AlarmThresholdB3 { get; set; } // absolute value
|
[HoldingRegister(27, writable: true)] public UInt16 AlarmThresholdB3 { get; set; } // absolute value
|
||||||
[HoldingRegister(28)] public UInt16 AlarmThresholdB4 { get; set; } // absolute value
|
[HoldingRegister(28, writable: true)] public UInt16 AlarmThresholdB4 { get; set; } // absolute value
|
||||||
[HoldingRegister(29)] public UInt16 AlarmThresholdB5 { get; set; } // absolute value
|
[HoldingRegister(29, writable: true)] public UInt16 AlarmThresholdB5 { get; set; } // absolute value
|
||||||
[HoldingRegister(30)] public UInt16 AlarmThresholdB6 { get; set; } // absolute value
|
[HoldingRegister(30, writable: true)] public UInt16 AlarmThresholdB6 { get; set; } // absolute value
|
||||||
[HoldingRegister(31)] public UInt16 AlarmThresholdB7 { get; set; } // absolute value
|
[HoldingRegister(31, writable: true)] public UInt16 AlarmThresholdB7 { get; set; } // absolute value
|
||||||
[HoldingRegister(32)] public UInt16 AlarmThresholdB8 { get; set; } // absolute value
|
[HoldingRegister(32, writable: true)] public UInt16 AlarmThresholdB8 { get; set; } // absolute value
|
||||||
[HoldingRegister(33)] public UInt16 ActivationOfAlarmsB { get; set; } // See bit coding* (0=Inactive, 1=Active)
|
[HoldingRegister(33, writable: true)] public UInt16 ActivationOfAlarmsB { get; set; } // See bit coding* (0=Inactive, 1=Active)
|
||||||
[HoldingRegister(34)] public UInt16 AlarmDelay { get; set; } // 0 = No delay, 1= 500ms, 2= 1000ms,
|
[HoldingRegister(34, writable: true)] public UInt16 AlarmDelay { get; set; } // 0 = No delay, 1= 500ms, 2= 1000ms,
|
||||||
[HoldingRegister(35)] public UInt16 SaveCurrentSettings { get; set; } // 0 = Successful, 1= Save, 2= Error
|
[HoldingRegister(35, writable: true)] public UInt16 SaveCurrentSettings { get; set; } // 0 = Successful, 1= Save, 2= Error
|
||||||
[HoldingRegister(36)] public UInt16 DeviceTest { get; set; } // 0 = Successful, 1= Test active, 2= Error
|
[HoldingRegister(36, writable: true)] public UInt16 DeviceTest { get; set; } // 0 = Successful, 1= Test active, 2= Error
|
||||||
|
|
||||||
|
|
||||||
//*Bit coding alarm status/activation
|
//*Bit coding alarm status/activation
|
||||||
|
|
|
||||||
|
|
@ -14,32 +14,28 @@ using Float32 = Single;
|
||||||
public class EmuMeterRegisters : IAc3Meter
|
public class EmuMeterRegisters : IAc3Meter
|
||||||
{
|
{
|
||||||
|
|
||||||
[HoldingRegister<UInt64>(6004)] private UInt64 _ActivePowerImportT1;
|
[HoldingRegister<UInt64>(6004, writable: true)] private UInt64 _ActivePowerImportT1;
|
||||||
[HoldingRegister<UInt64>(6024)] private UInt64 _ActivePowerExportT1;
|
[HoldingRegister<UInt64>(6024, writable: true)] private UInt64 _ActivePowerExportT1;
|
||||||
[HoldingRegister<UInt64>(6008)] private UInt64 _ActivePowerImportT2;
|
[HoldingRegister<UInt64>(6008, writable: true)] private UInt64 _ActivePowerImportT2;
|
||||||
[HoldingRegister<UInt64>(6028)] private UInt64 _ActivePowerExportT2;
|
[HoldingRegister<UInt64>(6028, writable: true)] private UInt64 _ActivePowerExportT2;
|
||||||
[HoldingRegister<UInt32>(8002)] private UInt32 _ActivePowerImportT3;
|
[HoldingRegister<UInt32>(8002, writable: true)] private UInt32 _ActivePowerImportT3;
|
||||||
[HoldingRegister<UInt32>(8012)] private UInt32 _ActivePowerExportT3;
|
[HoldingRegister<UInt32>(8012, writable: true)] private UInt32 _ActivePowerExportT3;
|
||||||
[HoldingRegister<UInt32>(8000)] private UInt32 _ActivePowerImportT4;
|
[HoldingRegister<UInt32>(8000, writable: true)] private UInt32 _ActivePowerImportT4;
|
||||||
[HoldingRegister<UInt32>(8010)] private UInt32 _ActivePowerExportT4;
|
[HoldingRegister<UInt32>(8010, writable: true)] private UInt32 _ActivePowerExportT4;
|
||||||
|
[HoldingRegister<Float32>(9002, writable: true)] private Float32 _ActivePowerL1;
|
||||||
|
[HoldingRegister<Float32>(9004, writable: true)] private Float32 _ActivePowerL2;
|
||||||
|
[HoldingRegister<Float32>(9006, writable: true)] private Float32 _ActivePowerL3;
|
||||||
|
[HoldingRegister<Float32>(9012, writable: true)] private Float32 _ReactivePowerL1;
|
||||||
|
[HoldingRegister<Float32>(9014, writable: true)] private Float32 _ReactivePowerL2;
|
||||||
|
[HoldingRegister<Float32>(9016, writable: true)] private Float32 _ReactivePowerL3;
|
||||||
|
[HoldingRegister<Float32>(9102, writable: true)] private Float32 _CurrentL1;
|
||||||
|
[HoldingRegister<Float32>(9104, writable: true)] private Float32 _CurrentL2;
|
||||||
|
[HoldingRegister<Float32>(9106, writable: true)] private Float32 _CurrentL3;
|
||||||
|
[HoldingRegister<Float32>(9200, writable: true)] private Float32 _VoltageL1N;
|
||||||
|
[HoldingRegister<Float32>(9202, writable: true)] private Float32 _VoltageL2N;
|
||||||
|
[HoldingRegister<Float32>(9204, writable: true)] private Float32 _VoltageL3N;
|
||||||
|
|
||||||
[HoldingRegister<Float32>(9002)] private Float32 _ActivePowerL1;
|
[HoldingRegister<Float32>(9310, writable: true)] private Float32 _Frequency;
|
||||||
[HoldingRegister<Float32>(9004)] private Float32 _ActivePowerL2;
|
|
||||||
[HoldingRegister<Float32>(9006)] private Float32 _ActivePowerL3;
|
|
||||||
|
|
||||||
[HoldingRegister<Float32>(9012)] private Float32 _ReactivePowerL1;
|
|
||||||
[HoldingRegister<Float32>(9014)] private Float32 _ReactivePowerL2;
|
|
||||||
[HoldingRegister<Float32>(9016)] private Float32 _ReactivePowerL3;
|
|
||||||
|
|
||||||
[HoldingRegister<Float32>(9102)] private Float32 _CurrentL1;
|
|
||||||
[HoldingRegister<Float32>(9104)] private Float32 _CurrentL2;
|
|
||||||
[HoldingRegister<Float32>(9106)] private Float32 _CurrentL3;
|
|
||||||
|
|
||||||
[HoldingRegister<Float32>(9200)] private Float32 _VoltageL1N;
|
|
||||||
[HoldingRegister<Float32>(9202)] private Float32 _VoltageL2N;
|
|
||||||
[HoldingRegister<Float32>(9204)] private Float32 _VoltageL3N;
|
|
||||||
|
|
||||||
[HoldingRegister<Float32>(9310)] private Float32 _Frequency;
|
|
||||||
|
|
||||||
public Ac3Bus Ac => new Ac3Bus
|
public Ac3Bus Ac => new Ac3Bus
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -29,15 +29,12 @@ public partial record SystemControlRegisters
|
||||||
[HoldingRegister(4007)] public UInt16 TargetSlave { get; set; }
|
[HoldingRegister(4007)] public UInt16 TargetSlave { get; set; }
|
||||||
|
|
||||||
//[Coil(4011)]
|
//[Coil(4011)]
|
||||||
[HoldingRegister(4011)] public Boolean UseSlaveIdForAddressing { get; set; }
|
[HoldingRegister(4011, writable: true)] public Boolean UseSlaveIdForAddressing { get; set; }
|
||||||
[HoldingRegister(4006)] public ReferenceFrame ReferenceFrame { get; set; }
|
[HoldingRegister(4006, writable: true)] public ReferenceFrame ReferenceFrame { get; set; }
|
||||||
|
[HoldingRegister(4008, writable: true)] public SlaveErrorHandling SlaveErrorHandling { get; set; }
|
||||||
[HoldingRegister(4008)] public SlaveErrorHandling SlaveErrorHandling { get; set; }
|
[HoldingRegister(4012, writable: true)] public SubSlaveErrorHandling SubSlaveErrorHandling { get; set; }
|
||||||
[HoldingRegister(4012)] public SubSlaveErrorHandling SubSlaveErrorHandling { get; set; }
|
[HoldingRegister(4182, writable: true)] public PowerSetPointActivation PowerSetPointActivation { get; set; }
|
||||||
|
[HoldingRegister(4183, writable: true)] public PowerSetPointTrigger PowerSetPointTrigger { get; set; }
|
||||||
|
|
||||||
[HoldingRegister(4182)] public PowerSetPointActivation PowerSetPointActivation { get; set; }
|
|
||||||
[HoldingRegister(4183)] public PowerSetPointTrigger PowerSetPointTrigger { get; set; }
|
|
||||||
|
|
||||||
[InputRegister(5000)] public DeviceState DeviceState { get; private set; }
|
[InputRegister(5000)] public DeviceState DeviceState { get; private set; }
|
||||||
[InputRegister(5001)] public UInt16 NumberOfConnectedSlaves { get; private set; }
|
[InputRegister(5001)] public UInt16 NumberOfConnectedSlaves { get; private set; }
|
||||||
|
|
|
||||||
|
|
@ -11,41 +11,32 @@ namespace InnovEnergy.Lib.Devices.Trumpf.TruConvertAc;
|
||||||
|
|
||||||
public partial class AcDcRecord
|
public partial class AcDcRecord
|
||||||
{
|
{
|
||||||
[HoldingRegister(4000)] internal Boolean PowerStageEnable;
|
[HoldingRegister(4000, writable: true)] internal Boolean PowerStageEnable;
|
||||||
[HoldingRegister(4001)] internal PhaseControl PhaseControl;
|
[HoldingRegister(4001, writable: true)] internal PhaseControl PhaseControl;
|
||||||
[HoldingRegister(4002)] internal Boolean ResetAlarmsAndWarnings;
|
[HoldingRegister(4002, writable: true)] internal Boolean ResetAlarmsAndWarnings;
|
||||||
|
[HoldingRegister(4005, writable: true)] internal DcPrechargeConfig DcPrechargeConfig;
|
||||||
[HoldingRegister(4005)] internal DcPrechargeConfig DcPrechargeConfig;
|
[HoldingRegister(4009, writable: true)] internal GridType GridType;
|
||||||
|
[HoldingRegister(4200, writable: true)] internal Double PowerSetpointL1; // VA
|
||||||
[HoldingRegister(4009)] internal GridType GridType;
|
[HoldingRegister(4201, writable: true)] internal Double PowerSetpointL2; // VA
|
||||||
[HoldingRegister(4200)] internal Double PowerSetpointL1; // VA
|
[HoldingRegister(4202, writable: true)] internal Double PowerSetpointL3; // VA
|
||||||
[HoldingRegister(4201)] internal Double PowerSetpointL2; // VA
|
[HoldingRegister<Int16>(4206, writable: true)] internal Double CosPhiSetpointL1;
|
||||||
[HoldingRegister(4202)] internal Double PowerSetpointL3; // VA
|
[HoldingRegister<Int16>(4207, writable: true)] internal Double CosPhiSetpointL2;
|
||||||
|
[HoldingRegister<Int16>(4208, writable: true)] internal Double CosPhiSetpointL3;
|
||||||
[HoldingRegister<Int16>(4206)] internal Double CosPhiSetpointL1;
|
[HoldingRegister<Int16>(4219, writable: true)] internal Double SinPhiSetpointL1;
|
||||||
[HoldingRegister<Int16>(4207)] internal Double CosPhiSetpointL2;
|
[HoldingRegister<Int16>(4220, writable: true)] internal Double SinPhiSetpointL2;
|
||||||
[HoldingRegister<Int16>(4208)] internal Double CosPhiSetpointL3;
|
[HoldingRegister<Int16>(4221, writable: true)] internal Double SinPhiSetpointL3;
|
||||||
|
[HoldingRegister(4213, writable: true)] internal ReactivePowerKind ReactivePowerKindL1;
|
||||||
[HoldingRegister<Int16>(4219)] internal Double SinPhiSetpointL1;
|
[HoldingRegister(4214, writable: true)] internal ReactivePowerKind ReactivePowerKindL2;
|
||||||
[HoldingRegister<Int16>(4220)] internal Double SinPhiSetpointL2;
|
[HoldingRegister(4215, writable: true)] internal ReactivePowerKind ReactivePowerKindL3;
|
||||||
[HoldingRegister<Int16>(4221)] internal Double SinPhiSetpointL3;
|
[HoldingRegister(4222, writable: true, Scale = .01)] internal Double IslandModeFrequencyOffset;
|
||||||
|
[HoldingRegister(4223, writable: true)] internal Double IslandModeVoltageAdjustmentFactor;
|
||||||
[HoldingRegister(4213)] internal ReactivePowerKind ReactivePowerKindL1;
|
[HoldingRegister(4229, writable: true)] internal GridMode GridMode;
|
||||||
[HoldingRegister(4214)] internal ReactivePowerKind ReactivePowerKindL2;
|
[HoldingRegister(4230, writable: true)] internal Double DcLinkReferenceVoltage380400VGrid;
|
||||||
[HoldingRegister(4215)] internal ReactivePowerKind ReactivePowerKindL3;
|
[HoldingRegister(4231, writable: true)] internal Double DcLinkMinVoltage380400VGrid;
|
||||||
|
[HoldingRegister(4232, writable: true)] internal Double DcLinkMaxVoltage380400VGrid;
|
||||||
[HoldingRegister(4222, Scale = .01)] internal Double IslandModeFrequencyOffset;
|
[HoldingRegister(4233, writable: true)] internal Double DcLinkReferenceVoltage480VGrid;
|
||||||
[HoldingRegister(4223)] internal Double IslandModeVoltageAdjustmentFactor;
|
[HoldingRegister(4234, writable: true)] internal Double DcLinkMinVoltage480VGrid;
|
||||||
|
[HoldingRegister(4235, writable: true)] internal Double DcLinkMaxVoltage480VGrid;
|
||||||
[HoldingRegister(4229)] internal GridMode GridMode;
|
|
||||||
|
|
||||||
[HoldingRegister(4230)] internal Double DcLinkReferenceVoltage380400VGrid;
|
|
||||||
[HoldingRegister(4231)] internal Double DcLinkMinVoltage380400VGrid;
|
|
||||||
[HoldingRegister(4232)] internal Double DcLinkMaxVoltage380400VGrid;
|
|
||||||
|
|
||||||
[HoldingRegister(4233)] internal Double DcLinkReferenceVoltage480VGrid;
|
|
||||||
[HoldingRegister(4234)] internal Double DcLinkMinVoltage480VGrid;
|
|
||||||
[HoldingRegister(4235)] internal Double DcLinkMaxVoltage480VGrid;
|
|
||||||
|
|
||||||
|
|
||||||
[InputRegister(5023)] internal readonly GridType ActiveGridType;
|
[InputRegister(5023)] internal readonly GridType ActiveGridType;
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -13,34 +13,25 @@ public partial class DcDcRecord
|
||||||
{
|
{
|
||||||
//[Coil(4000)]
|
//[Coil(4000)]
|
||||||
[HoldingRegister(4000)] internal Boolean PowerStageEnable ;
|
[HoldingRegister(4000)] internal Boolean PowerStageEnable ;
|
||||||
|
|
||||||
//[Coil(4002)]
|
//[Coil(4002)]
|
||||||
[HoldingRegister(4002)] internal Boolean ResetAlarmsAndWarnings ;
|
[HoldingRegister(4002, writable: true)] internal Boolean ResetAlarmsAndWarnings ;
|
||||||
|
[HoldingRegister(4100, writable: true, Scale = .01)] internal Double MaxBatteryVoltage ;
|
||||||
[HoldingRegister(4100, Scale = .01)] internal Double MaxBatteryVoltage ;
|
[HoldingRegister(4101, writable: true, Scale = .01)] internal Double MinBatteryVoltage ;
|
||||||
[HoldingRegister(4101, Scale = .01)] internal Double MinBatteryVoltage ;
|
[HoldingRegister(4106, writable: true, Scale = .1)] internal Double MaxBatteryChargingCurrent ;
|
||||||
|
[HoldingRegister(4109, writable: true, Scale = .1)] internal Double MaxBatteryDischargingCurrent ;
|
||||||
[HoldingRegister(4106, Scale = .1)] internal Double MaxBatteryChargingCurrent ;
|
[HoldingRegister(4112, writable: true, Scale = .1)] internal Double VccEndPointVoltage ;
|
||||||
[HoldingRegister(4109, Scale = .1)] internal Double MaxBatteryDischargingCurrent ;
|
[HoldingRegister(4115, writable: true)] internal Double VccEndPointCurrent ;
|
||||||
|
[HoldingRegister(4118, writable: true)] internal Double VccStartPointCurrent ;
|
||||||
[HoldingRegister(4112, Scale = .1)] internal Double VccEndPointVoltage ;
|
[HoldingRegister(4121, writable: true)] internal Double MaxDcPower ;
|
||||||
[HoldingRegister(4115)] internal Double VccEndPointCurrent ;
|
[HoldingRegister(4124, writable: true, Scale = .1)] internal Double MaxVoltageAlarm ;
|
||||||
[HoldingRegister(4118)] internal Double VccStartPointCurrent ;
|
[HoldingRegister(4127, writable: true, Scale = .1)] internal Double MinVoltageAlarm ;
|
||||||
|
[HoldingRegister<Int16>(4500, writable: true)] internal Double DcDcCurrentSetpoint ;
|
||||||
[HoldingRegister(4121)] internal Double MaxDcPower ;
|
[HoldingRegister(4501, writable: true, Scale = .01)] internal Double MaxCurrentChangePerMs ;
|
||||||
|
[HoldingRegister(4504, writable: true)] internal DcControlMode DcControlMode ;
|
||||||
[HoldingRegister(4124, Scale = .1)] internal Double MaxVoltageAlarm ;
|
[HoldingRegister(4505, writable: true, Scale = .1)] internal Double DroopControlReferenceVoltage ;
|
||||||
[HoldingRegister(4127, Scale = .1)] internal Double MinVoltageAlarm ;
|
[HoldingRegister(4506, writable: true, Scale = .1)] internal Double DroopControlUpperVoltage ;
|
||||||
|
[HoldingRegister(4507, writable: true, Scale = .1)] internal Double DroopControlLowerVoltage ;
|
||||||
[HoldingRegister<Int16>(4500)] internal Double DcDcCurrentSetpoint ;
|
[HoldingRegister(4508, writable: true, Scale = .1)] internal Double DroopControlVoltageDeadband ;
|
||||||
[HoldingRegister(4501, Scale = .01)] internal Double MaxCurrentChangePerMs ;
|
|
||||||
|
|
||||||
[HoldingRegister(4504)] internal DcControlMode DcControlMode ;
|
|
||||||
|
|
||||||
[HoldingRegister(4505, Scale = .1)] internal Double DroopControlReferenceVoltage ;
|
|
||||||
[HoldingRegister(4506, Scale = .1)] internal Double DroopControlUpperVoltage ;
|
|
||||||
[HoldingRegister(4507, Scale = .1)] internal Double DroopControlLowerVoltage ;
|
|
||||||
[HoldingRegister(4508, Scale = .1)] internal Double DroopControlVoltageDeadband ;
|
|
||||||
|
|
||||||
[InputRegister(5100, Scale = .1)] internal Double BatteryVoltage ;
|
[InputRegister(5100, Scale = .1)] internal Double BatteryVoltage ;
|
||||||
[InputRegister<Int16>(5110)] internal Double BatteryCurrent ;
|
[InputRegister<Int16>(5110)] internal Double BatteryCurrent ;
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ public partial class WITGrowatRecord
|
||||||
public DcPower Pv1InpuPower => _Pv1InpuPower;
|
public DcPower Pv1InpuPower => _Pv1InpuPower;
|
||||||
|
|
||||||
// ********************************** Holding Registers (Control) *************************************************************
|
// ********************************** Holding Registers (Control) *************************************************************
|
||||||
|
/*
|
||||||
// public UInt16 DeviceModel => _DeviceModel;
|
// public UInt16 DeviceModel => _DeviceModel;
|
||||||
public UInt32 RatedPower
|
public UInt32 RatedPower
|
||||||
{
|
{
|
||||||
|
|
@ -103,14 +103,13 @@ public partial class WITGrowatRecord
|
||||||
return new DateTime(systemTime1, _SystemTime2, _SystemTime3, _SystemTime4, _SystemTime5,
|
return new DateTime(systemTime1, _SystemTime2, _SystemTime3, _SystemTime4, _SystemTime5,
|
||||||
_SystemTime6);
|
_SystemTime6);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
/*
|
/* public Boolean EnableSyn
|
||||||
public Boolean EnableSyn
|
|
||||||
{
|
{
|
||||||
get => _EnableSyn ;
|
get => _EnableSyn ;
|
||||||
set => _EnableSyn = value;
|
set => _EnableSyn = value;
|
||||||
}*/
|
}*/
|
||||||
|
/*
|
||||||
public Percent ActivePowerPercentDerating
|
public Percent ActivePowerPercentDerating
|
||||||
{
|
{
|
||||||
get => _ActivePowerPercentDerating;
|
get => _ActivePowerPercentDerating;
|
||||||
|
|
@ -223,19 +222,19 @@ public partial class WITGrowatRecord
|
||||||
set => _BatteryDischargeCutoffVoltage = value;
|
set => _BatteryDischargeCutoffVoltage = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UInt16 BatteryMaxChargeCurrent
|
public Double BatteryMaxChargeCurrent
|
||||||
{
|
{
|
||||||
get => _BatteryMaxChargeCurrent;
|
get => _BatteryMaxChargeCurrent;
|
||||||
set => _BatteryMaxChargeCurrent = value;
|
set => _BatteryMaxChargeCurrent = (UInt16)value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UInt16 BatteryMaxdischargeCurrent
|
public Double BatteryMaxdischargeCurrent
|
||||||
{
|
{
|
||||||
get => _BatteryMaxdischargeCurrent;
|
get => _BatteryMaxdischargeCurrent;
|
||||||
set => _BatteryMaxdischargeCurrent = value;
|
set => _BatteryMaxdischargeCurrent = (UInt16) value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
public IReadOnlyList<BatteryRecord> Batteries => new List<BatteryRecord>
|
public IReadOnlyList<BatteryRecord> Batteries => new List<BatteryRecord>
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,7 @@ public partial class WITGrowatRecord
|
||||||
/****************************** Holding registers ****************************/
|
/****************************** Holding registers ****************************/
|
||||||
|
|
||||||
// [HoldingRegister(30000)] private UInt16 _DeviceModel;
|
// [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>(30018, Scale = 0.1)] private UInt32 _MaxActivePower;
|
||||||
[HoldingRegister<UInt32>(30028, Scale = 0.1)] private UInt32 _PvInputMaxPower;
|
[HoldingRegister<UInt32>(30028, Scale = 0.1)] private UInt32 _PvInputMaxPower;
|
||||||
[HoldingRegister(30030)] private UInt16 _BatteryType;
|
[HoldingRegister(30030)] private UInt16 _BatteryType;
|
||||||
|
|
@ -176,5 +176,5 @@ public partial class WITGrowatRecord
|
||||||
[HoldingRegister(30496, writable: true, Scale = 0.1)] private UInt16 _BatteryChargeCutoffVoltage; //
|
[HoldingRegister(30496, writable: true, Scale = 0.1)] private UInt16 _BatteryChargeCutoffVoltage; //
|
||||||
[HoldingRegister(30497, writable: true, Scale = 0.1)] private UInt16 _BatteryDischargeCutoffVoltage; //
|
[HoldingRegister(30497, writable: true, Scale = 0.1)] private UInt16 _BatteryDischargeCutoffVoltage; //
|
||||||
[HoldingRegister(30498, writable: true, Scale = 0.1)] private UInt16 _BatteryMaxChargeCurrent; //
|
[HoldingRegister(30498, writable: true, Scale = 0.1)] private UInt16 _BatteryMaxChargeCurrent; //
|
||||||
[HoldingRegister(30499, writable: true, Scale = 0.1)] private UInt16 _BatteryMaxdischargeCurrent; //
|
[HoldingRegister(30499, writable: true, Scale = 0.1)] private UInt16 _BatteryMaxdischargeCurrent; //*/
|
||||||
}
|
}
|
||||||
|
|
@ -37,11 +37,11 @@ public class ModbusDevice<[DynamicallyAccessedMembers(All)] R> where R : notnull
|
||||||
|
|
||||||
public R Read(R record)
|
public R Read(R record)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"Reading { _Batches.Count } Modbus batches.");
|
// Console.WriteLine($"Reading { _Batches.Count } Modbus batches.");
|
||||||
foreach (var batch in _Batches)
|
foreach (var batch in _Batches)
|
||||||
{
|
{
|
||||||
batch.Read(record);
|
batch.Read(record);
|
||||||
Thread.Sleep(50); // this added mainly for Growatt reading
|
//Thread.Sleep(50); // this added mainly for Growatt reading
|
||||||
}
|
}
|
||||||
return record;
|
return record;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"sdk": {
|
"sdk": {
|
||||||
"version": "7.0.0",
|
"version": "6.0.0",
|
||||||
"rollForward": "latestMajor",
|
"rollForward": "latestMajor",
|
||||||
"allowPrerelease": true
|
"allowPrerelease": true
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue