using InnovEnergy.Lib.Protocols.Modbus.Reflection.Attributes; using InnovEnergy.Lib.StatusApi.DeviceTypes; using InnovEnergy.Lib.Units.Composite; using static System.Math; #pragma warning disable CS0649 namespace InnovEnergy.Lib.Devices.IEM3kGridMeter; using Float32 = Single; [AddressOffset(-2)] // why? public class Iem3KGridMeterRegisters : IAc3Meter { private const Float32 ZeroBecauseReactivePowerNotSupported = 0; // TODO [HoldingRegister(3054)] public Float32 ActivePowerL1; // in Kw [HoldingRegister(3056)] public Float32 ActivePowerL2; // in Kw [HoldingRegister(3058)] public Float32 ActivePowerL3; // in Kw [HoldingRegister(3060)] public Float32 TotalActivePower; // in Kw [HoldingRegister(3000)] public Float32 CurrentL1; [HoldingRegister(3002)] public Float32 CurrentL2; [HoldingRegister(3004)] public Float32 CurrentL3; // [HoldingRegister(3028)] public Float32 VoltageL1N; [HoldingRegister(3030)] public Float32 VoltageL2N; [HoldingRegister(3032)] public Float32 VoltageL3N; [HoldingRegister(3518)] public Float32 ActiveEnergyImportL1; [HoldingRegister(3522)] public Float32 ActiveEnergyImportL2; [HoldingRegister(3526)] public Float32 ActiveEnergyImportL3; [HoldingRegister(45100)] public Float32 TotalActiveImport; [HoldingRegister(45102)] public Float32 TotalActiveExport; [HoldingRegister(3110)] private Float32 _frequency; public Ac3Bus Ac => new Ac3Bus { L1 = new () { Current = Abs(CurrentL1), Voltage = Abs(VoltageL1N), Phi = Atan2(ZeroBecauseReactivePowerNotSupported, ActivePowerL1) }, L2 = new () { Current = Abs(CurrentL2), Voltage = Abs(VoltageL2N), Phi = Atan2(ZeroBecauseReactivePowerNotSupported, ActivePowerL2) }, L3 = new () { Current = Abs(CurrentL3), Voltage = Abs(VoltageL3N), Phi = Atan2(ZeroBecauseReactivePowerNotSupported, ActivePowerL3) }, Frequency = _frequency }; }