From 1768dbb504f755f1d6da833ea6a8915cf2bd966f Mon Sep 17 00:00:00 2001 From: atef Date: Tue, 20 Feb 2024 17:43:23 +0100 Subject: [PATCH] Update IEM3kGridMeter --- .../IEM3kGridMeter/IEM3kGridMeterRegisters.cs | 69 +++++++++++++------ 1 file changed, 48 insertions(+), 21 deletions(-) diff --git a/csharp/Lib/Devices/IEM3kGridMeter/IEM3kGridMeterRegisters.cs b/csharp/Lib/Devices/IEM3kGridMeter/IEM3kGridMeterRegisters.cs index cefb74044..d7db41717 100644 --- a/csharp/Lib/Devices/IEM3kGridMeter/IEM3kGridMeterRegisters.cs +++ b/csharp/Lib/Devices/IEM3kGridMeter/IEM3kGridMeterRegisters.cs @@ -1,6 +1,8 @@ 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 @@ -12,34 +14,59 @@ using Float32 = Single; [AddressOffset(-2)] // why? public class Iem3KGridMeterRegisters : IAc3Meter { + private const Float32 ZeroBecauseReactivePowerNotSupported = 0; // TODO - // The registers below are kept as example (from EmuMeter) - // replace with actual registers from datasheet + + [HoldingRegister(3054)] private Float32 _ActivePowerL1; + [HoldingRegister(3056)] private Float32 _ActivePowerL2; + [HoldingRegister(3058)] private Float32 _ActivePowerL3; - [HoldingRegister(9002)] private Float32 _ActivePowerL1; - [HoldingRegister(9004)] private Float32 _ActivePowerL2; - [HoldingRegister(9006)] private Float32 _ActivePowerL3; + [HoldingRegister(3000)] private Float32 _CurrentL1; + [HoldingRegister(3002)] private Float32 _CurrentL2; + [HoldingRegister(3004)] private Float32 _CurrentL3; + + [HoldingRegister(3028)] private Float32 _VoltageL1N; + [HoldingRegister(3030)] private Float32 _VoltageL2N; + [HoldingRegister(3032)] private Float32 _VoltageL3N; + + [HoldingRegister(3110)] private Float32 _Frequency; - [HoldingRegister(9012)] private Float32 _ReactivePowerL1; - [HoldingRegister(9014)] private Float32 _ReactivePowerL2; - [HoldingRegister(9016)] private Float32 _ReactivePowerL3; + //[HoldingRegister(9012)] private Float32 _ReactivePowerL1; + //[HoldingRegister(9014)] private Float32 _ReactivePowerL2; + //[HoldingRegister(9016)] private Float32 _ReactivePowerL3; - [HoldingRegister(9022)] private Float32 _ApparentPowerL1; - [HoldingRegister(9024)] private Float32 _ApparentPowerL2; - [HoldingRegister(9026)] private Float32 _ApparentPowerL3; + //[HoldingRegister(9012)] private Float32 _ReactivePowerL1; + //[HoldingRegister(9014)] private Float32 _ReactivePowerL2; + //[HoldingRegister(9016)] private Float32 _ReactivePowerL3; - [HoldingRegister(9102)] private Float32 _CurrentL1; - [HoldingRegister(9104)] private Float32 _CurrentL2; - [HoldingRegister(9106)] private Float32 _CurrentL3; + //[HoldingRegister(9022)] private Float32 _ApparentPowerL1; + //[HoldingRegister(9024)] private Float32 _ApparentPowerL2; + //[HoldingRegister(9026)] private Float32 _ApparentPowerL3; - [HoldingRegister(9200)] private Float32 _VoltageL1N; - [HoldingRegister(9202)] private Float32 _VoltageL2N; - [HoldingRegister(9204)] private Float32 _VoltageL3N; - - [HoldingRegister(9310)] private Float32 _Frequency; - - public Ac3Bus Ac => throw new NotImplementedException(); + + 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 + }; }