using System.Diagnostics.CodeAnalysis; using System.Globalization; using InnovEnergy.Lib.Devices.Sinexcel_12K_TL.DataType; using InnovEnergy.Lib.Units; using InnovEnergy.Lib.Units.Power; namespace InnovEnergy.Lib.Devices.Sinexcel_12K_TL; public partial class SinexcelRecord { // ─────────────────────────────────────────────── // Public API — Decoded Float Values // ─────────────────────────────────────────────── // ─────────────────────────────────────────────── // Grid Measurements // ─────────────────────────────────────────────── public Voltage GridAPhaseVoltage => ConvertBitPatternToFloat(_gridAPhaseVoltage); public Voltage GridBPhaseVoltage => UIntToFloat(_grid_B_Phase_Voltage); public Voltage GridCPhaseVoltage => UIntToFloat(_grid_C_Phase_Voltage); public Voltage GridAbWireVoltage => UIntToFloat(_grid_AB_Wire_Voltage); public Voltage GridBcWireVoltage => UIntToFloat(_grid_BC_Wire_Voltage); public Voltage GridCaWireVoltage => UIntToFloat(_grid_CA_Wire_Voltage); public Frequency GridVoltageFrequency => UIntToFloat(_grid_Voltage_Frequency); public Current GridAPhaseCurrent => UIntToFloat(_grid_A_Phase_Current); public Current GridBPhaseCurrent => UIntToFloat(_grid_B_Phase_Current); public Current GridCPhaseCurrent => UIntToFloat(_grid_C_Phase_Current); public Current GridNWireCurrent => UIntToFloat(_grid_N_Wire_Current); public ApparentPower GridAPhaseApparentPower => UIntToFloat(_gridAPhaseApparentPower); public ApparentPower GridBPhaseApparentPower => UIntToFloat(_gridBPhaseApparentPower); public ApparentPower GridCPhaseApparentPower => UIntToFloat(_gridCPhaseApparentPower); public ActivePower GridAPhaseActivePower => UIntToFloat(_gridAPhaseActivePower); public ActivePower GridBPhaseActivePower => UIntToFloat(_gridBPhaseActivePower); public ActivePower GridCPhaseActivePower => UIntToFloat(_gridCPhaseActivePower); public ReactivePower GridAPhaseReactivePower => UIntToFloat(_gridAPhaseReactivePower); public ReactivePower GridBPhaseReactivePower => UIntToFloat(_gridBPhaseReactivePower); public ReactivePower GridCPhaseReactivePower => UIntToFloat(_gridCPhaseReactivePower); // ─────────────────────────────────────────────── // Load Measurements // ─────────────────────────────────────────────── public Voltage LoadAPhaseVoltage => UIntToFloat(_loadAPhaseVoltage); public Voltage LoadBPhaseVoltage => UIntToFloat(_loadBPhaseVoltage); public Voltage LoadCPhaseVoltage => UIntToFloat(_loadCPhaseVoltage); public Voltage LoadAbWireVoltage => UIntToFloat(_loadABWireVoltage); public Voltage LoadBcWireVoltage => UIntToFloat(_loadBCWireVoltage); public Voltage LoadCaWireVoltage => UIntToFloat(_loadCAWireVoltage); public Frequency LoadVoltageFrequency => UIntToFloat(_loadVoltageFrequency); public Current LoadAPhaseCurrent => UIntToFloat(_loadAPhaseCurrent); public Current LoadBPhaseCurrent => UIntToFloat(_loadBPhaseCurrent); public Current LoadCPhaseCurrent => UIntToFloat(_loadCPhaseCurrent); public Current LoadNWireCurrent => UIntToFloat(_loadNWireCurrent); public ApparentPower LoadAPhaseApparentPower => UIntToFloat(_loadAPhaseApparentPower); public ApparentPower LoadBPhaseApparentPower => UIntToFloat(_loadBPhaseApparentPower); public ApparentPower LoadCPhaseApparentPower => UIntToFloat(_loadCPhaseApparentPower); public ActivePower LoadAPhaseActivePower => UIntToFloat(_loadAPhaseActivePower); public ActivePower LoadBPhaseActivePower => UIntToFloat(_loadBPhaseActivePower); public ActivePower LoadCPhaseActivePower => UIntToFloat(_loadCPhaseActivePower); public ReactivePower LoadAPhaseReactivePower => UIntToFloat(_loadAPhaseReactivePower); public ReactivePower LoadBPhaseReactivePower => UIntToFloat(_loadBPhaseReactivePower); public ReactivePower LoadCPhaseReactivePower => UIntToFloat(_loadCPhaseReactivePower); // ─────────────────────────────────────────────── // Inverter Measurements // ─────────────────────────────────────────────── public Voltage InverterAPhaseVoltage => UIntToFloat(_inverterAPhaseVoltage); public Voltage InverterBPhaseVoltage => UIntToFloat(_inverterBPhaseVoltage); public Voltage InverterCPhaseVoltage => UIntToFloat(_inverterCPhaseVoltage); public Voltage InverterAbWireVoltage => UIntToFloat(_inverterABWireVoltage); public Voltage InverterBcWireVoltage => UIntToFloat(_inverterBCWireVoltage); public Voltage InverterCaWireVoltage => UIntToFloat(_inverterCAWireVoltage); public ActivePower InverterAPhaseActivePower => UIntToFloat(_inverterAPhaseActivePower); public ActivePower InverterBPhaseActivePower => UIntToFloat(_inverterBPhaseActivePower); public ActivePower InverterCPhaseActivePower => UIntToFloat(_inverterCPhaseActivePower); // ─────────────────────────────────────────────── // DC/AC Temperature Sensors (°C) // ─────────────────────────────────────────────── public Temperature DcacTemperature1 => UIntToFloat(_dcacTemperature1); public Temperature DcacTemperature2 => UIntToFloat(_dcacTemperature2); public Temperature DcacTemperature3 => UIntToFloat(_dcacTemperature3); public Temperature DcacTemperature4 => UIntToFloat(_dcacTemperature4); public Temperature DcacTemperature5 => UIntToFloat(_dcacTemperature5); // ─────────────────────────────────────────────── // Date / Time Information // ─────────────────────────────────────────────── public Single Year => UIntToFloat(_year); public Single Month => UIntToFloat(_month); public Single Day => UIntToFloat(_day); public Single Hour => UIntToFloat(_hour); public Single Minute => UIntToFloat(_minute); public Single Second => UIntToFloat(_second); // ─────────────────────────────────────────────── // Diesel Generator Measurements // ─────────────────────────────────────────────── public Voltage DieselGenAPhaseVoltage => ConvertBitPatternToFloat(_dieselGenAPhaseVoltage); public Voltage DieselGenBPhaseVoltage => ConvertBitPatternToFloat(_dieselGenBPhaseVoltage); public Voltage DieselGenCPhaseVoltage => ConvertBitPatternToFloat(_dieselGenCPhaseVoltage); public Voltage DieselGenABWireVoltage => ConvertBitPatternToFloat(_dieselGenABWireVoltage); public Voltage DieselGenBCWireVoltage => ConvertBitPatternToFloat(_dieselGenBCWireVoltage); public Voltage DieselGenCAWireVoltage => ConvertBitPatternToFloat(_dieselGenCAWireVoltage); public Frequency DieselGenVoltageFrequency => ConvertBitPatternToFloat(_dieselGenVoltageFrequency); public Current DieselGenAPhaseCurrent => ConvertBitPatternToFloat(_dieselGenAPhaseCurrent); public Current DieselGenBPhaseCurrent => ConvertBitPatternToFloat(_dieselGenBPhaseCurrent); public Current DieselGenCPhaseCurrent => ConvertBitPatternToFloat(_dieselGenCPhaseCurrent); public Current DieselGenNWireCurrent => ConvertBitPatternToFloat(_dieselGenNWireCurrent); public ApparentPower DieselGenAPhaseApparentPower => ConvertBitPatternToFloat(_dieselGenAPhaseApparentPower); public ApparentPower DieselGenBPhaseApparentPower => ConvertBitPatternToFloat(_dieselGenBPhaseApparentPower); public ApparentPower DieselGenCPhaseApparentPower => ConvertBitPatternToFloat(_dieselGenCPhaseApparentPower); public ActivePower DieselGenAPhaseActivePower => ConvertBitPatternToFloat(_dieselGenAPhaseActivePower); public ActivePower DieselGenBPhaseActivePower => ConvertBitPatternToFloat(_dieselGenBPhaseActivePower); public ActivePower DieselGenCPhaseActivePower => ConvertBitPatternToFloat(_dieselGenCPhaseActivePower); public ReactivePower DieselGenAPhaseReactivePower => ConvertBitPatternToFloat(_dieselGenAPhaseReactivePower); public ReactivePower DieselGenBPhaseReactivePower => ConvertBitPatternToFloat(_dieselGenBPhaseReactivePower); public ReactivePower DieselGenCPhaseReactivePower => ConvertBitPatternToFloat(_dieselGenCPhaseReactivePower); // ─────────────────────────────────────────────── // Photovoltaic and Battery Measurements // ─────────────────────────────────────────────── public Voltage PvVoltage1 => ConvertBitPatternToFloat(_pvVoltage1); public Current PvCurrent1 => ConvertBitPatternToFloat(_pvCurrent1); public ActivePower PvPower1 => ConvertBitPatternToFloat(_pvPower1); public Voltage PvVoltage2 => ConvertBitPatternToFloat(_pvVoltage2); public Current PvCurrent2 => ConvertBitPatternToFloat(_pvCurrent2); public ActivePower PvPower2 => ConvertBitPatternToFloat(_pvPower2); public Voltage BatteryVoltage1 => ConvertBitPatternToFloat(_batteryVoltage1); public Current BatteryCurrent1 => ConvertBitPatternToFloat(_batteryCurrent1); public ActivePower BatteryPower1 => ConvertBitPatternToFloat(_batteryPower1); public Percent BatterySoc1 => ConvertBitPatternToFloat(_batterySoc1); public float BatteryFullLoadDuration1 => ConvertBitPatternToFloat(_batteryFullLoadDuration1); public Voltage BatteryVoltage2 => ConvertBitPatternToFloat(_batteryVoltage2); public Current BatteryCurrent2 => ConvertBitPatternToFloat(_batteryCurrent2); public ActivePower BatteryPower2 => ConvertBitPatternToFloat(_batteryPower2); public Percent BatterySoc2 => ConvertBitPatternToFloat(_batterySoc2); public float BatteryFullLoadDuration2 => ConvertBitPatternToFloat(_batteryFullLoadDuration2); public Temperature DcdcTemperature1 => ConvertBitPatternToFloat(_dcdcTemperature1); public Temperature DcdcTemperature2 => ConvertBitPatternToFloat(_dcdcTemperature2); public Temperature DcdcTemperature3 => ConvertBitPatternToFloat(_dcdcTemperature3); public Temperature DcdcTemperature4 => ConvertBitPatternToFloat(_dcdcTemperature4); public Temperature DcdcTemperature5 => ConvertBitPatternToFloat(_dcdcTemperature5); // ─────────────────────────────────────────────── // Energy and Power Summary // ─────────────────────────────────────────────── public Energy ElectricityPurchased => ConvertBitPatternToFloat(_electricityPurchased); public Energy ElectricityFed => ConvertBitPatternToFloat(_electricityFed); public Energy SelfGeneratedElectricity => ConvertBitPatternToFloat(_selfGeneratedElectricity); public Energy BatteryCharge => ConvertBitPatternToFloat(_batteryCharge); public Energy BatteryDischarge => ConvertBitPatternToFloat(_batteryDischarge); public Energy LoadPowerConsumption => ConvertBitPatternToFloat(_loadPowerConsumption); public Energy DailySelfGeneratedElectricity => ConvertBitPatternToFloat(_dailySelfGeneratedElectricity); public Energy DailyElectricityPurchased => ConvertBitPatternToFloat(_dailyElectricityPurchased); public Energy DailyElectricityFed => ConvertBitPatternToFloat(_dailyElectricityFed); public Energy DailyBatteryCharge => ConvertBitPatternToFloat(_dailyBatteryCharge); public Energy DailyBatteryDischarge => ConvertBitPatternToFloat(_dailyBatteryDischarge); public Energy DailyLoadPowerConsumption => ConvertBitPatternToFloat(_dailyLoadPowerConsumption); public ActivePower TotalPhotovoltaicPower => ConvertBitPatternToFloat(_totalPhotovoltaicPower); public ActivePower TotalBatteryPower => ConvertBitPatternToFloat(_totalBatteryPower); public ActivePower TotalLoadPower => ConvertBitPatternToFloat(_totalLoadPower); public ActivePower TotalGridPower => ConvertBitPatternToFloat(_totalGridPower); public ActivePower ImportantLoadTotalPower => ConvertBitPatternToFloat(_importantLoadTotalPower); public ActivePower GeneralLoadTotalPower => ConvertBitPatternToFloat(_generalLoadTotalPower); public Voltage Pv3Voltage => ConvertBitPatternToFloat(_pv3Voltage); public Current Pv3Current => ConvertBitPatternToFloat(_pv3Current); public ActivePower Pv3Power => ConvertBitPatternToFloat(_pv3Power); public Voltage Pv4Voltage => ConvertBitPatternToFloat(_pv4Voltage); public Current Pv4Current => ConvertBitPatternToFloat(_pv4Current); public ActivePower Pv4Power => ConvertBitPatternToFloat(_pv4Power); public ActivePower GeneratorTotalPower => ConvertBitPatternToFloat(_generatorTotalPower); // ─────────────────────────────────────────────── // Manufacturer Information & Software Versions // ─────────────────────────────────────────────── public UInt16 ProtocolVersionNo => _protocolVersionNo; // 0x2000 public UInt16 DcacSoftwareVersionNo => _dcacSoftwareVersionNo; // 0x2001 public UInt16 DcdcSoftwareVersionNo => _dcdcSoftwareVersionNo; // 0x2002 public UInt16 ArmSoftwareVersionNo => _armSoftwareVersionNo; // 0x2003 public UInt16 CpldVersion => _cpldVersion; // 0x2004 public UInt16 AfciSoftwareVersionNo => _afciSoftwareVersionNo; // 0x2005 public SinexcelMachineType MachineType => (SinexcelMachineType)_machineType; // 0x2006 // ─────────────────────────────────────────────── // Device Info & Model // ─────────────────────────────────────────────── public ApparentPower RatedPowerKva => _ratedPower / 100f; // 0x2008 (value / 100) public SinexcelModel Model => (SinexcelModel)_model; // 0x200D public ThreePhaseWireSystem ThreePhaseWireSystem { get => (ThreePhaseWireSystem)_threePhaseWireSystem; set => _threePhaseWireSystem = (UInt32)value; } public InputFrequency InputFrequencyClass { get => (InputFrequency)_inputFrequencyClass; set => _inputFrequencyClass = (UInt32)value; } public WorkingMode WorkingMode { get => (WorkingMode)ConvertBitPatternToFloat(_workingMode); set => _workingMode = (UInt32)value; } public GridSwitchMethod GridSwitchMethod { get => (GridSwitchMethod)_methodSwitchMode; set => _methodSwitchMode = (UInt32)value; } // ─────────────────────────────────────────────── // Inverter Control Configuration // ─────────────────────────────────────────────── public SinexcelUnbalanceCompensation EnableOnGridUnbalanceCompensation { get => (SinexcelUnbalanceCompensation)_enableOnGridUnbalanceCompensation; set => _enableOnGridUnbalanceCompensation = (UInt32)value; } public SinexcelTemperatureDrop TemperatureDrop { get => (SinexcelTemperatureDrop)ConvertBitPatternToFloat(_temperatureDrop); set => _temperatureDrop = (UInt32)value; } public SinexcelHvrt Hvrt { get => (SinexcelHvrt)_hvrt; set => _hvrt = (UInt32)value; } public SinexcelLvrt Lvrt { get => (SinexcelLvrt)_lvrt; set => _lvrt = (UInt32)value; } // Fan Gear — numeric [0.5 ~ 1.0], default 1.0 public float FanGear { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_fanGear)); set => _fanGear = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } // ─────────────────────────────────────────────── // Battery Configuration // ─────────────────────────────────────────────── public SinexcelBatteryAccessMethod BatteryAccessMethod { get => (SinexcelBatteryAccessMethod)_batteryAccessMethod; set => _batteryAccessMethod = (UInt32)value; } public SinexcelMeterAccessEnable MeterAccessEnable { get => (SinexcelMeterAccessEnable)ConvertBitPatternToFloat(_meterAccessEnable); set => _meterAccessEnable = (UInt32)value; } public SinexcelBatteryEnable EnableBattery1 { get => (SinexcelBatteryEnable)ConvertBitPatternToFloat(_enableBattery1); set => _enableBattery1 = (UInt32)value; } public SinexcelBatteryEnable EnableBattery2 { get => (SinexcelBatteryEnable)ConvertBitPatternToFloat(_enableBattery2); set => _enableBattery2 = (UInt32)value; } public SinexcelPvEnable EnablePv1 { get => (SinexcelPvEnable)ConvertBitPatternToFloat(_enablePv1); set => _enablePv1 = (UInt32)value; } public SinexcelPvEnable EnablePv2 { get => (SinexcelPvEnable)ConvertBitPatternToFloat(_enablePv2); set => _enablePv2 = (UInt32)value; } public SinexcelBatteryType BatteryType { get => (SinexcelBatteryType)_batteryType; set => _batteryType = (UInt32)value; } public float BatteryCapacity1 { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_batteryCapacity1)); set => _batteryCapacity1 = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public float MaxChargingCurrentBattery1 { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_maxChargingCurrentBattery1)); set => _maxChargingCurrentBattery1 = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public float MaxDischargingCurrentBattery1 { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_maxDischargingCurrentBattery1)); set => _maxDischargingCurrentBattery1 = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public float RatedBatteryVoltage1 { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_ratedBatteryVoltage1)); set => _ratedBatteryVoltage1 = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public float MinSocBattery1 { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_minSocBattery1)); set => _minSocBattery1 = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public float SetValueBattery1 { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_setValueBattery1)); set => _setValueBattery1 = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public SinexcelActiveChargeDischarge ActiveChargeDischarge { get => (SinexcelActiveChargeDischarge)ConvertBitPatternToFloat(_activeChargeDischarge); set => _activeChargeDischarge = (UInt32)value; } public float ActiveChargeDischargePower { get => ConvertBitPatternToFloat(_activeChargeDischargePower); set => _activeChargeDischargePower = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } // ─────────────────────────────────────────────── // Protection & PV Mode // ─────────────────────────────────────────────── public SinexcelIslandProtection EnableIslandProtection { get => (SinexcelIslandProtection)_enableIslandProtection; set => _enableIslandProtection = (UInt32)value; } public SinexcelPvAccessMode PvAccessMode { get => (SinexcelPvAccessMode)_pvAccessMode; set => _pvAccessMode = (UInt32)value; } // ─────────────────────────────────────────────── // System-Level Parameters // ─────────────────────────────────────────────── public float OutputVoltageAdjustmentFactor { get => BitConverter.Int32BitsToSingle(unchecked((int)_outputVoltageAdjustmentFactor)); set => _outputVoltageAdjustmentFactor = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public float SetValueBatteryUndervoltage1 { get => BitConverter.Int32BitsToSingle(unchecked((int)_setValueBatteryUndervoltage1)); set => _setValueBatteryUndervoltage1 = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public float InverterPowerLimit { get => BitConverter.Int32BitsToSingle(unchecked((int)_inverterPowerLimit)); set => _inverterPowerLimit = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } // ─────────────────────────────────────────────── // Battery 2 Parameters // ─────────────────────────────────────────────── public float Battery2Capacity { get => BitConverter.Int32BitsToSingle(unchecked((int)_battery2Capacity)); set => _battery2Capacity = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public float MaxChargingCurrentBattery2 { get => BitConverter.Int32BitsToSingle(unchecked((int)_maxChargingCurrentBattery2)); set => _maxChargingCurrentBattery2 = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public float MaxDischargingCurrentBattery2 { get => BitConverter.Int32BitsToSingle(unchecked((int)_maxDischargingCurrentBattery2)); set => _maxDischargingCurrentBattery2 = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public float Battery2RatedVoltage { get => BitConverter.Int32BitsToSingle(unchecked((int)_battery2RatedVoltage)); set => _battery2RatedVoltage = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public float Battery2MinSoc { get => BitConverter.Int32BitsToSingle(unchecked((int)_battery2MinSoc)); set => _battery2MinSoc = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public float Battery2OverVoltageSetting { get => BitConverter.Int32BitsToSingle(unchecked((int)_battery2OverVoltageSetting)); set => _battery2OverVoltageSetting = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public float Battery2UnderVoltageSetpoint { get => BitConverter.Int32BitsToSingle(unchecked((int)_battery2UnderVoltageSetpoint)); set => _battery2UnderVoltageSetpoint = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } // ─────────────────────────────────────────────── // Parallel / System Settings // ─────────────────────────────────────────────── public SinexcelMachineMode MachineMode { get => (SinexcelMachineMode)ConvertBitPatternToFloat(_singleOrParallelMachine); set => _singleOrParallelMachine = (UInt32)value; } public UInt32 NumberOfSystemModules { get => (UInt32)ConvertBitPatternToFloat(_numberOfSystemModules); set => _numberOfSystemModules = value; } public UInt32 ParallelModuleMachineNumber { get => (UInt32)ConvertBitPatternToFloat(_parallelModuleMachineNumber); set => _parallelModuleMachineNumber = value; } public AccreditedCountry AccreditedCountry { get => (AccreditedCountry)ConvertBitPatternToFloat(_accreditedCountries); set => _accreditedCountries = (UInt32)value; } // ─────────────────────────────────────────────── // Control Commands // ─────────────────────────────────────────────── public float PowerOn { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_powerOn)); set => _powerOn = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public float PowerOff { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_powerOff)); set => _powerOff = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public float FaultClearing { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_faultClearing)); set => _faultClearing = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } // ─────────────────────────────────────────────── // Meter & Battery Control // ─────────────────────────────────────────────── public float MeterReverseManualDetection { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_meterReverseManualDetection)); set => _meterReverseManualDetection = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public Voltage BatteryVoltage { get => (Voltage)ConvertBitPatternToFloat(_batteryVoltage); set => _batteryVoltage = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public SinexcelBatteryRating BatteryRating { get => (SinexcelBatteryRating)ConvertBitPatternToFloat(_batteryRating); set => _batteryRating = (UInt32)value; } public float Battery1Activation { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_battery1Activation)); set => _battery1Activation = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } public float Battery2Activation { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_battery2Activation)); set => _battery2Activation = BitConverter.ToUInt32(BitConverter.GetBytes(value), 0); } // ─────────────────────────────────────────────── // Electric Meter Operating State // ─────────────────────────────────────────────── public MeterStatus ElectricMeterOperatingState { get => (MeterStatus)BitConverter.Int32BitsToSingle(unchecked((Int32)_electricMeterOperatingState)); // 0 = Offline, 1 = Online } // ─────────────────────────────────────────────── // Electric Meter Voltages (V) // ─────────────────────────────────────────────── public Voltage ElectricMeterAPhaseVoltage { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_electricMeterAPhaseVoltage)); } public Voltage ElectricMeterBPhaseVoltage { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_electricMeterBPhaseVoltage)); } public Voltage ElectricMeterCPhaseVoltage { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_electricMeterCPhaseVoltage)); } // ─────────────────────────────────────────────── // Electric Meter Currents (A) // ─────────────────────────────────────────────── public Current ElectricMeterAPhaseCurrent { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_electricMeterAPhaseCurrent)); } public Current ElectricMeterBPhaseCurrent { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_electricMeterBPhaseCurrent)); } public Current ElectricMeterCPhaseCurrent { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_electricMeterCPhaseCurrent)); } // ─────────────────────────────────────────────── // Electric Meter Active Power (kW) // ─────────────────────────────────────────────── public ActivePower ElectricMeterAPhaseActivePower { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_electricMeterAPhaseActivePower)); } public ActivePower ElectricMeterBPhaseActivePower { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_electricMeterBPhaseActivePower)); } public ActivePower ElectricMeterCPhaseActivePower { get => BitConverter.Int32BitsToSingle(unchecked((Int32)_electricMeterCPhaseActivePower)); } // ─────────────────────────────────────────────── // Conversion methodes // ─────────────────────────────────────────────── private static Single IntToFloat(Int32 intValue) { byte[] intBytes = BitConverter.GetBytes(intValue); float f = BitConverter.ToSingle(intBytes, 0); return f; } private static Single UIntToFloat(UInt32 uintValue) { byte[] uintBytes = BitConverter.GetBytes(uintValue); float f = BitConverter.ToSingle(uintBytes, 0); return f; } public static float ConvertBitPatternToFloat(uint rawValue) { byte[] bytes = BitConverter.GetBytes(rawValue); return BitConverter.ToSingle(bytes, 0); } }