using System.Diagnostics.CodeAnalysis; using InnovEnergy.Lib.Protocols.Modbus.Reflection.Attributes; using InnovEnergy.Lib.Units; using InnovEnergy.Lib.Units.Power; // ReSharper disable InconsistentNaming #pragma warning disable CS0169 // Field is never used #pragma warning disable CS0649 // Field is never assigned to, and will always have its default value namespace InnovEnergy.Lib.Devices.Sinexcel_12K_TL; [BigEndian] public partial class SinexcelRecord { /****************************** Input registers ****************************/ // Voltages [HoldingRegister(4096)] public UInt32 _gridAPhaseVoltage; // 0x1000 [HoldingRegister(4098)] private UInt32 _grid_B_Phase_Voltage; // 0x1002 [HoldingRegister(4100)] private UInt32 _grid_C_Phase_Voltage; // 0x1004 // Line-to-line Voltages (V) [HoldingRegister(4102)] private UInt32 _grid_AB_Wire_Voltage; // 0x1006 [HoldingRegister(4104)] private UInt32 _grid_BC_Wire_Voltage; // 0x1008 [HoldingRegister(4106)] private UInt32 _grid_CA_Wire_Voltage; // 0x100A // Frequency (Hz) [HoldingRegister(4114)] private UInt32 _grid_Voltage_Frequency; // 0x1012 // Currents (A) [HoldingRegister(4116)] private UInt32 _grid_A_Phase_Current; // 0x1014 [HoldingRegister(4118)] private UInt32 _grid_B_Phase_Current; // 0x1016 [HoldingRegister(4120)] private UInt32 _grid_C_Phase_Current; // 0x1018 [HoldingRegister(4122)] private UInt32 _grid_N_Wire_Current; // 0x101A*/ // ─────────────────────────────────────────────── // Power Measurements // ─────────────────────────────────────────────── // Apparent Power (kVA) [HoldingRegister(4136)] private UInt32 _gridAPhaseApparentPower; // 0x1028 [HoldingRegister(4138)] private UInt32 _gridBPhaseApparentPower; // 0x102A [HoldingRegister(4140)] private UInt32 _gridCPhaseApparentPower; // 0x102C // Active Power (kW) [HoldingRegister(4142)] private UInt32 _gridAPhaseActivePower; // 0x102E [HoldingRegister(4144)] private UInt32 _gridBPhaseActivePower; // 0x1030 [HoldingRegister(4146)] private UInt32 _gridCPhaseActivePower; // 0x1032 // Reactive Power (kVar) [HoldingRegister(4148)] private UInt32 _gridAPhaseReactivePower; // 0x1034 [HoldingRegister(4150)] private UInt32 _gridBPhaseReactivePower; // 0x1036 [HoldingRegister(4152)] private UInt32 _gridCPhaseReactivePower; // 0x1038 // ─────────────────────────────────────────────── // Load Voltages (V) // ─────────────────────────────────────────────── [HoldingRegister(4166)] private UInt32 _loadAPhaseVoltage; // 0x1046 [HoldingRegister(4168)] private UInt32 _loadBPhaseVoltage; // 0x1048 [HoldingRegister(4170)] private UInt32 _loadCPhaseVoltage; // 0x104A [HoldingRegister(4172)] private UInt32 _loadABWireVoltage; // 0x104C [HoldingRegister(4174)] private UInt32 _loadBCWireVoltage; // 0x104E [HoldingRegister(4176)] private UInt32 _loadCAWireVoltage; // 0x1050 [HoldingRegister(4184)] private UInt32 _loadVoltageFrequency; // 0x1058 // ─────────────────────────────────────────────── // Load Currents (A) // ─────────────────────────────────────────────── [HoldingRegister(4186)] private UInt32 _loadAPhaseCurrent; // 0x105A [HoldingRegister(4188)] private UInt32 _loadBPhaseCurrent; // 0x105C [HoldingRegister(4190)] private UInt32 _loadCPhaseCurrent; // 0x105E [HoldingRegister(4192)] private UInt32 _loadNWireCurrent; // 0x1060 // ─────────────────────────────────────────────── // Load Apparent Power (kVA) // ─────────────────────────────────────────────── [HoldingRegister(4206)] private UInt32 _loadAPhaseApparentPower; // 0x106E [HoldingRegister(4208)] private UInt32 _loadBPhaseApparentPower; // 0x1070 [HoldingRegister(4210)] private UInt32 _loadCPhaseApparentPower; // 0x1072 // ─────────────────────────────────────────────── // Load Active Power (kW) // ─────────────────────────────────────────────── [HoldingRegister(4212)] private UInt32 _loadAPhaseActivePower; // 0x1074 [HoldingRegister(4214)] private UInt32 _loadBPhaseActivePower; // 0x1076 [HoldingRegister(4216)] private UInt32 _loadCPhaseActivePower; // 0x1078 // ─────────────────────────────────────────────── // Load Reactive Power (kVar) // ─────────────────────────────────────────────── [HoldingRegister(4218)] private UInt32 _loadAPhaseReactivePower; // 0x107A [HoldingRegister(4220)] private UInt32 _loadBPhaseReactivePower; // 0x107C [HoldingRegister(4222)] private UInt32 _loadCPhaseReactivePower; // 0x107E // ─────────────────────────────────────────────── // Inverter Voltages (V) // ─────────────────────────────────────────────── [HoldingRegister(4242)] private UInt32 _inverterAPhaseVoltage; // 0x1092 [HoldingRegister(4244)] private UInt32 _inverterBPhaseVoltage; // 0x1094 [HoldingRegister(4246)] private UInt32 _inverterCPhaseVoltage; // 0x1096 [HoldingRegister(4248)] private UInt32 _inverterABWireVoltage; // 0x1098 [HoldingRegister(4250)] private UInt32 _inverterBCWireVoltage; // 0x109A [HoldingRegister(4252)] private UInt32 _inverterCAWireVoltage; // 0x109C // ─────────────────────────────────────────────── // Inverter Active Power (kW) // ─────────────────────────────────────────────── [HoldingRegister(4288)] private UInt32 _inverterAPhaseActivePower; // 0x10C0 [HoldingRegister(4290)] private UInt32 _inverterBPhaseActivePower; // 0x10C2 [HoldingRegister(4292)] private UInt32 _inverterCPhaseActivePower; // 0x10C4 // ─────────────────────────────────────────────── // DC/AC Temperatures (°C) // ─────────────────────────────────────────────── [HoldingRegister(4318)] private UInt32 _dcacTemperature1; // 0x10DE [HoldingRegister(4320)] private UInt32 _dcacTemperature2; // 0x10E0 [HoldingRegister(4322)] private UInt32 _dcacTemperature3; // 0x10E2 [HoldingRegister(4324)] private UInt32 _dcacTemperature4; // 0x10E4 [HoldingRegister(4326)] private UInt32 _dcacTemperature5; // 0x10E6 // ─────────────────────────────────────────────── // Date / Time Information // ─────────────────────────────────────────────── [HoldingRegister(4338)] private UInt32 _year; // 0x10F2 [HoldingRegister(4340)] private UInt32 _month; // 0x10F4 [HoldingRegister(4342)] private UInt32 _day; // 0x10F6 [HoldingRegister(4344)] private UInt32 _hour; // 0x10F8 [HoldingRegister(4346)] private UInt32 _minute; // 0x10FA [HoldingRegister(4348)] private UInt32 _second; // 0x10FC // ─────────────────────────────────────────────── // Diesel Generator Measurements // ─────────────────────────────────────────────── [HoldingRegister(4362)] private UInt32 _dieselGenAPhaseVoltage; // 0x110A [HoldingRegister(4364)] private UInt32 _dieselGenBPhaseVoltage; // 0x110C [HoldingRegister(4366)] private UInt32 _dieselGenCPhaseVoltage; // 0x110E [HoldingRegister(4368)] private UInt32 _dieselGenABWireVoltage; // 0x1110 [HoldingRegister(4370)] private UInt32 _dieselGenBCWireVoltage; // 0x1112 [HoldingRegister(4372)] private UInt32 _dieselGenCAWireVoltage; // 0x1114 [HoldingRegister(4380)] private UInt32 _dieselGenVoltageFrequency; // 0x111C [HoldingRegister(4382)] private UInt32 _dieselGenAPhaseCurrent; // 0x111E [HoldingRegister(4384)] private UInt32 _dieselGenBPhaseCurrent; // 0x1120 [HoldingRegister(4386)] private UInt32 _dieselGenCPhaseCurrent; // 0x1122 [HoldingRegister(4388)] private UInt32 _dieselGenNWireCurrent; // 0x1124 [HoldingRegister(4402)] private UInt32 _dieselGenAPhaseApparentPower; // 0x1132 [HoldingRegister(4404)] private UInt32 _dieselGenBPhaseApparentPower; // 0x1134 [HoldingRegister(4406)] private UInt32 _dieselGenCPhaseApparentPower; // 0x1136 [HoldingRegister(4408)] private UInt32 _dieselGenAPhaseActivePower; // 0x1138 [HoldingRegister(4410)] private UInt32 _dieselGenBPhaseActivePower; // 0x113A [HoldingRegister(4412)] private UInt32 _dieselGenCPhaseActivePower; // 0x113C [HoldingRegister(4414)] private UInt32 _dieselGenAPhaseReactivePower; // 0x113E [HoldingRegister(4416)] private UInt32 _dieselGenBPhaseReactivePower; // 0x1140 [HoldingRegister(4418)] private UInt32 _dieselGenCPhaseReactivePower; // 0x1142 // ─────────────────────────────────────────────── // Photovoltaic and Battery Measurements // ─────────────────────────────────────────────── [HoldingRegister(4608)] private UInt32 _pvVoltage1; // 0x1200 [HoldingRegister(4610)] private UInt32 _pvCurrent1; // 0x1202 [HoldingRegister(4612)] private UInt32 _pvPower1; // 0x1204 [HoldingRegister(4614)] private UInt32 _pvVoltage2; // 0x1206 [HoldingRegister(4616)] private UInt32 _pvCurrent2; // 0x1208 [HoldingRegister(4618)] private UInt32 _pvPower2; // 0x120A [HoldingRegister(4620)] private UInt32 _batteryVoltage1; // 0x120C [HoldingRegister(4622)] private UInt32 _batteryCurrent1; // 0x120E [HoldingRegister(4624)] private UInt32 _batteryPower1; // 0x1210 [HoldingRegister(4626)] private UInt32 _batterySoc1; // 0x1212 [HoldingRegister(4628)] private UInt32 _batteryFullLoadDuration1; // 0x1214 [HoldingRegister(4630)] private UInt32 _batteryVoltage2; // 0x1216 [HoldingRegister(4632)] private UInt32 _batteryCurrent2; // 0x1218 [HoldingRegister(4634)] private UInt32 _batteryPower2; // 0x121A [HoldingRegister(4636)] private UInt32 _batterySoc2; // 0x121C [HoldingRegister(4638)] private UInt32 _batteryFullLoadDuration2; // 0x121E [HoldingRegister(4640)] private UInt32 _dcdcTemperature1; // 0x1220 [HoldingRegister(4642)] private UInt32 _dcdcTemperature2; // 0x1222 [HoldingRegister(4644)] private UInt32 _dcdcTemperature3; // 0x1224 [HoldingRegister(4646)] private UInt32 _dcdcTemperature4; // 0x1226 [HoldingRegister(4648)] private UInt32 _dcdcTemperature5; // 0x1228 // ─────────────────────────────────────────────── // Energy and Power Summary // ─────────────────────────────────────────────── [HoldingRegister(4672)] private UInt32 _electricityPurchased; // 0x1240 [HoldingRegister(4674)] private UInt32 _electricityFed; // 0x1242 [HoldingRegister(4700)] private UInt32 _selfGeneratedElectricity; // 0x125C [HoldingRegister(4702)] private UInt32 _batteryCharge; // 0x125E [HoldingRegister(4704)] private UInt32 _batteryDischarge; // 0x1260 [HoldingRegister(4706)] private UInt32 _loadPowerConsumption; // 0x1262 [HoldingRegister(4708)] private UInt32 _dailySelfGeneratedElectricity; // 0x1264 [HoldingRegister(4710)] private UInt32 _dailyElectricityPurchased; // 0x1266 [HoldingRegister(4712)] private UInt32 _dailyElectricityFed; // 0x1268 [HoldingRegister(4714)] private UInt32 _dailyBatteryCharge; // 0x126A [HoldingRegister(4716)] private UInt32 _dailyBatteryDischarge; // 0x126C [HoldingRegister(4718)] private UInt32 _dailyLoadPowerConsumption; // 0x126E [HoldingRegister(4720)] private UInt32 _totalPhotovoltaicPower; // 0x1270 [HoldingRegister(4722)] private UInt32 _totalBatteryPower; // 0x1272 [HoldingRegister(4724)] private UInt32 _totalLoadPower; // 0x1274 [HoldingRegister(4726)] private UInt32 _totalGridPower; // 0x1276 [HoldingRegister(4728)] private UInt32 _importantLoadTotalPower; // 0x1278 [HoldingRegister(4730)] private UInt32 _generalLoadTotalPower; // 0x127A [HoldingRegister(4732)] private UInt32 _pv3Voltage; // 0x127C [HoldingRegister(4734)] private UInt32 _pv3Current; // 0x127E [HoldingRegister(4736)] private UInt32 _pv3Power; // 0x1280 [HoldingRegister(4738)] private UInt32 _pv4Voltage; // 0x1282 [HoldingRegister(4740)] private UInt32 _pv4Current; // 0x1284 [HoldingRegister(4742)] private UInt32 _pv4Power; // 0x1286 [HoldingRegister(4744)] private UInt32 _generatorTotalPower; // 0x128C // ─────────────────────────────────────────────── // Manufacturer Information & Software Versions // ─────────────────────────────────────────────── [HoldingRegister(8192)] private UInt16 _protocolVersionNo; // 0x2000 [HoldingRegister(8193)] private UInt16 _dcacSoftwareVersionNo; // 0x2001 [HoldingRegister(8194)] private UInt16 _dcdcSoftwareVersionNo; // 0x2002 [HoldingRegister(8195)] private UInt16 _armSoftwareVersionNo; // 0x2003 [HoldingRegister(8196)] private UInt16 _cpldVersion; // 0x2004 [HoldingRegister(8197)] private UInt16 _afciSoftwareVersionNo; // 0x2005 [HoldingRegister(8198)] private UInt16 _machineType; // 0x2006 // ─────────────────────────────────────────────── // Device Info & Model // ─────────────────────────────────────────────── [HoldingRegister(8199)] private UInt16 _remain; // 0x2007 [HoldingRegister(8200)] private UInt16 _ratedPower; // 0x2008 (value / 100 = kVA) [HoldingRegister(8205)] private UInt16 _model; // 0x200D // ─────────────────────────────────────────────── // System configuration / operation registers // ─────────────────────────────────────────────── [HoldingRegister(12294, writable: true)] private UInt32 _threePhaseWireSystem; // 0x3006 [HoldingRegister(12296, writable: true)] private UInt32 _remainnotused; // 0x3008 [HoldingRegister(12298, writable: true)] private UInt32 _inputFrequencyClass; // 0x300A [HoldingRegister(12300, writable: true)] private UInt32 _workingMode; // 0x300C [HoldingRegister(12302, writable: true)] private UInt32 _methodSwitchMode; // 0x300E // ─────────────────────────────────────────────── // Inverter Control and Protection Configuration // ─────────────────────────────────────────────── [HoldingRegister(12304, writable: true)] private UInt32 _enableOnGridUnbalanceCompensation; // 0x3010 [HoldingRegister(12306, writable: true)] private UInt32 _temperatureDrop; // 0x3012 [HoldingRegister(12308, writable: true)] private UInt32 _hvrt; // 0x3014 [HoldingRegister(12310, writable: true)] private UInt32 _lvrt; // 0x3016 [HoldingRegister(12312, writable: true)] private UInt32 _fanGear; // 0x3018 // ─────────────────────────────────────────────── // Battery & PV Configuration // ─────────────────────────────────────────────── [HoldingRegister(12336, writable: true)] private UInt32 _batteryAccessMethod; // 0x3030 [HoldingRegister(12338, writable: true)] private UInt32 _meterAccessEnable; // 0x3032 [HoldingRegister(12340, writable: true)] private UInt32 _enableBattery1; // 0x3034 [HoldingRegister(12342, writable: true)] private UInt32 _enableBattery2; // 0x3036 [HoldingRegister(12344, writable: true)] private UInt32 _enablePv1; // 0x3038 [HoldingRegister(12346, writable: true)] private UInt32 _enablePv2; // 0x303A [HoldingRegister(12348, writable: true)] private UInt32 _batteryType; // 0x303C [HoldingRegister(12350, writable: true)] private UInt32 _batteryCapacity1; // 0x303E [HoldingRegister(12352, writable: true)] private UInt32 _maxChargingCurrentBattery1; // 0x3040 [HoldingRegister(12354, writable: true)] private UInt32 _maxDischargingCurrentBattery1; // 0x3042 [HoldingRegister(12362, writable: true)] private UInt32 _ratedBatteryVoltage1; // 0x304A [HoldingRegister(12358, writable: true)] private UInt32 _minSocBattery1; // 0x3046 [HoldingRegister(12360, writable: true)] private UInt32 _setValueBattery1; // 0x3048 [HoldingRegister(12364, writable: true)] private UInt32 _activeChargeDischarge; // 0x304A [HoldingRegister(12366, writable: true)] private UInt32 _activeChargeDischargePower; // 0x304C [HoldingRegister(12380, writable: true)] private UInt32 _enableIslandProtection; // 0x305C [HoldingRegister(12382, writable: true)] private UInt32 _pvAccessMode; // 0x305E // ─────────────────────────────────────────────── // System & Battery-2 Configuration // ─────────────────────────────────────────────── [HoldingRegister(12384, writable: true)] private UInt32 _outputVoltageAdjustmentFactor; // 0x3060 [HoldingRegister(12386, writable: true)] private UInt32 _setValueBatteryUndervoltage1; // 0x3062 [HoldingRegister(12388, writable: true)] private UInt32 _inverterPowerLimit; // 0x3064 [HoldingRegister(12400, writable: true)] private UInt32 _battery2Capacity; // 0x30B0 [HoldingRegister(12402, writable: true)] private UInt32 _maxChargingCurrentBattery2; // 0x30B2 [HoldingRegister(12404, writable: true)] private UInt32 _maxDischargingCurrentBattery2; // 0x30B4 [HoldingRegister(12406, writable: true)] private UInt32 _battery2RatedVoltage; // 0x30B6 [HoldingRegister(12408, writable: true)] private UInt32 _battery2MinSoc; // 0x30B8 [HoldingRegister(12410, writable: true)] private UInt32 _battery2OverVoltageSetting; // 0x30BA [HoldingRegister(12412, writable: true)] private UInt32 _battery2UnderVoltageSetpoint; // 0x30BC [HoldingRegister(12414, writable: true)] private UInt32 _singleOrParallelMachine; // 0x30BE [HoldingRegister(12416, writable: true)] private UInt32 _numberOfSystemModules; // 0x30C0 [HoldingRegister(12418, writable: true)] private UInt32 _parallelModuleMachineNumber; // 0x30C2 [HoldingRegister(12420, writable: true)] private UInt32 _accreditedCountries; // 0x30C4 // ─────────────────────────────────────────────── // System Control & Diagnostic Registers // ─────────────────────────────────────────────── [HoldingRegister(15426, writable: true)] private UInt32 _powerOn; // 0x3C42 [HoldingRegister(15428, writable: true)] private UInt32 _powerOff; // 0x3C44 [HoldingRegister(15430, writable: true)] private UInt32 _faultClearing; // 0x3C46 [HoldingRegister(15518, writable: true)] private UInt32 _meterReverseManualDetection; // 0x3C9E [HoldingRegister(15520, writable: true)] private UInt32 _batteryVoltage; // 0x3CA0 [HoldingRegister(15522, writable: true)] private UInt32 _batteryRating; // 0x3CA2 [HoldingRegister(15524, writable: true)] private UInt32 _battery1Activation; // 0x3CA4 [HoldingRegister(15526, writable: true)] private UInt32 _battery2Activation; // 0x3CA6 // ─────────────────────────────────────────────── // Electric Meter Measurements (Read-Only) // ─────────────────────────────────────────────── [HoldingRegister(40960)] private UInt32 _electricMeterOperatingState; // 0xA000 [HoldingRegister(41216)] private UInt32 _electricMeterAPhaseVoltage; // 0xA100 [HoldingRegister(41218)] private UInt32 _electricMeterBPhaseVoltage; // 0xA102 [HoldingRegister(41220)] private UInt32 _electricMeterCPhaseVoltage; // 0xA104 [HoldingRegister(41222)] private UInt32 _electricMeterAPhaseCurrent; // 0xA106 [HoldingRegister(41224)] private UInt32 _electricMeterBPhaseCurrent; // 0xA108 [HoldingRegister(41226)] private UInt32 _electricMeterCPhaseCurrent; // 0xA10A [HoldingRegister(41234)] private UInt32 _electricMeterAPhaseActivePower; // 0xA112 [HoldingRegister(41236)] private UInt32 _electricMeterBPhaseActivePower; // 0xA114 [HoldingRegister(41238)] private UInt32 _electricMeterCPhaseActivePower; // 0xA116 }