180 lines
12 KiB
C#
180 lines
12 KiB
C#
using InnovEnergy.Lib.Protocols.Modbus.Reflection.Attributes;
|
||
|
||
namespace InnovEnergy.Lib.Devices.WITGrowatt4_15K;
|
||
|
||
#pragma warning disable CS0169, CS0649
|
||
[BigEndian]
|
||
|
||
// ReSharper disable once InconsistentNaming
|
||
public partial class WITGrowatRecord
|
||
{
|
||
|
||
/****************************** Input registers ****************************/
|
||
[InputRegister<Int32>(35, Scale = 0.1)] private Int32 _GridPower;
|
||
|
||
// 31000–31009 — Operating Status Info
|
||
[InputRegister(31000)] private UInt16 _SystemOperatingMode;
|
||
[InputRegister(31001)] private UInt16 _BatteryOperatingMode;
|
||
[InputRegister(31002)] private UInt16 _OperatingPriority;
|
||
[InputRegister(31003)] private UInt16 _Reserved1;
|
||
[InputRegister(31004)] private UInt16 _Reserved2;
|
||
[InputRegister(31005)] private UInt16 _FaultMainCode;// Can we change this to warning?
|
||
[InputRegister(31006)] private UInt16 _FaultSubCode; // Can we change this to warning?
|
||
[InputRegister(31007)] private UInt16 _WarningMainCode;
|
||
[InputRegister(31008)] private UInt16 _WarningSubCode;
|
||
[InputRegister(31009)] private UInt16 _Reserved3;
|
||
// 31010–31099 — PV Parameters
|
||
[InputRegister(31010)] private Int16 _Pv1Voltage;
|
||
[InputRegister(31011)] private Int16 _Pv1Current;
|
||
[InputRegister(31012)] private Int16 _Pv2Voltage;
|
||
[InputRegister(31013)] private Int16 _Pv2Current;
|
||
[InputRegister(31058)] private Int16 _Pv1InpuPower;
|
||
|
||
//— AC Side 31100 - 31199
|
||
[InputRegister<Int32>(31100, Scale = 0.1)] private Int32 _ActivePower; // Positive: feed to grid, Negative: draw from the grid
|
||
[InputRegister<Int32>(31102, Scale = 0.1)] private Int32 _ReactivePower; // Positive: capacitive, Negative: Inductive
|
||
[InputRegister(31104, Scale = 0.1)] private Int16 _Reserved4;
|
||
[InputRegister(31105, Scale = 0.01)] private UInt16 _Frequency;
|
||
|
||
[InputRegister(31106, Scale = 0.1)] private UInt16 _GridAbLineVoltage;
|
||
[InputRegister(31107, Scale = 0.1)] private UInt16 _GridBcLineVoltage;
|
||
[InputRegister(31108, Scale = 0.1)] private UInt16 _GridCaLineVoltage;
|
||
|
||
[InputRegister(31109, Scale = 0.1)] private Int16 _PhaseACurrent;
|
||
[InputRegister(31110, Scale = 0.1)] private Int16 _PhaseBCurrent;
|
||
[InputRegister(31111, Scale = 0.1)] private Int16 _PhaseCCurrent;
|
||
|
||
[InputRegister<Int32>(31112)] private Int32 _MeterPower; //Positive: draw from grid; Negative: feed to grid
|
||
[InputRegister(31114, Scale = 0.1)] private Int16 _InverterTemperature; // -400, 150
|
||
[InputRegister(31115, Scale = 0.1)] private Int16 _Reserved5;
|
||
[InputRegister(31116, Scale = 0.1)] private Int16 _Reserved6;
|
||
[InputRegister(31117, Scale = 0.1)] private Int16 _Reserved7;
|
||
[InputRegister<UInt32>(31118, Scale = 0.1)] private UInt32 _EnergyToUser; // consumption
|
||
[InputRegister<UInt32>(31120, Scale = 0.1)] private UInt32 _TotalEnergyToUser;
|
||
[InputRegister<UInt32>(31122, Scale = 0.1)] private UInt32 _EnergyToGrid; // exportation
|
||
[InputRegister<UInt32>(31124, Scale = 0.1)] private UInt32 _TotalEnergyToGrid;
|
||
|
||
// 31200–31299 — First Battery Cluster Info (incl. BDC and BMS)
|
||
[InputRegister<Int32>(31200)] private Int32 _BatteryPower1; // positive Charge, Negative Discharge
|
||
[InputRegister<UInt32>(31202)] private UInt32 _DailyChargeEnergy1; // 0.1 kw
|
||
[InputRegister<UInt32>(31204)] private UInt32 _AccumulatedChargeEnergy1; // 0.1kw
|
||
[InputRegister<UInt32>(31206)] private UInt32 _DailyDischargeEnergy1; //0.1kw
|
||
[InputRegister<UInt32>(31208)] private UInt32 _AccumulatedDishargeEnergy1; // 0.1kw
|
||
[InputRegister<UInt32>(31210)] private UInt32 _BatteryMaxAllowableChargePower1; //
|
||
[InputRegister<UInt32>(31212)] private UInt32 _BatteryMaxAllowableDischargePower1; //
|
||
[InputRegister(31214)] private Int16 _BatteryVoltage1; //
|
||
[InputRegister<Int32>(31215, Scale = 0.1)] private Int32 _BatteryCurrent1; //
|
||
[InputRegister(31217)] private UInt16 _BatterySoc1; //
|
||
[InputRegister(31218)] private UInt16 _BatterySoh1; //
|
||
[InputRegister(31219)] private UInt32 _FullyChargedCapacity; //
|
||
[InputRegister(31221)] private UInt32 _BatteryRemainingCapacity; //
|
||
[InputRegister(31223)] private Int16 _BatteryAmbientTemperature1; //
|
||
[InputRegister(31224)] private UInt16 _BatteryHighestTemperature; //
|
||
[InputRegister(31225)] private UInt16 _ClusterTotalNumber1; //
|
||
[InputRegister(31226)] private UInt16 _ModulesPerCluster; //
|
||
[InputRegister(31227)] private UInt16 _ModuleRatedVoltage; //
|
||
[InputRegister(31228)] private UInt16 _ModuleRatedCapacity; //
|
||
|
||
|
||
|
||
|
||
// 31300–31399 — Second Battery Cluster Info (incl. BDC and BMS)
|
||
/* [InputRegister<Int32>(31300)] private Int32 _BatteryPower2; // positive Charge, Negative Discharge
|
||
[InputRegister<UInt32>(31302)] private UInt32 _DailyChargeEnergy2;
|
||
[InputRegister<UInt32>(31304)] private UInt32 _AccumulatedChargeEnergy2;
|
||
[InputRegister<UInt32>(31206)] private UInt32 _DailyDischargeEnergy2; //0.1kw
|
||
[InputRegister<UInt32>(31308)] private UInt32 _AccumulatedDischargeEnergy2;
|
||
[InputRegister<UInt32>(31310)] private UInt32 _BatteryMaxAllowableChargePower2; //
|
||
[InputRegister<UInt32>(31312)] private UInt32 _BatteryMaxAllowableDischargePower2; //
|
||
[InputRegister(31314)] private Int16 _BatteryVoltage2; //
|
||
[InputRegister<Int32>(31315)] private Int32 _BatteryCurrent2; //
|
||
[InputRegister(31317)] private UInt16 _BatterySoc2; //
|
||
[InputRegister(31318)] private UInt16 _BatterySoh2; //
|
||
//[InputRegister(31325)] public UInt16 _ClusterTotalNumber2; //
|
||
|
||
[InputRegister(31323, Scale = 0.1)] private Int16 _BatteryAmbientTemperature2; // */
|
||
|
||
|
||
// 31400–31499 — Third Battery Cluster Info (incl. BDC and BMS)
|
||
/* [InputRegister(31400, Scale = 0.1)] private Int32 _BatteryPower3; // positive Charge, Negative Discharge
|
||
[InputRegister(31402, Scale = 0.1)] private UInt32 _DailyChargeEnergy3;
|
||
[InputRegister(31404, Scale = 0.1)] private UInt32 _DailyDischargeEnergy3;
|
||
[InputRegister(31410, Scale = 0.1)] private UInt32 _BatteryMaxAllowableChargePower3; //
|
||
[InputRegister(31412, Scale = 0.1)] private UInt32 _BatteryMaxAllowableDischargePower3; //
|
||
|
||
[InputRegister(31414, Scale = 0.1)] private Int16 _BatteryVoltage3; //
|
||
[InputRegister(31415, Scale = 0.1)] private Int32 _BatteryCurrent3; //
|
||
[InputRegister(31417)] private UInt16 _BatterySoc3; //
|
||
[InputRegister(31418)] private UInt16 _BatterySoh3; //
|
||
[InputRegister(31425)] private UInt16 _ClusterTotalNumber3; //
|
||
|
||
// [InputRegister(31423, Scale = 0.1)] public Int16 BatteryAmbientTemperature3; //
|
||
|
||
// 31400–31499 — Third Battery Cluster Info (incl. BDC and BMS)
|
||
[InputRegister(31500, Scale = 0.1)] private Int32 _BatteryPower4; // positive Charge, Negative Discharge
|
||
[InputRegister(31502, Scale = 0.1)] private UInt32 _DailyChargeEnergy4;
|
||
[InputRegister(31504, Scale = 0.1)] private UInt32 _DailyDischargeEnergy4;
|
||
[InputRegister(31510, Scale = 0.1)] private UInt32 _BatteryMaxAllowableChargePower4; //
|
||
[InputRegister(31512, Scale = 0.1)] private UInt32 _BatteryMaxAllowableDischargePower4; //
|
||
|
||
[InputRegister(31514, Scale = 0.1)] private Int16 _BatteryVoltage4; //
|
||
[InputRegister(31515, Scale = 0.1)] private Int32 _BatteryCurrent4; //
|
||
[InputRegister(31517)] private UInt16 _BatterySoc4; //
|
||
[InputRegister(31518)] private UInt16 _BatterySoh4; //
|
||
[InputRegister(31525)] private UInt16 _ClusterTotalNumber4; //
|
||
|
||
// [InputRegister(31523, Scale = 0.1)] public Int16 BatteryAmbientTemperature4; //
|
||
|
||
*/
|
||
/****************************** Holding registers ****************************/
|
||
|
||
// [HoldingRegister(30000)] private UInt16 _DeviceModel;
|
||
[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;
|
||
|
||
[HoldingRegister(30099)] private UInt16 _VppProtocolVerNumber;
|
||
[HoldingRegister(30100, writable: true)] private Boolean _ControlPermession; // 0 Disabled, 1 enabled
|
||
[HoldingRegister(30101, writable: true)] private Boolean _EnableCommand; // 0: Off, 1: On; Defaut is 1; not stored, must enable this register to control inverter
|
||
[HoldingRegister(30102)] private UInt16 _CountryRegionCode;
|
||
[HoldingRegister(30103)] private UInt16 _Reserved8;
|
||
[HoldingRegister(30104)] private UInt16 _SystemTime1;
|
||
[HoldingRegister(30105)] private UInt16 _SystemTime2;
|
||
[HoldingRegister(30106)] private UInt16 _SystemTime3;
|
||
[HoldingRegister(30107)] private UInt16 _SystemTime4;
|
||
[HoldingRegister(30108)] private UInt16 _SystemTime5;
|
||
[HoldingRegister(30109)] private UInt16 _SystemTime6;
|
||
[HoldingRegister<UInt32>(30110)] private UInt32 _Reserved9;
|
||
[HoldingRegister(30112)] private UInt16 _ComunnicationAddress;
|
||
[HoldingRegister(30113)] private UInt16 _CommunicationBaudeRate;
|
||
[HoldingRegister(30114)] private UInt16 _Reserved10;
|
||
// [HoldingRegister(30115, writable: true)] private Boolean _EnableSyn; //off grid Box : enable = 1, Disable = 0 , Default =0 This is looks like cannot be written
|
||
|
||
[HoldingRegister(30151, writable: true)] private UInt16 _ActivePowerPercentDerating; // % [0,100]
|
||
//[HoldingRegister<UInt32>(30152, writable: true)] private UInt16 _Reserved11; //
|
||
[HoldingRegister(30154, writable: true)] private UInt16 _ActivePowerPercent; // Limit percentage: [0, 100]; Default: 100; takes the smaller value of 30151 and 30154 as actual active limit; Not stored
|
||
|
||
[HoldingRegister(30162, Offset = 10000, Scale = 0.0001)] private UInt16 _PowerFactor; // [0, 2000] ∪ [18000, 20000]; Default: 20000; Actual PF = (Register Value - 10000)
|
||
[HoldingRegister(30203, writable : true)] private UInt16 _EmsCommunicationFailureTime; // [1,300] TODO to 30
|
||
[HoldingRegister(30204, writable : true)] private Boolean _EnableEmsCommunicationFailureTime; // 0: disabled, 1 = enabled we should enable this TODO
|
||
[HoldingRegister(30300)] private UInt16 _BatteryClusterIndex; // [0..3]
|
||
|
||
[HoldingRegister<UInt32>(30400 , writable: true)] private UInt32 _BatteryMaxChargePower; //
|
||
[HoldingRegister<UInt32>(30402 , writable: true)] private UInt32 _BatteryMaxDischargePower; //
|
||
[HoldingRegister(30404, writable: true)] private UInt16 _ChargeCutoffSoc; //
|
||
[HoldingRegister(30405, writable: true)] private UInt16 _DischargeCutoffSoc; //
|
||
[HoldingRegister(30406, writable: true)] private UInt16 _LoadPriorityDischargeCutoffSoc; //
|
||
[HoldingRegister(30407, writable: true)] private Boolean _RemotePowerControl; //
|
||
[HoldingRegister(30408, writable: true)] private UInt16 _RemotePowerControlChargeDuration; //
|
||
[HoldingRegister<Int16>(30409, writable: true)] private Int16 _RemoteChargDischargePower; //
|
||
[HoldingRegister(30410, writable: true)] private Boolean _AcChargeEnable; //
|
||
|
||
[HoldingRegister(30474)] private UInt16 _ActualChargeDischargePowerControlValue; //
|
||
[HoldingRegister(30475)] private UInt16 _OffGridDischargeCutoffSoc; //
|
||
|
||
[HoldingRegister(30496, writable: true, Scale = 0.1)] private UInt16 _BatteryChargeCutoffVoltage; //
|
||
[HoldingRegister(30497, writable: true, Scale = 0.1)] private UInt16 _BatteryDischargeCutoffVoltage; //
|
||
[HoldingRegister(30498, writable: true, Scale = 0.1)] private UInt16 _BatteryMaxChargeCurrent; //
|
||
[HoldingRegister(30499, writable: true, Scale = 0.1)] private UInt16 _BatteryMaxdischargeCurrent; //*/
|
||
} |