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(8081, Scale = 0.1)] private Int32 _importedPowerFromGrid; [InputRegister(8083, Scale = 0.1)] private Int32 _exportedPowerToGrid; // 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,Scale = 0.1)] private Int16 _Pv1Voltage; [InputRegister(31011,Scale = 0.1)] private Int16 _Pv1Current; [InputRegister(31012,Scale = 0.1)] private Int16 _Pv2Voltage; [InputRegister(31013,Scale = 0.1)] private Int16 _Pv2Current; [InputRegister(31014,Scale = 0.1)] private Int16 _Pv3Voltage; [InputRegister(31015,Scale = 0.1)] private Int16 _Pv3Current; [InputRegister(31016,Scale = 0.1)] private Int16 _Pv4Voltage; [InputRegister(31017,Scale = 0.1)] private Int16 _Pv4Current; [InputRegister(31018,Scale = 0.1)] private Int16 _Pv5Voltage; [InputRegister(31019,Scale = 0.1)] private Int16 _Pv5Current; [InputRegister(31020,Scale = 0.1)] private Int16 _Pv6Voltage; [InputRegister(31021,Scale = 0.1)] private Int16 _Pv6Current; [InputRegister(31058)] private Int16 _Pv1InpuPower; //— AC Side 31100 - 31199 [InputRegister(31100, Scale = 0.1)] private Int32 _ActivePower; // Positive: feed to grid, Negative: draw from the grid [InputRegister(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(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(31118, Scale = 0.1)] private UInt32 _EnergyToUser; // consumption [InputRegister(31120, Scale = 0.1)] private UInt32 _TotalEnergyToUser; [InputRegister(31122, Scale = 0.1)] private UInt32 _EnergyToGrid; // exportation [InputRegister(31124, Scale = 0.1)] private UInt32 _TotalEnergyToGrid; // 31200–31299 — First Battery Cluster Info (incl. BDC and BMS) [InputRegister(31200)] private Int32 _BatteryPower1; // positive Charge, Negative Discharge [InputRegister(31202)] private UInt32 _DailyChargeEnergy1; // 0.1 kw [InputRegister(31204)] private UInt32 _AccumulatedChargeEnergy1; // 0.1kw [InputRegister(31206)] private UInt32 _DailyDischargeEnergy1; //0.1kw [InputRegister(31208)] private UInt32 _AccumulatedDishargeEnergy1; // 0.1kw [InputRegister(31210)] private UInt32 _BatteryMaxAllowableChargePower1; // [InputRegister(31212)] private UInt32 _BatteryMaxAllowableDischargePower1; // [InputRegister(31214)] private Int16 _BatteryVoltage1; // [InputRegister(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(31300)] private Int32 _BatteryPower2; // positive Charge, Negative Discharge [InputRegister(31302)] private UInt32 _DailyChargeEnergy2; [InputRegister(31304)] private UInt32 _AccumulatedChargeEnergy2; [InputRegister(31206)] private UInt32 _DailyDischargeEnergy2; //0.1kw [InputRegister(31308)] private UInt32 _AccumulatedDischargeEnergy2; [InputRegister(31310)] private UInt32 _BatteryMaxAllowableChargePower2; // [InputRegister(31312)] private UInt32 _BatteryMaxAllowableDischargePower2; // [InputRegister(31314)] private Int16 _BatteryVoltage2; // [InputRegister(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(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; [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(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(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)] 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(30400 , writable: true)] private UInt32 _BatteryMaxChargePower; // [HoldingRegister(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(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; //*/ }